From c080a2ed2d621fd093016676aff63ffba8818061 Mon Sep 17 00:00:00 2001 From: ShineKOT <1917095344@qq.com> Date: Tue, 9 Sep 2025 17:50:24 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=A0=91=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ src/control/tree/tree.tsx | 13 ++++++++++++- src/view-engine/tree-view.engine.ts | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22809a911..16efa5a8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ - 新增部件参数batchtoolbarmode、全局参数batchToolbarMode,用于设置批操作工具栏显示模式(default 选数据即显示,multiple 需选 2 条以上),仅限卡片、列表、表格、树表格使用 - 新增列表部件样式-扩展视图3:仅非分组列表和分组样式2列表支持,实现列表的从下往上的绘制,同时滚动加载也支持上滚加载 +### Fixed + +- 修复树选中异常 + ## [0.7.41-alpha.24] - 2025-09-04 ### Added diff --git a/src/control/tree/tree.tsx b/src/control/tree/tree.tsx index 9513aa601..8358d668a 100644 --- a/src/control/tree/tree.tsx +++ b/src/control/tree/tree.tsx @@ -110,7 +110,7 @@ export const TreeControl = defineComponent({ data: { type: Array, required: false }, }, setup(props) { - const c = useControlController( + const c: TreeController = useControlController( (...args) => new TreeController(...args), ); @@ -136,6 +136,17 @@ export const TreeControl = defineComponent({ } }); + c.evt.on('onSelectionChange', async () => { + if (!treeRef.value) return; + if (c.state.singleSelect) { + treeRef.value.setCurrentKey(c.state.selectedData[0]?._id); + } else { + treeRef.value.setCheckedKeys( + c.state.selectedData.map(item => item._id), + ); + } + }); + onUnmounted(() => { c.counter?.offChange(fn); }); diff --git a/src/view-engine/tree-view.engine.ts b/src/view-engine/tree-view.engine.ts index 652e7d938..471fec197 100644 --- a/src/view-engine/tree-view.engine.ts +++ b/src/view-engine/tree-view.engine.ts @@ -22,9 +22,11 @@ export class TreeViewEngine extends MDViewEngine { async onCreated(): Promise { await super.onCreated(); + const { model } = this.view; if (!this.view.slotProps.tree) { this.view.slotProps.tree = {}; } + this.view.slotProps.tree.mdctrlActiveMode = (model as IData).mdctrlActiveMode!; } get tree(): ITreeController { -- Gitee From 119d48634bf6b9ab6e818978174c99af217a5cbe Mon Sep 17 00:00:00 2001 From: ShineKOT <1917095344@qq.com> Date: Tue, 9 Sep 2025 17:51:48 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=9A=E9=A1=B9=E9=80=89=E6=8B=A9=E8=A7=86=E5=9B=BE?= =?UTF-8?q?=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=A4=9A=E9=A1=B9=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=EF=BC=88=E5=B7=A6=E5=8F=B3=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=EF=BC=89=E8=A7=86=E5=9B=BE=E5=8F=82=E6=95=B0checkstrictly?= =?UTF-8?q?=EF=BC=88=E6=98=AF=E5=90=A6=E4=B8=A5=E6=A0=BC=E7=9A=84=E9=81=B5?= =?UTF-8?q?=E5=BE=AA=E7=A9=BF=E6=A2=AD=E7=A9=BA=E5=B7=A6=E5=8F=B3=E4=BA=92?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E8=81=94=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/view-engine/mpickup-view-engine.ts | 40 ++++++++++++++++++++------ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16efa5a8d..5a6fbadcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - 图表新增内置导航功能 - 新增部件参数batchtoolbarmode、全局参数batchToolbarMode,用于设置批操作工具栏显示模式(default 选数据即显示,multiple 需选 2 条以上),仅限卡片、列表、表格、树表格使用 - 新增列表部件样式-扩展视图3:仅非分组列表和分组样式2列表支持,实现列表的从下往上的绘制,同时滚动加载也支持上滚加载 +- 新增数据多项选择视图,数据多项选择视图(左右关系)视图参数checkstrictly(是否严格的遵循穿梭空左右互相关联) ### Fixed diff --git a/src/view-engine/mpickup-view-engine.ts b/src/view-engine/mpickup-view-engine.ts index 7618f0b09..274c54516 100644 --- a/src/view-engine/mpickup-view-engine.ts +++ b/src/view-engine/mpickup-view-engine.ts @@ -26,6 +26,13 @@ export class MPickupViewEngine extends PickupViewEngine { IMPickupViewEvent >; + /** + * @description 是否严格的遵循穿梭空左右互相关联 + * @type {boolean} + * @memberof MPickupViewEngine + */ + checkStrictly: boolean = true; + /** * 简单列表控制器 * @@ -67,6 +74,12 @@ export class MPickupViewEngine extends PickupViewEngine { this.view.slotProps.simplelist.isSimple = true; this.view.slotProps.simplelist.singleSelect = false; this.view.slotProps.pickupviewpanel.singleSelect = false; + if (this.view.params.checkstrictly) { + this.checkStrictly = + this.view.params.checkstrictly === 'true' || + this.view.params.checkstrictly === true; + delete this.view.params.selecteddata; + } } /** @@ -167,14 +180,22 @@ export class MPickupViewEngine extends PickupViewEngine { * @memberof MPickupViewEngine */ protected async handlePushSimpleListItems(data: IData[]): Promise { - // 每次添加的都是多数据部件当前页数据,因此需先将原来简单列表的当前页数据过滤掉 - const items = await this.pickupViewPanel.getAllData(); - // 过滤出非当前页数据 - const selectItems = this.simpleList - .getAllData() - .filter(selected => !items.some(item => item.srfkey === selected.srfkey)); - // 将多数据部件当前页数据加入简单列表选中 - selectItems.push(...data); + let selectItems: IData[] = []; + if (this.checkStrictly) { + // 每次添加的都是多数据部件当前页数据,因此需先将原来简单列表的当前页数据过滤掉 + const items = await this.pickupViewPanel.getAllData(); + // 过滤出非当前页数据 + selectItems = this.simpleList + .getAllData() + .filter( + selected => !items.some(item => item.srfkey === selected.srfkey), + ); + // 将多数据部件当前页数据加入简单列表选中 + selectItems.push(...data); + } else { + const allData = this.simpleList.getAllData(); + selectItems = [...allData, ...data]; + } // 去重items const uniqueItems = this.handleUniqueItems(selectItems); this.setSelectedData(uniqueItems); @@ -245,7 +266,8 @@ export class MPickupViewEngine extends PickupViewEngine { * @memberof MPickupViewEngine */ protected setSelectedData(items: IData[]): void { - super.setSelectedData(items); + // 严格检查模式时需同步穿梭框左右的选中数据 + if (this.checkStrictly) super.setSelectedData(items); this.simpleList.setData(items); } -- Gitee From 2900ab8a72ef34840571aa6967366cdaca0ca7ec Mon Sep 17 00:00:00 2001 From: ShineKOT <1917095344@qq.com> Date: Tue, 9 Sep 2025 18:17:18 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8C=85?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/control/tree/tree.tsx | 22 +++++++++++----------- src/view-engine/tree-view.engine.ts | 4 +++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/control/tree/tree.tsx b/src/control/tree/tree.tsx index 8358d668a..a1d32e617 100644 --- a/src/control/tree/tree.tsx +++ b/src/control/tree/tree.tsx @@ -136,17 +136,6 @@ export const TreeControl = defineComponent({ } }); - c.evt.on('onSelectionChange', async () => { - if (!treeRef.value) return; - if (c.state.singleSelect) { - treeRef.value.setCurrentKey(c.state.selectedData[0]?._id); - } else { - treeRef.value.setCheckedKeys( - c.state.selectedData.map(item => item._id), - ); - } - }); - onUnmounted(() => { c.counter?.offChange(fn); }); @@ -216,6 +205,17 @@ export const TreeControl = defineComponent({ }, ); + c.evt.on('onSelectionChange', async () => { + if (!treeRef.value) return; + if (c.state.singleSelect) { + treeRef.value.setCurrentKey(c.state.selectedData[0]?._id); + } else { + treeRef.value.setCheckedKeys( + c.state.selectedData.map(item => item._id), + ); + } + }); + /** * 编辑当前节点的文本 * @author lxm diff --git a/src/view-engine/tree-view.engine.ts b/src/view-engine/tree-view.engine.ts index 471fec197..018e5713a 100644 --- a/src/view-engine/tree-view.engine.ts +++ b/src/view-engine/tree-view.engine.ts @@ -26,7 +26,9 @@ export class TreeViewEngine extends MDViewEngine { if (!this.view.slotProps.tree) { this.view.slotProps.tree = {}; } - this.view.slotProps.tree.mdctrlActiveMode = (model as IData).mdctrlActiveMode!; + this.view.slotProps.tree.mdctrlActiveMode = ( + model as IData + ).mdctrlActiveMode!; } get tree(): ITreeController { -- Gitee From a04042d95e6f1892b7c2f3c46887fac9e5cc02cc Mon Sep 17 00:00:00 2001 From: ShineKOT <1917095344@qq.com> Date: Tue, 9 Sep 2025 18:18:22 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/view-engine/mpickup-view-engine.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view-engine/mpickup-view-engine.ts b/src/view-engine/mpickup-view-engine.ts index 274c54516..0745a5810 100644 --- a/src/view-engine/mpickup-view-engine.ts +++ b/src/view-engine/mpickup-view-engine.ts @@ -78,7 +78,7 @@ export class MPickupViewEngine extends PickupViewEngine { this.checkStrictly = this.view.params.checkstrictly === 'true' || this.view.params.checkstrictly === true; - delete this.view.params.selecteddata; + delete this.view.params.checkstrictly; } } -- Gitee