diff --git a/src/common/control-navigation/provider/index.ts b/src/common/control-navigation/provider/index.ts index 71209757f566bd1d70c4a705dbe2075de44bc921..b4e53033491f62b38d5fe573c0fc466395dae617 100644 --- a/src/common/control-navigation/provider/index.ts +++ b/src/common/control-navigation/provider/index.ts @@ -17,7 +17,8 @@ export function getNavigationProvider( const { controlType } = controller.model; if (controlType === 'CALENDAR') return new CalendarNavigationProvider(controller); - if (controlType === 'TREEVIEW') return new TreeNavigationProvider(controller); + if (controlType === 'TREEVIEW' || controlType === 'TREEGRIDEX') + return new TreeNavigationProvider(controller); if (controlType === 'MAP') return new MapNavigationProvider(controller); return new NavgationBaseProvider(controller); } diff --git a/src/control/drtab/drtab.controller.ts b/src/control/drtab/drtab.controller.ts index 772a2d680ed111244e6d7db59f76bb34e5f6f34f..741ab99d0fefc3e095434165b0633ab030d2988f 100644 --- a/src/control/drtab/drtab.controller.ts +++ b/src/control/drtab/drtab.controller.ts @@ -323,6 +323,7 @@ export class DRTabController } await this.calcDrTabPagesState(); this.handleFormChange(); + this.doDefaultSelect(); }); this.form.evt.on('onLoadDraftSuccess', () => { this.handleFormChange(); @@ -335,6 +336,31 @@ export class DRTabController if (!this.form) { await this.calcDrTabPagesState(); } + + // 表单已经加载完成执行默认选中,否则加载完成事件里执行 + if (this.form && this.form.state.isLoaded) { + this.doDefaultSelect(); + } + } + + /** + * @description 处理第一次的默认选中 + * @memberof DRTabController + */ + doDefaultSelect(): void { + const viewForm = this.view.layoutPanel?.panelItems.view_form; + if (viewForm) { + viewForm.state.visible = false; + viewForm.state.keepAlive = false; + } + + // 显示编辑项且激活表单时显示表单 + if ( + !this.state.hideEditItem && + this.state.activeName === this.model.uniqueTag + ) { + this.setVisible('form'); + } } /** diff --git a/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.ts b/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.ts index f71343ee52273ab12a8fc26d44de223dca198133..e1faf95a5e805d8e2ae7d185365fc0d8c8b6bb2b 100644 --- a/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.ts +++ b/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.ts @@ -43,7 +43,10 @@ export function useAllEdit( }); const onBlur = (): void => { - c.treeGrid.save(props.row.data); + // 失焦保存模式时,触发保存 + if (c.treeGrid.editSaveMode === 'cell-blur') { + c.treeGrid.save(props.row.data); + } }; const gridEditItemProps = reactive({ diff --git a/src/control/tree-grid-ex/tree-grid-ex.scss b/src/control/tree-grid-ex/tree-grid-ex.scss index 0865b019aa18ace519506ffb8644086834924255..7d16d0a10a480fa01539c0b28013bdc530f8b358 100644 --- a/src/control/tree-grid-ex/tree-grid-ex.scss +++ b/src/control/tree-grid-ex/tree-grid-ex.scss @@ -127,7 +127,7 @@ $control-treegridex-footer: ( } // 修复表头换行排序图标错位问题 - .is-sortable.el-table__cell { + .el-table__cell { .cell { display: flex; align-items: center; diff --git a/src/control/tree-grid-ex/tree-grid-ex.tsx b/src/control/tree-grid-ex/tree-grid-ex.tsx index 6cbef9b01e6c16f5befe742f11551cdd3f8f8d48..7c8e1ad533ac118d5ae42cb89cd9e961bfe6d07b 100644 --- a/src/control/tree-grid-ex/tree-grid-ex.tsx +++ b/src/control/tree-grid-ex/tree-grid-ex.tsx @@ -316,38 +316,40 @@ export const TreeGridExControl = defineComponent({ ); }; return ( - - {this.c.state.isLoaded && ( - - {{ - empty: this.renderNoData, - default: (): VNodeArrayChildren => { - return [ - this.renderColumns.map((model, index) => { - return renderColumn(model, index); - }), - ]; - }, - append: () => { - return this.renderPopover(); - }, - }} - - )} - + + + {this.c.state.isLoaded && ( + + {{ + empty: this.renderNoData, + default: (): VNodeArrayChildren => { + return [ + this.renderColumns.map((model, index) => { + return renderColumn(model, index); + }), + ]; + }, + append: () => { + return this.renderPopover(); + }, + }} + + )} + + ); }, }); diff --git a/src/panel-component/nav-breadcrumb/nav-breadcrumb.controller.ts b/src/panel-component/nav-breadcrumb/nav-breadcrumb.controller.ts index ae9b261042d82d0ffa72921abb4d89f4fa1b8ddc..371a94f9190b0d335d20b45e21100dd51e241af5 100644 --- a/src/panel-component/nav-breadcrumb/nav-breadcrumb.controller.ts +++ b/src/panel-component/nav-breadcrumb/nav-breadcrumb.controller.ts @@ -18,6 +18,7 @@ import { BreadcrumbMsg, NavBreadcrumbState } from './nav-breadcrumb.state'; import { NavBreadcrumbService } from './nav-breadcrumb.service'; import { getAppFuncByViewName, + getAppIndexViewName, getCurViewName, getIndexBreadcrumb, getMenuItemByTag, @@ -145,9 +146,10 @@ export class NavBreadcrumbController extends PanelItemController const menuTag = getMenuTag(routePath.pathNodes); // 缓存模式:点击面包屑时或者浏览器路由返回,会存在缓存数据,此时需将缓存数据项后续数据删除 const chacheItem = this.service.getItem({ fullPath, viewName }); + const indexViewName = getAppIndexViewName(this.panel.context); if (chacheItem) { // 首页特殊处理 - if (chacheItem.viewName === ibiz.hub.defaultAppIndexViewName) { + if (chacheItem.viewName === indexViewName) { this.service.setChache([ { ...getIndexBreadcrumb(this.panel.context), fullPath }, ]); @@ -245,7 +247,10 @@ export class NavBreadcrumbController extends PanelItemController } Object.assign(result, chacheItem); } - const viewInfo = getViewInfoByViewStack(node.viewName); + const viewInfo = getViewInfoByViewStack( + node.viewName, + this.panel.context, + ); if (viewInfo) { Object.assign(result, reject(isNil, viewInfo)); } diff --git a/src/panel-component/nav-breadcrumb/nav-breadcrumb.service.ts b/src/panel-component/nav-breadcrumb/nav-breadcrumb.service.ts index d83faf8c6e318fc3fbdc96dbeb07708aa2b2b8c5..5c4a6cc3ba72690b34dfac056c4fb4b0ed9d30fd 100644 --- a/src/panel-component/nav-breadcrumb/nav-breadcrumb.service.ts +++ b/src/panel-component/nav-breadcrumb/nav-breadcrumb.service.ts @@ -1,6 +1,6 @@ import { clone, isNil, reject } from 'ramda'; import { BreadcrumbMsg } from './nav-breadcrumb.state'; -import { getIndexBreadcrumb } from './nav-breadcrumb.util'; +import { getAppIndexViewName, getIndexBreadcrumb } from './nav-breadcrumb.util'; /** * @description 面包屑服务 @@ -105,7 +105,8 @@ export class NavBreadcrumbService { getItem(data: IData): BreadcrumbMsg | undefined { // 首页视图特殊处理 const { viewName = '', fullPath = '' } = data; - if (viewName === 'index') { + const indexViewName = getAppIndexViewName(this.context); + if (viewName === indexViewName) { return getIndexBreadcrumb(this.context); } const item = this.chache.find( diff --git a/src/panel-component/nav-breadcrumb/nav-breadcrumb.tsx b/src/panel-component/nav-breadcrumb/nav-breadcrumb.tsx index e148d76323e005994c687a700332eb20ddf039d8..a76a851d9673dad792bd6299557d1eb3fa2efcd2 100644 --- a/src/panel-component/nav-breadcrumb/nav-breadcrumb.tsx +++ b/src/panel-component/nav-breadcrumb/nav-breadcrumb.tsx @@ -4,6 +4,7 @@ import { IPanelRawItem } from '@ibiz/model-core'; import { useRoute, useRouter } from 'vue-router'; import { NavBreadcrumbController } from './nav-breadcrumb.controller'; import { BreadcrumbMsg } from './nav-breadcrumb.state'; +import { getAppIndexViewName } from './nav-breadcrumb.util'; import './nav-breadcrumb.scss'; export interface dropdownAction { @@ -56,10 +57,9 @@ export const NavBreadcrumb = defineComponent({ const items = computed(() => { const { breadcrumbItems } = c.state; let result = breadcrumbItems.filter(x => x.caption); + const indexViewName = getAppIndexViewName(c.panel.context); if (!c.showHome) { - result = result.filter( - x => x.viewName !== ibiz.hub.defaultAppIndexViewName, - ); + result = result.filter(x => x.viewName !== indexViewName); } return result; }); diff --git a/src/panel-component/nav-breadcrumb/nav-breadcrumb.util.ts b/src/panel-component/nav-breadcrumb/nav-breadcrumb.util.ts index 52bdd1cddf3f331308f8c504881e8d43fb7d5065..23da75fa0be8758edf26cc49677bc1f735310cae 100644 --- a/src/panel-component/nav-breadcrumb/nav-breadcrumb.util.ts +++ b/src/panel-component/nav-breadcrumb/nav-breadcrumb.util.ts @@ -8,6 +8,22 @@ import { import { IAppMenuController, RouteConst } from '@ibiz-template/runtime'; import { BreadcrumbMsg } from './nav-breadcrumb.state'; +/** + * @description 获取首页视图名称 + * @export + * @param {IContext} context + * @returns {*} {string} + */ +export function getAppIndexViewName(context: IContext): string { + const targetAppModel = ibiz.hub.getAppSourceModel(context.srfappid); + if (targetAppModel.getDefaultPSAppIndexView) { + const view = targetAppModel.getDefaultPSAppIndexView as IModel; + const name = view.path.split('/').pop().replace('.json', ''); + return name; + } + return ibiz.hub.defaultAppIndexViewName; +} + /** * @description 获取首页导航信息 * @export @@ -16,8 +32,9 @@ import { BreadcrumbMsg } from './nav-breadcrumb.state'; export function getIndexBreadcrumb(context: IContext): BreadcrumbMsg { const app = ibiz.hub.getApp(context.srfappid); const caption = app.model.caption; + const indexViewName = getAppIndexViewName(context); return { - viewName: ibiz.hub.defaultAppIndexViewName, + viewName: indexViewName, fullPath: '/', type: 'default', caption, @@ -97,7 +114,10 @@ export function getCurViewName(router: Router): string { * @param {string} viewName * @return {*} {(IData | undefined)} */ -export function getViewInfoByViewStack(viewName: string): IData | undefined { +export function getViewInfoByViewStack( + viewName: string, + context: IContext, +): IData | undefined { if (viewName === RouteConst.ROUTE_MODAL_TAG) { return { viewName, @@ -105,21 +125,24 @@ export function getViewInfoByViewStack(viewName: string): IData | undefined { isModal: true, }; } - const view = ibiz.util.viewStack.getViewByCodeName(viewName); + const view = ibiz.appUtil.viewCacheCenter.get(viewName); + const indexViewName = getAppIndexViewName(context); if (view) { // 识别嵌入视图 let isEmbed = false; - if ( - view.parentView && - view.parentView.model.codeName !== ibiz.hub.defaultAppIndexViewName - ) { + if (view.parentView && view.parentView.model.codeName !== indexViewName) { isEmbed = true; } - return { + const data = view.state.srfactiveviewdata; + const result = { viewName: view.model.codeName!, caption: view.model.caption, isEmbed, }; + if (data && data.srfkey) { + Object.assign(result, { dataInfo: data.srfmajortext || '' }); + } + return result; } }