@ibiz-template/vue3-util 0.3.5 → 0.3.6-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/es/control/index.d.ts +2 -0
  5. package/es/control/index.d.ts.map +1 -0
  6. package/es/control/index.mjs +5 -0
  7. package/es/control/panel/index.d.ts +3 -0
  8. package/es/control/panel/index.d.ts.map +1 -0
  9. package/es/control/panel/index.mjs +4 -0
  10. package/es/control/panel/panel/index.d.ts +57 -0
  11. package/es/control/panel/panel/index.d.ts.map +1 -0
  12. package/es/control/panel/panel/index.mjs +13 -0
  13. package/es/control/panel/panel/panel.css +1 -0
  14. package/es/control/panel/panel/panel.d.ts +63 -0
  15. package/es/control/panel/panel/panel.d.ts.map +1 -0
  16. package/es/control/panel/panel/panel.mjs +135 -0
  17. package/es/control/panel/panel/panel.provider.d.ts +14 -0
  18. package/es/control/panel/panel/panel.provider.d.ts.map +1 -0
  19. package/es/control/panel/panel/panel.provider.mjs +8 -0
  20. package/es/control/panel/view-layout-panel/index.d.ts +58 -0
  21. package/es/control/panel/view-layout-panel/index.d.ts.map +1 -0
  22. package/es/control/panel/view-layout-panel/index.mjs +19 -0
  23. package/es/control/panel/view-layout-panel/view-layout-panel.css +1 -0
  24. package/es/control/panel/view-layout-panel/view-layout-panel.d.ts +62 -0
  25. package/es/control/panel/view-layout-panel/view-layout-panel.d.ts.map +1 -0
  26. package/es/control/panel/view-layout-panel/view-layout-panel.mjs +137 -0
  27. package/es/control/panel/view-layout-panel/view-layout-panel.provider.d.ts +14 -0
  28. package/es/control/panel/view-layout-panel/view-layout-panel.provider.d.ts.map +1 -0
  29. package/es/control/panel/view-layout-panel/view-layout-panel.provider.mjs +8 -0
  30. package/es/index.d.ts +1 -0
  31. package/es/index.d.ts.map +1 -1
  32. package/es/index.mjs +3 -0
  33. package/es/use/control/use-control-controller/use-control-controller.d.ts +10 -1
  34. package/es/use/control/use-control-controller/use-control-controller.d.ts.map +1 -1
  35. package/es/use/control/use-control-controller/use-control-controller.mjs +4 -4
  36. package/lib/index.cjs +10 -5
  37. package/package.json +5 -5
  38. package/src/control/index.ts +1 -0
  39. package/src/control/panel/index.ts +2 -0
  40. package/src/control/panel/panel/index.ts +12 -0
  41. package/src/control/panel/panel/panel.provider.ts +14 -0
  42. package/src/control/panel/panel/panel.scss +9 -0
  43. package/src/control/panel/panel/panel.tsx +160 -0
  44. package/src/control/panel/view-layout-panel/index.ts +18 -0
  45. package/src/control/panel/view-layout-panel/view-layout-panel.provider.ts +14 -0
  46. package/src/control/panel/view-layout-panel/view-layout-panel.scss +9 -0
  47. package/src/control/panel/view-layout-panel/view-layout-panel.tsx +172 -0
  48. package/src/index.ts +1 -0
  49. package/src/use/control/use-control-controller/use-control-controller.ts +18 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.system.min.js","sources":["../src/use/click-outside/click-outside.ts","../src/use/vue/vue.ts","../src/use/util/index.ts","../src/use/control/use-control-controller/use-control-controller.ts","../src/use/event/event.ts","../src/use/focus-blur/focus-blur.ts","../src/use/namespace/namespace.ts","../src/util/route/route.ts","../src/util/route/route-listener.ts","../src/util/install.ts","../src/util/control/prepare-control.ts","../src/util/render/render.ts","../src/util/overlay-container/overlay-container.ts","../src/util/overlay-popover-container/overlay-popover-container.ts","../src/util/overlay-view-util/overlay-view-util.ts","../src/util/router-callback/router-callback-item.ts","../src/util/router-callback/router-callback.ts","../src/util/store/async-action/async-action.ts","../src/util/store/app-store/app-store.ts","../src/util/store/ui-store/z-index.ts","../src/util/store/ui-store/ui-store.ts","../src/util/store/index.ts","../src/use/route/route.ts","../src/use/view/use-view-controller/use-view-controller.ts","../src/common/icon/icon.tsx","../src/common/router-view/router-view.tsx","../src/common/control-base/control-base.tsx","../src/common/control-shell/control-shell.tsx","../src/common/view-shell/view-shell.tsx","../src/common/code-list/code-list.tsx","../src/common/control-loading-placeholder/control-loading-placeholder.tsx","../src/panel-component/panel-container/panel-container.state.ts","../src/panel-component/panel-container/panel-container.controller.ts","../src/panel-component/panel-container/panel-container.tsx","../src/panel-component/panel-container/panel-container.provider.ts","../src/panel-component/panel-container/index.ts","../src/panel-component/panel-ctrl-pos/panel-ctrl-pos.tsx","../src/panel-component/panel-ctrl-pos/panel-ctrl-pos.controller.ts","../src/panel-component/panel-ctrl-pos/panel-ctrl-pos.provider.ts","../src/panel-component/panel-ctrl-pos/index.ts","../src/panel-component/scroll-container/scroll-container-item/scroll-container-item.controller.ts","../src/panel-component/scroll-container/scroll-container-item/scroll-container-item.tsx","../src/panel-component/scroll-container/scroll-container-item/scroll-container-item.provider.ts","../src/panel-component/scroll-container/scroll-container/scroll-container.controller.ts","../src/panel-component/scroll-container/scroll-container/scroll-container.tsx","../src/panel-component/scroll-container/scroll-container/scroll-container.provider.ts","../src/panel-component/scroll-container/index.ts","../src/panel-component/nav-pos/nav-pos.state.ts","../src/panel-component/nav-pos/nav-pos.controller.ts","../src/panel-component/nav-pos/nav-pos.tsx","../src/panel-component/nav-pos/nav-pos.provider.ts","../src/panel-component/nav-pos/index.ts","../src/panel-component/panel-field/panel-field.state.ts","../src/panel-component/panel-field/panel-field.controller.ts","../src/panel-component/panel-field/panel-field.tsx","../src/panel-component/panel-field/panel-field.provider.ts","../src/panel-component/panel-field/index.ts","../src/panel-component/panel-rawitem/panel-rawitem.controller.ts","../src/panel-component/panel-rawitem/panel-rawitem.tsx","../src/panel-component/panel-rawitem/panel-rawitem.provider.ts","../src/panel-component/panel-rawitem/index.ts","../src/panel-component/multi-data-container/multi-data-container-itm.state.ts","../src/panel-component/multi-data-container/multi-data-container-item.controller.ts","../src/panel-component/multi-data-container/multi-data-container.state.ts","../src/panel-component/multi-data-container/multi-data-container.controller.ts","../src/panel-component/multi-data-container/multi-data-container.tsx","../src/panel-component/multi-data-container/multi-data-container.provider.ts","../src/panel-component/multi-data-container/index.ts","../src/panel-component/single-data-container/single-data-container.state.ts","../src/panel-component/single-data-container/single-data-container.controller.ts","../src/panel-component/single-data-container/single-data-container.tsx","../src/panel-component/single-data-container/single-data-container.provider.ts","../src/panel-component/single-data-container/index.ts","../src/panel-component/grid-container/grid-container.state.ts","../src/panel-component/grid-container/grid-container.controller.ts","../src/panel-component/grid-container/grid-container.tsx","../src/panel-component/grid-container/grid-container.provider.ts","../src/panel-component/grid-container/index.ts","../src/panel-component/panel-container-image/panel-container-image.state.ts","../src/panel-component/panel-container-image/panel-container-image.controller.ts","../src/panel-component/panel-container-image/panel-container-image.tsx","../src/panel-component/panel-container-image/panel-container-image.provider.ts","../src/panel-component/panel-container-image/index.ts","../src/view/app-redirect-view/app-redirect-view.tsx","../src/view/common/view.provider.ts","../src/view/common/view.tsx","../src/view/common/index.ts","../src/view/todo-redirect/todo-redirect.tsx","../src/view/portal-view/portal-view.provider.ts","../src/view/portal-view/portal-view.tsx","../src/view/portal-view/index.ts","../../../node_modules/.pnpm/path-browserify@1.0.1/node_modules/path-browserify/index.js","../src/plugin/plugin-factory/plugin-factory.ts","../src/props/common.ts","../src/props/editor/common.ts","../src/props/editor/text-box.ts","../src/props/editor/span.ts","../src/props/editor/dropdown-list.ts","../src/props/editor/check-box-list.ts","../src/props/editor/check-box.ts","../src/props/editor/data-picker.ts","../src/props/editor/date-picker.ts","../src/props/editor/date-range.ts","../src/props/editor/list-box.ts","../src/props/editor/number-range.ts","../src/props/editor/radio-button-list.ts","../src/props/editor/rate.ts","../src/props/editor/raw.ts","../src/props/editor/slider.ts","../src/props/editor/stepper.ts","../src/props/editor/switch.ts","../src/props/editor/upload.ts","../src/props/editor/autocomplete.ts","../src/props/editor/code.ts","../src/props/editor/html.ts","../src/props/editor/markdown.ts","../src/props/editor/array.ts","../src/props/editor/cascader.ts","../src/props/editor/color-picker.ts"],"sourcesContent":["import {\n NOOP,\n onClickOutside,\n OnClickOutsideHandler,\n OnClickOutsideOptions,\n OnClickOutsideResult,\n} from '@ibiz-template/core';\nimport { isNil } from 'ramda';\nimport { onBeforeUnmount, Ref, watch } from 'vue';\n\n/**\n * 使用点击组件外部监听事件\n *\n * @author lxm\n * @date 2022-10-31 14:10:12\n * @export\n * @param {Ref} elRef 组件的ref对象\n * @param {OnClickOutsideHandler} handler 处理回调\n * @param {OnClickOutsideOptions} [options={}] 额外配置参数\n * @returns {*} {OnClickOutsideResult}\n */\nexport function useClickOutside(\n elRef: Ref,\n handler: OnClickOutsideHandler,\n options: OnClickOutsideOptions = {},\n): OnClickOutsideResult {\n let stop = NOOP;\n let pause = NOOP;\n let proceed = NOOP;\n\n // 移除监听,清空方法\n const destroy = (): void => {\n stop();\n stop = NOOP;\n pause = NOOP;\n proceed = NOOP;\n };\n\n watch(\n elRef,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (isNil(newVal)) {\n destroy();\n } else {\n const result = onClickOutside(\n newVal?.$el || newVal,\n handler,\n options,\n );\n stop = result.stop;\n pause = result.pause;\n proceed = result.proceed;\n }\n }\n },\n { immediate: true },\n );\n\n // 组件销毁前销毁监听\n onBeforeUnmount(() => {\n if (stop !== NOOP) {\n destroy();\n }\n });\n\n return {\n stop: () => stop(),\n pause: () => pause(),\n proceed: () => proceed(),\n };\n}\n","import { isFunc } from 'qx-util';\nimport {\n ComponentPublicInstance,\n createCommentVNode,\n getCurrentInstance,\n isReactive,\n toRaw,\n VNode,\n watch,\n WatchOptions,\n} from 'vue';\n\n/**\n * 获取组件的props,只能在setup里使用\n *\n * @author chitanda\n * @date 2022-08-14 16:08:19\n * @export\n * @return {*}\n */\nexport function useProps(): IData {\n const vue = getCurrentInstance()!.proxy!;\n return vue.$props;\n}\n\n/**\n * 如果是reactive代理过的对象,返回原始对象\n *\n * @author lxm\n * @date 2023-02-15 10:56:00\n * @export\n * @param {*} val\n * @returns {*}\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getOrigin<T = any>(val: T): T {\n return isReactive(val) ? toRaw<T>(val) : val;\n}\n\n/**\n * 监听props的属性\n *\n * @author lxm\n * @date 2022-08-22 22:08:11\n * @export\n * @param {string} key props的属性名\n * @param {(newVal: T, oldVal: T) => void} callback 监听回调\n * @param {(WatchOptions | undefined)} [options] 监听参数\n */\nexport function usePropsWatch<T = unknown>(\n key: string,\n callback: (newVal?: T, oldVal?: T) => void,\n options?: WatchOptions | undefined,\n): void {\n const props = useProps();\n if (Object.prototype.hasOwnProperty.call(props, key)) {\n watch(\n () => props[key],\n (newVal, oldVal) => {\n callback(getOrigin(newVal), getOrigin(oldVal));\n },\n options,\n );\n // immediate无效,模拟第一次赋值\n callback(getOrigin(props[key]), undefined);\n }\n}\n\n/**\n * 获取force方法\n *\n * @author lxm\n * @date 2022-08-24 11:08:56\n * @export\n * @returns {*} {(callback?: () => void) => void} callback回调会在这次更新渲染完成之后执行\n */\nexport function useForce(): (callback?: () => void) => void {\n const vue = getCurrentInstance()!.proxy!;\n return (callback?: () => void) => {\n vue.$forceUpdate();\n if (callback && isFunc(callback)) {\n vue.$nextTick(() => {\n callback();\n });\n }\n };\n}\n\n/**\n * controller的force执行时,一起执行自己的force\n *\n * @author lxm\n * @date 2022-08-22 23:08:36\n * @export\n * @param {{\n * force: (callback?: () => void) => void;\n * }} controller\n */\nexport function useForceTogether(\n vue: ComponentPublicInstance,\n controller: {\n force: (callback?: () => void) => void;\n },\n): void {\n const orignForce = controller.force;\n const selfForce = useForce();\n controller.force = (callback?: () => void): void => {\n orignForce(callback);\n selfForce();\n };\n}\n\n/**\n * 控制器通用的vue实例能力绑定\n *\n * @author lxm\n * @date 2022-09-15 09:09:06\n * @export\n * @param {Vue} vue\n * @param {IData} controller\n */\nexport function useController(controller: IData): void {\n controller.force = useForce();\n}\n\n/** 全局唯一的空节点 */\nexport const EmptyVNode = createCommentVNode('EmptyVNode');\n\n/**\n * 配合EmptyVNode,判断是否是空节点\n * @author lxm\n * @date 2023-03-28 02:20:06\n * @export\n * @param {(VNode[] | VNode)} nodes\n * @return {*} {boolean}\n */\nexport function isEmptyVNode(nodes: VNode[] | VNode): boolean {\n if (!Array.isArray(nodes)) {\n return nodes === EmptyVNode;\n }\n return nodes.length === 1 && nodes[0] === EmptyVNode;\n}\n","import { CTX, IMobViewController } from '@ibiz-template/runtime';\nimport { inject } from 'vue';\n\n/**\n * 获取视图上下文环境对象\n *\n * @author chitanda\n * @date 2023-06-16 15:06:16\n * @export\n * @return {*} {CTX}\n */\nexport function useCtx(): CTX {\n return inject('ctx') as CTX;\n}\n\n/**\n * 获取移动端视图上下文环境对象\n *\n * @author chitanda\n * @date 2023-06-16 16:06:51\n * @export\n * @return {*} {CTX<IMobViewController>}\n */\nexport function useMobCtx(): CTX<IMobViewController> {\n return inject('ctx') as CTX;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ControlController,\n IControlController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { getCurrentInstance, onBeforeUnmount, reactive, watch } from 'vue';\nimport { useForce, useProps } from '../../vue/vue';\nimport { useCtx } from '../../util';\n\n/**\n * 监听并更新上下文和视图参数(引用不变)\n * @author lxm\n * @date 2023-05-25 01:48:14\n * @param {IData} props\n * @param {IViewController} view\n */\nfunction watchAndUpdateContextParams(\n props: IData,\n control: IControlController,\n): void {\n watch(\n () => ({ context: props.context, params: props.params }),\n newVal => {\n // 不改变引用的情况下,重置控制器里的上下文和视图参数。\n // 重新计算上下文和视图参数\n control.updateContextParams({ ...newVal });\n ibiz.log.debug(`${control.model.id}的上下文或视图参数变更:`, newVal);\n },\n );\n}\n\n/**\n * 监听部件的props并更新部件state状态\n * 排除部分keys,如context,params\n * @author lxm\n * @date 2023-10-27 01:46:23\n * @param {IData} props\n * @param {IControlController} control\n */\nfunction watchAndUpdateState(props: IData, control: IControlController): void {\n const excludeKeys = ['context', 'params', 'modelData'];\n watch(\n () => {\n const watchProps: IData = {};\n Object.keys(props).forEach(key => {\n if (!excludeKeys.includes(key)) {\n watchProps[key] = props[key];\n }\n });\n return watchProps;\n },\n (newVal, oldVal) => {\n const changeProps: IData = {};\n Object.keys(newVal).forEach(key => {\n if (newVal[key] !== (oldVal || {})[key]) {\n changeProps[key] = newVal[key];\n }\n });\n ibiz.log.debug(`部件 [${control.model.name}] state 变更`, changeProps);\n Object.keys(changeProps).forEach(key => {\n if (changeProps[key] !== undefined) {\n (control.state as any)[key] = changeProps[key];\n }\n });\n },\n { immediate: true },\n );\n}\n\n/**\n * 初始化部件控制器\n *\n * @author chitanda\n * @date 2022-08-15 17:08:47\n * @export\n * @template T\n * @param {() => T} fn\n * @return {*} {T}\n */\nexport function useControlController<T extends IControlController>(\n fn: (...args: ConstructorParameters<typeof ControlController>) => T,\n): T {\n // 获取上层组件的ctx\n const ctx = useCtx();\n // 获取 props\n const props = useProps();\n // 上下文里提前预告部件\n ctx.evt.emit('onForecast', props.modelData.name!);\n\n // 实例化部件控制器\n const provider = props.provider as IControlProvider | undefined;\n let c: T;\n if (provider?.createController) {\n // 如果适配器给了创建方法使用适配器的方法\n c = provider.createController(\n props.modelData,\n props.context,\n props.params,\n ctx,\n ) as T;\n } else {\n c = fn(props.modelData, props.context, props.params, ctx);\n }\n\n watchAndUpdateContextParams(props, c);\n watchAndUpdateState(props, c);\n\n c.state = reactive(c.state);\n\n // 挂载强制更新方法\n c.force = useForce();\n\n const vue = getCurrentInstance()!.proxy!;\n c.evt.onAll((eventName: string, event: unknown) => {\n vue.$emit(eventName.slice(2), event);\n });\n\n // vue组件级事件最早的抛出controller\n vue.$emit('controllerAppear', c);\n\n c.created();\n\n // 卸载时销毁\n onBeforeUnmount(() => c.destroyed());\n return c;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { listenJSEvent, NOOP } from '@ibiz-template/core';\nimport { isNil } from 'ramda';\nimport { onBeforeUnmount, Ref, watch } from 'vue';\n\n/**\n * 监听JS原生事件,返回cleanup回调,调用后删除该监听\n *\n * @author lxm\n * @date 2022-10-28 18:10:36\n * @export\n * @param {Ref} elRef 监听组件的ref\n * @param {string} eventName 监听事件名称\n * @param {(..._args: any[]) => any} listener 监听回调\n * @param {AddEventListenerOptions} options 额外参数\n * @returns {*} {() => void}\n */\nexport function useEventListener(\n elRef: Ref,\n eventName: string,\n listener: (..._args: any[]) => any,\n options: AddEventListenerOptions = {},\n): () => void {\n let cleanup = NOOP;\n\n watch(\n elRef,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (isNil(newVal)) {\n cleanup();\n cleanup = NOOP;\n } else {\n cleanup = listenJSEvent(\n newVal?.$el || newVal,\n eventName,\n listener,\n options,\n );\n }\n }\n },\n { immediate: true },\n );\n\n // 组件销毁前销毁监听\n onBeforeUnmount(() => {\n if (cleanup !== NOOP) {\n cleanup();\n }\n });\n\n return () => {\n cleanup();\n };\n}\n","import { OnClickOutsideResult } from '@ibiz-template/core';\nimport { Ref, ref } from 'vue';\nimport { useClickOutside } from '../click-outside/click-outside';\nimport { useEventListener } from '../event/event';\n\n/**\n * 给指定元素添加聚焦和失焦事件\n * 点击指定元素时会触发聚焦事件\n * 已经聚焦之后,点击指定元素外部会触发失焦事件。\n * @author lxm\n * @date 2023-05-31 08:36:04\n * @export\n * @return {*}\n */\nexport function useFocusAndBlur(\n focus: () => void,\n blur: () => void,\n): {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n componentRef: Ref<any>;\n isFocus: Ref<boolean>;\n doBlur: () => void;\n pause: () => void;\n stop: () => void;\n} {\n /** 添加事件的元素ref */\n const componentRef = ref();\n const isFocus = ref(false);\n let outsideFuns: OnClickOutsideResult;\n /**\n * 手动触发失焦事件\n * @author lxm\n * @date 2023-05-31 08:43:54\n */\n const doBlur = (): void => {\n if (!isFocus.value) {\n ibiz.log.debug('没有聚焦,不触发失焦');\n }\n blur();\n outsideFuns.stop();\n isFocus.value = false;\n };\n\n /**\n * 暂停外部点击的监听\n * 用于某些组件操作过程中会触发外部点击的场景\n * @author lxm\n * @date 2023-05-31 08:47:53\n */\n const pause = (): void => {\n if (outsideFuns) {\n outsideFuns.pause();\n }\n };\n\n /**\n * 暂停外部点击的监听\n * 用于某些组件操作过程中会触发外部点击的场景\n * @author lxm\n * @date 2023-05-31 08:47:53\n */\n const stop = (): void => {\n if (outsideFuns) {\n outsideFuns.stop();\n }\n };\n\n useEventListener(\n componentRef,\n 'click',\n _evt => {\n if (!isFocus.value) {\n outsideFuns = useClickOutside(componentRef, () => {\n doBlur();\n });\n isFocus.value = true;\n focus();\n }\n },\n { capture: true }, // 捕获防止内部ui拦截点击事件\n );\n return { componentRef, isFocus, doBlur, pause, stop };\n}\n","import { Namespace } from '@ibiz-template/core';\n\n/**\n * css 命名空间\n *\n * @author chitanda\n * @date 2022-09-06 15:09:04\n * @export\n * @param {string} block\n * @return {*} {Namespace}\n */\nexport function useNamespace(block: string): Namespace {\n return new Namespace(block, ibiz.env.namespace);\n}\n","import { notNilEmpty } from 'qx-util';\nimport { RuntimeError } from '@ibiz-template/core';\nimport qs from 'qs';\nimport { RouteLocationNormalizedLoaded as Route, useRoute } from 'vue-router';\nimport { watch } from 'vue';\nimport {\n calcDeCodeNameById,\n getMatchResPath,\n IViewConfig,\n ViewType,\n} from '@ibiz-template/runtime';\nimport { IRoutePath, IRoutePathNode, IRouteViewData } from '../../interface';\n\n/**\n * 路径字符串转换成路由路径对象\n *\n * @author lxm\n * @date 2022-08-18 11:08:08\n * @export\n * @param {string} pathStr 以/开头的路径,即router的path\n * @returns {*} {IRoutePath}\n */\nexport function route2routePath(route: Route): IRoutePath {\n // 一共匹配了几级路由\n const depth = route.matched.length;\n\n // 解析路径节点\n const pathNodes: IRoutePathNode[] = [];\n for (let index = 1; index <= depth; index++) {\n const viewName = route.path.split('/')[index * 2];\n const paramsStr = route.params[`params${index}`] as string;\n\n /** 路由参数,默认是视图参数 */\n let params: IParams | undefined;\n\n /** 上下文参数 */\n let context: IParams | undefined;\n let srfnav: string | undefined;\n // params为占位符时置空\n if (!paramsStr || paramsStr === ibiz.env.routePlaceholder) {\n params = undefined;\n } else {\n // 首页上下文要解析\n params = qs.parse(paramsStr, {\n strictNullHandling: true,\n delimiter: ';',\n });\n }\n\n // 路由参数存在的时候,解析里面的上下文。\n if (params) {\n if (index === 1) {\n // 首页的时候,路由上的参数是资源路径,属于上下文\n context = params;\n params = undefined;\n } else {\n if (params.srfnavctx) {\n // 解析额外上下文\n context = JSON.parse(decodeURIComponent(params.srfnavctx));\n delete params.srfnavctx;\n }\n if (params.srfnav) {\n // 解析额外自身视图导航参数\n srfnav = params.srfnav;\n delete params.srfnav;\n }\n }\n }\n\n pathNodes.push({ viewName, context, params, srfnav });\n }\n\n // 解析应用上下文\n let appContext;\n if (\n route.params.appContext &&\n route.params.appContext !== ibiz.env.routePlaceholder\n ) {\n appContext = qs.parse(route.params.appContext as string, {\n strictNullHandling: true,\n delimiter: ';',\n });\n }\n\n return { appContext, pathNodes };\n}\n\n/**\n * 路由路径对象转路径字符串\n *\n * @author lxm\n * @date 2022-08-18 13:08:57\n * @export\n * @param {IRoutePath} routePath 路由路径对象\n * @returns {*} {string}\n */\nexport function routePath2string(routePath: IRoutePath): string {\n let pathStr = '';\n // 应用上下文\n if (routePath.appContext) {\n pathStr += `/${qs.stringify(routePath.appContext, {\n delimiter: ';',\n strictNullHandling: true,\n })}`;\n } else {\n pathStr += `/${ibiz.env.routePlaceholder}`;\n }\n\n // 每一层级的视图路由的拼装\n routePath.pathNodes.forEach((pathNode: IRoutePathNode, index: number) => {\n pathStr += `/${pathNode.viewName}/`;\n let routeParams: IParams = {};\n // 首页路由\n if (index === 0) {\n if (notNilEmpty(pathNode.context)) {\n // 对象转成a=11;b=222的格式,字符串直接附加在后面\n routeParams = pathNode.context!;\n }\n } else {\n // 非首页路由,视图参数直接放到路由参数上,上下文转换后放到路由参数的srfnavctx上\n routeParams = notNilEmpty(pathNode.params) ? pathNode.params! : {};\n\n // 合并视图上下文\n if (notNilEmpty(pathNode.context)) {\n const objStr = JSON.stringify(pathNode.context);\n // undefined 的vlaue会被JSON.stringify删除,可能会转成{}\n if (objStr !== '{}') {\n routeParams!.srfnavctx = encodeURIComponent(objStr);\n }\n }\n\n // 合并视图导航参数\n if (pathNode.srfnav) {\n routeParams.srfnav = pathNode.srfnav;\n }\n }\n\n const paramsStr = qs.stringify(routeParams, {\n delimiter: ';',\n strictNullHandling: true,\n skipNulls: true,\n });\n // 把路由参数转换到路由路径上去\n if (notNilEmpty(paramsStr)) {\n pathStr += paramsStr;\n } else {\n pathStr += ibiz.env.routePlaceholder;\n }\n });\n\n return pathStr;\n}\n\n/**\n * 获取自身的路由上下文,排除了部分不需要路由携带的参数\n *\n * @author lxm\n * @date 2023-03-14 02:07:41\n * @export\n * @param {IContext} context\n * @returns {*} {IParams}\n */\nexport function getOwnRouteContext(context: IContext): IParams {\n const ownContext = context.getOwnContext();\n const excludeKeys = ['srfsessionid', 'srfappid'];\n Object.keys(ownContext).forEach(key => {\n if (excludeKeys.includes(key)) {\n delete ownContext[key];\n }\n });\n return ownContext;\n}\n\n/**\n * 计算资源上下文时,需要排除自身实体codeName的视图(导航类视图和多数据视图)\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-02-20 15:45:46\n */\nexport const excludeViewTypes: string[] = [\n ViewType.DE_GRID_VIEW,\n ViewType.DE_GRID_EXP_VIEW,\n ViewType.DE_LIST_VIEW,\n ViewType.DE_LIST_EXP_VIEW,\n ViewType.DE_DATA_VIEW,\n ViewType.DE_DATAVIEW_EXP_VIEW,\n ViewType.DE_CALENDAR_VIEW,\n ViewType.DE_CALENDAR_EXP_VIEW,\n ViewType.DE_CHART_VIEW,\n ViewType.DE_CHART_EXP_VIEW,\n ViewType.DE_KANBAN_VIEW,\n];\n\n/**\n * 计算资源路径,把首页后面的资源路径上下文算出来,并把第二层中对应的上下文删掉。\n * @author lxm\n * @date 2023-07-13 06:37:10\n * @export\n * @param {IRoutePath} routePath\n * @param {IContext} context\n * @param {string} appDataEntityId\n * @return {*} {Promise<void>}\n */\nexport async function calcResRoutePath(\n routePath: IRoutePath,\n context: IContext,\n appDataEntityId?: string,\n): Promise<void> {\n if (!appDataEntityId) {\n // 无实体的视图清空资源上下文\n routePath.pathNodes[0].context = undefined;\n } else {\n const entity = await ibiz.hub.getAppDataEntity(appDataEntityId);\n let match = getMatchResPath(context, entity);\n // 有实体有没有匹配到的,补一个包含自身实体主键的match\n if (!match) {\n match = { path: '', keys: [entity.codeName!.toLowerCase()] };\n }\n if (match) {\n const currentContext = routePath.pathNodes[1].context;\n const resContext: IParams = {};\n // 资源路径不为空,二级视图的上下文删掉多余的资源上下文\n match.keys.forEach(key => {\n if (context && Object.prototype.hasOwnProperty.call(context, key)) {\n resContext[key] = context[key];\n if (currentContext) {\n delete currentContext[key];\n }\n }\n });\n // 把资源路径填充到一级路由上\n routePath.pathNodes[0].context = resContext;\n }\n }\n}\n\n/**\n * 生成route路径\n *\n * @author lxm\n * @date 2022-08-17 21:08:00\n * @export\n * @param {IAppView} appView 视图模型\n * @param {Route} route 路由对象\n * @param {(IContext | undefined)} [context] 上下文对象\n * @param {(IParams | undefined)} [_params] 视图参数\n * @returns {*} {string}\n */\nexport async function generateRoutePath(\n appView: IViewConfig,\n route: Route,\n context: IContext,\n params?: IParams | undefined,\n): Promise<{ path: string }> {\n const routePath = route2routePath(route);\n // 如果上下文存在toRouteDepth时,使用上下文的层级,否则使用默认层级\n let depth = 2; // 默认都是从二级开始计算\n if (context.toRouteDepth) {\n depth = context.toRouteDepth;\n // 使用完后删除,避免添加到上下文里\n delete context.toRouteDepth;\n } else if (ibiz.env.isMob) {\n // 移动端默认补充home层级\n routePath.pathNodes[0] = {\n viewName: 'home',\n };\n }\n\n // 删除目标层级和之后的路由,保留之前层级的路由\n routePath.pathNodes.splice(depth - 1, routePath.pathNodes.length - depth + 1);\n\n // 导航视图的导航参数,加在目标层级之前的一个层级的视图参数里\n if (context.currentSrfNav) {\n const currentNode = routePath.pathNodes[routePath.pathNodes.length - 1];\n currentNode.params = currentNode.params || {};\n currentNode.srfnav = context.currentSrfNav;\n // 使用完后删除,避免添加到上下文里\n delete context.currentSrfNav;\n }\n\n // 重定向视图跳转的一级首页路由\n if (route.fullPath.startsWith('/appredirectview')) {\n if (params?.srfindexname) {\n routePath.pathNodes[0].viewName = params.srfindexname;\n delete params.srfindexname;\n } else {\n routePath.pathNodes[0].viewName = 'index';\n }\n }\n\n // 计算目标视图path路径\n routePath.pathNodes.push({\n viewName: appView.codeName!.toLowerCase(),\n context: getOwnRouteContext(context),\n params,\n });\n\n // 计算二级视图的资源路径加到index后面\n if (depth === 2) {\n await calcResRoutePath(routePath, context, appView.appDataEntityId);\n\n // 多数据和导航视图,删除自身的主键上下文\n if (excludeViewTypes.includes(appView.viewType)) {\n const deName = calcDeCodeNameById(appView.appDataEntityId!);\n delete routePath.pathNodes[0].context![deName];\n }\n }\n\n return { path: routePath2string(routePath) };\n}\n\n/**\n * 解析路由获取对应视图数据\n *\n * @author lxm\n * @date 2022-08-17 22:08:51\n * @export\n * @param {IApplication} appModel 视图模型\n * @param {Route} route 路由对象\n * @param {number} depth 层级\n * @returns {*} {IRouteViewData}\n */\nexport async function parseRouteViewData(\n route: Route,\n depth: number,\n): Promise<IRouteViewData> {\n // 解析路由的视图参数\n const routePath = route2routePath(route);\n\n // 获取对应层级的视图名称参数\n let viewCodeName = routePath.pathNodes[depth - 1].viewName;\n if (!viewCodeName) {\n throw new RuntimeError(`第${depth}级路由不存在视图标识`);\n }\n if (viewCodeName === 'index') {\n viewCodeName = ibiz.hub.defaultAppIndexViewName;\n }\n\n // 根据路由视图名称参数查询视图模型\n const viewModel = await ibiz.hub.getAppView(viewCodeName);\n\n // 找不到视图模型的返回空对象\n if (!viewModel) {\n throw new RuntimeError(`找不到视图${viewCodeName}`);\n }\n\n // !解析上下文参数,整合当前层级之前所有的上下文参数\n const context: IParams = {};\n // 合并appData里的应用上下文\n if (ibiz.appData?.context) {\n Object.assign(context, ibiz.appData.context);\n }\n\n // 合并路由上下文\n // 合并路由应用上下文\n if (routePath.appContext) {\n Object.assign(context, routePath.appContext);\n }\n\n // 逐层合并视图上下文,第一层首页不合,它的上下文是资源路径属于子视图。\n if (depth !== 1) {\n for (let index = 0; index < depth; index++) {\n const pathNode = routePath.pathNodes[index];\n if (notNilEmpty(pathNode.context)) {\n Object.assign(context, pathNode.context);\n }\n }\n }\n\n // 最后一级路由对应的视图才会解析视图参数\n const { params, srfnav } = routePath.pathNodes[depth - 1];\n\n return {\n viewModel,\n context,\n params,\n srfnav,\n };\n}\n\n/**\n * 获取指定层级的路由路径\n * @author lxm\n * @date 2023-06-21 06:08:32\n * @export\n * @param {Route} route\n * @param {number} depth\n * @return {*} {string}\n */\nexport function getNestedRoutePath(\n route: Route,\n depth: number,\n noSrfNav: boolean = true,\n): string {\n // 当前路由层级低于指定层级的返回空\n if (route.matched.length < depth) {\n return '';\n }\n\n // 只有当前层级的路由的代名称的路由如login,404等直接返回path\n if (route.matched.length === depth && route.name) {\n return route.path;\n }\n const routePath = route2routePath(route);\n if (routePath.pathNodes.length < depth) {\n // 当前路由层级比指定层级少时,直接返回空字符串\n return route.path;\n }\n if (routePath.pathNodes.length > depth) {\n // 删除depth后面的节点\n routePath.pathNodes = routePath.pathNodes.slice(0, depth);\n }\n if (noSrfNav) {\n // 删除至nav\n delete routePath.pathNodes[depth - 1].srfnav;\n }\n return routePath2string(routePath);\n}\n\n/**\n * 监听路由的变更,每次变更后都会触发回调\n * 回调函数提供根据视图层级计算好的唯一标识currentKey,只有变了视图才需要刷新\n * @author lxm\n * @date 2023-05-09 12:52:36\n * @param {(args: { currentKey: string; fullPath: string }) => void} callback\n * @param {number} depth\n */\nexport function onRouteChange(\n callback: (args: { currentKey: string; fullPath: string }) => void,\n depth: number,\n): void {\n const route = useRoute();\n if (!route) {\n throw new RuntimeError('无法正确获取route,可能是依赖问题');\n }\n watch(\n () => route?.path,\n () => {\n const currentKey = getNestedRoutePath(route, depth);\n callback({ currentKey, fullPath: route.fullPath });\n },\n { immediate: true },\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { watch } from 'vue';\nimport { RouteLocationNormalizedLoaded } from 'vue-router';\n\ntype ChangeCallback = () => void;\n/**\n * 监听路由变更,提供下一次变更执行的一次性回调。\n *\n * @export\n * @class RouteListener\n */\nexport class RouteListener {\n /**\n * 回调集合\n *\n * @memberof RouteListener\n */\n private callbacks: Array<ChangeCallback> = [];\n\n /**\n * 计时器集合\n *\n * @private\n * @type {any[]}\n * @memberof RouteListener\n */\n private timers: any[] = [];\n\n /**\n * 等待路由响应时间\n *\n * @private\n * @type {number}\n * @memberof RouteListener\n */\n private wait: number = 500;\n\n constructor(route: RouteLocationNormalizedLoaded, wait?: number) {\n if (wait) {\n this.wait = wait;\n }\n watch(\n () => route.path,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n // 执行所有回调\n if (this.callbacks.length) {\n for (let index = 0; index < this.callbacks.length; index++) {\n const fn = this.callbacks[index];\n fn();\n }\n }\n // 清空所有回调\n this.callbacks = [];\n\n // 清空所有计时器\n if (this.timers.length) {\n for (let index = 0; index < this.timers.length; index++) {\n const timer = this.timers[index];\n clearTimeout(timer);\n }\n }\n\n this.timers = [];\n }\n },\n );\n }\n\n /**\n * 下一次路由变更后执行回调,只执行一次\n *\n * @param {ChangeCallback} callback\n * @memberof RouteListener\n */\n nextChange(callback: ChangeCallback): void {\n if (callback) {\n // 设定计时器,经过一段时间等不到时,执行回调,并删除回调集合里的回调\n this.timers.push(\n setTimeout(() => {\n callback();\n const index = this.callbacks.findIndex(item => item === callback);\n this.callbacks.splice(index, 1);\n }, this.wait),\n );\n\n // 存入回调集合等待被调用\n this.callbacks.push(callback);\n }\n }\n}\n","/* eslint-disable no-param-reassign */\nimport type { App, Plugin } from 'vue';\n\nexport type TypeWithInstall<T> = T & Plugin;\n\nexport const withInstall = <T>(\n main: T,\n install: (_v: App) => void,\n): TypeWithInstall<T> => {\n (main as TypeWithInstall<T>).install = (app): void => {\n install(app);\n };\n return main as TypeWithInstall<T>;\n};\n","import { Namespace } from '@ibiz-template/core';\nimport { IControlController } from '@ibiz-template/runtime';\nimport { useNamespace } from '../../use';\n\n/**\n * 部件UI组件准备参数\n * @author lxm\n * @date 2023-06-15 09:51:23\n * @export\n * @param {IControlController} c\n * @return {*}\n */\nexport function prepareControl(c: IControlController): {\n controlClass: string[];\n ns: Namespace;\n} {\n const commonNs = useNamespace('control');\n const { controlType, sysCss, codeName } = c.model;\n const typeClass = controlType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const ns = useNamespace(`control-${typeClass}`);\n\n const controlClass = [\n commonNs.b(),\n commonNs.b(typeClass),\n commonNs.m(codeName),\n ];\n if (sysCssName) {\n controlClass.push(sysCssName);\n }\n\n return { controlClass, ns };\n}\n","import { isNil } from 'ramda';\n\n/**\n * 把未知格式的值绘制成字符串\n * - 空值输出空字符串\n * - 对象,数组输出成JSON字符串\n * - 其他类型转成字符串输出\n * @author lxm\n * @date 2023-10-09 02:29:13\n * @export\n * @param {unknown} value\n * @return {*} {string}\n */\nexport function renderString(value: unknown): string {\n if (isNil(value)) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n try {\n const str = (value as IData).toString();\n return str;\n } catch (error) {\n ibiz.log.error(value, '转换成字符串失败', error);\n }\n return '';\n}\n","/* eslint-disable no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { QXEvent } from 'qx-util';\nimport { IOverlayContainer } from '@ibiz-template/runtime';\nimport { App, Component, h, VNode } from 'vue';\nimport { RuntimeError } from '@ibiz-template/core';\n\n/**\n * 全局弹出承载组件\n *\n * @author chitanda\n * @date 2022-11-09 12:11:09\n * @export\n * @class OverlayContainer\n */\nexport class OverlayContainer<O> implements IOverlayContainer {\n protected vm?: App;\n\n /**\n * 具体模态组件\n *\n * @author chitanda\n * @date 2022-11-09 12:11:34\n * @protected\n * @type {*}\n */\n protected modal: any;\n\n /**\n * 外面调用dismiss时传的result结果\n *\n * @author lxm\n * @date 2022-11-09 20:11:06\n * @protected\n * @type {unknown}\n */\n protected result?: unknown;\n\n /**\n * 内部事件\n *\n * @author chitanda\n * @date 2022-11-09 12:11:42\n * @protected\n */\n protected evt: QXEvent<{ dismiss: (data?: unknown) => void }> = new QXEvent();\n\n /**\n * 创建全局呈现\n *\n * @author chitanda\n * @date 2022-11-09 14:11:52\n * @param {unknown} component\n * @param {(h: CreateElement) => VNode} render\n * @param {IPopoverOptions} [opts]\n */\n constructor(\n protected component: unknown,\n protected render: (...args: any[]) => VNode,\n protected opts?: O,\n ) {\n this.init();\n }\n\n static createVueApp(\n _rootComponent: Component,\n _rootProps?: IData,\n ): App<Element> {\n throw new RuntimeError('没有注入createVueApp方法');\n }\n\n /**\n * 初始化飘窗\n *\n * @author chitanda\n * @date 2022-11-09 12:11:55\n * @protected\n * @return {*} {void}\n */\n protected init(): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const { render, opts } = this;\n const container = document.createElement('div');\n document.body.appendChild(container);\n const vm = OverlayContainer.createVueApp({\n mounted() {\n self.modal = this.$refs.root;\n },\n unmounted() {\n document.body.removeChild(container);\n self.evt.emit('dismiss', self.result);\n },\n render() {\n return h(\n self.component as string,\n {\n ref: 'root',\n opts,\n onDismiss(data: IData) {\n self.result = data;\n vm.unmount();\n },\n },\n { default: render },\n );\n },\n });\n ibiz.plugin.register(vm);\n vm.mount(container);\n this.vm = vm;\n }\n\n /**\n * 打开飘窗\n *\n * @author chitanda\n * @date 2022-11-09 12:11:52\n * @param {HTMLElement} target\n * @return {*} {Promise<void>}\n */\n async present(): Promise<void> {\n return this.modal.present();\n }\n\n /**\n * 手动调用关闭飘窗\n *\n * @author chitanda\n * @date 2022-11-09 12:11:39\n * @param {unknown} [data]\n * @return {*} {Promise<void>}\n */\n async dismiss(data?: unknown): Promise<void> {\n this.modal.dismiss(data);\n }\n\n /**\n * 订阅窗口关闭\n *\n * @author chitanda\n * @date 2022-11-09 12:11:20\n * @template T\n * @return {*} {Promise<T>}\n */\n async onWillDismiss<T = unknown>(): Promise<T> {\n return new Promise<T>(resolve => {\n const callback = (data: unknown) => {\n resolve(data as T);\n this.evt.off('dismiss', callback);\n };\n this.evt.on('dismiss', callback);\n });\n }\n}\n","/* eslint-disable no-unused-vars */\n/* eslint-disable no-dupe-class-members */\nimport {\n IPopoverOptions,\n IOverlayPopoverContainer,\n} from '@ibiz-template/runtime';\nimport { OverlayContainer } from '../overlay-container/overlay-container';\n\n/**\n * 飘窗组件呈现容器\n *\n * @author chitanda\n * @date 2022-11-09 14:11:46\n * @export\n * @class OverlayPopoverContainer\n * @extends {OverlayContainer<IPopoverOptions>}\n * @implements {IOverlayPopoverContainer}\n */\nexport class OverlayPopoverContainer\n extends OverlayContainer<IPopoverOptions>\n implements IOverlayPopoverContainer\n{\n present(): Promise<void>;\n\n present(target: HTMLElement): Promise<void>;\n\n present(target?: HTMLElement): Promise<void> {\n return this.modal.present(target);\n }\n}\n","import {\n IDrawerOptions,\n IFloatWindowOptions,\n IModal,\n IModalData,\n IModalOptions,\n IPopoverOptions,\n} from '@ibiz-template/runtime';\nimport { h, resolveComponent, VNode } from 'vue';\n\nexport function createOverlayView(props?: IParams): (modal: IModal) => VNode {\n return (modal: IModal) => {\n const viewShell = resolveComponent('IBizViewShell');\n return h(viewShell, {\n ...props,\n modal,\n });\n };\n}\n\nexport async function openViewModal(\n props?: IParams,\n opts?: IModalOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createModal(\n createOverlayView(props),\n undefined,\n opts,\n );\n overlay.present();\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nexport async function openViewFloatWindow(\n props?: IParams,\n opts?: IFloatWindowOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createFloatWindow(\n createOverlayView(props),\n undefined,\n opts,\n );\n overlay.present();\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nexport async function openViewDrawer(\n props?: IParams,\n opts?: IDrawerOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createDrawer(\n createOverlayView(props),\n undefined,\n opts,\n );\n await overlay.present();\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nexport async function openViewPopover(\n event: MouseEvent,\n props?: IParams,\n opts?: IPopoverOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createPopover(\n createOverlayView(props),\n undefined,\n opts,\n );\n overlay.present(event.target as HTMLElement);\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nconst PlacementMap: IData = {\n DRAWER_LEFT: 'left',\n DRAWER_RIGHT: 'right',\n DRAWER_TOP: 'top',\n DRAWER_BOTTOM: 'bottom',\n};\n\nexport function getDrawerPlacement(\n openMode: string,\n): IDrawerOptions['placement'] {\n return PlacementMap[openMode] || 'right';\n}\n","import { IModalData } from '@ibiz-template/runtime';\n\n/**\n * 路由视图关闭回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:51\n * @export\n * @class RouterCallbackItem\n */\nexport class RouterCallbackItem {\n protected resolve?: (modal: IModalData) => void;\n\n protected promise?: Promise<IModalData>;\n\n /**\n * 销毁定时器\n *\n * @author chitanda\n * @date 2023-07-13 21:07:51\n * @type {number}\n */\n timeout?: number;\n\n /**\n * 是否已经有打开的视图认领此回调,如果在一定时间内没有被认领,则会被清除\n *\n * @author chitanda\n * @date 2023-07-13 21:07:35\n */\n isActivated = false;\n\n constructor(\n public from: string,\n public to: string,\n ) {\n ibiz.log.debug('openRouter: ', from, to);\n }\n\n /**\n * 等待视图关闭\n *\n * @author chitanda\n * @date 2023-07-13 21:07:34\n * @return {*} {Promise<IModalData>}\n */\n onWillDismiss(): Promise<IModalData> {\n if (!this.promise) {\n this.promise = new Promise(resolve => {\n this.resolve = resolve;\n });\n }\n return this.promise.then(modal => {\n ibiz.log.debug('onWillDismiss: ', this.from, this.to, modal);\n return modal;\n });\n }\n\n /**\n * 关闭视图\n *\n * @author chitanda\n * @date 2023-07-13 21:07:06\n * @param {IModalData} modal\n */\n close(modal: IModalData): void {\n ibiz.log.debug('closeRouter: ', this.from, this.to, modal);\n if (this.resolve) {\n this.resolve(modal);\n this.resolve = undefined;\n }\n }\n\n /**\n * 激活回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:29\n */\n active(): void {\n ibiz.log.debug('activeRouter: ', this.from, this.to);\n this.isActivated = true;\n }\n\n /**\n * 销毁回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:21\n */\n destroy(): void {\n ibiz.log.debug('destroyRouter: ', this.from, this.to);\n if (this.resolve) {\n this.resolve({ ok: false });\n this.resolve = undefined;\n }\n }\n}\n","import { IModalData } from '@ibiz-template/runtime';\nimport { Router } from 'vue-router';\nimport { RouterCallbackItem } from './router-callback-item';\n\n/**\n * 路由打开视图回调,连通上级视图的关闭\n *\n * @author chitanda\n * @date 2023-07-13 20:07:20\n * @export\n * @class RouterCallback\n */\nexport class RouterCallback {\n /**\n * 回调实例\n *\n * @author chitanda\n * @date 2023-07-13 20:07:12\n * @protected\n * @type {Map<string, RouterCallbackItem>}\n */\n protected map: Map<string, RouterCallbackItem> = new Map();\n\n /**\n * 打开视图\n *\n * @author chitanda\n * @date 2023-07-13 20:07:13\n * @param {Router} router\n * @param {string} path\n * @return {*} {Promise<IModalData>}\n */\n async open(router: Router, path: string): Promise<IModalData> {\n const from = router.currentRoute.value.fullPath;\n router.push({ path });\n const to = path;\n if (this.map.has(to)) {\n const item = this.map.get(to)!;\n return item.onWillDismiss();\n }\n const item = new RouterCallbackItem(from, to);\n this.map.set(to, item);\n this.scheduledDestruction(item);\n return item.onWillDismiss();\n }\n\n /**\n * 关闭视图回调\n *\n * @author chitanda\n * @date 2023-07-13 20:07:38\n * @param {string} toFullPath\n * @param {IModalData} modal\n */\n close(toFullPath: string, modal: IModalData): void {\n const item = this.map.get(toFullPath);\n if (item) {\n item.close(modal);\n this.map.delete(toFullPath);\n }\n }\n\n /**\n * 激活回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:03\n * @param {string} toFullPath\n */\n active(toFullPath: string): void {\n const item = this.map.get(toFullPath);\n if (item) {\n window.clearTimeout(item.timeout);\n item.timeout = undefined;\n item.active();\n }\n }\n\n /**\n * 一分钟内未激活的视图回调会被清除\n *\n * @author chitanda\n * @date 2023-07-13 21:07:57\n * @protected\n * @param {RouterCallbackItem} item\n */\n protected scheduledDestruction(item: RouterCallbackItem): void {\n item.timeout = window.setTimeout(() => {\n item.timeout = undefined;\n item.destroy();\n this.map.delete(item.to);\n }, 10 * 1000);\n }\n}\n\n// 路由打开视图回调,连通上级视图的关闭工具类\nexport const routerCallback = new RouterCallback();\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport { IPortalAsyncAction, IPortalMessage } from '@ibiz-template/core';\nimport dayjs from 'dayjs';\nimport { isNumber } from 'lodash-es';\nimport { computed, onUnmounted, ref } from 'vue';\n\n/**\n * 格式化数据\n * @author lxm\n * @date 2023-11-14 09:02:49\n * @param {IPortalAsyncAction} data\n * @return {*} {IPortalAsyncAction}\n */\nfunction formatAsyncAction(data: IPortalAsyncAction): IPortalAsyncAction {\n // 处理时间日期为毫秒值时,转换成字符串。\n const dateFields = [\n 'begintime',\n 'endtime',\n 'createdate',\n 'updatedate',\n ] as const;\n dateFields.forEach(key => {\n if (isNumber(data[key])) {\n data[key] = dayjs(data[key]).format('YYYY-MM-DD HH:mm:ss');\n }\n });\n return data;\n}\n\n/**\n * 使用异步操作消息\n * @author lxm\n * @date 2023-11-14 03:17:28\n * @export\n * @return {*}\n */\nexport function useAsyncAction() {\n /** 所有消息数据 */\n const allAsyncActions = ref<IPortalAsyncAction[]>([]);\n /** 显示的长度 */\n const showLength = ref(0);\n\n /** 显示的消息数据 */\n const recentAsyncActions = computed(() => {\n return allAsyncActions.value.filter(\n (_item, index) => index < showLength.value,\n );\n });\n\n const load = async () => {\n const res = await ibiz.asyncAction.fetch();\n allAsyncActions.value = res.data;\n };\n\n /**\n * 异步消息变更回调处理\n * @author lxm\n * @date 2023-11-14 03:53:08\n */\n const asyncActionCallBack = (msg: IPortalMessage) => {\n if (!msg.data || msg.subtype !== 'ASYNCACTION') {\n return;\n }\n const asyncAction = formatAsyncAction(msg.data as IPortalAsyncAction);\n const findIndex = allAsyncActions.value.findIndex(\n item => item.asyncacitonid === asyncAction.asyncacitonid,\n );\n if (findIndex !== -1) {\n // 不存在的数据补充到最开始,并显示长度加一\n allAsyncActions.value.unshift(asyncAction);\n showLength.value += 1;\n } else {\n const isShow = findIndex >= showLength.value;\n // 找的到但是不在显示列表里,移到开头,并增加长度\n if (isShow) {\n allAsyncActions.value.splice(findIndex, 1);\n allAsyncActions.value.unshift(asyncAction);\n showLength.value += 1;\n } else {\n allAsyncActions.value.splice(findIndex, 1, asyncAction);\n }\n }\n };\n\n // *初始化操作\n load();\n\n // 监听异步操作消息变更\n ibiz.mc.command.asyncAction.on(asyncActionCallBack);\n // 销毁时删除监听\n onUnmounted(() => {\n ibiz.mc.command.asyncAction.off(asyncActionCallBack);\n });\n\n return { allAsyncActions, recentAsyncActions };\n}\n","import { IPortalAsyncAction } from '@ibiz-template/core';\nimport { defineStore } from 'pinia';\nimport { reactive, Ref } from 'vue';\nimport { useAsyncAction } from '../async-action/async-action';\n\nexport interface IAppStore {\n allAsyncActions: Ref<IPortalAsyncAction[]>;\n recentAsyncActions: IPortalAsyncAction[];\n}\n\nexport const useAppStore = defineStore('appStore', () => {\n const { allAsyncActions, recentAsyncActions } = useAsyncAction();\n const appStore = reactive<IAppStore>({\n allAsyncActions,\n get recentAsyncActions() {\n return recentAsyncActions.value;\n },\n });\n\n return { appStore };\n});\n","import { Ref, ref } from 'vue';\n\nexport interface IzIndexStore {\n /**\n * 当前最高的ui层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:48\n * @type {number}\n */\n zIndex: Ref<number>;\n\n /**\n * 增加Ui层级,返回增加后的层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:22\n */\n increment(): number;\n\n /**\n * 减少Ui层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:22\n */\n decrement(): void;\n}\n\n/**\n * 定义zIndex的全局状态变量\n *\n * @author lxm\n * @date 2022-08-18 21:08:26\n * @export\n * @returns {*}\n */\nexport function useZIndexStore(): IzIndexStore {\n const DEFAULT_INDEX = 500;\n const INCREMENT_VALUE = 1;\n const zIndex = ref(DEFAULT_INDEX);\n\n function increment(): number {\n zIndex.value += INCREMENT_VALUE;\n return zIndex.value;\n }\n\n function decrement() {\n zIndex.value -= INCREMENT_VALUE;\n }\n\n return { zIndex, increment, decrement };\n}\n","import { defineStore } from 'pinia';\nimport { reactive, Ref } from 'vue';\nimport { useZIndexStore } from './z-index';\n\nexport interface IUIState {\n /**\n * ui层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:48\n * @type {number}\n */\n zIndex: Ref<number>;\n\n theme: string;\n}\n\nexport const useUIStore = defineStore('uiStore', () => {\n const zIndex = useZIndexStore();\n\n const UIStore = reactive<IUIState>({\n zIndex: zIndex.zIndex,\n theme: 'light',\n });\n\n return { UIStore, zIndex };\n});\n","import { createPinia } from 'pinia';\n\nexport * from './app-store/app-store';\nexport * from './ui-store/ui-store';\n\nexport const piniaInstance = createPinia();\n","import { RouteLocationNormalizedLoaded, useRoute } from 'vue-router';\nimport { ref, Ref, watch } from 'vue';\nimport { RouteListener } from '../../util';\n\n/**\n * 获取路由查询参数\n *\n * @author chitanda\n * @date 2022-08-15 15:08:28\n * @export\n * @return {*} {IParams}\n */\nexport function useRouterQuery(): IParams {\n const route = useRoute();\n const { query } = route;\n return query;\n}\n\n/**\n * 监听普通的key变更,在路由下次更新后再改变赋给新的RouteKey\n * 第一次默认值会直接赋给routeKey\n *\n * @export\n * @param {Ref<string>} originKey 监听的原始Ref\n * @param {RouteLocationNormalizedLoaded} route 路由\n * @param {Ref<string>} [routeKey] 预先提供的转换后的Ref\n * @returns {*} {Ref<string>}\n */\nexport function useRouteKey(\n originKey: Ref<string>,\n route: RouteLocationNormalizedLoaded,\n routeKey?: Ref<string>,\n): Ref<string> {\n if (!routeKey) {\n routeKey = ref('');\n }\n routeKey.value = originKey.value;\n const routeListener = new RouteListener(route);\n watch(originKey, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n routeListener.nextChange(() => {\n routeKey!.value = newVal;\n });\n }\n });\n return routeKey;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CTX,\n IViewController,\n IViewProvider,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { clearAll } from 'qx-util';\nimport {\n getCurrentInstance,\n inject,\n onBeforeUnmount,\n provide,\n reactive,\n watch,\n} from 'vue';\nimport { useForce, useProps } from '../../vue/vue';\n\n/**\n * 监听并更新上下文和视图参数(引用不变)\n * @author lxm\n * @date 2023-05-25 01:48:14\n * @param {IData} props\n * @param {IViewController} view\n */\nfunction watchAndUpdateContextParams(\n props: IData,\n view: IViewController,\n): void {\n watch(\n () => ({ context: props.context, params: props.params }),\n newVal => {\n // 不改变引用的情况下,重置控制器里的上下文和视图参数。\n view.context.reset({}, newVal.context);\n clearAll(view.params);\n Object.assign(view.params, newVal.params);\n // 重新计算上下文和视图参数\n view.handleContextParams();\n ibiz.log.debug(`${view.model.id}的上下文或视图参数变更:`, newVal);\n },\n );\n}\n\n/**\n * 监听并更新state\n * @author lxm\n * @date 2023-05-26 03:43:23\n * @param {IData} props\n * @param {IViewController} view\n */\nfunction watchAndUpdateState(props: IData, view: IViewController): void {\n watch(\n () => {\n return props.state ? { ...props.state } : {};\n },\n (newVal, oldVal) => {\n const changeProps: IData = {};\n Object.keys(newVal).forEach(key => {\n if (newVal[key] !== (oldVal || {})[key]) {\n changeProps[key] = newVal[key];\n }\n });\n ibiz.log.debug(`视图 [${view.model.name}] state 变更`, changeProps);\n Object.keys(changeProps).forEach(key => {\n (view.state as any)[key] = changeProps[key];\n });\n },\n { immediate: true },\n );\n}\n\n/**\n * 初始化视图控制器\n *\n * @description 此视图暂时控制器实例化只用于路由一级视图\n * @author chitanda\n * @date 2022-08-15 15:08:04\n * @export\n * @template T\n * @param {(context: IContext, params: IParams, ctx?: CTX) => T} fn\n * @return {*} {T}\n */\nexport function useViewController<T extends IViewController>(\n fn: (...args: ConstructorParameters<typeof ViewController>) => T,\n): T {\n // 获取 props\n const props = useProps();\n // 获取上层组件的ctx\n const ctx = inject<CTX | undefined>('ctx', undefined);\n // 上下文里提前预告部件\n ctx?.evt.emit('onForecast', props.modelData.name!);\n\n // 实例化视图控制器\n const provider = props.provider as IViewProvider | undefined;\n let c: T;\n if (provider?.createController) {\n // 如果适配器给了创建方法使用适配器的方法\n c = provider.createController(\n props.modelData,\n props.context,\n props.params,\n ctx,\n ) as T;\n } else {\n c = fn(props.modelData, props.context, props.params, ctx);\n }\n\n watchAndUpdateContextParams(props, c);\n watchAndUpdateState(props, c);\n\n // 提供自身的ctx给下层组件\n provide('ctx', (c as any).ctx);\n // 让state 响应式\n c.state = reactive(c.state) as any;\n\n // 让state 响应式\n c.slotProps = reactive(c.slotProps) as any;\n\n // 从props赋值modal,如果存在的话。\n if (props.modal) {\n c.modal = props.modal;\n }\n\n c.force = useForce();\n\n const vue = getCurrentInstance()!.proxy!;\n c.evt.onAll((eventName, event) => {\n vue.$emit(eventName.slice(2), event);\n });\n\n c.created();\n\n // 卸载时销毁\n onBeforeUnmount(() => c.destroyed());\n return c;\n}\n","import { defineComponent, PropType, VNode, computed } from 'vue';\nimport { ISysImage } from '@ibiz/model-core';\nimport { IIcon } from '@ibiz-template/runtime';\nimport { isSvg } from '@ibiz-template/core';\nimport { useNamespace } from '../../use';\n\nexport const IBizIcon = defineComponent({\n name: 'IBizIcon',\n props: {\n icon: {\n type: Object as PropType<ISysImage | IIcon>,\n },\n size: {\n type: String as PropType<'small' | 'medium' | 'large'>,\n },\n baseDir: {\n type: String,\n default: 'images',\n },\n },\n setup(props) {\n const ns = useNamespace('icon');\n const BaseUrl = `${ibiz.env.assetsUrl}/${props.baseDir}/`;\n\n function getContent(icon?: IData): VNode | null {\n if (icon) {\n if (icon.htmlStr) {\n return <span class={ns.b()} v-html={icon.htmlStr}></span>;\n }\n if (icon.cssClass) {\n if (icon.cssClass.indexOf('fa-') !== -1) {\n return <i class={[ns.b(), icon.cssClass]} />;\n }\n return <ion-icon class={ns.b()} name={icon.cssClass}></ion-icon>;\n }\n if (icon.imagePath) {\n if (icon.imagePath.endsWith('svg')) {\n if (icon.imagePath.startsWith('http')) {\n return <img class={ns.b()} src={icon.imagePath}></img>;\n }\n return (\n <ion-icon\n src={BaseUrl + icon.imagePath}\n class={ns.b()}\n ></ion-icon>\n );\n }\n if (icon.imagePath.startsWith('http')) {\n return <img class={ns.b()} src={icon.imagePath} />;\n }\n return <img class={ns.b()} src={BaseUrl + icon.imagePath} />;\n }\n if (icon.rawContent) {\n if (isSvg(icon.rawContent)) {\n return <div class={ns.b()} v-html={icon.rawContent}></div>;\n }\n return <img class={ns.b()} src={icon.rawContent} />;\n }\n }\n return null;\n }\n\n const content = computed<VNode | null>(() => {\n return getContent(props.icon);\n });\n\n return (): VNode | null => content.value;\n },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNotNil } from 'ramda';\nimport { defineComponent, h, PropType, VNode, watch } from 'vue';\nimport { RouteLocationNormalizedLoaded } from 'vue-router';\n\n/**\n * 只会第一次绘制的时候绘制路由相关的内容,后面路由导致的router-view的回调都屏蔽了。\n * 通过变更manualKey,来强制刷新router-view的slot回调。并且吧manualKey传给Component的key,搭配AppKeepAlive可以缓存组件\n */\n\nexport const IBizRouterView = defineComponent({\n name: 'IBizRouterView',\n inheritAttrs: false,\n props: {\n name: {\n type: String as PropType<string>,\n default: 'default',\n },\n route: Object as PropType<RouteLocationNormalizedLoaded>,\n manualKey: {\n type: String,\n },\n },\n setup(props, { attrs }) {\n const cache: { vNode?: VNode } = {};\n\n let isActive = true;\n\n watch(\n () => props.manualKey,\n (newVal, oldVal) => {\n if (isNotNil(newVal) && newVal !== oldVal) {\n isActive = true;\n }\n },\n );\n\n const renderComp = (Component: VNode, _route: any): VNode | undefined => {\n // 非激活时返回缓存\n if (!isActive) {\n return cache.vNode;\n }\n isActive = false;\n if (Component) {\n const tempProps = { ...Component.props };\n delete tempProps.onVnodeUnmounted;\n delete tempProps.ref;\n const hNode = h(Component.type as string, {\n ...tempProps,\n ...attrs,\n key: props.manualKey,\n });\n cache.vNode = hNode;\n return hNode;\n }\n return undefined;\n };\n\n return { renderComp };\n },\n render() {\n return (\n <router-view name={this.name} route={this.route}>\n {({ Component, route }: any): VNode | VNode[] | undefined => {\n const newComp = this.renderComp(Component, route);\n if (this.$slots.default) {\n return this.$slots.default({ Component: newComp, route });\n }\n return newComp;\n }}\n </router-view>\n );\n },\n});\n","import {\n ControlController,\n IControlProvider,\n IViewLayoutPanelController,\n} from '@ibiz-template/runtime';\nimport { IControlContainer } from '@ibiz/model-core';\nimport { isNil } from 'ramda';\nimport {\n CSSProperties,\n defineComponent,\n h,\n PropType,\n reactive,\n resolveComponent,\n VNode,\n} from 'vue';\nimport { useNamespace } from '../../use';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const IBizControlBase: any = defineComponent({\n name: 'IBizControlBase',\n props: {\n controller: {\n type: Object as PropType<ControlController>,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('control');\n const { controlType, sysCss, codeName } = props.controller.model;\n const typeClass = controlType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const model = props.controller.model;\n\n /** 子部件模型 */\n const controls = (props.controller.model as IControlContainer).controls;\n\n const onLayoutPanelCreated = (\n controller: IViewLayoutPanelController,\n ): void => {\n props.controller.setLayoutPanel(controller as IViewLayoutPanelController);\n };\n\n const inlineStyle = reactive<CSSProperties>({});\n // 非导航栏时才输出宽高\n if (model.controlType!.endsWith('EXPBAR') === false) {\n if (!isNil(model.width)) {\n inlineStyle.width = `${model.width}px`;\n }\n if (!isNil(model.height)) {\n inlineStyle.height = `${model.height}px`;\n }\n }\n\n return {\n ns,\n typeClass,\n sysCssName,\n inlineStyle,\n codeName,\n controls,\n onLayoutPanelCreated,\n };\n },\n render() {\n const { state, controlPanel, providers } = this.controller;\n let layoutPanel = null;\n // 有部件布局的绘制布局面板\n if (state.isCreated && controlPanel) {\n // 绘制部件插槽,外部插槽优先\n const slots: IData = {\n ...this.$slots,\n };\n\n if (this.controls?.length) {\n this.controls.forEach(ctrl => {\n const slotKey = ctrl.name!;\n const ctrlProps = {\n context: this.controller.context,\n params: this.controller.params,\n };\n // 已经有插槽的不用自己绘制了。\n const outCtrlSlot = slots[slotKey];\n if (outCtrlSlot) {\n slots[slotKey] = (): VNode => {\n return outCtrlSlot(ctrlProps);\n };\n } else {\n slots[slotKey] = (): VNode => {\n const comp = resolveComponent('IBizControlShell') as string;\n return h(comp, {\n modelData: ctrl,\n ...ctrlProps,\n });\n };\n }\n });\n }\n\n // 绘制布局面板\n const provider = providers[controlPanel.name!] as IControlProvider;\n layoutPanel = h(\n resolveComponent(provider.component) as string,\n {\n modelData: controlPanel,\n context: this.controller.context,\n params: this.controller.params,\n provider,\n container: this.controller,\n onControllerAppear: this.onLayoutPanelCreated,\n },\n slots,\n );\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.b(this.typeClass),\n this.ns.m(this.codeName),\n this.sysCssName,\n ]}\n style={this.inlineStyle}\n >\n {layoutPanel || this.$slots.default?.()}\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\n/* eslint-disable vue/no-mutating-props */\nimport {\n CTX,\n getControlProvider,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport {\n defineComponent,\n h,\n inject,\n PropType,\n ref,\n resolveComponent,\n} from 'vue';\nimport './control-shell.scss';\nimport { IControl } from '@ibiz/model-core';\nimport { useNamespace } from '../../use';\n\nexport const IBizControlShell = defineComponent({\n name: 'IBizControlShell',\n props: {\n modelData: { type: Object as PropType<IControl>, required: true },\n },\n setup(props) {\n // 上下文里提前预告部件\n const ctx = inject('ctx') as CTX;\n\n ctx.evt.emit('onForecast', props.modelData.name!);\n\n const isComplete = ref(false);\n const errMsg = ref('');\n const provider = ref<IControlProvider>();\n getControlProvider(props.modelData)\n .then(item => {\n if (!item) {\n errMsg.value = `未找到对应部件的适配器`;\n } else {\n provider.value = item;\n }\n isComplete.value = true;\n })\n .catch(err => {\n ibiz.log.error(err);\n errMsg.value = err.message;\n isComplete.value = true;\n });\n const ns = useNamespace('control-shell');\n\n return { ns, isComplete, errMsg, provider };\n },\n render() {\n if (this.isComplete && this.provider) {\n return h(\n resolveComponent(this.provider.component) as string,\n {\n provider: this.provider,\n ...this.$props,\n ...this.$attrs,\n },\n this.$slots,\n );\n }\n return (\n <div class={this.ns.b()} v-loading={!this.isComplete}>\n {this.isComplete ? this.errMsg : null}\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\n/* eslint-disable vue/no-mutating-props */\nimport { getViewProvider, IViewProvider } from '@ibiz-template/runtime';\nimport { defineComponent, h, PropType, ref, resolveComponent } from 'vue';\nimport './view-shell.scss';\nimport { IAppView } from '@ibiz/model-core';\nimport { RuntimeError } from '@ibiz-template/core';\nimport { useNamespace } from '../../use';\n\nexport const IBizViewShell = defineComponent({\n name: 'IBizViewShell',\n props: {\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams> },\n modelData: { type: Object as PropType<IAppView> },\n viewId: { type: String },\n },\n setup(props) {\n const ns = useNamespace('view-shell');\n const isComplete = ref(false);\n const errMsg = ref('');\n const provider = ref<IViewProvider>();\n const viewModelData = ref<IAppView | undefined>();\n // 初始化方法\n const init = async (): Promise<void> => {\n let viewModel: IAppView | undefined;\n if (props.modelData) {\n viewModel = props.modelData;\n } else {\n viewModel = await ibiz.hub.getAppView(props.viewId!);\n }\n if (!viewModel) {\n throw new RuntimeError('未找到视图模型');\n }\n viewModelData.value = viewModel;\n try {\n provider.value = await getViewProvider(viewModel);\n } catch (error) {\n ibiz.log.error(error);\n errMsg.value = (error as IData).message;\n } finally {\n isComplete.value = true;\n }\n };\n\n init();\n\n return { ns, isComplete, errMsg, viewModelData, provider };\n },\n render() {\n if (this.isComplete && this.provider) {\n return h(\n resolveComponent(this.provider.component) as string,\n {\n context: this.$props.context,\n params: this.$props.params,\n modelData: this.viewModelData,\n ...this.$attrs,\n provider: this.provider,\n },\n this.$slots,\n );\n }\n return (\n <div class={this.ns.b()} v-loading={!this.isComplete}>\n {this.isComplete ? this.errMsg : null}\n </div>\n );\n },\n});\n","import { CodeListItem } from '@ibiz-template/runtime';\nimport { isNil } from 'ramda';\nimport { defineComponent, PropType, ref, watch } from 'vue';\nimport { IAppCodeList } from '@ibiz/model-core';\nimport './code-list.scss';\nimport { useNamespace } from '../../use';\n\nexport const IBizCodeList = defineComponent({\n name: 'IBizCodeList',\n props: {\n codeListItems: {\n type: Array<CodeListItem>,\n },\n codeList: {\n type: Object as PropType<IAppCodeList>,\n required: true,\n },\n value: {\n type: [String, Number],\n },\n },\n emits: {\n infoTextChange: (_text: string) => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('code-list');\n const items = ref<IData[]>([]);\n\n watch(items, newVal => {\n let infoText = '';\n if (newVal.length > 0) {\n infoText = newVal\n .map(item => item.text)\n .join(props.codeList?.textSeparator);\n }\n emit('infoTextChange', infoText);\n });\n\n const findCodeListItem = (\n codelist: CodeListItem[] | undefined,\n value: string | number,\n ) => {\n if (codelist) {\n // eslint-disable-next-line eqeqeq\n const findItem = codelist.find(item => item.value == value);\n if (findItem) {\n return findItem;\n }\n for (let i = 0; i < codelist.length; i++) {\n const childrenItem = findCodeListItem(\n codelist[i].children,\n value,\n ) as CodeListItem;\n if (childrenItem) {\n return childrenItem;\n }\n }\n }\n };\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (isNil(newVal) || newVal === '') {\n // 空值置空\n items.value = [];\n } else {\n // 非空值解析代码表\n let values: string[] | number[];\n if (typeof newVal === 'string') {\n values = newVal.split(props.codeList?.valueSeparator || ',');\n } else {\n values = [newVal];\n }\n items.value = values.map(val => {\n const findItem = findCodeListItem(props.codeListItems, val);\n return {\n text: findItem?.text || val,\n color: findItem?.color,\n textCls: findItem?.textCls,\n };\n });\n }\n }\n },\n { immediate: true },\n );\n\n const emptyText =\n props.codeList.emptyText === '未定义'\n ? '- - -'\n : props.codeList.emptyText;\n\n return { items, ns, emptyText };\n },\n render() {\n return (\n <span class={this.ns.b()}>\n {this.items.length === 0\n ? this.emptyText\n : this.items.map((item, index) => {\n return [\n index !== 0 ? this.codeList?.textSeparator : null,\n <span\n class={[\n this.ns.e('item'),\n item.textCls ? item.textCls : null,\n ]}\n style={this.ns.cssVarBlock({\n 'item-color': `${item.color}`,\n })}\n >\n {item.text}\n </span>,\n ];\n })}\n </span>\n );\n },\n});\n","import { CTX } from '@ibiz-template/runtime';\nimport { defineComponent, inject, PropType } from 'vue';\n\nexport const ControlLoadingPlaceholder = defineComponent({\n name: 'ControlLoadingPlaceholder',\n props: {\n modelData: { type: Object as PropType<IData>, required: true },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n },\n setup(props) {\n // 上下文里提前预告部件\n const ctx = inject('ctx') as CTX;\n\n ctx.evt.emit('onForecast', props.modelData.name!);\n\n return {};\n },\n render() {\n return null;\n },\n});\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class PanelContainerState\n * @extends {PanelItemState}\n */\nexport class PanelContainerState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerState } from './panel-container.state';\n\n/**\n * 面板容器控制器\n *\n * @export\n * @class PanelContainerController\n * @extends {PanelItemController}\n */\nexport class PanelContainerController extends PanelItemController<IPanelContainer> {\n declare state: PanelContainerState;\n\n protected createState(): PanelContainerState {\n return new PanelContainerState(this.parent?.state);\n }\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelContainerController } from './panel-container.controller';\nimport './panel-container.scss';\n\nexport const PanelContainer = defineComponent({\n name: 'IBizPanelContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-container');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n result = [\n ...result,\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n return { ns, classArr };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n const content = (\n <iBizRow slot='content' layout={this.modelData.layout}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n return (\n <iBizCol\n layoutPos={props.modelData.layoutPos}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n >\n {this.controller.model.cssStyle ? (\n <style type='text/css'>{this.controller.model.cssStyle}</style>\n ) : null}\n {content}\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerController } from './panel-container.controller';\n\n/**\n * 面板容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelContainerProvider\n * @implements {EditorProvider}\n */\nexport class PanelContainerProvider implements IPanelItemProvider {\n component: string = 'IBizPanelContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PanelContainer } from './panel-container';\nimport { PanelContainerProvider } from './panel-container.provider';\nimport { PanelContainerState } from './panel-container.state';\nimport { PanelContainerController } from './panel-container.controller';\n\nexport { PanelContainerState, PanelContainerController };\n\nexport const IBizPanelContainer = withInstall(\n PanelContainer,\n function (v: App) {\n v.component(PanelContainer.name, PanelContainer);\n registerPanelItemProvider('CONTAINER', () => new PanelContainerProvider());\n registerPanelItemProvider(\n 'CONTAINER_DEFAULT',\n () => new PanelContainerProvider(),\n );\n // registerPanelItemProvider(\n // 'CONTAINER_CONTAINER_GRID',\n // () => new PanelContainerProvider(),\n // );\n },\n);\n\nexport default IBizPanelContainer;\n","import { CTX, IControlController } from '@ibiz-template/runtime';\nimport { IPanelCtrlPos } from '@ibiz/model-core';\nimport { defineComponent, inject, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelCtrlPosController } from './panel-ctrl-pos.controller';\nimport './panel-ctrl-pos.scss';\n\nexport const PanelCtrlPos = defineComponent({\n name: 'IBizPanelCtrlPos',\n props: {\n modelData: {\n type: Object as PropType<IPanelCtrlPos>,\n required: true,\n },\n controller: {\n type: Object as PropType<PanelCtrlPosController>,\n required: true,\n },\n },\n setup(props) {\n // 上下文里提前预告部件\n const ctx = inject('ctx') as CTX;\n ctx.evt.on('onRegister', (name, c) => {\n if (name === props.modelData.id) {\n props.controller.bindControl(c as IControlController);\n }\n });\n\n const ns = useNamespace('panel-ctrl-pos');\n return { ns };\n },\n render() {\n const { state } = this.controller;\n let content: VNode | VNode[] | undefined;\n\n if (this.$slots.default) {\n content = this.$slots.default();\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n this.ns.is('hidden', !state.visible),\n ]}\n >\n {content || (ibiz.env.dev ? `未提供${this.modelData.id}插槽` : '')}\n </div>\n );\n },\n});\n","import {\n IControlController,\n PanelItemController,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\nimport { IPanelCtrlPos } from '@ibiz/model-core';\n\n/**\n * 面板控件占位控制器\n *\n * @author lxm\n * @date 2023-02-07 06:05:23\n * @export\n * @class PanelButtonController\n * @extends {PanelItemController}\n */\nexport class PanelCtrlPosController extends PanelItemController<IPanelCtrlPos> {\n /**\n * 面板控制器\n *\n * @author lxm\n * @date 2022-08-24 22:08:59\n * @type {PanelController}\n */\n declare panel: ViewLayoutPanelController;\n\n /**\n * 部件占位对应部件控制器\n * @author lxm\n * @date 2023-08-09 10:41:38\n * @type {IControlController}\n */\n control?: IControlController;\n\n /**\n * 绑定部件控制器\n * @author lxm\n * @date 2023-08-09 10:42:30\n * @param {IControlController} controller\n */\n bindControl(controller: IControlController): void {\n this.control = controller;\n\n // 绑定部件,并监听所有事件,通过面板转发部件的事件。\n controller.evt.onAll((eventName, event) => {\n this.panel.evt.emit('onControlEvent', {\n triggerControlName: this.model.id!,\n triggerEventName: eventName,\n triggerEvent: event,\n });\n });\n }\n}\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelCtrlPos } from '@ibiz/model-core';\nimport { PanelCtrlPosController } from './panel-ctrl-pos.controller';\n\n/**\n * 面板控件占位适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelCtrlPosProvider\n * @implements {EditorProvider}\n */\nexport class PanelCtrlPosProvider implements IPanelItemProvider {\n component: string = 'IBizPanelCtrlPos';\n\n async createController(\n panelItem: IPanelCtrlPos,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelCtrlPosController> {\n const c = new PanelCtrlPosController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PanelCtrlPos } from './panel-ctrl-pos';\nimport { PanelCtrlPosProvider } from './panel-ctrl-pos.provider';\nimport { PanelCtrlPosController } from './panel-ctrl-pos.controller';\n\nexport { PanelCtrlPosController };\nexport const IBizPanelCtrlPos = withInstall(PanelCtrlPos, function (v: App) {\n v.component(PanelCtrlPos.name, PanelCtrlPos);\n registerPanelItemProvider('CTRLPOS', () => new PanelCtrlPosProvider());\n});\n\nexport default IBizPanelCtrlPos;\n","import { IPanelContainer } from '@ibiz/model-core';\nimport {\n PanelItemController,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\n\n/**\n * 面板滚动容器项控制器\n *\n * @author lxm\n * @date 2023-02-07 06:05:23\n * @export\n * @class PanelButtonController\n * @extends {PanelItemController}\n */\nexport class ScrollContainerItemController extends PanelItemController<IPanelContainer> {\n /**\n * 面板控制器\n *\n * @author lxm\n * @date 2022-08-24 22:08:59\n * @type {PanelController}\n */\n declare panel: ViewLayoutPanelController;\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../../use';\nimport { ScrollContainerItemController } from './scroll-container-item.controller';\nimport './scroll-container-item.scss';\n\nexport const ScrollContainerItem = defineComponent({\n name: 'IBizScrollContainerItem',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: ScrollContainerItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('scroll-container-item');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n return { ns, classArr };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n\n return (\n <iBizRow class={this.classArr} layout={{ layout: 'FLEX' }}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n props.modelData.layoutPos.layout = 'FLEX';\n return (\n <iBizCol\n layoutPos={props.modelData.layoutPos}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { ScrollContainerItemController } from './scroll-container-item.controller';\n\n/**\n * 面板滚动条容器项适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class ScrollContainerItemProvider\n * @implements {EditorProvider}\n */\nexport class ScrollContainerItemProvider implements IPanelItemProvider {\n component: string = 'IBizScrollContainerItem';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<ScrollContainerItemController> {\n const c = new ScrollContainerItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport {\n PanelItemController,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\n\n/**\n * 面板滚动容器控制器\n *\n * @author lxm\n * @date 2023-02-07 06:05:23\n * @export\n * @class PanelButtonController\n * @extends {PanelItemController}\n */\nexport class ScrollContainerController extends PanelItemController<IPanelContainer> {\n /**\n * 面板控制器\n *\n * @author lxm\n * @date 2022-08-24 22:08:59\n * @type {PanelController}\n */\n declare panel: ViewLayoutPanelController;\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n // 滚动容器高宽默认占满\n this.state.layout.width = '100%';\n this.state.layout.height = '100%';\n }\n}\n","/* eslint-disable no-restricted-syntax */\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../../use';\nimport { ScrollContainerController } from './scroll-container.controller';\nimport './scroll-container.scss';\n\nexport const ScrollContainer = defineComponent({\n name: 'IBizScrollContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: ScrollContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('scroll-container');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n return { ns, classArr };\n },\n render() {\n let left: VNode | null = null;\n let top: VNode | null = null;\n let right: VNode | null = null;\n let bottom: VNode | null = null;\n let center: VNode | null = null;\n\n const slotStylle: IData = {};\n\n // 内容区默认插槽处理,处理滚动容器项\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n defaultSlots.forEach(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return;\n }\n\n const { width, height } = props.controller.state.layout;\n switch (props.modelData.layoutPos.layoutPos) {\n case 'WEST':\n left = slot;\n slotStylle.left = { width };\n break;\n case 'EAST':\n right = slot;\n slotStylle.right = { width };\n break;\n case 'NORTH':\n top = slot;\n slotStylle.top = { height };\n break;\n case 'SOUTH':\n bottom = slot;\n slotStylle.bottom = { height };\n break;\n case 'CENTER':\n center = slot;\n break;\n default:\n ibiz.log.debug(\n `未适配的布局占位${props.modelData.layoutPos.layoutPos}`,\n );\n break;\n }\n });\n\n // 如果配了高宽,默认给压缩比为0\n for (const key in slotStylle) {\n if (slotStylle[key].width || slotStylle[key].height) {\n slotStylle[key].flexShrink = 0;\n }\n }\n\n return (\n <div class={this.classArr}>\n <div class={[this.ns.e('header')]} style={slotStylle.top}>\n {top}\n </div>\n <div class={[this.ns.b('content')]}>\n <div class={this.ns.be('content', 'left')} style={slotStylle.left}>\n {left}\n </div>\n <div class={this.ns.be('content', 'center')}>{center}</div>\n <div class={this.ns.be('content', 'right')} style={slotStylle.right}>\n {right}\n </div>\n </div>\n <div class={[this.ns.e('footer')]} style={slotStylle.bottom}>\n {bottom}\n </div>\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { ScrollContainerController } from './scroll-container.controller';\n\n/**\n * 面板滚动条容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class ScrollContainerProvider\n * @implements {EditorProvider}\n */\nexport class ScrollContainerProvider implements IPanelItemProvider {\n component: string = 'IBizScrollContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<ScrollContainerController> {\n const c = new ScrollContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { ScrollContainerItem } from './scroll-container-item/scroll-container-item';\nimport { ScrollContainerItemProvider } from './scroll-container-item/scroll-container-item.provider';\nimport { ScrollContainer } from './scroll-container/scroll-container';\nimport { ScrollContainerProvider } from './scroll-container/scroll-container.provider';\n\nexport * from './scroll-container';\nexport * from './scroll-container-item';\n\nexport const IBizScrollContainer = withInstall(\n ScrollContainer,\n function (v: App) {\n v.component(ScrollContainer.name, ScrollContainer);\n v.component(ScrollContainerItem.name, ScrollContainerItem);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL',\n () => new ScrollContainerProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_LEFT',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_HEADER',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_RIGHT',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_BOTTOM',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_MAIN',\n () => new ScrollContainerItemProvider(),\n );\n },\n);\n\nexport default IBizScrollContainer;\n","import { INavViewMsg, PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 导航占位状态\n *\n * @export\n * @class NavPosState\n * @extends {PanelItemState}\n */\nexport class NavPosState extends PanelItemState {\n /**\n * 是否启用缓存\n *\n * @type {boolean}\n * @memberof NavPosState\n */\n cache: boolean = true;\n\n /**\n * 是否是路由打开\n *\n * @author zk\n * @date 2023-09-26 04:09:23\n * @type {boolean}\n * @memberof NavPosState\n */\n routeOpen: boolean = true;\n\n /**\n * 当前导航视图标识\n * @author lxm\n * @date 2023-05-25 06:24:48\n * @type {string}\n */\n currentKey: string = '';\n\n /**\n * 缓存的视图标识\n * @author lxm\n * @date 2023-05-25 06:25:21\n * @type {string[]}\n */\n cacheKeys: string[] = ['RouterShell'];\n\n /**\n * 导航视图详细信息\n * @author lxm\n * @date 2023-05-25 07:07:05\n * @type {INavViewMsg[]}\n */\n navViewMsgs: { [p: string]: INavViewMsg } = {};\n}\n","import {\n EventBase,\n IModal,\n Modal,\n OpenAppViewCommand,\n IPanelItemNavPosController,\n ViewMode,\n INavViewMsg,\n NavViewChangeEvent,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { RouteLocationNormalizedLoaded, Router } from 'vue-router';\nimport { notNilEmpty } from 'qx-util';\nimport { mergeLeft } from 'ramda';\nimport { NavPosState } from './nav-pos.state';\nimport { getNestedRoutePath } from '../../util';\n\nconst excludeKeys = ['is404', 'isRoutePushed'] as const;\n\n/**\n * 导航占位控制器\n *\n * @export\n * @class NavPosController\n * @extends {PanelItemController}\n */\nexport class NavPosController\n extends PanelItemController<IPanelRawItem>\n implements IPanelItemNavPosController\n{\n /**\n * 导航占位状态\n *\n * @type {NavPosState}\n * @memberof NavPosController\n */\n declare state: NavPosState;\n\n /**\n * 导航视图的modal\n *\n * @type {{ [key: string]: IModal }}\n * @memberof NavPosController\n */\n viewModals: { [key: string]: IModal } = {};\n\n /**\n * 当前导航视图\n *\n * @type {INavViewMsg}\n * @memberof NavPosController\n */\n curNavViewMsg!: INavViewMsg;\n\n /**\n * Router 对象\n *\n * @type {Router}\n * @memberof NavPosController\n */\n router!: Router;\n\n /**\n * 关联部件标识集合\n * @author lxm\n * @date 2023-08-10 07:35:08\n * @type {string[]}\n */\n refCtrlKeys: string[] = [];\n\n /**\n * 自定义补充参数\n *\n * @author zk\n * @date 2023-09-27 03:09:02\n * @type {IData}\n * @memberof NavPosController\n */\n rawItemParams: IData = {};\n\n /**\n * Route 对象\n *\n * @author zk\n * @date 2023-06-29 04:06:59\n * @type {RouteLocationNormalizedLoaded}\n * @memberof NavPosController\n */\n get route(): RouteLocationNormalizedLoaded {\n return this.router.currentRoute.value;\n }\n\n /**\n * 导航项是否缓存\n *\n * @author zk\n * @date 2023-09-27 03:09:49\n * @param {INavViewMsg} navViewMsg\n * @return {*} {boolean}\n * @memberof NavPosController\n */\n getExpItemIsCache(navViewMsg: INavViewMsg): boolean {\n if (this.rawItemParams.expcache === 'CACHE') {\n return true;\n }\n if (this.rawItemParams.expcache === 'NO_CACHE') {\n return false;\n }\n return navViewMsg.isCache as boolean;\n }\n\n /**\n * 设置 Router 对象\n *\n * @param {Router} router\n * @memberof NavPosController\n */\n setRouter(router: Router): void {\n this.router = router;\n }\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n this.handleRawItemParams();\n if (this.model.rawItem?.rawItemParams) {\n this.model.rawItem.rawItemParams.find(item => {\n if (item.key === 'REFCTRL' && item.value) {\n this.refCtrlKeys = item.value\n .split(';')\n .map(str => str.toLowerCase());\n return true;\n }\n return false;\n });\n }\n\n this.panel.evt.on('onControlEvent', event => {\n // 是否是关联部件,如果没有配置都监控,配置了只监控指定部件\n const isRefCtrl =\n this.refCtrlKeys.length === 0 ||\n this.refCtrlKeys.includes(event.triggerControlName);\n if (isRefCtrl && event.triggerEventName === 'onNavViewChange') {\n const triggerEvent = event.triggerEvent as NavViewChangeEvent;\n this.openView(triggerEvent.navViewMsg);\n }\n });\n\n // 根据 导航占位参数 || 视图参数 判断是否用路由打开视图 不使用:NO_ROUTE 使用 :ROUTE\n // 导航占位参数优先级大于视图参数\n const expRoute =\n this.rawItemParams.expmode || this.panel.view.params.expmode;\n\n // 路由模式下 必须为路由打开\n if (expRoute === 'ROUTE' && this.routeDepth) {\n this.state.routeOpen = true;\n } else if (expRoute === 'NO_ROUTE') {\n this.state.routeOpen = false;\n } else {\n this.state.routeOpen = !!this.routeDepth;\n }\n // 消费完参数销毁 expmode\n if (this.panel.view.params.expmode) {\n delete this.panel.view.params.expmode;\n }\n }\n\n /**\n * 创建导航占位状态对象\n *\n * @protected\n * @return {*} {NavPosState}\n * @memberof NavPosController\n */\n protected createState(): NavPosState {\n return new NavPosState(this.parent?.state);\n }\n\n /**\n * 当前路由视图的层级\n *\n * @readonly\n * @type {(number | undefined)}\n * @memberof NavPosController\n */\n get routeDepth(): number | undefined {\n return this.panel.view.modal.routeDepth;\n }\n\n /**\n * 路由改变\n *\n * @memberof NavPosController\n */\n onRouteChange(route: RouteLocationNormalizedLoaded): void {\n // 没有当前导航视图信息时不做任何处理\n if (this.curNavViewMsg) {\n // 路由打开的视图,currentKey在路由变更之后改值。此时新建的视图才能识别到跳转之后的路由。\n this.state.currentKey = this.curNavViewMsg.key;\n\n // 更新fullPath信息\n this.state.navViewMsgs[this.curNavViewMsg.key].fullPath = route.fullPath;\n }\n }\n\n /**\n * 设置导航视图信息\n *\n * @author zk\n * @date 2023-06-29 02:06:41\n * @param {INavViewMsg} navViewMsg 导航视图信息\n * @memberof NavPosController\n */\n setNavViewMsgs(navViewMsg: INavViewMsg): void {\n // isRoutePushed没传的时候给false\n navViewMsg.isRoutePushed = navViewMsg.isRoutePushed === true;\n if (this.state.navViewMsgs[navViewMsg.key]) {\n mergeLeft(this.state.navViewMsgs[navViewMsg.key], navViewMsg);\n // 部分属性这次没传就是undefined\n excludeKeys.forEach(key => {\n if (Object.prototype.hasOwnProperty.call(navViewMsg, key)) {\n this.state.navViewMsgs[navViewMsg.key][key] = undefined;\n }\n });\n } else {\n // 不存在的走新建流程\n this.state.navViewMsgs[navViewMsg.key] = navViewMsg;\n if (this.getExpItemIsCache(navViewMsg)) {\n // 往缓存keys里添加新视图的key\n this.state.cacheKeys.push(navViewMsg.key);\n }\n this.viewModals[navViewMsg.key] = new Modal({\n mode: this.routeDepth ? ViewMode.ROUTE : ViewMode.EMBED,\n routeDepth: this.routeDepth ? this.routeDepth + 1 : undefined,\n dismiss: () => {\n // 执行对应key的dismiss方法\n this.dismiss(navViewMsg.key);\n },\n });\n }\n\n // todo 换个方式\n this.curNavViewMsg = this.state.navViewMsgs[navViewMsg.key];\n }\n\n /**\n * 自身的dismiss相关操作\n *\n * @param {string} key\n * @memberof NavPosController\n */\n dismiss(key: string): void {\n ibiz.log.debug(this.constructor.name, 'dismiss', key);\n }\n\n /**\n * 监听视图创建\n *\n * @param {EventBase} event\n * @memberof NavPosController\n */\n onViewCreated(event: EventBase): void {\n ibiz.log.debug(this.constructor.name, 'onViewCreated', event);\n }\n\n toBlankRoute(): void {\n const blankRoute = getNestedRoutePath(this.route, this.routeDepth!);\n this.router.push(blankRoute);\n }\n\n /**\n * 打开视图\n *\n * @param {INavViewMsg} openViewMsg\n * @memberof NavPosController\n */\n openView(openViewMsg: INavViewMsg): void {\n // 当key为空时,直接切换currentKey,绘制null\n if (!openViewMsg.key) {\n this.state.currentKey = openViewMsg.key;\n if (this.routeDepth && this.state.routeOpen) {\n this.toBlankRoute();\n }\n\n return;\n }\n\n if (this.routeDepth && this.state.routeOpen) {\n this.openViewByPath(openViewMsg);\n } else {\n this.openViewByModel(openViewMsg);\n }\n }\n\n /**\n * 通过路由打开视图\n *\n * @param {INavViewMsg} openViewMsg\n * @memberof NavPosController\n */\n openViewByPath(openViewMsg: INavViewMsg): void {\n this.setNavViewMsgs(openViewMsg);\n const isRoutePushed = openViewMsg.isRoutePushed === true;\n // * 外部跳转过了的场景不需要这边跳转路由了,直接处理后续内容。\n if (isRoutePushed) {\n this.state.currentKey = openViewMsg.key;\n this.state.navViewMsgs[this.curNavViewMsg.key].fullPath =\n this.route.fullPath;\n return;\n }\n\n // * 路由跳转\n if (openViewMsg.is404) {\n const selfPath = getNestedRoutePath(this.route, this.routeDepth!, false);\n this.router.push(`${selfPath}/404`);\n } else if (\n // 如果启用缓存并且有之前存过的fullPath则push回fullPath。\n this.state.navViewMsgs[openViewMsg.key].fullPath &&\n this.getExpItemIsCache(openViewMsg)\n ) {\n this.router.push(this.state.navViewMsgs[openViewMsg.key].fullPath!);\n } else {\n // 走视图路由打开逻辑计算并push\n const tempContext = Object.assign(openViewMsg.context!.clone(), {\n toRouteDepth: this.routeDepth! + 1,\n });\n if (this.getExpItemIsCache(openViewMsg)) {\n this.state.cacheKeys.push(openViewMsg.key);\n }\n ibiz.commands.execute(\n OpenAppViewCommand.TAG,\n openViewMsg.viewId,\n tempContext,\n openViewMsg.params,\n { openMode: 'INDEXVIEWTAB' },\n );\n }\n\n // !跳转路由过后,修改currentKey由onRouteChange那边路由变更之后处理。\n }\n\n /**\n * 通过模型绘制视图\n *\n * @param {INavViewMsg} openViewMsg\n * @memberof NavPosController\n */\n openViewByModel(openViewMsg: INavViewMsg): void {\n this.setNavViewMsgs(openViewMsg);\n // 切换currentKey,重新渲染openViewMsg\n this.state.currentKey = openViewMsg.key;\n }\n\n /**\n * 处理自定义补充参数 [{key:'name',value:'data'}] => {name:'data'}\n *\n * @author zk\n * @date 2023-09-27 03:09:55\n * @protected\n * @memberof NavPosController\n */\n protected handleRawItemParams(): void {\n let params = {};\n const rawItemParams = this.model.rawItem?.rawItemParams;\n if (notNilEmpty(rawItemParams)) {\n params = rawItemParams!.reduce((param: IData, item) => {\n param[item.key!.toLowerCase()] = item.value;\n return param;\n }, {});\n }\n Object.assign(this.rawItemParams, params);\n }\n}\n","import {\n defineComponent,\n h,\n PropType,\n resolveComponent,\n VNode,\n watch,\n} from 'vue';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { EventBase } from '@ibiz-template/runtime';\nimport { useRoute, useRouter } from 'vue-router';\nimport { NavPosController } from './nav-pos.controller';\nimport './nav-pos.scss';\nimport { useNamespace } from '../../use';\nimport { getNestedRoutePath } from '../../util';\n\nexport const NavPos = defineComponent({\n name: 'IBizNavPos',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: NavPosController,\n required: true,\n },\n },\n setup(props) {\n const c = props.controller;\n const ns = useNamespace('nav-pos');\n const onViewCreated = (event: EventBase): void => {\n c.onViewCreated(event);\n };\n\n const router = useRouter();\n const route = useRoute();\n\n c.setRouter(router);\n\n if (c.routeDepth) {\n // 计算当前导航视图对应层级路由的路径,删除了srfnav\n const expViewRoutePath = getNestedRoutePath(route, c.routeDepth!);\n watch(\n () => route.fullPath,\n () => {\n const currentRoutePath = getNestedRoutePath(route, c.routeDepth!);\n // 前面路由不是当前导航视图的不走\n // 路由跳转匹配层级不比导航视图层级高的不走。如分页关系的表单对应的事导航视图的路由。\n if (\n expViewRoutePath === currentRoutePath &&\n route.matched.length > c.routeDepth!\n ) {\n c.onRouteChange(route);\n }\n },\n { immediate: true },\n );\n }\n\n return { ns, c, onViewCreated };\n },\n render() {\n const { viewModals, state } = this.c;\n const { currentKey, cacheKeys, navViewMsgs, cache } = state;\n let content: VNode | null = null;\n if (state.routeOpen) {\n content = (\n <iBizRouterView\n manualKey={currentKey}\n modal={viewModals[currentKey]}\n onCreated={this.onViewCreated}\n >\n {({ Component }: { Component: string }): VNode | null => {\n const routerContent =\n currentKey === '' || !Component\n ? null\n : ((<Component />) as VNode);\n\n return cache ? (\n <keepAlive include={cacheKeys} max={30} isKey>\n {routerContent}\n </keepAlive>\n ) : (\n routerContent\n );\n }}\n </iBizRouterView>\n );\n } else {\n const view = currentKey\n ? h(resolveComponent('IBizViewShell'), {\n context: navViewMsgs[currentKey].context,\n params: navViewMsgs[currentKey].params,\n key: navViewMsgs[currentKey].key,\n viewId: navViewMsgs[currentKey].viewId,\n onCreated: this.onViewCreated,\n })\n : null;\n content = cache ? (\n <keepAlive include={cacheKeys} max={30} isKey>\n {view}\n </keepAlive>\n ) : (\n view\n );\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n ]}\n >\n {content}\n </div>\n );\n },\n});\n","import {\n IPanelItemNavPosController,\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { NavPosController } from './nav-pos.controller';\n\n/**\n * 导航占位适配器\n *\n * @export\n * @class NavPosProvider\n * @implements {IPanelItemProvider}\n */\nexport class NavPosProvider implements IPanelItemProvider {\n component: string = 'IBizNavPos';\n\n /**\n * 创建控制器\n *\n * @param {IPanelItem} panelItem\n * @param {PanelController} panel\n * @param {(PanelItemController | undefined)} parent\n * @return {*} {Promise<IPanelItemNavPosController>}\n * @memberof NavPosProvider\n */\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<IPanelItemNavPosController> {\n const c = new NavPosController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { NavPos } from './nav-pos';\nimport { NavPosProvider } from './nav-pos.provider';\nimport { NavPosState } from './nav-pos.state';\nimport { NavPosController } from './nav-pos.controller';\n\nexport { NavPosState, NavPosController };\n\nexport const IBizNavPos = withInstall(NavPos, function (v: App) {\n v.component(NavPos.name, NavPos);\n registerPanelItemProvider('RAWITEM_NAV_POS', () => new NavPosProvider());\n});\n\nexport default IBizNavPos;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板属性状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class PanelFieldState\n * @extends {PanelItemState}\n */\nexport class PanelFieldState extends PanelItemState {}\n","import {\n getEditorProvider,\n IEditorContainerController,\n IEditorController,\n IEditorProvider,\n PanelItemController,\n PanelItemEventName,\n} from '@ibiz-template/runtime';\nimport { IPanelField } from '@ibiz/model-core';\nimport { PanelFieldState } from './panel-field.state';\n\n/**\n * 面板按钮控制器\n *\n * @export\n * @class PanelFieldController\n * @extends {PanelItemController<IPanelField>}\n */\nexport class PanelFieldController\n extends PanelItemController<IPanelField>\n implements IEditorContainerController\n{\n declare state: PanelFieldState;\n\n unitName: string | undefined = undefined;\n\n /**\n * 值格式化\n * @author lxm\n * @date 2023-05-24 05:46:56\n * @readonly\n * @type {(string | undefined)}\n */\n get valueFormat(): string | undefined {\n return this.model.valueFormat;\n }\n\n get dataType(): number | undefined {\n return undefined;\n }\n\n get context(): IContext {\n return this.panel.context;\n }\n\n get params(): IParams {\n return this.panel.params;\n }\n\n /**\n * 父容器数据对象数据\n * @author lxm\n * @date 2023-07-15 01:33:58\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.dataParent.data;\n }\n\n /**\n * 面板属性成员的值\n * @author lxm\n * @date 2023-07-14 02:30:58\n * @readonly\n */\n get value(): string | number {\n return this.data[this.model.id!];\n }\n\n /**\n * 编辑器控制器\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n * @type {IEditorController}\n */\n editor?: IEditorController;\n\n /**\n * 编辑器适配器\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n */\n editorProvider?: IEditorProvider;\n\n protected createState(): PanelFieldState {\n return new PanelFieldState(this.parent?.state);\n }\n\n /**\n * 初始化\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n * @protected\n * @returns {*} {Promise<void>}\n */\n protected async onInit(): Promise<void> {\n await super.onInit();\n // 空输入默认值\n this.state.required = !this.model.allowEmpty;\n // 初始化编辑器控制器,除了隐藏都会需要适配器\n if (this.model.editor && this.model.editor.editorType !== 'HIDDEN') {\n this.editorProvider = await getEditorProvider(this.model.editor);\n if (this.editorProvider) {\n this.editor = await this.editorProvider.createController(\n this.model.editor,\n this,\n );\n }\n }\n }\n\n /**\n * 设置面板数据的值\n *\n * @author lxm\n * @date 2022-08-24 10:08:40\n * @param {unknown} value 要设置的值\n * @param {string} name 要设置的面板数据的属性名称\n */\n async setDataValue(value: unknown, name?: string): Promise<void> {\n const { id } = this.model;\n name = name || id;\n if (this.dataParent.setDataValue) {\n await this.dataParent.setDataValue(name!, value);\n }\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.CHANGE,\n });\n }\n\n /**\n * 聚焦事件\n * @author lxm\n * @date 2023-10-11 05:03:26\n */\n onFocus(event: MouseEvent): void {\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.FOCUS,\n event,\n });\n }\n\n /**\n * 失焦事件\n * @author lxm\n * @date 2023-10-11 05:03:26\n */\n onBlur(event: MouseEvent): void {\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.BLUR,\n event,\n });\n }\n\n /**\n * 回车事件\n * @author lxm\n * @date 2023-10-11 05:03:26\n */\n onEnter(event: MouseEvent): void {\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.ENTER,\n event,\n });\n }\n}\n","import { IPanelField } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, resolveComponent, h } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelFieldController } from './panel-field.controller';\nimport './panel-field.scss';\n\nexport const PanelField = defineComponent({\n name: 'IBizPanelField',\n props: {\n modelData: {\n type: Object as PropType<IPanelField>,\n required: true,\n },\n controller: {\n type: PanelFieldController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-field');\n\n // 类名控制\n const classArr = computed(() => {\n const { id } = props.modelData;\n const result: Array<string | false> = [ns.b(), ns.m(id)];\n result.push(...props.controller.containerClass);\n return result;\n });\n\n const onValueChange = (val: unknown, name?: string): void => {\n props.controller.setDataValue(val, name);\n };\n\n return {\n ns,\n classArr,\n onValueChange,\n };\n },\n render() {\n // 编辑器内容\n let editor = null;\n if (this.controller.data) {\n const editorProps = {\n value: this.controller.value,\n data: this.controller.data,\n controller: this.controller.editor,\n disabled: this.controller.state.disabled,\n class: this.ns.b('content'),\n readonly: this.controller.model.editor!.readOnly,\n onChange: this.onValueChange,\n onFocus: (event: MouseEvent) => this.controller.onFocus(event),\n onBlur: (event: MouseEvent) => this.controller.onBlur(event),\n onEnter: (event: MouseEvent) => this.controller.onEnter(event),\n };\n if (this.$slots.default) {\n editor = this.$slots.default(editorProps);\n } else if (this.controller.editorProvider) {\n const component = resolveComponent(\n this.controller.editorProvider.formEditor,\n );\n editor = h(component, {\n ...editorProps,\n });\n } else {\n editor = <not-supported-editor modelData={this.modelData.editor} />;\n }\n }\n\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n >\n {editor}\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { PanelFieldController } from './panel-field.controller';\n\n/**\n * 面板属性适配器\n *\n * @export\n * @class PanelFieldProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelFieldProvider implements IPanelItemProvider {\n component: string = 'IBizPanelField';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelFieldController> {\n const c = new PanelFieldController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { PanelField } from './panel-field';\nimport { PanelFieldProvider } from './panel-field.provider';\n\nexport * from './panel-field.controller';\n\nexport const IBizPanelField = withInstall(PanelField, function (v: App) {\n v.component(PanelField.name, PanelField);\n registerPanelItemProvider('FIELD', () => new PanelFieldProvider());\n});\n\nexport default IBizPanelField;\n","import { IPanelRawItem } from '@ibiz/model-core';\nimport { PanelItemController } from '@ibiz-template/runtime';\n\n/**\n * 面板按钮控制器\n *\n * @export\n * @class PanelRawItemController\n * @extends {PanelItemController<IPanelRawItem>}\n */\nexport class PanelRawItemController extends PanelItemController<IPanelRawItem> {\n /**\n * 父容器数据对象数据\n * @author lxm\n * @date 2023-07-15 01:33:58\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.dataParent.data!;\n }\n\n /**\n * 初始化\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n * @protected\n * @returns {*} {Promise<void>}\n */\n protected async onInit(): Promise<void> {\n await super.onInit();\n }\n}\n","import { IPanelRawItem } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelRawItemController } from './panel-rawitem.controller';\nimport './panel-rawitem.scss';\n\nexport const PanelRawItem = defineComponent({\n name: 'IBizPanelRawItem',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: PanelRawItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-rawitem');\n\n // 类名控制\n const classArr = computed(() => {\n const { id } = props.modelData;\n const result: Array<string | false> = [ns.b(), ns.m(id)];\n result.push(...props.controller.containerClass);\n return result;\n });\n\n return {\n ns,\n classArr,\n };\n },\n render() {\n // 动态控制显示\n if (!this.controller.state.visible) {\n return;\n }\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n >\n <iBizRawItem rawItem={this.modelData}></iBizRawItem>\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { PanelRawItemController } from './panel-rawitem.controller';\n\n/**\n * 面板属性适配器\n *\n * @export\n * @class PanelRawItemProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelRawItemProvider implements IPanelItemProvider {\n component: string = 'IBizPanelRawItem';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelRawItemController> {\n const c = new PanelRawItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { PanelRawItem } from './panel-rawitem';\nimport { PanelRawItemProvider } from './panel-rawitem.provider';\n\nexport * from './panel-rawitem.controller';\n\nexport const IBizPanelRawItem = withInstall(PanelRawItem, function (v: App) {\n v.component(PanelRawItem.name, PanelRawItem);\n registerPanelItemProvider('RAWITEM', () => new PanelRawItemProvider());\n registerPanelItemProvider(\n 'RAWITEM_STATIC_IMAGE',\n () => new PanelRawItemProvider(),\n );\n});\n\nexport default IBizPanelRawItem;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 多项数据容器项状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class MultiDataContainerItemState\n * @extends {PanelItemState}\n */\nexport class MultiDataContainerItemState extends PanelItemState {\n /**\n * 多项数据容器数据\n * @author lxm\n * @date 2023-07-14 12:07:45\n * @type {(IData | IData[])}\n */\n data: IData = {};\n}\n","import {\n getAllPanelField,\n IPanelController,\n IPanelDataContainerController,\n IPanelItemContainerController,\n IPanelItemController,\n isDataContainer,\n PanelData,\n PanelNotifyState,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem, IPanelTabPanel } from '@ibiz/model-core';\nimport { MultiDataContainerItemState } from './multi-data-container-itm.state';\nimport { MultiDataContainerController } from './multi-data-container.controller';\n\n/**\n * 多项数据容器每一个数据项的控制器\n * @author lxm\n * @date 2023-09-05 05:04:01\n * @export\n * @class MultiDataContainerItemController\n * @extends {PanelItemController<IPanelContainer>}\n * @implements {IPanelDataContainerController}\n */\nexport class MultiDataContainerItemController\n implements IPanelDataContainerController\n{\n state = new MultiDataContainerItemState();\n\n readonly isDataContainer = true;\n\n get data(): IData {\n return this.state.data;\n }\n\n /**\n * 所有面板成员的控制器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemController }}\n */\n panelItems: { [key: string]: IPanelItemController } = {};\n\n /**\n * Creates an instance of PanelItemController.\n * @author lxm\n * @date 2023-04-27 06:37:12\n * @param {T} model 面板成员模型\n * @param {PanelController} panel 面板控制器\n * @param {PanelItemController} [parent] 父容器控制器\n */\n constructor(\n public readonly model: IPanelContainer,\n public readonly panel: IPanelController,\n public readonly parent: MultiDataContainerController,\n data: PanelData,\n ) {\n this.state.data = data;\n\n const fields = getAllPanelField(this.model);\n const fieldKeys = fields.map(item => item.id!);\n\n // 面板属性变更的触发变更通知\n data._evt.on('change', key => {\n if (fieldKeys.includes(key)) {\n this.childDataChangeNotify([key]);\n }\n });\n }\n\n /**\n * 初始化方法\n * @author lxm\n * @date 2023-09-05 05:48:53\n * @return {*} {Promise<void>}\n */\n async init(): Promise<void> {\n await this.initChildrenController();\n }\n\n /**\n * 初始化面板成员控制器\n *\n * @author lxm\n * @date 2022-08-24 21:08:48\n * @protected\n */\n protected async initChildrenController(\n panelItems: IPanelItem[] | undefined = this.model.panelItems,\n panel: IPanelController = this.panel,\n parent: IPanelItemContainerController | undefined = this,\n ): Promise<void> {\n if (!panelItems) {\n return;\n }\n await Promise.all(\n panelItems.map(async panelItem => {\n // 生成面板成员控制器\n const panelItemProvider = this.parent.providers[panelItem.id!];\n if (!panelItemProvider) {\n return;\n }\n const panelItemController = await panelItemProvider.createController(\n panelItem,\n panel,\n parent,\n );\n this.panelItems[panelItem.id!] = panelItemController;\n // 有子成员的,且不是数据容器的。生成子控制器\n if (\n (panelItem as IPanelContainer).panelItems?.length &&\n !isDataContainer(panelItem)\n ) {\n await this.initChildrenController(\n (panelItem as IPanelContainer).panelItems,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n } else if ((panelItem as IPanelTabPanel).panelTabPages?.length) {\n await this.initChildrenController(\n (panelItem as IPanelTabPanel).panelTabPages,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n }\n }),\n );\n }\n\n async dataChangeNotify(_names: string[]): Promise<void> {\n // 不需要实现\n }\n\n async childDataChangeNotify(names: string[]): Promise<void> {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.dataChangeNotify(names);\n });\n }\n\n async panelStateNotify(state: PanelNotifyState): Promise<void> {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.panelStateNotify(state);\n });\n }\n\n async setDataValue(name: string, value: unknown): Promise<void> {\n if (\n Object.prototype.hasOwnProperty.call(this.state.data, name) &&\n this.state.data[name] === value\n ) {\n // *`面板里没有属性${name}或者${name}的值未发生改变`\n return;\n }\n\n // 改变值\n this.state.data[name] = value;\n this.childDataChangeNotify([name]);\n }\n\n destroy(): void {\n this.data.destroy?.();\n Object.values(this.panelItems).forEach(item => {\n item.destroy();\n });\n }\n}\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 多项数据容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class MultiDataContainerState\n * @extends {PanelItemState}\n */\nexport class MultiDataContainerState extends PanelItemState {\n /**\n * 多项数据容器数据\n * @author lxm\n * @date 2023-07-14 12:07:45\n * @type {(IData | IData[])}\n */\n items: IData[] = [];\n}\n","import {\n ModelError,\n RuntimeError,\n RuntimeModelError,\n} from '@ibiz-template/core';\nimport {\n execDELogicById,\n getAllPanelField,\n getPanelItemProvider,\n IPanelDataContainerController,\n IPanelItemProvider,\n isDataContainer,\n IViewController,\n PanelData,\n PanelItemController,\n PanelNotifyState,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem, IPanelTabPanel } from '@ibiz/model-core';\nimport { MultiDataContainerItemController } from './multi-data-container-item.controller';\nimport { MultiDataContainerState } from './multi-data-container.state';\n\n/**\n * 多项数据容器控制器\n *\n * @export\n * @class MultiDataContainerController\n * @extends {PanelItemController}\n */\nexport class MultiDataContainerController\n extends PanelItemController<IPanelContainer>\n implements IPanelDataContainerController\n{\n declare state: MultiDataContainerState;\n\n readonly isDataContainer = true;\n\n /**\n * 数据项的控制器\n *\n * @author lxm\n * @date 2023-09-05 05:35:25\n * @type {MultiDataContainerItemController[]}\n */\n dataItems: MultiDataContainerItemController[] = [];\n\n /**\n * 所有面板成员的适配器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemProvider }}\n */\n providers: { [key: string]: IPanelItemProvider } = {};\n\n /**\n * 多项数据容器,根据数据模式\n * @author lxm\n * @date 2023-07-14 10:59:02\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.state.items;\n }\n\n protected createState(): MultiDataContainerState {\n return new MultiDataContainerState(this.parent?.state);\n }\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n await this.initPanelItemProviders();\n this.initContainerData();\n }\n\n /**\n * 初始化面板成员控制器\n *\n * @author lxm\n * @date 2022-08-24 21:08:48\n * @protected\n */\n protected async initPanelItemProviders(\n panelItems: IPanelItem[] | undefined = this.model.panelItems,\n ): Promise<void> {\n if (!panelItems) {\n return;\n }\n await Promise.all(\n panelItems.map(async panelItem => {\n // 生成面板成员控制器\n const panelItemProvider = await getPanelItemProvider(panelItem);\n if (!panelItemProvider) {\n return;\n }\n this.providers[panelItem.id!] = panelItemProvider;\n // 有子成员的,且不是数据容器的。生成子控制器\n if (\n (panelItem as IPanelContainer).panelItems?.length &&\n !isDataContainer(panelItem)\n ) {\n await this.initPanelItemProviders(\n (panelItem as IPanelContainer).panelItems,\n );\n }\n if ((panelItem as IPanelTabPanel).panelTabPages?.length) {\n await this.initPanelItemProviders(\n (panelItem as IPanelTabPanel).panelTabPages,\n );\n }\n }),\n );\n }\n\n /**\n * 根据来源类型初始化容器数据\n * @author lxm\n * @date 2023-08-04 03:05:59\n * @protected\n */\n protected initContainerData(): void {\n const { dataSourceType, dataName } = this.model;\n switch (dataSourceType) {\n case 'DEACTION':\n case 'DEDATASET':\n this.setDataByDeMethod();\n break;\n case 'APPGLOBALPARAM':\n this.setDataByAppGlobalParam();\n break;\n case 'DELOGIC':\n this.setDataByDeLogic();\n break;\n case 'TOPVIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.getTopView(), dataName);\n break;\n }\n case 'VIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.view, dataName);\n break;\n }\n default:\n throw new ModelError(this.model, `数据源类型${dataSourceType}暂未支持`);\n }\n }\n\n /**\n * 面板状态变更通知\n *\n * @author lxm\n * @date 2022-09-20 18:09:07\n */\n childrenStateNotify(state: PanelNotifyState): void {\n this.dataItems.forEach(dataItem => {\n dataItem.panelStateNotify(state);\n });\n }\n\n /**\n * 设置数据集合\n * @author lxm\n * @date 2023-09-05 05:42:09\n * @param {IData[]} items\n */\n async setData(items: IData[]): Promise<void> {\n const fields = getAllPanelField(this.model);\n const _items = items.map(item => new PanelData(fields, item));\n\n this.dataItems = _items.map(item => {\n return new MultiDataContainerItemController(\n this.model,\n this.panel,\n this,\n item,\n );\n });\n if (this.dataItems.length) {\n await Promise.all(\n this.dataItems.map(controller => {\n return controller.init();\n }),\n );\n }\n this.state.items = _items;\n this.childrenStateNotify(PanelNotifyState.LOAD);\n }\n\n /**\n * 通过实体设置视图逻辑\n * @author lxm\n * @date 2023-08-04 03:00:31\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeLogic(): Promise<void> {\n const { appDataEntityId, appDELogicId } = this.model;\n if (!appDELogicId) {\n throw new RuntimeModelError(this.model, '没有配置实体逻辑');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n\n const data = await execDELogicById(\n appDELogicId,\n appDataEntityId,\n this.panel.context,\n [],\n this.panel.params,\n );\n\n if (!data) {\n throw new RuntimeError(`实体逻辑${appDELogicId}没有返回值`);\n }\n\n this.setData(data as IData[]);\n }\n\n /**\n * 设置全局变量为当前容器数据\n * @author lxm\n * @date 2023-08-04 01:55:07\n * @protected\n */\n protected setDataByAppGlobalParam(): void {\n const { dataName } = this.model;\n const originData = dataName ? ibiz.appData![dataName] : ibiz.appData!;\n if (originData) {\n this.setData(originData as IData[]);\n } else {\n ibiz.log.error(`全局变量里没有${dataName}属性`);\n }\n }\n\n /**\n * 请求实体行为并把返回值设置为当前容器的数据\n * @author lxm\n * @date 2023-08-04 11:47:17\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeMethod(): Promise<void> {\n const { appDEMethodId, appDataEntityId } = this.model;\n if (!appDEMethodId) {\n throw new RuntimeModelError(this.model, '没有配置实体行为');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n const app = ibiz.hub.getApp(this.panel.context.srfappid);\n const res = await app.deService.exec(\n appDataEntityId,\n appDEMethodId,\n this.panel.context,\n [],\n this.panel.params,\n );\n if (res.ok && res.data) {\n this.setData(res.data as IData[]);\n }\n }\n\n /**\n * 绑定指定视图会话的变量\n * @author lxm\n * @date 2023-07-14 02:03:56\n * @protected\n * @param {IViewController} view 绑定视图控制器\n * @param {string} dataName 变量名称\n */\n protected bindViewData(view: IViewController, dataName: string): void {\n if (!Object.prototype.hasOwnProperty.call(view.state, dataName)) {\n ibiz.log.error(`绑定视图的会话不存在${dataName}`);\n return;\n }\n const updateData = (): void => {\n const originData = (view.state as IData)[dataName] as IData[];\n if (originData) {\n this.setData(originData);\n } else {\n ibiz.log.error(`视图state里没有${dataName}属性`);\n }\n };\n updateData(); // 先绑定一次\n\n // 每次视图数据变更之后更新一下\n view.evt.on('onDataChange', () => {\n updateData();\n });\n }\n\n setDataValue(_name: string, _value: unknown): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n destroy(): void {\n super.destroy();\n this.dataItems.forEach(item => {\n item.destroy();\n });\n }\n}\n","import {\n IPanelItemProvider,\n IPanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem } from '@ibiz/model-core';\nimport {\n computed,\n defineComponent,\n inject,\n PropType,\n reactive,\n VNode,\n watch,\n} from 'vue';\nimport { useNamespace } from '../../use';\nimport { MultiDataContainerController } from './multi-data-container.controller';\nimport './multi-data-container.scss';\n\nexport const MultiDataContainer = defineComponent({\n name: 'IBizMultiDataContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: MultiDataContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('multi-data-container');\n const { id } = props.modelData;\n\n // 面板成员state响应式\n watch(\n () => props.controller.state.items,\n () => {\n props.controller.dataItems.forEach(item => {\n item.state = reactive(item.state);\n\n const keys = Object.keys(item.panelItems);\n keys.forEach(key => {\n const panelItem = item.panelItems[key];\n panelItem.state = reactive(panelItem.state);\n });\n });\n },\n { immediate: true },\n );\n\n // 获取上层的绘制函数\n const renderPanelItem = inject<\n (\n panelItem: IPanelItem,\n options?: {\n providers: {\n [key: string]: IPanelItemProvider;\n };\n panelItems: {\n [key: string]: IPanelItemController;\n };\n },\n ) => VNode | null\n >('renderPanelItem')!;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ...props.controller.containerClass,\n ];\n return result;\n });\n\n return { ns, classArr, renderPanelItem };\n },\n render() {\n let content: VNode | VNode[];\n if (this.$slots.default) {\n content = this.$slots.default();\n } else {\n // 内容区默认插槽处理,封装app-col\n content = this.controller.state.items.map((_item, index) => {\n const itemController = this.controller.dataItems[index];\n return (\n <iBizRow class={this.ns.b('content')} layout={this.modelData.layout}>\n {this.modelData.panelItems?.map(panelItem => {\n const childController = itemController.panelItems[panelItem.id!];\n return (\n <iBizCol\n layoutPos={panelItem.layoutPos}\n state={childController.state}\n >\n {this.renderPanelItem(panelItem, {\n providers: this.controller.providers,\n panelItems: itemController.panelItems,\n })}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n });\n }\n return <div class={this.classArr}>{content}</div>;\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { MultiDataContainerController } from './multi-data-container.controller';\n\n/**\n * 多项数据容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class MultiDataContainerProvider\n * @implements {EditorProvider}\n */\nexport class MultiDataContainerProvider implements IPanelItemProvider {\n component: string = 'IBizMultiDataContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new MultiDataContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { MultiDataContainer } from './multi-data-container';\nimport { MultiDataContainerProvider } from './multi-data-container.provider';\nimport { MultiDataContainerState } from './multi-data-container.state';\nimport { MultiDataContainerController } from './multi-data-container.controller';\n\nexport { MultiDataContainerState, MultiDataContainerController };\n\nexport const IBizMultiDataContainer = withInstall(\n MultiDataContainer,\n function (v: App) {\n v.component(MultiDataContainer.name, MultiDataContainer);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_MULTIDATA',\n () => new MultiDataContainerProvider(),\n );\n },\n);\n\nexport default IBizMultiDataContainer;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 单项数据容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class SingleDataContainerState\n * @extends {PanelItemState}\n */\nexport class SingleDataContainerState extends PanelItemState {\n /**\n * 单项数据容器数据\n * @author lxm\n * @date 2023-07-14 12:07:45\n * @type {(IData | IData[])}\n */\n data: IData = {};\n}\n","import {\n ModelError,\n RuntimeError,\n RuntimeModelError,\n} from '@ibiz-template/core';\nimport {\n execDELogicById,\n getAllPanelField,\n getPanelItemProvider,\n IPanelController,\n IPanelDataContainerController,\n IPanelItemContainerController,\n IPanelItemController,\n IPanelItemProvider,\n isDataContainer,\n IViewController,\n PanelData,\n PanelItemController,\n PanelNotifyState,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem, IPanelTabPanel } from '@ibiz/model-core';\nimport { SingleDataContainerState } from './single-data-container.state';\n\n/**\n * 单项数据容器控制器\n *\n * @export\n * @class SingleDataContainerController\n * @extends {PanelItemController}\n */\nexport class SingleDataContainerController\n extends PanelItemController<IPanelContainer>\n implements IPanelDataContainerController\n{\n declare state: SingleDataContainerState;\n\n readonly isDataContainer = true;\n\n /**\n * 所有面板成员的控制器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemController }}\n */\n panelItems: { [key: string]: IPanelItemController } = {};\n\n /**\n * 所有面板成员的适配器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemProvider }}\n */\n providers: { [key: string]: IPanelItemProvider } = {};\n\n /**\n * 单项数据容器,根据数据模式\n * @author lxm\n * @date 2023-07-14 10:59:02\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.state.data;\n }\n\n protected createState(): SingleDataContainerState {\n return new SingleDataContainerState(this.parent?.state);\n }\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n await this.initPanelItemControllers();\n this.initContainerData();\n }\n\n /**\n * 初始化面板成员控制器\n *\n * @author lxm\n * @date 2022-08-24 21:08:48\n * @protected\n */\n protected async initPanelItemControllers(\n panelItems: IPanelItem[] | undefined = this.model.panelItems,\n panel: IPanelController = this.panel,\n parent: IPanelItemContainerController | undefined = this,\n ): Promise<void> {\n if (!panelItems) {\n return;\n }\n await Promise.all(\n panelItems.map(async panelItem => {\n // 生成面板成员控制器\n const panelItemProvider = await getPanelItemProvider(panelItem);\n if (!panelItemProvider) {\n return;\n }\n this.providers[panelItem.id!] = panelItemProvider;\n const panelItemController = await panelItemProvider.createController(\n panelItem,\n panel,\n parent,\n );\n this.panelItems[panelItem.id!] = panelItemController;\n // 有子成员的,且不是数据容器的。生成子控制器\n if (\n (panelItem as IPanelContainer).panelItems?.length &&\n !isDataContainer(panelItem)\n ) {\n await this.initPanelItemControllers(\n (panelItem as IPanelContainer).panelItems,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n }\n if ((panelItem as IPanelTabPanel).panelTabPages?.length) {\n await this.initPanelItemControllers(\n (panelItem as IPanelTabPanel).panelTabPages,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n }\n }),\n );\n }\n\n /**\n * 根据来源类型初始化容器数据\n * @author lxm\n * @date 2023-08-04 03:05:59\n * @protected\n */\n protected initContainerData(): void {\n const { dataSourceType, dataName } = this.model;\n switch (dataSourceType) {\n case 'DEACTION':\n case 'DEDATASET':\n this.setDataByDeMethod();\n break;\n case 'APPGLOBALPARAM':\n this.setDataByAppGlobalParam();\n break;\n case 'DELOGIC':\n this.setDataByDeLogic();\n break;\n case 'TOPVIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.getTopView(), dataName);\n break;\n }\n case 'VIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.view, dataName);\n break;\n }\n default:\n throw new ModelError(this.model, `数据源类型${dataSourceType}暂未支持`);\n }\n }\n\n /**\n * 面板状态变更通知\n *\n * @author lxm\n * @date 2022-09-20 18:09:07\n */\n childrenStateNotify(state: PanelNotifyState): void {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.panelStateNotify(state);\n });\n }\n\n /**\n * 设置数据\n * @author lxm\n * @date 2023-09-05 05:42:09\n * @param {IData[]} items\n */\n async setData(data: IData): Promise<void> {\n const fields = getAllPanelField(this.model);\n const fieldKeys = fields.map(item => item.id!);\n const panelData = new PanelData(fields, data);\n\n // 面板属性变更的触发变更通知\n panelData._evt.on('change', key => {\n if (fieldKeys.includes(key)) {\n this.childDataChangeNotify([key]);\n }\n });\n // 清空上一个,如果存在的话。\n this.data.destroy?.();\n this.state.data = panelData;\n this.childrenStateNotify(PanelNotifyState.LOAD);\n }\n\n /**\n * 通过实体设置视图逻辑\n * @author lxm\n * @date 2023-08-04 03:00:31\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeLogic(): Promise<void> {\n const { appDataEntityId, appDELogicId } = this.model;\n if (!appDELogicId) {\n throw new RuntimeModelError(this.model, '没有配置实体逻辑');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n\n const data = await execDELogicById(\n appDELogicId,\n appDataEntityId,\n this.panel.context,\n [],\n this.panel.params,\n );\n\n if (!data) {\n throw new RuntimeError(`实体逻辑${appDELogicId}没有返回值`);\n }\n\n this.setData(data as IData);\n }\n\n /**\n * 设置全局变量为当前容器数据\n * @author lxm\n * @date 2023-08-04 01:55:07\n * @protected\n */\n protected setDataByAppGlobalParam(): void {\n const { dataName } = this.model;\n const originData = dataName ? ibiz.appData![dataName] : ibiz.appData!;\n if (originData) {\n this.setData(originData as IData);\n } else {\n ibiz.log.error(`全局变量里没有${dataName}属性`);\n }\n }\n\n /**\n * 请求实体行为并把返回值设置为当前容器的数据\n * @author lxm\n * @date 2023-08-04 11:47:17\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeMethod(): Promise<void> {\n const { appDEMethodId, appDataEntityId } = this.model;\n if (!appDEMethodId) {\n throw new RuntimeModelError(this.model, '没有配置实体行为');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n const app = ibiz.hub.getApp(this.panel.context.srfappid);\n const res = await app.deService.exec(\n appDataEntityId,\n appDEMethodId,\n this.panel.context,\n [],\n this.panel.params,\n );\n if (res.ok && res.data) {\n this.setData(res.data as IData);\n }\n }\n\n /**\n * 绑定指定视图会话的变量\n * @author lxm\n * @date 2023-07-14 02:03:56\n * @protected\n * @param {IViewController} view 绑定视图控制器\n * @param {string} dataName 变量名称\n */\n protected bindViewData(view: IViewController, dataName: string): void {\n if (!Object.prototype.hasOwnProperty.call(view.state, dataName)) {\n ibiz.log.error(`绑定视图的会话不存在${dataName}`);\n return;\n }\n const updateData = (): void => {\n const originData = (view.state as IData)[dataName] as IData;\n if (originData) {\n this.setData(originData);\n } else {\n ibiz.log.error(`视图state里没有${dataName}属性`);\n }\n };\n updateData(); // 先绑定一次\n\n // 每次视图数据变更之后更新一下\n view.evt.on('onDataChange', () => {\n updateData();\n });\n }\n\n /**\n * 通知所有子面板成员面板操作过程中的数据变更\n *\n * @author lxm\n * @date 2022-09-20 18:09:40\n * @param {string[]} names\n */\n childDataChangeNotify(names: string[]): void {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.dataChangeNotify(names);\n });\n }\n\n /**\n * 设置面板数据的值\n *\n * @param {string} name 要设置的数据的属性名称\n * @param {unknown} value 要设置的值\n */\n async setDataValue(name: string, value: unknown): Promise<void> {\n if (\n Object.prototype.hasOwnProperty.call(this.state.data, name) &&\n this.state.data[name] === value\n ) {\n // *`面板里没有属性${name}或者${name}的值未发生改变`\n return;\n }\n\n // 改变值\n this.state.data[name] = value;\n }\n\n destroy(): void {\n super.destroy();\n this.data.destroy?.();\n Object.values(this.panelItems).forEach(item => {\n item.destroy();\n });\n }\n}\n","import {\n IPanelItemProvider,\n IPanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem } from '@ibiz/model-core';\nimport {\n computed,\n defineComponent,\n inject,\n PropType,\n reactive,\n VNode,\n} from 'vue';\nimport { useNamespace } from '../../use';\nimport { SingleDataContainerController } from './single-data-container.controller';\nimport './single-data-container.scss';\n\nexport const SingleDataContainer = defineComponent({\n name: 'IBizSingleDataContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: SingleDataContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('single-data-container');\n const { id } = props.modelData;\n\n // 面板成员state响应式\n const keys = Object.keys(props.controller.panelItems);\n keys.forEach(key => {\n const panelItem = props.controller.panelItems[key];\n panelItem.state = reactive(panelItem.state);\n });\n\n // 获取上层的绘制函数\n const renderPanelItem = inject<\n (\n panelItem: IPanelItem,\n options?: {\n providers: {\n [key: string]: IPanelItemProvider;\n };\n panelItems: {\n [key: string]: IPanelItemController;\n };\n },\n ) => VNode | null\n >('renderPanelItem')!;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ...props.controller.containerClass,\n ];\n return result;\n });\n\n return { ns, classArr, renderPanelItem };\n },\n render() {\n let content: VNode | VNode[];\n if (this.$slots.default) {\n content = this.$slots.default();\n } else {\n // 内容区默认插槽处理,封装app-col\n content = (\n <iBizRow class={this.ns.b('content')} layout={this.modelData.layout}>\n {this.modelData.panelItems?.map(panelItem => {\n const childController = this.controller.panelItems[panelItem.id!];\n return (\n <iBizCol\n layoutPos={panelItem.layoutPos}\n state={childController.state}\n >\n {this.renderPanelItem(panelItem, {\n providers: this.controller.providers,\n panelItems: this.controller.panelItems,\n })}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n }\n return <div class={this.classArr}>{content}</div>;\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { SingleDataContainerController } from './single-data-container.controller';\n\n/**\n * 单项数据容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class SingleDataContainerProvider\n * @implements {EditorProvider}\n */\nexport class SingleDataContainerProvider implements IPanelItemProvider {\n component: string = 'IBizSingleDataContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new SingleDataContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { SingleDataContainer } from './single-data-container';\nimport { SingleDataContainerProvider } from './single-data-container.provider';\nimport { SingleDataContainerState } from './single-data-container.state';\nimport { SingleDataContainerController } from './single-data-container.controller';\n\nexport { SingleDataContainerState, SingleDataContainerController };\n\nexport const IBizSingleDataContainer = withInstall(\n SingleDataContainer,\n function (v: App) {\n v.component(SingleDataContainer.name, SingleDataContainer);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SINGLEDATA',\n () => new SingleDataContainerProvider(),\n );\n },\n);\n\nexport default IBizSingleDataContainer;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板栅格容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class GridContainerState\n * @extends {PanelItemState}\n */\nexport class GridContainerState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { GridContainerState } from './grid-container.state';\n\n/**\n * 面板栅格容器控制器\n *\n * @export\n * @class GridContainerController\n * @extends {PanelItemController}\n */\nexport class GridContainerController extends PanelItemController<IPanelContainer> {\n declare state: GridContainerState;\n\n protected createState(): GridContainerState {\n return new GridContainerState(this.parent?.state);\n }\n}\n","import { IFlexLayoutPos, IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, Ref, VNode } from 'vue';\nimport { useNamespace } from '../../use';\nimport { GridContainerController } from './grid-container.controller';\nimport './grid-container.scss';\n\nexport const GridContainer = defineComponent({\n name: 'IBizGridContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: GridContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('grid-container');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n result = [\n ...result,\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n const layoutModel = computed(() => {\n return { ...props.modelData.layout, layout: 'TABLE_12COL' };\n });\n\n const convertLayoutPos = (\n layoutPos: IFlexLayoutPos,\n adaptGrow: number,\n ): IFlexLayoutPos => {\n const result = {\n ...layoutPos,\n layout: 'TABLE_12COL',\n colXS: layoutPos.grow || adaptGrow,\n colSM: layoutPos.grow || adaptGrow,\n colMD: layoutPos.grow || adaptGrow,\n colLG: layoutPos.grow || adaptGrow,\n };\n delete result.grow;\n return result;\n };\n\n // 自适应列个数, 算一次记录下来,后续不用计算\n const adaptCols: Ref<undefined | number> = ref(undefined);\n // 自适应列默认占据的grow\n const adaptGrow: Ref<number> = ref(12);\n\n return {\n ns,\n classArr,\n layoutModel,\n convertLayoutPos,\n adaptGrow,\n adaptCols,\n };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n\n if (this.adaptCols === undefined) {\n // 当前已经配置的grow\n let currentGrow = 0;\n // 自适应列个数\n let adaptCols = 0;\n defaultSlots.forEach(slot => {\n const props = slot.props as IData;\n if (props && props.modelData && props.modelData.layoutPos) {\n if (typeof props.modelData.layoutPos.grow === 'number') {\n currentGrow += props.modelData.layoutPos.grow;\n } else if (typeof props.modelData.layoutPos.grow === 'undefined') {\n adaptCols += 1;\n }\n }\n });\n // 自适应列默认占据的grow\n let adaptGrow = 12;\n if (adaptCols > 0) {\n adaptGrow = (12 - currentGrow) / adaptCols;\n }\n this.adaptCols = adaptCols;\n this.adaptGrow = adaptGrow;\n }\n\n return (\n <iBizRow class={this.classArr} layout={this.layoutModel}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n return (\n <iBizCol\n layoutPos={this.convertLayoutPos(\n props.modelData.layoutPos,\n this.adaptGrow,\n )}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { GridContainerController } from './grid-container.controller';\n\n/**\n * 面板容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class GridContainerProvider\n * @implements {EditorProvider}\n */\nexport class GridContainerProvider implements IPanelItemProvider {\n component: string = 'IBizGridContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new GridContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { GridContainer } from './grid-container';\nimport { GridContainerProvider } from './grid-container.provider';\nimport { GridContainerState } from './grid-container.state';\nimport { GridContainerController } from './grid-container.controller';\n\nexport { GridContainerState, GridContainerController };\n\nexport const IBizGridContainer = withInstall(GridContainer, function (v: App) {\n v.component(GridContainer.name, GridContainer);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_GRID',\n () => new GridContainerProvider(),\n );\n});\n\nexport default IBizGridContainer;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板图片容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class PanelContainerImageState\n * @extends {PanelItemState}\n */\nexport class PanelContainerImageState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerImageState } from './panel-container-image.state';\n\n/**\n * 面板图片容器控制器\n *\n * @export\n * @class PanelContainerImageController\n * @extends {PanelItemController}\n */\nexport class PanelContainerImageController extends PanelItemController<IPanelContainer> {\n declare state: PanelContainerImageState;\n\n protected createState(): PanelContainerImageState {\n return new PanelContainerImageState(this.parent?.state);\n }\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { isSvg } from '@ibiz-template/core';\nimport { useNamespace } from '../../use';\nimport { PanelContainerImageController } from './panel-container-image.controller';\nimport './panel-container-image.scss';\n\nexport const PanelContainerImage = defineComponent({\n name: 'IBizPanelContainerImage',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelContainerImageController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-container-image');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n result = [\n ...result,\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n const backgroundStyle = computed(() => {\n const image = props.controller.model.sysImage;\n const styles = {};\n let imgStr = '';\n if (image?.rawContent) {\n if (isSvg(image.rawContent)) {\n imgStr = `url(data:image/svg+xml;base64,${btoa(image.rawContent)})`;\n } else {\n imgStr = `url(${image.rawContent})`;\n }\n } else if (image?.imagePath) {\n imgStr = `url(${image.imagePath})`;\n }\n if (imgStr) {\n Object.assign(styles, {\n backgroundImage: imgStr,\n });\n }\n return styles;\n });\n\n return { ns, classArr, backgroundStyle };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n const content = (\n <iBizRow slot='content' layout={this.modelData.layout}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n return (\n <iBizCol\n layoutPos={props.modelData.layoutPos}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n style={this.backgroundStyle}\n >\n {this.controller.model.cssStyle ? (\n <style type='text/css'>{this.controller.model.cssStyle}</style>\n ) : null}\n {content}\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerImageController } from './panel-container-image.controller';\n\n/**\n * 面板图片容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelContainerImageProvider\n * @implements {EditorProvider}\n */\nexport class PanelContainerImageProvider implements IPanelItemProvider {\n component: string = 'IBizPanelContainerImage';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelContainerImageController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PanelContainerImage } from './panel-container-image';\nimport { PanelContainerImageProvider } from './panel-container-image.provider';\nimport { PanelContainerImageState } from './panel-container-image.state';\nimport { PanelContainerImageController } from './panel-container-image.controller';\n\nexport { PanelContainerImageState, PanelContainerImageController };\n\nexport const IBizPanelContainerImage = withInstall(\n PanelContainerImage,\n function (v: App) {\n v.component(PanelContainerImage.name, PanelContainerImage);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_IMAGE',\n () => new PanelContainerImageProvider(),\n );\n },\n);\n\nexport default IBizPanelContainerImage;\n","import { defineComponent, onMounted, onUnmounted } from 'vue';\nimport { IBizContext } from '@ibiz-template/core';\nimport { toLocalOpenWFRedirectView } from '@ibiz-template/runtime';\n\nexport const AppRedirectView = defineComponent({\n setup() {\n const context = IBizContext.create(ibiz.appData?.context || {});\n\n onUnmounted(() => {\n context.destroy();\n });\n\n const { href } = window.location;\n\n async function toRedirect(): Promise<void> {\n await toLocalOpenWFRedirectView(context, href);\n }\n\n onMounted(() => ibiz.util.hiddenAppLoading());\n\n toRedirect();\n },\n render() {\n return <div>重定向跳转中</div>;\n },\n});\n","import { IViewProvider } from '@ibiz-template/runtime';\n\n/**\n * 视图适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ViewProvider\n * @implements {IViewProvider}\n */\nexport class ViewProvider implements IViewProvider {\n component: string = 'IBizView';\n}\n","import {\n getControlsByView,\n IModal,\n IViewLayoutPanelController,\n IViewProvider,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { createUUID } from 'qx-util';\nimport { IAppView } from '@ibiz/model-core';\nimport {\n defineComponent,\n h,\n PropType,\n resolveComponent,\n onActivated,\n onDeactivated,\n VNode,\n ref,\n computed,\n onMounted,\n onUnmounted,\n} from 'vue';\nimport './view.scss';\nimport { useNamespace, useViewController } from '../../use';\n\nexport const View = defineComponent({\n name: 'IBizView',\n props: {\n context: Object as PropType<IContext>,\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n modelData: { type: Object as PropType<IAppView>, required: true },\n modal: { type: Object as PropType<IModal> },\n state: { type: Object as PropType<IData> },\n provider: { type: Object as PropType<IViewProvider> },\n },\n setup() {\n const ns = useNamespace('view');\n const c = useViewController((...args) => new ViewController(...args));\n // 视图部件模型在viewlayoutPanel里面。\n const controls = getControlsByView(c.model);\n const { viewType, sysCss, codeName } = c.model;\n const typeClass = viewType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const viewClassNames = computed(() => [\n ns.b(),\n true && ns.b(typeClass),\n true && ns.m(codeName),\n true && sysCssName,\n c.state.viewMessages.TOP ? 'has-top-message' : '',\n c.state.viewMessages.BOTTOM ? 'has-bottom-message' : '',\n ]);\n\n const onLayoutPanelCreated = (\n controller: IViewLayoutPanelController,\n ): void => {\n c.setLayoutPanel(controller as IViewLayoutPanelController);\n };\n\n const container = ref<HTMLElement | null>(null);\n // todo devtool抽全局\n const key = createUUID();\n\n // 临时实现从window上取\n const devtool = (window as IData).devtool;\n onMounted(() => {\n if (devtool) {\n devtool.registerView(key, c, container);\n }\n });\n\n onUnmounted(() => {\n if (devtool) {\n devtool.unRegisterView(key);\n }\n });\n\n onActivated(() => c.onActivated());\n\n onDeactivated(() => c.onDeactivated());\n\n const renderViewMessage = (position: 'TOP' | 'BOTTOM' | 'BODY') => {\n if (c.state.isCreated) {\n const viewMessages = c.state.viewMessages[position];\n if (viewMessages?.length) {\n return (\n <view-message\n class={[ns.e(`${position.toLowerCase()}-message`)]}\n messages={viewMessages}\n ></view-message>\n );\n }\n }\n return null;\n };\n\n return {\n c,\n controls,\n viewClassNames,\n container,\n onLayoutPanelCreated,\n renderViewMessage,\n };\n },\n render() {\n let layoutPanel = null;\n if (this.c.state.isCreated) {\n // 绘制部件插槽,外部插槽优先\n const slots: IData = {\n ...this.$slots,\n };\n if (this.controls?.length) {\n this.controls.forEach(ctrl => {\n const slotKey = ctrl.name! || ctrl.id!;\n const ctrlProps = {\n context: this.c.context,\n params: this.c.params,\n };\n if (this.c.slotProps[slotKey]) {\n Object.assign(ctrlProps, this.c.slotProps[slotKey]);\n }\n // 已经有插槽的不用自己绘制了。\n const outCtrlSlot = slots[slotKey];\n if (outCtrlSlot) {\n slots[slotKey] = (): VNode => {\n return outCtrlSlot(ctrlProps);\n };\n return;\n }\n const provider = this.c.providers[slotKey];\n if (provider) {\n slots[slotKey] = (): VNode => {\n const comp = resolveComponent(provider.component) as string;\n return h(comp, {\n modelData: ctrl,\n ...ctrlProps,\n provider,\n });\n };\n }\n });\n }\n\n if (this.c.engines.length === 0) {\n layoutPanel = (\n <span style={'color:red;'}>\n 视图类型{this.modelData.viewType}暂未支持\n </span>\n );\n } else {\n // 绘制视图布局面板\n const viewLayoutPanel = this.c.model.viewLayoutPanel!;\n const provider = this.c.providers[viewLayoutPanel.name!];\n layoutPanel = h(\n resolveComponent(provider.component) as string,\n {\n modelData: viewLayoutPanel,\n context: this.c.context,\n params: this.c.params,\n provider,\n container: this.c,\n onControllerAppear: this.onLayoutPanelCreated,\n },\n slots,\n );\n }\n }\n\n return (\n <div\n ref='container'\n class={this.viewClassNames}\n v-loading={this.c.state.isLoading}\n >\n {this.renderViewMessage('TOP')}\n {layoutPanel}\n {this.renderViewMessage('BOTTOM')}\n </div>\n );\n },\n});\n","import { App } from 'vue';\nimport { registerViewProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { ViewProvider } from './view.provider';\nimport { View } from './view';\n\nexport const IBizView = withInstall(View, function (v: App) {\n v.component(View.name, View);\n registerViewProvider('DEFAULT', () => new ViewProvider());\n});\n","import qs from 'qs';\nimport { defineComponent } from 'vue';\nimport { useRouter } from 'vue-router';\n\nexport const TodoRedirect = defineComponent({\n setup() {\n const router = useRouter();\n\n const { href } = window.location;\n\n const i = href.lastIndexOf('?');\n\n const queryStr: string = decodeURIComponent(\n href.substring(i + 1, href.length),\n );\n\n if (!queryStr) {\n throw new Error(`重定向参数不足无法跳转`);\n }\n\n const params = qs.parse(queryStr, { delimiter: ';' }) as IData;\n\n const { apptype, todotype, todoid } = params;\n\n const data: IData = { srfapptype: 'pc', srfapp: '' };\n\n if (!apptype) {\n data.todourltype = 'RouterUrl';\n }\n\n async function getLinkUrl(): Promise<void> {\n const res = await ibiz.net.post(`/systodos/${todoid}/getlinkurl`, data);\n let url: string = res.data.linkurl;\n // apptype存在,带ip、端口等完整数据\n if (apptype) {\n window.location.href = url;\n } else {\n if (url.indexOf('/') !== 0) {\n url = `/${url}`;\n }\n url += `;srfwf=${todotype}`;\n router.push(`/index${url}`);\n }\n }\n\n getLinkUrl();\n },\n render() {\n return <div>待办列表重定向</div>;\n },\n});\n","import { IViewProvider } from '@ibiz-template/runtime';\n\n/**\n * 应用门户视图,实体数据看板视图适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ViewProvider\n * @implements {IViewProvider}\n */\nexport class PortalViewProvider implements IViewProvider {\n component: string = 'IBizPortalView';\n}\n","import { IModal, ViewController } from '@ibiz-template/runtime';\nimport { IAppPortalView } from '@ibiz/model-core';\nimport { defineComponent, h, PropType, resolveComponent } from 'vue';\nimport { useNamespace, useViewController } from '../../use';\n\nexport const PortalView = defineComponent({\n name: 'IBizPortalView',\n props: {\n context: Object as PropType<IContext>,\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n modelData: { type: Object as PropType<IAppPortalView>, required: true },\n modal: { type: Object as PropType<IModal> },\n state: { type: Object as PropType<IData> },\n },\n setup() {\n const ns = useNamespace('view');\n const c = useViewController((...args) => new ViewController(...args));\n // 视图部件模型在viewlayoutPanel里面。\n const controls = c.model.viewLayoutPanel?.controls || c.model.controls;\n\n const { viewType, sysCss, codeName } = c.model;\n const typeClass = viewType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const viewClassNames = [\n ns.b(),\n true && ns.b(typeClass),\n true && ns.m(codeName),\n true && sysCssName,\n ];\n\n return { c, ns, controls, viewClassNames };\n },\n render() {\n let content = null;\n if (this.c.state.isCreated) {\n // 绘制部件插槽,外部插槽优先\n const slots: IData = {\n ...this.$slots,\n };\n if (this.controls?.length) {\n this.controls.forEach(ctrl => {\n const slotKey = ctrl.name || ctrl.id!;\n const crtlProps = {\n context: this.c.context,\n params: this.c.params,\n };\n if (this.c.slotProps[slotKey]) {\n Object.assign(crtlProps, this.c.slotProps[slotKey]);\n }\n // 已经有插槽的不用自己绘制了。\n const outCtrlSlot = slots[slotKey];\n if (outCtrlSlot) {\n slots[slotKey] = () => {\n return outCtrlSlot(crtlProps);\n };\n return;\n }\n const provider = this.c.providers[slotKey];\n if (provider) {\n slots[slotKey] = () => {\n const comp = resolveComponent(provider.component) as string;\n return h(comp, {\n modelData: ctrl,\n ...crtlProps,\n });\n };\n }\n });\n }\n\n // 绘制内容区\n if (slots.dashboard) {\n content = slots.dashboard();\n }\n }\n\n return <div class={this.viewClassNames}>{content}</div>;\n },\n});\n","import { App } from 'vue';\nimport { registerViewProvider, ViewType } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PortalViewProvider } from './portal-view.provider';\nimport { PortalView } from './portal-view';\n\nexport const IBizPortalView = withInstall(PortalView, function (v: App) {\n v.component(PortalView.name, PortalView);\n registerViewProvider(\n ViewType.APP_PORTAL_VIEW,\n () => new PortalViewProvider(),\n );\n registerViewProvider(ViewType.DE_PORTAL_VIEW, () => new PortalViewProvider());\n registerViewProvider(\n ViewType.DE_PORTAL_VIEW9,\n () => new PortalViewProvider(),\n );\n});\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","import { RuntimeError, RuntimeModelError } from '@ibiz-template/core';\nimport {\n IPluginFactory,\n IPluginItem,\n RemotePluginConfig,\n RemotePluginItem,\n} from '@ibiz-template/runtime';\nimport { IAppPFPluginRef, ISysPFPlugin } from '@ibiz/model-core';\nimport path, { join } from 'path-browserify';\nimport { App, Plugin } from 'vue';\n\n/**\n * 插件工具类\n *\n * @author chitanda\n * @date 2022-10-21 16:10:29\n * @export\n * @class PluginFactory\n */\nexport class PluginFactory implements IPluginFactory {\n /**\n * 是否为 http || https 开头\n *\n * @author chitanda\n * @date 2022-11-07 14:11:28\n * @protected\n */\n protected urlReg = /^http[s]?:\\/\\/[^\\s]*/;\n\n /**\n * 是否已经加载过文件缓存\n *\n * @author chitanda\n * @date 2022-10-31 14:10:17\n * @protected\n * @type {Map<string, boolean>}\n */\n protected cache: Map<string, boolean> = new Map();\n\n /**\n * 本地开发测试包,只在本地开发生效\n *\n * @author chitanda\n * @date 2022-11-02 21:11:41\n * @protected\n */\n protected devPackages: Map<string, () => Promise<unknown>> = new Map();\n\n /**\n * 插件缓存\n *\n * @author chitanda\n * @date 2022-10-31 14:10:28\n * @protected\n * @type {Map<string, RemotePluginItem>}\n */\n protected pluginCache: Map<string, RemotePluginItem> = new Map();\n\n /**\n * 所有的插件\n *\n * @author chitanda\n * @date 2023-02-02 16:02:55\n * @protected\n * @type {Plugin[]}\n */\n protected pluginCodes: Plugin[] = [];\n\n /**\n * 预定义插件集合\n *\n * @author chitanda\n * @date 2023-03-09 17:03:46\n * @protected\n * @type {Map<string, IPluginItem>}\n */\n protected predefinedPlugins: Map<string, IPluginItem> = new Map();\n\n /**\n * 注册视图默认插件\n *\n * @author chitanda\n * @date 2023-02-06 21:02:10\n * @param {IPluginItem} plugin\n */\n registerPredefinedPlugin(plugin: IPluginItem): void {\n this.predefinedPlugins.set(plugin.name, plugin);\n }\n\n /**\n * 给入应用实例,将已经加载的过插件注入。主要用于多实例的情况\n *\n * @author chitanda\n * @date 2023-02-02 16:02:51\n * @param {App} app\n */\n register(app: App): void {\n this.pluginCodes.forEach(plugin => {\n app.use(plugin);\n });\n }\n\n /**\n * 加载预置插件\n *\n * @author chitanda\n * @date 2023-03-09 18:03:48\n * @param {string} name\n * @return {*} {Promise<void>}\n */\n async loadPredefinedPlugin(name: string): Promise<void> {\n if (this.predefinedPlugins.has(name)) {\n const plugin = this.predefinedPlugins.get(name)!;\n if (plugin) {\n await this.loadPluginRef(plugin.name, plugin.path);\n }\n }\n }\n\n /**\n * 插件刚加载完成回来,设置到目前所有的 vue 实例当中\n *\n * @author chitanda\n * @date 2023-02-02 17:02:38\n * @protected\n * @param {Plugin} code\n */\n protected setPluginCode(code: Plugin): void {\n this.pluginCodes.push(code);\n window.vueInstances.forEach(inst => {\n inst.use(code);\n });\n }\n\n /**\n * 设置开发插件,用于本地调试\n *\n * @author chitanda\n * @date 2022-11-02 21:11:56\n * @param {string} name\n * @param {() => Promise<unknown>} fn\n */\n setDevPlugin(name: string, fn: () => Promise<unknown>): void {\n this.devPackages.set(name, fn);\n }\n\n /**\n * 加载插件\n *\n * @author chitanda\n * @date 2022-10-31 14:10:13\n * @param {ISysPFPlugin} plugin\n * @return {*} {Promise<boolean>}\n */\n async loadPlugin(plugin: ISysPFPlugin): Promise<boolean> {\n if (plugin.runtimeObject === true) {\n const pluginRef = plugin as unknown as IAppPFPluginRef;\n if (pluginRef) {\n try {\n await this.loadPluginRef(\n pluginRef.rtobjectName!,\n pluginRef.rtobjectRepo!,\n );\n } catch (error) {\n throw new RuntimeModelError(pluginRef, `配置加载失败`);\n }\n }\n }\n return false;\n }\n\n /**\n * 加载应用插件\n *\n * @author chitanda\n * @date 2022-10-31 16:10:57\n * @param {IPSAppPFPluginRef} pluginRef\n * @return {*} {Promise<boolean>}\n */\n async loadPluginRef(\n rtObjectName: string,\n rtObjectRepo: string,\n ): Promise<boolean> {\n if (this.pluginCache.has(rtObjectName)) {\n return true;\n }\n let configData: unknown = null;\n const fn = this.devPackages.get(rtObjectName);\n if (fn) {\n configData = await fn();\n } else {\n const pluginPath: string = rtObjectRepo;\n const configUrl = this.urlReg.test(pluginPath)\n ? `${pluginPath}/package.json`\n : `${ibiz.env.pluginBaseUrl}/${join(pluginPath, 'package.json')}`;\n const res = await ibiz.net.axios({\n method: 'get',\n headers: { 'Access-Control-Allow-Origin': '*' },\n url: configUrl,\n });\n if (res.status !== 200) {\n throw new Error(`配置加载失败`);\n }\n configData = res.data;\n }\n const remotePlugin = new RemotePluginItem(\n rtObjectName,\n rtObjectRepo,\n configData as RemotePluginConfig,\n );\n if (remotePlugin) {\n try {\n await this.loadScript(remotePlugin);\n this.pluginCache.set(rtObjectName, remotePlugin);\n return true;\n } catch (error) {\n ibiz.log.error(error);\n }\n }\n return false;\n }\n\n /**\n * 加载插件\n *\n * @author chitanda\n * @date 2022-11-02 14:11:31\n * @protected\n * @param {RemotePluginItem} remotePlugin\n * @return {*} {Promise<void>}\n */\n protected async loadScript(remotePlugin: RemotePluginItem): Promise<void> {\n const pluginPath: string = remotePlugin.repo;\n const { name, version, system, module, styles } = remotePlugin.config;\n let scriptUrl = '';\n if (this.devPackages.has(name)) {\n scriptUrl = join(`${name}@${version}`, module);\n } else if (ibiz.env.dev) {\n scriptUrl = this.urlReg.test(pluginPath)\n ? `${pluginPath}/${join(module)}`\n : `${ibiz.env.pluginBaseUrl}/${pluginPath}/${join(module)}`;\n } else {\n scriptUrl = join(pluginPath, system);\n }\n if (scriptUrl) {\n if (this.cache.has(scriptUrl)) {\n return;\n }\n let data: IParams | null = null;\n const url = this.parseUrl(scriptUrl);\n const styleUrls = (typeof styles === 'string' ? [styles] : styles).map(\n styleUrl => this.parseUrl(path.join(pluginPath, styleUrl)),\n );\n // 本地开发模式下的包引用加载\n if (this.devPackages.has(name)) {\n const fn = this.devPackages.get(name)!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = (await fn()) as any;\n this.cache.set(scriptUrl, true);\n } else if (ibiz.env.dev) {\n data = await import(scriptUrl /* @vite-ignore */);\n } else {\n System.addImportMap({\n imports: {\n [name]: url,\n },\n styles: {\n [name]: styleUrls,\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any);\n data = await System.import(name);\n }\n if (data) {\n if (data.default) {\n this.setPluginCode(data.default);\n } else {\n throw new RuntimeError(\n `远程插件加载失败, 远程插件未找到[default]默认导出`,\n );\n }\n this.cache.set(scriptUrl, true);\n } else {\n throw new RuntimeError(\n `远程插件加载失败, 未找到文件或文件内容格式不正确`,\n );\n }\n }\n }\n\n /**\n * 编译请求文件地址\n *\n * @author chitanda\n * @date 2022-10-31 14:10:19\n * @protected\n * @param {string} script\n * @return {*} {string}\n */\n protected parseUrl(script: string): string {\n if (this.urlReg.test(script)) {\n return script;\n }\n let url: string = '';\n if (this.urlReg.test(ibiz.env.pluginBaseUrl)) {\n if (script.startsWith('/')) {\n url = ibiz.env.pluginBaseUrl + script;\n } else {\n url = `${ibiz.env.pluginBaseUrl}/${script}`;\n }\n } else {\n url = `${join(ibiz.env.pluginBaseUrl, script)}`;\n }\n const { origin, pathname } = window.location;\n if (pathname.endsWith('/') && url.startsWith('/')) {\n url = url.substring(1);\n }\n if (this.urlReg.test(url) === false) {\n url = `${origin}${pathname}${url}`;\n }\n return url;\n }\n}\n","/**\n * 必填props类型\n *\n * @author lxm\n * @date 2022-11-01 19:11:47\n * @export\n * @class RequiredProp\n * @template T type的类型\n * @template D 默认值的类型\n * @template V 校验函数的类型\n */\nexport class RequiredProp<T, D = undefined, V = undefined> {\n readonly required = true;\n\n type: T;\n\n default?: D | undefined;\n\n validator?: V | undefined;\n\n constructor(type: T, _default?: D, validator?: V) {\n if (_default) {\n this.default = _default;\n }\n if (validator) {\n this.validator = validator;\n }\n this.type = type;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { PropType } from 'vue';\nimport { RequiredProp } from '../common';\n\n/**\n * 获取编辑器通用props\n *\n * @author lxm\n * @date 2022-11-01 19:11:04\n * @export\n * @template C\n * @returns {*}\n */\nexport function getEditorProps<C>() {\n return {\n value: String,\n controller: new RequiredProp(Object as PropType<C>),\n data: new RequiredProp(Object as PropType<IData>),\n disabled: {\n type: Boolean,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n autoFocus: {\n type: Boolean,\n default: false,\n },\n overflowMode: { type: String },\n };\n}\n\n/**\n * 获取编辑器通用emits\n *\n * @author lxm\n * @date 2022-11-03 19:11:04\n * @export\n * @template V\n * @returns {*}\n */\nexport function getEditorEmits<V>() {\n return {\n /** 值变更事件 */\n change: (_value: V, _name?: string) => true,\n /** 失焦事件 */\n blur: (_event?: IData) => true,\n /** 聚焦事件 */\n focus: (_event?: IData) => true,\n /** 回车事件 */\n enter: (_event?: IData) => true,\n /** 信息文本变更事件 */\n infoTextChange: (_text: string) => true,\n };\n}\n\n/**\n * 获取表格列编辑器通用emits\n *\n * @author lxm\n * @date 2022-11-01 19:11:04\n * @export\n * @template V\n * @returns {*}\n */\nexport function getGridEditorEmits<V>() {\n return {\n /** 值变更事件 */\n change: (_value: V, _name?: string) => true,\n /** 是否正在操作事件 */\n rowSave: () => true,\n };\n}\n\n/**\n * 表格编辑器通用props\n *\n * @author lxm\n * @date 2022-11-02 10:11:02\n * @export\n * @returns {*}\n */\nexport function getGridEditorCommonProps() {\n return {\n hasError: {\n type: Boolean,\n },\n };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取文本框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getInputProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格文本框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridInputProps<C>() {\n return { ...getInputProps<C>(), ...getGridEditorCommonProps() };\n}\n\n/**\n * 获取数值框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getInputNumberProps<C>() {\n return { ...getEditorProps<C>(), value: Number };\n}\n\n/**\n * 获取表格数值框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridInputNumberProps<C>() {\n return { ...getInputNumberProps<C>(), ...getGridEditorCommonProps() };\n}\n\n/**\n * 获取ip框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getInputIpProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格ip框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridInputIpProps<C>() {\n return { ...getInputIpProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取标签的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getSpanProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number, Object, Array] };\n}\n\n/**\n * 获取表格标签的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridSpanProps<C>() {\n return { ...getSpanProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取下拉列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDropdownProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格下拉列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDropdownProps<C>() {\n return { ...getDropdownProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取选项框列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCheckboxListProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格选项框列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCheckboxListProps<C>() {\n return { ...getCheckboxListProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取选项框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCheckboxProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格选项框列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCheckboxProps<C>() {\n return { ...getCheckboxProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取数据选择的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDataPickerProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Array, Object, Number] };\n}\n\n/**\n * 获取表格数据选择的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDataPickerProps<C>() {\n return { ...getDataPickerProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取日期选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDatePickerProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格日期选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDatePickerProps<C>() {\n return { ...getDatePickerProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取时间范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDateRangeProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格时间范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDateRangeProps<C>() {\n return { ...getDateRangeProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取列表框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getListBoxProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格列表框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridListBoxProps<C>() {\n return { ...getListBoxProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取数值范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getNumberRangeProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格数值范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridNumberRangeProps<C>() {\n return { ...getNumberRangeProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取单选框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getRadioProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格单选框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridRadioProps<C>() {\n return { ...getRadioProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取评分器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getRateProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格评分器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridRateProps<C>() {\n return { ...getRateProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取直接内容的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getRawProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number, Array] };\n}\n\n/**\n * 获取表格步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridRawProps<C>() {\n return { ...getRawProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取滑动输入条的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getSliderProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格滑动输入条的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridSliderProps<C>() {\n return { ...getSliderProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getStepperProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridStepperProps<C>() {\n return { ...getStepperProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取开关的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getSwitchProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridSwitchProps<C>() {\n return { ...getSwitchProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取上传的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getUploadProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格上传的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridUploadProps<C>() {\n return { ...getUploadProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取自动完成的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getAutoCompleteProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格自动完成的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridAutoCompleteProps<C>() {\n return { ...getAutoCompleteProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取代码编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCodeProps<C>() {\n return {\n ...getEditorProps<C>(),\n value: String,\n language: {\n type: String,\n },\n theme: {\n type: String,\n },\n };\n}\n\n/**\n * 获取表格代码编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCodeProps<C>() {\n return { ...getCodeProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取html编辑框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getHtmlProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格html编辑框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridHtmlProps<C>() {\n return { ...getHtmlProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取MARKDOWN的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getMarkDownProps<C>() {\n return {\n ...getEditorProps<C>(),\n data: { type: Object, required: false },\n controller: { type: Object, required: false },\n disabled: {\n type: Boolean,\n required: false,\n },\n };\n}\n\n/**\n * 获取表格MARKDOWN的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridMarkDownProps<C>() {\n return { ...getMarkDownProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取数组编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getArrayProps<C>() {\n return { ...getEditorProps<C>(), value: [Array<string>, Array<number>] };\n}\n\n/**\n * 获取表格数组编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridArrayProps<C>() {\n return { ...getArrayProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取级联选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCascaderProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格级联选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCascaderProps<C>() {\n return { ...getCascaderProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取颜色选择器的props\n *\n * @author zzq\n * @date 2323-8-14 19:42:00\n * @export\n * @template C\n * @returns {*}\n */\nexport function getColorPickerProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格颜色选择器的props\n *\n * @author zzq\n * @date 2323-8-14 19:42:00\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridColorPickerProps<C>() {\n return { ...getColorPickerProps<C>(), ...getGridEditorCommonProps() };\n}\n"],"names":["useClickOutside","elRef","handler","options","stop","NOOP","pause","proceed","destroy","watch","newVal","oldVal","isNil","result","onClickOutside","onBeforeUnmount","useProps","getCurrentInstance","getOrigin","val","isReactive","toRaw","usePropsWatch","key","callback","props","useForce","vue","isFunc","useForceTogether","controller","orignForce","selfForce","useController","EmptyVNode","exports","createCommentVNode","isEmptyVNode","nodes","useCtx","inject","useMobCtx","watchAndUpdateContextParams","control","watchAndUpdateState","excludeKeys","watchProps","changeProps","useControlController","fn","ctx","provider","c","reactive","eventName","event","useEventListener","listener","cleanup","listenJSEvent","useFocusAndBlur","focus","blur","componentRef","ref","isFocus","outsideFuns","doBlur","_evt","useNamespace","block","Namespace","route2routePath","route","depth","pathNodes","index","viewName","paramsStr","params","context","srfnav","qs","appContext","routePath2string","routePath","pathStr","pathNode","routeParams","notNilEmpty","objStr","getOwnRouteContext","ownContext","excludeViewTypes","ViewType","calcResRoutePath","appDataEntityId","entity","match","getMatchResPath","currentContext","resContext","generateRoutePath","appView","currentNode","deName","calcDeCodeNameById","parseRouteViewData","_a","viewCodeName","RuntimeError","viewModel","getNestedRoutePath","noSrfNav","onRouteChange","useRoute","currentKey","RouteListener","wait","timer","item","withInstall","main","install","app","prepareControl","commonNs","controlType","sysCss","codeName","typeClass","sysCssName","ns","controlClass","renderString","value","error","OverlayContainer","component","render","opts","QXEvent","_rootComponent","_rootProps","self","container","vm","h","data","resolve","OverlayPopoverContainer","target","createOverlayView","modal","viewShell","resolveComponent","openViewModal","overlay","openViewFloatWindow","openViewDrawer","openViewPopover","PlacementMap","getDrawerPlacement","openMode","RouterCallbackItem","from","to","RouterCallback","router","path","toFullPath","routerCallback","formatAsyncAction","isNumber","dayjs","useAsyncAction","allAsyncActions","showLength","recentAsyncActions","computed","_item","load","res","asyncActionCallBack","msg","asyncAction","findIndex","onUnmounted","useAppStore","defineStore","useZIndexStore","zIndex","increment","decrement","useUIStore","piniaInstance","createPinia","useRouterQuery","query","useRouteKey","originKey","routeKey","routeListener","view","clearAll","useViewController","provide","IBizIcon","defineComponent","icon","type","size","baseDir","default","setup","BaseUrl","env","assetsUrl","getContent","_createVNode","cssClass","imagePath","isSvg","rawContent","content","IBizRouterView","inheritAttrs","name","String","manualKey","cache","isActive","attrs","isNotNil","renderComp","tempProps","Component","_resolveComponent","newComp","IBizControlBase","required","model","onLayoutPanelCreated","inlineStyle","endsWith","state","providers","layoutPanel","slots","ctrl","$slots","length","slotKey","outCtrlSlot","ctrlProps","controlPanel","modelData","_c","_b","IBizControlShell","evt","isComplete","getControlProvider","errMsg","err","ibiz","_withDirectives","_resolveDirective","IBizViewShell","viewId","init","viewModelData","getViewProvider","$props","IBizCodeList","codeListItems","Array","codeList","emits","_text","emit","items","infoText","findCodeListItem","codelist","findItem","i","childrenItem","values","split","valueSeparator","map","text","color","textCls","immediate","emptyText","b","ControlLoadingPlaceholder","Object","PanelContainerState","PanelItemState","PanelContainerController","PanelItemController","_isSlot","s","_isVNode","PanelContainer","id","classArr","_slot","defaultSlots","layout","slot","PanelContainerProvider","panelItem","panel","parent","IBizPanelContainer","v","registerPanelItemProvider","PanelCtrlPos","on","bindControl","m","containerClass","is","visible","dev","PanelCtrlPosController","PanelCtrlPosProvider","IBizPanelCtrlPos","ScrollContainerItemController","ScrollContainerItem","ScrollContainerItemProvider","ScrollContainerController","ScrollContainer","left","top","right","bottom","slotStylle","width","height","center","log","debug","flexShrink","ScrollContainerProvider","IBizScrollContainer","NavPosState","NavPosController","navViewMsg","str","triggerEvent","expRoute","mergeLeft","Modal","ViewMode","blankRoute","openViewMsg","selfPath","tempContext","OpenAppViewCommand","rawItemParams","param","NavPos","onViewCreated","useRouter","setRouter","routeDepth","expViewRoutePath","fullPath","currentRoutePath","cacheKeys","routeOpen","viewModals","routerContent","navViewMsgs","NavPosProvider","IBizNavPos","PanelFieldState","PanelFieldController","getEditorProvider","PanelItemEventName","PanelField","push","onValueChange","editor","disabled","class","readonly","onChange","onFocus","editorProps","PanelFieldProvider","IBizPanelField","PanelRawItemController","PanelRawItem","PanelRawItemProvider","IBizPanelRawItem","MultiDataContainerItemState","MultiDataContainerItemController","fieldKeys","getAllPanelField","panelItems","panelItemProvider","panelItemController","isDataContainer","_names","names","MultiDataContainerState","MultiDataContainerController","getPanelItemProvider","dataSourceType","dataName","RuntimeModelError","ModelError","dataItem","fields","_items","PanelData","PanelNotifyState","appDELogicId","execDELogicById","originData","appDEMethodId","updateData","_name","_value","MultiDataContainer","dataItems","keys","forEach","renderPanelItem","itemController","childController","MultiDataContainerProvider","IBizMultiDataContainer","SingleDataContainerState","SingleDataContainerController","panelData","SingleDataContainer","SingleDataContainerProvider","IBizSingleDataContainer","GridContainerState","GridContainerController","GridContainer","layoutModel","convertLayoutPos","layoutPos","adaptGrow2","colXS","grow","adaptGrow","colSM","colMD","colLG","adaptCols","currentGrow","undefined","GridContainerProvider","IBizGridContainer","PanelContainerImageState","PanelContainerImageController","PanelContainerImage","backgroundStyle","image","styles","imgStr","backgroundImage","PanelContainerImageProvider","IBizPanelContainerImage","AppRedirectView","IBizContext","href","toRedirect","toLocalOpenWFRedirectView","hiddenAppLoading","onMounted","_createTextVNode","ViewProvider","View","args","ViewController","controls","getControlsByView","viewType","toLowerCase","viewClassNames","setLayoutPanel","createUUID","devtool","registerView","unRegisterView","onDeactivated","position","onActivated","renderViewMessage","viewMessages","comp","viewLayoutPanel","IBizView","registerViewProvider","TodoRedirect","queryStr","decodeURIComponent","delimiter","todotype","todoid","srfapptype","srfapp","apptype","url","window","location","indexOf","getLinkUrl","PortalViewProvider","PortalView","cssName","crtlProps","assign","IBizPortalView","assertPath","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","code","lastSlashIndex","_format","sep","pathObject","dir","base","posix","resolvedPath","resolvedAbsolute","cwd","isAbsolute","trailingSeparator","joined","arg","fromStart","fromEnd","fromLen","toStart","toEnd","toLen","lastCommonSep","fromCode","toCode","out","hasRoot","end","matchedSlash","ext","start","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","ret","pathBrowserify","PluginFactory","plugin","inst","pluginRef","rtObjectName","rtObjectRepo","configData","pluginPath","configUrl","join","remotePlugin","RemotePluginItem","version","system","module","scriptUrl","styleUrls","styleUrl","script","origin","pathname","RequiredProp","_default","validator","getEditorProps","getEditorEmits","_event","getGridEditorEmits","getGridEditorCommonProps","getInputProps","getGridInputProps","getInputNumberProps","getGridInputNumberProps","getInputIpProps","getGridInputIpProps","getSpanProps","getGridSpanProps","getDropdownProps","getGridDropdownProps","getCheckboxListProps","getGridCheckboxListProps","getCheckboxProps","getGridCheckboxProps","getDataPickerProps","getGridDataPickerProps","getDatePickerProps","getGridDatePickerProps","getDateRangeProps","getGridDateRangeProps","getListBoxProps","getGridListBoxProps","getNumberRangeProps","getGridNumberRangeProps","getRadioProps","getGridRadioProps","getRateProps","getGridRateProps","getRawProps","getGridRawProps","getSliderProps","getGridSliderProps","getStepperProps","getGridStepperProps","getSwitchProps","getGridSwitchProps","getUploadProps","getGridUploadProps","getAutoCompleteProps","getGridAutoCompleteProps","getCodeProps","getGridCodeProps","getHtmlProps","getGridHtmlProps","getMarkDownProps","getGridMarkDownProps","getArrayProps","getGridArrayProps","getCascaderProps","getGridCascaderProps","getColorPickerProps","getGridColorPickerProps"],"mappings":"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","x_google_ignoreList":[91]}
1
+ {"version":3,"file":"index.system.min.js","sources":["../src/use/click-outside/click-outside.ts","../src/use/vue/vue.ts","../src/use/util/index.ts","../src/use/control/use-control-controller/use-control-controller.ts","../src/use/event/event.ts","../src/use/focus-blur/focus-blur.ts","../src/use/namespace/namespace.ts","../src/util/route/route.ts","../src/util/route/route-listener.ts","../src/util/install.ts","../src/util/control/prepare-control.ts","../src/util/render/render.ts","../src/util/overlay-container/overlay-container.ts","../src/util/overlay-popover-container/overlay-popover-container.ts","../src/util/overlay-view-util/overlay-view-util.ts","../src/util/router-callback/router-callback-item.ts","../src/util/router-callback/router-callback.ts","../src/util/store/async-action/async-action.ts","../src/util/store/app-store/app-store.ts","../src/util/store/ui-store/z-index.ts","../src/util/store/ui-store/ui-store.ts","../src/util/store/index.ts","../src/use/route/route.ts","../src/use/view/use-view-controller/use-view-controller.ts","../src/common/icon/icon.tsx","../src/common/router-view/router-view.tsx","../src/common/control-base/control-base.tsx","../src/common/control-shell/control-shell.tsx","../src/common/view-shell/view-shell.tsx","../src/common/code-list/code-list.tsx","../src/common/control-loading-placeholder/control-loading-placeholder.tsx","../src/panel-component/panel-container/panel-container.state.ts","../src/panel-component/panel-container/panel-container.controller.ts","../src/panel-component/panel-container/panel-container.tsx","../src/panel-component/panel-container/panel-container.provider.ts","../src/panel-component/panel-container/index.ts","../src/panel-component/panel-ctrl-pos/panel-ctrl-pos.tsx","../src/panel-component/panel-ctrl-pos/panel-ctrl-pos.controller.ts","../src/panel-component/panel-ctrl-pos/panel-ctrl-pos.provider.ts","../src/panel-component/panel-ctrl-pos/index.ts","../src/panel-component/scroll-container/scroll-container-item/scroll-container-item.controller.ts","../src/panel-component/scroll-container/scroll-container-item/scroll-container-item.tsx","../src/panel-component/scroll-container/scroll-container-item/scroll-container-item.provider.ts","../src/panel-component/scroll-container/scroll-container/scroll-container.controller.ts","../src/panel-component/scroll-container/scroll-container/scroll-container.tsx","../src/panel-component/scroll-container/scroll-container/scroll-container.provider.ts","../src/panel-component/scroll-container/index.ts","../src/panel-component/nav-pos/nav-pos.state.ts","../src/panel-component/nav-pos/nav-pos.controller.ts","../src/panel-component/nav-pos/nav-pos.tsx","../src/panel-component/nav-pos/nav-pos.provider.ts","../src/panel-component/nav-pos/index.ts","../src/panel-component/panel-field/panel-field.state.ts","../src/panel-component/panel-field/panel-field.controller.ts","../src/panel-component/panel-field/panel-field.tsx","../src/panel-component/panel-field/panel-field.provider.ts","../src/panel-component/panel-field/index.ts","../src/panel-component/panel-rawitem/panel-rawitem.controller.ts","../src/panel-component/panel-rawitem/panel-rawitem.tsx","../src/panel-component/panel-rawitem/panel-rawitem.provider.ts","../src/panel-component/panel-rawitem/index.ts","../src/panel-component/multi-data-container/multi-data-container-itm.state.ts","../src/panel-component/multi-data-container/multi-data-container-item.controller.ts","../src/panel-component/multi-data-container/multi-data-container.state.ts","../src/panel-component/multi-data-container/multi-data-container.controller.ts","../src/panel-component/multi-data-container/multi-data-container.tsx","../src/panel-component/multi-data-container/multi-data-container.provider.ts","../src/panel-component/multi-data-container/index.ts","../src/panel-component/single-data-container/single-data-container.state.ts","../src/panel-component/single-data-container/single-data-container.controller.ts","../src/panel-component/single-data-container/single-data-container.tsx","../src/panel-component/single-data-container/single-data-container.provider.ts","../src/panel-component/single-data-container/index.ts","../src/panel-component/grid-container/grid-container.state.ts","../src/panel-component/grid-container/grid-container.controller.ts","../src/panel-component/grid-container/grid-container.tsx","../src/panel-component/grid-container/grid-container.provider.ts","../src/panel-component/grid-container/index.ts","../src/panel-component/panel-container-image/panel-container-image.state.ts","../src/panel-component/panel-container-image/panel-container-image.controller.ts","../src/panel-component/panel-container-image/panel-container-image.tsx","../src/panel-component/panel-container-image/panel-container-image.provider.ts","../src/panel-component/panel-container-image/index.ts","../src/view/app-redirect-view/app-redirect-view.tsx","../src/view/common/view.provider.ts","../src/view/common/view.tsx","../src/view/common/index.ts","../src/view/todo-redirect/todo-redirect.tsx","../src/view/portal-view/portal-view.provider.ts","../src/view/portal-view/portal-view.tsx","../src/view/portal-view/index.ts","../src/control/panel/view-layout-panel/view-layout-panel.tsx","../src/control/panel/view-layout-panel/view-layout-panel.provider.ts","../src/control/panel/view-layout-panel/index.ts","../src/control/panel/panel/panel.tsx","../src/control/panel/panel/panel.provider.ts","../src/control/panel/panel/index.ts","../../../node_modules/.pnpm/path-browserify@1.0.1/node_modules/path-browserify/index.js","../src/plugin/plugin-factory/plugin-factory.ts","../src/props/common.ts","../src/props/editor/common.ts","../src/props/editor/text-box.ts","../src/props/editor/span.ts","../src/props/editor/dropdown-list.ts","../src/props/editor/check-box-list.ts","../src/props/editor/check-box.ts","../src/props/editor/data-picker.ts","../src/props/editor/date-picker.ts","../src/props/editor/date-range.ts","../src/props/editor/list-box.ts","../src/props/editor/number-range.ts","../src/props/editor/radio-button-list.ts","../src/props/editor/rate.ts","../src/props/editor/raw.ts","../src/props/editor/slider.ts","../src/props/editor/stepper.ts","../src/props/editor/switch.ts","../src/props/editor/upload.ts","../src/props/editor/autocomplete.ts","../src/props/editor/code.ts","../src/props/editor/html.ts","../src/props/editor/markdown.ts","../src/props/editor/array.ts","../src/props/editor/cascader.ts","../src/props/editor/color-picker.ts"],"sourcesContent":["import {\n NOOP,\n onClickOutside,\n OnClickOutsideHandler,\n OnClickOutsideOptions,\n OnClickOutsideResult,\n} from '@ibiz-template/core';\nimport { isNil } from 'ramda';\nimport { onBeforeUnmount, Ref, watch } from 'vue';\n\n/**\n * 使用点击组件外部监听事件\n *\n * @author lxm\n * @date 2022-10-31 14:10:12\n * @export\n * @param {Ref} elRef 组件的ref对象\n * @param {OnClickOutsideHandler} handler 处理回调\n * @param {OnClickOutsideOptions} [options={}] 额外配置参数\n * @returns {*} {OnClickOutsideResult}\n */\nexport function useClickOutside(\n elRef: Ref,\n handler: OnClickOutsideHandler,\n options: OnClickOutsideOptions = {},\n): OnClickOutsideResult {\n let stop = NOOP;\n let pause = NOOP;\n let proceed = NOOP;\n\n // 移除监听,清空方法\n const destroy = (): void => {\n stop();\n stop = NOOP;\n pause = NOOP;\n proceed = NOOP;\n };\n\n watch(\n elRef,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (isNil(newVal)) {\n destroy();\n } else {\n const result = onClickOutside(\n newVal?.$el || newVal,\n handler,\n options,\n );\n stop = result.stop;\n pause = result.pause;\n proceed = result.proceed;\n }\n }\n },\n { immediate: true },\n );\n\n // 组件销毁前销毁监听\n onBeforeUnmount(() => {\n if (stop !== NOOP) {\n destroy();\n }\n });\n\n return {\n stop: () => stop(),\n pause: () => pause(),\n proceed: () => proceed(),\n };\n}\n","import { isFunc } from 'qx-util';\nimport {\n ComponentPublicInstance,\n createCommentVNode,\n getCurrentInstance,\n isReactive,\n toRaw,\n VNode,\n watch,\n WatchOptions,\n} from 'vue';\n\n/**\n * 获取组件的props,只能在setup里使用\n *\n * @author chitanda\n * @date 2022-08-14 16:08:19\n * @export\n * @return {*}\n */\nexport function useProps(): IData {\n const vue = getCurrentInstance()!.proxy!;\n return vue.$props;\n}\n\n/**\n * 如果是reactive代理过的对象,返回原始对象\n *\n * @author lxm\n * @date 2023-02-15 10:56:00\n * @export\n * @param {*} val\n * @returns {*}\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getOrigin<T = any>(val: T): T {\n return isReactive(val) ? toRaw<T>(val) : val;\n}\n\n/**\n * 监听props的属性\n *\n * @author lxm\n * @date 2022-08-22 22:08:11\n * @export\n * @param {string} key props的属性名\n * @param {(newVal: T, oldVal: T) => void} callback 监听回调\n * @param {(WatchOptions | undefined)} [options] 监听参数\n */\nexport function usePropsWatch<T = unknown>(\n key: string,\n callback: (newVal?: T, oldVal?: T) => void,\n options?: WatchOptions | undefined,\n): void {\n const props = useProps();\n if (Object.prototype.hasOwnProperty.call(props, key)) {\n watch(\n () => props[key],\n (newVal, oldVal) => {\n callback(getOrigin(newVal), getOrigin(oldVal));\n },\n options,\n );\n // immediate无效,模拟第一次赋值\n callback(getOrigin(props[key]), undefined);\n }\n}\n\n/**\n * 获取force方法\n *\n * @author lxm\n * @date 2022-08-24 11:08:56\n * @export\n * @returns {*} {(callback?: () => void) => void} callback回调会在这次更新渲染完成之后执行\n */\nexport function useForce(): (callback?: () => void) => void {\n const vue = getCurrentInstance()!.proxy!;\n return (callback?: () => void) => {\n vue.$forceUpdate();\n if (callback && isFunc(callback)) {\n vue.$nextTick(() => {\n callback();\n });\n }\n };\n}\n\n/**\n * controller的force执行时,一起执行自己的force\n *\n * @author lxm\n * @date 2022-08-22 23:08:36\n * @export\n * @param {{\n * force: (callback?: () => void) => void;\n * }} controller\n */\nexport function useForceTogether(\n vue: ComponentPublicInstance,\n controller: {\n force: (callback?: () => void) => void;\n },\n): void {\n const orignForce = controller.force;\n const selfForce = useForce();\n controller.force = (callback?: () => void): void => {\n orignForce(callback);\n selfForce();\n };\n}\n\n/**\n * 控制器通用的vue实例能力绑定\n *\n * @author lxm\n * @date 2022-09-15 09:09:06\n * @export\n * @param {Vue} vue\n * @param {IData} controller\n */\nexport function useController(controller: IData): void {\n controller.force = useForce();\n}\n\n/** 全局唯一的空节点 */\nexport const EmptyVNode = createCommentVNode('EmptyVNode');\n\n/**\n * 配合EmptyVNode,判断是否是空节点\n * @author lxm\n * @date 2023-03-28 02:20:06\n * @export\n * @param {(VNode[] | VNode)} nodes\n * @return {*} {boolean}\n */\nexport function isEmptyVNode(nodes: VNode[] | VNode): boolean {\n if (!Array.isArray(nodes)) {\n return nodes === EmptyVNode;\n }\n return nodes.length === 1 && nodes[0] === EmptyVNode;\n}\n","import { CTX, IMobViewController } from '@ibiz-template/runtime';\nimport { inject } from 'vue';\n\n/**\n * 获取视图上下文环境对象\n *\n * @author chitanda\n * @date 2023-06-16 15:06:16\n * @export\n * @return {*} {CTX}\n */\nexport function useCtx(): CTX {\n return inject('ctx') as CTX;\n}\n\n/**\n * 获取移动端视图上下文环境对象\n *\n * @author chitanda\n * @date 2023-06-16 16:06:51\n * @export\n * @return {*} {CTX<IMobViewController>}\n */\nexport function useMobCtx(): CTX<IMobViewController> {\n return inject('ctx') as CTX;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ControlController,\n IControlController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { getCurrentInstance, onBeforeUnmount, reactive, watch } from 'vue';\nimport { useForce, useProps } from '../../vue/vue';\nimport { useCtx } from '../../util';\n\n/**\n * 监听并更新上下文和视图参数(引用不变)\n * @author lxm\n * @date 2023-05-25 01:48:14\n * @param {IData} props\n * @param {IViewController} view\n */\nfunction watchAndUpdateContextParams(\n props: IData,\n control: IControlController,\n): void {\n watch(\n () => ({ context: props.context, params: props.params }),\n newVal => {\n // 不改变引用的情况下,重置控制器里的上下文和视图参数。\n // 重新计算上下文和视图参数\n control.updateContextParams({ ...newVal });\n ibiz.log.debug(`${control.model.id}的上下文或视图参数变更:`, newVal);\n },\n );\n}\n\n/**\n * 监听部件的props并更新部件state状态\n * 排除部分keys,如context,params\n * @author lxm\n * @date 2023-10-27 01:46:23\n * @param {IData} props\n * @param {IControlController} control\n */\nfunction watchAndUpdateState(\n props: IData,\n control: IControlController,\n excludeFields: string[] = [],\n): void {\n const excludeKeys = ['context', 'params', 'modelData', ...excludeFields];\n watch(\n () => {\n const watchProps: IData = {};\n Object.keys(props).forEach(key => {\n if (!excludeKeys.includes(key)) {\n watchProps[key] = props[key];\n }\n });\n return watchProps;\n },\n (newVal, oldVal) => {\n const changeProps: IData = {};\n Object.keys(newVal).forEach(key => {\n if (newVal[key] !== (oldVal || {})[key]) {\n changeProps[key] = newVal[key];\n }\n });\n ibiz.log.debug(`部件 [${control.model.name}] state 变更`, changeProps);\n Object.keys(changeProps).forEach(key => {\n if (changeProps[key] !== undefined) {\n (control.state as any)[key] = changeProps[key];\n }\n });\n },\n { immediate: true },\n );\n}\n\nexport interface extraOptions {\n /**\n * 排除监听的props里的key\n * @author lxm\n * @date 2023-11-22 06:11:45\n * @type {string[]}\n */\n excludePropsKeys: string[];\n}\n\n/**\n * 初始化部件控制器\n *\n * @author chitanda\n * @date 2022-08-15 17:08:47\n * @export\n * @template T\n * @param {() => T} fn\n * @return {*} {T}\n */\nexport function useControlController<T extends IControlController>(\n fn: (...args: ConstructorParameters<typeof ControlController>) => T,\n opts?: Partial<extraOptions>,\n): T {\n // 获取上层组件的ctx\n const ctx = useCtx();\n // 获取 props\n const props = useProps();\n // 上下文里提前预告部件\n ctx.evt.emit('onForecast', props.modelData.name!);\n\n // 实例化部件控制器\n const provider = props.provider as IControlProvider | undefined;\n let c: T;\n if (provider?.createController) {\n // 如果适配器给了创建方法使用适配器的方法\n c = provider.createController(\n props.modelData,\n props.context,\n props.params,\n ctx,\n ) as T;\n } else {\n c = fn(props.modelData, props.context, props.params, ctx);\n }\n\n watchAndUpdateContextParams(props, c);\n watchAndUpdateState(props, c, opts?.excludePropsKeys);\n\n c.state = reactive(c.state);\n\n // 挂载强制更新方法\n c.force = useForce();\n\n const vue = getCurrentInstance()!.proxy!;\n c.evt.onAll((eventName: string, event: unknown) => {\n vue.$emit(eventName.slice(2), event);\n });\n\n // vue组件级事件最早的抛出controller\n vue.$emit('controllerAppear', c);\n\n c.created();\n\n // 卸载时销毁\n onBeforeUnmount(() => c.destroyed());\n return c;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { listenJSEvent, NOOP } from '@ibiz-template/core';\nimport { isNil } from 'ramda';\nimport { onBeforeUnmount, Ref, watch } from 'vue';\n\n/**\n * 监听JS原生事件,返回cleanup回调,调用后删除该监听\n *\n * @author lxm\n * @date 2022-10-28 18:10:36\n * @export\n * @param {Ref} elRef 监听组件的ref\n * @param {string} eventName 监听事件名称\n * @param {(..._args: any[]) => any} listener 监听回调\n * @param {AddEventListenerOptions} options 额外参数\n * @returns {*} {() => void}\n */\nexport function useEventListener(\n elRef: Ref,\n eventName: string,\n listener: (..._args: any[]) => any,\n options: AddEventListenerOptions = {},\n): () => void {\n let cleanup = NOOP;\n\n watch(\n elRef,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (isNil(newVal)) {\n cleanup();\n cleanup = NOOP;\n } else {\n cleanup = listenJSEvent(\n newVal?.$el || newVal,\n eventName,\n listener,\n options,\n );\n }\n }\n },\n { immediate: true },\n );\n\n // 组件销毁前销毁监听\n onBeforeUnmount(() => {\n if (cleanup !== NOOP) {\n cleanup();\n }\n });\n\n return () => {\n cleanup();\n };\n}\n","import { OnClickOutsideResult } from '@ibiz-template/core';\nimport { Ref, ref } from 'vue';\nimport { useClickOutside } from '../click-outside/click-outside';\nimport { useEventListener } from '../event/event';\n\n/**\n * 给指定元素添加聚焦和失焦事件\n * 点击指定元素时会触发聚焦事件\n * 已经聚焦之后,点击指定元素外部会触发失焦事件。\n * @author lxm\n * @date 2023-05-31 08:36:04\n * @export\n * @return {*}\n */\nexport function useFocusAndBlur(\n focus: () => void,\n blur: () => void,\n): {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n componentRef: Ref<any>;\n isFocus: Ref<boolean>;\n doBlur: () => void;\n pause: () => void;\n stop: () => void;\n} {\n /** 添加事件的元素ref */\n const componentRef = ref();\n const isFocus = ref(false);\n let outsideFuns: OnClickOutsideResult;\n /**\n * 手动触发失焦事件\n * @author lxm\n * @date 2023-05-31 08:43:54\n */\n const doBlur = (): void => {\n if (!isFocus.value) {\n ibiz.log.debug('没有聚焦,不触发失焦');\n }\n blur();\n outsideFuns.stop();\n isFocus.value = false;\n };\n\n /**\n * 暂停外部点击的监听\n * 用于某些组件操作过程中会触发外部点击的场景\n * @author lxm\n * @date 2023-05-31 08:47:53\n */\n const pause = (): void => {\n if (outsideFuns) {\n outsideFuns.pause();\n }\n };\n\n /**\n * 暂停外部点击的监听\n * 用于某些组件操作过程中会触发外部点击的场景\n * @author lxm\n * @date 2023-05-31 08:47:53\n */\n const stop = (): void => {\n if (outsideFuns) {\n outsideFuns.stop();\n }\n };\n\n useEventListener(\n componentRef,\n 'click',\n _evt => {\n if (!isFocus.value) {\n outsideFuns = useClickOutside(componentRef, () => {\n doBlur();\n });\n isFocus.value = true;\n focus();\n }\n },\n { capture: true }, // 捕获防止内部ui拦截点击事件\n );\n return { componentRef, isFocus, doBlur, pause, stop };\n}\n","import { Namespace } from '@ibiz-template/core';\n\n/**\n * css 命名空间\n *\n * @author chitanda\n * @date 2022-09-06 15:09:04\n * @export\n * @param {string} block\n * @return {*} {Namespace}\n */\nexport function useNamespace(block: string): Namespace {\n return new Namespace(block, ibiz.env.namespace);\n}\n","import { notNilEmpty } from 'qx-util';\nimport { RuntimeError } from '@ibiz-template/core';\nimport qs from 'qs';\nimport { RouteLocationNormalizedLoaded as Route, useRoute } from 'vue-router';\nimport { watch } from 'vue';\nimport {\n calcDeCodeNameById,\n getMatchResPath,\n IViewConfig,\n ViewType,\n} from '@ibiz-template/runtime';\nimport { IRoutePath, IRoutePathNode, IRouteViewData } from '../../interface';\n\n/**\n * 路径字符串转换成路由路径对象\n *\n * @author lxm\n * @date 2022-08-18 11:08:08\n * @export\n * @param {string} pathStr 以/开头的路径,即router的path\n * @returns {*} {IRoutePath}\n */\nexport function route2routePath(route: Route): IRoutePath {\n // 一共匹配了几级路由\n const depth = route.matched.length;\n\n // 解析路径节点\n const pathNodes: IRoutePathNode[] = [];\n for (let index = 1; index <= depth; index++) {\n const viewName = route.path.split('/')[index * 2];\n const paramsStr = route.params[`params${index}`] as string;\n\n /** 路由参数,默认是视图参数 */\n let params: IParams | undefined;\n\n /** 上下文参数 */\n let context: IParams | undefined;\n let srfnav: string | undefined;\n // params为占位符时置空\n if (!paramsStr || paramsStr === ibiz.env.routePlaceholder) {\n params = undefined;\n } else {\n // 首页上下文要解析\n params = qs.parse(paramsStr, {\n strictNullHandling: true,\n delimiter: ';',\n });\n }\n\n // 路由参数存在的时候,解析里面的上下文。\n if (params) {\n if (index === 1) {\n // 首页的时候,路由上的参数是资源路径,属于上下文\n context = params;\n params = undefined;\n } else {\n if (params.srfnavctx) {\n // 解析额外上下文\n context = JSON.parse(decodeURIComponent(params.srfnavctx));\n delete params.srfnavctx;\n }\n if (params.srfnav) {\n // 解析额外自身视图导航参数\n srfnav = params.srfnav;\n delete params.srfnav;\n }\n }\n }\n\n pathNodes.push({ viewName, context, params, srfnav });\n }\n\n // 解析应用上下文\n let appContext;\n if (\n route.params.appContext &&\n route.params.appContext !== ibiz.env.routePlaceholder\n ) {\n appContext = qs.parse(route.params.appContext as string, {\n strictNullHandling: true,\n delimiter: ';',\n });\n }\n\n return { appContext, pathNodes };\n}\n\n/**\n * 路由路径对象转路径字符串\n *\n * @author lxm\n * @date 2022-08-18 13:08:57\n * @export\n * @param {IRoutePath} routePath 路由路径对象\n * @returns {*} {string}\n */\nexport function routePath2string(routePath: IRoutePath): string {\n let pathStr = '';\n // 应用上下文\n if (routePath.appContext) {\n pathStr += `/${qs.stringify(routePath.appContext, {\n delimiter: ';',\n strictNullHandling: true,\n })}`;\n } else {\n pathStr += `/${ibiz.env.routePlaceholder}`;\n }\n\n // 每一层级的视图路由的拼装\n routePath.pathNodes.forEach((pathNode: IRoutePathNode, index: number) => {\n pathStr += `/${pathNode.viewName}/`;\n let routeParams: IParams = {};\n // 首页路由\n if (index === 0) {\n if (notNilEmpty(pathNode.context)) {\n // 对象转成a=11;b=222的格式,字符串直接附加在后面\n routeParams = pathNode.context!;\n }\n } else {\n // 非首页路由,视图参数直接放到路由参数上,上下文转换后放到路由参数的srfnavctx上\n routeParams = notNilEmpty(pathNode.params) ? pathNode.params! : {};\n\n // 合并视图上下文\n if (notNilEmpty(pathNode.context)) {\n const objStr = JSON.stringify(pathNode.context);\n // undefined 的vlaue会被JSON.stringify删除,可能会转成{}\n if (objStr !== '{}') {\n routeParams!.srfnavctx = encodeURIComponent(objStr);\n }\n }\n\n // 合并视图导航参数\n if (pathNode.srfnav) {\n routeParams.srfnav = pathNode.srfnav;\n }\n }\n\n const paramsStr = qs.stringify(routeParams, {\n delimiter: ';',\n strictNullHandling: true,\n skipNulls: true,\n });\n // 把路由参数转换到路由路径上去\n if (notNilEmpty(paramsStr)) {\n pathStr += paramsStr;\n } else {\n pathStr += ibiz.env.routePlaceholder;\n }\n });\n\n return pathStr;\n}\n\n/**\n * 获取自身的路由上下文,排除了部分不需要路由携带的参数\n *\n * @author lxm\n * @date 2023-03-14 02:07:41\n * @export\n * @param {IContext} context\n * @returns {*} {IParams}\n */\nexport function getOwnRouteContext(context: IContext): IParams {\n const ownContext = context.getOwnContext();\n const excludeKeys = ['srfsessionid', 'srfappid'];\n Object.keys(ownContext).forEach(key => {\n if (excludeKeys.includes(key)) {\n delete ownContext[key];\n }\n });\n return ownContext;\n}\n\n/**\n * 计算资源上下文时,需要排除自身实体codeName的视图(导航类视图和多数据视图)\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-02-20 15:45:46\n */\nexport const excludeViewTypes: string[] = [\n ViewType.DE_GRID_VIEW,\n ViewType.DE_GRID_EXP_VIEW,\n ViewType.DE_LIST_VIEW,\n ViewType.DE_LIST_EXP_VIEW,\n ViewType.DE_DATA_VIEW,\n ViewType.DE_DATAVIEW_EXP_VIEW,\n ViewType.DE_CALENDAR_VIEW,\n ViewType.DE_CALENDAR_EXP_VIEW,\n ViewType.DE_CHART_VIEW,\n ViewType.DE_CHART_EXP_VIEW,\n ViewType.DE_KANBAN_VIEW,\n];\n\n/**\n * 计算资源路径,把首页后面的资源路径上下文算出来,并把第二层中对应的上下文删掉。\n * @author lxm\n * @date 2023-07-13 06:37:10\n * @export\n * @param {IRoutePath} routePath\n * @param {IContext} context\n * @param {string} appDataEntityId\n * @return {*} {Promise<void>}\n */\nexport async function calcResRoutePath(\n routePath: IRoutePath,\n context: IContext,\n appDataEntityId?: string,\n): Promise<void> {\n if (!appDataEntityId) {\n // 无实体的视图清空资源上下文\n routePath.pathNodes[0].context = undefined;\n } else {\n const entity = await ibiz.hub.getAppDataEntity(appDataEntityId);\n let match = getMatchResPath(context, entity);\n // 有实体有没有匹配到的,补一个包含自身实体主键的match\n if (!match) {\n match = { path: '', keys: [entity.codeName!.toLowerCase()] };\n }\n if (match) {\n const currentContext = routePath.pathNodes[1].context;\n const resContext: IParams = {};\n // 资源路径不为空,二级视图的上下文删掉多余的资源上下文\n match.keys.forEach(key => {\n if (context && Object.prototype.hasOwnProperty.call(context, key)) {\n resContext[key] = context[key];\n if (currentContext) {\n delete currentContext[key];\n }\n }\n });\n // 把资源路径填充到一级路由上\n routePath.pathNodes[0].context = resContext;\n }\n }\n}\n\n/**\n * 生成route路径\n *\n * @author lxm\n * @date 2022-08-17 21:08:00\n * @export\n * @param {IAppView} appView 视图模型\n * @param {Route} route 路由对象\n * @param {(IContext | undefined)} [context] 上下文对象\n * @param {(IParams | undefined)} [_params] 视图参数\n * @returns {*} {string}\n */\nexport async function generateRoutePath(\n appView: IViewConfig,\n route: Route,\n context: IContext,\n params?: IParams | undefined,\n): Promise<{ path: string }> {\n const routePath = route2routePath(route);\n // 如果上下文存在toRouteDepth时,使用上下文的层级,否则使用默认层级\n let depth = 2; // 默认都是从二级开始计算\n if (context.toRouteDepth) {\n depth = context.toRouteDepth;\n // 使用完后删除,避免添加到上下文里\n delete context.toRouteDepth;\n } else if (ibiz.env.isMob) {\n // 移动端默认补充home层级\n routePath.pathNodes[0] = {\n viewName: 'home',\n };\n }\n\n // 删除目标层级和之后的路由,保留之前层级的路由\n routePath.pathNodes.splice(depth - 1, routePath.pathNodes.length - depth + 1);\n\n // 导航视图的导航参数,加在目标层级之前的一个层级的视图参数里\n if (context.currentSrfNav) {\n const currentNode = routePath.pathNodes[routePath.pathNodes.length - 1];\n currentNode.params = currentNode.params || {};\n currentNode.srfnav = context.currentSrfNav;\n // 使用完后删除,避免添加到上下文里\n delete context.currentSrfNav;\n }\n\n // 重定向视图跳转的一级首页路由\n if (route.fullPath.startsWith('/appredirectview')) {\n if (params?.srfindexname) {\n routePath.pathNodes[0].viewName = params.srfindexname;\n delete params.srfindexname;\n } else {\n routePath.pathNodes[0].viewName = 'index';\n }\n }\n\n // 计算目标视图path路径\n routePath.pathNodes.push({\n viewName: appView.codeName!.toLowerCase(),\n context: getOwnRouteContext(context),\n params,\n });\n\n // 计算二级视图的资源路径加到index后面\n if (depth === 2) {\n await calcResRoutePath(routePath, context, appView.appDataEntityId);\n\n // 多数据和导航视图,删除自身的主键上下文\n if (excludeViewTypes.includes(appView.viewType)) {\n const deName = calcDeCodeNameById(appView.appDataEntityId!);\n delete routePath.pathNodes[0].context![deName];\n }\n }\n\n return { path: routePath2string(routePath) };\n}\n\n/**\n * 解析路由获取对应视图数据\n *\n * @author lxm\n * @date 2022-08-17 22:08:51\n * @export\n * @param {IApplication} appModel 视图模型\n * @param {Route} route 路由对象\n * @param {number} depth 层级\n * @returns {*} {IRouteViewData}\n */\nexport async function parseRouteViewData(\n route: Route,\n depth: number,\n): Promise<IRouteViewData> {\n // 解析路由的视图参数\n const routePath = route2routePath(route);\n\n // 获取对应层级的视图名称参数\n let viewCodeName = routePath.pathNodes[depth - 1].viewName;\n if (!viewCodeName) {\n throw new RuntimeError(`第${depth}级路由不存在视图标识`);\n }\n if (viewCodeName === 'index') {\n viewCodeName = ibiz.hub.defaultAppIndexViewName;\n }\n\n // 根据路由视图名称参数查询视图模型\n const viewModel = await ibiz.hub.getAppView(viewCodeName);\n\n // 找不到视图模型的返回空对象\n if (!viewModel) {\n throw new RuntimeError(`找不到视图${viewCodeName}`);\n }\n\n // !解析上下文参数,整合当前层级之前所有的上下文参数\n const context: IParams = {};\n // 合并appData里的应用上下文\n if (ibiz.appData?.context) {\n Object.assign(context, ibiz.appData.context);\n }\n\n // 合并路由上下文\n // 合并路由应用上下文\n if (routePath.appContext) {\n Object.assign(context, routePath.appContext);\n }\n\n // 逐层合并视图上下文,第一层首页不合,它的上下文是资源路径属于子视图。\n if (depth !== 1) {\n for (let index = 0; index < depth; index++) {\n const pathNode = routePath.pathNodes[index];\n if (notNilEmpty(pathNode.context)) {\n Object.assign(context, pathNode.context);\n }\n }\n }\n\n // 最后一级路由对应的视图才会解析视图参数\n const { params, srfnav } = routePath.pathNodes[depth - 1];\n\n return {\n viewModel,\n context,\n params,\n srfnav,\n };\n}\n\n/**\n * 获取指定层级的路由路径\n * @author lxm\n * @date 2023-06-21 06:08:32\n * @export\n * @param {Route} route\n * @param {number} depth\n * @return {*} {string}\n */\nexport function getNestedRoutePath(\n route: Route,\n depth: number,\n noSrfNav: boolean = true,\n): string {\n // 当前路由层级低于指定层级的返回空\n if (route.matched.length < depth) {\n return '';\n }\n\n // 只有当前层级的路由的代名称的路由如login,404等直接返回path\n if (route.matched.length === depth && route.name) {\n return route.path;\n }\n const routePath = route2routePath(route);\n if (routePath.pathNodes.length < depth) {\n // 当前路由层级比指定层级少时,直接返回空字符串\n return route.path;\n }\n if (routePath.pathNodes.length > depth) {\n // 删除depth后面的节点\n routePath.pathNodes = routePath.pathNodes.slice(0, depth);\n }\n if (noSrfNav) {\n // 删除至nav\n delete routePath.pathNodes[depth - 1].srfnav;\n }\n return routePath2string(routePath);\n}\n\n/**\n * 监听路由的变更,每次变更后都会触发回调\n * 回调函数提供根据视图层级计算好的唯一标识currentKey,只有变了视图才需要刷新\n * @author lxm\n * @date 2023-05-09 12:52:36\n * @param {(args: { currentKey: string; fullPath: string }) => void} callback\n * @param {number} depth\n */\nexport function onRouteChange(\n callback: (args: { currentKey: string; fullPath: string }) => void,\n depth: number,\n): void {\n const route = useRoute();\n if (!route) {\n throw new RuntimeError('无法正确获取route,可能是依赖问题');\n }\n watch(\n () => route?.path,\n () => {\n const currentKey = getNestedRoutePath(route, depth);\n callback({ currentKey, fullPath: route.fullPath });\n },\n { immediate: true },\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { watch } from 'vue';\nimport { RouteLocationNormalizedLoaded } from 'vue-router';\n\ntype ChangeCallback = () => void;\n/**\n * 监听路由变更,提供下一次变更执行的一次性回调。\n *\n * @export\n * @class RouteListener\n */\nexport class RouteListener {\n /**\n * 回调集合\n *\n * @memberof RouteListener\n */\n private callbacks: Array<ChangeCallback> = [];\n\n /**\n * 计时器集合\n *\n * @private\n * @type {any[]}\n * @memberof RouteListener\n */\n private timers: any[] = [];\n\n /**\n * 等待路由响应时间\n *\n * @private\n * @type {number}\n * @memberof RouteListener\n */\n private wait: number = 500;\n\n constructor(route: RouteLocationNormalizedLoaded, wait?: number) {\n if (wait) {\n this.wait = wait;\n }\n watch(\n () => route.path,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n // 执行所有回调\n if (this.callbacks.length) {\n for (let index = 0; index < this.callbacks.length; index++) {\n const fn = this.callbacks[index];\n fn();\n }\n }\n // 清空所有回调\n this.callbacks = [];\n\n // 清空所有计时器\n if (this.timers.length) {\n for (let index = 0; index < this.timers.length; index++) {\n const timer = this.timers[index];\n clearTimeout(timer);\n }\n }\n\n this.timers = [];\n }\n },\n );\n }\n\n /**\n * 下一次路由变更后执行回调,只执行一次\n *\n * @param {ChangeCallback} callback\n * @memberof RouteListener\n */\n nextChange(callback: ChangeCallback): void {\n if (callback) {\n // 设定计时器,经过一段时间等不到时,执行回调,并删除回调集合里的回调\n this.timers.push(\n setTimeout(() => {\n callback();\n const index = this.callbacks.findIndex(item => item === callback);\n this.callbacks.splice(index, 1);\n }, this.wait),\n );\n\n // 存入回调集合等待被调用\n this.callbacks.push(callback);\n }\n }\n}\n","/* eslint-disable no-param-reassign */\nimport type { App, Plugin } from 'vue';\n\nexport type TypeWithInstall<T> = T & Plugin;\n\nexport const withInstall = <T>(\n main: T,\n install: (_v: App) => void,\n): TypeWithInstall<T> => {\n (main as TypeWithInstall<T>).install = (app): void => {\n install(app);\n };\n return main as TypeWithInstall<T>;\n};\n","import { Namespace } from '@ibiz-template/core';\nimport { IControlController } from '@ibiz-template/runtime';\nimport { useNamespace } from '../../use';\n\n/**\n * 部件UI组件准备参数\n * @author lxm\n * @date 2023-06-15 09:51:23\n * @export\n * @param {IControlController} c\n * @return {*}\n */\nexport function prepareControl(c: IControlController): {\n controlClass: string[];\n ns: Namespace;\n} {\n const commonNs = useNamespace('control');\n const { controlType, sysCss, codeName } = c.model;\n const typeClass = controlType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const ns = useNamespace(`control-${typeClass}`);\n\n const controlClass = [\n commonNs.b(),\n commonNs.b(typeClass),\n commonNs.m(codeName),\n ];\n if (sysCssName) {\n controlClass.push(sysCssName);\n }\n\n return { controlClass, ns };\n}\n","import { isNil } from 'ramda';\n\n/**\n * 把未知格式的值绘制成字符串\n * - 空值输出空字符串\n * - 对象,数组输出成JSON字符串\n * - 其他类型转成字符串输出\n * @author lxm\n * @date 2023-10-09 02:29:13\n * @export\n * @param {unknown} value\n * @return {*} {string}\n */\nexport function renderString(value: unknown): string {\n if (isNil(value)) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n try {\n const str = (value as IData).toString();\n return str;\n } catch (error) {\n ibiz.log.error(value, '转换成字符串失败', error);\n }\n return '';\n}\n","/* eslint-disable no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { QXEvent } from 'qx-util';\nimport { IOverlayContainer } from '@ibiz-template/runtime';\nimport { App, Component, h, VNode } from 'vue';\nimport { RuntimeError } from '@ibiz-template/core';\n\n/**\n * 全局弹出承载组件\n *\n * @author chitanda\n * @date 2022-11-09 12:11:09\n * @export\n * @class OverlayContainer\n */\nexport class OverlayContainer<O> implements IOverlayContainer {\n protected vm?: App;\n\n /**\n * 具体模态组件\n *\n * @author chitanda\n * @date 2022-11-09 12:11:34\n * @protected\n * @type {*}\n */\n protected modal: any;\n\n /**\n * 外面调用dismiss时传的result结果\n *\n * @author lxm\n * @date 2022-11-09 20:11:06\n * @protected\n * @type {unknown}\n */\n protected result?: unknown;\n\n /**\n * 内部事件\n *\n * @author chitanda\n * @date 2022-11-09 12:11:42\n * @protected\n */\n protected evt: QXEvent<{ dismiss: (data?: unknown) => void }> = new QXEvent();\n\n /**\n * 创建全局呈现\n *\n * @author chitanda\n * @date 2022-11-09 14:11:52\n * @param {unknown} component\n * @param {(h: CreateElement) => VNode} render\n * @param {IPopoverOptions} [opts]\n */\n constructor(\n protected component: unknown,\n protected render: (...args: any[]) => VNode,\n protected opts?: O,\n ) {\n this.init();\n }\n\n static createVueApp(\n _rootComponent: Component,\n _rootProps?: IData,\n ): App<Element> {\n throw new RuntimeError('没有注入createVueApp方法');\n }\n\n /**\n * 初始化飘窗\n *\n * @author chitanda\n * @date 2022-11-09 12:11:55\n * @protected\n * @return {*} {void}\n */\n protected init(): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const { render, opts } = this;\n const container = document.createElement('div');\n document.body.appendChild(container);\n const vm = OverlayContainer.createVueApp({\n mounted() {\n self.modal = this.$refs.root;\n },\n unmounted() {\n document.body.removeChild(container);\n self.evt.emit('dismiss', self.result);\n },\n render() {\n return h(\n self.component as string,\n {\n ref: 'root',\n opts,\n onDismiss(data: IData) {\n self.result = data;\n vm.unmount();\n },\n },\n { default: render },\n );\n },\n });\n ibiz.plugin.register(vm);\n vm.mount(container);\n this.vm = vm;\n }\n\n /**\n * 打开飘窗\n *\n * @author chitanda\n * @date 2022-11-09 12:11:52\n * @param {HTMLElement} target\n * @return {*} {Promise<void>}\n */\n async present(): Promise<void> {\n return this.modal.present();\n }\n\n /**\n * 手动调用关闭飘窗\n *\n * @author chitanda\n * @date 2022-11-09 12:11:39\n * @param {unknown} [data]\n * @return {*} {Promise<void>}\n */\n async dismiss(data?: unknown): Promise<void> {\n this.modal.dismiss(data);\n }\n\n /**\n * 订阅窗口关闭\n *\n * @author chitanda\n * @date 2022-11-09 12:11:20\n * @template T\n * @return {*} {Promise<T>}\n */\n async onWillDismiss<T = unknown>(): Promise<T> {\n return new Promise<T>(resolve => {\n const callback = (data: unknown) => {\n resolve(data as T);\n this.evt.off('dismiss', callback);\n };\n this.evt.on('dismiss', callback);\n });\n }\n}\n","/* eslint-disable no-unused-vars */\n/* eslint-disable no-dupe-class-members */\nimport {\n IPopoverOptions,\n IOverlayPopoverContainer,\n} from '@ibiz-template/runtime';\nimport { OverlayContainer } from '../overlay-container/overlay-container';\n\n/**\n * 飘窗组件呈现容器\n *\n * @author chitanda\n * @date 2022-11-09 14:11:46\n * @export\n * @class OverlayPopoverContainer\n * @extends {OverlayContainer<IPopoverOptions>}\n * @implements {IOverlayPopoverContainer}\n */\nexport class OverlayPopoverContainer\n extends OverlayContainer<IPopoverOptions>\n implements IOverlayPopoverContainer\n{\n present(): Promise<void>;\n\n present(target: HTMLElement): Promise<void>;\n\n present(target?: HTMLElement): Promise<void> {\n return this.modal.present(target);\n }\n}\n","import {\n IDrawerOptions,\n IFloatWindowOptions,\n IModal,\n IModalData,\n IModalOptions,\n IPopoverOptions,\n} from '@ibiz-template/runtime';\nimport { h, resolveComponent, VNode } from 'vue';\n\nexport function createOverlayView(props?: IParams): (modal: IModal) => VNode {\n return (modal: IModal) => {\n const viewShell = resolveComponent('IBizViewShell');\n return h(viewShell, {\n ...props,\n modal,\n });\n };\n}\n\nexport async function openViewModal(\n props?: IParams,\n opts?: IModalOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createModal(\n createOverlayView(props),\n undefined,\n opts,\n );\n overlay.present();\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nexport async function openViewFloatWindow(\n props?: IParams,\n opts?: IFloatWindowOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createFloatWindow(\n createOverlayView(props),\n undefined,\n opts,\n );\n overlay.present();\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nexport async function openViewDrawer(\n props?: IParams,\n opts?: IDrawerOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createDrawer(\n createOverlayView(props),\n undefined,\n opts,\n );\n await overlay.present();\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nexport async function openViewPopover(\n event: MouseEvent,\n props?: IParams,\n opts?: IPopoverOptions,\n): Promise<IModalData> {\n const overlay = ibiz.overlay.createPopover(\n createOverlayView(props),\n undefined,\n opts,\n );\n overlay.present(event.target as HTMLElement);\n const result: IModalData = await overlay.onWillDismiss();\n return result || { ok: false };\n}\n\nconst PlacementMap: IData = {\n DRAWER_LEFT: 'left',\n DRAWER_RIGHT: 'right',\n DRAWER_TOP: 'top',\n DRAWER_BOTTOM: 'bottom',\n};\n\nexport function getDrawerPlacement(\n openMode: string,\n): IDrawerOptions['placement'] {\n return PlacementMap[openMode] || 'right';\n}\n","import { IModalData } from '@ibiz-template/runtime';\n\n/**\n * 路由视图关闭回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:51\n * @export\n * @class RouterCallbackItem\n */\nexport class RouterCallbackItem {\n protected resolve?: (modal: IModalData) => void;\n\n protected promise?: Promise<IModalData>;\n\n /**\n * 销毁定时器\n *\n * @author chitanda\n * @date 2023-07-13 21:07:51\n * @type {number}\n */\n timeout?: number;\n\n /**\n * 是否已经有打开的视图认领此回调,如果在一定时间内没有被认领,则会被清除\n *\n * @author chitanda\n * @date 2023-07-13 21:07:35\n */\n isActivated = false;\n\n constructor(\n public from: string,\n public to: string,\n ) {\n ibiz.log.debug('openRouter: ', from, to);\n }\n\n /**\n * 等待视图关闭\n *\n * @author chitanda\n * @date 2023-07-13 21:07:34\n * @return {*} {Promise<IModalData>}\n */\n onWillDismiss(): Promise<IModalData> {\n if (!this.promise) {\n this.promise = new Promise(resolve => {\n this.resolve = resolve;\n });\n }\n return this.promise.then(modal => {\n ibiz.log.debug('onWillDismiss: ', this.from, this.to, modal);\n return modal;\n });\n }\n\n /**\n * 关闭视图\n *\n * @author chitanda\n * @date 2023-07-13 21:07:06\n * @param {IModalData} modal\n */\n close(modal: IModalData): void {\n ibiz.log.debug('closeRouter: ', this.from, this.to, modal);\n if (this.resolve) {\n this.resolve(modal);\n this.resolve = undefined;\n }\n }\n\n /**\n * 激活回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:29\n */\n active(): void {\n ibiz.log.debug('activeRouter: ', this.from, this.to);\n this.isActivated = true;\n }\n\n /**\n * 销毁回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:21\n */\n destroy(): void {\n ibiz.log.debug('destroyRouter: ', this.from, this.to);\n if (this.resolve) {\n this.resolve({ ok: false });\n this.resolve = undefined;\n }\n }\n}\n","import { IModalData } from '@ibiz-template/runtime';\nimport { Router } from 'vue-router';\nimport { RouterCallbackItem } from './router-callback-item';\n\n/**\n * 路由打开视图回调,连通上级视图的关闭\n *\n * @author chitanda\n * @date 2023-07-13 20:07:20\n * @export\n * @class RouterCallback\n */\nexport class RouterCallback {\n /**\n * 回调实例\n *\n * @author chitanda\n * @date 2023-07-13 20:07:12\n * @protected\n * @type {Map<string, RouterCallbackItem>}\n */\n protected map: Map<string, RouterCallbackItem> = new Map();\n\n /**\n * 打开视图\n *\n * @author chitanda\n * @date 2023-07-13 20:07:13\n * @param {Router} router\n * @param {string} path\n * @return {*} {Promise<IModalData>}\n */\n async open(router: Router, path: string): Promise<IModalData> {\n const from = router.currentRoute.value.fullPath;\n router.push({ path });\n const to = path;\n if (this.map.has(to)) {\n const item = this.map.get(to)!;\n return item.onWillDismiss();\n }\n const item = new RouterCallbackItem(from, to);\n this.map.set(to, item);\n this.scheduledDestruction(item);\n return item.onWillDismiss();\n }\n\n /**\n * 关闭视图回调\n *\n * @author chitanda\n * @date 2023-07-13 20:07:38\n * @param {string} toFullPath\n * @param {IModalData} modal\n */\n close(toFullPath: string, modal: IModalData): void {\n const item = this.map.get(toFullPath);\n if (item) {\n item.close(modal);\n this.map.delete(toFullPath);\n }\n }\n\n /**\n * 激活回调\n *\n * @author chitanda\n * @date 2023-07-13 21:07:03\n * @param {string} toFullPath\n */\n active(toFullPath: string): void {\n const item = this.map.get(toFullPath);\n if (item) {\n window.clearTimeout(item.timeout);\n item.timeout = undefined;\n item.active();\n }\n }\n\n /**\n * 一分钟内未激活的视图回调会被清除\n *\n * @author chitanda\n * @date 2023-07-13 21:07:57\n * @protected\n * @param {RouterCallbackItem} item\n */\n protected scheduledDestruction(item: RouterCallbackItem): void {\n item.timeout = window.setTimeout(() => {\n item.timeout = undefined;\n item.destroy();\n this.map.delete(item.to);\n }, 10 * 1000);\n }\n}\n\n// 路由打开视图回调,连通上级视图的关闭工具类\nexport const routerCallback = new RouterCallback();\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport { IPortalAsyncAction, IPortalMessage } from '@ibiz-template/core';\nimport dayjs from 'dayjs';\nimport { isNumber } from 'lodash-es';\nimport { computed, onUnmounted, ref } from 'vue';\n\n/**\n * 格式化数据\n * @author lxm\n * @date 2023-11-14 09:02:49\n * @param {IPortalAsyncAction} data\n * @return {*} {IPortalAsyncAction}\n */\nfunction formatAsyncAction(data: IPortalAsyncAction): IPortalAsyncAction {\n // 处理时间日期为毫秒值时,转换成字符串。\n const dateFields = [\n 'begintime',\n 'endtime',\n 'createdate',\n 'updatedate',\n ] as const;\n dateFields.forEach(key => {\n if (isNumber(data[key])) {\n data[key] = dayjs(data[key]).format('YYYY-MM-DD HH:mm:ss');\n }\n });\n return data;\n}\n\n/**\n * 使用异步操作消息\n * @author lxm\n * @date 2023-11-14 03:17:28\n * @export\n * @return {*}\n */\nexport function useAsyncAction() {\n /** 所有消息数据 */\n const allAsyncActions = ref<IPortalAsyncAction[]>([]);\n /** 显示的长度 */\n const showLength = ref(0);\n\n /** 显示的消息数据 */\n const recentAsyncActions = computed(() => {\n return allAsyncActions.value.filter(\n (_item, index) => index < showLength.value,\n );\n });\n\n const load = async () => {\n const res = await ibiz.asyncAction.fetch();\n allAsyncActions.value = res.data;\n };\n\n /**\n * 异步消息变更回调处理\n * @author lxm\n * @date 2023-11-14 03:53:08\n */\n const asyncActionCallBack = (msg: IPortalMessage) => {\n if (!msg.data || msg.subtype !== 'ASYNCACTION') {\n return;\n }\n const asyncAction = formatAsyncAction(msg.data as IPortalAsyncAction);\n const findIndex = allAsyncActions.value.findIndex(\n item => item.asyncacitonid === asyncAction.asyncacitonid,\n );\n if (findIndex !== -1) {\n // 不存在的数据补充到最开始,并显示长度加一\n allAsyncActions.value.unshift(asyncAction);\n showLength.value += 1;\n } else {\n const isShow = findIndex >= showLength.value;\n // 找的到但是不在显示列表里,移到开头,并增加长度\n if (isShow) {\n allAsyncActions.value.splice(findIndex, 1);\n allAsyncActions.value.unshift(asyncAction);\n showLength.value += 1;\n } else {\n allAsyncActions.value.splice(findIndex, 1, asyncAction);\n }\n }\n };\n\n // *初始化操作\n load();\n\n // 监听异步操作消息变更\n ibiz.mc.command.asyncAction.on(asyncActionCallBack);\n // 销毁时删除监听\n onUnmounted(() => {\n ibiz.mc.command.asyncAction.off(asyncActionCallBack);\n });\n\n return { allAsyncActions, recentAsyncActions };\n}\n","import { IPortalAsyncAction } from '@ibiz-template/core';\nimport { defineStore } from 'pinia';\nimport { reactive, Ref } from 'vue';\nimport { useAsyncAction } from '../async-action/async-action';\n\nexport interface IAppStore {\n allAsyncActions: Ref<IPortalAsyncAction[]>;\n recentAsyncActions: IPortalAsyncAction[];\n}\n\nexport const useAppStore = defineStore('appStore', () => {\n const { allAsyncActions, recentAsyncActions } = useAsyncAction();\n const appStore = reactive<IAppStore>({\n allAsyncActions,\n get recentAsyncActions() {\n return recentAsyncActions.value;\n },\n });\n\n return { appStore };\n});\n","import { Ref, ref } from 'vue';\n\nexport interface IzIndexStore {\n /**\n * 当前最高的ui层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:48\n * @type {number}\n */\n zIndex: Ref<number>;\n\n /**\n * 增加Ui层级,返回增加后的层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:22\n */\n increment(): number;\n\n /**\n * 减少Ui层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:22\n */\n decrement(): void;\n}\n\n/**\n * 定义zIndex的全局状态变量\n *\n * @author lxm\n * @date 2022-08-18 21:08:26\n * @export\n * @returns {*}\n */\nexport function useZIndexStore(): IzIndexStore {\n const DEFAULT_INDEX = 500;\n const INCREMENT_VALUE = 1;\n const zIndex = ref(DEFAULT_INDEX);\n\n function increment(): number {\n zIndex.value += INCREMENT_VALUE;\n return zIndex.value;\n }\n\n function decrement() {\n zIndex.value -= INCREMENT_VALUE;\n }\n\n return { zIndex, increment, decrement };\n}\n","import { defineStore } from 'pinia';\nimport { reactive, Ref } from 'vue';\nimport { useZIndexStore } from './z-index';\n\nexport interface IUIState {\n /**\n * ui层级\n *\n * @author lxm\n * @date 2022-08-18 21:08:48\n * @type {number}\n */\n zIndex: Ref<number>;\n\n theme: string;\n}\n\nexport const useUIStore = defineStore('uiStore', () => {\n const zIndex = useZIndexStore();\n\n const UIStore = reactive<IUIState>({\n zIndex: zIndex.zIndex,\n theme: 'light',\n });\n\n return { UIStore, zIndex };\n});\n","import { createPinia } from 'pinia';\n\nexport * from './app-store/app-store';\nexport * from './ui-store/ui-store';\n\nexport const piniaInstance = createPinia();\n","import { RouteLocationNormalizedLoaded, useRoute } from 'vue-router';\nimport { ref, Ref, watch } from 'vue';\nimport { RouteListener } from '../../util';\n\n/**\n * 获取路由查询参数\n *\n * @author chitanda\n * @date 2022-08-15 15:08:28\n * @export\n * @return {*} {IParams}\n */\nexport function useRouterQuery(): IParams {\n const route = useRoute();\n const { query } = route;\n return query;\n}\n\n/**\n * 监听普通的key变更,在路由下次更新后再改变赋给新的RouteKey\n * 第一次默认值会直接赋给routeKey\n *\n * @export\n * @param {Ref<string>} originKey 监听的原始Ref\n * @param {RouteLocationNormalizedLoaded} route 路由\n * @param {Ref<string>} [routeKey] 预先提供的转换后的Ref\n * @returns {*} {Ref<string>}\n */\nexport function useRouteKey(\n originKey: Ref<string>,\n route: RouteLocationNormalizedLoaded,\n routeKey?: Ref<string>,\n): Ref<string> {\n if (!routeKey) {\n routeKey = ref('');\n }\n routeKey.value = originKey.value;\n const routeListener = new RouteListener(route);\n watch(originKey, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n routeListener.nextChange(() => {\n routeKey!.value = newVal;\n });\n }\n });\n return routeKey;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CTX,\n IViewController,\n IViewProvider,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { clearAll } from 'qx-util';\nimport {\n getCurrentInstance,\n inject,\n onBeforeUnmount,\n provide,\n reactive,\n watch,\n} from 'vue';\nimport { useForce, useProps } from '../../vue/vue';\n\n/**\n * 监听并更新上下文和视图参数(引用不变)\n * @author lxm\n * @date 2023-05-25 01:48:14\n * @param {IData} props\n * @param {IViewController} view\n */\nfunction watchAndUpdateContextParams(\n props: IData,\n view: IViewController,\n): void {\n watch(\n () => ({ context: props.context, params: props.params }),\n newVal => {\n // 不改变引用的情况下,重置控制器里的上下文和视图参数。\n view.context.reset({}, newVal.context);\n clearAll(view.params);\n Object.assign(view.params, newVal.params);\n // 重新计算上下文和视图参数\n view.handleContextParams();\n ibiz.log.debug(`${view.model.id}的上下文或视图参数变更:`, newVal);\n },\n );\n}\n\n/**\n * 监听并更新state\n * @author lxm\n * @date 2023-05-26 03:43:23\n * @param {IData} props\n * @param {IViewController} view\n */\nfunction watchAndUpdateState(props: IData, view: IViewController): void {\n watch(\n () => {\n return props.state ? { ...props.state } : {};\n },\n (newVal, oldVal) => {\n const changeProps: IData = {};\n Object.keys(newVal).forEach(key => {\n if (newVal[key] !== (oldVal || {})[key]) {\n changeProps[key] = newVal[key];\n }\n });\n ibiz.log.debug(`视图 [${view.model.name}] state 变更`, changeProps);\n Object.keys(changeProps).forEach(key => {\n (view.state as any)[key] = changeProps[key];\n });\n },\n { immediate: true },\n );\n}\n\n/**\n * 初始化视图控制器\n *\n * @description 此视图暂时控制器实例化只用于路由一级视图\n * @author chitanda\n * @date 2022-08-15 15:08:04\n * @export\n * @template T\n * @param {(context: IContext, params: IParams, ctx?: CTX) => T} fn\n * @return {*} {T}\n */\nexport function useViewController<T extends IViewController>(\n fn: (...args: ConstructorParameters<typeof ViewController>) => T,\n): T {\n // 获取 props\n const props = useProps();\n // 获取上层组件的ctx\n const ctx = inject<CTX | undefined>('ctx', undefined);\n // 上下文里提前预告部件\n ctx?.evt.emit('onForecast', props.modelData.name!);\n\n // 实例化视图控制器\n const provider = props.provider as IViewProvider | undefined;\n let c: T;\n if (provider?.createController) {\n // 如果适配器给了创建方法使用适配器的方法\n c = provider.createController(\n props.modelData,\n props.context,\n props.params,\n ctx,\n ) as T;\n } else {\n c = fn(props.modelData, props.context, props.params, ctx);\n }\n\n watchAndUpdateContextParams(props, c);\n watchAndUpdateState(props, c);\n\n // 提供自身的ctx给下层组件\n provide('ctx', (c as any).ctx);\n // 让state 响应式\n c.state = reactive(c.state) as any;\n\n // 让state 响应式\n c.slotProps = reactive(c.slotProps) as any;\n\n // 从props赋值modal,如果存在的话。\n if (props.modal) {\n c.modal = props.modal;\n }\n\n c.force = useForce();\n\n const vue = getCurrentInstance()!.proxy!;\n c.evt.onAll((eventName, event) => {\n vue.$emit(eventName.slice(2), event);\n });\n\n c.created();\n\n // 卸载时销毁\n onBeforeUnmount(() => c.destroyed());\n return c;\n}\n","import { defineComponent, PropType, VNode, computed } from 'vue';\nimport { ISysImage } from '@ibiz/model-core';\nimport { IIcon } from '@ibiz-template/runtime';\nimport { isSvg } from '@ibiz-template/core';\nimport { useNamespace } from '../../use';\n\nexport const IBizIcon = defineComponent({\n name: 'IBizIcon',\n props: {\n icon: {\n type: Object as PropType<ISysImage | IIcon>,\n },\n size: {\n type: String as PropType<'small' | 'medium' | 'large'>,\n },\n baseDir: {\n type: String,\n default: 'images',\n },\n },\n setup(props) {\n const ns = useNamespace('icon');\n const BaseUrl = `${ibiz.env.assetsUrl}/${props.baseDir}/`;\n\n function getContent(icon?: IData): VNode | null {\n if (icon) {\n if (icon.htmlStr) {\n return <span class={ns.b()} v-html={icon.htmlStr}></span>;\n }\n if (icon.cssClass) {\n if (icon.cssClass.indexOf('fa-') !== -1) {\n return <i class={[ns.b(), icon.cssClass]} />;\n }\n return <ion-icon class={ns.b()} name={icon.cssClass}></ion-icon>;\n }\n if (icon.imagePath) {\n if (icon.imagePath.endsWith('svg')) {\n if (icon.imagePath.startsWith('http')) {\n return <img class={ns.b()} src={icon.imagePath}></img>;\n }\n return (\n <ion-icon\n src={BaseUrl + icon.imagePath}\n class={ns.b()}\n ></ion-icon>\n );\n }\n if (icon.imagePath.startsWith('http')) {\n return <img class={ns.b()} src={icon.imagePath} />;\n }\n return <img class={ns.b()} src={BaseUrl + icon.imagePath} />;\n }\n if (icon.rawContent) {\n if (isSvg(icon.rawContent)) {\n return <div class={ns.b()} v-html={icon.rawContent}></div>;\n }\n return <img class={ns.b()} src={icon.rawContent} />;\n }\n }\n return null;\n }\n\n const content = computed<VNode | null>(() => {\n return getContent(props.icon);\n });\n\n return (): VNode | null => content.value;\n },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNotNil } from 'ramda';\nimport { defineComponent, h, PropType, VNode, watch } from 'vue';\nimport { RouteLocationNormalizedLoaded } from 'vue-router';\n\n/**\n * 只会第一次绘制的时候绘制路由相关的内容,后面路由导致的router-view的回调都屏蔽了。\n * 通过变更manualKey,来强制刷新router-view的slot回调。并且吧manualKey传给Component的key,搭配AppKeepAlive可以缓存组件\n */\n\nexport const IBizRouterView = defineComponent({\n name: 'IBizRouterView',\n inheritAttrs: false,\n props: {\n name: {\n type: String as PropType<string>,\n default: 'default',\n },\n route: Object as PropType<RouteLocationNormalizedLoaded>,\n manualKey: {\n type: String,\n },\n },\n setup(props, { attrs }) {\n const cache: { vNode?: VNode } = {};\n\n let isActive = true;\n\n watch(\n () => props.manualKey,\n (newVal, oldVal) => {\n if (isNotNil(newVal) && newVal !== oldVal) {\n isActive = true;\n }\n },\n );\n\n const renderComp = (Component: VNode, _route: any): VNode | undefined => {\n // 非激活时返回缓存\n if (!isActive) {\n return cache.vNode;\n }\n isActive = false;\n if (Component) {\n const tempProps = { ...Component.props };\n delete tempProps.onVnodeUnmounted;\n delete tempProps.ref;\n const hNode = h(Component.type as string, {\n ...tempProps,\n ...attrs,\n key: props.manualKey,\n });\n cache.vNode = hNode;\n return hNode;\n }\n return undefined;\n };\n\n return { renderComp };\n },\n render() {\n return (\n <router-view name={this.name} route={this.route}>\n {({ Component, route }: any): VNode | VNode[] | undefined => {\n const newComp = this.renderComp(Component, route);\n if (this.$slots.default) {\n return this.$slots.default({ Component: newComp, route });\n }\n return newComp;\n }}\n </router-view>\n );\n },\n});\n","import {\n ControlController,\n IControlProvider,\n IViewLayoutPanelController,\n} from '@ibiz-template/runtime';\nimport { IControlContainer } from '@ibiz/model-core';\nimport { isNil } from 'ramda';\nimport {\n CSSProperties,\n defineComponent,\n h,\n PropType,\n reactive,\n resolveComponent,\n VNode,\n} from 'vue';\nimport { useNamespace } from '../../use';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const IBizControlBase: any = defineComponent({\n name: 'IBizControlBase',\n props: {\n controller: {\n type: Object as PropType<ControlController>,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('control');\n const { controlType, sysCss, codeName } = props.controller.model;\n const typeClass = controlType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const model = props.controller.model;\n\n /** 子部件模型 */\n const controls = (props.controller.model as IControlContainer).controls;\n\n const onLayoutPanelCreated = (\n controller: IViewLayoutPanelController,\n ): void => {\n props.controller.setLayoutPanel(controller as IViewLayoutPanelController);\n };\n\n const inlineStyle = reactive<CSSProperties>({});\n // 非导航栏时才输出宽高\n if (model.controlType!.endsWith('EXPBAR') === false) {\n if (!isNil(model.width)) {\n inlineStyle.width = `${model.width}px`;\n }\n if (!isNil(model.height)) {\n inlineStyle.height = `${model.height}px`;\n }\n }\n\n return {\n ns,\n typeClass,\n sysCssName,\n inlineStyle,\n codeName,\n controls,\n onLayoutPanelCreated,\n };\n },\n render() {\n const { state, controlPanel, providers } = this.controller;\n let layoutPanel = null;\n // 有部件布局的绘制布局面板\n if (state.isCreated && controlPanel) {\n // 绘制部件插槽,外部插槽优先\n const slots: IData = {\n ...this.$slots,\n };\n\n if (this.controls?.length) {\n this.controls.forEach(ctrl => {\n const slotKey = ctrl.name!;\n const ctrlProps = {\n context: this.controller.context,\n params: this.controller.params,\n };\n // 已经有插槽的不用自己绘制了。\n const outCtrlSlot = slots[slotKey];\n if (outCtrlSlot) {\n slots[slotKey] = (): VNode => {\n return outCtrlSlot(ctrlProps);\n };\n } else {\n slots[slotKey] = (): VNode => {\n const comp = resolveComponent('IBizControlShell') as string;\n return h(comp, {\n modelData: ctrl,\n ...ctrlProps,\n });\n };\n }\n });\n }\n\n // 绘制布局面板\n const provider = providers[controlPanel.name!] as IControlProvider;\n layoutPanel = h(\n resolveComponent(provider.component) as string,\n {\n modelData: controlPanel,\n context: this.controller.context,\n params: this.controller.params,\n provider,\n container: this.controller,\n onControllerAppear: this.onLayoutPanelCreated,\n },\n slots,\n );\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.b(this.typeClass),\n this.ns.m(this.codeName),\n this.sysCssName,\n ]}\n style={this.inlineStyle}\n >\n {layoutPanel || this.$slots.default?.()}\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\n/* eslint-disable vue/no-mutating-props */\nimport {\n CTX,\n getControlProvider,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport {\n defineComponent,\n h,\n inject,\n PropType,\n ref,\n resolveComponent,\n} from 'vue';\nimport './control-shell.scss';\nimport { IControl } from '@ibiz/model-core';\nimport { useNamespace } from '../../use';\n\nexport const IBizControlShell = defineComponent({\n name: 'IBizControlShell',\n props: {\n modelData: { type: Object as PropType<IControl>, required: true },\n },\n setup(props) {\n // 上下文里提前预告部件\n const ctx = inject('ctx') as CTX;\n\n ctx.evt.emit('onForecast', props.modelData.name!);\n\n const isComplete = ref(false);\n const errMsg = ref('');\n const provider = ref<IControlProvider>();\n getControlProvider(props.modelData)\n .then(item => {\n if (!item) {\n errMsg.value = `未找到对应部件的适配器`;\n } else {\n provider.value = item;\n }\n isComplete.value = true;\n })\n .catch(err => {\n ibiz.log.error(err);\n errMsg.value = err.message;\n isComplete.value = true;\n });\n const ns = useNamespace('control-shell');\n\n return { ns, isComplete, errMsg, provider };\n },\n render() {\n if (this.isComplete && this.provider) {\n return h(\n resolveComponent(this.provider.component) as string,\n {\n provider: this.provider,\n ...this.$props,\n ...this.$attrs,\n },\n this.$slots,\n );\n }\n return (\n <div class={this.ns.b()} v-loading={!this.isComplete}>\n {this.isComplete ? this.errMsg : null}\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\n/* eslint-disable vue/no-mutating-props */\nimport { getViewProvider, IViewProvider } from '@ibiz-template/runtime';\nimport { defineComponent, h, PropType, ref, resolveComponent } from 'vue';\nimport './view-shell.scss';\nimport { IAppView } from '@ibiz/model-core';\nimport { RuntimeError } from '@ibiz-template/core';\nimport { useNamespace } from '../../use';\n\nexport const IBizViewShell = defineComponent({\n name: 'IBizViewShell',\n props: {\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams> },\n modelData: { type: Object as PropType<IAppView> },\n viewId: { type: String },\n },\n setup(props) {\n const ns = useNamespace('view-shell');\n const isComplete = ref(false);\n const errMsg = ref('');\n const provider = ref<IViewProvider>();\n const viewModelData = ref<IAppView | undefined>();\n // 初始化方法\n const init = async (): Promise<void> => {\n let viewModel: IAppView | undefined;\n if (props.modelData) {\n viewModel = props.modelData;\n } else {\n viewModel = await ibiz.hub.getAppView(props.viewId!);\n }\n if (!viewModel) {\n throw new RuntimeError('未找到视图模型');\n }\n viewModelData.value = viewModel;\n try {\n provider.value = await getViewProvider(viewModel);\n } catch (error) {\n ibiz.log.error(error);\n errMsg.value = (error as IData).message;\n } finally {\n isComplete.value = true;\n }\n };\n\n init();\n\n return { ns, isComplete, errMsg, viewModelData, provider };\n },\n render() {\n if (this.isComplete && this.provider) {\n return h(\n resolveComponent(this.provider.component) as string,\n {\n context: this.$props.context,\n params: this.$props.params,\n modelData: this.viewModelData,\n ...this.$attrs,\n provider: this.provider,\n },\n this.$slots,\n );\n }\n return (\n <div class={this.ns.b()} v-loading={!this.isComplete}>\n {this.isComplete ? this.errMsg : null}\n </div>\n );\n },\n});\n","import { CodeListItem } from '@ibiz-template/runtime';\nimport { isNil } from 'ramda';\nimport { defineComponent, PropType, ref, watch } from 'vue';\nimport { IAppCodeList } from '@ibiz/model-core';\nimport './code-list.scss';\nimport { useNamespace } from '../../use';\n\nexport const IBizCodeList = defineComponent({\n name: 'IBizCodeList',\n props: {\n codeListItems: {\n type: Array<CodeListItem>,\n },\n codeList: {\n type: Object as PropType<IAppCodeList>,\n required: true,\n },\n value: {\n type: [String, Number],\n },\n },\n emits: {\n infoTextChange: (_text: string) => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('code-list');\n const items = ref<IData[]>([]);\n\n watch(items, newVal => {\n let infoText = '';\n if (newVal.length > 0) {\n infoText = newVal\n .map(item => item.text)\n .join(props.codeList?.textSeparator);\n }\n emit('infoTextChange', infoText);\n });\n\n const findCodeListItem = (\n codelist: CodeListItem[] | undefined,\n value: string | number,\n ) => {\n if (codelist) {\n // eslint-disable-next-line eqeqeq\n const findItem = codelist.find(item => item.value == value);\n if (findItem) {\n return findItem;\n }\n for (let i = 0; i < codelist.length; i++) {\n const childrenItem = findCodeListItem(\n codelist[i].children,\n value,\n ) as CodeListItem;\n if (childrenItem) {\n return childrenItem;\n }\n }\n }\n };\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (isNil(newVal) || newVal === '') {\n // 空值置空\n items.value = [];\n } else {\n // 非空值解析代码表\n let values: string[] | number[];\n if (typeof newVal === 'string') {\n values = newVal.split(props.codeList?.valueSeparator || ',');\n } else {\n values = [newVal];\n }\n items.value = values.map(val => {\n const findItem = findCodeListItem(props.codeListItems, val);\n return {\n text: findItem?.text || val,\n color: findItem?.color,\n textCls: findItem?.textCls,\n };\n });\n }\n }\n },\n { immediate: true },\n );\n\n const emptyText =\n props.codeList.emptyText === '未定义'\n ? '- - -'\n : props.codeList.emptyText;\n\n return { items, ns, emptyText };\n },\n render() {\n return (\n <span class={this.ns.b()}>\n {this.items.length === 0\n ? this.emptyText\n : this.items.map((item, index) => {\n return [\n index !== 0 ? this.codeList?.textSeparator : null,\n <span\n class={[\n this.ns.e('item'),\n item.textCls ? item.textCls : null,\n ]}\n style={this.ns.cssVarBlock({\n 'item-color': `${item.color}`,\n })}\n >\n {item.text}\n </span>,\n ];\n })}\n </span>\n );\n },\n});\n","import { CTX } from '@ibiz-template/runtime';\nimport { defineComponent, inject, PropType } from 'vue';\n\nexport const ControlLoadingPlaceholder = defineComponent({\n name: 'ControlLoadingPlaceholder',\n props: {\n modelData: { type: Object as PropType<IData>, required: true },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n },\n setup(props) {\n // 上下文里提前预告部件\n const ctx = inject('ctx') as CTX;\n\n ctx.evt.emit('onForecast', props.modelData.name!);\n\n return {};\n },\n render() {\n return null;\n },\n});\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class PanelContainerState\n * @extends {PanelItemState}\n */\nexport class PanelContainerState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerState } from './panel-container.state';\n\n/**\n * 面板容器控制器\n *\n * @export\n * @class PanelContainerController\n * @extends {PanelItemController}\n */\nexport class PanelContainerController extends PanelItemController<IPanelContainer> {\n declare state: PanelContainerState;\n\n protected createState(): PanelContainerState {\n return new PanelContainerState(this.parent?.state);\n }\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelContainerController } from './panel-container.controller';\nimport './panel-container.scss';\n\nexport const PanelContainer = defineComponent({\n name: 'IBizPanelContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-container');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n result = [\n ...result,\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n return { ns, classArr };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n const content = (\n <iBizRow slot='content' layout={this.modelData.layout}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n return (\n <iBizCol\n layoutPos={props.modelData.layoutPos}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n >\n {this.controller.model.cssStyle ? (\n <style type='text/css'>{this.controller.model.cssStyle}</style>\n ) : null}\n {content}\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerController } from './panel-container.controller';\n\n/**\n * 面板容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelContainerProvider\n * @implements {EditorProvider}\n */\nexport class PanelContainerProvider implements IPanelItemProvider {\n component: string = 'IBizPanelContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PanelContainer } from './panel-container';\nimport { PanelContainerProvider } from './panel-container.provider';\nimport { PanelContainerState } from './panel-container.state';\nimport { PanelContainerController } from './panel-container.controller';\n\nexport { PanelContainerState, PanelContainerController };\n\nexport const IBizPanelContainer = withInstall(\n PanelContainer,\n function (v: App) {\n v.component(PanelContainer.name, PanelContainer);\n registerPanelItemProvider('CONTAINER', () => new PanelContainerProvider());\n registerPanelItemProvider(\n 'CONTAINER_DEFAULT',\n () => new PanelContainerProvider(),\n );\n // registerPanelItemProvider(\n // 'CONTAINER_CONTAINER_GRID',\n // () => new PanelContainerProvider(),\n // );\n },\n);\n\nexport default IBizPanelContainer;\n","import { CTX, IControlController } from '@ibiz-template/runtime';\nimport { IPanelCtrlPos } from '@ibiz/model-core';\nimport { defineComponent, inject, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelCtrlPosController } from './panel-ctrl-pos.controller';\nimport './panel-ctrl-pos.scss';\n\nexport const PanelCtrlPos = defineComponent({\n name: 'IBizPanelCtrlPos',\n props: {\n modelData: {\n type: Object as PropType<IPanelCtrlPos>,\n required: true,\n },\n controller: {\n type: Object as PropType<PanelCtrlPosController>,\n required: true,\n },\n },\n setup(props) {\n // 上下文里提前预告部件\n const ctx = inject('ctx') as CTX;\n ctx.evt.on('onRegister', (name, c) => {\n if (name === props.modelData.id) {\n props.controller.bindControl(c as IControlController);\n }\n });\n\n const ns = useNamespace('panel-ctrl-pos');\n return { ns };\n },\n render() {\n const { state } = this.controller;\n let content: VNode | VNode[] | undefined;\n\n if (this.$slots.default) {\n content = this.$slots.default();\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n this.ns.is('hidden', !state.visible),\n ]}\n >\n {content || (ibiz.env.dev ? `未提供${this.modelData.id}插槽` : '')}\n </div>\n );\n },\n});\n","import {\n IControlController,\n PanelItemController,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\nimport { IPanelCtrlPos } from '@ibiz/model-core';\n\n/**\n * 面板控件占位控制器\n *\n * @author lxm\n * @date 2023-02-07 06:05:23\n * @export\n * @class PanelButtonController\n * @extends {PanelItemController}\n */\nexport class PanelCtrlPosController extends PanelItemController<IPanelCtrlPos> {\n /**\n * 面板控制器\n *\n * @author lxm\n * @date 2022-08-24 22:08:59\n * @type {PanelController}\n */\n declare panel: ViewLayoutPanelController;\n\n /**\n * 部件占位对应部件控制器\n * @author lxm\n * @date 2023-08-09 10:41:38\n * @type {IControlController}\n */\n control?: IControlController;\n\n /**\n * 绑定部件控制器\n * @author lxm\n * @date 2023-08-09 10:42:30\n * @param {IControlController} controller\n */\n bindControl(controller: IControlController): void {\n this.control = controller;\n\n // 绑定部件,并监听所有事件,通过面板转发部件的事件。\n controller.evt.onAll((eventName, event) => {\n this.panel.evt.emit('onControlEvent', {\n triggerControlName: this.model.id!,\n triggerEventName: eventName,\n triggerEvent: event,\n });\n });\n }\n}\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelCtrlPos } from '@ibiz/model-core';\nimport { PanelCtrlPosController } from './panel-ctrl-pos.controller';\n\n/**\n * 面板控件占位适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelCtrlPosProvider\n * @implements {EditorProvider}\n */\nexport class PanelCtrlPosProvider implements IPanelItemProvider {\n component: string = 'IBizPanelCtrlPos';\n\n async createController(\n panelItem: IPanelCtrlPos,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelCtrlPosController> {\n const c = new PanelCtrlPosController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PanelCtrlPos } from './panel-ctrl-pos';\nimport { PanelCtrlPosProvider } from './panel-ctrl-pos.provider';\nimport { PanelCtrlPosController } from './panel-ctrl-pos.controller';\n\nexport { PanelCtrlPosController };\nexport const IBizPanelCtrlPos = withInstall(PanelCtrlPos, function (v: App) {\n v.component(PanelCtrlPos.name, PanelCtrlPos);\n registerPanelItemProvider('CTRLPOS', () => new PanelCtrlPosProvider());\n});\n\nexport default IBizPanelCtrlPos;\n","import { IPanelContainer } from '@ibiz/model-core';\nimport {\n PanelItemController,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\n\n/**\n * 面板滚动容器项控制器\n *\n * @author lxm\n * @date 2023-02-07 06:05:23\n * @export\n * @class PanelButtonController\n * @extends {PanelItemController}\n */\nexport class ScrollContainerItemController extends PanelItemController<IPanelContainer> {\n /**\n * 面板控制器\n *\n * @author lxm\n * @date 2022-08-24 22:08:59\n * @type {PanelController}\n */\n declare panel: ViewLayoutPanelController;\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../../use';\nimport { ScrollContainerItemController } from './scroll-container-item.controller';\nimport './scroll-container-item.scss';\n\nexport const ScrollContainerItem = defineComponent({\n name: 'IBizScrollContainerItem',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: ScrollContainerItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('scroll-container-item');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n return { ns, classArr };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n\n return (\n <iBizRow class={this.classArr} layout={{ layout: 'FLEX' }}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n props.modelData.layoutPos.layout = 'FLEX';\n return (\n <iBizCol\n layoutPos={props.modelData.layoutPos}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { ScrollContainerItemController } from './scroll-container-item.controller';\n\n/**\n * 面板滚动条容器项适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class ScrollContainerItemProvider\n * @implements {EditorProvider}\n */\nexport class ScrollContainerItemProvider implements IPanelItemProvider {\n component: string = 'IBizScrollContainerItem';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<ScrollContainerItemController> {\n const c = new ScrollContainerItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport {\n PanelItemController,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\n\n/**\n * 面板滚动容器控制器\n *\n * @author lxm\n * @date 2023-02-07 06:05:23\n * @export\n * @class PanelButtonController\n * @extends {PanelItemController}\n */\nexport class ScrollContainerController extends PanelItemController<IPanelContainer> {\n /**\n * 面板控制器\n *\n * @author lxm\n * @date 2022-08-24 22:08:59\n * @type {PanelController}\n */\n declare panel: ViewLayoutPanelController;\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n // 滚动容器高宽默认占满\n this.state.layout.width = '100%';\n this.state.layout.height = '100%';\n }\n}\n","/* eslint-disable no-restricted-syntax */\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '../../../use';\nimport { ScrollContainerController } from './scroll-container.controller';\nimport './scroll-container.scss';\n\nexport const ScrollContainer = defineComponent({\n name: 'IBizScrollContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: ScrollContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('scroll-container');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n return { ns, classArr };\n },\n render() {\n let left: VNode | null = null;\n let top: VNode | null = null;\n let right: VNode | null = null;\n let bottom: VNode | null = null;\n let center: VNode | null = null;\n\n const slotStylle: IData = {};\n\n // 内容区默认插槽处理,处理滚动容器项\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n defaultSlots.forEach(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return;\n }\n\n const { width, height } = props.controller.state.layout;\n switch (props.modelData.layoutPos.layoutPos) {\n case 'WEST':\n left = slot;\n slotStylle.left = { width };\n break;\n case 'EAST':\n right = slot;\n slotStylle.right = { width };\n break;\n case 'NORTH':\n top = slot;\n slotStylle.top = { height };\n break;\n case 'SOUTH':\n bottom = slot;\n slotStylle.bottom = { height };\n break;\n case 'CENTER':\n center = slot;\n break;\n default:\n ibiz.log.debug(\n `未适配的布局占位${props.modelData.layoutPos.layoutPos}`,\n );\n break;\n }\n });\n\n // 如果配了高宽,默认给压缩比为0\n for (const key in slotStylle) {\n if (slotStylle[key].width || slotStylle[key].height) {\n slotStylle[key].flexShrink = 0;\n }\n }\n\n return (\n <div class={this.classArr}>\n <div class={[this.ns.e('header')]} style={slotStylle.top}>\n {top}\n </div>\n <div class={[this.ns.b('content')]}>\n <div class={this.ns.be('content', 'left')} style={slotStylle.left}>\n {left}\n </div>\n <div class={this.ns.be('content', 'center')}>{center}</div>\n <div class={this.ns.be('content', 'right')} style={slotStylle.right}>\n {right}\n </div>\n </div>\n <div class={[this.ns.e('footer')]} style={slotStylle.bottom}>\n {bottom}\n </div>\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { ScrollContainerController } from './scroll-container.controller';\n\n/**\n * 面板滚动条容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class ScrollContainerProvider\n * @implements {EditorProvider}\n */\nexport class ScrollContainerProvider implements IPanelItemProvider {\n component: string = 'IBizScrollContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<ScrollContainerController> {\n const c = new ScrollContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { ScrollContainerItem } from './scroll-container-item/scroll-container-item';\nimport { ScrollContainerItemProvider } from './scroll-container-item/scroll-container-item.provider';\nimport { ScrollContainer } from './scroll-container/scroll-container';\nimport { ScrollContainerProvider } from './scroll-container/scroll-container.provider';\n\nexport * from './scroll-container';\nexport * from './scroll-container-item';\n\nexport const IBizScrollContainer = withInstall(\n ScrollContainer,\n function (v: App) {\n v.component(ScrollContainer.name, ScrollContainer);\n v.component(ScrollContainerItem.name, ScrollContainerItem);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL',\n () => new ScrollContainerProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_LEFT',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_HEADER',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_RIGHT',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_BOTTOM',\n () => new ScrollContainerItemProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SCROLL_MAIN',\n () => new ScrollContainerItemProvider(),\n );\n },\n);\n\nexport default IBizScrollContainer;\n","import { INavViewMsg, PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 导航占位状态\n *\n * @export\n * @class NavPosState\n * @extends {PanelItemState}\n */\nexport class NavPosState extends PanelItemState {\n /**\n * 是否启用缓存\n *\n * @type {boolean}\n * @memberof NavPosState\n */\n cache: boolean = true;\n\n /**\n * 是否是路由打开\n *\n * @author zk\n * @date 2023-09-26 04:09:23\n * @type {boolean}\n * @memberof NavPosState\n */\n routeOpen: boolean = true;\n\n /**\n * 当前导航视图标识\n * @author lxm\n * @date 2023-05-25 06:24:48\n * @type {string}\n */\n currentKey: string = '';\n\n /**\n * 缓存的视图标识\n * @author lxm\n * @date 2023-05-25 06:25:21\n * @type {string[]}\n */\n cacheKeys: string[] = ['RouterShell'];\n\n /**\n * 导航视图详细信息\n * @author lxm\n * @date 2023-05-25 07:07:05\n * @type {INavViewMsg[]}\n */\n navViewMsgs: { [p: string]: INavViewMsg } = {};\n}\n","import {\n EventBase,\n IModal,\n Modal,\n OpenAppViewCommand,\n IPanelItemNavPosController,\n ViewMode,\n INavViewMsg,\n NavViewChangeEvent,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { RouteLocationNormalizedLoaded, Router } from 'vue-router';\nimport { notNilEmpty } from 'qx-util';\nimport { mergeLeft } from 'ramda';\nimport { NavPosState } from './nav-pos.state';\nimport { getNestedRoutePath } from '../../util';\n\nconst excludeKeys = ['is404', 'isRoutePushed'] as const;\n\n/**\n * 导航占位控制器\n *\n * @export\n * @class NavPosController\n * @extends {PanelItemController}\n */\nexport class NavPosController\n extends PanelItemController<IPanelRawItem>\n implements IPanelItemNavPosController\n{\n /**\n * 导航占位状态\n *\n * @type {NavPosState}\n * @memberof NavPosController\n */\n declare state: NavPosState;\n\n /**\n * 导航视图的modal\n *\n * @type {{ [key: string]: IModal }}\n * @memberof NavPosController\n */\n viewModals: { [key: string]: IModal } = {};\n\n /**\n * 当前导航视图\n *\n * @type {INavViewMsg}\n * @memberof NavPosController\n */\n curNavViewMsg!: INavViewMsg;\n\n /**\n * Router 对象\n *\n * @type {Router}\n * @memberof NavPosController\n */\n router!: Router;\n\n /**\n * 关联部件标识集合\n * @author lxm\n * @date 2023-08-10 07:35:08\n * @type {string[]}\n */\n refCtrlKeys: string[] = [];\n\n /**\n * 自定义补充参数\n *\n * @author zk\n * @date 2023-09-27 03:09:02\n * @type {IData}\n * @memberof NavPosController\n */\n rawItemParams: IData = {};\n\n /**\n * Route 对象\n *\n * @author zk\n * @date 2023-06-29 04:06:59\n * @type {RouteLocationNormalizedLoaded}\n * @memberof NavPosController\n */\n get route(): RouteLocationNormalizedLoaded {\n return this.router.currentRoute.value;\n }\n\n /**\n * 导航项是否缓存\n *\n * @author zk\n * @date 2023-09-27 03:09:49\n * @param {INavViewMsg} navViewMsg\n * @return {*} {boolean}\n * @memberof NavPosController\n */\n getExpItemIsCache(navViewMsg: INavViewMsg): boolean {\n if (this.rawItemParams.expcache === 'CACHE') {\n return true;\n }\n if (this.rawItemParams.expcache === 'NO_CACHE') {\n return false;\n }\n return navViewMsg.isCache as boolean;\n }\n\n /**\n * 设置 Router 对象\n *\n * @param {Router} router\n * @memberof NavPosController\n */\n setRouter(router: Router): void {\n this.router = router;\n }\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n this.handleRawItemParams();\n if (this.model.rawItem?.rawItemParams) {\n this.model.rawItem.rawItemParams.find(item => {\n if (item.key === 'REFCTRL' && item.value) {\n this.refCtrlKeys = item.value\n .split(';')\n .map(str => str.toLowerCase());\n return true;\n }\n return false;\n });\n }\n\n this.panel.evt.on('onControlEvent', event => {\n // 是否是关联部件,如果没有配置都监控,配置了只监控指定部件\n const isRefCtrl =\n this.refCtrlKeys.length === 0 ||\n this.refCtrlKeys.includes(event.triggerControlName);\n if (isRefCtrl && event.triggerEventName === 'onNavViewChange') {\n const triggerEvent = event.triggerEvent as NavViewChangeEvent;\n this.openView(triggerEvent.navViewMsg);\n }\n });\n\n // 根据 导航占位参数 || 视图参数 判断是否用路由打开视图 不使用:NO_ROUTE 使用 :ROUTE\n // 导航占位参数优先级大于视图参数\n const expRoute =\n this.rawItemParams.expmode || this.panel.view.params.expmode;\n\n // 路由模式下 必须为路由打开\n if (expRoute === 'ROUTE' && this.routeDepth) {\n this.state.routeOpen = true;\n } else if (expRoute === 'NO_ROUTE') {\n this.state.routeOpen = false;\n } else {\n this.state.routeOpen = !!this.routeDepth;\n }\n // 消费完参数销毁 expmode\n if (this.panel.view.params.expmode) {\n delete this.panel.view.params.expmode;\n }\n }\n\n /**\n * 创建导航占位状态对象\n *\n * @protected\n * @return {*} {NavPosState}\n * @memberof NavPosController\n */\n protected createState(): NavPosState {\n return new NavPosState(this.parent?.state);\n }\n\n /**\n * 当前路由视图的层级\n *\n * @readonly\n * @type {(number | undefined)}\n * @memberof NavPosController\n */\n get routeDepth(): number | undefined {\n return this.panel.view.modal.routeDepth;\n }\n\n /**\n * 路由改变\n *\n * @memberof NavPosController\n */\n onRouteChange(route: RouteLocationNormalizedLoaded): void {\n // 没有当前导航视图信息时不做任何处理\n if (this.curNavViewMsg) {\n // 路由打开的视图,currentKey在路由变更之后改值。此时新建的视图才能识别到跳转之后的路由。\n this.state.currentKey = this.curNavViewMsg.key;\n\n // 更新fullPath信息\n this.state.navViewMsgs[this.curNavViewMsg.key].fullPath = route.fullPath;\n }\n }\n\n /**\n * 设置导航视图信息\n *\n * @author zk\n * @date 2023-06-29 02:06:41\n * @param {INavViewMsg} navViewMsg 导航视图信息\n * @memberof NavPosController\n */\n setNavViewMsgs(navViewMsg: INavViewMsg): void {\n // isRoutePushed没传的时候给false\n navViewMsg.isRoutePushed = navViewMsg.isRoutePushed === true;\n if (this.state.navViewMsgs[navViewMsg.key]) {\n mergeLeft(this.state.navViewMsgs[navViewMsg.key], navViewMsg);\n // 部分属性这次没传就是undefined\n excludeKeys.forEach(key => {\n if (Object.prototype.hasOwnProperty.call(navViewMsg, key)) {\n this.state.navViewMsgs[navViewMsg.key][key] = undefined;\n }\n });\n } else {\n // 不存在的走新建流程\n this.state.navViewMsgs[navViewMsg.key] = navViewMsg;\n if (this.getExpItemIsCache(navViewMsg)) {\n // 往缓存keys里添加新视图的key\n this.state.cacheKeys.push(navViewMsg.key);\n }\n this.viewModals[navViewMsg.key] = new Modal({\n mode: this.routeDepth ? ViewMode.ROUTE : ViewMode.EMBED,\n routeDepth: this.routeDepth ? this.routeDepth + 1 : undefined,\n dismiss: () => {\n // 执行对应key的dismiss方法\n this.dismiss(navViewMsg.key);\n },\n });\n }\n\n // todo 换个方式\n this.curNavViewMsg = this.state.navViewMsgs[navViewMsg.key];\n }\n\n /**\n * 自身的dismiss相关操作\n *\n * @param {string} key\n * @memberof NavPosController\n */\n dismiss(key: string): void {\n ibiz.log.debug(this.constructor.name, 'dismiss', key);\n }\n\n /**\n * 监听视图创建\n *\n * @param {EventBase} event\n * @memberof NavPosController\n */\n onViewCreated(event: EventBase): void {\n ibiz.log.debug(this.constructor.name, 'onViewCreated', event);\n }\n\n toBlankRoute(): void {\n const blankRoute = getNestedRoutePath(this.route, this.routeDepth!);\n this.router.push(blankRoute);\n }\n\n /**\n * 打开视图\n *\n * @param {INavViewMsg} openViewMsg\n * @memberof NavPosController\n */\n openView(openViewMsg: INavViewMsg): void {\n // 当key为空时,直接切换currentKey,绘制null\n if (!openViewMsg.key) {\n this.state.currentKey = openViewMsg.key;\n if (this.routeDepth && this.state.routeOpen) {\n this.toBlankRoute();\n }\n\n return;\n }\n\n if (this.routeDepth && this.state.routeOpen) {\n this.openViewByPath(openViewMsg);\n } else {\n this.openViewByModel(openViewMsg);\n }\n }\n\n /**\n * 通过路由打开视图\n *\n * @param {INavViewMsg} openViewMsg\n * @memberof NavPosController\n */\n openViewByPath(openViewMsg: INavViewMsg): void {\n this.setNavViewMsgs(openViewMsg);\n const isRoutePushed = openViewMsg.isRoutePushed === true;\n // * 外部跳转过了的场景不需要这边跳转路由了,直接处理后续内容。\n if (isRoutePushed) {\n this.state.currentKey = openViewMsg.key;\n this.state.navViewMsgs[this.curNavViewMsg.key].fullPath =\n this.route.fullPath;\n return;\n }\n\n // * 路由跳转\n if (openViewMsg.is404) {\n const selfPath = getNestedRoutePath(this.route, this.routeDepth!, false);\n this.router.push(`${selfPath}/404`);\n } else if (\n // 如果启用缓存并且有之前存过的fullPath则push回fullPath。\n this.state.navViewMsgs[openViewMsg.key].fullPath &&\n this.getExpItemIsCache(openViewMsg)\n ) {\n this.router.push(this.state.navViewMsgs[openViewMsg.key].fullPath!);\n } else {\n // 走视图路由打开逻辑计算并push\n const tempContext = Object.assign(openViewMsg.context!.clone(), {\n toRouteDepth: this.routeDepth! + 1,\n });\n if (this.getExpItemIsCache(openViewMsg)) {\n this.state.cacheKeys.push(openViewMsg.key);\n }\n ibiz.commands.execute(\n OpenAppViewCommand.TAG,\n openViewMsg.viewId,\n tempContext,\n openViewMsg.params,\n { openMode: 'INDEXVIEWTAB' },\n );\n }\n\n // !跳转路由过后,修改currentKey由onRouteChange那边路由变更之后处理。\n }\n\n /**\n * 通过模型绘制视图\n *\n * @param {INavViewMsg} openViewMsg\n * @memberof NavPosController\n */\n openViewByModel(openViewMsg: INavViewMsg): void {\n this.setNavViewMsgs(openViewMsg);\n // 切换currentKey,重新渲染openViewMsg\n this.state.currentKey = openViewMsg.key;\n }\n\n /**\n * 处理自定义补充参数 [{key:'name',value:'data'}] => {name:'data'}\n *\n * @author zk\n * @date 2023-09-27 03:09:55\n * @protected\n * @memberof NavPosController\n */\n protected handleRawItemParams(): void {\n let params = {};\n const rawItemParams = this.model.rawItem?.rawItemParams;\n if (notNilEmpty(rawItemParams)) {\n params = rawItemParams!.reduce((param: IData, item) => {\n param[item.key!.toLowerCase()] = item.value;\n return param;\n }, {});\n }\n Object.assign(this.rawItemParams, params);\n }\n}\n","import {\n defineComponent,\n h,\n PropType,\n resolveComponent,\n VNode,\n watch,\n} from 'vue';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { EventBase } from '@ibiz-template/runtime';\nimport { useRoute, useRouter } from 'vue-router';\nimport { NavPosController } from './nav-pos.controller';\nimport './nav-pos.scss';\nimport { useNamespace } from '../../use';\nimport { getNestedRoutePath } from '../../util';\n\nexport const NavPos = defineComponent({\n name: 'IBizNavPos',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: NavPosController,\n required: true,\n },\n },\n setup(props) {\n const c = props.controller;\n const ns = useNamespace('nav-pos');\n const onViewCreated = (event: EventBase): void => {\n c.onViewCreated(event);\n };\n\n const router = useRouter();\n const route = useRoute();\n\n c.setRouter(router);\n\n if (c.routeDepth) {\n // 计算当前导航视图对应层级路由的路径,删除了srfnav\n const expViewRoutePath = getNestedRoutePath(route, c.routeDepth!);\n watch(\n () => route.fullPath,\n () => {\n const currentRoutePath = getNestedRoutePath(route, c.routeDepth!);\n // 前面路由不是当前导航视图的不走\n // 路由跳转匹配层级不比导航视图层级高的不走。如分页关系的表单对应的事导航视图的路由。\n if (\n expViewRoutePath === currentRoutePath &&\n route.matched.length > c.routeDepth!\n ) {\n c.onRouteChange(route);\n }\n },\n { immediate: true },\n );\n }\n\n return { ns, c, onViewCreated };\n },\n render() {\n const { viewModals, state } = this.c;\n const { currentKey, cacheKeys, navViewMsgs, cache } = state;\n let content: VNode | null = null;\n if (state.routeOpen) {\n content = (\n <iBizRouterView\n manualKey={currentKey}\n modal={viewModals[currentKey]}\n onCreated={this.onViewCreated}\n >\n {({ Component }: { Component: string }): VNode | null => {\n const routerContent =\n currentKey === '' || !Component\n ? null\n : ((<Component />) as VNode);\n\n return cache ? (\n <keepAlive include={cacheKeys} max={30} isKey>\n {routerContent}\n </keepAlive>\n ) : (\n routerContent\n );\n }}\n </iBizRouterView>\n );\n } else {\n const view = currentKey\n ? h(resolveComponent('IBizViewShell'), {\n context: navViewMsgs[currentKey].context,\n params: navViewMsgs[currentKey].params,\n key: navViewMsgs[currentKey].key,\n viewId: navViewMsgs[currentKey].viewId,\n onCreated: this.onViewCreated,\n })\n : null;\n content = cache ? (\n <keepAlive include={cacheKeys} max={30} isKey>\n {view}\n </keepAlive>\n ) : (\n view\n );\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n ]}\n >\n {content}\n </div>\n );\n },\n});\n","import {\n IPanelItemNavPosController,\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { NavPosController } from './nav-pos.controller';\n\n/**\n * 导航占位适配器\n *\n * @export\n * @class NavPosProvider\n * @implements {IPanelItemProvider}\n */\nexport class NavPosProvider implements IPanelItemProvider {\n component: string = 'IBizNavPos';\n\n /**\n * 创建控制器\n *\n * @param {IPanelItem} panelItem\n * @param {PanelController} panel\n * @param {(PanelItemController | undefined)} parent\n * @return {*} {Promise<IPanelItemNavPosController>}\n * @memberof NavPosProvider\n */\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<IPanelItemNavPosController> {\n const c = new NavPosController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { NavPos } from './nav-pos';\nimport { NavPosProvider } from './nav-pos.provider';\nimport { NavPosState } from './nav-pos.state';\nimport { NavPosController } from './nav-pos.controller';\n\nexport { NavPosState, NavPosController };\n\nexport const IBizNavPos = withInstall(NavPos, function (v: App) {\n v.component(NavPos.name, NavPos);\n registerPanelItemProvider('RAWITEM_NAV_POS', () => new NavPosProvider());\n});\n\nexport default IBizNavPos;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板属性状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class PanelFieldState\n * @extends {PanelItemState}\n */\nexport class PanelFieldState extends PanelItemState {}\n","import {\n getEditorProvider,\n IEditorContainerController,\n IEditorController,\n IEditorProvider,\n PanelItemController,\n PanelItemEventName,\n} from '@ibiz-template/runtime';\nimport { IPanelField } from '@ibiz/model-core';\nimport { PanelFieldState } from './panel-field.state';\n\n/**\n * 面板按钮控制器\n *\n * @export\n * @class PanelFieldController\n * @extends {PanelItemController<IPanelField>}\n */\nexport class PanelFieldController\n extends PanelItemController<IPanelField>\n implements IEditorContainerController\n{\n declare state: PanelFieldState;\n\n unitName: string | undefined = undefined;\n\n /**\n * 值格式化\n * @author lxm\n * @date 2023-05-24 05:46:56\n * @readonly\n * @type {(string | undefined)}\n */\n get valueFormat(): string | undefined {\n return this.model.valueFormat;\n }\n\n get dataType(): number | undefined {\n return undefined;\n }\n\n get context(): IContext {\n return this.panel.context;\n }\n\n get params(): IParams {\n return this.panel.params;\n }\n\n /**\n * 父容器数据对象数据\n * @author lxm\n * @date 2023-07-15 01:33:58\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.dataParent.data;\n }\n\n /**\n * 面板属性成员的值\n * @author lxm\n * @date 2023-07-14 02:30:58\n * @readonly\n */\n get value(): string | number {\n return this.data[this.model.id!];\n }\n\n /**\n * 编辑器控制器\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n * @type {IEditorController}\n */\n editor?: IEditorController;\n\n /**\n * 编辑器适配器\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n */\n editorProvider?: IEditorProvider;\n\n protected createState(): PanelFieldState {\n return new PanelFieldState(this.parent?.state);\n }\n\n /**\n * 初始化\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n * @protected\n * @returns {*} {Promise<void>}\n */\n protected async onInit(): Promise<void> {\n await super.onInit();\n // 空输入默认值\n this.state.required = !this.model.allowEmpty;\n // 初始化编辑器控制器,除了隐藏都会需要适配器\n if (this.model.editor && this.model.editor.editorType !== 'HIDDEN') {\n this.editorProvider = await getEditorProvider(this.model.editor);\n if (this.editorProvider) {\n this.editor = await this.editorProvider.createController(\n this.model.editor,\n this,\n );\n }\n }\n }\n\n /**\n * 设置面板数据的值\n *\n * @author lxm\n * @date 2022-08-24 10:08:40\n * @param {unknown} value 要设置的值\n * @param {string} name 要设置的面板数据的属性名称\n */\n async setDataValue(value: unknown, name?: string): Promise<void> {\n const { id } = this.model;\n name = name || id;\n if (this.dataParent.setDataValue) {\n await this.dataParent.setDataValue(name!, value);\n }\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.CHANGE,\n });\n }\n\n /**\n * 聚焦事件\n * @author lxm\n * @date 2023-10-11 05:03:26\n */\n onFocus(event: MouseEvent): void {\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.FOCUS,\n event,\n });\n }\n\n /**\n * 失焦事件\n * @author lxm\n * @date 2023-10-11 05:03:26\n */\n onBlur(event: MouseEvent): void {\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.BLUR,\n event,\n });\n }\n\n /**\n * 回车事件\n * @author lxm\n * @date 2023-10-11 05:03:26\n */\n onEnter(event: MouseEvent): void {\n this.panel.evt.emit('onPanelItemEvent', {\n panelItemName: this.model.id!,\n panelItemEventName: PanelItemEventName.ENTER,\n event,\n });\n }\n}\n","import { IPanelField } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, resolveComponent, h } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelFieldController } from './panel-field.controller';\nimport './panel-field.scss';\n\nexport const PanelField = defineComponent({\n name: 'IBizPanelField',\n props: {\n modelData: {\n type: Object as PropType<IPanelField>,\n required: true,\n },\n controller: {\n type: PanelFieldController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-field');\n\n // 类名控制\n const classArr = computed(() => {\n const { id } = props.modelData;\n const result: Array<string | false> = [ns.b(), ns.m(id)];\n result.push(...props.controller.containerClass);\n return result;\n });\n\n const onValueChange = (val: unknown, name?: string): void => {\n props.controller.setDataValue(val, name);\n };\n\n return {\n ns,\n classArr,\n onValueChange,\n };\n },\n render() {\n // 编辑器内容\n let editor = null;\n if (this.controller.data) {\n const editorProps = {\n value: this.controller.value,\n data: this.controller.data,\n controller: this.controller.editor,\n disabled: this.controller.state.disabled,\n class: this.ns.b('content'),\n readonly: this.controller.model.editor!.readOnly,\n onChange: this.onValueChange,\n onFocus: (event: MouseEvent) => this.controller.onFocus(event),\n onBlur: (event: MouseEvent) => this.controller.onBlur(event),\n onEnter: (event: MouseEvent) => this.controller.onEnter(event),\n };\n if (this.$slots.default) {\n editor = this.$slots.default(editorProps);\n } else if (this.controller.editorProvider) {\n const component = resolveComponent(\n this.controller.editorProvider.formEditor,\n );\n editor = h(component, {\n ...editorProps,\n });\n } else {\n editor = <not-supported-editor modelData={this.modelData.editor} />;\n }\n }\n\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n >\n {editor}\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { PanelFieldController } from './panel-field.controller';\n\n/**\n * 面板属性适配器\n *\n * @export\n * @class PanelFieldProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelFieldProvider implements IPanelItemProvider {\n component: string = 'IBizPanelField';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelFieldController> {\n const c = new PanelFieldController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { PanelField } from './panel-field';\nimport { PanelFieldProvider } from './panel-field.provider';\n\nexport * from './panel-field.controller';\n\nexport const IBizPanelField = withInstall(PanelField, function (v: App) {\n v.component(PanelField.name, PanelField);\n registerPanelItemProvider('FIELD', () => new PanelFieldProvider());\n});\n\nexport default IBizPanelField;\n","import { IPanelRawItem } from '@ibiz/model-core';\nimport { PanelItemController } from '@ibiz-template/runtime';\n\n/**\n * 面板按钮控制器\n *\n * @export\n * @class PanelRawItemController\n * @extends {PanelItemController<IPanelRawItem>}\n */\nexport class PanelRawItemController extends PanelItemController<IPanelRawItem> {\n /**\n * 父容器数据对象数据\n * @author lxm\n * @date 2023-07-15 01:33:58\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.dataParent.data!;\n }\n\n /**\n * 初始化\n *\n * @author lxm\n * @date 2022-08-24 20:08:42\n * @protected\n * @returns {*} {Promise<void>}\n */\n protected async onInit(): Promise<void> {\n await super.onInit();\n }\n}\n","import { IPanelRawItem } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType } from 'vue';\nimport { useNamespace } from '../../use';\nimport { PanelRawItemController } from './panel-rawitem.controller';\nimport './panel-rawitem.scss';\n\nexport const PanelRawItem = defineComponent({\n name: 'IBizPanelRawItem',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: PanelRawItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-rawitem');\n\n // 类名控制\n const classArr = computed(() => {\n const { id } = props.modelData;\n const result: Array<string | false> = [ns.b(), ns.m(id)];\n result.push(...props.controller.containerClass);\n return result;\n });\n\n return {\n ns,\n classArr,\n };\n },\n render() {\n // 动态控制显示\n if (!this.controller.state.visible) {\n return;\n }\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n >\n <iBizRawItem rawItem={this.modelData}></iBizRawItem>\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { PanelRawItemController } from './panel-rawitem.controller';\n\n/**\n * 面板属性适配器\n *\n * @export\n * @class PanelRawItemProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelRawItemProvider implements IPanelItemProvider {\n component: string = 'IBizPanelRawItem';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelRawItemController> {\n const c = new PanelRawItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '../../util';\nimport { PanelRawItem } from './panel-rawitem';\nimport { PanelRawItemProvider } from './panel-rawitem.provider';\n\nexport * from './panel-rawitem.controller';\n\nexport const IBizPanelRawItem = withInstall(PanelRawItem, function (v: App) {\n v.component(PanelRawItem.name, PanelRawItem);\n registerPanelItemProvider('RAWITEM', () => new PanelRawItemProvider());\n registerPanelItemProvider(\n 'RAWITEM_STATIC_IMAGE',\n () => new PanelRawItemProvider(),\n );\n});\n\nexport default IBizPanelRawItem;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 多项数据容器项状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class MultiDataContainerItemState\n * @extends {PanelItemState}\n */\nexport class MultiDataContainerItemState extends PanelItemState {\n /**\n * 多项数据容器数据\n * @author lxm\n * @date 2023-07-14 12:07:45\n * @type {(IData | IData[])}\n */\n data: IData = {};\n}\n","import {\n getAllPanelField,\n IPanelController,\n IPanelDataContainerController,\n IPanelItemContainerController,\n IPanelItemController,\n isDataContainer,\n PanelData,\n PanelNotifyState,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem, IPanelTabPanel } from '@ibiz/model-core';\nimport { MultiDataContainerItemState } from './multi-data-container-itm.state';\nimport { MultiDataContainerController } from './multi-data-container.controller';\n\n/**\n * 多项数据容器每一个数据项的控制器\n * @author lxm\n * @date 2023-09-05 05:04:01\n * @export\n * @class MultiDataContainerItemController\n * @extends {PanelItemController<IPanelContainer>}\n * @implements {IPanelDataContainerController}\n */\nexport class MultiDataContainerItemController\n implements IPanelDataContainerController\n{\n state = new MultiDataContainerItemState();\n\n readonly isDataContainer = true;\n\n get data(): IData {\n return this.state.data;\n }\n\n /**\n * 所有面板成员的控制器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemController }}\n */\n panelItems: { [key: string]: IPanelItemController } = {};\n\n /**\n * Creates an instance of PanelItemController.\n * @author lxm\n * @date 2023-04-27 06:37:12\n * @param {T} model 面板成员模型\n * @param {PanelController} panel 面板控制器\n * @param {PanelItemController} [parent] 父容器控制器\n */\n constructor(\n public readonly model: IPanelContainer,\n public readonly panel: IPanelController,\n public readonly parent: MultiDataContainerController,\n data: PanelData,\n ) {\n this.state.data = data;\n\n const fields = getAllPanelField(this.model);\n const fieldKeys = fields.map(item => item.id!);\n\n // 面板属性变更的触发变更通知\n data._evt.on('change', key => {\n if (fieldKeys.includes(key)) {\n this.childDataChangeNotify([key]);\n }\n });\n }\n\n /**\n * 初始化方法\n * @author lxm\n * @date 2023-09-05 05:48:53\n * @return {*} {Promise<void>}\n */\n async init(): Promise<void> {\n await this.initChildrenController();\n }\n\n /**\n * 初始化面板成员控制器\n *\n * @author lxm\n * @date 2022-08-24 21:08:48\n * @protected\n */\n protected async initChildrenController(\n panelItems: IPanelItem[] | undefined = this.model.panelItems,\n panel: IPanelController = this.panel,\n parent: IPanelItemContainerController | undefined = this,\n ): Promise<void> {\n if (!panelItems) {\n return;\n }\n await Promise.all(\n panelItems.map(async panelItem => {\n // 生成面板成员控制器\n const panelItemProvider = this.parent.providers[panelItem.id!];\n if (!panelItemProvider) {\n return;\n }\n const panelItemController = await panelItemProvider.createController(\n panelItem,\n panel,\n parent,\n );\n this.panelItems[panelItem.id!] = panelItemController;\n // 有子成员的,且不是数据容器的。生成子控制器\n if (\n (panelItem as IPanelContainer).panelItems?.length &&\n !isDataContainer(panelItem)\n ) {\n await this.initChildrenController(\n (panelItem as IPanelContainer).panelItems,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n } else if ((panelItem as IPanelTabPanel).panelTabPages?.length) {\n await this.initChildrenController(\n (panelItem as IPanelTabPanel).panelTabPages,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n }\n }),\n );\n }\n\n async dataChangeNotify(_names: string[]): Promise<void> {\n // 不需要实现\n }\n\n async childDataChangeNotify(names: string[]): Promise<void> {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.dataChangeNotify(names);\n });\n }\n\n async panelStateNotify(state: PanelNotifyState): Promise<void> {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.panelStateNotify(state);\n });\n }\n\n async setDataValue(name: string, value: unknown): Promise<void> {\n if (\n Object.prototype.hasOwnProperty.call(this.state.data, name) &&\n this.state.data[name] === value\n ) {\n // *`面板里没有属性${name}或者${name}的值未发生改变`\n return;\n }\n\n // 改变值\n this.state.data[name] = value;\n this.childDataChangeNotify([name]);\n }\n\n destroy(): void {\n this.data.destroy?.();\n Object.values(this.panelItems).forEach(item => {\n item.destroy();\n });\n }\n}\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 多项数据容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class MultiDataContainerState\n * @extends {PanelItemState}\n */\nexport class MultiDataContainerState extends PanelItemState {\n /**\n * 多项数据容器数据\n * @author lxm\n * @date 2023-07-14 12:07:45\n * @type {(IData | IData[])}\n */\n items: IData[] = [];\n}\n","import {\n ModelError,\n RuntimeError,\n RuntimeModelError,\n} from '@ibiz-template/core';\nimport {\n execDELogicById,\n getAllPanelField,\n getPanelItemProvider,\n IPanelDataContainerController,\n IPanelItemProvider,\n isDataContainer,\n IViewController,\n PanelData,\n PanelItemController,\n PanelNotifyState,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem, IPanelTabPanel } from '@ibiz/model-core';\nimport { MultiDataContainerItemController } from './multi-data-container-item.controller';\nimport { MultiDataContainerState } from './multi-data-container.state';\n\n/**\n * 多项数据容器控制器\n *\n * @export\n * @class MultiDataContainerController\n * @extends {PanelItemController}\n */\nexport class MultiDataContainerController\n extends PanelItemController<IPanelContainer>\n implements IPanelDataContainerController\n{\n declare state: MultiDataContainerState;\n\n readonly isDataContainer = true;\n\n /**\n * 数据项的控制器\n *\n * @author lxm\n * @date 2023-09-05 05:35:25\n * @type {MultiDataContainerItemController[]}\n */\n dataItems: MultiDataContainerItemController[] = [];\n\n /**\n * 所有面板成员的适配器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemProvider }}\n */\n providers: { [key: string]: IPanelItemProvider } = {};\n\n /**\n * 多项数据容器,根据数据模式\n * @author lxm\n * @date 2023-07-14 10:59:02\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.state.items;\n }\n\n protected createState(): MultiDataContainerState {\n return new MultiDataContainerState(this.parent?.state);\n }\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n await this.initPanelItemProviders();\n this.initContainerData();\n }\n\n /**\n * 初始化面板成员控制器\n *\n * @author lxm\n * @date 2022-08-24 21:08:48\n * @protected\n */\n protected async initPanelItemProviders(\n panelItems: IPanelItem[] | undefined = this.model.panelItems,\n ): Promise<void> {\n if (!panelItems) {\n return;\n }\n await Promise.all(\n panelItems.map(async panelItem => {\n // 生成面板成员控制器\n const panelItemProvider = await getPanelItemProvider(panelItem);\n if (!panelItemProvider) {\n return;\n }\n this.providers[panelItem.id!] = panelItemProvider;\n // 有子成员的,且不是数据容器的。生成子控制器\n if (\n (panelItem as IPanelContainer).panelItems?.length &&\n !isDataContainer(panelItem)\n ) {\n await this.initPanelItemProviders(\n (panelItem as IPanelContainer).panelItems,\n );\n }\n if ((panelItem as IPanelTabPanel).panelTabPages?.length) {\n await this.initPanelItemProviders(\n (panelItem as IPanelTabPanel).panelTabPages,\n );\n }\n }),\n );\n }\n\n /**\n * 根据来源类型初始化容器数据\n * @author lxm\n * @date 2023-08-04 03:05:59\n * @protected\n */\n protected initContainerData(): void {\n const { dataSourceType, dataName } = this.model;\n switch (dataSourceType) {\n case 'DEACTION':\n case 'DEDATASET':\n this.setDataByDeMethod();\n break;\n case 'APPGLOBALPARAM':\n this.setDataByAppGlobalParam();\n break;\n case 'DELOGIC':\n this.setDataByDeLogic();\n break;\n case 'TOPVIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.getTopView(), dataName);\n break;\n }\n case 'VIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.view, dataName);\n break;\n }\n default:\n throw new ModelError(this.model, `数据源类型${dataSourceType}暂未支持`);\n }\n }\n\n /**\n * 面板状态变更通知\n *\n * @author lxm\n * @date 2022-09-20 18:09:07\n */\n childrenStateNotify(state: PanelNotifyState): void {\n this.dataItems.forEach(dataItem => {\n dataItem.panelStateNotify(state);\n });\n }\n\n /**\n * 设置数据集合\n * @author lxm\n * @date 2023-09-05 05:42:09\n * @param {IData[]} items\n */\n async setData(items: IData[]): Promise<void> {\n const fields = getAllPanelField(this.model);\n const _items = items.map(item => new PanelData(fields, item));\n\n this.dataItems = _items.map(item => {\n return new MultiDataContainerItemController(\n this.model,\n this.panel,\n this,\n item,\n );\n });\n if (this.dataItems.length) {\n await Promise.all(\n this.dataItems.map(controller => {\n return controller.init();\n }),\n );\n }\n this.state.items = _items;\n this.childrenStateNotify(PanelNotifyState.LOAD);\n }\n\n /**\n * 通过实体设置视图逻辑\n * @author lxm\n * @date 2023-08-04 03:00:31\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeLogic(): Promise<void> {\n const { appDataEntityId, appDELogicId } = this.model;\n if (!appDELogicId) {\n throw new RuntimeModelError(this.model, '没有配置实体逻辑');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n\n const data = await execDELogicById(\n appDELogicId,\n appDataEntityId,\n this.panel.context,\n [],\n this.panel.params,\n );\n\n if (!data) {\n throw new RuntimeError(`实体逻辑${appDELogicId}没有返回值`);\n }\n\n this.setData(data as IData[]);\n }\n\n /**\n * 设置全局变量为当前容器数据\n * @author lxm\n * @date 2023-08-04 01:55:07\n * @protected\n */\n protected setDataByAppGlobalParam(): void {\n const { dataName } = this.model;\n const originData = dataName ? ibiz.appData![dataName] : ibiz.appData!;\n if (originData) {\n this.setData(originData as IData[]);\n } else {\n ibiz.log.error(`全局变量里没有${dataName}属性`);\n }\n }\n\n /**\n * 请求实体行为并把返回值设置为当前容器的数据\n * @author lxm\n * @date 2023-08-04 11:47:17\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeMethod(): Promise<void> {\n const { appDEMethodId, appDataEntityId } = this.model;\n if (!appDEMethodId) {\n throw new RuntimeModelError(this.model, '没有配置实体行为');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n const app = ibiz.hub.getApp(this.panel.context.srfappid);\n const res = await app.deService.exec(\n appDataEntityId,\n appDEMethodId,\n this.panel.context,\n [],\n this.panel.params,\n );\n if (res.ok && res.data) {\n this.setData(res.data as IData[]);\n }\n }\n\n /**\n * 绑定指定视图会话的变量\n * @author lxm\n * @date 2023-07-14 02:03:56\n * @protected\n * @param {IViewController} view 绑定视图控制器\n * @param {string} dataName 变量名称\n */\n protected bindViewData(view: IViewController, dataName: string): void {\n if (!Object.prototype.hasOwnProperty.call(view.state, dataName)) {\n ibiz.log.error(`绑定视图的会话不存在${dataName}`);\n return;\n }\n const updateData = (): void => {\n const originData = (view.state as IData)[dataName] as IData[];\n if (originData) {\n this.setData(originData);\n } else {\n ibiz.log.error(`视图state里没有${dataName}属性`);\n }\n };\n updateData(); // 先绑定一次\n\n // 每次视图数据变更之后更新一下\n view.evt.on('onDataChange', () => {\n updateData();\n });\n }\n\n setDataValue(_name: string, _value: unknown): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n destroy(): void {\n super.destroy();\n this.dataItems.forEach(item => {\n item.destroy();\n });\n }\n}\n","import {\n IPanelItemProvider,\n IPanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem } from '@ibiz/model-core';\nimport {\n computed,\n defineComponent,\n inject,\n PropType,\n reactive,\n VNode,\n watch,\n} from 'vue';\nimport { useNamespace } from '../../use';\nimport { MultiDataContainerController } from './multi-data-container.controller';\nimport './multi-data-container.scss';\n\nexport const MultiDataContainer = defineComponent({\n name: 'IBizMultiDataContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: MultiDataContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('multi-data-container');\n const { id } = props.modelData;\n\n // 面板成员state响应式\n watch(\n () => props.controller.state.items,\n () => {\n props.controller.dataItems.forEach(item => {\n item.state = reactive(item.state);\n\n const keys = Object.keys(item.panelItems);\n keys.forEach(key => {\n const panelItem = item.panelItems[key];\n panelItem.state = reactive(panelItem.state);\n });\n });\n },\n { immediate: true },\n );\n\n // 获取上层的绘制函数\n const renderPanelItem = inject<\n (\n panelItem: IPanelItem,\n options?: {\n providers: {\n [key: string]: IPanelItemProvider;\n };\n panelItems: {\n [key: string]: IPanelItemController;\n };\n },\n ) => VNode | null\n >('renderPanelItem')!;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ...props.controller.containerClass,\n ];\n return result;\n });\n\n return { ns, classArr, renderPanelItem };\n },\n render() {\n let content: VNode | VNode[];\n if (this.$slots.default) {\n content = this.$slots.default();\n } else {\n // 内容区默认插槽处理,封装app-col\n content = this.controller.state.items.map((_item, index) => {\n const itemController = this.controller.dataItems[index];\n return (\n <iBizRow class={this.ns.b('content')} layout={this.modelData.layout}>\n {this.modelData.panelItems?.map(panelItem => {\n const childController = itemController.panelItems[panelItem.id!];\n return (\n <iBizCol\n layoutPos={panelItem.layoutPos}\n state={childController.state}\n >\n {this.renderPanelItem(panelItem, {\n providers: this.controller.providers,\n panelItems: itemController.panelItems,\n })}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n });\n }\n return <div class={this.classArr}>{content}</div>;\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { MultiDataContainerController } from './multi-data-container.controller';\n\n/**\n * 多项数据容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class MultiDataContainerProvider\n * @implements {EditorProvider}\n */\nexport class MultiDataContainerProvider implements IPanelItemProvider {\n component: string = 'IBizMultiDataContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new MultiDataContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { MultiDataContainer } from './multi-data-container';\nimport { MultiDataContainerProvider } from './multi-data-container.provider';\nimport { MultiDataContainerState } from './multi-data-container.state';\nimport { MultiDataContainerController } from './multi-data-container.controller';\n\nexport { MultiDataContainerState, MultiDataContainerController };\n\nexport const IBizMultiDataContainer = withInstall(\n MultiDataContainer,\n function (v: App) {\n v.component(MultiDataContainer.name, MultiDataContainer);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_MULTIDATA',\n () => new MultiDataContainerProvider(),\n );\n },\n);\n\nexport default IBizMultiDataContainer;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 单项数据容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class SingleDataContainerState\n * @extends {PanelItemState}\n */\nexport class SingleDataContainerState extends PanelItemState {\n /**\n * 单项数据容器数据\n * @author lxm\n * @date 2023-07-14 12:07:45\n * @type {(IData | IData[])}\n */\n data: IData = {};\n}\n","import {\n ModelError,\n RuntimeError,\n RuntimeModelError,\n} from '@ibiz-template/core';\nimport {\n execDELogicById,\n getAllPanelField,\n getPanelItemProvider,\n IPanelController,\n IPanelDataContainerController,\n IPanelItemContainerController,\n IPanelItemController,\n IPanelItemProvider,\n isDataContainer,\n IViewController,\n PanelData,\n PanelItemController,\n PanelNotifyState,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem, IPanelTabPanel } from '@ibiz/model-core';\nimport { SingleDataContainerState } from './single-data-container.state';\n\n/**\n * 单项数据容器控制器\n *\n * @export\n * @class SingleDataContainerController\n * @extends {PanelItemController}\n */\nexport class SingleDataContainerController\n extends PanelItemController<IPanelContainer>\n implements IPanelDataContainerController\n{\n declare state: SingleDataContainerState;\n\n readonly isDataContainer = true;\n\n /**\n * 所有面板成员的控制器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemController }}\n */\n panelItems: { [key: string]: IPanelItemController } = {};\n\n /**\n * 所有面板成员的适配器\n *\n * @author lxm\n * @date 2022-08-24 20:08:07\n * @type {{ [key: string]: IPanelItemProvider }}\n */\n providers: { [key: string]: IPanelItemProvider } = {};\n\n /**\n * 单项数据容器,根据数据模式\n * @author lxm\n * @date 2023-07-14 10:59:02\n * @readonly\n * @type {IData}\n */\n get data(): IData {\n return this.state.data;\n }\n\n protected createState(): SingleDataContainerState {\n return new SingleDataContainerState(this.parent?.state);\n }\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n await this.initPanelItemControllers();\n this.initContainerData();\n }\n\n /**\n * 初始化面板成员控制器\n *\n * @author lxm\n * @date 2022-08-24 21:08:48\n * @protected\n */\n protected async initPanelItemControllers(\n panelItems: IPanelItem[] | undefined = this.model.panelItems,\n panel: IPanelController = this.panel,\n parent: IPanelItemContainerController | undefined = this,\n ): Promise<void> {\n if (!panelItems) {\n return;\n }\n await Promise.all(\n panelItems.map(async panelItem => {\n // 生成面板成员控制器\n const panelItemProvider = await getPanelItemProvider(panelItem);\n if (!panelItemProvider) {\n return;\n }\n this.providers[panelItem.id!] = panelItemProvider;\n const panelItemController = await panelItemProvider.createController(\n panelItem,\n panel,\n parent,\n );\n this.panelItems[panelItem.id!] = panelItemController;\n // 有子成员的,且不是数据容器的。生成子控制器\n if (\n (panelItem as IPanelContainer).panelItems?.length &&\n !isDataContainer(panelItem)\n ) {\n await this.initPanelItemControllers(\n (panelItem as IPanelContainer).panelItems,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n }\n if ((panelItem as IPanelTabPanel).panelTabPages?.length) {\n await this.initPanelItemControllers(\n (panelItem as IPanelTabPanel).panelTabPages,\n panel,\n panelItemController as IPanelItemContainerController,\n );\n }\n }),\n );\n }\n\n /**\n * 根据来源类型初始化容器数据\n * @author lxm\n * @date 2023-08-04 03:05:59\n * @protected\n */\n protected initContainerData(): void {\n const { dataSourceType, dataName } = this.model;\n switch (dataSourceType) {\n case 'DEACTION':\n case 'DEDATASET':\n this.setDataByDeMethod();\n break;\n case 'APPGLOBALPARAM':\n this.setDataByAppGlobalParam();\n break;\n case 'DELOGIC':\n this.setDataByDeLogic();\n break;\n case 'TOPVIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.getTopView(), dataName);\n break;\n }\n case 'VIEWSESSIONPARAM': {\n if (!dataName) {\n throw new RuntimeModelError(this.model, '没有配置数据对象名称');\n }\n this.bindViewData(this.panel.view, dataName);\n break;\n }\n default:\n throw new ModelError(this.model, `数据源类型${dataSourceType}暂未支持`);\n }\n }\n\n /**\n * 面板状态变更通知\n *\n * @author lxm\n * @date 2022-09-20 18:09:07\n */\n childrenStateNotify(state: PanelNotifyState): void {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.panelStateNotify(state);\n });\n }\n\n /**\n * 设置数据\n * @author lxm\n * @date 2023-09-05 05:42:09\n * @param {IData[]} items\n */\n async setData(data: IData): Promise<void> {\n const fields = getAllPanelField(this.model);\n const fieldKeys = fields.map(item => item.id!);\n const panelData = new PanelData(fields, data);\n\n // 面板属性变更的触发变更通知\n panelData._evt.on('change', key => {\n if (fieldKeys.includes(key)) {\n this.childDataChangeNotify([key]);\n }\n });\n // 清空上一个,如果存在的话。\n this.data.destroy?.();\n this.state.data = panelData;\n this.childrenStateNotify(PanelNotifyState.LOAD);\n }\n\n /**\n * 通过实体设置视图逻辑\n * @author lxm\n * @date 2023-08-04 03:00:31\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeLogic(): Promise<void> {\n const { appDataEntityId, appDELogicId } = this.model;\n if (!appDELogicId) {\n throw new RuntimeModelError(this.model, '没有配置实体逻辑');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n\n const data = await execDELogicById(\n appDELogicId,\n appDataEntityId,\n this.panel.context,\n [],\n this.panel.params,\n );\n\n if (!data) {\n throw new RuntimeError(`实体逻辑${appDELogicId}没有返回值`);\n }\n\n this.setData(data as IData);\n }\n\n /**\n * 设置全局变量为当前容器数据\n * @author lxm\n * @date 2023-08-04 01:55:07\n * @protected\n */\n protected setDataByAppGlobalParam(): void {\n const { dataName } = this.model;\n const originData = dataName ? ibiz.appData![dataName] : ibiz.appData!;\n if (originData) {\n this.setData(originData as IData);\n } else {\n ibiz.log.error(`全局变量里没有${dataName}属性`);\n }\n }\n\n /**\n * 请求实体行为并把返回值设置为当前容器的数据\n * @author lxm\n * @date 2023-08-04 11:47:17\n * @protected\n * @return {*} {Promise<void>}\n */\n protected async setDataByDeMethod(): Promise<void> {\n const { appDEMethodId, appDataEntityId } = this.model;\n if (!appDEMethodId) {\n throw new RuntimeModelError(this.model, '没有配置实体行为');\n }\n if (!appDataEntityId) {\n throw new RuntimeModelError(this.model, '没有配置实体');\n }\n const app = ibiz.hub.getApp(this.panel.context.srfappid);\n const res = await app.deService.exec(\n appDataEntityId,\n appDEMethodId,\n this.panel.context,\n [],\n this.panel.params,\n );\n if (res.ok && res.data) {\n this.setData(res.data as IData);\n }\n }\n\n /**\n * 绑定指定视图会话的变量\n * @author lxm\n * @date 2023-07-14 02:03:56\n * @protected\n * @param {IViewController} view 绑定视图控制器\n * @param {string} dataName 变量名称\n */\n protected bindViewData(view: IViewController, dataName: string): void {\n if (!Object.prototype.hasOwnProperty.call(view.state, dataName)) {\n ibiz.log.error(`绑定视图的会话不存在${dataName}`);\n return;\n }\n const updateData = (): void => {\n const originData = (view.state as IData)[dataName] as IData;\n if (originData) {\n this.setData(originData);\n } else {\n ibiz.log.error(`视图state里没有${dataName}属性`);\n }\n };\n updateData(); // 先绑定一次\n\n // 每次视图数据变更之后更新一下\n view.evt.on('onDataChange', () => {\n updateData();\n });\n }\n\n /**\n * 通知所有子面板成员面板操作过程中的数据变更\n *\n * @author lxm\n * @date 2022-09-20 18:09:40\n * @param {string[]} names\n */\n childDataChangeNotify(names: string[]): void {\n Object.values(this.panelItems).forEach(panelItem => {\n panelItem.dataChangeNotify(names);\n });\n }\n\n /**\n * 设置面板数据的值\n *\n * @param {string} name 要设置的数据的属性名称\n * @param {unknown} value 要设置的值\n */\n async setDataValue(name: string, value: unknown): Promise<void> {\n if (\n Object.prototype.hasOwnProperty.call(this.state.data, name) &&\n this.state.data[name] === value\n ) {\n // *`面板里没有属性${name}或者${name}的值未发生改变`\n return;\n }\n\n // 改变值\n this.state.data[name] = value;\n }\n\n destroy(): void {\n super.destroy();\n this.data.destroy?.();\n Object.values(this.panelItems).forEach(item => {\n item.destroy();\n });\n }\n}\n","import {\n IPanelItemProvider,\n IPanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer, IPanelItem } from '@ibiz/model-core';\nimport {\n computed,\n defineComponent,\n inject,\n PropType,\n reactive,\n VNode,\n} from 'vue';\nimport { useNamespace } from '../../use';\nimport { SingleDataContainerController } from './single-data-container.controller';\nimport './single-data-container.scss';\n\nexport const SingleDataContainer = defineComponent({\n name: 'IBizSingleDataContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: SingleDataContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('single-data-container');\n const { id } = props.modelData;\n\n // 面板成员state响应式\n const keys = Object.keys(props.controller.panelItems);\n keys.forEach(key => {\n const panelItem = props.controller.panelItems[key];\n panelItem.state = reactive(panelItem.state);\n });\n\n // 获取上层的绘制函数\n const renderPanelItem = inject<\n (\n panelItem: IPanelItem,\n options?: {\n providers: {\n [key: string]: IPanelItemProvider;\n };\n panelItems: {\n [key: string]: IPanelItemController;\n };\n },\n ) => VNode | null\n >('renderPanelItem')!;\n\n // 类名控制\n const classArr = computed(() => {\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ...props.controller.containerClass,\n ];\n return result;\n });\n\n return { ns, classArr, renderPanelItem };\n },\n render() {\n let content: VNode | VNode[];\n if (this.$slots.default) {\n content = this.$slots.default();\n } else {\n // 内容区默认插槽处理,封装app-col\n content = (\n <iBizRow class={this.ns.b('content')} layout={this.modelData.layout}>\n {this.modelData.panelItems?.map(panelItem => {\n const childController = this.controller.panelItems[panelItem.id!];\n return (\n <iBizCol\n layoutPos={panelItem.layoutPos}\n state={childController.state}\n >\n {this.renderPanelItem(panelItem, {\n providers: this.controller.providers,\n panelItems: this.controller.panelItems,\n })}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n }\n return <div class={this.classArr}>{content}</div>;\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { SingleDataContainerController } from './single-data-container.controller';\n\n/**\n * 单项数据容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class SingleDataContainerProvider\n * @implements {EditorProvider}\n */\nexport class SingleDataContainerProvider implements IPanelItemProvider {\n component: string = 'IBizSingleDataContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new SingleDataContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { SingleDataContainer } from './single-data-container';\nimport { SingleDataContainerProvider } from './single-data-container.provider';\nimport { SingleDataContainerState } from './single-data-container.state';\nimport { SingleDataContainerController } from './single-data-container.controller';\n\nexport { SingleDataContainerState, SingleDataContainerController };\n\nexport const IBizSingleDataContainer = withInstall(\n SingleDataContainer,\n function (v: App) {\n v.component(SingleDataContainer.name, SingleDataContainer);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_SINGLEDATA',\n () => new SingleDataContainerProvider(),\n );\n },\n);\n\nexport default IBizSingleDataContainer;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板栅格容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class GridContainerState\n * @extends {PanelItemState}\n */\nexport class GridContainerState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { GridContainerState } from './grid-container.state';\n\n/**\n * 面板栅格容器控制器\n *\n * @export\n * @class GridContainerController\n * @extends {PanelItemController}\n */\nexport class GridContainerController extends PanelItemController<IPanelContainer> {\n declare state: GridContainerState;\n\n protected createState(): GridContainerState {\n return new GridContainerState(this.parent?.state);\n }\n}\n","import { IFlexLayoutPos, IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, Ref, VNode } from 'vue';\nimport { useNamespace } from '../../use';\nimport { GridContainerController } from './grid-container.controller';\nimport './grid-container.scss';\n\nexport const GridContainer = defineComponent({\n name: 'IBizGridContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: GridContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('grid-container');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n result = [\n ...result,\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n const layoutModel = computed(() => {\n return { ...props.modelData.layout, layout: 'TABLE_12COL' };\n });\n\n const convertLayoutPos = (\n layoutPos: IFlexLayoutPos,\n adaptGrow: number,\n ): IFlexLayoutPos => {\n const result = {\n ...layoutPos,\n layout: 'TABLE_12COL',\n colXS: layoutPos.grow || adaptGrow,\n colSM: layoutPos.grow || adaptGrow,\n colMD: layoutPos.grow || adaptGrow,\n colLG: layoutPos.grow || adaptGrow,\n };\n delete result.grow;\n return result;\n };\n\n // 自适应列个数, 算一次记录下来,后续不用计算\n const adaptCols: Ref<undefined | number> = ref(undefined);\n // 自适应列默认占据的grow\n const adaptGrow: Ref<number> = ref(12);\n\n return {\n ns,\n classArr,\n layoutModel,\n convertLayoutPos,\n adaptGrow,\n adaptCols,\n };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n\n if (this.adaptCols === undefined) {\n // 当前已经配置的grow\n let currentGrow = 0;\n // 自适应列个数\n let adaptCols = 0;\n defaultSlots.forEach(slot => {\n const props = slot.props as IData;\n if (props && props.modelData && props.modelData.layoutPos) {\n if (typeof props.modelData.layoutPos.grow === 'number') {\n currentGrow += props.modelData.layoutPos.grow;\n } else if (typeof props.modelData.layoutPos.grow === 'undefined') {\n adaptCols += 1;\n }\n }\n });\n // 自适应列默认占据的grow\n let adaptGrow = 12;\n if (adaptCols > 0) {\n adaptGrow = (12 - currentGrow) / adaptCols;\n }\n this.adaptCols = adaptCols;\n this.adaptGrow = adaptGrow;\n }\n\n return (\n <iBizRow class={this.classArr} layout={this.layoutModel}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n return (\n <iBizCol\n layoutPos={this.convertLayoutPos(\n props.modelData.layoutPos,\n this.adaptGrow,\n )}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { GridContainerController } from './grid-container.controller';\n\n/**\n * 面板容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class GridContainerProvider\n * @implements {EditorProvider}\n */\nexport class GridContainerProvider implements IPanelItemProvider {\n component: string = 'IBizGridContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new GridContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { GridContainer } from './grid-container';\nimport { GridContainerProvider } from './grid-container.provider';\nimport { GridContainerState } from './grid-container.state';\nimport { GridContainerController } from './grid-container.controller';\n\nexport { GridContainerState, GridContainerController };\n\nexport const IBizGridContainer = withInstall(GridContainer, function (v: App) {\n v.component(GridContainer.name, GridContainer);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_GRID',\n () => new GridContainerProvider(),\n );\n});\n\nexport default IBizGridContainer;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 面板图片容器状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class PanelContainerImageState\n * @extends {PanelItemState}\n */\nexport class PanelContainerImageState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerImageState } from './panel-container-image.state';\n\n/**\n * 面板图片容器控制器\n *\n * @export\n * @class PanelContainerImageController\n * @extends {PanelItemController}\n */\nexport class PanelContainerImageController extends PanelItemController<IPanelContainer> {\n declare state: PanelContainerImageState;\n\n protected createState(): PanelContainerImageState {\n return new PanelContainerImageState(this.parent?.state);\n }\n}\n","import { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { isSvg } from '@ibiz-template/core';\nimport { useNamespace } from '../../use';\nimport { PanelContainerImageController } from './panel-container-image.controller';\nimport './panel-container-image.scss';\n\nexport const PanelContainerImage = defineComponent({\n name: 'IBizPanelContainerImage',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelContainerImageController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-container-image');\n const { id } = props.modelData;\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n result = [\n ...result,\n ...props.controller.containerClass,\n ns.is('hidden', !props.controller.state.visible),\n ];\n return result;\n });\n\n const backgroundStyle = computed(() => {\n const image = props.controller.model.sysImage;\n const styles = {};\n let imgStr = '';\n if (image?.rawContent) {\n if (isSvg(image.rawContent)) {\n imgStr = `url(data:image/svg+xml;base64,${btoa(image.rawContent)})`;\n } else {\n imgStr = `url(${image.rawContent})`;\n }\n } else if (image?.imagePath) {\n imgStr = `url(${image.imagePath})`;\n }\n if (imgStr) {\n Object.assign(styles, {\n backgroundImage: imgStr,\n });\n }\n return styles;\n });\n\n return { ns, classArr, backgroundStyle };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n const content = (\n <iBizRow slot='content' layout={this.modelData.layout}>\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n\n return (\n <iBizCol\n layoutPos={props.modelData.layoutPos}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n return (\n <div\n class={this.classArr}\n onClick={() => {\n this.controller.onClick();\n }}\n style={this.backgroundStyle}\n >\n {this.controller.model.cssStyle ? (\n <style type='text/css'>{this.controller.model.cssStyle}</style>\n ) : null}\n {content}\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerImageController } from './panel-container-image.controller';\n\n/**\n * 面板图片容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelContainerImageProvider\n * @implements {EditorProvider}\n */\nexport class PanelContainerImageProvider implements IPanelItemProvider {\n component: string = 'IBizPanelContainerImage';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelContainerImageController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PanelContainerImage } from './panel-container-image';\nimport { PanelContainerImageProvider } from './panel-container-image.provider';\nimport { PanelContainerImageState } from './panel-container-image.state';\nimport { PanelContainerImageController } from './panel-container-image.controller';\n\nexport { PanelContainerImageState, PanelContainerImageController };\n\nexport const IBizPanelContainerImage = withInstall(\n PanelContainerImage,\n function (v: App) {\n v.component(PanelContainerImage.name, PanelContainerImage);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_IMAGE',\n () => new PanelContainerImageProvider(),\n );\n },\n);\n\nexport default IBizPanelContainerImage;\n","import { defineComponent, onMounted, onUnmounted } from 'vue';\nimport { IBizContext } from '@ibiz-template/core';\nimport { toLocalOpenWFRedirectView } from '@ibiz-template/runtime';\n\nexport const AppRedirectView = defineComponent({\n setup() {\n const context = IBizContext.create(ibiz.appData?.context || {});\n\n onUnmounted(() => {\n context.destroy();\n });\n\n const { href } = window.location;\n\n async function toRedirect(): Promise<void> {\n await toLocalOpenWFRedirectView(context, href);\n }\n\n onMounted(() => ibiz.util.hiddenAppLoading());\n\n toRedirect();\n },\n render() {\n return <div>重定向跳转中</div>;\n },\n});\n","import { IViewProvider } from '@ibiz-template/runtime';\n\n/**\n * 视图适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ViewProvider\n * @implements {IViewProvider}\n */\nexport class ViewProvider implements IViewProvider {\n component: string = 'IBizView';\n}\n","import {\n getControlsByView,\n IModal,\n IViewLayoutPanelController,\n IViewProvider,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { createUUID } from 'qx-util';\nimport { IAppView } from '@ibiz/model-core';\nimport {\n defineComponent,\n h,\n PropType,\n resolveComponent,\n onActivated,\n onDeactivated,\n VNode,\n ref,\n computed,\n onMounted,\n onUnmounted,\n} from 'vue';\nimport './view.scss';\nimport { useNamespace, useViewController } from '../../use';\n\nexport const View = defineComponent({\n name: 'IBizView',\n props: {\n context: Object as PropType<IContext>,\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n modelData: { type: Object as PropType<IAppView>, required: true },\n modal: { type: Object as PropType<IModal> },\n state: { type: Object as PropType<IData> },\n provider: { type: Object as PropType<IViewProvider> },\n },\n setup() {\n const ns = useNamespace('view');\n const c = useViewController((...args) => new ViewController(...args));\n // 视图部件模型在viewlayoutPanel里面。\n const controls = getControlsByView(c.model);\n const { viewType, sysCss, codeName } = c.model;\n const typeClass = viewType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const viewClassNames = computed(() => [\n ns.b(),\n true && ns.b(typeClass),\n true && ns.m(codeName),\n true && sysCssName,\n c.state.viewMessages.TOP ? 'has-top-message' : '',\n c.state.viewMessages.BOTTOM ? 'has-bottom-message' : '',\n ]);\n\n const onLayoutPanelCreated = (\n controller: IViewLayoutPanelController,\n ): void => {\n c.setLayoutPanel(controller as IViewLayoutPanelController);\n };\n\n const container = ref<HTMLElement | null>(null);\n // todo devtool抽全局\n const key = createUUID();\n\n // 临时实现从window上取\n const devtool = (window as IData).devtool;\n onMounted(() => {\n if (devtool) {\n devtool.registerView(key, c, container);\n }\n });\n\n onUnmounted(() => {\n if (devtool) {\n devtool.unRegisterView(key);\n }\n });\n\n onActivated(() => c.onActivated());\n\n onDeactivated(() => c.onDeactivated());\n\n const renderViewMessage = (position: 'TOP' | 'BOTTOM' | 'BODY') => {\n if (c.state.isCreated) {\n const viewMessages = c.state.viewMessages[position];\n if (viewMessages?.length) {\n return (\n <view-message\n class={[ns.e(`${position.toLowerCase()}-message`)]}\n messages={viewMessages}\n ></view-message>\n );\n }\n }\n return null;\n };\n\n return {\n c,\n controls,\n viewClassNames,\n container,\n onLayoutPanelCreated,\n renderViewMessage,\n };\n },\n render() {\n let layoutPanel = null;\n if (this.c.state.isCreated) {\n // 绘制部件插槽,外部插槽优先\n const slots: IData = {\n ...this.$slots,\n };\n if (this.controls?.length) {\n this.controls.forEach(ctrl => {\n const slotKey = ctrl.name! || ctrl.id!;\n const ctrlProps = {\n context: this.c.context,\n params: this.c.params,\n };\n if (this.c.slotProps[slotKey]) {\n Object.assign(ctrlProps, this.c.slotProps[slotKey]);\n }\n // 已经有插槽的不用自己绘制了。\n const outCtrlSlot = slots[slotKey];\n if (outCtrlSlot) {\n slots[slotKey] = (): VNode => {\n return outCtrlSlot(ctrlProps);\n };\n return;\n }\n const provider = this.c.providers[slotKey];\n if (provider) {\n slots[slotKey] = (): VNode => {\n const comp = resolveComponent(provider.component) as string;\n return h(comp, {\n modelData: ctrl,\n ...ctrlProps,\n provider,\n });\n };\n }\n });\n }\n\n if (this.c.engines.length === 0) {\n layoutPanel = (\n <span style={'color:red;'}>\n 视图类型{this.modelData.viewType}暂未支持\n </span>\n );\n } else {\n // 绘制视图布局面板\n const viewLayoutPanel = this.c.model.viewLayoutPanel!;\n const provider = this.c.providers[viewLayoutPanel.name!];\n layoutPanel = h(\n resolveComponent(provider.component) as string,\n {\n modelData: viewLayoutPanel,\n context: this.c.context,\n params: this.c.params,\n provider,\n container: this.c,\n onControllerAppear: this.onLayoutPanelCreated,\n },\n slots,\n );\n }\n }\n\n return (\n <div\n ref='container'\n class={this.viewClassNames}\n v-loading={this.c.state.isLoading}\n >\n {this.renderViewMessage('TOP')}\n {layoutPanel}\n {this.renderViewMessage('BOTTOM')}\n </div>\n );\n },\n});\n","import { App } from 'vue';\nimport { registerViewProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { ViewProvider } from './view.provider';\nimport { View } from './view';\n\nexport const IBizView = withInstall(View, function (v: App) {\n v.component(View.name, View);\n registerViewProvider('DEFAULT', () => new ViewProvider());\n});\n","import qs from 'qs';\nimport { defineComponent } from 'vue';\nimport { useRouter } from 'vue-router';\n\nexport const TodoRedirect = defineComponent({\n setup() {\n const router = useRouter();\n\n const { href } = window.location;\n\n const i = href.lastIndexOf('?');\n\n const queryStr: string = decodeURIComponent(\n href.substring(i + 1, href.length),\n );\n\n if (!queryStr) {\n throw new Error(`重定向参数不足无法跳转`);\n }\n\n const params = qs.parse(queryStr, { delimiter: ';' }) as IData;\n\n const { apptype, todotype, todoid } = params;\n\n const data: IData = { srfapptype: 'pc', srfapp: '' };\n\n if (!apptype) {\n data.todourltype = 'RouterUrl';\n }\n\n async function getLinkUrl(): Promise<void> {\n const res = await ibiz.net.post(`/systodos/${todoid}/getlinkurl`, data);\n let url: string = res.data.linkurl;\n // apptype存在,带ip、端口等完整数据\n if (apptype) {\n window.location.href = url;\n } else {\n if (url.indexOf('/') !== 0) {\n url = `/${url}`;\n }\n url += `;srfwf=${todotype}`;\n router.push(`/index${url}`);\n }\n }\n\n getLinkUrl();\n },\n render() {\n return <div>待办列表重定向</div>;\n },\n});\n","import { IViewProvider } from '@ibiz-template/runtime';\n\n/**\n * 应用门户视图,实体数据看板视图适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ViewProvider\n * @implements {IViewProvider}\n */\nexport class PortalViewProvider implements IViewProvider {\n component: string = 'IBizPortalView';\n}\n","import { IModal, ViewController } from '@ibiz-template/runtime';\nimport { IAppPortalView } from '@ibiz/model-core';\nimport { defineComponent, h, PropType, resolveComponent } from 'vue';\nimport { useNamespace, useViewController } from '../../use';\n\nexport const PortalView = defineComponent({\n name: 'IBizPortalView',\n props: {\n context: Object as PropType<IContext>,\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n modelData: { type: Object as PropType<IAppPortalView>, required: true },\n modal: { type: Object as PropType<IModal> },\n state: { type: Object as PropType<IData> },\n },\n setup() {\n const ns = useNamespace('view');\n const c = useViewController((...args) => new ViewController(...args));\n // 视图部件模型在viewlayoutPanel里面。\n const controls = c.model.viewLayoutPanel?.controls || c.model.controls;\n\n const { viewType, sysCss, codeName } = c.model;\n const typeClass = viewType!.toLowerCase();\n const sysCssName = sysCss?.cssName;\n const viewClassNames = [\n ns.b(),\n true && ns.b(typeClass),\n true && ns.m(codeName),\n true && sysCssName,\n ];\n\n return { c, ns, controls, viewClassNames };\n },\n render() {\n let content = null;\n if (this.c.state.isCreated) {\n // 绘制部件插槽,外部插槽优先\n const slots: IData = {\n ...this.$slots,\n };\n if (this.controls?.length) {\n this.controls.forEach(ctrl => {\n const slotKey = ctrl.name || ctrl.id!;\n const crtlProps = {\n context: this.c.context,\n params: this.c.params,\n };\n if (this.c.slotProps[slotKey]) {\n Object.assign(crtlProps, this.c.slotProps[slotKey]);\n }\n // 已经有插槽的不用自己绘制了。\n const outCtrlSlot = slots[slotKey];\n if (outCtrlSlot) {\n slots[slotKey] = () => {\n return outCtrlSlot(crtlProps);\n };\n return;\n }\n const provider = this.c.providers[slotKey];\n if (provider) {\n slots[slotKey] = () => {\n const comp = resolveComponent(provider.component) as string;\n return h(comp, {\n modelData: ctrl,\n ...crtlProps,\n });\n };\n }\n });\n }\n\n // 绘制内容区\n if (slots.dashboard) {\n content = slots.dashboard();\n }\n }\n\n return <div class={this.viewClassNames}>{content}</div>;\n },\n});\n","import { App } from 'vue';\nimport { registerViewProvider, ViewType } from '@ibiz-template/runtime';\nimport { withInstall } from '../../util';\nimport { PortalViewProvider } from './portal-view.provider';\nimport { PortalView } from './portal-view';\n\nexport const IBizPortalView = withInstall(PortalView, function (v: App) {\n v.component(PortalView.name, PortalView);\n registerViewProvider(\n ViewType.APP_PORTAL_VIEW,\n () => new PortalViewProvider(),\n );\n registerViewProvider(ViewType.DE_PORTAL_VIEW, () => new PortalViewProvider());\n registerViewProvider(\n ViewType.DE_PORTAL_VIEW9,\n () => new PortalViewProvider(),\n );\n});\n","import {\n defineComponent,\n PropType,\n resolveComponent,\n h,\n VNode,\n reactive,\n watch,\n provide,\n} from 'vue';\nimport {\n IPanelContainer,\n IPanelField,\n IPanelItem,\n IPanelTabPanel,\n IViewLayoutPanel,\n} from '@ibiz/model-core';\nimport './view-layout-panel.scss';\nimport {\n IController,\n IControlProvider,\n IPanelItemController,\n IPanelItemProvider,\n isDataContainer,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\nimport { useControlController, useNamespace } from '../../../use';\n\n/**\n * 视图布局面板组件\n */\nexport const ViewLayoutPanelControl = defineComponent({\n name: 'IBizViewLayoutPanelControl',\n props: {\n modelData: {\n type: Object as PropType<IViewLayoutPanel>,\n required: true,\n },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n provider: { type: Object as PropType<IControlProvider> },\n container: { type: Object as PropType<IController> },\n data: Object as PropType<IData>,\n },\n setup(props, { slots }) {\n const c = useControlController(\n (...args) => new ViewLayoutPanelController(...args, props.container),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n watch(\n () => props.data,\n newVal => {\n if (newVal) {\n c.setInputData(newVal);\n c.load();\n }\n },\n {\n immediate: true,\n },\n );\n\n c.evt.on('onCreated', () => {\n // 面板成员state响应式\n const keys = Object.keys(c.panelItems);\n keys.forEach(key => {\n const panelItem = c.panelItems[key];\n panelItem.state = reactive(panelItem.state);\n });\n });\n\n /**\n * 绘制面板成员\n * @author lxm\n * @date 2023-08-25 04:09:07\n * @param {IPanelItem} panelItem\n * @return {*} {(VNode | null)}\n */\n const renderPanelItem = (\n panelItem: IPanelItem,\n options?: {\n providers: {\n [key: string]: IPanelItemProvider;\n };\n panelItems: {\n [key: string]: IPanelItemController;\n };\n },\n ): VNode | null => {\n if ((panelItem as IPanelField).hidden) {\n return null;\n }\n const { providers, panelItems } = options || c;\n const provider = providers[panelItem.id!];\n if (!provider) {\n return (\n <div>\n 暂未支持的面板项: {panelItem.id} - {panelItem.itemType}\n </div>\n );\n }\n const component = resolveComponent(provider.component);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let children: any;\n // 占位类型成员填充外部对应的插槽。\n if (panelItem.itemType === 'CTRLPOS' && slots[panelItem.id!]) {\n children = () => {\n return slots[panelItem.id!]!();\n };\n } else if (\n panelItem.itemType === 'TABPANEL' &&\n (panelItem as IPanelTabPanel).panelTabPages?.length\n ) {\n children = () => {\n return (panelItem as IPanelTabPanel).panelTabPages!.map(child => {\n return renderPanelItem(child, options);\n });\n };\n } else if (isDataContainer(panelItem)) {\n // 单项数据容器,多项数据容器不给子\n children = undefined;\n } else if ((panelItem as IPanelContainer).panelItems?.length) {\n children = () => {\n return (panelItem as IPanelContainer).panelItems!.map(child => {\n return renderPanelItem(child, options);\n });\n };\n }\n\n return h(\n component,\n {\n modelData: panelItem,\n controller: panelItems[panelItem.id!],\n key: panelItem.id,\n },\n children,\n );\n };\n\n provide('renderPanelItem', renderPanelItem);\n\n return { c, ns, renderPanelItem };\n },\n render() {\n const { state, model } = this.c;\n\n return (\n <iBizControlBase controller={this.c}>\n <iBizRow class={this.ns.b('content')} layout={{ layout: 'FLEX' }}>\n {state.isCreated &&\n (this.$slots.default\n ? this.$slots.default({\n panelItems: this.c.panelItems,\n })\n : model.rootPanelItems?.map(panelItem => {\n const subC = this.c.panelItems[panelItem.id!];\n // 视图布局面板的子默认布局改成flex\n // eslint-disable-next-line no-param-reassign\n panelItem.layoutPos!.layout = 'FLEX';\n return (\n <iBizCol layoutPos={panelItem.layoutPos} state={subC.state}>\n {this.renderPanelItem(panelItem)}\n </iBizCol>\n );\n }))}\n </iBizRow>\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 视图布局面板部件适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ViewLayoutPanelProvider\n * @implements {IControlProvider}\n */\nexport class ViewLayoutPanelProvider implements IControlProvider {\n component: string = 'IBizViewLayoutPanelControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { ViewLayoutPanelControl } from './view-layout-panel';\nimport { ViewLayoutPanelProvider } from './view-layout-panel.provider';\nimport { withInstall } from '../../../util';\n\nexport const IBizViewLayoutPanelControl = withInstall(\n ViewLayoutPanelControl,\n function (v: App) {\n v.component(ViewLayoutPanelControl.name, ViewLayoutPanelControl);\n registerControlProvider(\n ControlType.VIEW_LAYOUT_PANEL,\n () => new ViewLayoutPanelProvider(),\n );\n },\n);\n\nexport default IBizViewLayoutPanelControl;\n","import {\n defineComponent,\n PropType,\n resolveComponent,\n h,\n VNode,\n reactive,\n ComponentPublicInstance,\n watch,\n} from 'vue';\nimport {\n IPanel,\n IPanelContainer,\n IPanelField,\n IPanelItem,\n IPanelTabPanel,\n} from '@ibiz/model-core';\nimport './panel.scss';\nimport {\n IControlProvider,\n IController,\n PanelController,\n} from '@ibiz-template/runtime';\nimport { useControlController, useNamespace } from '../../../use';\n\n/**\n * 绘制面板成员\n *\n * @author lxm\n * @date 2023-02-07 05:58:43\n * @param {IPanelItem} panelItem\n * @param {PanelController} c\n * @returns {*} {(VNode | undefined)}\n */\nfunction renderPanelItem(\n panelItem: IPanelItem,\n c: PanelController,\n ins: ComponentPublicInstance,\n): VNode | undefined {\n if ((panelItem as IPanelField).hidden) {\n return;\n }\n const { providers, panelItems } = c;\n const provider = providers[panelItem.id!];\n if (!provider) {\n return (\n <div>\n 暂未支持的面板项: {panelItem.id} - {panelItem.itemType}\n </div>\n );\n }\n const component = resolveComponent(provider.component);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let children: any;\n // 占位类型成员填充外部对应的插槽。\n if (panelItem.itemType === 'CTRLPOS' && ins.$slots[panelItem.id!]) {\n children = (): VNode[] => {\n return ins.$slots[panelItem.id!]!();\n };\n } else if (\n panelItem.itemType === 'TABPANEL' &&\n (panelItem as IPanelTabPanel).panelTabPages?.length\n ) {\n children = (): (VNode | undefined)[] => {\n return (panelItem as IPanelTabPanel).panelTabPages!.map(child => {\n return renderPanelItem(child, c, ins);\n });\n };\n } else if ((panelItem as IPanelContainer).panelItems?.length) {\n children = (): (VNode | undefined)[] => {\n return (panelItem as IPanelContainer).panelItems!.map(child => {\n return renderPanelItem(child, c, ins);\n });\n };\n }\n\n return h(\n component,\n {\n modelData: panelItem,\n controller: panelItems[panelItem.id!],\n key: panelItem.id,\n },\n children,\n );\n}\n\n/**\n * 视图布局面板组件\n */\nexport const PanelControl = defineComponent({\n name: 'IBizPanelControl',\n props: {\n modelData: {\n type: Object as PropType<IPanel>,\n required: true,\n },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n provider: { type: Object as PropType<IControlProvider> },\n container: { type: Object as PropType<IController> },\n data: Object as PropType<IData>,\n loadDefault: { type: Boolean, default: true },\n },\n setup(props) {\n const c = useControlController<PanelController>(\n (...args) => new PanelController(...args, props.container),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n watch(\n () => props.data,\n newVal => {\n if (newVal) {\n c.setInputData(newVal);\n c.load();\n }\n },\n {\n immediate: true,\n },\n );\n\n c.evt.on('onCreated', () => {\n // 面板成员state响应式\n const keys = Object.keys(c.panelItems);\n keys.forEach(key => {\n const panelItem = c.panelItems[key];\n panelItem.state = reactive(panelItem.state);\n });\n });\n\n return { c, ns };\n },\n render() {\n const { state, model } = this.c;\n return (\n <iBizControlBase controller={this.c}>\n <iBizRow class={this.ns.b('content')} layout={{ layout: 'FLEX' }}>\n {state.isCreated &&\n (this.$slots.default\n ? this.$slots.default({\n panelItems: this.c.panelItems,\n })\n : model.rootPanelItems?.map(panelItem => {\n const subC = this.c.panelItems[panelItem.id!];\n // 视图布局面板的子默认布局改成flex\n // eslint-disable-next-line no-param-reassign\n panelItem.layoutPos!.layout = 'FLEX';\n return (\n <iBizCol layoutPos={panelItem.layoutPos} state={subC.state}>\n {renderPanelItem(panelItem, this.c, this)}\n </iBizCol>\n );\n }))}\n </iBizRow>\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 面板部件适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ViewLayoutPanelProvider\n * @implements {IControlProvider}\n */\nexport class PanelProvider implements IControlProvider {\n component: string = 'IBizPanelControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { PanelControl } from './panel';\nimport { PanelProvider } from './panel.provider';\nimport { withInstall } from '../../../util';\n\nexport const IBizPanelControl = withInstall(PanelControl, function (v: App) {\n v.component(PanelControl.name, PanelControl);\n registerControlProvider(ControlType.PANEL, () => new PanelProvider());\n});\n\nexport default IBizPanelControl;\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","import { RuntimeError, RuntimeModelError } from '@ibiz-template/core';\nimport {\n IPluginFactory,\n IPluginItem,\n RemotePluginConfig,\n RemotePluginItem,\n} from '@ibiz-template/runtime';\nimport { IAppPFPluginRef, ISysPFPlugin } from '@ibiz/model-core';\nimport path, { join } from 'path-browserify';\nimport { App, Plugin } from 'vue';\n\n/**\n * 插件工具类\n *\n * @author chitanda\n * @date 2022-10-21 16:10:29\n * @export\n * @class PluginFactory\n */\nexport class PluginFactory implements IPluginFactory {\n /**\n * 是否为 http || https 开头\n *\n * @author chitanda\n * @date 2022-11-07 14:11:28\n * @protected\n */\n protected urlReg = /^http[s]?:\\/\\/[^\\s]*/;\n\n /**\n * 是否已经加载过文件缓存\n *\n * @author chitanda\n * @date 2022-10-31 14:10:17\n * @protected\n * @type {Map<string, boolean>}\n */\n protected cache: Map<string, boolean> = new Map();\n\n /**\n * 本地开发测试包,只在本地开发生效\n *\n * @author chitanda\n * @date 2022-11-02 21:11:41\n * @protected\n */\n protected devPackages: Map<string, () => Promise<unknown>> = new Map();\n\n /**\n * 插件缓存\n *\n * @author chitanda\n * @date 2022-10-31 14:10:28\n * @protected\n * @type {Map<string, RemotePluginItem>}\n */\n protected pluginCache: Map<string, RemotePluginItem> = new Map();\n\n /**\n * 所有的插件\n *\n * @author chitanda\n * @date 2023-02-02 16:02:55\n * @protected\n * @type {Plugin[]}\n */\n protected pluginCodes: Plugin[] = [];\n\n /**\n * 预定义插件集合\n *\n * @author chitanda\n * @date 2023-03-09 17:03:46\n * @protected\n * @type {Map<string, IPluginItem>}\n */\n protected predefinedPlugins: Map<string, IPluginItem> = new Map();\n\n /**\n * 注册视图默认插件\n *\n * @author chitanda\n * @date 2023-02-06 21:02:10\n * @param {IPluginItem} plugin\n */\n registerPredefinedPlugin(plugin: IPluginItem): void {\n this.predefinedPlugins.set(plugin.name, plugin);\n }\n\n /**\n * 给入应用实例,将已经加载的过插件注入。主要用于多实例的情况\n *\n * @author chitanda\n * @date 2023-02-02 16:02:51\n * @param {App} app\n */\n register(app: App): void {\n this.pluginCodes.forEach(plugin => {\n app.use(plugin);\n });\n }\n\n /**\n * 加载预置插件\n *\n * @author chitanda\n * @date 2023-03-09 18:03:48\n * @param {string} name\n * @return {*} {Promise<void>}\n */\n async loadPredefinedPlugin(name: string): Promise<void> {\n if (this.predefinedPlugins.has(name)) {\n const plugin = this.predefinedPlugins.get(name)!;\n if (plugin) {\n await this.loadPluginRef(plugin.name, plugin.path);\n }\n }\n }\n\n /**\n * 插件刚加载完成回来,设置到目前所有的 vue 实例当中\n *\n * @author chitanda\n * @date 2023-02-02 17:02:38\n * @protected\n * @param {Plugin} code\n */\n protected setPluginCode(code: Plugin): void {\n this.pluginCodes.push(code);\n window.vueInstances.forEach(inst => {\n inst.use(code);\n });\n }\n\n /**\n * 设置开发插件,用于本地调试\n *\n * @author chitanda\n * @date 2022-11-02 21:11:56\n * @param {string} name\n * @param {() => Promise<unknown>} fn\n */\n setDevPlugin(name: string, fn: () => Promise<unknown>): void {\n this.devPackages.set(name, fn);\n }\n\n /**\n * 加载插件\n *\n * @author chitanda\n * @date 2022-10-31 14:10:13\n * @param {ISysPFPlugin} plugin\n * @return {*} {Promise<boolean>}\n */\n async loadPlugin(plugin: ISysPFPlugin): Promise<boolean> {\n if (plugin.runtimeObject === true) {\n const pluginRef = plugin as unknown as IAppPFPluginRef;\n if (pluginRef) {\n try {\n await this.loadPluginRef(\n pluginRef.rtobjectName!,\n pluginRef.rtobjectRepo!,\n );\n } catch (error) {\n throw new RuntimeModelError(pluginRef, `配置加载失败`);\n }\n }\n }\n return false;\n }\n\n /**\n * 加载应用插件\n *\n * @author chitanda\n * @date 2022-10-31 16:10:57\n * @param {IPSAppPFPluginRef} pluginRef\n * @return {*} {Promise<boolean>}\n */\n async loadPluginRef(\n rtObjectName: string,\n rtObjectRepo: string,\n ): Promise<boolean> {\n if (this.pluginCache.has(rtObjectName)) {\n return true;\n }\n let configData: unknown = null;\n const fn = this.devPackages.get(rtObjectName);\n if (fn) {\n configData = await fn();\n } else {\n const pluginPath: string = rtObjectRepo;\n const configUrl = this.urlReg.test(pluginPath)\n ? `${pluginPath}/package.json`\n : `${ibiz.env.pluginBaseUrl}/${join(pluginPath, 'package.json')}`;\n const res = await ibiz.net.axios({\n method: 'get',\n headers: { 'Access-Control-Allow-Origin': '*' },\n url: configUrl,\n });\n if (res.status !== 200) {\n throw new Error(`配置加载失败`);\n }\n configData = res.data;\n }\n const remotePlugin = new RemotePluginItem(\n rtObjectName,\n rtObjectRepo,\n configData as RemotePluginConfig,\n );\n if (remotePlugin) {\n try {\n await this.loadScript(remotePlugin);\n this.pluginCache.set(rtObjectName, remotePlugin);\n return true;\n } catch (error) {\n ibiz.log.error(error);\n }\n }\n return false;\n }\n\n /**\n * 加载插件\n *\n * @author chitanda\n * @date 2022-11-02 14:11:31\n * @protected\n * @param {RemotePluginItem} remotePlugin\n * @return {*} {Promise<void>}\n */\n protected async loadScript(remotePlugin: RemotePluginItem): Promise<void> {\n const pluginPath: string = remotePlugin.repo;\n const { name, version, system, module, styles } = remotePlugin.config;\n let scriptUrl = '';\n if (this.devPackages.has(name)) {\n scriptUrl = join(`${name}@${version}`, module);\n } else if (ibiz.env.dev) {\n scriptUrl = this.urlReg.test(pluginPath)\n ? `${pluginPath}/${join(module)}`\n : `${ibiz.env.pluginBaseUrl}/${pluginPath}/${join(module)}`;\n } else {\n scriptUrl = join(pluginPath, system);\n }\n if (scriptUrl) {\n if (this.cache.has(scriptUrl)) {\n return;\n }\n let data: IParams | null = null;\n const url = this.parseUrl(scriptUrl);\n const styleUrls = (typeof styles === 'string' ? [styles] : styles).map(\n styleUrl => this.parseUrl(path.join(pluginPath, styleUrl)),\n );\n // 本地开发模式下的包引用加载\n if (this.devPackages.has(name)) {\n const fn = this.devPackages.get(name)!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = (await fn()) as any;\n this.cache.set(scriptUrl, true);\n } else if (ibiz.env.dev) {\n data = await import(scriptUrl /* @vite-ignore */);\n } else {\n System.addImportMap({\n imports: {\n [name]: url,\n },\n styles: {\n [name]: styleUrls,\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any);\n data = await System.import(name);\n }\n if (data) {\n if (data.default) {\n this.setPluginCode(data.default);\n } else {\n throw new RuntimeError(\n `远程插件加载失败, 远程插件未找到[default]默认导出`,\n );\n }\n this.cache.set(scriptUrl, true);\n } else {\n throw new RuntimeError(\n `远程插件加载失败, 未找到文件或文件内容格式不正确`,\n );\n }\n }\n }\n\n /**\n * 编译请求文件地址\n *\n * @author chitanda\n * @date 2022-10-31 14:10:19\n * @protected\n * @param {string} script\n * @return {*} {string}\n */\n protected parseUrl(script: string): string {\n if (this.urlReg.test(script)) {\n return script;\n }\n let url: string = '';\n if (this.urlReg.test(ibiz.env.pluginBaseUrl)) {\n if (script.startsWith('/')) {\n url = ibiz.env.pluginBaseUrl + script;\n } else {\n url = `${ibiz.env.pluginBaseUrl}/${script}`;\n }\n } else {\n url = `${join(ibiz.env.pluginBaseUrl, script)}`;\n }\n const { origin, pathname } = window.location;\n if (pathname.endsWith('/') && url.startsWith('/')) {\n url = url.substring(1);\n }\n if (this.urlReg.test(url) === false) {\n url = `${origin}${pathname}${url}`;\n }\n return url;\n }\n}\n","/**\n * 必填props类型\n *\n * @author lxm\n * @date 2022-11-01 19:11:47\n * @export\n * @class RequiredProp\n * @template T type的类型\n * @template D 默认值的类型\n * @template V 校验函数的类型\n */\nexport class RequiredProp<T, D = undefined, V = undefined> {\n readonly required = true;\n\n type: T;\n\n default?: D | undefined;\n\n validator?: V | undefined;\n\n constructor(type: T, _default?: D, validator?: V) {\n if (_default) {\n this.default = _default;\n }\n if (validator) {\n this.validator = validator;\n }\n this.type = type;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { PropType } from 'vue';\nimport { RequiredProp } from '../common';\n\n/**\n * 获取编辑器通用props\n *\n * @author lxm\n * @date 2022-11-01 19:11:04\n * @export\n * @template C\n * @returns {*}\n */\nexport function getEditorProps<C>() {\n return {\n value: String,\n controller: new RequiredProp(Object as PropType<C>),\n data: new RequiredProp(Object as PropType<IData>),\n disabled: {\n type: Boolean,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n autoFocus: {\n type: Boolean,\n default: false,\n },\n overflowMode: { type: String },\n };\n}\n\n/**\n * 获取编辑器通用emits\n *\n * @author lxm\n * @date 2022-11-03 19:11:04\n * @export\n * @template V\n * @returns {*}\n */\nexport function getEditorEmits<V>() {\n return {\n /** 值变更事件 */\n change: (_value: V, _name?: string) => true,\n /** 失焦事件 */\n blur: (_event?: IData) => true,\n /** 聚焦事件 */\n focus: (_event?: IData) => true,\n /** 回车事件 */\n enter: (_event?: IData) => true,\n /** 信息文本变更事件 */\n infoTextChange: (_text: string) => true,\n };\n}\n\n/**\n * 获取表格列编辑器通用emits\n *\n * @author lxm\n * @date 2022-11-01 19:11:04\n * @export\n * @template V\n * @returns {*}\n */\nexport function getGridEditorEmits<V>() {\n return {\n /** 值变更事件 */\n change: (_value: V, _name?: string) => true,\n /** 是否正在操作事件 */\n rowSave: () => true,\n };\n}\n\n/**\n * 表格编辑器通用props\n *\n * @author lxm\n * @date 2022-11-02 10:11:02\n * @export\n * @returns {*}\n */\nexport function getGridEditorCommonProps() {\n return {\n hasError: {\n type: Boolean,\n },\n };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取文本框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getInputProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格文本框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridInputProps<C>() {\n return { ...getInputProps<C>(), ...getGridEditorCommonProps() };\n}\n\n/**\n * 获取数值框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getInputNumberProps<C>() {\n return { ...getEditorProps<C>(), value: Number };\n}\n\n/**\n * 获取表格数值框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridInputNumberProps<C>() {\n return { ...getInputNumberProps<C>(), ...getGridEditorCommonProps() };\n}\n\n/**\n * 获取ip框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getInputIpProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格ip框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridInputIpProps<C>() {\n return { ...getInputIpProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取标签的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getSpanProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number, Object, Array] };\n}\n\n/**\n * 获取表格标签的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridSpanProps<C>() {\n return { ...getSpanProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取下拉列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDropdownProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格下拉列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDropdownProps<C>() {\n return { ...getDropdownProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取选项框列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCheckboxListProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格选项框列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCheckboxListProps<C>() {\n return { ...getCheckboxListProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取选项框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCheckboxProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格选项框列表的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCheckboxProps<C>() {\n return { ...getCheckboxProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取数据选择的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDataPickerProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Array, Object, Number] };\n}\n\n/**\n * 获取表格数据选择的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDataPickerProps<C>() {\n return { ...getDataPickerProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取日期选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDatePickerProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格日期选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDatePickerProps<C>() {\n return { ...getDatePickerProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取时间范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getDateRangeProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格时间范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridDateRangeProps<C>() {\n return { ...getDateRangeProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取列表框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getListBoxProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格列表框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridListBoxProps<C>() {\n return { ...getListBoxProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取数值范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getNumberRangeProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格数值范围的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridNumberRangeProps<C>() {\n return { ...getNumberRangeProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取单选框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getRadioProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格单选框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridRadioProps<C>() {\n return { ...getRadioProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取评分器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getRateProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格评分器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridRateProps<C>() {\n return { ...getRateProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取直接内容的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getRawProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number, Array] };\n}\n\n/**\n * 获取表格步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridRawProps<C>() {\n return { ...getRawProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取滑动输入条的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getSliderProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格滑动输入条的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridSliderProps<C>() {\n return { ...getSliderProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getStepperProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridStepperProps<C>() {\n return { ...getStepperProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取开关的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getSwitchProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格步进器的props\n *\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridSwitchProps<C>() {\n return { ...getSwitchProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取上传的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getUploadProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格上传的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridUploadProps<C>() {\n return { ...getUploadProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取自动完成的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getAutoCompleteProps<C>() {\n return { ...getEditorProps<C>(), value: [String, Number] };\n}\n\n/**\n * 获取表格自动完成的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridAutoCompleteProps<C>() {\n return { ...getAutoCompleteProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取代码编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCodeProps<C>() {\n return {\n ...getEditorProps<C>(),\n value: String,\n language: {\n type: String,\n },\n theme: {\n type: String,\n },\n };\n}\n\n/**\n * 获取表格代码编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCodeProps<C>() {\n return { ...getCodeProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取html编辑框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getHtmlProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格html编辑框的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridHtmlProps<C>() {\n return { ...getHtmlProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取MARKDOWN的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getMarkDownProps<C>() {\n return {\n ...getEditorProps<C>(),\n data: { type: Object, required: false },\n controller: { type: Object, required: false },\n disabled: {\n type: Boolean,\n required: false,\n },\n };\n}\n\n/**\n * 获取表格MARKDOWN的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridMarkDownProps<C>() {\n return { ...getMarkDownProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取数组编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getArrayProps<C>() {\n return { ...getEditorProps<C>(), value: [Array<string>, Array<number>] };\n}\n\n/**\n * 获取表格数组编辑器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridArrayProps<C>() {\n return { ...getArrayProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取级联选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getCascaderProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格级联选择器的props\n *\n * @author lxm\n * @date 2022-11-01 19:11:12\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridCascaderProps<C>() {\n return { ...getCascaderProps<C>(), ...getGridEditorCommonProps() };\n}\n","import { getEditorProps, getGridEditorCommonProps } from './common';\n\n/**\n * 获取颜色选择器的props\n *\n * @author zzq\n * @date 2323-8-14 19:42:00\n * @export\n * @template C\n * @returns {*}\n */\nexport function getColorPickerProps<C>() {\n return { ...getEditorProps<C>(), value: String };\n}\n\n/**\n * 获取表格颜色选择器的props\n *\n * @author zzq\n * @date 2323-8-14 19:42:00\n * @export\n * @template C\n * @returns {*}\n */\nexport function getGridColorPickerProps<C>() {\n return { ...getColorPickerProps<C>(), ...getGridEditorCommonProps() };\n}\n"],"names":["useClickOutside","elRef","handler","options","stop","NOOP","pause","proceed","destroy","watch","newVal","oldVal","isNil","result","onClickOutside","onBeforeUnmount","useProps","getCurrentInstance","getOrigin","val","isReactive","toRaw","usePropsWatch","key","callback","props","useForce","vue","isFunc","useForceTogether","controller","orignForce","selfForce","useController","EmptyVNode","exports","createCommentVNode","isEmptyVNode","nodes","useCtx","inject","useMobCtx","watchAndUpdateContextParams","control","watchAndUpdateState","excludeFields","excludeKeys","watchProps","changeProps","useControlController","fn","opts","ctx","provider","c","reactive","eventName","event","useEventListener","listener","cleanup","listenJSEvent","useFocusAndBlur","focus","blur","componentRef","ref","isFocus","outsideFuns","doBlur","_evt","useNamespace","block","Namespace","route2routePath","route","depth","pathNodes","index","viewName","paramsStr","params","context","srfnav","qs","appContext","routePath2string","routePath","pathStr","pathNode","routeParams","notNilEmpty","objStr","getOwnRouteContext","ownContext","excludeViewTypes","ViewType","calcResRoutePath","appDataEntityId","entity","match","getMatchResPath","currentContext","resContext","generateRoutePath","appView","currentNode","deName","calcDeCodeNameById","parseRouteViewData","_a","viewCodeName","RuntimeError","viewModel","getNestedRoutePath","noSrfNav","onRouteChange","useRoute","currentKey","RouteListener","wait","timer","item","withInstall","main","install","app","prepareControl","commonNs","controlType","sysCss","codeName","typeClass","sysCssName","ns","controlClass","renderString","value","error","OverlayContainer","component","render","QXEvent","_rootComponent","_rootProps","self","container","vm","h","data","resolve","OverlayPopoverContainer","target","createOverlayView","modal","viewShell","resolveComponent","openViewModal","overlay","openViewFloatWindow","openViewDrawer","openViewPopover","PlacementMap","getDrawerPlacement","openMode","RouterCallbackItem","from","to","RouterCallback","router","path","toFullPath","routerCallback","formatAsyncAction","isNumber","dayjs","useAsyncAction","allAsyncActions","showLength","recentAsyncActions","computed","_item","load","res","asyncActionCallBack","msg","asyncAction","findIndex","onUnmounted","useAppStore","defineStore","useZIndexStore","zIndex","increment","decrement","useUIStore","piniaInstance","createPinia","useRouterQuery","query","useRouteKey","originKey","routeKey","routeListener","view","clearAll","useViewController","provide","IBizIcon","defineComponent","icon","type","size","baseDir","default","setup","BaseUrl","env","assetsUrl","getContent","_createVNode","cssClass","imagePath","isSvg","rawContent","content","IBizRouterView","inheritAttrs","name","String","manualKey","cache","isActive","attrs","isNotNil","renderComp","tempProps","Component","_resolveComponent","newComp","IBizControlBase","required","model","onLayoutPanelCreated","inlineStyle","endsWith","state","providers","layoutPanel","slots","ctrl","$slots","length","slotKey","outCtrlSlot","ctrlProps","controlPanel","modelData","_c","_b","IBizControlShell","evt","isComplete","getControlProvider","errMsg","err","ibiz","_withDirectives","_resolveDirective","IBizViewShell","viewId","init","viewModelData","getViewProvider","$props","IBizCodeList","codeListItems","Array","codeList","emits","_text","emit","items","infoText","findCodeListItem","codelist","findItem","i","childrenItem","values","split","valueSeparator","map","text","color","textCls","immediate","emptyText","b","ControlLoadingPlaceholder","Object","PanelContainerState","PanelItemState","PanelContainerController","PanelItemController","_isSlot","s","_isVNode","PanelContainer","id","classArr","_slot","defaultSlots","layout","slot","PanelContainerProvider","panelItem","panel","parent","IBizPanelContainer","v","registerPanelItemProvider","PanelCtrlPos","on","bindControl","m","containerClass","is","visible","dev","PanelCtrlPosController","PanelCtrlPosProvider","IBizPanelCtrlPos","ScrollContainerItemController","ScrollContainerItem","ScrollContainerItemProvider","ScrollContainerController","ScrollContainer","left","top","right","bottom","slotStylle","width","height","center","log","debug","flexShrink","ScrollContainerProvider","IBizScrollContainer","NavPosState","NavPosController","navViewMsg","str","triggerEvent","expRoute","mergeLeft","Modal","ViewMode","blankRoute","openViewMsg","selfPath","tempContext","OpenAppViewCommand","rawItemParams","param","NavPos","onViewCreated","useRouter","setRouter","routeDepth","expViewRoutePath","fullPath","currentRoutePath","cacheKeys","routeOpen","viewModals","routerContent","navViewMsgs","NavPosProvider","IBizNavPos","PanelFieldState","PanelFieldController","getEditorProvider","PanelItemEventName","PanelField","push","onValueChange","editor","disabled","class","readonly","onChange","onFocus","editorProps","PanelFieldProvider","IBizPanelField","PanelRawItemController","PanelRawItem","PanelRawItemProvider","IBizPanelRawItem","MultiDataContainerItemState","MultiDataContainerItemController","fieldKeys","getAllPanelField","panelItems","panelItemProvider","panelItemController","isDataContainer","_names","names","MultiDataContainerState","MultiDataContainerController","getPanelItemProvider","dataSourceType","dataName","RuntimeModelError","ModelError","dataItem","fields","_items","PanelData","PanelNotifyState","appDELogicId","execDELogicById","originData","appDEMethodId","updateData","_name","_value","MultiDataContainer","dataItems","keys","forEach","renderPanelItem","itemController","childController","MultiDataContainerProvider","IBizMultiDataContainer","SingleDataContainerState","SingleDataContainerController","panelData","SingleDataContainer","SingleDataContainerProvider","IBizSingleDataContainer","GridContainerState","GridContainerController","GridContainer","layoutModel","convertLayoutPos","layoutPos","adaptGrow2","colXS","grow","adaptGrow","colSM","colMD","colLG","adaptCols","currentGrow","undefined","GridContainerProvider","IBizGridContainer","PanelContainerImageState","PanelContainerImageController","PanelContainerImage","backgroundStyle","image","styles","imgStr","backgroundImage","PanelContainerImageProvider","IBizPanelContainerImage","AppRedirectView","IBizContext","href","toRedirect","toLocalOpenWFRedirectView","hiddenAppLoading","onMounted","_createTextVNode","ViewProvider","View","args","ViewController","controls","getControlsByView","viewType","toLowerCase","viewClassNames","setLayoutPanel","createUUID","devtool","registerView","unRegisterView","onDeactivated","position","onActivated","renderViewMessage","viewMessages","comp","viewLayoutPanel","IBizView","registerViewProvider","TodoRedirect","queryStr","decodeURIComponent","delimiter","todotype","todoid","srfapptype","srfapp","apptype","url","window","location","indexOf","getLinkUrl","PortalViewProvider","PortalView","cssName","crtlProps","assign","IBizPortalView","ViewLayoutPanelControl","ViewLayoutPanelController","hidden","children","child","subC","ViewLayoutPanelProvider","IBizViewLayoutPanelControl","registerControlProvider","ControlType","ins","PanelControl","PanelController","loadDefault","PanelProvider","IBizPanelControl","assertPath","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","code","lastSlashIndex","_format","sep","pathObject","dir","base","posix","resolvedPath","resolvedAbsolute","cwd","isAbsolute","trailingSeparator","joined","arg","fromStart","fromEnd","fromLen","toStart","toEnd","toLen","lastCommonSep","fromCode","toCode","out","hasRoot","end","matchedSlash","ext","start","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","ret","pathBrowserify","PluginFactory","plugin","inst","pluginRef","rtObjectName","rtObjectRepo","configData","pluginPath","configUrl","join","remotePlugin","RemotePluginItem","version","system","module","scriptUrl","styleUrls","styleUrl","script","origin","pathname","RequiredProp","_default","validator","getEditorProps","getEditorEmits","_event","getGridEditorEmits","getGridEditorCommonProps","getInputProps","getGridInputProps","getInputNumberProps","getGridInputNumberProps","getInputIpProps","getGridInputIpProps","getSpanProps","getGridSpanProps","getDropdownProps","getGridDropdownProps","getCheckboxListProps","getGridCheckboxListProps","getCheckboxProps","getGridCheckboxProps","getDataPickerProps","getGridDataPickerProps","getDatePickerProps","getGridDatePickerProps","getDateRangeProps","getGridDateRangeProps","getListBoxProps","getGridListBoxProps","getNumberRangeProps","getGridNumberRangeProps","getRadioProps","getGridRadioProps","getRateProps","getGridRateProps","getRawProps","getGridRawProps","getSliderProps","getGridSliderProps","getStepperProps","getGridStepperProps","getSwitchProps","getGridSwitchProps","getUploadProps","getGridUploadProps","getAutoCompleteProps","getGridAutoCompleteProps","getCodeProps","getGridCodeProps","getHtmlProps","getGridHtmlProps","getMarkDownProps","getGridMarkDownProps","getArrayProps","getGridArrayProps","getCascaderProps","getGridCascaderProps","getColorPickerProps","getGridColorPickerProps"],"mappings":"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","x_google_ignoreList":[97]}