diff --git a/CHANGELOG.md b/CHANGELOG.md index 584d2c9401abea54304508b9eb6f870cfc27d553..b8a347195acd285d094d1fcb1317f5d1ffe65039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ ## Fixed - 修复日历导航栏快速搜索和工具栏行为异常 +- 修复列表默认展开异常 +- 修复选择视图选中数据回显异常 ### Changed diff --git a/src/control/list/list.tsx b/src/control/list/list.tsx index 06e16da8f91d584d5118f7f97150a0474b42d1ad..1bbf276f1afcfef8984d25d5965d510a102b4e6c 100644 --- a/src/control/list/list.tsx +++ b/src/control/list/list.tsx @@ -457,7 +457,7 @@ export const ListControl = defineComponent({ return ( {{ title: () => { diff --git a/src/control/tree/tree.tsx b/src/control/tree/tree.tsx index 6f19eb2c91833b04de6393cd86dad7b0e65d247d..478091bbf1ff8c71ef85090afa5bd11ae0b73f48 100644 --- a/src/control/tree/tree.tsx +++ b/src/control/tree/tree.tsx @@ -1,57 +1,57 @@ /* eslint-disable no-nested-ternary */ import { useControlController, useNamespace } from '@ibiz-template/vue3-util'; import { + ref, + Ref, + VNode, + watch, computed, - defineComponent, nextTick, + PropType, onMounted, onUnmounted, - PropType, - Ref, - ref, + defineComponent, resolveComponent, - VNode, - watch, } from 'vue'; import { MenuItem } from '@imengyu/vue3-context-menu'; import { createUUID } from 'qx-util'; import { cloneDeep, debounce } from 'lodash-es'; import { - IDETBGroupItem, - IDETBRawItem, - IDETBUIActionItem, - IDEToolbarItem, + IPanel, IDETree, IDETreeNode, - IPanel, + IDETBRawItem, + IDEToolbarItem, + IDETBGroupItem, + IDETBUIActionItem, } from '@ibiz/model-core'; import { - IButtonContainerState, IButtonState, - IControlProvider, ITreeNodeData, - TreeController, AppDataEntity, + TreeController, + IControlProvider, PanelItemEventName, + IButtonContainerState, } from '@ibiz-template/runtime'; -import './tree.scss'; import { RuntimeError } from '@ibiz-template/core'; import { ElTree } from 'element-plus'; import { - AllowDropType, NodeDropType, + AllowDropType, } from 'element-plus/es/components/tree/src/tree.type'; import { isNil } from 'ramda'; import { findNodeData, - formatNodeDropType, - useAppTreeBase, useElTreeUtil, + useAppTreeBase, findChildItems, - getNewNodeControlPanel, - getNodeControlPanel, useLoadMoreUtil, + formatNodeDropType, + getNodeControlPanel, + getNewNodeControlPanel, } from './el-tree-util'; +import './tree.scss'; export const TreeControl = defineComponent({ name: 'IBizTreeControl', @@ -473,29 +473,20 @@ export const TreeControl = defineComponent({ }); }; - // 值变更优化,加载成功后的值变更需要等渲染完成之后执行,其他情况不用 - let selectionWait = false; - c.evt.on('onLoadSuccess', () => { - selectionWait = true; - setTimeout(() => { - selectionWait = false; - }, 200); - }); - - // 选中数据回显 - c.evt.on('onSelectionChange', async () => { - if (selectionWait) { - await nextTick(); - } - if (c.state.singleSelect) { - treeRef.value!.setCurrentKey(c.state.selectedData[0]?._id || undefined); - } else { - // el-tree,会把没选中的反选,且不触发check事件 - treeRef.value!.setCheckedKeys( - c.state.selectedData.map(item => item._id), - ); - } - }); + watch( + () => c.state.selectedData, + () => { + if (!treeRef.value) return; + if (c.state.singleSelect) { + treeRef.value.setCurrentKey(c.state.selectedData[0]?._id); + } else { + // el-tree,会把没选中的反选,且不触发check事件 + treeRef.value.setCheckedKeys( + c.state.selectedData.map(item => item._id), + ); + } + }, + ); /** * 多选时选中节点变更 diff --git a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx index e569da93ea100a7494801155c2ef048e3df1689a..d95adba2d98fb49df173aa34ba11930af41abbde 100644 --- a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx +++ b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx @@ -144,7 +144,9 @@ export const IBizPicker = defineComponent({ // 打开数据选择视图 const openPickUpView = async (e: MouseEvent) => { e.stopPropagation(); - const res = await c.openPickUpView(props.data); + const selectItem: IData[] = []; + if (curValue.value) selectItem.push({ srfkey: props.data[c.valueItem] }); + const res = await c.openPickUpView(props.data, JSON.stringify(selectItem)); if (res && res[0]) { await handleDataSelect(res[0]); } diff --git a/src/view-engine/mpickup-view-engine.ts b/src/view-engine/mpickup-view-engine.ts index 2bb3aea94115c872c0d3998a8c120e5ea215b31e..73bdfa0ed00cc655549be3cdf07a2a38d81b5c61 100644 --- a/src/view-engine/mpickup-view-engine.ts +++ b/src/view-engine/mpickup-view-engine.ts @@ -1,10 +1,10 @@ import { RuntimeModelError } from '@ibiz-template/core'; import { ViewController, - IMPickupViewState, - IMPickupViewEvent, SysUIActionTag, IListController, + IMPickupViewState, + IMPickupViewEvent, IApiMPickupViewCall, } from '@ibiz-template/runtime'; import { IAppDEPickupView } from '@ibiz/model-core'; @@ -57,11 +57,6 @@ export class MPickupViewEngine extends PickupViewEngine { const { childNames } = this.view; childNames.push('simplelist'); - // 设置回显selectedData - if (this.view.params.selecteddata) { - this.selectData = JSON.parse(this.view.params.selecteddata); - delete this.view.params.selecteddata; - } if (!this.view.slotProps.simplelist) { this.view.slotProps.simplelist = {}; } @@ -88,8 +83,7 @@ export class MPickupViewEngine extends PickupViewEngine { this.simpleList.evt.on('onActive', event => { this.simpleListActive(event.data); }); - // 默认回显选中数据 - this.simpleList.setData(this.selectData); + this.setSelectedData(this.selectData); } async call( @@ -151,7 +145,7 @@ export class MPickupViewEngine extends PickupViewEngine { items.splice(index, 1); } }); - this.simpleList.setData(items); + this.setSelectedData(items); } /** @@ -179,7 +173,7 @@ export class MPickupViewEngine extends PickupViewEngine { const items = [...allData, ...data]; // 去重items const uniqueItems = this.handleUniqueItems(items); - this.simpleList.setData(uniqueItems); + this.setSelectedData(uniqueItems); } /** @@ -218,7 +212,7 @@ export class MPickupViewEngine extends PickupViewEngine { * @memberof MPickupViewEngine */ removeAll(): void { - this.simpleList.setData([]); + this.setSelectedData([]); } /** @@ -239,6 +233,17 @@ export class MPickupViewEngine extends PickupViewEngine { items.splice(index, 1); } }); + this.setSelectedData(items); + } + + /** + * @description 设置选中数据 + * @protected + * @param {IData[]} items + * @memberof MPickupViewEngine + */ + protected setSelectedData(items: IData[]): void { + super.setSelectedData(items); this.simpleList.setData(items); } diff --git a/src/view-engine/pickup-view.engine.ts b/src/view-engine/pickup-view.engine.ts index 3dbcc446bed6e77c9d56687553fba65f064cf344..7ead54495e9be4a80f5b5b969068d7ec63e79f10 100644 --- a/src/view-engine/pickup-view.engine.ts +++ b/src/view-engine/pickup-view.engine.ts @@ -1,11 +1,11 @@ import { + SysUIActionTag, ViewEngineBase, ViewController, - IPickupViewPanelController, - SysUIActionTag, IPickupViewState, IPickupViewEvent, IApiPickupViewCall, + IPickupViewPanelController, } from '@ibiz-template/runtime'; import { IAppDEPickupView } from '@ibiz/model-core'; @@ -53,6 +53,10 @@ export class PickupViewEngine extends ViewEngineBase { await super.onCreated(); const { childNames } = this.view; childNames.push('pickupviewpanel'); + if (this.view.params.selecteddata) { + this.selectData = JSON.parse(this.view.params.selecteddata); + delete this.view.params.selecteddata; + } } /** @@ -70,6 +74,18 @@ export class PickupViewEngine extends ViewEngineBase { this.pickupViewPanel.evt.on('onDataActive', event => { this.pickupViewPanelDataActive(event.data); }); + this.setSelectedData(this.selectData); + } + + /** + * @description 设置选中数据 + * @protected + * @param {IData[]} items + * @memberof PickupViewEngine + */ + protected setSelectedData(items: IData[]): void { + this.selectData = items; + this.pickupViewPanel.setSelectedData(items); } /**