From 2b7b287c4ad23be519a468bfb5482434c18c7c0a Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Mon, 11 Aug 2025 10:10:51 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=E6=A0=91=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E5=85=A8=E8=A1=A8=E6=A0=BC=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=94=AF=E6=8C=81editSaveMode=E9=83=A8=E4=BB=B6=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 f71343ee..e1faf95a 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({ -- Gitee From e9eec08450eb375a684dfd6469362ed718a2a2dd Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Mon, 11 Aug 2025 10:11:15 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=A0=91=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E5=A2=9E=E5=BC=BA=E8=A1=A8=E6=A0=BC=E5=A4=B4=E6=9C=AA?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E5=AF=B9=E9=BD=90=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/control/tree-grid-ex/tree-grid-ex.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/control/tree-grid-ex/tree-grid-ex.scss b/src/control/tree-grid-ex/tree-grid-ex.scss index 0865b019..7d16d0a1 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; -- Gitee From 4512dcd66111a089a2c7c52fbce9dcbcbac3c696 Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Mon, 11 Aug 2025 10:11:27 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20=E6=A0=91=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=94=AF=E6=8C=81=E5=86=85=E7=BD=AE=E5=AF=BC?= =?UTF-8?q?=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../control-navigation/provider/index.ts | 3 +- src/control/tree-grid-ex/tree-grid-ex.tsx | 66 ++++++++++--------- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/common/control-navigation/provider/index.ts b/src/common/control-navigation/provider/index.ts index 71209757..b4e53033 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/tree-grid-ex/tree-grid-ex.tsx b/src/control/tree-grid-ex/tree-grid-ex.tsx index 6cbef9b0..7c8e1ad5 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(); + }, + }} + + )} + + ); }, }); -- Gitee From cad1e42c528ff45884f2fc68946f1fda611a1123 Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Mon, 11 Aug 2025 10:12:18 +0800 Subject: [PATCH 4/6] =?UTF-8?q?fix:=20=E9=9D=A2=E5=8C=85=E5=B1=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=85=BC=E5=AE=B9=E5=A4=9A=E5=BA=94=E7=94=A8=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=93=E5=AD=98=E8=A7=86=E5=9B=BEdatainfo?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nav-breadcrumb.controller.ts | 9 ++++- .../nav-breadcrumb/nav-breadcrumb.service.ts | 5 ++- .../nav-breadcrumb/nav-breadcrumb.tsx | 6 +-- .../nav-breadcrumb/nav-breadcrumb.util.ts | 39 +++++++++++++++---- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/panel-component/nav-breadcrumb/nav-breadcrumb.controller.ts b/src/panel-component/nav-breadcrumb/nav-breadcrumb.controller.ts index ae9b2610..371a94f9 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 d83faf8c..5c4a6cc3 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 e148d763..a76a851d 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 52bdd1cd..23da75fa 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; } } -- Gitee From c04af14785b660418e214c788756a8115cf2f12e Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Mon, 11 Aug 2025 10:12:31 +0800 Subject: [PATCH 5/6] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Ddrtab=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E9=9A=90=E8=97=8F=E7=BC=96=E8=BE=91=E9=A1=B9=E6=97=A0?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/control/drtab/drtab.controller.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/control/drtab/drtab.controller.ts b/src/control/drtab/drtab.controller.ts index 772a2d68..1fa218f9 100644 --- a/src/control/drtab/drtab.controller.ts +++ b/src/control/drtab/drtab.controller.ts @@ -471,10 +471,6 @@ export class DRTabController * @memberof DRTabController */ setVisible(ctrlName: 'form' | 'navPos'): void { - if (this.state.hideEditItem) { - // 不显示编辑项的时候不需要控制显示隐藏 - return; - } const viewForm = this.view.layoutPanel?.panelItems.view_form; if (ctrlName === 'form') { if (viewForm) { -- Gitee From 3d341a7ef81aa00a121cbcca89f2e50834f5f5b8 Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Mon, 11 Aug 2025 11:47:30 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4drtab=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E7=BC=96=E8=BE=91=E9=A1=B9=E9=BB=98=E8=AE=A4=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E8=A1=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/control/drtab/drtab.controller.ts | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/control/drtab/drtab.controller.ts b/src/control/drtab/drtab.controller.ts index 1fa218f9..741ab99d 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'); + } } /** @@ -471,6 +497,10 @@ export class DRTabController * @memberof DRTabController */ setVisible(ctrlName: 'form' | 'navPos'): void { + if (this.state.hideEditItem) { + // 不显示编辑项的时候不需要控制显示隐藏 + return; + } const viewForm = this.view.layoutPanel?.panelItems.view_form; if (ctrlName === 'form') { if (viewForm) { -- Gitee