diff --git a/packages/md-design/src/components/md-design-preview/md-design-preview.tsx b/packages/md-design/src/components/md-design-preview/md-design-preview.tsx index ba02da09a9d7c810472eed08d00780ddbd168b59..2f4b69ea103f836044fdafd9f3ec5083054f3c84 100644 --- a/packages/md-design/src/components/md-design-preview/md-design-preview.tsx +++ b/packages/md-design/src/components/md-design-preview/md-design-preview.tsx @@ -5,9 +5,12 @@ import { computed, onMounted, defineComponent, + onUnmounted, } from 'vue'; import { PanelDesignContext } from '@ibiz-template-plugin/panel-design'; import { useNamespace } from '@ibiz-template/vue3-util'; +import { debounce } from 'lodash-es'; +import { IPortalMessage } from '@ibiz-template/core'; import './md-design-preview.scss'; export default defineComponent({ @@ -22,17 +25,18 @@ export default defineComponent({ const data = ref(); const panelDesignContext: PanelDesignContext = inject('panelDesignContext'); + const appId = panelDesignContext.view.model.appId; + const app = ibiz.hub.getApp(appId); + const mainDataEntityId = panelDesignContext.view.model.appDataEntityId; const controlType = computed(() => { - return panelDesignContext.view.model.appDataEntityId?.includes('psdelist') - ? 'LIST' - : 'DATAVIEW'; + return mainDataEntityId.includes('psdelist') ? 'LIST' : 'DATAVIEW'; }); - onMounted(async () => { - const app = ibiz.hub.getApp(panelDesignContext.view.model.appId); + const load = async () => { + data.value = undefined; const majorResult = await app.deService.exec( - panelDesignContext.view.model.appDataEntityId!, + mainDataEntityId, 'getTemp', props.context, props.params, @@ -63,7 +67,30 @@ export default defineComponent({ } data.value = resultData; } + }; + + const debounceChange = debounce((msg: IPortalMessage) => { + const nameList = [ + 'PSDEList', + 'PSDEDataView', + 'PSDEListItem', + 'PSSysViewPanel', + ]; + const item = msg.data as IData; + if (item && nameList.includes(item.srfdecodename)) { + load(); + } + }, 200); + + onMounted(async () => { + await load(); + ibiz.mc.command.change.on(debounceChange); + }); + + onUnmounted(() => { + ibiz.mc.command.change.off(debounceChange); }); + return { ns, data, controlType }; }, render() { diff --git a/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.controller.ts b/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.controller.ts index 07995a892705a0ba1e97b605bc897854dd6992e8..8f05cf9c4310e4601ed5e45820c04599baf0a954 100644 --- a/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.controller.ts +++ b/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.controller.ts @@ -1,9 +1,20 @@ -import { PanelItemController } from '@ibiz-template/runtime'; +import { PanelItemController, ViewController } from '@ibiz-template/runtime'; import { MDDesignPreviewSwitchState } from './md-design-preview-switch.state'; export class MDDesignPreviewSwitchController extends PanelItemController { declare state: MDDesignPreviewSwitchState; + /** + * 视图控制器 + * + * @readonly + * @type {IData} + * @memberof MDDesignPreviewSwitchController + */ + get view(): ViewController { + return this.panel.view as ViewController; + } + protected createState(): MDDesignPreviewSwitchState { return new MDDesignPreviewSwitchState(this.parent?.state); } diff --git a/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.tsx b/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.tsx index b0655ba6280d4f5bb2585cfd20ce2d00192506e5..07fc3afe046dfbf9176d11c7e4bc7e9ff03133ab 100644 --- a/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.tsx +++ b/packages/md-design/src/panel-items/md-design-preview-switch/md-design-preview-switch.tsx @@ -16,17 +16,27 @@ export default defineComponent({ required: true, }, }, - setup() { + setup(props) { const ns = useNamespace('md-design-preview-switch'); + const onChange = (value: 'layout' | 'preview') => { + if (value === 'preview') { + props.controller.view.call('onActiveRoot'); + } + }; + return { ns, + onChange, }; }, render() { return (