@ibiz-template/vue3-components 0.4.3 → 0.4.4

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 (63) hide show
  1. package/dist/index-ErDi07y2.js +14 -0
  2. package/dist/index-ErDi07y2.js.map +1 -0
  3. package/dist/index.min.css +1 -1
  4. package/dist/index.system.min.js +1 -1
  5. package/dist/{xlsx-util-Mxa6HuaG.js → xlsx-util-5UOUTynl.js} +2 -2
  6. package/dist/{xlsx-util-Mxa6HuaG.js.map → xlsx-util-5UOUTynl.js.map} +1 -1
  7. package/es/common/col/col.mjs +0 -3
  8. package/es/common/data-import2/data-import2.css +1 -1
  9. package/es/common/data-import2/data-import2.d.ts +23 -9
  10. package/es/common/data-import2/data-import2.mjs +120 -159
  11. package/es/common/data-import2-select/data-import2-select.css +1 -0
  12. package/es/common/data-import2-select/data-import2-select.d.ts +59 -0
  13. package/es/common/data-import2-select/data-import2-select.mjs +170 -0
  14. package/es/common/data-import2-table/data-import2-table.css +1 -0
  15. package/es/common/data-import2-table/data-import2-table.d.ts +56 -0
  16. package/es/common/data-import2-table/data-import2-table.mjs +104 -0
  17. package/es/common/index.mjs +4 -0
  18. package/es/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.mjs +1 -1
  19. package/es/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.provider.mjs +1 -1
  20. package/es/control/grid/row-edit-popover/row-edit-popover.css +1 -1
  21. package/es/control/tree/index.d.ts +1 -0
  22. package/es/control/tree/tree.css +1 -1
  23. package/es/control/tree/tree.d.ts +1 -0
  24. package/es/control/tree/tree.mjs +91 -53
  25. package/es/editor/index.mjs +9 -2
  26. package/es/panel-component/panel-button/panel-button.controller.mjs +4 -1
  27. package/es/view-engine/index-view.engine.d.ts +0 -7
  28. package/es/view-engine/index-view.engine.mjs +0 -37
  29. package/lib/common/col/col.cjs +0 -3
  30. package/lib/common/data-import2/data-import2.cjs +119 -157
  31. package/lib/common/data-import2/data-import2.css +1 -1
  32. package/lib/common/data-import2-select/data-import2-select.cjs +172 -0
  33. package/lib/common/data-import2-select/data-import2-select.css +1 -0
  34. package/lib/common/data-import2-table/data-import2-table.cjs +106 -0
  35. package/lib/common/data-import2-table/data-import2-table.css +1 -0
  36. package/lib/common/index.cjs +4 -0
  37. package/lib/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.cjs +1 -1
  38. package/lib/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.provider.cjs +1 -1
  39. package/lib/control/grid/row-edit-popover/row-edit-popover.css +1 -1
  40. package/lib/control/tree/tree.cjs +90 -52
  41. package/lib/control/tree/tree.css +1 -1
  42. package/lib/editor/index.cjs +9 -2
  43. package/lib/panel-component/panel-button/panel-button.controller.cjs +4 -1
  44. package/lib/view-engine/index-view.engine.cjs +0 -37
  45. package/package.json +9 -8
  46. package/dist/index-1dtzc9-X.js +0 -14
  47. package/dist/index-1dtzc9-X.js.map +0 -1
  48. package/es/_virtual/_commonjs-dynamic-modules.mjs +0 -5
  49. package/es/_virtual/pluralize.mjs +0 -3
  50. package/es/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/format-path/format-path.mjs +0 -11
  51. package/es/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/index.mjs +0 -4
  52. package/es/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/merge-model/merge-model.mjs +0 -22
  53. package/es/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/plural/plural.mjs +0 -30
  54. package/es/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/service-path-util/service-path-util.mjs +0 -187
  55. package/es/node_modules/.pnpm/pluralize@8.0.0/node_modules/pluralize/pluralize.mjs +0 -515
  56. package/lib/_virtual/_commonjs-dynamic-modules.cjs +0 -7
  57. package/lib/_virtual/pluralize.cjs +0 -5
  58. package/lib/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/format-path/format-path.cjs +0 -13
  59. package/lib/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/index.cjs +0 -14
  60. package/lib/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/merge-model/merge-model.cjs +0 -24
  61. package/lib/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/plural/plural.cjs +0 -33
  62. package/lib/node_modules/.pnpm/@ibiz-template_model-helper@0.4.3_@ibiz-template_runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/service-path-util/service-path-util.cjs +0 -189
  63. package/lib/node_modules/.pnpm/pluralize@8.0.0/node_modules/pluralize/pluralize.cjs +0 -519
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-1dtzc9-X.js","sources":["../src/common/action-toolbar/action-toolbar.tsx","../src/common/col/col.tsx","../src/common/row/row.tsx","../src/common/rawitem/rawitem.tsx","../src/common/no-data/no-data.tsx","../src/common/split/split.tsx","../src/common/split-trigger/split-trigger.tsx","../src/common/extend-action-timeline/extend-action-timeline.tsx","../src/common/view-message/view-message.tsx","../src/common/pagination/pagination.tsx","../src/common/sort-bar/sort-bar.tsx","../src/common/data-import/data-import.tsx","../node_modules/.pnpm/pluralize@8.0.0/node_modules/pluralize/pluralize.js","../node_modules/.pnpm/@ibiz-template+model-helper@0.4.3_@ibiz-template+runtime@0.4.3_ramda@0.29.1/node_modules/@ibiz-template/model-helper/out/utils/plural/plural.js","../src/common/data-import2/data-import2.tsx","../src/common/index.ts","../src/panel-component/auth-userinfo/auth-userinfo.tsx","../src/panel-component/auth-userinfo/auth-userinfo.provider.ts","../src/panel-component/auth-userinfo/index.ts","../src/panel-component/nav-pos-index/nav-pos-index.state.ts","../src/panel-component/nav-pos-index/nav-pos-index.controller.ts","../src/panel-component/nav-pos-index/nav-pos-index.tsx","../src/panel-component/nav-pos-index/nav-pos-index.provider.ts","../src/panel-component/nav-pos-index/index.ts","../src/panel-component/nav-tabs/nav-tabs.state.ts","../src/panel-component/nav-tabs/nav-tabs.controller.ts","../src/panel-component/nav-tabs/nav-tabs.tsx","../src/panel-component/nav-tabs/nav-tabs.provider.ts","../src/panel-component/nav-tabs/index.ts","../src/panel-component/panel-button/panel-button.state.ts","../src/panel-component/panel-button/panel-button.controller.ts","../src/panel-component/panel-button/panel-button.tsx","../src/panel-component/panel-button/panel-button.provider.ts","../src/panel-component/panel-button/index.ts","../src/panel-component/panel-app-title/panel-app-title.state.ts","../src/panel-component/panel-app-title/panel-app-title.controller.ts","../src/panel-component/panel-app-title/panel-app-title.tsx","../src/panel-component/panel-app-title/panel-app-title.provider.ts","../src/panel-component/panel-app-title/index.ts","../src/panel-component/panel-app-header/panel-app-header.tsx","../src/panel-component/panel-app-header/panel-app-header.provider.ts","../src/panel-component/panel-app-header/index.ts","../src/panel-component/panel-view-header/panel-view-header.tsx","../src/panel-component/panel-view-header/panel-view-header.provider.ts","../src/panel-component/panel-view-header/index.ts","../src/panel-component/panel-exp-header/panel-exp-header.tsx","../src/panel-component/panel-exp-header/panel-exp-header.provider.ts","../src/panel-component/panel-exp-header/index.ts","../src/panel-component/panel-view-content/panel-view-content.tsx","../src/panel-component/panel-view-content/panel-view-content.provider.ts","../src/panel-component/panel-view-content/index.ts","../src/panel-component/panel-tab-panel/panel-tab-panel.tsx","../src/panel-component/panel-tab-panel/panel-tab-panel.provider.ts","../src/panel-component/panel-tab-panel/index.ts","../src/panel-component/panel-tab-page/panel-tab-page.tsx","../src/panel-component/panel-tab-page/panel-tab-page.provider.ts","../src/panel-component/panel-tab-page/index.ts","../src/panel-component/split-container/split-container.controller.ts","../src/panel-component/split-container/split-container.tsx","../src/panel-component/split-container/split-container.provider.ts","../src/panel-component/split-container/index.ts","../src/panel-component/panel-index-view-search/panel-index-view-search.tsx","../src/panel-component/panel-index-view-search/panel-index-view-search.provider.ts","../src/panel-component/panel-index-view-search/index.ts","../src/panel-component/panel-app-login-view/panel-app-login-view.state.ts","../src/panel-component/panel-app-login-view/panel-app-login-view.controller.ts","../src/panel-component/panel-app-login-view/panel-app-login-view.tsx","../src/panel-component/panel-app-login-view/panel-app-login-view.provider.ts","../src/panel-component/panel-app-login-view/index.ts","../src/panel-component/panel-remember-me/panel-remember-me.state.ts","../src/panel-component/panel-remember-me/panel-remember-me.controller.ts","../src/panel-component/panel-remember-me/panel-remember-me.tsx","../src/panel-component/panel-remember-me/panel-remember-me.provider.ts","../src/panel-component/panel-remember-me/index.ts","../src/panel-component/index-actions/index-actions.tsx","../src/panel-component/index-actions/index-actions.provider.ts","../src/panel-component/index-actions/index.ts","../src/panel-component/panel-container-group/panel-container-group.state.ts","../src/panel-component/panel-container-group/panel-container-group.controller.ts","../src/panel-component/panel-container-group/panel-container-group.provider.ts","../src/panel-component/panel-container-group/panel-container-group.tsx","../src/panel-component/panel-container-group/index.ts","../src/panel-component/user-message/async-action/async-action.tsx","../src/panel-component/user-message/async-action-preview/async-action-preview.tsx","../src/panel-component/user-message/async-action/async-action.provider.ts","../src/panel-component/user-message/user-message.tsx","../src/panel-component/user-message/user-message.provider.ts","../src/panel-component/user-message/index.ts","../src/panel-component/searchform-buttons/searchform-buttons.controller.ts","../src/panel-component/searchform-buttons/searchform-buttons.tsx","../src/panel-component/searchform-buttons/searchform-buttons.provider.ts","../src/panel-component/searchform-buttons/index.ts","../src/panel-component/index.ts","../src/control/app-menu/app-menu.tsx","../src/control/app-menu/app-menu.provider.ts","../src/control/app-menu/index.ts","../src/control/app-menu-icon-view/app-menu-icon-view.provider.ts","../src/control/app-menu-icon-view/app-menu-icon-view.tsx","../src/control/app-menu-icon-view/index.ts","../src/control/grid/grid-column/grid-field-column/grid-field-column.tsx","../src/control/grid/grid-column/grid-field-column/grid-field-column.provider.ts","../src/control/grid/grid-column/grid-field-column/index.ts","../src/control/grid/grid-column/grid-ua-column/grid-ua-column.tsx","../src/control/grid/grid-column/grid-ua-column/grid-ua-column.provider.ts","../src/control/grid/grid-column/grid-ua-column/index.ts","../src/control/grid/grid-column/grid-field-edit-column/cell-edit.ts","../src/control/grid/grid-column/grid-field-edit-column/row-edit.ts","../src/control/grid/grid-column/grid-field-edit-column/all-edit.ts","../src/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.tsx","../src/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.provider.ts","../src/control/grid/grid-column/grid-field-edit-column/grid-edit-item/grid-edit-item.tsx","../src/control/grid/grid-column/grid-field-edit-column/index.ts","../src/control/grid/grid-column/grid-group-column/grid-group-column.tsx","../src/control/grid/grid-column/grid-group-column/grid-group-column.provider.ts","../src/control/grid/grid-column/grid-group-column/index.ts","../src/control/grid/row-edit-popover/row-edit-popover.tsx","../src/control/grid/grid/grid-control.util.ts","../src/control/grid/row-edit-popover/use-row-edit-popover.tsx","../src/util/loading-util/loading-util.ts","../src/util/message-util/message-util.ts","../src/util/modal-util/modal-util.ts","../src/util/confirm-util/confirm-util.ts","../src/util/notification-util/notification-util.ts","../src/util/open-view-util/open-view-util.ts","../src/util/app-popover/app-popover-component.tsx","../src/util/app-modal/app-modal-component.tsx","../src/util/app-drawer/app-drawer-component.tsx","../src/util/app-float-window/app-float-window-component.tsx","../src/util/overlay-controller/overlay-controller.ts","../src/util/pagination/use-pagination.ts","../src/control/grid/grid/grid.tsx","../src/control/grid/grid/grid.provider.ts","../src/control/grid/grid/index.ts","../src/control/list/list.tsx","../src/control/list/list.provider.ts","../src/control/list/index.ts","../src/control/form/search-form/search-form.tsx","../src/control/form/search-form/search-form.provider.ts","../src/control/form/search-form/index.ts","../src/control/form/form-detail/form-group-panel/form-group-panel.tsx","../src/control/form/form-detail/form-group-panel/form-group-panel.provider.ts","../src/control/form/form-detail/form-group-panel/index.ts","../src/control/form/form-detail/form-item/form-item.tsx","../src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx","../src/control/form/form-detail/form-item/form-item.provider.ts","../src/control/form/form-detail/form-item/index.ts","../src/control/form/form-detail/form-page/form-page.tsx","../src/control/form/form-detail/form-page/form-page-item/form-page.item.tsx","../src/control/form/form-detail/form-page/form-page.provider.ts","../src/control/form/form-detail/form-page/index.ts","../src/control/form/form-detail/form-button/form-button.tsx","../src/control/form/form-detail/form-button/form-button.provider.ts","../src/control/form/form-detail/form-button/index.ts","../src/control/form/form-detail/form-druipart/form-druipart.tsx","../src/control/form/form-detail/form-druipart/form-druipart.provider.ts","../src/control/form/form-detail/form-druipart/index.ts","../src/control/form/form-detail/form-mdctrl/form-mdctrl.tsx","../src/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.tsx","../src/control/form/form-detail/form-mdctrl/form-mdctrl-md/form-mdctrl-md.tsx","../src/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-single-form/repeater-single-form.tsx","../src/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-multi-form/repeater-multi-form.tsx","../src/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.tsx","../src/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater.tsx","../src/control/form/form-detail/form-mdctrl/form-mdctrl.provider.ts","../src/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.tsx","../src/control/form/form-detail/form-mdctrl/index.ts","../src/control/form/form-detail/form-rawitem/form-rawitem.tsx","../src/control/form/form-detail/form-rawitem/form-rawitem.provider.ts","../src/control/form/form-detail/form-rawitem/index.ts","../src/control/form/form-detail/form-tab-panel/form-tab-panel.tsx","../src/control/form/form-detail/form-tab-panel/form-tab-panel.provider.ts","../src/control/form/form-detail/form-tab-panel/index.ts","../src/control/form/form-detail/form-tab-page/form-tab-page.tsx","../src/control/form/form-detail/form-tab-page/form-tab-page.provider.ts","../src/control/form/form-detail/form-tab-page/index.ts","../src/control/form/edit-form/edit-form.provider.ts","../src/control/form/edit-form/edit-form.tsx","../src/control/form/edit-form/index.ts","../src/control/form/form/form.tsx","../src/control/form/form/index.ts","../src/control/toolbar/export-excel/export-excel.tsx","../src/control/toolbar/toolbar.tsx","../src/control/toolbar/toolbar.provider.ts","../src/control/toolbar/index.ts","../src/control/caption-bar/caption-bar.tsx","../src/control/caption-bar/caption-bar.provider.ts","../src/control/caption-bar/index.ts","../src/control/data-view/data-view.tsx","../src/control/data-view/data-view.provider.ts","../src/control/data-view/index.ts","../src/control/tree/el-tree-util.ts","../src/control/tree/tree.tsx","../src/control/tree/tree.provider.ts","../src/control/tree/index.ts","../src/control/pickup-view-panel/pickup-view-panel.tsx","../src/control/pickup-view-panel/pickup-view-panel.provider.ts","../src/control/pickup-view-panel/index.ts","../src/control/tab-exp-panel/tab-exp-panel.tsx","../src/control/tab-exp-panel/tab-exp-panel.provider.ts","../src/control/tab-exp-panel/index.ts","../src/control/exp-bar/render-util.tsx","../src/control/exp-bar/tree-exp-bar/tree-exp-bar.tsx","../src/control/exp-bar/tree-exp-bar/tree-exp-bar.provider.ts","../src/control/exp-bar/tree-exp-bar/index.ts","../src/control/exp-bar/list-exp-bar/list-exp-bar.tsx","../src/control/exp-bar/list-exp-bar/list-exp-bar.provider.ts","../src/control/exp-bar/list-exp-bar/index.ts","../src/control/exp-bar/grid-exp-bar/grid-exp-bar.tsx","../src/control/exp-bar/grid-exp-bar/grid-exp-bar.provider.ts","../src/control/exp-bar/grid-exp-bar/index.ts","../src/control/exp-bar/data-view-exp-bar/data-view-view-exp-bar.tsx","../src/control/exp-bar/data-view-exp-bar/data-view-exp-bar.provider.ts","../src/control/exp-bar/data-view-exp-bar/index.ts","../src/control/exp-bar/calendar-exp-bar/calendar-exp-bar.tsx","../src/control/exp-bar/calendar-exp-bar/calendar-exp-bar.provider.ts","../src/control/exp-bar/calendar-exp-bar/index.ts","../src/control/exp-bar/chart-exp-bar/chart-exp-bar.tsx","../src/control/exp-bar/chart-exp-bar/chart-exp-bar.provider.ts","../src/control/exp-bar/chart-exp-bar/index.ts","../src/control/search-bar/search-bar.tsx","../src/control/search-bar/search-bar.provider.ts","../src/control/search-bar/filter-tree/filter-tree.tsx","../src/control/search-bar/filter-mode-select/filter-mode-select.tsx","../src/control/search-bar/index.ts","../src/control/chart/chart.provider.ts","../src/control/chart/index.ts","../src/control/wizard-panel/wizard-panel.tsx","../src/control/wizard-panel/wizard-panel.provider.ts","../src/control/wizard-panel/index.ts","../src/control/drbar/drbar.controller.ts","../src/control/drbar/drbar.tsx","../src/control/drbar/drbar.provider.ts","../src/control/drbar/index.ts","../src/control/drtab/drtab.controller.ts","../src/control/drtab/drtab.tsx","../src/control/drtab/drtab.provider.ts","../src/control/drtab/index.ts","../src/control/dashboard/dashboard.tsx","../src/control/dashboard/dashboard-design/dashboard-design.tsx","../src/control/dashboard/custom-dashboard-container/custom-dashboard-container.tsx","../src/control/dashboard/dashboard.provider.ts","../src/control/dashboard/portlet/container-portlet/container-portlet.tsx","../src/control/dashboard/portlet/container-portlet/container-portlet.provider.ts","../src/control/dashboard/portlet/container-portlet/index.ts","../src/control/dashboard/portlet/portlet-layout/portlet-layout.tsx","../src/control/dashboard/portlet/view-portlet/view-portlet.tsx","../src/control/dashboard/portlet/view-portlet/view-portlet.provider.ts","../src/control/dashboard/portlet/view-portlet/index.ts","../src/control/dashboard/portlet/menu-portlet/app-menu-portlet/app-menu-portlet.tsx","../src/control/dashboard/portlet/menu-portlet/menu-portlet.tsx","../src/control/dashboard/portlet/menu-portlet/menu-portlet.provider.ts","../src/control/dashboard/portlet/menu-portlet/index.ts","../src/control/dashboard/portlet/chart-portlet/chart-portlet.tsx","../src/control/dashboard/portlet/chart-portlet/chart-portlet.provider.ts","../src/control/dashboard/portlet/chart-portlet/index.ts","../src/control/dashboard/portlet/rawitem-portlet/rawitem-portlet.tsx","../src/control/dashboard/portlet/rawitem-portlet/rawitem-portlet.provider.ts","../src/control/dashboard/portlet/rawitem-portlet/index.ts","../src/control/dashboard/portlet/list-portlet/list-portlet.tsx","../src/control/dashboard/portlet/list-portlet/list-portlet.provider.ts","../src/control/dashboard/portlet/list-portlet/index.ts","../src/control/dashboard/portlet/html-portlet/html-portlet.tsx","../src/control/dashboard/portlet/html-portlet/html-portlet.provider.ts","../src/control/dashboard/portlet/html-portlet/index.ts","../src/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.tsx","../src/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.provider.ts","../src/control/dashboard/portlet/actionbar-portlet/index.ts","../src/control/dashboard/index.ts","../src/control/calendar/calendar.tsx","../src/control/calendar/calendar.provider.ts","../src/control/calendar/index.ts","../src/control/kanban/kanban.tsx","../src/control/kanban/kanban.provider.ts","../src/control/kanban/index.ts","../src/control/tree-grid-ex/tree-grid-ex.tsx","../src/control/tree-grid-ex/tree-grid-ex.provider.ts","../src/control/tree-grid-ex/index.ts","../src/control/tree-grid/tree-grid.tsx","../src/control/tree-grid/tree-grid.provider.ts","../src/control/tree-grid/index.ts","../src/control/medit-view-panel/medit-view-panel.tsx","../src/control/medit-view-panel/medit-view-panel.provider.ts","../src/control/medit-view-panel/index.ts","../src/control/map/map.tsx","../src/control/map/map.provider.ts","../src/control/map/index.ts","../src/control/report-panel/report-panel.tsx","../src/control/report-panel/report-panel.provider.ts","../src/control/report-panel/report-detail/user-report-panel/user-report-panel.tsx","../src/control/report-panel/report-detail/user-report-panel/index.ts","../src/control/report-panel/report-detail/user2-report-panel/user2-report-panel.tsx","../src/control/report-panel/report-detail/user2-report-panel/index.ts","../src/control/report-panel/index.ts","../src/editor/not-supported-editor/not-supported-editor.tsx","../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/customParseFormat.js","../src/editor/span/span/span.tsx","../src/editor/span/span-link/span-link.tsx","../src/editor/span/span-editor.controller.ts","../src/editor/span/span-editor.provider.ts","../src/editor/text-box/input/input.tsx","../src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx","../src/editor/text-box/ibiz-input-ip/ibiz-input-ip.tsx","../src/editor/text-box/text-box-editor.controller.ts","../src/editor/text-box/text-box-editor.provider.ts","../src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx","../src/editor/dropdown-list/dropdown-list-editor.controller.ts","../src/editor/dropdown-list/dropdown-list-editor.provider.ts","../src/editor/check-box/ibiz-checkbox/ibiz-checkbox.tsx","../src/editor/check-box/check-box-editor.controller.ts","../src/editor/check-box/check-box-editor.provider.ts","../src/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.tsx","../src/editor/check-box-list/checkbox-list-editor.controller.ts","../src/editor/check-box-list/checkbox-list-editor.provider.ts","../src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx","../src/editor/radio-button-list/radio-button-list.controller.ts","../src/editor/radio-button-list/radio-button-list.provider.ts","../src/editor/date-picker/ibiz-date-picker/ibiz-date-picker.tsx","../src/editor/date-picker/date-picker-editor.controller.ts","../src/editor/date-picker/date-picker-editor.provider.ts","../src/editor/raw/ibiz-raw/ibiz-raw.tsx","../src/editor/raw/raw-editor.controller.ts","../src/editor/raw/raw-editor.provider.ts","../src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx","../src/editor/stepper/stepper-editor.controller.ts","../src/editor/stepper/stepper-editor.provider.ts","../src/editor/rate/ibiz-rate/ibiz-rate.tsx","../src/editor/rate/rate-editor.controller.ts","../src/editor/rate/rate-editor.provider.ts","../src/editor/switch/ibiz-switch/ibiz-switch.tsx","../src/editor/switch/switch-editor.controller.ts","../src/editor/switch/switch-editor.provider.ts","../src/editor/slider/ibiz-slider/ibiz-slider.tsx","../src/editor/slider/slider-editor.controller.ts","../src/editor/slider/slider-editor.provider.ts","../src/editor/list-box/ibiz-list-box/ibiz-list-box.tsx","../src/editor/list-box/list-box-editor.controller.ts","../src/editor/list-box/list-box-picker-editor.controller.ts","../src/editor/list-box/list-box-editor.provider.ts","../src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.tsx","../src/editor/autocomplete/autocomplete-editor.controller.ts","../src/editor/autocomplete/autocomplete-editor.provider.ts","../src/editor/upload/use/use-iview-upload.ts","../src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx","../src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx","../src/editor/upload/ibiz-image-preview/ibiz-image-preview.tsx","../src/editor/upload/upload-editor.controller.ts","../src/editor/upload/upload-editor.provider.ts","../src/editor/data-picker/ibiz-picker/ibiz-picker.tsx","../src/editor/data-picker/ibiz-mpicker/ibiz-mpicker.tsx","../src/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.tsx","../src/editor/data-picker/ibiz-picker-link/ibiz-picker-link.tsx","../src/editor/data-picker/ibiz-picker-embed-view/ibiz-picker-embed-view.tsx","../src/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.tsx","../src/editor/data-picker/picker-editor.controller.ts","../src/editor/data-picker/picker-editor.provider.ts","../src/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.tsx","../src/editor/number-range/number-range-editor.controller.ts","../src/editor/number-range/number-range-editor.provider.ts","../src/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.tsx","../src/editor/date-range/date-range-editor.controller.ts","../src/editor/date-range/date-range-editor.provider.ts","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/_virtual/_rollupPluginBabelHelpers.js","../node_modules/.pnpm/state-local@1.0.7/node_modules/state-local/lib/es/state-local.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/config/index.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/utils/curry.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/utils/isObject.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/validators/index.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/utils/compose.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/utils/deepMerge.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/utils/makeCancelable.js","../node_modules/.pnpm/@monaco-editor+loader@1.4.0_monaco-editor@0.44.0/node_modules/@monaco-editor/loader/lib/es/loader/index.js","../src/editor/code/monaco-editor/monaco-editor.tsx","../src/editor/code/code-editor.controller.ts","../src/editor/code/code-editor.provider.ts","../src/editor/html/html-editor.controller.ts","../src/editor/html/html-editor.provider.ts","../src/editor/markdown/markdown-editor.controller.ts","../src/editor/markdown/markdown-editor.provider.ts","../src/editor/array/ibiz-array/ibiz-array.tsx","../src/editor/array/array-editor.controller.ts","../src/editor/array/array-editor.provider.ts","../src/editor/cascader/ibiz-cascader/ibiz-cascader.tsx","../src/editor/cascader/cascader-editor.controller.ts","../src/editor/cascader/cascader-editor.provider.ts","../src/editor/color-picker/ibiz-color-picker/ibiz-color-picker.tsx","../src/editor/color-picker/color-picker-editor.controller.ts","../src/editor/color-picker/color-picker-editor.provider.ts","../src/editor/preset/preset-rawitem/ibiz-preset-rawitem/ibiz-preset-rawitem.tsx","../src/editor/preset/preset-rawitem/preset-rawitem.controller.ts","../src/editor/preset/preset-rawitem/preset-rawitem.provider.ts","../src/editor/index.ts","../src/view/404-view/404-view.tsx","../src/view/login-view/login-view.tsx","../src/view/wf-step-trace-view/wf-step-trace-view.provider.ts","../src/view/wf-step-trace-view/wf-step-trace-view.tsx","../src/view/wf-step-trace-view/index.ts","../src/locale/index.ts","../src/view-engine/edit-view.engine.ts","../src/view-engine/edit-view2.engine.ts","../src/view-engine/edit-view3.engine.ts","../src/view-engine/edit-view4.engine.ts","../src/view-engine/grid-view.engine.ts","../src/view-engine/index-view.engine.ts","../src/view-engine/list-view.engine.ts","../src/view-engine/data-view.engine.ts","../src/view-engine/opt-view.engine.ts","../src/view-engine/pickup-grid-view.engine.ts","../src/view-engine/pickup-view.engine.ts","../src/view-engine/mpickup-view-engine.ts","../src/view-engine/tree-view.engine.ts","../src/view-engine/tab-exp-view.engine.ts","../src/view-engine/exp-view.engine.ts","../src/view-engine/grid-exp-view.engine.ts","../src/view-engine/list-exp-view.engine.ts","../src/view-engine/data-view-exp-view.engine.ts","../src/view-engine/tree-exp-view.engine.ts","../src/view-engine/wizard-view-engine.ts","../src/view-engine/chart-view.engine.ts","../src/view-engine/wf-dyna-edit-view.engine.ts","../src/view-engine/wf-dyna-edit-view3.engine.ts","../src/view-engine/wf-dyna-action-view.engine.ts","../src/view-engine/wf-dyna-start-view.engine.ts","../src/view-engine/portal-view-engine.ts","../src/view-engine/panel-view-engine.ts","../src/view-engine/custom-view.engine.ts","../src/view-engine/pickup-tree-view.engine.ts","../src/view-engine/pickup-data-view.engine.ts","../src/view-engine/pickup-view2.engine.ts","../src/view-engine/calendar-view.engine.ts","../src/view-engine/calendar-exp-view.engine.ts","../src/view-engine/mpickup-view2-engine.ts","../src/view-engine/kanban-view.engine.ts","../src/view-engine/form-pickup-data-view.engine.ts","../src/view-engine/login-view.engine.ts","../src/view-engine/tree-grid-ex-view.engine.ts","../src/view-engine/tree-grid-view.engine.ts","../src/view-engine/medit-view9.engine.ts","../src/view-engine/chart-exp-view.engine.ts","../src/view-engine/map-view.engine.ts","../src/view-engine/report-view.engine.ts","../src/view-engine/index.ts","../node_modules/.pnpm/element-plus@2.4.2_vue@3.3.8/node_modules/element-plus/dist/locale/zh-cn.mjs","../src/devtool/devtool-action.tsx","../src/devtool/index.ts","../src/index.ts"],"sourcesContent":["import { defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IButtonContainerState } from '@ibiz-template/runtime';\nimport { IAppDEUIActionGroupDetail } from '@ibiz/model-core';\nimport './action-toolbar.scss';\n\nexport const IBizActionToolbar = defineComponent({\n name: 'IBizActionToolbar',\n props: {\n actionDetails: {\n type: Array<IAppDEUIActionGroupDetail>,\n required: true,\n },\n actionsState: {\n type: Object as PropType<IButtonContainerState>,\n required: true,\n },\n caption: String,\n mode: {\n type: String as PropType<'dropdown' | 'buttons'>,\n default: 'buttons',\n },\n },\n setup(props, { emit }) {\n const ns = useNamespace('action-toolbar');\n\n // 点击事件抛给表格执行\n const handleClick = async (\n detail: IAppDEUIActionGroupDetail,\n e: MouseEvent,\n ): Promise<void> => {\n e.stopPropagation();\n emit('action-click', detail, e);\n };\n\n return { ns, handleClick };\n },\n render() {\n const details = this.actionDetails || [];\n if (this.mode === 'buttons') {\n // 按钮模式\n return (\n <div\n class={[this.ns.b(), this.ns.m('buttons')]}\n onClick={(e): void => e.stopPropagation()}\n >\n {details.length > 0 &&\n details.map(detail => {\n if (this.actionsState[detail.id!].visible) {\n let caption = detail.caption;\n if (detail.capLanguageRes) {\n caption = ibiz.i18n.t(\n detail.capLanguageRes.lanResTag!,\n detail.caption,\n );\n }\n return [\n detail.addSeparator && (\n <div class={this.ns.e('separator')}></div>\n ),\n <el-button\n text\n size='small'\n onClick={(e: MouseEvent): Promise<void> =>\n this.handleClick(detail, e)\n }\n disabled={this.actionsState[detail.id!].disabled}\n class={[this.ns.e('item'), this.ns.is('disabled', false)]}\n >\n {detail.showIcon && detail.sysImage && (\n <iBizIcon icon={detail.sysImage}></iBizIcon>\n )}\n {detail.showCaption ? caption : ''}\n </el-button>,\n ];\n }\n return null;\n })}\n </div>\n );\n }\n // 下拉模式\n return (\n <el-dropdown\n onCommand={(command: IAppDEUIActionGroupDetail): Promise<void> =>\n this.handleClick(command, new MouseEvent('click'))\n }\n class={[this.ns.b(), this.ns.m('dropdown')]}\n >\n {{\n default: (): VNode => (\n <span class={this.ns.e('caption')}>\n {this.caption}\n <ion-icon\n class={this.ns.e('caption-icon')}\n name='ibiz-arrow-down'\n />\n </span>\n ),\n dropdown: (): VNode => (\n <el-dropdown-menu>\n {details.length > 0 &&\n details.map(detail => {\n if (this.actionsState[detail.id!].visible) {\n return (\n <el-dropdown-item\n class={[\n this.ns.e('item'),\n this.ns.is('disabled', false),\n ]}\n disabled={this.actionsState[detail.id!].disabled}\n command={detail}\n >\n {detail.showIcon && detail.sysImage && (\n <iBizIcon icon={detail.sysImage}></iBizIcon>\n )}\n {detail.showCaption ? detail.caption : ''}\n </el-dropdown-item>\n );\n }\n return null;\n })}\n </el-dropdown-menu>\n ),\n }}\n </el-dropdown>\n );\n },\n});\n","import {\n computed,\n ConcreteComponent,\n defineComponent,\n h,\n PropType,\n resolveComponent,\n} from 'vue';\nimport { IFlexLayoutPos, IGridLayoutPos, ILayoutPos } from '@ibiz/model-core';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { calcContentAlignStyle, IColState } from '@ibiz-template/runtime';\nimport './col.scss';\n\nfunction calcGridSpanOffset(\n span: number | undefined,\n offset: number | undefined,\n layout: string | undefined,\n): { span?: number; offset?: number } {\n const multiplier = layout === 'TABLE_24COL' ? 1 : 2;\n const spanDefault = layout === 'TABLE_24COL' ? 24 : 12;\n const _span = !span || span === -1 ? spanDefault : span;\n const _offset = !offset || offset === -1 ? 0 : offset;\n const result: IData = {\n span: _span * multiplier,\n };\n if (_offset !== 0) {\n result.offset = _offset;\n }\n return result;\n}\n\nexport const IBizCol = defineComponent({\n name: 'IBizCol',\n props: {\n layoutPos: {\n type: Object as PropType<ILayoutPos>,\n required: true,\n },\n state: {\n type: Object as PropType<IColState>,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('col');\n\n /**\n * 计算间距类名\n */\n const spacingClass = computed(() => {\n const ns2 = useNamespace('spacing');\n const classArr: string[] = [];\n if (props.layoutPos.layout !== 'FLEX') {\n return classArr;\n }\n const spacings: IData = {\n top: props.layoutPos.spacingTop,\n bottom: props.layoutPos.spacingBottom,\n left: props.layoutPos.spacingLeft,\n right: props.layoutPos.spacingRight,\n };\n Object.keys(spacings).forEach(position => {\n const value = spacings[position] as string;\n if (!value) {\n return;\n }\n classArr.push(ns2.bm(position, value.toLowerCase()));\n });\n return classArr;\n });\n\n // 计算栅格布局的属性\n const gridAttrs = computed(() => {\n const gridLayoutPos = props.layoutPos as IGridLayoutPos;\n // FLEX布局时不计算\n if (gridLayoutPos.layout === 'FLEX') {\n return {};\n }\n // 计算倍率,12列栅格为2\n const {\n colXS,\n colXSOffset,\n colSM,\n colSMOffset,\n colMD,\n colMDOffset,\n colLG,\n colLGOffset,\n } = gridLayoutPos;\n return {\n xs: calcGridSpanOffset(colXS, colXSOffset, gridLayoutPos.layout),\n sm: calcGridSpanOffset(colSM, colSMOffset, gridLayoutPos.layout),\n md: calcGridSpanOffset(colMD, colMDOffset, gridLayoutPos.layout),\n lg: calcGridSpanOffset(colLG, colLGOffset, gridLayoutPos.layout),\n };\n });\n\n const alignStyle = calcContentAlignStyle(props.layoutPos);\n\n const cssVars = computed(() => {\n const layout = props.state.layout;\n const styles = {\n width: layout.width,\n height: layout.height,\n ...(alignStyle || {}),\n };\n\n Object.assign(styles, layout.extraStyle);\n return styles;\n });\n\n const colClass = computed(() => {\n const result = [\n ns.b(),\n props.layoutPos?.layout === 'FLEX' ? ns.m('flex') : ns.m('grid'),\n ns.is('hidden', !props.state.visible),\n ...spacingClass.value,\n !alignStyle ? '' : ns.m('self-align'),\n ...props.state.layout.extraClass,\n ];\n return result;\n });\n\n return { ns, colClass, gridAttrs, cssVars };\n },\n render() {\n // 不显示且不用保活时直接不绘制\n if (!this.state.visible && !this.state.keepAlive) {\n return null;\n }\n\n const defaultSlot = this.$slots.default?.();\n if (this.layoutPos?.layout === 'FLEX') {\n const pos = this.layoutPos as IFlexLayoutPos;\n return (\n <div\n class={this.colClass}\n style={{\n flexGrow: pos.grow,\n flexShrink: pos.shrink === 1 ? undefined : pos.shrink,\n flexBasis: pos.basis,\n ...this.cssVars,\n }}\n >\n {defaultSlot}\n </div>\n );\n }\n\n return h(\n resolveComponent('el-col') as ConcreteComponent,\n {\n class: this.colClass,\n style: this.cssVars,\n ...this.gridAttrs,\n },\n { default: () => defaultSlot },\n );\n },\n});\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IFlexLayout, ILayout } from '@ibiz/model-core';\nimport { defineComponent, PropType } from 'vue';\nimport './row.scss';\n\nexport const IBizRow = defineComponent({\n name: 'IBizRow',\n props: {\n layout: Object as PropType<ILayout>,\n },\n setup() {\n const ns = useNamespace('row');\n return { ns };\n },\n render() {\n const defaultSlot = this.$slots.default?.();\n if (this.layout?.layout === 'FLEX') {\n const { dir, align, valign } = this.layout as IFlexLayout;\n const _dir = dir as 'row' | 'column';\n return (\n <div\n class={[this.ns.b(), this.ns.m('flex'), this.ns.m(_dir)]}\n style={{\n flexDirection: _dir,\n justifyContent: align,\n alignItems: valign,\n }}\n >\n {defaultSlot}\n </div>\n );\n }\n return (\n <el-row class={[this.ns.b(), this.ns.m('grid')]}>{defaultSlot}</el-row>\n );\n },\n});\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, Ref, ref, watch } from 'vue';\nimport { createUUID } from 'qx-util';\nimport {\n IHtmlItem,\n IPanelRawItem,\n IRawItemContainer,\n ITextItem,\n} from '@ibiz/model-core';\nimport './rawitem.scss';\n\nexport const IBizRawItem = defineComponent({\n name: 'IBizRawItem',\n props: {\n type: {\n type: String,\n required: false,\n },\n content: {\n type: [String, Object, Number],\n },\n rawItem: {\n type: Object as PropType<IRawItemContainer>,\n required: false,\n },\n },\n setup(props) {\n const ns = useNamespace('rawitem');\n let rawItem = null;\n let contentType = '';\n if (props.rawItem) {\n rawItem = props.rawItem.rawItem!;\n contentType = rawItem.contentType!;\n }\n const rawItemType = ref(props.type || contentType || '');\n const rawItemContent: Ref<string | number | IData> = ref('');\n let sysImage = null;\n if (contentType === 'IMAGE') {\n sysImage = (rawItem as IPanelRawItem).sysImage;\n }\n // 传入内容\n if (contentType === 'RAW' || contentType === 'HTML') {\n if (contentType === 'RAW') {\n rawItemType.value = 'TEXT';\n rawItemContent.value = (rawItem as ITextItem).caption!;\n } else {\n rawItemContent.value = (rawItem as IHtmlItem).content!;\n }\n } else if (\n ['VIDEO', 'DIVIDER', 'INFO', 'WARNING', 'ERROR'].includes(contentType!)\n ) {\n // 暂不支持\n // content = rawContent;\n } else if (contentType === 'IMAGE' && sysImage) {\n rawItemContent.value = sysImage;\n }\n\n // 判断传入是否为图片路径\n const isImg = (imgUrl: string) => {\n const reg =\n /^https?:|^http?:|(\\.png|\\.svg|\\.jpg|\\.png|\\.gif|\\.psd|\\.tif|\\.bmp|\\.jpeg)/;\n return reg.test(imgUrl);\n };\n\n // 视频类型内容参数\n const playerParams = ref({\n id: createUUID(),\n path: '',\n mute: true,\n autoplay: true,\n replay: false,\n showcontrols: true,\n });\n\n // 分割线类型参数\n const dividerParams = ref({\n contentPosition: 'center',\n html: '',\n });\n\n // 类型参数\n const alertParams = ref({\n type: 'info',\n title: '',\n closeabled: true,\n showIcon: false,\n });\n\n // 文本类型显示值\n const rawItemText: Ref<string | number | IData> = ref('');\n\n // 转换各类值操作\n const convertValue = () => {\n // 图片类型\n if (rawItemType.value === 'IMAGE') {\n if (typeof props.content === 'string') {\n if (isImg(props.content)) {\n rawItemContent.value = { imagePath: props.content };\n } else {\n rawItemContent.value = { cssClass: props.content };\n }\n }\n }\n\n // 文本类型\n if (\n [\n 'TEXT',\n 'HEADING1',\n 'HEADING2',\n 'HEADING3',\n 'HEADING4',\n 'HEADING5',\n 'HEADING6',\n 'PARAGRAPH',\n 'HTML',\n 'RAW',\n ].includes(rawItemType.value)\n ) {\n rawItemText.value = rawItemContent.value;\n if (typeof rawItemText.value === 'string') {\n rawItemText.value = rawItemText.value.replaceAll('&lt;', '<');\n rawItemText.value = rawItemText.value.replaceAll('&gt;', '>');\n rawItemText.value = rawItemText.value.replaceAll('&amp;nbsp;', ' ');\n rawItemText.value = rawItemText.value.replaceAll('&nbsp;', ' ');\n }\n }\n\n if (\n ['VIDEO', 'DIVIDER', 'INFO', 'WARNING', 'ERROR'].includes(\n rawItemType.value,\n )\n ) {\n if (rawItemContent.value) {\n let rawConfig = {};\n try {\n if (typeof rawItemContent.value === 'string') {\n // eslint-disable-next-line no-new-func\n const func = new Function(`return (${rawItemContent.value});`);\n rawConfig = func();\n switch (rawItemType.value) {\n case 'VIDEO':\n Object.assign(playerParams.value, rawConfig);\n break;\n case 'DIVIDER':\n Object.assign(dividerParams.value, rawConfig);\n break;\n case 'INFO':\n case 'WARNING':\n case 'ERROR':\n alertParams.value.type =\n rawItemType.value.toLocaleLowerCase();\n Object.assign(alertParams.value, rawConfig);\n break;\n default:\n break;\n }\n }\n } catch {\n ibiz.log.error(`${rawItemType.value}类型自定义参数配置错误`);\n }\n }\n }\n };\n\n convertValue();\n\n watch(\n () => props.content,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n rawItemContent.value = newVal as string | number;\n convertValue();\n }\n },\n {\n immediate: true,\n },\n );\n\n return {\n ns,\n rawItemText,\n playerParams,\n dividerParams,\n alertParams,\n rawItemType,\n rawItemContent,\n };\n },\n render() {\n const renderContent = () => {\n if (this.rawItemType === 'IMAGE') {\n return (\n <i-biz-icon\n class={[this.ns.e('image')]}\n icon={this.rawItemContent}\n ></i-biz-icon>\n );\n }\n if (this.rawItemType === 'TEXT' || this.rawItemType === 'RAW') {\n return <span class={this.ns.e('text')}>{this.rawItemText}</span>;\n }\n if (this.rawItemType === 'HEADING1') {\n return <h1 class={this.ns.e('h1')}>{this.rawItemText}</h1>;\n }\n if (this.rawItemType === 'HEADING2') {\n return <h2 class={this.ns.e('h2')}>{this.rawItemText}</h2>;\n }\n if (this.rawItemType === 'HEADING3') {\n return <h3 class={this.ns.e('h3')}>{this.rawItemText}</h3>;\n }\n if (this.rawItemType === 'HEADING4') {\n return <h4 class={this.ns.e('h4')}>{this.rawItemText}</h4>;\n }\n if (this.rawItemType === 'HEADING5') {\n return <h5 class={this.ns.e('h5')}>{this.rawItemText}</h5>;\n }\n if (this.rawItemType === 'HEADING6') {\n return <h6 class={this.ns.e('h6')}>{this.rawItemText}</h6>;\n }\n if (this.rawItemType === 'PARAGRAPH') {\n return <p class={this.ns.e('paragraph')}>{this.rawItemText}</p>;\n }\n if (this.rawItemType === 'HTML') {\n return (\n <div class={this.ns.e('paragraph')} v-html={this.rawItemText}></div>\n );\n }\n if (this.rawItemType === 'VIDEO') {\n return (\n <div class={this.ns.e('video')}>\n <video\n id={this.playerParams.id}\n src={this.playerParams.path}\n autoplay={this.playerParams.autoplay}\n controls={this.playerParams.showcontrols}\n loop={this.playerParams.replay}\n muted={this.playerParams.mute}\n >\n <source src={this.playerParams.path} type='video/mp4' />\n <source src={this.playerParams.path} type='video/ogg' />\n <source src={this.playerParams.path} type='video/webm' />\n 你的浏览器不支持video标签\n </video>\n </div>\n );\n }\n if (this.rawItemType === 'DIVIDER') {\n return (\n <el-divider content-position={this.dividerParams.contentPosition}>\n <span v-html={this.dividerParams.html}></span>\n </el-divider>\n );\n }\n if (\n this.rawItemType === 'INFO' ||\n this.rawItemType === 'WARNING' ||\n this.rawItemType === 'ERROR'\n ) {\n return (\n <el-alert\n title={this.alertParams.title}\n type={this.alertParams.type}\n show-icon={this.alertParams.showIcon}\n closable={this.alertParams.closeabled}\n ></el-alert>\n );\n }\n if (this.rawItemType === 'MARKDOWN') {\n return (\n <iBizMarkDown value={this.content} disabled={true}></iBizMarkDown>\n );\n }\n if (['PLACEHOLDER'].includes(this.rawItemType)) {\n return null;\n }\n return null;\n };\n\n return <div class={this.ns.b()}>{renderContent()}</div>;\n },\n});\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, ref } from 'vue';\nimport { ILanguageRes } from '@ibiz/model-core';\nimport './no-data.scss';\n\nexport const IBizNoData = defineComponent({\n name: 'IBizNoData',\n props: {\n text: {\n type: String,\n default: '暂无数据',\n },\n emptyTextLanguageRes: {\n type: Object as PropType<ILanguageRes>,\n default: undefined,\n },\n },\n setup(props) {\n const ns = useNamespace('no-data');\n\n const label = ref(props.text);\n\n if (props.emptyTextLanguageRes) {\n label.value = ibiz.i18n.t(\n props.emptyTextLanguageRes.lanResTag!,\n props.text,\n );\n }\n\n return { ns, label };\n },\n render() {\n return (\n <el-empty class={this.ns.b()} description={this.label}>\n {this.$slots.default?.()}\n </el-empty>\n );\n },\n});\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport {\n Ref,\n computed,\n defineComponent,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n} from 'vue';\nimport './split.scss';\n\nexport const IBizSplit = defineComponent({\n name: 'IBizSplit',\n props: {\n modelValue: {\n type: [Number, String],\n default: 0.5,\n },\n mode: {\n validator: (value: string) => {\n return ['horizontal', 'vertical'].includes(value);\n },\n default: 'horizontal',\n },\n min: {\n type: [Number, String],\n default: '30px',\n },\n max: {\n type: [Number, String],\n default: '30px',\n },\n },\n emits: ['update:modelValue', 'on-move-start', 'on-moving', 'on-move-end'],\n setup(props, { emit }) {\n const ns = useNamespace('split');\n\n const outerWrapper: Ref<HTMLDivElement | null> = ref(null);\n\n const offset = ref(0);\n const oldOffset: Ref<string | number> = ref(0);\n const isMoving = ref(false);\n const computedMin: Ref<string | number> = ref(0);\n const computedMax: Ref<string | number> = ref(0);\n const currentValue: Ref<string | number> = ref(0.5);\n const initOffset = ref(0);\n\n const wrapperClasses = computed(() => [\n ns.b('wrapper'),\n ns.is('no-select', isMoving.value),\n ]);\n const paneClasses = computed(() => [\n ns.b('pane'),\n isMoving.value ? ns.bm('pane', 'moving') : '',\n ]);\n const isHorizontal = computed(() => props.mode === 'horizontal');\n const anotherOffset = computed(() => 100 - offset.value);\n const valueIsPx = computed(() => typeof props.modelValue === 'string');\n const offsetSize = computed(() =>\n isHorizontal.value ? 'offsetWidth' : 'offsetHeight',\n );\n\n const px2percent = (numerator: string, denominator: string) => {\n return parseFloat(numerator) / parseFloat(denominator);\n };\n\n const getComputedThresholdValue = (type: 'min' | 'max') => {\n const size = outerWrapper.value![offsetSize.value];\n if (valueIsPx.value) {\n return typeof props[type] === 'string'\n ? props[type]\n : size * (props[type] as number);\n }\n return typeof props[type] === 'string'\n ? px2percent(props[type] as string, size as unknown as string)\n : props[type];\n };\n\n const getMax = (value1: string | number, value2: string | number) => {\n if (valueIsPx.value)\n return `${Math.max(\n parseFloat(value1 as string),\n parseFloat(value2 as string),\n )}px`;\n return Math.max(value1 as number, value2 as number);\n };\n\n const getAnotherOffset = (value: string | number) => {\n let res: string | number = 0;\n if (valueIsPx.value)\n res = `${\n outerWrapper.value![offsetSize.value] - parseFloat(value as string)\n }px`;\n else res = 1 - (value as number);\n return res;\n };\n\n const handleMove = (e: MouseEvent) => {\n const pageOffset = isHorizontal.value ? e.pageX : e.pageY;\n const moveOffset = pageOffset - initOffset.value;\n const outerWidth = outerWrapper.value![offsetSize.value];\n let value = valueIsPx.value\n ? `${parseFloat(oldOffset.value as string) + moveOffset}px`\n : px2percent(\n (outerWidth * (oldOffset.value as number) +\n moveOffset) as unknown as string,\n outerWidth as unknown as string,\n );\n const anotherValue = getAnotherOffset(value);\n if (\n parseFloat(value as string) <= parseFloat(computedMin.value as string)\n ) {\n value = getMax(value, computedMin.value);\n }\n if (\n parseFloat(anotherValue as string) <=\n parseFloat(computedMax.value as string)\n ) {\n value = getAnotherOffset(getMax(anotherValue, computedMax.value));\n }\n Object.assign(e, {\n atMin: props.modelValue === computedMin.value,\n atMax: valueIsPx.value\n ? getAnotherOffset(props.modelValue) === computedMax.value\n : (getAnotherOffset(props.modelValue) as number).toFixed(5) ===\n (computedMax.value as number).toFixed(5),\n });\n emit('update:modelValue', value);\n emit('on-moving', e);\n };\n\n const handleUp = () => {\n isMoving.value = false;\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('mouseup', handleUp);\n emit('on-move-end');\n };\n\n const handleMousedown = (e: MouseEvent) => {\n initOffset.value = isHorizontal.value ? e.pageX : e.pageY;\n oldOffset.value = props.modelValue;\n isMoving.value = true;\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('mouseup', handleUp);\n emit('on-move-start');\n };\n\n const computeOffset = () => {\n nextTick(() => {\n computedMin.value = getComputedThresholdValue('min');\n computedMax.value = getComputedThresholdValue('max');\n offset.value =\n (((valueIsPx.value\n ? px2percent(\n props.modelValue as string,\n outerWrapper.value![offsetSize.value] as unknown as string,\n )\n : props.modelValue) as number) *\n 10000) /\n 100;\n });\n };\n\n watch(\n () => props.modelValue,\n (val: string | number) => {\n if (val !== currentValue.value) {\n currentValue.value = val;\n computeOffset();\n }\n },\n );\n\n onMounted(() => {\n nextTick(() => {\n computeOffset();\n });\n\n window.addEventListener('resize', computeOffset);\n });\n\n onBeforeUnmount(() => {\n window.removeEventListener('resize', computeOffset);\n });\n\n return {\n ns,\n outerWrapper,\n offset,\n wrapperClasses,\n paneClasses,\n isHorizontal,\n anotherOffset,\n handleMousedown,\n };\n },\n render() {\n return (\n <div class={this.wrapperClasses} ref={'outerWrapper'}>\n {this.isHorizontal ? (\n <div class={this.ns.m('horizontal')}>\n <div\n style={{ right: `${this.anotherOffset}%` }}\n class={[this.paneClasses, this.ns.bm('pane', 'left')]}\n >\n {this.$slots.left?.()}\n </div>\n <div\n style={{ left: `${this.offset}%` }}\n class={this.ns.b('trigger-con')}\n onMousedown={(e: MouseEvent) => this.handleMousedown(e)}\n >\n {this.$slots.trigger?.() || <iBizSplitTrigger mode='vertical' />}\n </div>\n <div\n style={{ left: `${this.offset}%` }}\n class={[this.paneClasses, this.ns.bm('pane', 'right')]}\n >\n {this.$slots.right?.()}\n </div>\n </div>\n ) : (\n <div class={this.ns.m('vertical')}>\n <div\n style={{ bottom: `${this.anotherOffset}%` }}\n class={[this.paneClasses, this.ns.bm('pane', 'top')]}\n >\n {this.$slots.top?.()}\n </div>\n <div\n style={{ top: `${this.offset}%` }}\n class={this.ns.b('trigger-con')}\n onMousedown={(e: MouseEvent) => this.handleMousedown(e)}\n >\n {this.$slots.trigger?.() || (\n <iBizSplitTrigger mode='horizontal' />\n )}\n </div>\n <div\n style={{ top: `${this.offset}%` }}\n class={[this.paneClasses, this.ns.bm('pane', 'bottom')]}\n >\n {this.$slots.bottom?.()}\n </div>\n </div>\n )}\n </div>\n );\n },\n});\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent } from 'vue';\nimport './split-trigger.scss';\n\nexport const IBizSplitTrigger = defineComponent({\n name: 'IBizSplitTrigger',\n props: {\n mode: String,\n },\n setup(prop) {\n const ns = useNamespace('split-trigger');\n const isVertical = computed(() => prop.mode === 'vertical');\n const classes = computed(() => [\n ns.b(),\n isVertical.value ? ns.m('vertical') : ns.m('horizontal'),\n ]);\n const barConClasses = computed(() => [\n ns.b('bar-con'),\n isVertical.value\n ? ns.bm('bar-con', 'vertical')\n : ns.bm('bar-con', 'horizontal'),\n ]);\n const items = Array(8).fill(0);\n return {\n ns,\n classes,\n barConClasses,\n items,\n };\n },\n render() {\n return (\n <div class={this.classes}>\n <div class={this.barConClasses}>\n {this.items.map((_item, i) => (\n <i class={this.ns.b('bar')} key={`trigger-${i}`}></i>\n ))}\n </div>\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\nimport { defineComponent, PropType, watch, Ref, ref } from 'vue';\nimport dayjs from 'dayjs';\nimport { clone } from 'ramda';\nimport './extend-action-timeline.scss';\nimport { useNamespace } from '@ibiz-template/vue3-util';\n\n/**\n * 办理人员名称显示去重\n *\n * @param tag 需要去重的名称标识\n * @param dataS 需要去重数据集\n */\nconst acceptingOfficerNoDup = (tag: string, dataS: IData[]) => {\n const tempData: IData[] = [];\n if (dataS?.length > 0 && tag) {\n dataS.forEach((data: IData) => {\n tempData.push(data[tag]);\n });\n }\n const noDup = [...new Set(tempData)];\n return noDup;\n};\n\nexport const IBizExtendActionTimeLine = defineComponent({\n name: 'IBizExtendActionTimeLine',\n props: {\n data: {\n type: Object as PropType<IData>,\n },\n },\n setup(props) {\n const ns = useNamespace('extend-action-timeline');\n\n const UIData: Ref<IData[]> = ref([]);\n\n const sortData = (a: IData, b: IData) => {\n return Date.parse(b.time) - Date.parse(a.time);\n };\n\n /**\n * 处理数据\n *\n * @author fangZhiHao\n * @date 2023-01-12 11:01:07\n * @param {IData[]} handleTasks\n * @return {*}\n */\n const handleVal = (handleTasks: IData[]) => {\n const commentsData: IData[] = [];\n let tasks = clone(handleTasks);\n if (tasks.length > 0) {\n tasks = tasks.reverse();\n tasks.forEach((task: IData) => {\n if (task.usertasks) {\n // 有子流程没有comments 递归处理\n const copyTasks = clone(task.usertasks);\n Object.assign(task, { tasks: handleVal(copyTasks) });\n task.isShow = false;\n }\n if (task.identitylinks.length === 0 && task.comments.length === 0) {\n Object.assign(task, { taskName: task.userTaskName });\n commentsData.push(task);\n }\n if (task.identitylinks.length > 0) {\n const authorNames = acceptingOfficerNoDup(\n 'displayname',\n task.identitylinks,\n );\n commentsData.push({\n authorName: authorNames.join('、'),\n taskName: task.userTaskName,\n isLink: true,\n });\n }\n if (task.comments.length > 0) {\n task.comments.forEach((comment: IData) => {\n Object.assign(comment, { taskName: task.userTaskName });\n });\n task.comments.sort(sortData);\n commentsData.push(...task.comments);\n }\n });\n return commentsData;\n }\n };\n\n /**\n * 去重重复名称\n *\n * @author fangZhiHao\n * @date 2023-01-13 15:01:47\n * @param {Array<string>} data\n * @return {*}\n */\n const noDup = (data: Array<string>) => {\n const map = new Map();\n for (let i = 0; i < data.length; i++) {\n if (!map.has(data[i])) {\n map.set(data[i], true);\n }\n }\n return map;\n };\n\n /**\n * 处理子流程中待办名\n *\n * @author fangZhiHao\n * @date 2023-01-13 11:01:09\n * @param {IData[]} handleTask\n */\n const handlelinkName = (handleTask: IData[]) => {\n handleTask.forEach((item: IData) => {\n const linkName = [];\n if (item.tasks) {\n handlelinkName(item.tasks);\n }\n if (item.tasks) {\n for (let i = 0; i < item.tasks.length; i++) {\n if (item.tasks[i].isLink) {\n const arr =\n item.tasks[i].authorName.indexOf('、') !== -1\n ? item.tasks[i].authorName.split('、')\n : item.tasks[i].authorName;\n if (typeof arr === 'string') {\n linkName.push(arr);\n } else {\n linkName.push(...arr);\n }\n }\n if (item.tasks[i].linkName) {\n const arr =\n item.tasks[i].linkName.indexOf('、') !== -1\n ? item.tasks[i].linkName.split('、')\n : item.tasks[i].linkName;\n if (typeof arr === 'string') {\n linkName.push(arr);\n } else {\n linkName.push(...arr);\n }\n }\n }\n }\n const noDupName = [...noDup(linkName).keys()];\n item.linkName = noDupName.join('、');\n });\n };\n\n watch(\n () => props.data,\n (newVal, oldVal) => {\n if (newVal !== oldVal && newVal) {\n const copyData = clone(newVal);\n const tasks = copyData.usertasks;\n if (tasks) {\n const handleTask = handleVal(tasks);\n if (handleTask) {\n handlelinkName(handleTask);\n UIData.value = handleTask;\n }\n }\n }\n },\n { immediate: true },\n );\n\n /**\n * 时间转换\n *\n * @memberof ExtendActionTimeline\n */\n const formatDate = (date: string, format: string) => {\n return dayjs(date).format(format);\n };\n\n /**\n * 子流程展示隐藏\n *\n * @author fangZhiHao\n * @date 2023-01-12 11:01:34\n * @param {IData} userTask\n */\n const changeExpand = (userTask: IData) => {\n userTask.isShow = !userTask.isShow;\n };\n\n /**\n * 绘制组件\n *\n * @author fangZhiHao\n * @date 2023-01-12 11:01:07\n * @param {IData[]} data\n * @return {*}\n */\n const renderTimeline = (data: IData[]) => {\n return data.map((task: IData) => {\n return (\n <div\n class={[\n ns.b('task'),\n ns.is('wrong', task.type && task.type.includes('驳回')),\n ns.is('link', task.isLink),\n ns.is('linkname', task.linkName),\n ]}\n >\n <div class={ns.be('task', 'tail')}></div>\n <div\n class={[ns.be('task', 'head'), ns.is('link-head', task.linkName)]}\n ></div>\n <div class={ns.be('task', 'top')}>\n <div\n class={[\n ns.be('task', 'user-task-name'),\n ns.is('task-link', task.linkName),\n ]}\n >\n {task.taskName}\n </div>\n {task.linkName ? (\n <div class={ns.be('task', 'link-name')} title={task.linkName}>\n {task.linkName}\n </div>\n ) : null}\n <div\n class={[\n ns.be('task', 'author-name'),\n ns.is('has-type', task.type),\n ]}\n title={task.authorName}\n >\n {task.authorName}\n </div>\n {task.type && (\n <div class={ns.be('task', 'type')}>{task.type}</div>\n )}\n {task.time && (\n <div class={ns.be('task', 'last-time')}>\n {task.time && '处理时间'}\n <span class={ns.be('task', 'last-time-text')}>\n {task.time}\n </span>\n </div>\n )}\n </div>\n <div class={ns.be('task', 'bottom')}>\n <div class={ns.be('task', 'full-message')}>\n {task.fullMessage\n ? `审批意见: ${task.fullMessage}`\n : task.fullMessage}\n </div>\n </div>\n {task.tasks && task.tasks.length >= 1 && (\n <div\n class={ns.be('task', 'trigger')}\n on-click={() => {\n changeExpand(task);\n }}\n >\n <i-icon type={task.isShow ? 'md-remove' : 'md-add'} />\n </div>\n )}\n {task.tasks && (\n <div class={ns.be('task', 'moreTask')} v-show={task.isShow}>\n {renderTimeline(task.tasks)}\n </div>\n )}\n </div>\n );\n });\n };\n\n return { ns, formatDate, UIData, renderTimeline };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n {this.UIData && this.renderTimeline(this.UIData)}\n </div>\n );\n },\n});\n","import { defineComponent } from 'vue';\nimport { IViewMessage } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\n\nexport const ViewMessage = defineComponent({\n name: 'ViewMessage',\n props: {\n messages: {\n type: Array<IViewMessage>,\n },\n },\n setup() {\n const ns = useNamespace('view-message');\n\n const getType = (messageType?: string): string => {\n switch (messageType) {\n case 'WARN':\n return 'warning';\n case 'ERROR':\n return 'error';\n default:\n return 'info';\n }\n };\n\n return { ns, getType };\n },\n render() {\n if (!this.messages?.length) {\n return null;\n }\n return (\n <div class={[this.ns.b()]}>\n {this.messages?.map(message => {\n return (\n <el-alert\n type={this.getType(message.messageType)}\n title={message.title}\n description={message.message}\n closable={message.removeMode !== 0}\n ></el-alert>\n );\n })}\n </div>\n );\n },\n});\n","import { computed, defineComponent } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './pagination.scss';\n\nexport const IBizPagination = defineComponent({\n name: 'IBizPagination',\n props: {\n total: {\n type: Number,\n required: true,\n },\n curPage: {\n type: Number,\n required: true,\n },\n size: {\n type: Number,\n required: true,\n },\n },\n emits: ['change', 'pageSizeChange', 'pageRefresh'],\n setup(props, { emit }) {\n const ns = useNamespace('pagination');\n\n const start = computed(() => {\n return (props.curPage - 1) * props.size + 1;\n });\n\n const end = computed(() => {\n return props.curPage * props.size;\n });\n\n const onPageChange = (page: number): void => {\n emit('change', page);\n };\n const onPageSizeChange = (size: number): void => {\n emit('pageSizeChange', size);\n };\n const pageRefresh = (): void => {\n emit('pageRefresh');\n };\n const inputChange = (event: MouseEvent): void => {\n // 阻止change冒泡\n event.stopPropagation();\n };\n\n return {\n ns,\n start,\n end,\n onPageChange,\n onPageSizeChange,\n pageRefresh,\n inputChange,\n };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n <el-pagination\n layout='slot, prev, pager, next, sizes, jumper'\n background\n total={this.total}\n current-page={this.curPage}\n page-size={this.size}\n page-sizes={[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]}\n {...{\n 'onUpdate:currentPage': this.onPageChange,\n 'onUpdate:pageSize': this.onPageSizeChange,\n onChange: this.inputChange,\n }}\n >\n <span class={this.ns.b('btn')}>\n <el-button title='刷新' onClick={this.pageRefresh}>\n <ion-icon name='refresh'></ion-icon>\n </el-button>\n </span>\n <span>\n 显示&nbsp;{this.start}&nbsp;-&nbsp;{this.end}&nbsp;条,共&nbsp;\n {this.total}\n &nbsp;条数据\n </span>\n </el-pagination>\n </div>\n );\n },\n});\n","import { ISortItem } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent } from 'vue';\nimport './sort-bar.scss';\n\nexport const IBizSortBar = defineComponent({\n name: 'IBizSortBar',\n props: {\n sortItems: {\n type: Array<ISortItem>,\n required: true,\n },\n },\n emits: {\n SortChange: (_item: ISortItem, _order: 'asc' | 'desc' | undefined) => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('sort-bar');\n\n const onItemClick = (item: ISortItem) => {\n if (item.order === 'asc') {\n item.order = 'desc';\n } else if (item.order === 'desc') {\n item.order = undefined;\n } else {\n // 清空其他排序项顺序\n props.sortItems.forEach(x => {\n x.order = undefined;\n });\n item.order = 'asc';\n }\n\n emit('SortChange', item, item.order);\n };\n\n return { ns, onItemClick };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n {this.sortItems.length > 0 &&\n this.sortItems.map(item => {\n return (\n <div\n onClick={() => this.onItemClick(item)}\n class={[\n this.ns.b('item'),\n item.order === 'asc' ? this.ns.bm('item', 'asc') : '',\n item.order === 'desc' ? this.ns.bm('item', 'desc') : '',\n ]}\n >\n {item.caption}\n <div class={this.ns.b('icon-wrapper')}>\n <i class={this.ns.be('icon-wrapper', 'icon-asc')}></i>\n <i class={this.ns.be('icon-wrapper', 'icon-desc')}></i>\n </div>\n </div>\n );\n })}\n </div>\n );\n },\n});\n","import { IAppDataEntity, IAppDEDataImport } from '@ibiz/model-core';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, ref, PropType } from 'vue';\n\nimport './data-import.scss';\nimport {\n asyncImportData,\n importData,\n ImportDataResult,\n} from '@ibiz-template/runtime';\n\nexport const DataImport = defineComponent({\n name: 'DataImport',\n props: {\n dismiss: {\n type: Function as PropType<() => void>,\n required: true,\n },\n appDataEntity: {\n type: Object as PropType<IAppDataEntity>,\n required: true,\n },\n dataImport: {\n type: Object as PropType<IAppDEDataImport>,\n required: false,\n },\n },\n setup(props) {\n const ns = useNamespace('data-import');\n const inputUpLoad = ref();\n const message = ref<{\n state: 'ready' | 'over' | 'error';\n message: string;\n }>({\n state: 'ready',\n message: '',\n });\n\n const errorMessage = ref('');\n\n const isLoading = ref(false);\n\n const onCancelButtonClick = () => {\n props.dismiss();\n };\n\n // 文件选择变更事件\n const onFileChange = async ($event: Event) => {\n const obj = $event.target as IData;\n if (!obj.files) {\n return;\n }\n errorMessage.value = '';\n const selectedFile = obj.files[0];\n obj.value = null; // 置空不然下次文件不变不触发\n let result: ImportDataResult;\n isLoading.value = true;\n try {\n if (ibiz.env.enableMqtt) {\n asyncImportData(selectedFile, props.appDataEntity, props.dataImport);\n ibiz.notification.info({\n desc: '开始导入,详细进度和结果请看应用通知',\n });\n onCancelButtonClick();\n return;\n }\n result = await importData(\n selectedFile,\n props.appDataEntity,\n props.dataImport,\n );\n\n // 模拟表单通知 刷新表格\n ibiz.mc.command.send(\n { srfdecodename: props.appDataEntity.codeName },\n 'OBJECTCREATED',\n );\n const { success, total, message: _message } = result;\n const totalNum = total ? Number(total) : 0;\n const successNum = success ? Number(success) : 0;\n const errorNum = total - success;\n message.value.state = _message ? 'error' : 'over';\n message.value.message =\n _message ||\n `共计导入数据 ${totalNum} 条,错误[${errorNum}],成功[${successNum}]`;\n } catch (error) {\n if (error instanceof Error) {\n errorMessage.value = error.message as string;\n }\n } finally {\n isLoading.value = false;\n }\n };\n\n // 下载模板文件\n const onLinkClick = async () => {\n let templateUrl = `${props.appDataEntity.codeName2!.toLowerCase()}/importtemplate`;\n if (props.dataImport?.codeName) {\n templateUrl += `?srfimporttag=${props.dataImport.codeName}`;\n }\n const res = await ibiz.net.request(templateUrl, {\n responseType: 'blob',\n });\n if (res.status === 200) {\n let fileName =\n res.headers['content-disposition']!.split(';')\n .find((str: string) => str.indexOf('filename=') !== -1)\n ?.slice(9) || '';\n fileName = decodeURIComponent(fileName);\n const blob = new Blob([res.data as Blob], {\n type: 'application/vnd.ms-excel',\n });\n const elink = document.createElement('a');\n elink.download = fileName;\n elink.style.display = 'none';\n elink.href = URL.createObjectURL(blob);\n document.body.appendChild(elink);\n elink.click();\n URL.revokeObjectURL(elink.href); // 释放URL 对象\n document.body.removeChild(elink);\n }\n };\n\n const selectFile = () => {\n inputUpLoad.value.click();\n };\n\n return {\n ns,\n onLinkClick,\n selectFile,\n onCancelButtonClick,\n onFileChange,\n inputUpLoad,\n isLoading,\n message,\n errorMessage,\n };\n },\n render() {\n return (\n <div class={this.ns.b()} v-loading={this.isLoading}>\n <input\n ref='inputUpLoad'\n type='file'\n style='display: none'\n accept='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n onChange={this.onFileChange}\n />\n <div class={this.ns.e('caption')}>导入数据</div>\n {this.message.state === 'ready' ? (\n <div class={this.ns.b('upload')} onClick={this.selectFile}>\n <img\n class={this.ns.be('upload', 'img')}\n src='./assets/images/icon-import.svg'\n ></img>\n <span class={this.ns.be('upload', 'text')}>单击此区域进行上传</span>\n </div>\n ) : (\n <div class={[this.ns.b('message')]}>\n <div class={this.ns.be('message', 'title')}>导入结果</div>\n <div\n class={[\n this.ns.be('message', 'content'),\n this.ns.is('error', this.message.state === 'error'),\n ]}\n >\n {this.message.message}\n </div>\n </div>\n )}\n {this.errorMessage && (\n <div class={this.ns.b('error-message')}>{this.errorMessage}</div>\n )}\n <div class={this.ns.e('template-container')}>\n <div class={this.ns.e('template-description')}>\n 下载导入模版,并按要求填写:\n </div>\n <div class={this.ns.e('template-link')} onClick={this.onLinkClick}>\n <ion-icon class={this.ns.e('link-icon')} name='link' />\n {this.appDataEntity.logicName}数据导入模板文件\n </div>\n </div>\n <div class={this.ns.e('button-bar')}>\n <el-button onClick={this.onCancelButtonClick}>取消</el-button>\n {this.message.state !== 'ready' && (\n <el-button onClick={this.selectFile}>继续导入</el-button>\n )}\n </div>\n </div>\n );\n },\n});\n","/* global define */\n\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n // Node.\n module.exports = pluralize();\n } else if (typeof define === 'function' && define.amd) {\n // AMD, registers as an anonymous module.\n define(function () {\n return pluralize();\n });\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(this, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n","import pluralize from 'pluralize';\n// 补充特殊转换规则\npluralize.addPluralRule(/(matr|vert|ind)ix|ex$/, '$1ices');\n/**\n * 英文转复数写法\n *\n * @author chitanda\n * @date 2022-08-25 18:08:41\n * @export\n * @param {string} key\n * @return {*} {string}\n */\nexport function plural(key) {\n return pluralize(key);\n}\n/**\n * 英文转复数写法并转全小写\n *\n * @author chitanda\n * @date 2022-08-25 18:08:23\n * @export\n * @param {string} key\n * @return {*} {string}\n */\nexport function pluralLower(key) {\n return plural(key).toLowerCase();\n}\n","import { IAppDataEntity, IAppDEDataImport } from '@ibiz/model-core';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport {\n defineComponent,\n ref,\n PropType,\n Ref,\n computed,\n onMounted,\n watch,\n} from 'vue';\nimport './data-import2.scss';\nimport qs from 'qs';\nimport { getCookie } from 'qx-util';\nimport { CoreConst } from '@ibiz-template/core';\nimport { pluralLower } from '@ibiz-template/model-helper/out/utils';\n\nasync function importMapping(\n method: string,\n id?: string,\n data?: IData,\n): Promise<IData> {\n let url = `extension/import_schemas`;\n if (id) {\n url = `${url}/${id}`;\n }\n const res = await ibiz.net.request(url, {\n method,\n data,\n });\n return res;\n}\n\nexport const DataImport2 = defineComponent({\n name: 'DataImport2',\n props: {\n dismiss: {\n type: Function as PropType<() => void>,\n required: true,\n },\n appDataEntity: {\n type: Object as PropType<IAppDataEntity>,\n required: true,\n },\n dataImport: {\n type: Object as PropType<IAppDEDataImport>,\n required: false,\n },\n },\n setup(props) {\n const ns = useNamespace('data-import2');\n\n const isLoading = ref(false);\n\n const onCancelButtonClick = () => {\n props.dismiss();\n };\n\n const previewinfo: Ref<[string[]]> = ref([[]]);\n\n const columnMap = new Map();\n\n const selectValues: Ref<string[]> = ref([]);\n\n let dataOption: IData[] = [];\n\n const dataimport2 = ref();\n\n const select = ref();\n // 文件名\n let fileName = '';\n\n // 文件ID\n let fileid = '';\n\n // 是否已列映射保存\n const ColumnMappingSave = ref(false);\n\n // 列映射保存的name\n const columnMappingSaveName = ref('');\n //\n const listValue = ref('');\n\n const columnMappingListMap = new Map();\n\n const options: Ref<{ value: string; label: string }[]> = ref([]);\n\n const isNoPersonel = ref(false);\n\n // 列映射列表值改变\n const watchValue = async (listvalue: string) => {\n if (listvalue) {\n const columnData = columnMappingListMap.get(listvalue);\n let columnMapData = columnData.fields;\n if (!columnData.fields) {\n const res = await importMapping('get', columnData.id);\n if (res.status === 200 && res.data) {\n columnMapData = res.data.fields;\n }\n columnData.fields = res.data.fields;\n columnMappingListMap.set(listvalue, columnData);\n }\n if (\n columnData.owner_type !== '' &&\n columnData.owner_type !== 'PERSONAL'\n ) {\n isNoPersonel.value = true;\n }\n const keys = [...columnMap.keys()];\n const captionMap = new Map();\n keys.forEach(item => {\n const columnMapValue = columnMap.get(item);\n const lastIndex = item.lastIndexOf('-'); // \"MXCOUNT-0-0-0\"\n const itemName = item.substring(0, lastIndex); // \"MXCOUNT-0-0\"\n // const itemIndex = item.substring(lastIndex + 1); // '0'\n let index = captionMap.get(itemName); // 取第几个\n if (!index) {\n captionMap.set(itemName, 0);\n index = 0;\n }\n const filteredObjects = columnMapData.filter(\n (columnitem: { caption: string }) =>\n columnitem.caption === itemName,\n );\n const newColumnValue = filteredObjects[index];\n if (newColumnValue) {\n captionMap.set(itemName, index + 1);\n newColumnValue.index = columnMapValue.index;\n columnMap.set(item, newColumnValue);\n selectValues.value[newColumnValue.index] = newColumnValue.name;\n }\n });\n } else {\n const keys = [...columnMap.keys()];\n keys.forEach(item => {\n const data = columnMap.get(item);\n if (data) {\n data.name = '';\n columnMap.set(item, data);\n selectValues.value[data.index] = '';\n }\n });\n }\n };\n\n watch(listValue, (newValue, _oldValue) => {\n if (columnMappingSaveName.value !== newValue) {\n ColumnMappingSave.value = false;\n }\n columnMappingSaveName.value = '';\n watchValue(newValue);\n });\n\n // 列映射保存\n const onButtonColumnMappingImportClick = async () => {\n if (previewinfo.value[0].length) {\n ColumnMappingSave.value = true;\n const columnMapArr = [...columnMap.values()];\n const fields = columnMapArr.filter(\n (columnitem: { name: string }) => columnitem.name !== '',\n );\n const data = {\n // schame_tag: '', // 导入模式标记 不传\n // id: '', // 导入模式标识 也不用传\n name: `${fileName.split('.')[0]}|${new Date().toLocaleString()}`, // 导入模式名称 按照导入的名称|时间来生成\n // order_value: '', // 排序值 也不用传\n fields, // 导入模式属性 {name:'',order_value:1}\n // type: '', // 导入模式类型 暂时不用传\n system_tag: ibiz.appData?.context.srfsystemid, // 系统标记\n data_entity_tag: props.appDataEntity.codeName, // 数据实体标记\n import_tag: props.appDataEntity.defaultAppDEDataImportId, // 导入标记 导入模型的代码名称\n owner_type: 'PERSONAL', // 所有者类型\n };\n if (listValue.value) {\n const columnData = columnMappingListMap.get(listValue.value);\n const resput = await importMapping('put', columnData.id, data);\n if (resput.status === 200 && resput.ok) {\n columnMappingListMap.set(listValue.value, resput.data);\n }\n } else {\n options.value.push({ value: data.name, label: data.name });\n const res = await importMapping('post', '', data);\n if (res.status === 200 && res.ok) {\n columnMappingListMap.set(data.name, res.data);\n }\n columnMappingSaveName.value = data.name;\n listValue.value = data.name;\n }\n } else {\n ibiz.message.warning('请上传文件');\n }\n };\n\n // 导入\n const onButtonImportClick = async () => {\n if (previewinfo.value[0].length) {\n if (listValue.value) {\n const data = columnMappingListMap.get(listValue.value);\n const { id } = data;\n const dataEntityTag = data.data_entity_tag;\n const url = `${pluralLower(\n dataEntityTag,\n )}/asyncimportdata2?srfimporttag=${\n props.appDataEntity.defaultAppDEDataImportId\n }&srfossfileid=${fileid}&srfimportschemaid=${id}`;\n await ibiz.net.request(url, {\n method: 'get',\n });\n ibiz.notification.info({\n desc: '开始导入,详细进度和结果请看应用通知',\n });\n onCancelButtonClick();\n } else {\n await onButtonColumnMappingImportClick();\n await onButtonImportClick();\n }\n } else {\n ibiz.message.warning('请上传文件');\n }\n };\n\n const findDialog = (el: HTMLDivElement) => {\n const regex = /\\bel-dialog\\b/;\n if (!regex.test(el.className)) {\n if (el.parentElement) {\n findDialog(el.parentElement as HTMLDivElement);\n }\n } else {\n el.style.maxWidth = 'calc(100% - 100px)';\n }\n };\n\n // 列映射列表查询\n const columnMappingListQuery = async () => {\n const params = {\n n_import_tag_eq: props.appDataEntity.defaultAppDEDataImportId,\n n_system_tag_eq: ibiz.appData?.context.srfsystemid,\n n_data_entity_tag_eq: props.appDataEntity.codeName,\n };\n const res = await importMapping('post', 'fetch_cur_user', params);\n if (res.status === 200 && res.data) {\n res.data.forEach((item: IData) => {\n options.value.push({ value: item.name, label: item.name });\n columnMappingListMap.set(item.name, item);\n });\n }\n };\n\n onMounted(() => {\n const dataImport = props.appDataEntity.appDEDataImports?.find(\n (importItem: IAppDEDataImport) =>\n importItem.id === props.appDataEntity.defaultAppDEDataImportId,\n );\n if (dataImport && dataImport.dedataImportItems) {\n dataOption = dataImport.dedataImportItems;\n } else if (props.appDataEntity.appDEFields) {\n dataOption = props.appDataEntity.appDEFields;\n }\n findDialog(dataimport2.value.parentElement);\n columnMappingListQuery();\n });\n\n // 绘制下拉选择\n const renderSelect = (itemx: string, index: number) => {\n const change = (item: string) => {\n selectValues.value[index] = item;\n // columnMap.set(itemx, { name: item, index });\n const data = columnMap.get(`${itemx}-${index}`);\n data.name = item;\n columnMap.set(`${itemx}-${index}`, data);\n ColumnMappingSave.value = false;\n };\n return (\n <el-select\n modelValue={selectValues.value[index]}\n placeholder='选择当前列对应的导入属性'\n onChange={change}\n key={index}\n popper-class={ns.e('dataimport-select')}\n class={ns.e('select')}\n >\n {dataOption.map(item => {\n return (\n <el-option\n key={item.name}\n value={item.id}\n label={item.caption ? item.caption : item.logicName}\n ></el-option>\n );\n })}\n </el-select>\n );\n };\n\n // 绘制表格\n const renderTable = () => {\n const arr = previewinfo.value;\n // 创建表格行\n const rows = arr.map((row: string[], rowIndex: number) => (\n <tr key={rowIndex}>\n {row.map((cell, cellIndex) =>\n rowIndex === 0 ? (\n <th\n key={cellIndex}\n style={{\n border: '1px solid #e5e5e5',\n padding: '4px',\n 'min-width': '132px',\n }}\n >\n {cell}\n </th>\n ) : (\n <td\n key={cellIndex}\n style={{\n border: '1px solid #e5e5e5',\n padding: '4px',\n 'min-width': '132px',\n }}\n >\n {cell}\n </td>\n ),\n )}\n </tr>\n ));\n const newRows = [\n <tr key='newRow'>\n {arr[0].map((item: string, index: number) => (\n <td\n key={index}\n style={{ border: '1px solid #e5e5e5', 'min-width': '132px' }}\n >\n {renderSelect(item, index)}\n </td>\n ))}\n </tr>,\n ...rows,\n ];\n // 返回表格元素\n return (\n <table style={'border-collapse:collapse;border-spacing:0'}>\n <tbody>{newRows}</tbody>\n </table>\n );\n };\n\n // 请求头\n const headers: Ref<IData> = ref({\n Authorization: `Bearer ${getCookie(CoreConst.TOKEN)}`,\n });\n\n // 请求地址\n const UploadUrl = computed(() => {\n let uploadUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.uploadFileUrl}/temp`;\n uploadUrl += qs.stringify({ preview: true }, { addQueryPrefix: true });\n return uploadUrl;\n });\n\n // 上传前\n const beforeUpload = () => {\n isLoading.value = true;\n };\n\n // 上传成功\n const onSuccess = (response: IData, _file: IData, _fileList: []) => {\n fileName = '';\n fileid = '';\n if (response.name) {\n fileName = response.name;\n }\n if (response.fileid) {\n fileid = response.fileid;\n }\n if (response.previewinfo) {\n previewinfo.value = JSON.parse(response.previewinfo);\n\n if (previewinfo.value[0] && previewinfo.value[0].length > 0) {\n // 获取第一个数组的长度\n const firstArrayLength = previewinfo.value[0].length;\n\n // 补全其他数组\n for (let i = 1; i < previewinfo.value.length; i++) {\n const currentArray = previewinfo.value[i];\n const currentArrayLength = currentArray.length;\n\n // 如果当前数组长度小于第一个数组长度,则进行补全\n if (currentArrayLength < firstArrayLength) {\n const diff = firstArrayLength - currentArrayLength;\n for (let j = 0; j < diff; j++) {\n currentArray.push('');\n }\n }\n }\n\n columnMap.clear();\n previewinfo.value[0].forEach((item: string, index: number) => {\n columnMap.set(`${item}-${index}`, {\n name: '',\n index,\n caption: item,\n });\n selectValues.value[index] = '';\n });\n }\n }\n ColumnMappingSave.value = false;\n isLoading.value = false;\n watchValue(listValue.value);\n };\n\n const renderEmpty = () => {\n return <div class={ns.e('empty')}>暂无数据</div>;\n };\n\n const handleDeleteOption = async (e: Event, str: string) => {\n e.stopPropagation();\n const columnData = columnMappingListMap.get(str);\n const res = await importMapping('delete', columnData.id);\n // 删除之后把下拉里的也删除\n if (res.status === 200 && res.ok) {\n const index = options.value.findIndex(obj => obj.label === str);\n if (index !== -1) {\n options.value.splice(index, 1);\n }\n columnMappingListMap.delete(str);\n if (listValue.value === str) {\n listValue.value = '';\n }\n select.value.blur();\n }\n };\n\n return {\n ns,\n onButtonColumnMappingImportClick,\n onButtonImportClick,\n onCancelButtonClick,\n isLoading,\n UploadUrl,\n headers,\n onSuccess,\n renderTable,\n renderSelect,\n previewinfo,\n selectValues,\n renderEmpty,\n beforeUpload,\n dataimport2,\n listValue,\n options,\n handleDeleteOption,\n select,\n isNoPersonel,\n };\n },\n render() {\n return (\n <div\n class={[this.ns.b(), 'ibiz-view']}\n v-loading={this.isLoading}\n ref='dataimport2'\n >\n <div\n class={[this.ns.e('data-import2-toolbar'), 'ibiz-panel-view-header']}\n >\n <div class={[this.ns.e('caption')]}>\n <div class='ibiz-panel-container'>\n <div class='ibiz-control-captionbar'>\n <div class='ibiz-control-captionbar-caption'>导入数据</div>\n </div>\n </div>\n </div>\n <div\n class={[\n this.ns.e('data-import2-toolbar-container'),\n 'ibiz-panel-container--view_header_right',\n ]}\n >\n <div class='ibiz-panel-container'>\n <div class='ibiz-control-toolbar'>\n <div class='ibiz-control-toolbar__item'>\n <el-select\n ref='select'\n v-model={this.listValue}\n clearable\n placeholder='选择导入模式'\n disabled={\n !(this.previewinfo[0] && this.previewinfo[0].length)\n }\n popper-class={this.ns.e('dataimport-select')}\n >\n {this.options.map(item => {\n return (\n <el-option\n label={item.label}\n value={item.value}\n class={[this.ns.e('select-option')]}\n >\n {{\n default: () => (\n <div class={[this.ns.e('select-option-item')]}>\n <span>{item.label}</span>\n <el-button\n text\n size='small'\n onClick={(e: Event) =>\n this.handleDeleteOption(e, item.value)\n }\n class={this.ns.e('select-option-item-button')}\n >\n 删除\n </el-button>\n </div>\n ),\n }}\n </el-option>\n );\n })}\n </el-select>\n </div>\n <el-upload\n class='ibiz-control-toolbar__item'\n action={this.UploadUrl}\n headers={this.headers}\n show-file-list={false}\n onSuccess={this.onSuccess}\n before-upload={this.beforeUpload}\n >\n <el-button>文件上传</el-button>\n </el-upload>\n <div class='ibiz-control-toolbar__item'>\n <el-button\n onClick={this.onButtonColumnMappingImportClick}\n disabled={this.isNoPersonel}\n >\n 导入模式保存\n </el-button>\n </div>\n <div class='ibiz-control-toolbar__item'>\n <el-button onClick={this.onButtonImportClick}>导入</el-button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n class={[this.ns.e('template-container'), 'ibiz-panel-view-content']}\n >\n {this.previewinfo[0] && this.previewinfo[0].length\n ? this.renderTable()\n : this.renderEmpty()}\n </div>\n </div>\n );\n },\n});\n","import { App, defineAsyncComponent } from 'vue';\nimport {\n IBizCodeList,\n IBizControlBase,\n IBizControlShell,\n IBizIcon,\n IBizRouterView,\n IBizViewShell,\n} from '@ibiz-template/vue3-util';\nimport { IBizActionToolbar } from './action-toolbar/action-toolbar';\nimport { IBizCol } from './col/col';\nimport { IBizRow } from './row/row';\nimport { IBizRawItem } from './rawitem/rawitem';\nimport { IBizNoData } from './no-data/no-data';\nimport { IBizSplit } from './split/split';\nimport { IBizSplitTrigger } from './split-trigger/split-trigger';\nimport { IBizExtendActionTimeLine } from './extend-action-timeline/extend-action-timeline';\nimport { ViewMessage } from './view-message/view-message';\nimport { IBizPagination } from './pagination/pagination';\nimport { IBizSortBar } from './sort-bar/sort-bar';\nimport { DataImport } from './data-import/data-import';\nimport { DataImport2 } from './data-import2/data-import2';\n\nexport * from './col/col';\nexport * from './row/row';\nexport * from './action-toolbar/action-toolbar';\nexport * from './rawitem/rawitem';\nexport * from './split/split';\nexport * from './split-trigger/split-trigger';\nexport * from './sort-bar/sort-bar';\nexport type { MapOptions } from './map-chart/map-chart.util';\n\nexport const IBizCommonComponents = {\n install: (v: App): void => {\n v.component(IBizControlBase.name, IBizControlBase);\n v.component(IBizIcon.name, IBizIcon);\n v.component(IBizRow.name, IBizRow);\n v.component(IBizCol.name, IBizCol);\n v.component(IBizRouterView.name, IBizRouterView);\n v.component(IBizActionToolbar.name, IBizActionToolbar);\n v.component(IBizViewShell.name, IBizViewShell);\n v.component(IBizControlShell.name, IBizControlShell);\n v.component(IBizRawItem.name, IBizRawItem);\n v.component(IBizCodeList.name, IBizCodeList);\n v.component(IBizNoData.name, IBizNoData);\n v.component(IBizSplit.name, IBizSplit);\n v.component(IBizSplitTrigger.name, IBizSplitTrigger);\n v.component(IBizExtendActionTimeLine.name, IBizExtendActionTimeLine);\n v.component(ViewMessage.name, ViewMessage);\n v.component(IBizPagination.name, IBizPagination);\n v.component(IBizSortBar.name, IBizSortBar);\n v.component(DataImport.name, DataImport);\n v.component(DataImport2.name, DataImport2);\n v.component(\n 'IBizMapChart',\n defineAsyncComponent({\n loader: () => import('./map-chart/map-chart'),\n }),\n );\n },\n};\n\nexport default IBizCommonComponents;\n","import { defineComponent, PropType, VNode, inject, computed } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './auth-userinfo.scss';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { PanelItemController, CTX } from '@ibiz-template/runtime';\n\nexport const AuthUserinfo = defineComponent({\n name: 'IBizAuthUserinfo',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(prop) {\n const ns = useNamespace('user-info');\n const c = prop.controller;\n const { srfusername = '游客', srfpersonname } = ibiz.appData?.context || {};\n const router = useRouter();\n\n const ctx = inject<CTX | undefined>('ctx', undefined);\n\n const menuAlign = computed(() => {\n if (ctx?.view) {\n return ctx.view.model.mainMenuAlign || 'LEFT';\n }\n return 'LEFT';\n });\n\n const onClick = async () => {\n const bol = await ibiz.auth.logout();\n if (bol) {\n await router.push(\n `/login?ru=${encodeURIComponent(\n window.location.hash.replace('#/', '/'),\n )}`,\n );\n ibiz.util.showAppLoading();\n window.location.reload();\n }\n };\n\n const isCollapse = computed(() => {\n return (c.panel.view.state as IData).isCollapse;\n });\n\n return {\n ns,\n c,\n onClick,\n srfusername,\n srfpersonname,\n router,\n menuAlign,\n isCollapse,\n };\n },\n render() {\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('left', this.menuAlign === 'LEFT'),\n this.ns.is('top', this.menuAlign === 'TOP'),\n this.ns.is('collapse', this.isCollapse),\n ]}\n >\n <el-dropdown>\n {{\n default: (): VNode => (\n <div class={this.ns.b('info')}>\n <div class={this.ns.b('label')}>\n <el-avatar\n class={this.ns.b('avatar')}\n src='./assets/images/user-avatar.png'\n />\n {!this.isCollapse && (\n <div class={this.ns.b('name')}>\n <div class={this.ns.be('name', 'user-name')}>\n {this.srfusername}\n </div>\n {this.menuAlign === 'LEFT' && (\n <div class={this.ns.be('name', 'person-name')}>\n {this.srfpersonname}\n </div>\n )}\n </div>\n )}\n </div>\n <ion-icon\n class={this.ns.e('down')}\n name='chevron-down-outline'\n ></ion-icon>\n </div>\n ),\n dropdown: (): VNode => (\n <el-dropdown-menu>\n <el-dropdown-item>\n <ion-icon name='log-out-outline' class={this.ns.e('icon')} />\n <span onClick={this.onClick}>退出登录</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n ),\n }}\n </el-dropdown>\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\n\n/**\n * 用户信息适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class AuthUserinfoProvider\n * @implements {EditorProvider}\n */\nexport class AuthUserinfoProvider implements IPanelItemProvider {\n component: string = 'IBizAuthUserinfo';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { AuthUserinfo } from './auth-userinfo';\nimport { AuthUserinfoProvider } from './auth-userinfo.provider';\n\nexport const IBizAuthUserinfo = withInstall(AuthUserinfo, function (v: App) {\n v.component(AuthUserinfo.name, AuthUserinfo);\n registerPanelItemProvider(\n 'RAWITEM_AUTH_USERINFO',\n () => new AuthUserinfoProvider(),\n );\n});\n\nexport default IBizAuthUserinfo;\n","import { INavViewMsg, PanelItemState } from '@ibiz-template/runtime';\n\n/**\n * 导航占位状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class NavPosIndexState\n * @extends {PanelItemState}\n */\nexport class NavPosIndexState extends PanelItemState {\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 /**\n * 导航的视图的操作顺序\n * @author lxm\n * @date 2023-05-25 06:25:34\n * @type {string[]}\n */\n operateSort: string[] = [];\n}\n","import {\n EventBase,\n IAppMenuController,\n IModal,\n IModalData,\n Modal,\n PanelItemController,\n ViewMode,\n} from '@ibiz-template/runtime';\nimport { routerCallback } from '@ibiz-template/vue3-util';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { Router } from 'vue-router';\nimport { NavTabsController } from '../nav-tabs/nav-tabs.controller';\nimport { NavPosIndexState } from './nav-pos-index.state';\n\n/**\n * 导航占位控制器\n *\n * @export\n * @class NavPosIndexController\n * @extends {PanelItemController}\n */\nexport class NavPosIndexController extends PanelItemController<IPanelRawItem> {\n declare state: NavPosIndexState;\n\n /**\n * 导航视图的modal\n * @author lxm\n * @date 2023-05-12 09:47:52\n * @type {{ [key: string]: IModal }}\n */\n viewModals: { [key: string]: IModal } = {};\n\n /**\n * router对象\n * @author lxm\n * @date 2023-05-25 08:02:43\n * @type {Router}\n */\n router?: Router;\n\n /**\n * 是否关闭后自动跳转上一个页面\n * @author lxm\n * @date 2023-05-25 08:43:49\n * @type {boolean}\n */\n autoGoLast: boolean = true;\n\n protected createState(): NavPosIndexState {\n return new NavPosIndexState(this.parent?.state);\n }\n\n setRouter(router: Router): void {\n this.router = router;\n }\n\n /**\n * 当前视图的路由层级,非路由模式不存在。\n * @author lxm\n * @date 2023-05-09 12:46:26\n * @readonly\n */\n get routeDepth(): number | undefined {\n return this.panel.view.modal.routeDepth;\n }\n\n /**\n * 导航标签页控制器\n * @author lxm\n * @date 2023-05-10 08:41:54\n * @readonly\n * @type {(NavTabsController | undefined)}\n */\n get navTabs(): NavTabsController | undefined {\n return this.panel.panelItems.nav_tabs as NavTabsController;\n }\n\n /**\n * 应用菜单控制器\n * @author lxm\n * @date 2023-05-10 08:41:42\n * @readonly\n * @type {(IAppMenuController | undefined)}\n */\n get appmenu(): IAppMenuController | undefined {\n return this.panel.getController('appmenu') as IAppMenuController;\n }\n\n /**\n * 改变显示视图\n * @author lxm\n * @date 2023-05-25 01:28:49\n * @param {string} key\n */\n changeView(key: string): void {\n const find = this.state.navViewMsgs[key];\n if (find?.fullPath) {\n this.router?.push(find.fullPath);\n }\n }\n\n /**\n * 路由变更,新视图进缓存并初始化,已有的就只切换。\n * @author lxm\n * @date 2023-05-25 03:07:07\n * @param {{ currentKey: string; fullPath: string }} { currentKey }\n * @return {*}\n */\n onRouteChange({\n currentKey,\n fullPath,\n }: {\n currentKey: string;\n fullPath: string;\n }): void {\n // currentKey是否变更,变更说明是首页下一级的页面切换\n const isCurrentKeyChange = this.state.currentKey !== currentKey;\n if (isCurrentKeyChange) {\n // 1.当从别的页面切换过来时\n // 2.且缓存里已经有当前视图的缓存\n // 3.且当前的跳转没有子级路由时,把上一次的路径还原了,这次的路由不处理\n if (\n this.state.cacheKeys.includes(currentKey) &&\n this.router &&\n this.router.currentRoute.value.matched.length === this.routeDepth! + 1\n ) {\n const lastFullPath = this.state.navViewMsgs[currentKey].fullPath!;\n if (lastFullPath !== fullPath) {\n // 延时跳转,避免两次跳转间隔太快路由没反应\n setTimeout(() => {\n this.router!.push({ path: lastFullPath });\n }, 0);\n return;\n }\n }\n\n // currentKey变更时先切换\n this.state.currentKey = currentKey;\n if (this.navTabs) {\n this.navTabs.state.currentKey = currentKey;\n }\n }\n\n // 比监控视图层级低的路由跳转不做缓存等处理\n if (currentKey === '') {\n return;\n }\n\n // *维护操作记录\n const index = this.state.operateSort.indexOf(currentKey);\n if (index !== -1) {\n // 记录里存在先删除\n this.state.operateSort.splice(index, 1);\n }\n // 往最后面添加当前key\n this.state.operateSort.push(currentKey);\n\n // *维护缓存\n if (!this.state.cacheKeys.includes(currentKey)) {\n // 缓存里没有的,加入缓存\n this.state.cacheKeys.push(currentKey);\n\n // 维护每个视图的modal\n if (this.routeDepth) {\n this.viewModals[currentKey] = new Modal({\n mode: ViewMode.ROUTE,\n viewUsage: 1,\n routeDepth: this.routeDepth + 1,\n dismiss: modal => {\n // 执行对应key的dismiss方法\n this.dismiss(currentKey, modal);\n },\n });\n }\n }\n\n // *维护导航视图信息\n if (this.state.navViewMsgs[currentKey]) {\n this.state.navViewMsgs[currentKey].fullPath = fullPath;\n } else {\n ibiz.log.debug('维护导航视图信息', currentKey, fullPath);\n this.state.navViewMsgs[currentKey] = {\n key: currentKey,\n fullPath,\n };\n routerCallback.active(currentKey);\n }\n }\n\n /**\n * 监听视图创建,获取并监听视图控制器\n * @author lxm\n * @date 2023-05-25 03:03:22\n * @param {EventBase} event\n */\n onViewCreated(event: EventBase): void {\n if (this.navTabs) {\n const { view } = event;\n const key = this.state.currentKey; // 缓存一下当前的key,后面每次都是用它\n this.navTabs.updateViewInfo(key, { caption: view.model.caption });\n // 监听这个视图的事件\n view.evt.on('onViewInfoChange', ({ caption, dataInfo }) => {\n this.navTabs!.updateViewInfo(key, { caption, dataInfo });\n });\n }\n }\n\n /**\n * 删除单个缓存\n * @author lxm\n * @date 2023-05-09 02:19:09\n * @param {string} key\n */\n removeCache(key: string): void {\n const index = this.state.cacheKeys.indexOf(key);\n if (index !== -1) {\n this.state.cacheKeys.splice(index, 1);\n\n // 维护每个视图的modal\n delete this.viewModals[key];\n\n // 删除导航视图信息\n delete this.state.navViewMsgs[key];\n\n // 删除操作记录里的数据\n const operateIndex = this.state.operateSort.indexOf(key);\n if (operateIndex !== -1) {\n this.state.operateSort.splice(operateIndex, 1);\n }\n }\n }\n\n /**\n * 清空缓存\n * @author lxm\n * @date 2023-05-09 02:19:55\n */\n clearCache(): void {\n this.state.cacheKeys = [];\n this.viewModals = {};\n }\n\n /**\n * 关闭视图\n * 走modal的dismiss,会走一遍视图内部的校验,不通过则不会关闭\n * @author lxm\n * @date 2023-05-25 03:10:23\n * @param {string} keys\n */\n async closeViewByKeys(keys: string[]): Promise<void> {\n // 这边可能会关闭多个,但只会回退一次,关闭自动回退,等最后结束之后回退。\n this.autoGoLast = false;\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n const modal = this.viewModals[key];\n // eslint-disable-next-line no-await-in-loop\n await modal.dismiss();\n }\n this.goLast();\n this.autoGoLast = true;\n }\n\n /**\n * 自身的dismiss相关操作\n *\n * @author chitanda\n * @date 2023-07-12 22:07:09\n * @protected\n * @param {string} key\n * @param {IModalData} modal\n * @return {*}\n */\n protected dismiss(key: string, modal: IModalData): void {\n routerCallback.close(key, modal);\n\n // 分页存在的时候会去处理分页那边的删除\n if (this.navTabs) {\n this.navTabs.removeCache(key);\n }\n this.removeCache(key);\n\n if (this.autoGoLast) {\n this.goLast();\n }\n }\n\n /**\n * 返回上一个页面或上一层空白路由\n * @author lxm\n * @date 2023-05-25 06:46:27\n * @protected\n */\n protected goLast(): void {\n const lastKey = this.state.operateSort.pop();\n if (lastKey) {\n // 如果上一个视图是当前视图,则不跳转\n if (this.state.currentKey === lastKey) {\n this.state.operateSort.push(lastKey);\n return;\n }\n const fullPath = this.state.navViewMsgs[lastKey].fullPath;\n this.router!.push(fullPath!);\n } else {\n // 没有上一个视图时,跳转到当前层级的空白页面\n const route = this.router!.currentRoute.value;\n const { appContext } = route.params;\n let indexPath = `/${appContext}`;\n // 处理首页多层嵌套跳转当前首页空白页\n for (let index = 1; index <= this.routeDepth!; index++) {\n indexPath += `/${route.params[`view${index}`]}/${\n ibiz.env.routePlaceholder\n }`;\n }\n this.router!.push(indexPath);\n }\n }\n}\n","import { defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace, onRouteChange } from '@ibiz-template/vue3-util';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { EventBase } from '@ibiz-template/runtime';\nimport { useRoute, useRouter } from 'vue-router';\nimport { NavPosIndexController } from './nav-pos-index.controller';\nimport './nav-pos-index.scss';\n\nexport const NavPosIndex = defineComponent({\n name: 'IBizNavPosIndex',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: NavPosIndexController,\n required: true,\n },\n },\n setup(props) {\n const c = props.controller;\n const ns = useNamespace('nav-pos-index');\n const onViewCreated = (event: EventBase): void => {\n c.onViewCreated(event);\n };\n const router = useRouter();\n c.setRouter(router);\n\n // 路由绘制的时候要做的事情\n if (c.routeDepth) {\n onRouteChange(args => {\n c.onRouteChange(args);\n }, c.routeDepth + 1);\n // 当首页且没有标签页的时候,首页菜单点击清空历史记录\n if (c.panel.view.model.viewType === 'APPINDEXVIEW' && !c.navTabs) {\n const route = useRoute();\n let cacheFullPath = '';\n c.appmenu?.evt.on('onClick', () => {\n cacheFullPath = route.fullPath;\n });\n\n router.beforeEach((to, from, next) => {\n if (from.fullPath === cacheFullPath) {\n c.clearCache();\n }\n next();\n });\n }\n }\n\n return { ns, onViewCreated, c };\n },\n render() {\n const { state, viewModals } = this.c;\n const { currentKey, cacheKeys } = state;\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 {this.c.routeDepth ? (\n <iBizRouterView\n manualKey={currentKey}\n modal={viewModals[currentKey]}\n onCreated={this.onViewCreated}\n >\n {({ Component }: { Component: string }): VNode | null => {\n return (\n <keepAlive include={cacheKeys} max={30} isKey>\n {Component && <Component />}\n </keepAlive>\n );\n }}\n </iBizRouterView>\n ) : (\n <div>非路由模式导航占位暂未支持</div>\n )}\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 { NavPosIndexController } from './nav-pos-index.controller';\n\n/**\n * 导航占位适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class NavPosIndexProvider\n * @implements {EditorProvider}\n */\nexport class NavPosIndexProvider implements IPanelItemProvider {\n component: string = 'IBizNavPosIndex';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<NavPosIndexController> {\n const c = new NavPosIndexController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { NavPosIndex } from './nav-pos-index';\nimport { NavPosIndexProvider } from './nav-pos-index.provider';\nimport { NavPosIndexState } from './nav-pos-index.state';\nimport { NavPosIndexController } from './nav-pos-index.controller';\n\nexport { NavPosIndexState, NavPosIndexController };\n\nexport const IBizNavPosIndex = withInstall(NavPosIndex, function (v: App) {\n v.component(NavPosIndex.name, NavPosIndex);\n registerPanelItemProvider(\n 'RAWITEM_NAV_POS_INDEX',\n () => new NavPosIndexProvider(),\n );\n});\n\nexport default IBizNavPosIndex;\n","import { PanelItemState } from '@ibiz-template/runtime';\n\nexport interface TabMsg {\n key: string;\n caption?: string;\n dataInfo?: string;\n}\n\n/**\n * 导航标签页占位状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class NavTabsState\n * @extends {PanelItemState}\n */\nexport class NavTabsState extends PanelItemState {\n /**\n * 当前路由key\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-10-20 16:23:42\n */\n currentKey: string = '';\n\n /**\n * 分页标签项\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-10-20 16:23:26\n */\n tabItems: TabMsg[] = [];\n\n /**\n * 当前激活tab\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-10-20 16:23:17\n */\n activeTab: string = '';\n}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { isNil, reject } from 'ramda';\nimport { NavPosIndexController } from '../nav-pos-index';\nimport { NavTabsState, TabMsg } from './nav-tabs.state';\n\n/**\n * 导航占位控制器\n *\n * @export\n * @class NavTabsController\n * @extends {PanelItemController}\n */\nexport class NavTabsController extends PanelItemController<IPanelRawItem> {\n declare state: NavTabsState;\n\n protected createState(): NavTabsState {\n return new NavTabsState(this.parent?.state);\n }\n\n /**\n * 当前视图的路由层级,非路由模式不存在。\n * @author lxm\n * @date 2023-05-09 12:46:26\n * @readonly\n */\n get routeDepth(): number | undefined {\n return this.panel.view.modal.routeDepth;\n }\n\n /**\n * 导航占位控制器\n * @author lxm\n * @date 2023-05-09 02:35:48\n * @readonly\n * @type {(NavPosIndexController | undefined)}\n */\n get navPos(): NavPosIndexController | undefined {\n return this.panel.panelItems.nav_pos_index as NavPosIndexController;\n }\n\n /**\n * 获取tabItem\n * @author lxm\n * @date 2023-05-09 02:04:11\n * @param {string} key\n * @return {*}\n */\n findTabItem(key: string): TabMsg | undefined {\n return this.state.tabItems.find(item => item.key === key);\n }\n\n /**\n * 点击处理\n * @author lxm\n * @date 2023-05-25 01:31:04\n * @param {string} key\n */\n onTabClick(key: string): void {\n this.navPos?.changeView(key);\n }\n\n /**\n * 更新视图信息\n * @author lxm\n * @date 2023-05-09 01:40:34\n * @param {string} key\n * @param {{ caption?: string; dataInfo?: string }} info\n */\n updateViewInfo(\n key: string,\n info: { caption?: string; dataInfo?: string },\n ): void {\n const findItem = this.findTabItem(key);\n if (findItem) {\n Object.assign(findItem, reject(isNil, info));\n } else {\n this.state.tabItems.push({ key, ...info });\n this.state.activeTab = this.state.currentKey;\n }\n }\n\n /**\n * 删除某个key对应的数据\n * 仅处理组件自身维护的数据\n * @author lxm\n * @date 2023-05-25 03:18:20\n * @param {string} key\n */\n removeCache(key: string): void {\n const findIndex = this.state.tabItems.findIndex(item => item.key === key);\n if (findIndex !== -1) {\n this.state.tabItems.splice(findIndex, 1);\n }\n }\n\n /**\n * 删除分页\n * @author lxm\n * @date 2023-05-09 02:08:46\n * @param {string} key\n */\n onTabRemove(key: string): void {\n this.navPos?.closeViewByKeys([key]);\n }\n\n /**\n * 删除其他所有的标签页\n * @author lxm\n * @date 2023-05-09 02:19:55\n */\n removeOther(): void {\n const currentKey = this.state.currentKey;\n const removeKeys: string[] = [];\n this.state.tabItems.forEach(item => {\n if (item.key !== currentKey) {\n removeKeys.push(item.key);\n }\n });\n if (removeKeys.length > 0) {\n this.navPos?.closeViewByKeys(removeKeys);\n }\n }\n\n /**\n * 删除所有的标签页\n * @author lxm\n * @date 2023-05-09 02:50:01\n */\n removeAll(): void {\n const removeKeys: string[] = this.state.tabItems.map(item => item.key);\n if (removeKeys.length > 0) {\n this.navPos?.closeViewByKeys(removeKeys);\n }\n }\n}\n","import { defineComponent, PropType, VNode, watch } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './nav-tabs.scss';\nimport { TabsPaneContext } from 'element-plus';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { NavTabsController } from './nav-tabs.controller';\n\nexport interface dropdownAction {\n text: string;\n value?: string;\n}\n\nexport const NavTabs = defineComponent({\n name: 'IBizNavTabs',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: NavTabsController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('nav-tabs');\n const c = props.controller;\n const { state } = props.controller;\n\n // 下拉菜单项\n const actions: dropdownAction[] = [\n { text: '关闭所有', value: 'closeAll' },\n { text: '关闭其他', value: 'closeOther' },\n ];\n\n // 切换tab\n const changePage = (pane: TabsPaneContext): void => {\n if (state.currentKey !== pane.paneName) {\n c.onTabClick(pane.paneName as string);\n }\n };\n\n // 删除tab\n const onTabRemove = (key: string): void => {\n c.onTabRemove(key);\n };\n\n // 处理下拉点击\n const handleCommand = (command: dropdownAction): void => {\n if (command.value === 'closeAll') {\n c.removeAll();\n } else if (command.value === 'closeOther') {\n c.removeOther();\n }\n };\n\n watch(\n () => c.state.currentKey,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n const findItem = c.findTabItem(newVal);\n // 如果tabItems里有说明是路由切换\n if (findItem) {\n state.activeTab = newVal;\n }\n }\n },\n );\n\n return { ns, actions, changePage, onTabRemove, handleCommand };\n },\n render() {\n const { state } = this.controller;\n return (\n <div class={[this.ns.b(), ...this.controller.containerClass]}>\n <div class={this.ns.e('left')}>\n <el-tabs\n type='card'\n v-model={state.activeTab}\n closable\n onTabClick={this.changePage}\n onTabRemove={this.onTabRemove}\n >\n {state.tabItems.map(msg => {\n let label = msg.caption;\n if (msg.dataInfo) {\n label += ` - ${msg.dataInfo}`;\n }\n return (\n <el-tab-pane\n name={msg.key}\n key={msg.key}\n label={label}\n ></el-tab-pane>\n );\n })}\n </el-tabs>\n </div>\n <div class={this.ns.e('right')}>\n <el-dropdown onCommand={this.handleCommand}>\n {{\n default: (): VNode => {\n return (\n <el-button size='small' type='primary'>\n 更多 <ion-icon name='arrow-down'></ion-icon>\n </el-button>\n );\n },\n dropdown: (): VNode => {\n return (\n <el-dropdown-menu>\n {this.actions.map((action: dropdownAction) => {\n return (\n <el-dropdown-item command={action}>\n {action.text}\n </el-dropdown-item>\n );\n })}\n </el-dropdown-menu>\n );\n },\n }}\n </el-dropdown>\n </div>\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 { NavTabsController } from './nav-tabs.controller';\n\n/**\n * 导航标签页占位适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class NavTabsProvider\n * @implements {EditorProvider}\n */\nexport class NavTabsProvider implements IPanelItemProvider {\n component: string = 'IBizNavTabs';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<NavTabsController> {\n const c = new NavTabsController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { NavTabs } from './nav-tabs';\nimport { NavTabsProvider } from './nav-tabs.provider';\n\nexport * from './nav-tabs.controller';\nexport * from './nav-tabs.state';\n\nexport const IBizNavTabs = withInstall(NavTabs, function (v: App) {\n v.component(NavTabs.name, NavTabs);\n registerPanelItemProvider('RAWITEM_NAV_TABS', () => new NavTabsProvider());\n});\n\nexport default IBizNavTabs;\n","import { PanelItemState, UIActionButtonState } from '@ibiz-template/runtime';\n\n/**\n * 面板按钮状态\n *\n * @author lxm\n * @date 2023-02-07 06:04:27\n * @export\n * @class PanelButtonState\n * @extends {PanelItemState}\n */\nexport class PanelButtonState extends PanelItemState {\n /**\n * 加载中\n * @author lxm\n * @date 2023-07-21 10:11:21\n * @type {boolean}\n */\n loading: boolean = false;\n\n /**\n * 界面行为状态\n * @author lxm\n * @date 2023-07-21 03:34:27\n * @type {UIActionButtonState}\n */\n uiActionState!: UIActionButtonState;\n}\n","import {\n PanelController,\n PanelItemController,\n PanelNotifyState,\n UIActionButtonState,\n UIActionUtil,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\nimport { IPanelButton } from '@ibiz/model-core';\nimport { PanelButtonState } from './panel-button.state';\n\n/**\n * 面板按钮控制器\n *\n * @export\n * @class PanelButtonController\n * @extends {PanelItemController<IPanelButton>}\n */\nexport class PanelButtonController extends PanelItemController<IPanelButton> {\n declare state: PanelButtonState;\n\n protected createState(): PanelButtonState {\n return new PanelButtonState(this.parent?.state);\n }\n\n /**\n * 面板控制器\n *\n * @type {ViewLayoutPanelController}\n * @memberof PanelButtonController\n */\n declare panel: ViewLayoutPanelController;\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 * Creates an instance of PanelButtonController.\n * @param {IPanelButton} model\n * @param {PanelController} panel\n * @param {PanelItemController} [parent]\n * @memberof PanelButtonController\n */\n constructor(\n model: IPanelButton,\n panel: PanelController,\n parent?: PanelItemController,\n ) {\n super(model, panel, parent);\n this.state.uiActionState = this.createUIActionState();\n }\n\n /**\n * 初始化\n *\n * @return {*} {Promise<void>}\n * @memberof PanelButtonController\n */\n async onInit(): Promise<void> {\n await super.onInit();\n this.updateButtonState();\n }\n\n /**\n * 创建界面行为状态对象\n *\n * @protected\n * @return {*} {PanelButtonState}\n * @memberof PanelButtonController\n */\n protected createUIActionState(): UIActionButtonState {\n const { uiactionId, name } = this.model;\n return new UIActionButtonState(\n name!,\n this.panel.context.srfappid!,\n uiactionId,\n );\n }\n\n /**\n * 面板数据变更通知(由面板控制器调用)\n *\n * @param {string[]} names\n * @memberof PanelButtonController\n */\n async dataChangeNotify(names: string[]): Promise<void> {\n await this.updateButtonState();\n super.dataChangeNotify(names);\n }\n\n /**\n * 面板状态变更通知\n *\n * @param {PanelNotifyState} _state\n * @memberof PanelButtonController\n */\n async panelStateNotify(_state: PanelNotifyState): Promise<void> {\n await this.updateButtonState();\n super.panelStateNotify(_state);\n }\n\n /**\n * 更新按钮权限状态\n *\n * @memberof PanelButtonController\n */\n async updateButtonState(): Promise<void> {\n await this.state.uiActionState.update(this.data);\n }\n\n /**\n * 行为点击\n *\n * @param {MouseEvent} event\n * @return {*} {Promise<void>}\n * @memberof PanelButtonController\n */\n async onActionClick(event: MouseEvent): Promise<void> {\n const { uiactionId } = this.model;\n await UIActionUtil.execAndResolved(uiactionId!, {\n context: this.panel.context,\n params: this.panel.params,\n data: [this.data],\n view: this.panel.view,\n event,\n noWaitRoute: true,\n });\n }\n\n calcItemVisible(data: IData): void {\n // 权限不显示时就一定不显示\n if (this.state.uiActionState.visible === false) {\n this.state.visible = false;\n return;\n }\n super.calcItemVisible(data);\n }\n\n calcItemDisabled(data: IData): void {\n // 权限不显示时就一定禁用\n if (this.state.uiActionState.disabled === true) {\n this.state.disabled = true;\n return;\n }\n super.calcItemDisabled(data);\n }\n}\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelButton } from '@ibiz/model-core';\nimport { defineComponent, PropType, computed } from 'vue';\nimport { PanelButtonController } from './panel-button.controller';\nimport './panel-button.scss';\n\nexport const PanelButton = defineComponent({\n name: 'IBizPanelButton',\n props: {\n modelData: {\n type: Object as PropType<IPanelButton>,\n required: true,\n },\n controller: {\n type: PanelButtonController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-button');\n\n const {\n caption,\n captionItemName,\n renderMode,\n showCaption,\n sysImage,\n codeName,\n itemStyle,\n } = props.modelData;\n\n const { panel, state } = props.controller;\n\n const captionText = computed(() => {\n if (captionItemName && panel.data) {\n return panel.data[captionItemName.toLowerCase()];\n }\n return caption;\n });\n\n let isText = false;\n if (Object.is(renderMode, 'LINK')) {\n isText = true;\n }\n\n const buttonType = computed(() => {\n if (Object.is(renderMode, 'LINK')) {\n return null;\n }\n switch (itemStyle) {\n case 'PRIMARY':\n return 'primary';\n case 'SUCCESS':\n return 'success';\n case 'INFO':\n return 'info';\n case 'WARNING':\n return 'warning';\n case 'DANGER':\n return 'danger';\n case 'INVERSE':\n return 'info';\n default:\n return null;\n }\n });\n\n const handleButtonClick = async (event: MouseEvent): Promise<void> => {\n try {\n state.loading = true;\n await props.controller.onActionClick(event);\n props.controller.onClick();\n } finally {\n state.loading = false;\n }\n };\n\n return {\n ns,\n isText,\n captionText,\n buttonType,\n showCaption,\n sysImage,\n codeName,\n state,\n handleButtonClick,\n };\n },\n render() {\n if (this.state.visible) {\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.codeName),\n this.ns.is('loading', this.state.loading),\n ...this.controller.containerClass,\n ]}\n >\n <el-button\n type={this.buttonType}\n text={this.isText}\n disabled={this.state.disabled}\n loading={this.state.loading}\n onClick={this.handleButtonClick}\n >\n <div class={this.ns.b('content')}>\n <iBizIcon\n class={this.ns.bm('content', 'icon')}\n icon={this.sysImage}\n />\n <span class={this.ns.bm('content', 'caption')}>\n {this.showCaption ? this.captionText : null}\n </span>\n </div>\n </el-button>\n </div>\n );\n }\n return null;\n },\n});\nexport default PanelButton;\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { PanelButtonController } from './panel-button.controller';\n\n/**\n * 面板按钮适配器\n *\n * @export\n * @class PanelButtonProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelButtonProvider implements IPanelItemProvider {\n component: string = 'IBizPanelButton';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelButtonController> {\n const c = new PanelButtonController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport PanelButton from './panel-button';\nimport { PanelButtonProvider } from './panel-button.provider';\n\nexport * from './panel-button.controller';\n\nexport const IBizPanelButton = withInstall(PanelButton, function (v: App) {\n v.component(PanelButton.name, PanelButton);\n registerPanelItemProvider('BUTTON', () => new PanelButtonProvider());\n});\n\nexport default IBizPanelButton;\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 PanelAppTitleState\n * @extends {PanelItemState}\n */\nexport class PanelAppTitleState extends PanelItemState {\n /**\n * 应用标题\n *\n * @author chitanda\n * @date 2023-07-20 17:07:22\n * @type {string}\n */\n caption: string = '';\n\n /**\n * 应用标题(收缩时)\n *\n * @author chitanda\n * @date 2023-07-20 17:07:22\n * @type {string}\n */\n caption2: string = '';\n\n /**\n * 应用子标题\n *\n * @author chitanda\n * @date 2023-07-20 17:07:22\n * @type {string}\n */\n subCaption?: string = '';\n\n /**\n * 应用子标题(收缩时)\n *\n * @author chitanda\n * @date 2023-07-20 17:07:22\n * @type {string}\n */\n subCaption2?: string = '';\n\n /**\n * 应用 logo 图片地址\n *\n * @author chitanda\n * @date 2023-07-20 17:07:11\n * @type {string}\n */\n icon: string = '';\n\n /**\n * 应用 logo 图片2地址(收缩时)\n *\n * @author chitanda\n * @date 2023-07-20 17:07:11\n * @type {string}\n */\n icon2: string = '';\n\n /**\n * 是否为 svg 图标\n *\n * @author chitanda\n * @date 2023-07-20 17:07:26\n * @type {boolean}\n */\n isSvg: boolean = false;\n}\n","import {\n PanelItemController,\n ViewLayoutPanelController,\n} from '@ibiz-template/runtime';\nimport { IPanelField, IAppIndexView } from '@ibiz/model-core';\nimport { PanelAppTitleState } from './panel-app-title.state';\n\n/**\n * 面板应用标题控制器\n *\n * @export\n * @class PanelAppTitleController\n * @extends {PanelItemController<IPanelField>}\n */\nexport class PanelAppTitleController extends PanelItemController<IPanelField> {\n declare state: PanelAppTitleState;\n\n protected createState(): PanelAppTitleState {\n return new PanelAppTitleState(this.parent?.state);\n }\n\n /**\n * 面板控制器\n *\n * @type {ViewLayoutPanelController}\n * @memberof PanelAppTitleController\n */\n declare panel: ViewLayoutPanelController;\n\n /**\n * 分隔符,用于分割收缩与未收缩的标题\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-10-18 18:24:06\n */\n private captionSplit = '|';\n\n /**\n * 初始化\n *\n * @return {*} {Promise<void>}\n * @memberof PanelAppTitleController\n */\n async onInit(): Promise<void> {\n await super.onInit();\n const indexViewModel: IAppIndexView = this.panel.view.model;\n // 抬头\n if (indexViewModel.title) {\n document.title = indexViewModel.title;\n }\n // 图标路径\n if (indexViewModel.appIconPath) {\n this.state.icon = indexViewModel.appIconPath;\n }\n\n // 图标路径2(收缩时)\n if (indexViewModel.appIconPath2) {\n this.state.icon2 = indexViewModel.appIconPath2;\n }\n\n // 标题\n if (indexViewModel.caption) {\n this.state.caption = indexViewModel.caption.split(this.captionSplit)[0];\n this.state.caption2 =\n indexViewModel.caption.split(this.captionSplit)[1] ||\n indexViewModel.caption.split(this.captionSplit)[0];\n }\n\n // 子标题\n if (indexViewModel.subCaption) {\n this.state.subCaption = indexViewModel.subCaption.split(\n this.captionSplit,\n )[0];\n this.state.subCaption2 =\n indexViewModel.subCaption.split(this.captionSplit)[1] ||\n indexViewModel.subCaption.split(this.captionSplit)[0];\n }\n\n // 是否为 svg 图标\n if (this.state.icon.endsWith('.svg') || this.state.icon2.endsWith('.svg')) {\n this.state.isSvg = true;\n }\n }\n}\n","import { CTX } from '@ibiz-template/runtime';\nimport {\n route2routePath,\n routePath2string,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { IPanelField } from '@ibiz/model-core';\nimport { computed, defineComponent, inject, PropType } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { PanelAppTitleController } from './panel-app-title.controller';\n\nimport './panel-app-title.scss';\n\nexport const PanelAppTitle = defineComponent({\n name: 'IBizPanelAppTitle',\n props: {\n modelData: {\n type: Object as PropType<IPanelField>,\n required: true,\n },\n controller: {\n type: PanelAppTitleController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-app-title');\n\n const c = props.controller;\n\n const route = useRoute();\n\n const router = useRouter();\n\n const ctx = inject<CTX | undefined>('ctx', undefined);\n\n const menuAlign = computed(() => {\n if (ctx?.view) {\n return ctx.view.model.mainMenuAlign || 'LEFT';\n }\n return 'LEFT';\n });\n\n const handleClick = async () => {\n // 跳转首页\n if (ctx?.view) {\n const routePath = route2routePath(route);\n routePath.pathNodes = routePath.pathNodes.slice(0, 1);\n const url = routePath2string(routePath);\n router.push({ path: url });\n setTimeout(() => {\n window.location.reload();\n });\n }\n\n props.controller.onClick();\n };\n\n const showImgOnly = computed(() => {\n if (menuAlign.value === 'LEFT') {\n return true;\n }\n return false;\n });\n\n const isCollapse = computed(() => {\n return (c.panel.view.state as IData).isCollapse;\n });\n\n return {\n ns,\n c,\n menuAlign,\n showImgOnly,\n handleClick,\n isCollapse,\n };\n },\n render() {\n const { icon, icon2, isSvg, caption, caption2, subCaption, subCaption2 } =\n this.c.state;\n let iconVNode = null;\n const captionNode = <span class={this.ns.e('title')}>{caption}</span>;\n if (icon || icon2) {\n if (isSvg) {\n iconVNode = (\n <ion-icon\n class={this.ns.e('logo')}\n icon={this.isCollapse ? icon2 : icon}\n />\n );\n } else {\n iconVNode = (\n <span class={this.ns.e('logo')}>\n <img src={this.isCollapse ? icon2 : icon} />\n </span>\n );\n }\n } else if (this.menuAlign === 'LEFT') {\n if (this.isCollapse) {\n iconVNode = (\n <div class={this.ns.e('collapse-title')}>\n <div class={this.ns.e('caption2')}>{caption2}</div>\n <div class={this.ns.e('subCaption2')}>{subCaption2}</div>\n </div>\n );\n } else {\n iconVNode = (\n <span class={this.ns.e('logo')}>\n <svg width='256px' height='90px' viewBox='0 0 256 90' version='1.1'>\n <g id='画板' stroke='none' stroke-width='1' fill-rule='evenodd'>\n <text\n id='Omni-OA'\n font-family='Poppins-Bold, Poppins'\n font-size='22'\n font-weight='bold'\n >\n <tspan x='20.961' y='39'>\n {caption}\n </tspan>\n </text>\n <text\n id='一体化办公平台'\n font-family='PingFangSC-Semibold, PingFang SC'\n font-size='18'\n font-weight='bold'\n >\n <tspan x='96' y='73'>\n {subCaption}\n </tspan>\n </text>\n </g>\n </svg>\n </span>\n );\n }\n }\n let content = null;\n // 左侧只展示图片\n if (this.menuAlign === 'LEFT') {\n content = iconVNode;\n } else {\n content = [iconVNode, captionNode];\n }\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.is('only-img', this.showImgOnly),\n this.ns.is('collapse', this.isCollapse),\n ...this.controller.containerClass,\n ]}\n onClick={this.handleClick}\n >\n {content}\n </div>\n );\n },\n});\nexport default PanelAppTitle;\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\nimport { PanelAppTitleController } from './panel-app-title.controller';\n\n/**\n * 面板应用标题适配器\n *\n * @export\n * @class PanelAppTitleProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelAppTitleProvider implements IPanelItemProvider {\n component: string = 'IBizPanelAppTitle';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelAppTitleController> {\n const c = new PanelAppTitleController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport PanelAppTitle from './panel-app-title';\nimport { PanelAppTitleProvider } from './panel-app-title.provider';\n\nexport * from './panel-app-title.controller';\n\nexport const IBizPanelAppTitle = withInstall(PanelAppTitle, function (v: App) {\n v.component(PanelAppTitle.name, PanelAppTitle);\n registerPanelItemProvider(\n 'RAWITEM_APP_APPTITLE',\n () => new PanelAppTitleProvider(),\n );\n});\n\nexport default IBizPanelAppTitle;\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, VNode } from 'vue';\nimport './panel-app-header.scss';\n\nexport const PanelAppHeader = defineComponent({\n name: 'IBizPanelAppHeader',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-app-header');\n const { showCaption, titleBarCloseMode, id } = props.modelData;\n const collapsible = titleBarCloseMode !== 0;\n const isCollapse = ref(titleBarCloseMode === 2);\n const changeCollapse = (): void => {\n if (collapsible) {\n isCollapse.value = !isCollapse.value;\n }\n };\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n if (showCaption === true) {\n result = [\n ...result,\n ...props.controller.containerClass,\n showCaption && ns.m('show-header'),\n collapsible && ns.m('collapsible'),\n ns.is('collapse', collapsible && isCollapse.value),\n ns.is('hidden', !props.controller.state.visible),\n ];\n }\n return result;\n });\n\n return { ns, isCollapse, classArr, changeCollapse };\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\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';\n\n/**\n * 面板容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelAppHeaderProvider\n * @implements {EditorProvider}\n */\nexport class PanelAppHeaderProvider implements IPanelItemProvider {\n component: string = 'IBizPanelAppHeader';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { PanelAppHeader } from './panel-app-header';\nimport { PanelAppHeaderProvider } from './panel-app-header.provider';\n\nexport const IBizPanelAppHeader = withInstall(\n PanelAppHeader,\n function (v: App) {\n v.component(PanelAppHeader.name, PanelAppHeader);\n registerPanelItemProvider(\n 'CONTAINER_AppHeader',\n () => new PanelAppHeaderProvider(),\n );\n },\n);\n\nexport default IBizPanelAppHeader;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, VNode } from 'vue';\nimport { PanelItemController } from '@ibiz-template/runtime';\nimport './panel-view-header.scss';\n\nexport const PanelViewHeader = defineComponent({\n name: 'IBizPanelViewHeader',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-view-header');\n const { showCaption, titleBarCloseMode, id } = props.modelData;\n const collapsible = titleBarCloseMode !== 0;\n const isCollapse = ref(titleBarCloseMode === 2);\n const changeCollapse = (): void => {\n if (collapsible) {\n isCollapse.value = !isCollapse.value;\n }\n };\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n if (showCaption === true) {\n result = [\n ...result,\n ...props.controller.containerClass,\n showCaption && ns.m('show-header'),\n collapsible && ns.m('collapsible'),\n ns.is('collapse', collapsible && isCollapse.value),\n ns.is('hidden', !props.controller.state.visible),\n ];\n }\n return result;\n });\n\n return { ns, isCollapse, classArr, changeCollapse };\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\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';\n\n/**\n * 面板容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelViewHeaderProvider\n * @implements {EditorProvider}\n */\nexport class PanelViewHeaderProvider implements IPanelItemProvider {\n component: string = 'IBizPanelViewHeader';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { PanelViewHeader } from './panel-view-header';\nimport { PanelViewHeaderProvider } from './panel-view-header.provider';\n\nexport const IBizPanelViewHeader = withInstall(\n PanelViewHeader,\n function (v: App) {\n v.component(PanelViewHeader.name, PanelViewHeader);\n registerPanelItemProvider(\n 'CONTAINER_ViewHeader',\n () => new PanelViewHeaderProvider(),\n );\n },\n);\n\nexport default IBizPanelViewHeader;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, VNode } from 'vue';\nimport { PanelItemController } from '@ibiz-template/runtime';\nimport './panel-exp-header.scss';\n\nexport const PanelExpHeader = defineComponent({\n name: 'IBizPanelExpHeader',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-exp-header');\n const { showCaption, titleBarCloseMode, id } = props.modelData;\n const collapsible = titleBarCloseMode !== 0;\n const isCollapse = ref(titleBarCloseMode === 2);\n const changeCollapse = (): void => {\n if (collapsible) {\n isCollapse.value = !isCollapse.value;\n }\n };\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n if (showCaption === true) {\n result = [\n ...result,\n ...props.controller.containerClass,\n showCaption && ns.m('show-header'),\n collapsible && ns.m('collapsible'),\n ns.is('collapse', collapsible && isCollapse.value),\n ns.is('hidden', !props.controller.state.visible),\n ];\n }\n return result;\n });\n\n return { ns, isCollapse, classArr, changeCollapse };\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\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';\n\n/**\n * 导航部件视图 header 区呈现容器\n *\n * @author chitanda\n * @date 2023-08-23 22:08:54\n * @export\n * @class PanelExpHeaderProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelExpHeaderProvider implements IPanelItemProvider {\n component: string = 'IBizPanelExpHeader';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { PanelExpHeader } from './panel-exp-header';\nimport { PanelExpHeaderProvider } from './panel-exp-header.provider';\n\nexport const IBizPanelExpHeader = withInstall(\n PanelExpHeader,\n function (v: App) {\n v.component(PanelExpHeader.name, PanelExpHeader);\n registerPanelItemProvider(\n 'CONTAINER_Exp_Header',\n () => new PanelExpHeaderProvider(),\n );\n },\n);\n\nexport default IBizPanelExpHeader;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, VNode } from 'vue';\nimport { PanelItemController } from '@ibiz-template/runtime';\nimport './panel-view-content.scss';\n\nexport const PanelViewContent = defineComponent({\n name: 'IBizPanelViewContent',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-view-content');\n const { showCaption, titleBarCloseMode, id } = props.modelData;\n const collapsible = titleBarCloseMode !== 0;\n const isCollapse = ref(titleBarCloseMode === 2);\n const changeCollapse = (): void => {\n if (collapsible) {\n isCollapse.value = !isCollapse.value;\n }\n };\n\n // 类名控制\n const classArr = computed(() => {\n let result: Array<string | false> = [ns.b(), ns.m(id)];\n if (showCaption === true) {\n result = [\n ...result,\n ...props.controller.containerClass,\n ns.is('collapse', collapsible && isCollapse.value),\n ns.is('hidden', !props.controller.state.visible),\n ];\n }\n return result;\n });\n\n return { ns, isCollapse, classArr, changeCollapse };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n const content = (\n <iBizRow 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\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';\n\n/**\n * 面板容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelViewContentProvider\n * @implements {EditorProvider}\n */\nexport class PanelViewContentProvider implements IPanelItemProvider {\n component: string = 'IBizPanelViewContent';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { PanelViewContent } from './panel-view-content';\nimport { PanelViewContentProvider } from './panel-view-content.provider';\n\nexport const IBizPanelViewContent = withInstall(\n PanelViewContent,\n function (v: App) {\n v.component(PanelViewContent.name, PanelViewContent);\n registerPanelItemProvider(\n 'CONTAINER_VIEWCONTENT',\n () => new PanelViewContentProvider(),\n );\n },\n);\n\nexport default IBizPanelViewContent;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelTabPanel } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { PanelItemController } from '@ibiz-template/runtime';\n\nexport const PanelTabPanel = defineComponent({\n name: 'IBizPanelTabPanel',\n props: {\n modelData: {\n type: Object as PropType<IPanelTabPanel>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-tab-panel');\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 // 内容区默认插槽处理,封装app-col\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n return (\n <el-tabs\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ]}\n model-value={this.modelData.panelTabPages?.[0].id}\n >\n {defaultSlots!.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n const c = props.controller;\n // 不显示且不用保活时直接不绘制\n if (!c.state.visible && !c.state.keepAlive) {\n return null;\n }\n return (\n <el-tab-pane\n class={this.ns.b('tab-item')}\n label={c.model.caption}\n name={c.model.id}\n lazy\n >\n {slot}\n </el-tab-pane>\n );\n })}\n </el-tabs>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\n\n/**\n * 面板分页面板适配器\n *\n * @export\n * @class PanelTabPanelController\n * @implements {IPanelItemProvider}\n */\nexport class PanelTabPanelProvider implements IPanelItemProvider {\n component: string = 'IBizPanelTabPanel';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { PanelTabPanel } from './panel-tab-panel';\nimport { PanelTabPanelProvider } from './panel-tab-panel.provider';\n\nexport const IBizPanelTabPanel = withInstall(PanelTabPanel, function (v: App) {\n v.component(PanelTabPanel.name, PanelTabPanel);\n registerPanelItemProvider('TABPANEL', () => new PanelTabPanelProvider());\n});\n\nexport default IBizPanelTabPanel;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelItemController } from '@ibiz-template/runtime';\n\nexport const PanelTabPage = defineComponent({\n name: 'IBizPanelTabPage',\n props: {\n modelData: {\n // IPanelTabPage 不能使用 IPanelTabPage模型 否则会类型报错\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-tab-page');\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 return {\n ns,\n classArr,\n };\n },\n render() {\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n return (\n <iBizRow\n class={[this.ns.b(), this.ns.m(this.modelData.codeName), this.classArr]}\n layout={this.modelData.layout}\n >\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n const c = props.controller;\n return (\n <iBizCol layoutPos={c.model.layoutPos} state={c.state}>\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 { IPanelItem } from '@ibiz/model-core';\n\n/**\n * 面板分页适配器\n *\n * @export\n * @class PanelTabPageController\n * @implements {IPanelItemProvider}\n */\nexport class PanelTabPageProvider implements IPanelItemProvider {\n component: string = 'IBizPanelTabPage';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { PanelTabPage } from './panel-tab-page';\nimport { PanelTabPageProvider } from './panel-tab-page.provider';\n\nexport const IBizPanelTabPage = withInstall(PanelTabPage, function (v: App) {\n v.component(PanelTabPage.name, PanelTabPage);\n registerPanelItemProvider('TABPAGE', () => new PanelTabPageProvider());\n});\n\nexport default IBizPanelTabPage;\n","import { IPanelContainer } from '@ibiz/model-core';\nimport { PanelItemController } from '@ibiz-template/runtime';\nimport { SplitContainerState } from './split-container.state';\n\n/**\n * 分割面板容器控制器\n *\n * @author zhanghengfeng\n * @date 2023-08-22 17:08:37\n * @export\n * @class SplitContainerController\n * @extends {PanelItemController<IPanelContainer>}\n */\nexport class SplitContainerController extends PanelItemController<IPanelContainer> {\n /**\n * 分割面板容器状态\n *\n * @author zhanghengfeng\n * @date 2023-10-08 17:10:25\n * @type {SplitContainerState}\n */\n declare state: SplitContainerState;\n\n /**\n * 分割面板模式\n *\n * @author zhanghengfeng\n * @date 2023-08-22 17:08:24\n * @type {('horizontal' | 'vertical')}\n */\n splitMode: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * 默认分割值\n *\n * @author zhanghengfeng\n * @date 2023-08-22 17:08:38\n * @type {(number | string)}\n */\n splitValue: number | string = 0.5;\n\n /**\n * 面板隐藏前分割值\n *\n * @author zhanghengfeng\n * @date 2023-10-08 17:10:58\n * @type {(number | string | null)}\n */\n lastSplitValue: number | string | null = null;\n\n /**\n * 初始化默认分割值\n *\n * @author zhanghengfeng\n * @date 2023-08-22 17:08:13\n * @param {number} value\n * @param {string} mode\n */\n initSplitValue(value: number, mode: string): void {\n if (mode === 'PX') {\n this.splitValue = `${value}px`;\n }\n if (mode === 'PERCENTAGE') {\n this.splitValue = value / 100;\n }\n this.state.splitValue = this.splitValue;\n }\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n const { predefinedType, panelItems } = this.model;\n this.splitMode =\n predefinedType === 'CONTAINER_V_SPLIT' ? 'vertical' : 'horizontal';\n if (Array.isArray(panelItems) && panelItems.length) {\n const panelItem = panelItems[0];\n const layoutPos = panelItem.layoutPos;\n if (layoutPos) {\n if (this.splitMode === 'horizontal') {\n const { width, widthMode } = layoutPos;\n if (width != null && widthMode != null) {\n this.initSplitValue(width, widthMode);\n }\n }\n if (this.splitMode === 'vertical') {\n const { height, heightMode } = layoutPos;\n if (height != null && heightMode != null) {\n this.initSplitValue(height, heightMode);\n }\n }\n }\n }\n }\n\n /**\n * 隐藏面板\n *\n * @author zhanghengfeng\n * @date 2023-10-08 17:10:35\n * @param {('left' | 'right' | 'top' | 'bottom')} position\n */\n hiddenPanel(position: 'left' | 'right' | 'top' | 'bottom'): void {\n this.lastSplitValue = this.state.splitValue;\n if (position === 'left' || position === 'top') {\n this.state.splitValue = 0;\n }\n if (position === 'right' || position === 'bottom') {\n this.state.splitValue = 1;\n }\n this.state.isHiddenTrigger = true;\n }\n\n /**\n * 显示面板\n *\n * @author zhanghengfeng\n * @date 2023-10-08 17:10:31\n */\n showPanel(): void {\n if (this.lastSplitValue != null) {\n this.state.splitValue = this.lastSplitValue;\n this.state.isHiddenTrigger = false;\n this.lastSplitValue = null;\n }\n }\n}\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { PropType, VNode, computed, defineComponent } from 'vue';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { SplitContainerController } from './split-container.controller';\nimport './split-container.scss';\n\nexport const SplitContainer = defineComponent({\n name: 'IBizSplitContainer',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: SplitContainerController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('split-container');\n const { id } = props.modelData;\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 ns.is('hidden-trigger', props.controller.state.isHiddenTrigger),\n ];\n return result;\n });\n\n return {\n ns,\n classArr,\n };\n },\n render() {\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n return (\n <div class={this.classArr}>\n <iBizSplit\n v-model={this.controller.state.splitValue}\n mode={this.controller.splitMode}\n >\n {{\n left: () => defaultSlots[0],\n right: () => defaultSlots[1],\n top: () => defaultSlots[0],\n bottom: () => defaultSlots[1],\n }}\n </iBizSplit>\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 { SplitContainerController } from './split-container.controller';\n\n/**\n * 分割面板容器适配器\n *\n * @author zhanghengfeng\n * @date 2023-08-22 17:08:20\n * @export\n * @class SplitContainerProvider\n * @implements {IPanelItemProvider}\n */\nexport class SplitContainerProvider implements IPanelItemProvider {\n component: string = 'IBizSplitContainer';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<SplitContainerController> {\n const c = new SplitContainerController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { SplitContainer } from './split-container';\nimport { SplitContainerProvider } from './split-container.provider';\nimport { SplitContainerController } from './split-container.controller';\n\nexport { SplitContainerController };\n\nexport const IBizSplitContainer = withInstall(\n SplitContainer,\n function (v: App) {\n v.component(SplitContainer.name, SplitContainer);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_H_SPLIT',\n () => new SplitContainerProvider(),\n );\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_V_SPLIT',\n () => new SplitContainerProvider(),\n );\n },\n);\n\nexport default IBizSplitContainer;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, inject } from 'vue';\nimport { CTX, PanelItemController } from '@ibiz-template/runtime';\nimport { debounce } from 'lodash-es';\nimport './panel-index-view-search.scss';\n\nexport const PanelIndexViewSearch = defineComponent({\n name: 'IBizPanelIndexViewSearch',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-index-view-search');\n\n const c = props.controller;\n\n const query = ref('');\n\n const debounceSearch = debounce(() => {}, 500);\n\n const onInput = (value: string): void => {\n query.value = value;\n debounceSearch();\n };\n\n const ctx = inject<CTX | undefined>('ctx', undefined);\n\n const menuAlign = computed(() => {\n if (ctx?.view) {\n return ctx.view.model.mainMenuAlign || 'LEFT';\n }\n return 'LEFT';\n });\n\n const isCollapse = computed(() => {\n return (c.panel.view.state as IData).isCollapse;\n });\n\n // 类名控制\n const classArr = computed(() => {\n const { id } = props.modelData;\n const result: Array<string | false> = [\n ns.b(),\n ns.m(id),\n ns.is('collapse', isCollapse.value),\n ];\n result.push(...props.controller.containerClass);\n return result;\n });\n\n return {\n ns,\n classArr,\n isCollapse,\n onInput,\n c,\n query,\n menuAlign,\n };\n },\n render() {\n // 动态控制显示\n if (!this.controller.state.visible) {\n return;\n }\n return (\n <div class={this.classArr}>\n {this.menuAlign === 'LEFT' && !this.isCollapse ? (\n <el-input\n model-value={this.query}\n class={this.ns.b('search')}\n placeholder={'搜索内容'}\n onInput={this.onInput}\n >\n {{\n prefix: () => {\n return (\n <ion-icon class={this.ns.e('search-icon')} name='search' />\n );\n },\n }}\n </el-input>\n ) : (\n <div class={this.ns.b('btn')}>\n <el-button>\n <ion-icon class={this.ns.e('search-icon')} name='search' />\n </el-button>\n </div>\n )}\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\n\n/**\n * 面板首页搜索适配器\n *\n * @export\n * @class PanelIndexViewSearchProvider\n * @implements {IPanelItemProvider}\n */\nexport class PanelIndexViewSearchProvider implements IPanelItemProvider {\n component: string = 'IBizPanelIndexViewSearch';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { PanelIndexViewSearch } from './panel-index-view-search';\nimport { PanelIndexViewSearchProvider } from './panel-index-view-search.provider';\n\nexport const IBizPanelIndexViewSearch = withInstall(\n PanelIndexViewSearch,\n function (v: App) {\n v.component(PanelIndexViewSearch.name, PanelIndexViewSearch);\n registerPanelItemProvider(\n 'RAWITEM_INDEX_VIEW_SEARCH',\n () => new PanelIndexViewSearchProvider(),\n );\n },\n);\n\nexport default IBizPanelIndexViewSearch;\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 PanelAppLoginViewState\n * @extends {PanelItemState}\n */\nexport class PanelAppLoginViewState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelAppLoginViewState } from './panel-app-login-view.state';\n\n/**\n * 面板容器(应用登录视图)控制器\n *\n * @export\n * @class PanelAppLoginViewController\n * @extends {PanelItemController}\n */\nexport class PanelAppLoginViewController extends PanelItemController<IPanelContainer> {\n declare state: PanelAppLoginViewState;\n\n protected createState(): PanelAppLoginViewState {\n return new PanelAppLoginViewState(this.parent?.state);\n }\n}\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { PanelAppLoginViewController } from './panel-app-login-view.controller';\nimport './panel-app-login-view.scss';\n\nexport const PanelAppLoginView = defineComponent({\n name: 'IBizPanelAppLoginView',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelAppLoginViewController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-app-login-view');\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 { PanelAppLoginViewController } from './panel-app-login-view.controller';\n\n/**\n * 面板容器(应用登录视图)适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelAppLoginViewProvider\n * @implements {EditorProvider}\n */\nexport class PanelAppLoginViewProvider implements IPanelItemProvider {\n component: string = 'IBizPanelAppLoginView';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelAppLoginViewController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { PanelAppLoginView } from './panel-app-login-view';\nimport { PanelAppLoginViewProvider } from './panel-app-login-view.provider';\nimport { PanelAppLoginViewState } from './panel-app-login-view.state';\nimport { PanelAppLoginViewController } from './panel-app-login-view.controller';\n\nexport { PanelAppLoginViewState, PanelAppLoginViewController };\n\nexport const IBizPanelAppLoginView = withInstall(\n PanelAppLoginView,\n function (v: App) {\n v.component(PanelAppLoginView.name, PanelAppLoginView);\n registerPanelItemProvider(\n 'CONTAINER_APPLOGINVIEW',\n () => new PanelAppLoginViewProvider(),\n );\n },\n);\n\nexport default IBizPanelAppLoginView;\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 PanelRememberMeState\n * @extends {PanelItemState}\n */\nexport class PanelRememberMeState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelRememberMeState } from './panel-remember-me.state';\n\n/**\n * 面板容器(记住我)控制器\n *\n * @export\n * @class PanelRememberMeController\n * @extends {PanelItemController}\n */\nexport class PanelRememberMeController extends PanelItemController<IPanelContainer> {\n declare state: PanelRememberMeState;\n\n protected createState(): PanelRememberMeState {\n return new PanelRememberMeState(this.parent?.state);\n }\n}\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType } from 'vue';\nimport { PanelRememberMeController } from './panel-remember-me.controller';\n\nexport const PanelRememberMe = defineComponent({\n name: 'IBizPanelRememberMe',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelRememberMeController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-remember-me');\n const { id } = props.modelData;\n\n const c = props.controller;\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 // 是否记住我\n const isRemember = computed({\n get: () => c.panel.state.data.isRemember,\n set: (val: boolean) => {\n c.panel.state.data.isRemember = val;\n },\n });\n\n return { ns, classArr, c, isRemember };\n },\n render() {\n return (\n <div class={this.classArr}>\n <el-checkbox v-model={this.isRemember} label='记住我' />\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 { PanelRememberMeController } from './panel-remember-me.controller';\n\n/**\n * 面板容器(记住我)适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelRememberMeProvider\n * @implements {EditorProvider}\n */\nexport class PanelRememberMeProvider implements IPanelItemProvider {\n component: string = 'IBizPanelRememberMe';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelRememberMeController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { PanelRememberMe } from './panel-remember-me';\nimport { PanelRememberMeProvider } from './panel-remember-me.provider';\nimport { PanelRememberMeState } from './panel-remember-me.state';\nimport { PanelRememberMeController } from './panel-remember-me.controller';\n\nexport { PanelRememberMeState, PanelRememberMeController };\n\nexport const IBizPanelRememberMe = withInstall(\n PanelRememberMe,\n function (v: App) {\n v.component(PanelRememberMe.name, PanelRememberMe);\n registerPanelItemProvider(\n 'CONTAINER_REMEMBER_ME',\n () => new PanelRememberMeProvider(),\n );\n },\n);\n\nexport default IBizPanelRememberMe;\n","import {\n PanelContainerController,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport './index-actions.scss';\n\nexport const IndexActions = defineComponent({\n name: 'IBizIndexActions',\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('index-actions');\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 isCollapse = computed(() => {\n return (props.controller.panel.view.state as IData).isCollapse;\n });\n\n return { ns, classArr, isCollapse };\n },\n render() {\n // 内容区默认插槽处理,封装app-col\n let defaultSlots: VNode[] = this.$slots.default?.() || [];\n if (this.isCollapse) {\n defaultSlots = [defaultSlots[0]];\n }\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 { PanelContainerController } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\n\n/**\n * 首页行为适配器\n *\n * @author lxm\n * @date 2023-10-18 03:55:02\n * @export\n * @class IndexActionsProvider\n * @implements {IPanelItemProvider}\n */\nexport class IndexActionsProvider implements IPanelItemProvider {\n component: string = 'IBizIndexActions';\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 { withInstall } from '@ibiz-template/vue3-util';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { IndexActions } from './index-actions';\nimport { IndexActionsProvider } from './index-actions.provider';\n\nexport const IBizIndexActions = withInstall(IndexActions, function (v: App) {\n v.component(IndexActions.name, IndexActions);\n registerPanelItemProvider(\n 'CONTAINER_INDEX_ACTIONS',\n () => new IndexActionsProvider(),\n );\n});\n\nexport default IBizIndexActions;\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 PanelContainerGroupState\n * @extends {PanelItemState}\n */\nexport class PanelContainerGroupState extends PanelItemState {}\n","import { PanelItemController } from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerGroupState } from './panel-container-group.state';\n\n/**\n * 面板分组容器控制器\n *\n * @export\n * @class PanelContainerGroupController\n * @extends {PanelItemController}\n */\nexport class PanelContainerGroupController extends PanelItemController<IPanelContainer> {\n declare state: PanelContainerGroupState;\n\n protected createState(): PanelContainerGroupState {\n return new PanelContainerGroupState(this.parent?.state);\n }\n\n /**\n * 禁用关闭\n *\n * @author chitanda\n * @date 2022-09-14 14:09:51\n * @readonly\n * @type {boolean}\n */\n get disableClose(): boolean {\n const { titleBarCloseMode: mode } = this.model;\n return mode === 0 || mode === undefined;\n }\n\n /**\n * 是否默认展开分组\n *\n * @author chitanda\n * @date 2022-09-14 14:09:09\n * @readonly\n */\n get defaultExpansion(): boolean {\n const { titleBarCloseMode: mode } = this.model;\n return this.disableClose || mode === 1;\n }\n}\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { PanelContainerGroupController } from './panel-container-group.controller';\n\n/**\n * 面板分组容器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PanelContainerGroupProvider\n * @implements {EditorProvider}\n */\nexport class PanelContainerGroupProvider implements IPanelItemProvider {\n component: string = 'IBizPanelContainerGroup';\n\n async createController(\n panelItem: IPanelContainer,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelContainerGroupController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelContainer } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, VNode } from 'vue';\nimport { PanelContainerGroupController } from './panel-container-group.controller';\nimport './panel-container-group.scss';\n\nexport const PanelContainerGroup = defineComponent({\n name: 'IBizPanelContainerGroup',\n props: {\n modelData: {\n type: Object as PropType<IPanelContainer>,\n required: true,\n },\n controller: {\n type: PanelContainerGroupController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('panel-container-group');\n\n const isCollapse = ref(!props.controller.defaultExpansion);\n\n const changeCollapse = (): void => {\n if (!props.controller.disableClose) {\n isCollapse.value = !isCollapse.value;\n }\n };\n\n const captionText = computed(() => {\n const { captionItemName, caption, capLanguageRes } = props.modelData;\n if (captionItemName) {\n return props.controller.data[captionItemName];\n }\n let text = caption;\n if (capLanguageRes) {\n text = ibiz.i18n.t(capLanguageRes.lanResTag!, caption);\n }\n return text;\n });\n\n return { ns, captionText, changeCollapse, isCollapse };\n },\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n this.ns.is('hidden', !this.controller.state.visible),\n ];\n if (this.modelData.showCaption === true) {\n classArr.push(this.ns.m('show-header'));\n classArr.push(this.ns.b('collapse'));\n classArr.push(this.ns.is('collapse', this.isCollapse));\n if (this.controller.disableClose) {\n classArr.push(this.ns.bm('collapse', 'disable-close'));\n }\n }\n\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\n // 头部绘制\n let header: unknown = null;\n if (this.modelData.showCaption) {\n header = (\n <div class={[this.ns.b('header')]} onClick={this.changeCollapse}>\n <div class={[this.ns.be('header', 'left')]}>\n <div class={[this.ns.e('caption'), ...this.controller.labelClass]}>\n {this.captionText}\n </div>\n </div>\n <div class={[this.ns.be('header', 'right')]}>\n {this.modelData.titleBarCloseMode !== undefined &&\n this.modelData.titleBarCloseMode !== 0 &&\n (this.isCollapse ? (\n <ion-icon name='caret-forward-sharp' />\n ) : (\n <ion-icon name='caret-down-sharp' />\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div class={classArr}>\n {header}\n <div class={[this.ns.b('content')]}>{content}</div>\n </div>\n );\n },\n});\n","import { App } from 'vue';\nimport { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { PanelContainerGroupState } from './panel-container-group.state';\nimport { PanelContainerGroupProvider } from './panel-container-group.provider';\nimport { PanelContainerGroupController } from './panel-container-group.controller';\nimport { PanelContainerGroup } from './panel-container-group';\n\nexport { PanelContainerGroupState, PanelContainerGroupController };\n\nexport const IBizPanelContainerGroup = withInstall(\n PanelContainerGroup,\n function (v: App) {\n v.component(PanelContainerGroup.name, PanelContainerGroup);\n registerPanelItemProvider(\n 'CONTAINER_CONTAINER_GROUP',\n () => new PanelContainerGroupProvider(),\n );\n },\n);\n\nexport default IBizPanelContainerGroup;\n","import { defineComponent, PropType } from 'vue';\nimport { IPortalAsyncAction } from '@ibiz-template/core';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './async-action.scss';\n\nconst stateTexts = {\n 10: '未开始',\n 20: '执行中',\n 30: '已执行',\n 40: '执行失败',\n};\n\nconst stateType = {\n 10: 'info',\n 20: '',\n 30: 'success',\n 40: 'danger',\n};\n\nexport const AsyncAction = defineComponent({\n name: 'IBizAsyncAction',\n props: {\n message: {\n type: Object as PropType<IPortalAsyncAction>,\n required: true,\n },\n },\n setup() {\n const ns = useNamespace('async-action');\n return { ns };\n },\n render() {\n const {\n asyncacitonname,\n actionstate,\n begintime,\n stepinfo,\n completionrate,\n } = this.message;\n return (\n <div class={[this.ns.b()]}>\n <div class={this.ns.b('left')}>\n <ion-icon name='list-outline'></ion-icon>\n </div>\n <div class={this.ns.b('center')}>\n <div class={this.ns.e('caption')}>{asyncacitonname}</div>\n {actionstate === 20 ? (\n <div class={this.ns.e('progress')}>\n {stepinfo}({completionrate}%)\n </div>\n ) : (\n <div class={this.ns.e('begin-time')}>{begintime}</div>\n )}\n </div>\n <div class={this.ns.b('right')}>\n <el-tag type={stateType[actionstate]}>\n {stateTexts[actionstate]}\n </el-tag>\n </div>\n </div>\n );\n },\n});\n","import {\n downloadFileFromBlob,\n IPortalAsyncAction,\n RuntimeError,\n} from '@ibiz-template/core';\nimport { IModal } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport qs from 'qs';\nimport { defineComponent, PropType, reactive } from 'vue';\nimport './async-action-preview.scss';\n\n/**\n * 请求url获取文件流,并用JS触发文件下载\n *\n * @author lxm\n * @date 2022-11-17 14:11:09\n * @param {string} url\n * @param {IData} file\n */\nfunction fileDownload(file: { url: string; name: string }): void {\n // 发送get请求\n ibiz.net\n .request(file.url, {\n method: 'get',\n responseType: 'blob',\n baseURL: '', // 已经有baseURL了,这里无需再写\n })\n .then((response: IData) => {\n const filename = qs.parse(response.headers['content-disposition'], {\n delimiter: ';',\n }).filename as string;\n if (filename) {\n file.name += `.${filename.split('.')[1]}`;\n }\n\n if (response.status !== 200) {\n throw new RuntimeError('下载文件失败');\n }\n // 请求成功,后台返回的是一个文件流\n if (!response.data) {\n throw new RuntimeError('文件流数据不存在');\n } else {\n // 获取文件名\n const fileName = file.name;\n downloadFileFromBlob(response.data, fileName);\n }\n });\n}\n\nexport const AsyncActionPreview = defineComponent({\n name: 'IBizAsyncActionPreview',\n props: {\n asyncAction: {\n type: Object as PropType<IPortalAsyncAction>,\n required: true,\n },\n modal: { type: Object as PropType<IModal>, required: true },\n },\n setup(props) {\n const ns = useNamespace('async-action-preview');\n\n const onClose = () => {\n props.modal.dismiss();\n };\n\n const info = reactive({\n title: '',\n beginTime: '',\n endTime: '',\n total: 0,\n success: 0,\n error: 0,\n errorDetails: [\n {\n row: 0,\n reason: '',\n },\n ],\n errorFileUrl: '',\n });\n\n info.title = `导入数据详情-${props.asyncAction.asyncacitonname}`;\n info.beginTime = props.asyncAction.begintime;\n info.endTime = props.asyncAction.endtime;\n if (props.asyncAction.actionresult) {\n let actionResult: IData;\n try {\n actionResult = JSON.parse(props.asyncAction.actionresult as string);\n } catch (error) {\n throw new RuntimeError('解析导入信息异常');\n }\n info.total = actionResult.total || 0;\n info.success = actionResult.success || 0;\n info.error = info.total - info.success;\n\n // 错误信息\n if (actionResult.errorinfo) {\n info.errorDetails = Object.keys(actionResult.errorinfo).map(key => {\n return {\n row: Number(key),\n reason: actionResult.errorinfo[key].errorInfo as string,\n };\n });\n } else {\n info.errorDetails = [];\n }\n\n // 错误文件\n if (actionResult.errorfile) {\n info.errorFileUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.downloadFileUrl}/${actionResult.errorfile.folder}/${actionResult.errorfile.fileid}`;\n }\n }\n\n const onDownLoad = () => {\n fileDownload({ url: info.errorFileUrl, name: info.title });\n };\n\n return { ns, info, onClose, onDownLoad };\n },\n render() {\n return (\n <div class={[this.ns.b()]}>\n <div class={this.ns.b('header')}>\n <div class={this.ns.e('title')}>{this.info.title}</div>\n <div class={this.ns.b('toolbar')}>\n {this.info.errorFileUrl && (\n <el-button onClick={this.onDownLoad}>下载错误文件</el-button>\n )}\n <el-button onClick={this.onClose}>关闭</el-button>\n </div>\n </div>\n <div class={this.ns.b('time')}>\n <el-form-item label='导入时间: '>\n {this.info.beginTime} ~ {this.info.endTime}\n </el-form-item>\n </div>\n <el-row class={this.ns.b('count')}>\n <el-col span={8}>\n <el-form-item label='导入总条数: '>{this.info.total}</el-form-item>\n </el-col>\n <el-col span={8}>\n <el-form-item label='成功导入数: '>\n {this.info.success}\n </el-form-item>\n </el-col>\n <el-col span={8}>\n <el-form-item label='导入失败数: '>{this.info.error}</el-form-item>\n </el-col>\n </el-row>\n {this.info.errorDetails.length > 0 && (\n <div class={this.ns.b('detail')}>\n {this.info.errorDetails.map(detail => {\n return (\n <div class={this.ns.b('detail-item')}>\n <div class={this.ns.be('detail-item', 'index')}>\n {detail.row}\n </div>\n <div class={this.ns.be('detail-item', 'error')}>\n <div class={this.ns.be('detail-item', 'error-title')}>\n 错误\n </div>\n <div class={this.ns.be('detail-item', 'error-reason')}>\n {detail.reason}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n },\n});\n","import { IPortalAsyncAction } from '@ibiz-template/core';\nimport { IAsyncActionProvider, IModal } from '@ibiz-template/runtime';\nimport { h } from 'vue';\nimport { AsyncActionPreview } from '../async-action-preview/async-action-preview';\n\nexport class AsyncActionProvider implements IAsyncActionProvider {\n component = 'IBizAsyncAction';\n\n onClick(asyncAction: IPortalAsyncAction, _event: MouseEvent): void {\n // 打开模态展示,由于是动态路由,添加其他路由,会导致模版出现问题\n ibiz.overlay.modal(\n (modal: IModal) => {\n return h(AsyncActionPreview, {\n asyncAction,\n modal,\n });\n },\n {},\n { width: '80%', height: '80%' },\n );\n }\n}\n","import {\n computed,\n defineComponent,\n h,\n PropType,\n ref,\n resolveComponent,\n} from 'vue';\nimport { useAppStore, useNamespace } from '@ibiz-template/vue3-util';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport {\n getAsyncActionProvider,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport './user-message.scss';\nimport { IPortalAsyncAction } from '@ibiz-template/core';\n\nexport const UserMessage = defineComponent({\n name: 'IBizUserMessage',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: PanelItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('user-message');\n const c = props.controller;\n\n const showPopover = ref(false);\n\n const currentTab = ref<string>('notification');\n // 图片有配置拿配置,没配置取默认图片\n const sysImage = props.modelData.sysImage || {\n imagePath: 'svg/message.svg',\n };\n\n const { appStore } = useAppStore();\n\n /** 额外呈现的历史数据的条数 */\n const showHistoryLength = ref(0);\n\n const actualMsgs = computed(() => {\n const showLength =\n appStore.recentAsyncActions.length + showHistoryLength.value;\n return appStore.allAsyncActions.filter((_, index) => {\n return index < showLength;\n });\n });\n\n /**\n * 隐藏所有历史记录\n * @author lxm\n * @date 2023-11-15 11:24:57\n */\n const hiddenHistory = () => {\n showHistoryLength.value = 0;\n };\n\n const showMoreHistory = () => {\n showHistoryLength.value += 10;\n };\n\n // 气泡控制\n const popoverRef = ref();\n const onMsgClick = (_msg: IPortalAsyncAction) => {\n // 默认信息点击关闭\n popoverRef.value.hide();\n };\n\n return {\n ns,\n c,\n popoverRef,\n showPopover,\n sysImage,\n currentTab,\n appStore,\n actualMsgs,\n onMsgClick,\n hiddenHistory,\n showMoreHistory,\n };\n },\n render() {\n const restLength =\n this.appStore.allAsyncActions.length - this.actualMsgs.length;\n const loadMoreText =\n this.actualMsgs.length === 0\n ? `查看历史(${restLength})`\n : `加载更多(${restLength})`;\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 <el-popover\n ref='popoverRef'\n popper-class={this.ns.b('popover')}\n placement='bottom'\n trigger='click'\n v-model={this.showPopover}\n onHide={this.hiddenHistory}\n >\n {{\n reference: () => {\n return (\n <i-biz-icon\n class={[this.ns.e('image')]}\n icon={this.sysImage}\n ></i-biz-icon>\n );\n },\n default: () => {\n return (\n <el-tabs\n class={this.ns.b('popover-content')}\n v-model={this.currentTab}\n >\n <el-tab-pane label='通知' name='notification'>\n {this.actualMsgs.length > 0 &&\n this.actualMsgs.map(msg => {\n const provider = getAsyncActionProvider(msg.actiontype);\n if (provider) {\n return h(resolveComponent(provider.component), {\n class: this.ns.e('notification-item'),\n onClick: (event: MouseEvent) => {\n this.onMsgClick(msg);\n provider.onClick(msg, event);\n },\n message: msg,\n });\n }\n return (\n <div class={this.ns.e('notification-item')}>\n 异步操作类型{msg.actiontype}暂未支持\n </div>\n );\n })}\n {this.actualMsgs.length === 0 && (\n <div class={this.ns.e('nodata')}>暂无通知</div>\n )}\n {restLength > 0 && (\n <div\n class={this.ns.e('load-more')}\n onClick={this.showMoreHistory}\n >\n {loadMoreText}\n </div>\n )}\n </el-tab-pane>\n </el-tabs>\n );\n },\n }}\n </el-popover>\n </div>\n );\n },\n});\n","import {\n IPanelItemProvider,\n PanelController,\n PanelItemController,\n} from '@ibiz-template/runtime';\nimport { IPanelItem } from '@ibiz/model-core';\n\n/**\n * 消息通知适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class UserMessageProvider\n * @implements {EditorProvider}\n */\nexport class UserMessageProvider implements IPanelItemProvider {\n component: string = 'IBizUserMessage';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new PanelItemController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import {\n registerAsyncActionProvider,\n registerPanelItemProvider,\n} from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { AsyncAction } from './async-action/async-action';\nimport { AsyncActionProvider } from './async-action/async-action.provider';\nimport { UserMessage } from './user-message';\nimport { UserMessageProvider } from './user-message.provider';\n\nexport const IBizUserMessage = withInstall(UserMessage, function (v: App) {\n v.component(UserMessage.name, UserMessage);\n v.component(AsyncAction.name, AsyncAction);\n\n // 注册异步导入操作适配器\n registerAsyncActionProvider('DEIMPORTDATA2', () => new AsyncActionProvider());\n registerPanelItemProvider(\n 'RAWITEM_USERMESSAGE',\n () => new UserMessageProvider(),\n );\n});\n\nexport default IBizUserMessage;\n","import { RuntimeError } from '@ibiz-template/core';\nimport {\n ISearchFormController,\n PanelItemController,\n StoredFilter,\n UIActionUtil,\n} from '@ibiz-template/runtime';\n\n/**\n * 搜索表单按钮控制器\n * @author lxm\n * @date 2023-11-21 02:18:14\n * @export\n * @class SearchFormButtonsController\n * @extends {PanelItemController}\n */\nexport class SearchFormButtonsController extends PanelItemController {\n /**\n * 搜索按钮样式\n * @author lxm\n * @date 2023-11-21 03:25:31\n * @type {(string | 'DEFAULT' | 'NONE' | 'SEARCHONLY' | 'USER' | 'USER2')}\n */\n get searchButtonStyle(): string {\n return this.searchFrom.model.searchButtonStyle || 'DEFAULT';\n }\n\n /**\n * 保存的过滤条件\n * @author lxm\n * @date 2023-11-27 04:33:42\n * @readonly\n * @type {StoredFilter[]}\n */\n get storedFilters(): StoredFilter[] {\n return this.searchFrom?.state.storedFilters || [];\n }\n\n /**\n * 搜索表单控制器\n * @author lxm\n * @date 2023-11-21 04:32:58\n * @type {ISearchFormController}\n */\n searchFrom!: ISearchFormController;\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n\n const searchFrom = this.panel.container as ISearchFormController;\n if (!searchFrom) {\n throw new RuntimeError('当前视图里没有找到叫searchform的搜索表单');\n }\n this.searchFrom = searchFrom;\n }\n\n /**\n * 点击搜索按钮\n * @author lxm\n * @date 2023-11-21 04:31:55\n */\n onSearchButtonClick(): void {\n UIActionUtil.execAndResolved('search', {\n context: this.panel.context,\n params: this.panel.params,\n data: [],\n view: this.panel.view,\n });\n }\n\n /**\n * 点击重置按钮\n * @author lxm\n * @date 2023-11-21 04:32:09\n */\n onResetButtonClick(): void {\n UIActionUtil.execAndResolved('reset', {\n context: this.panel.context,\n params: this.panel.params,\n data: [],\n view: this.panel.view,\n });\n }\n}\n","import { defineComponent, PropType } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './searchform-buttons.scss';\nimport { IPanelRawItem } from '@ibiz/model-core';\nimport { ElMessageBox } from 'element-plus';\nimport { SearchFormButtonsController } from './searchform-buttons.controller';\n\nexport const SearchFormButtons = defineComponent({\n name: 'IBizSearchFormButtons',\n props: {\n modelData: {\n type: Object as PropType<IPanelRawItem>,\n required: true,\n },\n controller: {\n type: SearchFormButtonsController,\n required: true,\n },\n },\n setup(prop) {\n const ns = useNamespace('searchform-buttons');\n const c = prop.controller;\n\n const onSearchButtonClick = () => {\n c.onSearchButtonClick();\n };\n const onResetButtonClick = () => {\n c.onResetButtonClick();\n };\n\n const saveFilterConfirm = () => {\n ElMessageBox.prompt('请输入要存储的自定义查询名称:', '存储自定义查询', {\n confirmButtonText: '保存',\n cancelButtonText: '取消',\n }).then(({ value }) => {\n c.searchFrom.storeFilter(value);\n });\n };\n\n return {\n ns,\n c,\n onSearchButtonClick,\n onResetButtonClick,\n saveFilterConfirm,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n ]}\n >\n {this.controller.searchButtonStyle === 'SEARCHONLY' ? (\n <el-button onClick={this.onSearchButtonClick}>搜索</el-button>\n ) : (\n <el-dropdown\n split-button\n type='primary'\n onClick={this.onSearchButtonClick}\n >\n {{\n default: () => <span class={this.ns.b('label')}>搜索</span>,\n dropdown: () => {\n return (\n <el-dropdown-menu>\n <el-dropdown-item onClick={this.onResetButtonClick}>\n 重置\n </el-dropdown-item>\n <el-dropdown-item onClick={this.saveFilterConfirm}>\n 保存条件\n </el-dropdown-item>\n {this.controller.storedFilters.length > 0 &&\n this.controller.storedFilters.map((item, index) => {\n return (\n <el-dropdown-item\n class={this.ns.b('filter-item')}\n onClick={() => {\n this.controller.searchFrom.applyStoredFilter(\n index,\n );\n }}\n >\n <span class={this.ns.be('filter-item', 'text')}>\n {item.name}\n <ion-icon\n class={this.ns.be('filter-item', 'remove')}\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n this.controller.searchFrom.removeStoredFilter(\n index,\n );\n }}\n name='close-outline'\n ></ion-icon>\n </span>\n </el-dropdown-item>\n );\n })}\n </el-dropdown-menu>\n );\n },\n }}\n </el-dropdown>\n )}\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 { SearchFormButtonsController } from './searchform-buttons.controller';\n\n/**\n * 搜索表单按钮适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class SearchFormButtonsProvider\n * @implements {EditorProvider}\n */\nexport class SearchFormButtonsProvider implements IPanelItemProvider {\n component: string = 'IBizSearchFormButtons';\n\n async createController(\n panelItem: IPanelItem,\n panel: PanelController,\n parent: PanelItemController | undefined,\n ): Promise<PanelItemController> {\n const c = new SearchFormButtonsController(panelItem, panel, parent);\n await c.init();\n return c;\n }\n}\n","import { registerPanelItemProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { SearchFormButtons } from './searchform-buttons';\nimport { SearchFormButtonsProvider } from './searchform-buttons.provider';\n\nexport const IBizSearchFormButtons = withInstall(\n SearchFormButtons,\n function (v: App) {\n v.component(SearchFormButtons.name, SearchFormButtons);\n registerPanelItemProvider(\n 'RAWITEM_SEARCHFORM_BUTTONS',\n () => new SearchFormButtonsProvider(),\n );\n },\n);\n\nexport default IBizSearchFormButtons;\n","import { App } from 'vue';\nimport {\n IBizPanelContainer,\n IBizPanelCtrlPos,\n IBizScrollContainer,\n IBizNavPos,\n IBizPanelField,\n IBizPanelRawItem,\n IBizGridContainer,\n IBizMultiDataContainer,\n IBizSingleDataContainer,\n IBizPanelContainerImage,\n} from '@ibiz-template/vue3-util';\nimport IBizAuthUserinfo from './auth-userinfo';\nimport IBizNavPosIndex from './nav-pos-index';\nimport IBizNavTabs from './nav-tabs';\nimport IBizPanelButton from './panel-button';\nimport IBizPanelAppTitle from './panel-app-title';\nimport IBizPanelAppHeader from './panel-app-header';\nimport IBizPanelViewHeader from './panel-view-header';\nimport IBizPanelExpHeader from './panel-exp-header';\nimport IBizPanelViewContent from './panel-view-content';\nimport IBizPanelTabPanel from './panel-tab-panel';\nimport IBizPanelTabPage from './panel-tab-page';\nimport IBizSplitContainer from './split-container';\nimport PanelIndexViewSearch from './panel-index-view-search';\nimport IBizPanelAppLoginView from './panel-app-login-view';\nimport IBizPanelRememberMe from './panel-remember-me';\nimport IBizIndexActions from './index-actions';\nimport IBizPanelContainerGroup from './panel-container-group';\nimport IBizUserMessage from './user-message';\nimport IBizSearchFormButtons from './searchform-buttons';\n\nexport * from './auth-userinfo';\nexport * from './nav-pos-index';\nexport * from './panel-button';\nexport * from './panel-app-title';\nexport * from './panel-tab-panel';\nexport * from './panel-tab-page';\nexport * from './split-container';\nexport * from './panel-index-view-search';\nexport * from './index-actions';\n\nexport const IBizPanelComponents = {\n install: (v: App): void => {\n v.use(IBizPanelContainer);\n v.use(IBizPanelCtrlPos);\n v.use(IBizScrollContainer);\n v.use(IBizAuthUserinfo);\n v.use(IBizNavPosIndex);\n v.use(IBizNavTabs);\n v.use(IBizPanelButton);\n v.use(IBizNavPos);\n v.use(IBizPanelAppTitle);\n v.use(IBizSingleDataContainer);\n v.use(IBizMultiDataContainer);\n v.use(IBizPanelField);\n v.use(IBizPanelAppHeader);\n v.use(IBizPanelViewHeader);\n v.use(IBizPanelExpHeader);\n v.use(IBizPanelRawItem);\n v.use(IBizPanelViewContent);\n v.use(IBizGridContainer);\n v.use(IBizPanelTabPanel);\n v.use(IBizPanelTabPage);\n v.use(IBizSplitContainer);\n v.use(PanelIndexViewSearch);\n v.use(IBizPanelAppLoginView);\n v.use(IBizPanelRememberMe);\n v.use(IBizIndexActions);\n v.use(IBizPanelContainerGroup);\n v.use(IBizUserMessage);\n v.use(IBizPanelContainerImage);\n v.use(IBizSearchFormButtons);\n },\n};\n\nexport default IBizPanelComponents;\n","import { Namespace } from '@ibiz-template/core';\nimport { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { IAppMenuItem, IAppMenu } from '@ibiz/model-core';\nimport {\n computed,\n defineComponent,\n onMounted,\n onUnmounted,\n PropType,\n Ref,\n ref,\n VNode,\n watch,\n} from 'vue';\nimport { createUUID } from 'qx-util';\nimport {\n AppCounter,\n AppMenuController,\n IControlProvider,\n ViewCallTag,\n} from '@ibiz-template/runtime';\nimport { useRoute } from 'vue-router';\nimport './app-menu.scss';\n\n/**\n * 递归生成菜单数据,递给 element 的 Menu 组件\n *\n * @author chitanda\n * @date 2022-07-25 10:07:28\n * @param {AppMenuItemModel[]} items\n * @return {*} {any[]}\n */\nfunction getMenus(items: IAppMenuItem[]): IData[] {\n return items.map(item => {\n let label = item.caption;\n if (item.capLanguageRes) {\n label = ibiz.i18n.t(item.capLanguageRes.lanResTag!, item.caption);\n }\n const data: IData = {\n key: item.id,\n label,\n image: item.sysImage,\n counterId: item.counterId,\n disabled: !item.appFuncId,\n tooltip: item.tooltip,\n };\n if (item.appMenuItems?.length) {\n data.children = getMenus(item.appMenuItems);\n }\n return data;\n });\n}\n\n/**\n * 绘制菜单项\n * @author lxm\n * @date 2022-08-16 14:08:20\n * @param {IData} menu\n * @returns {*}\n */\nfunction renderMenuItem(\n isFirst: boolean,\n menu: IData,\n collapse: boolean,\n ns: Namespace,\n c: AppMenuController,\n counterData: IData,\n): VNode | undefined {\n if (!c.state.menuItemsState[menu.key].visible) {\n return;\n }\n return !(isFirst && collapse) ? (\n <el-menu-item\n class={ns.e('item')}\n index={menu.key}\n disabled={menu.disabled}\n title={menu.tooltip}\n >\n {menu.image ? (\n <iBizIcon class={ns.e('icon')} icon={menu.image}></iBizIcon>\n ) : null}\n {menu.label}\n {counterData[menu.counterId] != null ? (\n <div class={ns.e('counter')}>{counterData[menu.counterId]}</div>\n ) : null}\n </el-menu-item>\n ) : (\n <el-tooltip\n class={ns.b('tooltip')}\n content={menu.label}\n placement={'left'}\n theme='light'\n >\n <el-menu-item\n class={ns.e('item')}\n index={menu.key}\n disabled={menu.disabled}\n >\n {menu.image ? (\n <iBizIcon class={ns.e('icon')} icon={menu.image}></iBizIcon>\n ) : (\n menu.label.slice(0, 1)\n )}\n </el-menu-item>\n </el-tooltip>\n );\n}\n\n/**\n * 绘制子菜单\n * @author lxm\n * @date 2022-08-16 14:08:29\n * @param {IData} subMenu\n * @returns {*}\n */\nfunction renderSubmenu(\n isFirst: boolean,\n subMenu: IData,\n collapse: boolean,\n ns: Namespace,\n c: AppMenuController,\n counterData: IData,\n): VNode | undefined {\n if (!c.state.menuItemsState[subMenu.key].visible) {\n return;\n }\n return (\n <el-sub-menu class={ns.b('submenu')} index={subMenu.key}>\n {{\n default: () =>\n subMenu.children.map((item: IData) => {\n if (item.children) {\n return renderSubmenu(false, item, collapse, ns, c, counterData);\n }\n return renderMenuItem(false, item, collapse, ns, c, counterData);\n }),\n title: () => {\n if (collapse) {\n if (subMenu.image) {\n return (\n <iBizIcon class={ns.e('icon')} icon={subMenu.image}></iBizIcon>\n );\n }\n return [\n isFirst ? subMenu.label.slice(0, 1) : subMenu.label,\n isFirst ? null : <ion-icon name='chevron-forward-outline' />,\n ];\n }\n return [\n <iBizIcon class={ns.e('icon')} icon={subMenu.image}></iBizIcon>,\n subMenu.label,\n ];\n },\n }}\n </el-sub-menu>\n );\n}\n\nexport const AppMenuControl = defineComponent({\n name: 'IBizAppMenuControl',\n props: {\n modelData: { type: Object as PropType<IAppMenu>, required: true },\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 collapse: Boolean,\n currentPath: String,\n },\n setup() {\n const c = useControlController((...args) => new AppMenuController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const menus = ref<IData[]>(getMenus(c.model.appMenuItems!));\n // 默认激活菜单项\n const defaultActive = ref('');\n // 默认展开菜单项数组\n const defaultOpens: Ref<string[]> = ref([]);\n // 路由对象\n const route = useRoute();\n // 计数器数据\n let counter: AppCounter | null = null;\n const counterData = ref<IData>({});\n\n const key = ref(createUUID());\n\n // 计算当前路由匹配菜单\n const calcCurMenu = (): IAppMenuItem | undefined => {\n const allItems = c.getAllItems();\n const app = ibiz.hub.getApp(c.context.srfappid);\n return allItems.find(item => {\n if (item.itemType === 'MENUITEM' && item.appFuncId) {\n const func = app.getAppFunc(item.appFuncId!);\n return func?.appViewId?.split('.')?.[1] === route.params.view2;\n }\n return false;\n });\n };\n\n const onClick = async (id: string, event?: MouseEvent): Promise<void> => {\n const activeMenu = calcCurMenu();\n // 如果点击的是当前的菜单项,拦截掉\n if (activeMenu?.id === id) {\n return;\n }\n await c.onClickMenuItem(id, event);\n };\n\n // 监听二级路由参数,变化时计算当前激活菜单回显\n watch(\n () => route.params.view2,\n (newVal, oldVal) => {\n if (newVal !== oldVal && ibiz.config.appMenu.enableEcho) {\n const activeMenu = calcCurMenu();\n defaultActive.value = activeMenu ? activeMenu.id! : '';\n }\n },\n );\n\n onMounted(async () => {\n const allItems = c.getAllItems();\n // 默认激活的菜单项\n const defaultActiveMenuItem = allItems.find(item => {\n return item.openDefault && !item.hidden;\n });\n if (\n defaultActiveMenuItem &&\n !route.params.view2 &&\n !route.fullPath.includes('404')\n ) {\n defaultActive.value = defaultActiveMenuItem.id!;\n onClick(defaultActive.value);\n } else if (ibiz.config.appMenu.enableEcho) {\n const activeMenu = calcCurMenu();\n defaultActive.value = activeMenu ? activeMenu.id! : '';\n }\n // 默认展开的菜单项数组\n const defaultOpensArr = allItems.filter(item => {\n return item.expanded && !item.hidden;\n });\n if (defaultOpensArr.length > 0) {\n defaultOpensArr.forEach(item => {\n defaultOpens.value.push(item.id!);\n });\n }\n // 计数器相关\n const counterRefId = c.model.appCounterRefId;\n if (counterRefId) {\n counter = c.getCounter(counterRefId);\n if (counter) {\n counter.onChange((data: IData) => {\n counterData.value = data;\n });\n }\n }\n });\n\n onUnmounted(() => {\n counter?.destroy();\n });\n\n const menuMode = computed(() => {\n const model = c.view.model.mainMenuAlign;\n switch (model) {\n case 'TOP':\n return 'horizontal';\n default:\n return 'vertical';\n }\n });\n\n if (\n c.view.model.mainMenuAlign &&\n c.view.model.mainMenuAlign !== 'LEFT' &&\n c.view.model.mainMenuAlign !== 'TOP'\n ) {\n ibiz.message.warning(`暂未支持菜单方向为${c.view.model.mainMenuAlign}!`);\n }\n\n const isShowCollapse = computed(() => {\n if (\n c.view.model.mainMenuAlign === 'LEFT' ||\n c.view.model.mainMenuAlign === undefined\n ) {\n return true;\n }\n return false;\n });\n\n return {\n menus,\n c,\n key,\n onClick,\n ns,\n defaultActive,\n defaultOpens,\n menuMode,\n counterData,\n isShowCollapse,\n };\n },\n render() {\n return (\n <iBizControlBase\n class={[\n this.ns.b(),\n this.ns.m(this.menuMode),\n this.ns.is('collapse', this.collapse),\n this.ns.is('show-collapse', this.isShowCollapse),\n ]}\n controller={this.c}\n >\n {this.c.state.isCreated && (\n <el-menu\n key={this.key}\n ref={'menu'}\n default-active={this.defaultActive}\n default-openeds={this.defaultOpens}\n collapse={this.collapse}\n collapse-transition={false}\n onSelect={this.onClick}\n theme='light'\n mode={this.menuMode}\n ellipsis={false}\n >\n {this.menus.map(item => {\n if (item.children?.length > 0) {\n return renderSubmenu(\n true,\n item,\n this.collapse,\n this.ns,\n this.c,\n this.counterData,\n );\n }\n return renderMenuItem(\n true,\n item,\n this.collapse,\n this.ns,\n this.c,\n this.counterData,\n );\n })}\n </el-menu>\n )}\n {this.isShowCollapse && (\n <div\n class={[\n this.ns.b('collapse-icon'),\n this.ns.is('collapse', this.collapse),\n ]}\n onClick={() => {\n this.c.view.call(ViewCallTag.TOGGLE_COLLAPSE);\n }}\n >\n <ion-icon name='menu-collapse' />\n </div>\n )}\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 AppMenuProvider\n * @implements {IControlProvider}\n */\nexport class AppMenuProvider implements IControlProvider {\n component: string = 'IBizAppMenuControl';\n}\n","import { ControlType, registerControlProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { AppMenuControl } from './app-menu';\nimport { AppMenuProvider } from './app-menu.provider';\n\nexport const IBizAppMenuControl = withInstall(\n AppMenuControl,\n function (v: App) {\n v.component(AppMenuControl.name, AppMenuControl);\n registerControlProvider(ControlType.APP_MENU, () => new AppMenuProvider());\n },\n);\n\nexport default IBizAppMenuControl;\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 AppMenuProvider\n * @implements {IControlProvider}\n */\nexport class AppMenuIconViewProvider implements IControlProvider {\n component: string = 'IBizAppMenuIconViewControl';\n}\n","import {\n AppMenuIconViewController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { IAppMenu, IAppMenuItem } from '@ibiz/model-core';\nimport { defineComponent, PropType, Ref, ref, VNode } from 'vue';\nimport './app-menu-icon-view.scss';\n\nexport const AppMenuIconViewControl = defineComponent({\n name: 'IBizAppMenuIconViewControl',\n props: {\n modelData: { type: Object as PropType<IAppMenu>, required: true },\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 collapse: Boolean,\n currentPath: String,\n },\n setup() {\n const c = useControlController(\n (...args) => new AppMenuIconViewController(...args),\n );\n const ns = useNamespace(\n `control-${c.model.controlType!.toLowerCase()}-iconview`,\n );\n // 默认激活菜单项\n const defaultActive = ref('');\n // 默认展开菜单项数组\n const defaultOpens: Ref<string[]> = ref([]);\n c.model.appMenuItems?.forEach(item => {\n if (item.itemType === 'MENUITEM') {\n defaultOpens.value.push(item.id!);\n }\n });\n\n const onClick = async (key: string, event: MouseEvent): Promise<void> => {\n await c.onClickMenuItem(key, event);\n };\n\n const renderItem = (item: IAppMenuItem): VNode | null => {\n const state = c.state.menuItemsState[item.id!];\n if (!state.visible) {\n return null;\n }\n let label = item.caption;\n if (item.capLanguageRes) {\n label = ibiz.i18n.t(item.capLanguageRes.lanResTag!, item.caption);\n }\n return (\n <div\n class={[ns.b('item'), ns.is('disabled', !item.appFuncId)]}\n title={item.tooltip || item.caption}\n onClick={(event): void => {\n if (item.appFuncId) {\n onClick(item.id!, event);\n }\n }}\n >\n <iBizIcon\n class={ns.be('item', 'icon')}\n icon={item.sysImage}\n ></iBizIcon>\n <span class={ns.be('item', 'label')}>{label}</span>\n </div>\n );\n };\n\n const renderGroup = (item: IAppMenuItem): VNode | null => {\n const state = c.state.menuItemsState[item.id!];\n if (!state.visible) {\n return null;\n }\n return (\n <el-collapse-item\n class={ns.b('group')}\n name={item.id}\n title={item.caption}\n >\n {item.appMenuItems?.map(child => {\n return renderItem(child);\n })}\n </el-collapse-item>\n );\n };\n\n return {\n c,\n ns,\n defaultActive,\n defaultOpens,\n onClick,\n renderGroup,\n renderItem,\n };\n },\n render() {\n const { state, model } = this.c;\n let content: VNode | null = null;\n if (state.isCreated && model.appMenuItems?.length) {\n content = (\n <el-collapse class={this.ns.e('content')} v-model={this.defaultOpens}>\n {model.appMenuItems.map(item => {\n if (item.itemType !== 'MENUITEM') {\n return null;\n }\n return this.renderGroup(item);\n })}\n </el-collapse>\n );\n }\n\n return (\n <iBizControlBase class={[this.ns.b()]} controller={this.c}>\n {content}\n </iBizControlBase>\n );\n },\n});\n","import { ControlType, registerControlProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { AppMenuIconViewProvider } from './app-menu-icon-view.provider';\nimport { AppMenuIconViewControl } from './app-menu-icon-view';\n\nexport const IBizAppMenuIconViewControl = withInstall(\n AppMenuIconViewControl,\n function (v: App) {\n v.component(AppMenuIconViewControl.name, AppMenuIconViewControl);\n registerControlProvider(\n `${ControlType.APP_MENU}_ICONVIEW`,\n () => new AppMenuIconViewProvider(),\n );\n },\n);\n\nexport default IBizAppMenuIconViewControl;\n","import { computed, defineComponent, ref } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './grid-field-column.scss';\nimport {\n GridFieldColumnController,\n GridRowState,\n} from '@ibiz-template/runtime';\nimport { isNotNil } from 'ramda';\n\nexport const GridFieldColumn = defineComponent({\n name: 'IBizGridFieldColumn',\n props: {\n controller: {\n type: GridFieldColumnController,\n required: true,\n },\n row: {\n type: GridRowState,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('grid-field-column');\n\n /**\n * 单元格点击事件\n *\n * @author lxm\n * @date 2022-09-28 18:09:27\n * @param {MouseEvent} event\n */\n const onCellClick = (event: MouseEvent): void => {\n if (props.controller.hasAction) {\n event.stopPropagation();\n // 阻止触发行点击\n props.controller.triggerAction(props.row, event);\n }\n };\n\n /**\n * 文本点击事件\n *\n * @author zk\n * @date 2023-07-13 12:07:53\n * @param {MouseEvent} event\n */\n const onTextClick = (event: MouseEvent): void => {\n // 阻止触发行点击\n if (props.controller.isLinkColumn) {\n event.stopPropagation();\n props.controller.openLinkView(props.row, event);\n }\n };\n\n /**\n * 获取脚本代码html\n * @param {*} computed\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-08-15 11:34:31\n */\n const CustomHtml = computed(() => {\n return props.controller.getCustomHtml(props.row);\n });\n\n const fieldValue = computed(\n () => props.row.data[props.controller.model.codeName!.toLowerCase()],\n );\n\n const formatValue = computed(() =>\n props.controller.formatValue(fieldValue.value),\n );\n\n // 代码表翻译文本\n const codeListText = ref('');\n const onInfoTextChange = (text: string) => {\n codeListText.value = text;\n };\n\n // tooltip相关\n const tooltip = computed(() => {\n // ellipsis模式且属性有值的时候显示tooltip\n if (\n props.controller.grid.overflowMode === 'ellipsis' &&\n isNotNil(fieldValue.value) &&\n fieldValue.value !== ''\n ) {\n return props.controller.codeList\n ? codeListText.value\n : formatValue.value + (props.controller.model.unitName || '');\n }\n return undefined;\n });\n\n return {\n ns,\n onCellClick,\n onTextClick,\n onInfoTextChange,\n CustomHtml,\n fieldValue,\n formatValue,\n tooltip,\n };\n },\n render() {\n const c = this.controller;\n\n let content = null;\n if (c.isCustomCode) {\n content = (\n <span class={this.ns.e('script')} v-html={this.CustomHtml}></span>\n );\n } else if (c.codeList) {\n content = (\n <iBizCodeList\n class={this.ns.e('text')}\n codeListItems={c.codeListItems}\n codeList={c.codeList}\n value={this.fieldValue}\n onClick={this.onTextClick}\n onInfoTextChange={this.onInfoTextChange}\n title={this.tooltip}\n ></iBizCodeList>\n );\n } else {\n content = (\n <span\n class={this.ns.e('text')}\n title={this.tooltip}\n onClick={this.onTextClick}\n >\n {this.formatValue}\n {this.fieldValue != null && c.model.unitName}\n </span>\n );\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n c.clickable(this.row) && this.ns.m('clickable'),\n this.ns.m(this.controller.grid.overflowMode),\n this.controller.model.cellSysCss?.cssName,\n ]}\n onClick={this.onCellClick}\n >\n {content}\n </div>\n );\n },\n});\nexport default GridFieldColumn;\n","import {\n GridController,\n GridFieldColumnController,\n IGridColumnProvider,\n} from '@ibiz-template/runtime';\nimport { IDEGridFieldColumn } from '@ibiz/model-core';\n\n/**\n * 表格列适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class GridFieldColumnProvider\n * @implements {IGridColumnProvider}\n */\nexport class GridFieldColumnProvider implements IGridColumnProvider {\n component: string = 'IBizGridFieldColumn';\n\n async createController(\n columnModel: IDEGridFieldColumn,\n grid: GridController,\n ): Promise<GridFieldColumnController> {\n const c = new GridFieldColumnController(columnModel, grid);\n await c.init();\n return c;\n }\n}\n","import { registerGridColumnProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport GridFieldColumn from './grid-field-column';\nimport { GridFieldColumnProvider } from './grid-field-column.provider';\n\nexport const IBizGridFieldColumn = withInstall(\n GridFieldColumn,\n function (v: App) {\n v.component(GridFieldColumn.name, GridFieldColumn);\n registerGridColumnProvider(\n 'DEFGRIDCOLUMN',\n () => new GridFieldColumnProvider(),\n );\n registerGridColumnProvider(\n 'DEFTREEGRIDCOLUMN',\n () => new GridFieldColumnProvider(),\n );\n },\n);\n\nexport default IBizGridFieldColumn;\n","import { IUIActionGroupDetail } from '@ibiz/model-core';\nimport { defineComponent } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './grid-ua-column.scss';\nimport { GridUAColumnController, GridRowState } from '@ibiz-template/runtime';\n\nexport const GridUAColumn = defineComponent({\n name: 'IBizGridUAColumn',\n props: {\n controller: {\n type: GridUAColumnController,\n required: true,\n },\n row: {\n type: GridRowState,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('grid-ua-column');\n const onStopPropagation = (e: MouseEvent): void => {\n e.stopPropagation();\n };\n const onActionClick = async (\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ): Promise<void> => {\n await props.controller.onActionClick(detail, props.row, event);\n };\n\n return { ns, onStopPropagation, onActionClick };\n },\n render() {\n return (\n <div\n class={[this.ns.b(), this.controller.model.cellSysCss?.cssName]}\n onDblclick={this.onStopPropagation}\n onClick={this.onStopPropagation}\n >\n {this.controller.model.deuiactionGroup?.uiactionGroupDetails\n ?.length && (\n <iBizActionToolbar\n action-details={\n this.controller.model.deuiactionGroup.uiactionGroupDetails\n }\n actions-state={\n this.row.uaColStates[this.controller.model.codeName!]\n }\n onActionClick={this.onActionClick}\n ></iBizActionToolbar>\n )}\n </div>\n );\n },\n});\nexport default GridUAColumn;\n","import {\n GridController,\n GridUAColumnController,\n IGridColumnProvider,\n} from '@ibiz-template/runtime';\nimport { IDEGridUAColumn } from '@ibiz/model-core';\n\n/**\n * 表格操作列适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class GridUAColumnProvider\n * @implements {IGridColumnProvider}\n */\nexport class GridUAColumnProvider implements IGridColumnProvider {\n component: string = 'IBizGridUAColumn';\n\n async createController(\n columnModel: IDEGridUAColumn,\n grid: GridController,\n ): Promise<GridUAColumnController> {\n const c = new GridUAColumnController(columnModel, grid);\n await c.init();\n return c;\n }\n}\n","import { registerGridColumnProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport GridUAColumn from './grid-ua-column';\nimport { GridUAColumnProvider } from './grid-ua-column.provider';\n\nexport const IBizGridUAColumn = withInstall(GridUAColumn, function (v: App) {\n v.component(GridUAColumn.name, GridUAColumn);\n registerGridColumnProvider('UAGRIDCOLUMN', () => new GridUAColumnProvider());\n});\n\nexport default IBizGridUAColumn;\n","import { OnClickOutsideResult } from '@ibiz-template/core';\nimport {\n GridRowState,\n GridFieldEditColumnController,\n} from '@ibiz-template/runtime';\nimport { useClickOutside } from '@ibiz-template/vue3-util';\nimport { computed, reactive, Ref } from 'vue';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type\nexport function useCellEdit(\n props: {\n readonly row: GridRowState;\n readonly controller: GridFieldEditColumnController;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n componentRef: Ref<any>,\n) {\n const c = props.controller;\n\n // * 表格列相关\n /** 列的禁用状态 */\n const disabled = computed(() => {\n return props.row.editColStates[c.fieldName].disabled;\n });\n /** 列的只读状态 */\n const readonly = computed(() => {\n return props.row.editColStates[c.fieldName].readonly;\n });\n /** 列是否有错误信息 */\n const hasError = computed(() => !!props.row.errors[c.fieldName]);\n /** 列的编辑状态 */\n const editable = computed(\n () => props.row.editColStates[c.fieldName].editable,\n );\n const setEditable = (flag: boolean): void => {\n props.row.editColStates[c.fieldName].editable = flag;\n };\n\n // * 编辑器相关\n /** 单元格是否可以编辑 */\n const cellEditable = computed(() => {\n // 列不禁用,不只读,且没有报错时\n return !disabled.value && !readonly.value && !hasError.value;\n });\n /** 当单元格可编辑且编辑开关状态为true的时候编辑器呈现为编辑态, 有报错的直接显示编辑态 */\n const editorShowEdit = computed(() => {\n return hasError.value || (cellEditable.value && editable.value);\n });\n\n // 当编辑器不呈现为编辑态的时候就是只读态该模式下没有禁用态\n const editorReadOnly = computed(() => {\n return !editorShowEdit.value;\n });\n // 单元格行编辑下,编辑器没有禁用\n const editorDisabled = false;\n // 单元格行编辑下,需要自动聚焦,每次变更编辑态的时候就需要聚焦到对应的编辑器内部。\n const isAutoFocus = true;\n\n // * GridEditItem相关\n /** 是否显示遮罩 */\n const showEditMask = computed(() => {\n // 可编辑且编辑状态变量为false的时候显示遮罩\n return cellEditable.value && !editable.value;\n });\n\n /** 是否阻止内部点击冒泡 */\n const stopPropagation = computed(() => {\n // 可编辑的时候不管是遮罩还是编辑态的编辑器都不能触发行点击事件。\n return cellEditable.value;\n });\n\n // 点击遮罩后,开启编辑,然后监听外部点击,外部点击之后关闭编辑\n let funcs: OnClickOutsideResult;\n const onMaskClick = (): void => {\n setEditable(true);\n funcs = useClickOutside(componentRef, async _evt => {\n setEditable(false);\n funcs.stop();\n });\n };\n\n // * 编辑器事件处理\n // 聚焦事件,关闭外部点击监听,由编辑器的blur关闭编辑\n const onFocus = (): void => {\n if (funcs) {\n funcs.stop();\n }\n ibiz.log.debug(`${c.fieldName}属性编辑器focus事件`);\n };\n const onBlur = (): void => {\n ibiz.log.debug(`${c.fieldName}属性编辑器blur事件`);\n // 单元格编辑的时候恢复信息态\n setEditable(false);\n // 失焦保存模式时,触发保存\n if (ibiz.config.grid.editSaveMode === 'cell-blur') {\n c.grid.save(props.row.data);\n }\n };\n\n const gridEditItemProps = reactive({\n showEditMask,\n stopPropagation,\n onMaskClick,\n });\n\n const editorProps = reactive({\n autoFocus: isAutoFocus,\n disabled: editorDisabled,\n readonly: editorReadOnly,\n onBlur,\n onFocus,\n });\n\n return {\n gridEditItemProps,\n editorProps,\n };\n}\n","import {\n GridRowState,\n GridFieldEditColumnController,\n} from '@ibiz-template/runtime';\nimport { computed, reactive, Ref } from 'vue';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type\nexport function useRowEdit(\n props: {\n readonly row: GridRowState;\n readonly controller: GridFieldEditColumnController;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _componentRef: Ref<any>,\n) {\n const c = props.controller;\n\n // * 表格列相关\n /** 列的禁用状态 */\n const disabled = computed(() => {\n return props.row.editColStates[c.fieldName].disabled;\n });\n /** 列的只读状态 */\n const readonly = computed(() => {\n return props.row.editColStates[c.fieldName].readonly;\n });\n /** 列是否有错误信息 */\n // const hasError = computed(() => !!props.row.errors[c.fieldName]);\n /** 列的编辑状态 */\n const editable = computed(\n () => props.row.editColStates[c.fieldName].editable,\n );\n\n const editorReadOnly = computed(() => {\n // 非只读的时候,编辑关闭且没有报错的时候才显示只读\n return readonly.value || !editable.value;\n });\n const editorDisabled = computed(() => {\n return editable.value && disabled.value;\n });\n\n /** 是否阻止内部点击冒泡 */\n const stopPropagation = computed(() => {\n return editable.value;\n });\n\n const gridEditItemProps = reactive({\n stopPropagation,\n });\n\n const editorProps = reactive({\n disabled: editorDisabled,\n readonly: editorReadOnly,\n });\n\n return {\n gridEditItemProps,\n editorProps,\n };\n}\n","import {\n GridRowState,\n GridFieldEditColumnController,\n} from '@ibiz-template/runtime';\nimport { computed, reactive, Ref } from 'vue';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type\nexport function useAllEdit(\n props: {\n readonly row: GridRowState;\n readonly controller: GridFieldEditColumnController;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _componentRef: Ref<any>,\n) {\n const c = props.controller;\n\n // * 表格列相关\n /** 列的禁用状态 */\n const disabled = computed(() => {\n return props.row.editColStates[c.fieldName].disabled;\n });\n /** 列的只读状态 */\n const readonly = computed(() => {\n return props.row.editColStates[c.fieldName].readonly;\n });\n /** 列是否有错误信息 */\n // const hasError = computed(() => !!props.row.errors[c.fieldName]);\n /** 列的编辑状态 */\n const editable = computed(() => props.controller.grid.state.rowEditOpen);\n\n const editorReadOnly = computed(() => {\n // 非只读的时候,编辑关闭且没有报错的时候才显示只读\n return readonly.value || !editable.value;\n });\n const editorDisabled = computed(() => {\n return editable.value && disabled.value;\n });\n\n /** 是否阻止内部点击冒泡 */\n const stopPropagation = computed(() => {\n return editable.value;\n });\n\n const onBlur = (): void => {\n c.grid.save(props.row.data);\n };\n\n const gridEditItemProps = reactive({\n stopPropagation,\n });\n\n const editorProps = reactive({\n disabled: editorDisabled,\n readonly: editorReadOnly,\n onBlur,\n });\n\n return {\n gridEditItemProps,\n editorProps,\n };\n}\n","import { h, defineComponent, resolveComponent, ref, computed } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { RuntimeError } from '@ibiz-template/core';\nimport {\n GridFieldEditColumnController,\n GridRowState,\n} from '@ibiz-template/runtime';\nimport { isNil } from 'ramda';\nimport { useCellEdit } from './cell-edit';\nimport { useRowEdit } from './row-edit';\nimport { useAllEdit } from './all-edit';\nimport './grid-field-edit-column.scss';\n\nexport const GridFieldEditColumn = defineComponent({\n name: 'GridFieldEditColumn',\n props: {\n controller: {\n type: GridFieldEditColumnController,\n required: true,\n },\n row: {\n type: GridRowState,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('grid-field-edit-column');\n const componentRef = ref();\n\n const c = props.controller;\n const fieldName = c.editItem.codeName!;\n\n // 编辑器值变更事件\n const rowDataChange = async (\n val: unknown,\n name?: string,\n ): Promise<void> => {\n ibiz.log.debug(`${fieldName}值变更`, val);\n await c.setRowValue(props.row, val, name);\n };\n\n const useByShowMode = (): {\n gridEditItemProps: IData;\n editorProps: IData;\n } => {\n switch (ibiz.config.grid.editShowMode) {\n case 'cell':\n return useCellEdit(props, componentRef);\n case 'row':\n return useRowEdit(props, componentRef);\n case 'all':\n return useAllEdit(props, componentRef);\n default:\n throw new RuntimeError(`${ibiz.config.grid.editShowMode}暂未支持`);\n }\n };\n const { gridEditItemProps, editorProps } = useByShowMode();\n\n const infoText = ref<string | undefined>(undefined);\n const onInfoTextChange = (text: string) => {\n infoText.value = text;\n };\n const tooltip = computed<string | undefined>(() => {\n // 非信息态不显示tooltip\n if (!editorProps.readonly) {\n return undefined;\n }\n if (isNil(infoText.value)) {\n const val = props.row.data[fieldName];\n return c.formatValue(val);\n }\n return infoText.value;\n });\n\n return {\n ns,\n c,\n fieldName,\n componentRef,\n tooltip,\n rowDataChange,\n onInfoTextChange,\n gridEditItemProps,\n editorProps,\n };\n },\n render() {\n const val = this.row.data[this.fieldName];\n\n return (\n <iBizGridEditItem\n {...{\n ref: 'componentRef',\n required: !this.c.editItem.allowEmpty,\n error: this.row.errors[this.fieldName],\n overflowMode: this.controller.grid.overflowMode,\n class: [\n this.ns,\n this.ns.m(this.c.grid.overflowMode),\n this.controller.model.cellSysCss?.cssName,\n ],\n ...this.gridEditItemProps,\n }}\n >\n {this.c.editorProvider &&\n h(resolveComponent(this.c.editorProvider.gridEditor), {\n class: this.ns.e('editor'),\n value: this.editorProps.readonly ? this.c.formatValue(val) : val,\n data: this.row.data,\n controller: this.c.editor,\n overflowMode: this.c.grid.overflowMode,\n onChange: this.rowDataChange,\n onInfoTextChange: this.onInfoTextChange,\n title: this.tooltip,\n ...this.editorProps,\n })}\n </iBizGridEditItem>\n );\n },\n});\nexport default GridFieldEditColumn;\n","import {\n GridController,\n GridFieldEditColumnController,\n IGridColumnProvider,\n} from '@ibiz-template/runtime';\nimport { IDEGridFieldColumn } from '@ibiz/model-core';\n\n/**\n * 表格属性列(开启行编辑)适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class GridFieldEditColumnProvider\n * @implements {IGridColumnProvider}\n */\nexport class GridFieldEditColumnProvider implements IGridColumnProvider {\n component: string = 'GridFieldEditColumn';\n\n async createController(\n columnModel: IDEGridFieldColumn,\n grid: GridController,\n ): Promise<GridFieldEditColumnController> {\n const c = new GridFieldEditColumnController(columnModel, grid);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './grid-edit-item.scss';\n\nexport const IBizGridEditItem = defineComponent({\n name: 'IBizGridEditItem',\n props: {\n required: {\n type: Boolean,\n default: false,\n },\n showEditMask: {\n type: Boolean,\n default: false,\n },\n stopPropagation: {\n type: Boolean,\n default: false,\n },\n error: {\n type: String,\n },\n },\n emits: {\n maskClick: (_event: MouseEvent) => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('grid-edit-item');\n const onStopPropagation = (e: MouseEvent): void => {\n if (props.stopPropagation) {\n e.stopPropagation();\n }\n };\n\n const onClick = (e: MouseEvent): void => {\n if (props.stopPropagation) {\n e.stopPropagation();\n }\n if (props.showEditMask) {\n emit('maskClick', e);\n }\n };\n\n // tooltip相关\n const showTooltip = computed(() => {\n // 有报错信息的时候显示\n return props.error;\n });\n\n const tooltipContent = computed(() => {\n return props.error;\n });\n\n return { ns, tooltipContent, showTooltip, onClick, onStopPropagation };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.is('error', !!this.error),\n this.showEditMask && this.ns.m('show-mask'),\n ]}\n onDblclick={this.onStopPropagation}\n onClick={this.onClick}\n >\n <el-tooltip\n content={this.tooltipContent}\n disabled={!this.showTooltip}\n transfer\n transfer-class-name={this.ns.e('tooltip-popper')}\n placement='top'\n >\n <div class={this.ns.e('tooltip')}>{this.$slots.default?.()}</div>\n </el-tooltip>\n </div>\n );\n },\n});\nexport default IBizGridEditItem;\n","import { registerGridColumnProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport GridFieldEditColumn from './grid-field-edit-column';\nimport { GridFieldEditColumnProvider } from './grid-field-edit-column.provider';\n\nimport { IBizGridEditItem } from './grid-edit-item/grid-edit-item';\n\nexport const IBizGridFieldEditColumn = withInstall(\n GridFieldEditColumn,\n function (v: App) {\n v.component(GridFieldEditColumn.name, GridFieldEditColumn);\n v.component(IBizGridEditItem.name, IBizGridEditItem);\n registerGridColumnProvider(\n 'DEFGRIDCOLUMN_EDIT',\n () => new GridFieldEditColumnProvider(),\n );\n },\n);\n\nexport default IBizGridFieldEditColumn;\n","import { defineComponent } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport {\n GridGroupColumnController,\n GridRowState,\n} from '@ibiz-template/runtime';\n\nexport const GridGroupColumn = defineComponent({\n name: 'IBizGridGroupColumn',\n props: {\n controller: {\n type: GridGroupColumnController,\n required: true,\n },\n row: {\n type: GridRowState,\n required: true,\n },\n },\n setup() {\n const ns = useNamespace('grid-group-column');\n\n return { ns };\n },\n render() {\n return <div class={[this.ns.b()]}></div>;\n },\n});\nexport default GridGroupColumn;\n","import {\n GridController,\n GridGroupColumnController,\n IGridColumnProvider,\n} from '@ibiz-template/runtime';\nimport { IDEGridGroupColumn } from '@ibiz/model-core';\n\n/**\n * 表格分组列适配器\n *\n * @export\n * @class GridGroupColumnProvider\n * @implements {IGridColumnProvider}\n */\nexport class GridGroupColumnProvider implements IGridColumnProvider {\n component: string = '';\n\n async createController(\n columnModel: IDEGridGroupColumn,\n grid: GridController,\n ): Promise<GridGroupColumnController> {\n const c = new GridGroupColumnController(columnModel, grid);\n await c.init();\n return c;\n }\n}\n","import { registerGridColumnProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport GridGroupColumn from './grid-group-column';\nimport { GridGroupColumnProvider } from './grid-group-column.provider';\n\nexport const IBizGridGroupColumn = withInstall(GridGroupColumn, () => {\n registerGridColumnProvider(\n 'GROUPGRIDCOLUMN',\n () => new GridGroupColumnProvider(),\n );\n});\n\nexport default IBizGridGroupColumn;\n","import { defineComponent, ref } from 'vue';\nimport { useEventListener, useNamespace } from '@ibiz-template/vue3-util';\nimport './row-edit-popover.scss';\n\nexport const IBizRowEditPopover = defineComponent({\n name: 'IBizRowEditPopover',\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n },\n emits: {\n confirm: () => true,\n cancel: () => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('row-edit-popover');\n\n const onCancel = () => {\n emit('cancel');\n };\n const onConfirm = () => {\n emit('confirm');\n };\n\n const componentRef = ref(document);\n useEventListener(\n componentRef,\n 'keydown',\n evt => {\n if (props.show && evt.key === 'Escape') {\n onCancel();\n }\n },\n { capture: true }, // 捕获防止内部ui拦截点击事件\n );\n\n return { ns, onCancel, onConfirm };\n },\n render() {\n return (\n <div class={[this.ns.b(), this.ns.is('hidden', !this.show)]}>\n <el-button onClick={this.onConfirm}>确定</el-button>\n <el-button onClick={this.onCancel}>取消</el-button>\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\nimport {\n ControlVO,\n GridController,\n GridRowState,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { IDEGrid, IDEGridColumn } from '@ibiz/model-core';\nimport { TableColumnCtx } from 'element-plus';\nimport { computed, Ref, ref, watch } from 'vue';\n\n/**\n * 表格部件props接口\n *\n * @author zk\n * @date 2023-09-26 06:09:51\n * @export\n * @interface IGridProps\n */\nexport interface IGridProps {\n // 模型\n modelData: IDEGrid;\n // 上下文\n context: IContext;\n // 视图参数\n params: IParams;\n // 适配器\n provider: IControlProvider;\n // 部件行数据默认激活模式\n mdctrlActiveMode?: number;\n // 是否单选\n singleSelect?: boolean;\n // 是否开启行编辑\n rowEditOpen?: boolean;\n // 是否是本地数据模式\n isSimple: boolean;\n // 本地数据模式data\n data: Array<IData>;\n // 默认加载\n loadDefault: boolean;\n}\n\n/**\n * 适配element的table的事件\n *\n * @author lxm\n * @date 2022-09-05 21:09:42\n * @export\n * @param {GridController} c\n * @returns {*}\n */\nexport function useITableEvent(c: GridController): {\n tableRef: Ref<IData | undefined>;\n onRowClick: (\n data: ControlVO,\n _column: IData,\n event: MouseEvent,\n ) => Promise<void>;\n onDbRowClick: (data: ControlVO) => void;\n onSelectionChange: (selection: ControlVO[]) => void;\n onSortChange: (opts: {\n _column: IData;\n prop: string;\n order: 'ascending' | 'descending';\n }) => void;\n handleRowClassName: ({ row }: { row: IData }) => string;\n handleHeaderCellClassName: ({\n _row,\n column,\n _rowIndex,\n _columnIndex,\n }: {\n _row: IData;\n column: IData;\n _rowIndex: number;\n _columnIndex: number;\n }) => string;\n} {\n const tableRef = ref<IData>();\n let forbidChange = false;\n\n async function onRowClick(\n data: ControlVO,\n _column: IData,\n _event: MouseEvent,\n ): Promise<void> {\n // 单行编辑模式下,行点击会触发\n if (ibiz.config.grid.editShowMode === 'row' && c.model.enableRowEdit) {\n const row = c.findRowState(data);\n if (row && row.showRowEdit !== true) {\n // 开启行编辑\n await c.switchRowEdit(row, true);\n }\n } else {\n c.onRowClick(data as ControlVO);\n }\n }\n\n function onDbRowClick(data: ControlVO): void {\n c.onDbRowClick(data);\n }\n\n function onSelectionChange(selection: ControlVO[]): void {\n // 选中数据在回显的时候屏蔽值变更事件,否则会递归。\n if (!forbidChange) {\n c.setSelection(selection);\n }\n }\n\n // 监听选中数据,操作表格来界面回显选中效果。\n watch(\n [\n () => tableRef.value,\n (): boolean => c.state.isLoaded,\n (): IData[] => c.state.selectedData,\n ],\n ([table, isLoaded, newVal]) => {\n if (!isLoaded || !table) {\n return;\n }\n if (c.state.singleSelect) {\n // 单选,选中效果回显。\n if (newVal[0]) {\n tableRef.value!.setCurrentRow(newVal[0], true);\n } else {\n tableRef.value!.setCurrentRow();\n }\n } else {\n forbidChange = true;\n tableRef.value!.clearSelection();\n newVal.forEach(item => tableRef.value!.toggleRowSelection(item, true));\n forbidChange = false;\n }\n },\n );\n\n // 排序变更回调。\n function onSortChange(opts: {\n _column: IData;\n prop: string;\n order: 'ascending' | 'descending';\n }): void {\n const { prop, order } = opts;\n const fieldName = c.fieldColumns[prop].model.appDEFieldId;\n let order1: 'asc' | 'desc' | undefined;\n if (order === 'ascending') {\n order1 = 'asc';\n } else if (order === 'descending') {\n order1 = 'desc';\n }\n c.setSort(fieldName, order1);\n c.load();\n }\n\n // todo 用自己的ns类名去压制,把element原来的样式清除\n function handleRowClassName({ row }: { row: IData }): string {\n let activeClassName = '';\n if (c.state.selectedData.length > 0) {\n c.state.selectedData.forEach((data: IData) => {\n if (data === row) {\n // current-row用于多选激活样式与单选保持一致,有背景色\n activeClassName = 'current-row';\n }\n });\n }\n const rowState = c.findRowState(row);\n if (rowState?.showRowEdit) {\n activeClassName += ' editing-row';\n }\n if (row.srfkey) {\n activeClassName += ` id-${row.srfkey}`;\n }\n return activeClassName;\n }\n\n // 表头单元格的 className 的回调方法\n function handleHeaderCellClassName({\n _row,\n column,\n _rowIndex,\n _columnIndex,\n }: {\n _row: IData;\n column: IData;\n _rowIndex: number;\n _columnIndex: number;\n }): string {\n const columnModel = c.model.degridColumns?.find(gridColumn => {\n return gridColumn.codeName === column.property;\n });\n if (\n columnModel &&\n columnModel.headerSysCss &&\n columnModel.headerSysCss.cssName\n ) {\n return columnModel.headerSysCss.cssName;\n }\n return '';\n }\n\n return {\n tableRef,\n onRowClick,\n onDbRowClick,\n onSelectionChange,\n onSortChange,\n handleRowClassName,\n handleHeaderCellClassName,\n };\n}\n\n/**\n * 使用表格分页组件\n *\n * @author lxm\n * @date 2022-09-06 17:09:09\n * @export\n * @param {GridController} c\n * @returns {*}\n */\nexport function useAppGridPagination(c: GridController): {\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n onPageRefresh: () => void;\n} {\n function onPageChange(page: number): void {\n if (!page || page === c.state.curPage) {\n return;\n }\n c.state.curPage = page;\n c.load();\n }\n\n function onPageSizeChange(size: number): void {\n if (!size || size === c.state.size) {\n return;\n }\n c.state.size = size;\n\n // 当page为第一页的时候切换size不会触发pageChange,需要自己触发加载\n if (c.state.curPage === 1) {\n c.load();\n }\n }\n\n function onPageRefresh(): void {\n c.load();\n }\n return { onPageChange, onPageSizeChange, onPageRefresh };\n}\n\nexport function useAppGridBase(\n c: GridController,\n props: IGridProps,\n): {\n tableData: Ref<IData>;\n renderColumns: Ref<IDEGridColumn[]>;\n defaultSort: Ref<IData>;\n summaryMethod: ({\n columns,\n }: {\n columns: TableColumnCtx<IData>[];\n data: IData[];\n }) => string[];\n} {\n const initSimpleData = (): void => {\n if (!props.data) {\n return;\n }\n c.state.items = props.data;\n c.state.rows = props.data.map(item => {\n const row = new GridRowState(new ControlVO(item), c);\n return row;\n });\n };\n\n const defaultSort = computed(() => {\n const fieldColumn = Object.values(c.fieldColumns).find(\n item => item.model.appDEFieldId === c.model.minorSortAppDEFieldId,\n );\n return {\n prop: fieldColumn?.model.codeName,\n order:\n c.model.minorSortDir?.toLowerCase() === 'desc'\n ? 'descending'\n : 'ascending',\n };\n });\n\n // 选中数据回显\n c.evt.on('onCreated', async () => {\n if (props.isSimple) {\n initSimpleData();\n c.state.isLoaded = true;\n }\n });\n\n watch(\n () => props.data,\n () => {\n if (props.isSimple) {\n initSimpleData();\n }\n },\n {\n deep: true,\n },\n );\n\n // 表格数据,items和rows更新有时间差,用rows来获取items\n const tableData = computed(() => {\n const state = c.state;\n if (c.model.enableGroup) {\n const result: IData[] = [];\n state.groups.forEach(item => {\n if (!item.children.length) {\n return;\n }\n const children = [...item.children];\n const first = children.shift();\n result.push({\n srfkey: first?.srfkey || item.caption,\n isGroupData: true,\n caption: item.caption,\n first,\n children,\n });\n });\n return result;\n }\n return state.rows.map(row => row.data);\n });\n\n // 实际绘制的表格列\n const renderColumns = computed(() => {\n if (c.isMultistageHeader) {\n return c.model.degridColumns || [];\n }\n const columns: IDEGridColumn[] = [];\n c.state.columnStates.forEach(item => {\n if (item.hidden) {\n return;\n }\n const columnModel =\n c.fieldColumns[item.key]?.model || c.uaColumns[item.key]?.model;\n if (columnModel) {\n columns.push(columnModel);\n }\n });\n return columns;\n });\n\n /**\n * 求和计算回调\n * @author lxm\n * @date 2023-08-07 05:21:31\n * @return {*} {string[]}\n */\n const summaryMethod = ({\n columns,\n }: {\n columns: TableColumnCtx<IData>[];\n data: IData[];\n }): string[] => {\n return columns.map((item, index) => {\n if (index === 0) {\n return c.aggTitle;\n }\n return c.state.aggResult[item.property];\n });\n };\n return { tableData, renderColumns, defaultSort, summaryMethod };\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { computePosition } from '@floating-ui/dom';\nimport { RuntimeError } from '@ibiz-template/core';\nimport { GridController, GridRowState } from '@ibiz-template/runtime';\nimport { ComponentPublicInstance, reactive, ref, Ref } from 'vue';\n\nexport function useRowEditPopover(\n tableRef: Ref<IData | undefined>,\n c: GridController,\n) {\n let popInstance: ComponentPublicInstance | undefined;\n const showPop = ref(false);\n const editingRow = ref<GridRowState | undefined>();\n\n const popStyle = reactive({});\n\n const findTrEl = (row: GridRowState): HTMLElement => {\n if (!tableRef.value) {\n throw new RuntimeError('找不到表格组件引用');\n }\n const tableEl = tableRef.value.$el as HTMLElement;\n\n // 找到对应那一行的element\n let selector = '.el-table__row';\n if (row.data.srfkey) {\n selector += `.id-${row.data.srfkey}`;\n }\n const trEl = tableEl.querySelector(selector);\n if (!trEl) {\n throw new RuntimeError('找不到对应的表格行dom元素');\n }\n return trEl as HTMLElement;\n };\n\n const showRowEditPop = async (row: GridRowState) => {\n const trEl = findTrEl(row);\n if (!popInstance) {\n throw new RuntimeError('拿不到pop组件的实例');\n }\n const popEl = popInstance.$el as HTMLElement;\n const { x, y } = await computePosition(trEl, popEl, {\n placement: 'bottom',\n });\n\n Object.assign(popStyle, {\n top: `${y}px`,\n left: `${x}px`,\n });\n editingRow.value = row;\n showPop.value = true;\n };\n\n const onConfirm = async () => {\n if (editingRow.value) {\n c.switchRowEdit(editingRow.value, false, true);\n }\n };\n const onCancel = async () => {\n if (editingRow.value) {\n c.switchRowEdit(editingRow.value, false, false);\n }\n };\n\n const renderPopover = () => {\n // 显示气泡,且最后一行是开启编辑态的时候用占位撑开高度\n const showPlaceholder =\n showPop.value && c.state.rows[c.state.rows.length - 1].showRowEdit;\n return [\n <div\n class='row-edit-popover__placeholder'\n style={{ display: showPlaceholder ? 'block' : 'none' }}\n ></div>,\n <iBizRowEditPopover\n ref={(ins: ComponentPublicInstance) => {\n popInstance = ins;\n }}\n style={popStyle}\n show={showPop.value}\n onConfirm={onConfirm}\n onCancel={onCancel}\n ></iBizRowEditPopover>,\n ];\n };\n\n c.evt.on('onRowEditChange', event => {\n if (event.row.showRowEdit) {\n setTimeout(() => {\n showRowEditPop(event.row);\n }, 0);\n } else {\n editingRow.value = undefined;\n showPop.value = false;\n Object.assign(popStyle, {\n top: undefined,\n left: undefined,\n });\n }\n });\n\n return { renderPopover };\n}\n","import { ILoadingUtil } from '@ibiz-template/runtime';\nimport { ElLoading } from 'element-plus';\n\n/**\n * 全局加载动画工具\n *\n * @author chitanda\n * @date 2022-08-17 17:08:44\n * @export\n * @class LoadingUtil\n * @implements {ILoadingUtil}\n */\nexport class LoadingUtil implements ILoadingUtil {\n /**\n * 当前只在触发的全局加载次数\n *\n * @author chitanda\n * @date 2022-08-17 17:08:44\n * @protected\n */\n protected count = 0;\n\n /**\n * 当前在触发的重定向加载动画次数\n *\n * @author chitanda\n * @date 2022-10-08 17:10:02\n * @protected\n */\n protected countRedirect = 0;\n\n /**\n * element plus loading 实例\n *\n * @author chitanda\n * @date 2022-12-29 15:12:26\n * @protected\n */\n protected loading!: { close: () => void };\n\n /**\n * 显示全局加载动画\n *\n * @author chitanda\n * @date 2022-12-29 15:12:26\n */\n show(): void {\n if (this.count === 0) {\n this.loading = ElLoading.service({ lock: true, fullscreen: true });\n }\n this.count += 1;\n }\n\n /**\n * 隐藏全局加载动画\n *\n * @author chitanda\n * @date 2022-08-17 17:08:11\n */\n hide(): void {\n if (this.count > 0) {\n this.count -= 1;\n }\n if (this.count === 0) {\n if (this.loading) {\n this.loading.close();\n }\n }\n }\n\n /**\n * 显示顶部加载动画\n *\n * @author chitanda\n * @date 2022-10-08 16:10:01\n */\n showRedirect(): void {\n // if (this.countRedirect === 0) {\n // NProgress.start();\n // }\n // this.countRedirect += 1;\n }\n\n /**\n * 隐藏顶部加载动画\n *\n * @author chitanda\n * @date 2022-10-08 16:10:09\n */\n hideRedirect(): void {\n // if (this.countRedirect > 0) {\n // this.countRedirect -= 1;\n // }\n // if (this.countRedirect === 0) {\n // NProgress.done();\n // }\n }\n}\n","import { IMessageUtil } from '@ibiz-template/runtime';\nimport { ElMessage } from 'element-plus';\n\n/**\n * 消息通知\n *\n * @author chitanda\n * @date 2022-08-17 16:08:24\n * @export\n * @class MessageUtil\n * @implements {IMessageUtil}\n */\nexport class MessageUtil implements IMessageUtil {\n info(\n msg: string,\n duration?: number | undefined,\n closable?: boolean | undefined,\n ): void {\n ElMessage.info({\n message: msg,\n duration: duration ? duration * 1000 : duration,\n showClose: closable,\n });\n }\n\n success(\n msg: string,\n duration?: number | undefined,\n closable?: boolean | undefined,\n ): void {\n ElMessage.success({\n message: msg,\n duration: duration ? duration * 1000 : duration,\n showClose: closable,\n });\n }\n\n warning(\n msg: string,\n duration?: number | undefined,\n closable?: boolean | undefined,\n ): void {\n ElMessage.warning({\n message: msg,\n duration: duration ? duration * 1000 : duration,\n showClose: closable,\n });\n }\n\n error(\n msg: string,\n duration?: number | undefined,\n closable?: boolean | undefined,\n ): void {\n ElMessage.error({\n message: msg,\n duration: duration ? duration * 1000 : duration,\n showClose: closable,\n });\n }\n}\n","import { IModalUtil, ModalParams } from '@ibiz-template/runtime';\nimport { ElMessageBox } from 'element-plus';\n\n/**\n * 简洁确认操作框\n *\n * @author chitanda\n * @date 2022-08-17 16:08:52\n * @export\n * @class ModalUtil\n * @implements {IModalUtil}\n */\nexport class ModalUtil implements IModalUtil {\n async info(params: ModalParams): Promise<void> {\n await ElMessageBox.alert(params.desc, params.title, { type: 'info' });\n }\n\n async success(params: ModalParams): Promise<void> {\n await ElMessageBox.alert(params.desc, params.title, { type: 'success' });\n }\n\n async warning(params: ModalParams): Promise<void> {\n await ElMessageBox.alert(params.desc, params.title, { type: 'warning' });\n }\n\n async error(params: ModalParams): Promise<void> {\n await ElMessageBox.alert(params.desc, params.title, { type: 'error' });\n }\n\n async confirm(params: ModalParams): Promise<boolean> {\n return new Promise(resolve => {\n ElMessageBox.confirm(params.desc, params.title, params)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n }\n}\n","import { Namespace } from '@ibiz-template/core';\nimport { IConfirmUtil, ConfirmParams } from '@ibiz-template/runtime';\nimport { ElMessageBox } from 'element-plus';\n\n/**\n * 确认操作框\n *\n * @author chitanda\n * @date 2022-08-17 16:08:52\n * @export\n * @class ConfirmUtil\n * @implements {IConfirmUtil}\n */\nexport class ConfirmUtil implements IConfirmUtil {\n private ns = new Namespace('confirm');\n\n async info(params: ConfirmParams): Promise<boolean> {\n return new Promise(resolve => {\n ElMessageBox.confirm(params.desc, params.title, {\n customClass: `${this.ns.b()} ${this.ns.e('info')}`,\n type: 'info',\n cancelButtonClass: `${this.ns.b('cancel')} el-button--info`,\n confirmButtonClass: `${this.ns.b('ok')}`,\n ...params.options,\n })\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n }\n\n async success(params: ConfirmParams): Promise<boolean> {\n return new Promise(resolve => {\n ElMessageBox.confirm(params.desc, params.title, {\n customClass: `${this.ns.b()} ${this.ns.e('success')}`,\n cancelButtonClass: `${this.ns.b('cancel')} el-button--info`,\n confirmButtonClass: `${this.ns.b('ok')}`,\n type: 'success',\n ...params.options,\n })\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n }\n\n async warning(params: ConfirmParams): Promise<boolean> {\n return new Promise(resolve => {\n ElMessageBox.confirm(params.desc, params.title, {\n customClass: `${this.ns.b()} ${this.ns.e('warning')}`,\n cancelButtonClass: `${this.ns.b('cancel')} el-button--info`,\n confirmButtonClass: `${this.ns.b('ok')}`,\n type: 'warning',\n ...params.options,\n })\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n }\n\n async error(params: ConfirmParams): Promise<boolean> {\n return new Promise(resolve => {\n ElMessageBox.confirm(params.desc, params.title, {\n customClass: `${this.ns.b()} ${this.ns.e('error')}`,\n cancelButtonClass: `${this.ns.b('cancel')} el-button--info`,\n confirmButtonClass: `${this.ns.b('ok')}`,\n type: 'error',\n ...params.options,\n })\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n }\n}\n","import { INotificationUtil, NotificationParams } from '@ibiz-template/runtime';\nimport { ElNotification } from 'element-plus';\n\n/**\n * 在界面右上角显示可关闭的全局通知\n *\n * @author chitanda\n * @date 2022-08-17 16:08:26\n * @export\n * @class NotificationUtil\n * @implements {INotificationUtil}\n */\nexport class NotificationUtil implements INotificationUtil {\n /**\n * 通知调用栈\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-17 15:32:07\n */\n callStack: Array<() => void> = [];\n\n /**\n * 用于存储定时器返回的标识符\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-17 15:32:23\n */\n intervalId: NodeJS.Timeout | null = null;\n\n /**\n * 执行下一步\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-17 15:32:45\n */\n private executeNext(): void {\n const errorHandler = this.callStack.shift(); // 取出数组中的第一个元素\n if (errorHandler) {\n errorHandler(); // 执行处理错误的函数\n } else {\n // 如果调用栈为空,清除定时器\n clearInterval(this.intervalId!);\n this.intervalId = null;\n }\n }\n\n /**\n * 处理各类型提示\n * @param {NotificationParams} params\n * @param {string} type\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-17 16:09:40\n */\n private handleNotice(params: NotificationParams, noticeType: string): void {\n const duration = params.duration ? params.duration * 1000 : 4500;\n ElNotification({\n title: params.title,\n message: params.desc,\n type: noticeType,\n duration,\n } as NotificationParams);\n }\n\n /**\n * 设置定时器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-17 16:08:40\n */\n private setTimer() {\n // 如果之前没有设置过定时器,则设置定时器\n if (!this.intervalId) {\n this.intervalId = setInterval(() => {\n // 每隔50毫秒执行一次\n this.executeNext();\n }, 50);\n }\n }\n\n info(params: NotificationParams): void {\n this.callStack.push(() => this.handleNotice(params, 'info'));\n this.setTimer();\n }\n\n success(params: NotificationParams): void {\n this.callStack.push(() => this.handleNotice(params, 'success'));\n this.setTimer();\n }\n\n warning(params: NotificationParams): void {\n this.callStack.push(() => this.handleNotice(params, 'warning'));\n this.setTimer();\n }\n\n error(params: NotificationParams): void {\n this.callStack.push(() => this.handleNotice(params, 'error'));\n this.setTimer();\n }\n}\n","import { IModalData, IOpenViewUtil } from '@ibiz-template/runtime';\nimport {\n generateRoutePath,\n getDrawerPlacement,\n openViewDrawer,\n openViewModal,\n openViewPopover,\n routerCallback,\n} from '@ibiz-template/vue3-util';\nimport { Router } from 'vue-router';\n\n/**\n * 打开视图方式工具类\n *\n * @description 此实现类挂载在 ibiz.openViewUtil\n * @author chitanda\n * @date 2022-08-16 20:08:54\n * @export\n * @class OpenViewUtil\n * @implements {IOpenViewUtil}\n */\nexport class OpenViewUtil implements IOpenViewUtil {\n // eslint-disable-next-line no-useless-constructor, no-empty-function\n constructor(protected router: Router) {}\n\n push(path: string): Promise<IModalData> {\n return routerCallback.open(this.router, path);\n }\n\n async root(\n appViewId: string,\n context: IContext,\n params?: IParams | undefined,\n ): Promise<IModalData> {\n const appView = await ibiz.hub.config.view.get(appViewId!);\n const { path } = await generateRoutePath(\n appView,\n this.router.currentRoute.value,\n context,\n params,\n );\n return routerCallback.open(this.router, path);\n }\n\n /**\n * 模态打开视图\n *\n * @author lxm\n * @date 2022-09-12 01:09:06\n * @param {string} appViewId\n * @param {(IContext | undefined)} [context]\n * @param {(IParams | undefined)} [params]\n * @returns {*} {Promise<IModalData>}\n */\n async modal(\n appViewId: string,\n context: IContext,\n params?: IParams | undefined,\n ): Promise<IModalData> {\n const appView = await ibiz.hub.config.view.get(appViewId!);\n // 设置默认的modal参数\n const opts = {\n width: appView.width || '80%',\n height: appView.height || '80%',\n footerHide: true,\n };\n\n return openViewModal(\n {\n context,\n params,\n viewId: appView.id,\n },\n opts,\n );\n }\n\n async popover(\n appViewId: string,\n event: MouseEvent,\n context: IContext,\n params?: IParams | undefined,\n ): Promise<IModalData> {\n const appView = await ibiz.hub.config.view.get(appViewId!);\n return openViewPopover(\n event,\n {\n context,\n params,\n viewId: appView.id,\n },\n { autoClose: true, placement: 'bottom' },\n );\n }\n\n /**\n * 抽屉打开视图\n *\n * @author lxm\n * @date 2022-09-15 15:09:50\n * @param {string} appViewId\n * @param {(IContext | undefined)} [context]\n * @param {(IParams | undefined)} [params]\n * @returns {*} {Promise<IModalData>}\n */\n async drawer(\n appViewId: string,\n context: IContext,\n params?: IParams | undefined,\n ): Promise<IModalData> {\n const appView = await ibiz.hub.config.view.get(appViewId!);\n const placement = getDrawerPlacement(appView.openMode!);\n\n // 设置默认的modal参数\n const opts = {\n width: appView.width,\n height: appView.height,\n placement,\n };\n\n return openViewDrawer(\n {\n context,\n params,\n viewId: appView.id,\n },\n opts,\n );\n }\n\n async custom(\n appViewId: string,\n context: IContext,\n params?: IParams | undefined,\n ): Promise<IModalData> {\n const appView = await ibiz.hub.config.view.get(appViewId!);\n ibiz.log.warn('openUserCustom', appView, context, params);\n throw new Error();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n arrow,\n autoUpdate,\n computePosition,\n flip,\n offset,\n shift,\n} from '@floating-ui/dom';\nimport {\n IModalData,\n IPopoverOptions,\n Modal,\n ViewMode,\n} from '@ibiz-template/runtime';\nimport {\n OverlayPopoverContainer,\n useNamespace,\n useUIStore,\n} from '@ibiz-template/vue3-util';\nimport {\n computed,\n defineComponent,\n onUnmounted,\n PropType,\n ref,\n VNode,\n} from 'vue';\nimport './app-popover-component.scss';\n\n/**\n * 计算飘窗显示\n *\n * @author chitanda\n * @date 2022-11-08 21:11:18\n * @param {HTMLElement} element\n * @param {HTMLElement} el\n * @param {HTMLElement} arrEl\n * @param {IPopoverOptions} opts\n * @return {*} {Promise<void>}\n */\nasync function computePos(\n element: HTMLElement,\n el: HTMLElement,\n arrEl: HTMLElement,\n opts: IPopoverOptions,\n): Promise<void> {\n const middlewareArr = [offset(opts.offsetOpts || 6), flip(), shift()];\n if (!opts.noArrow) {\n middlewareArr.push(arrow({ element: arrEl! }));\n }\n const options = await computePosition(element, el, {\n placement: opts.placement,\n strategy: 'absolute',\n middleware: middlewareArr,\n });\n {\n const { x, y, placement, middlewareData } = options;\n const { style } = el;\n style.left = `${x}px`;\n style.top = `${y}px`;\n\n if (!opts.noArrow) {\n // 箭头位置\n const { x: arrowX, y: arrowY } = middlewareData.arrow!;\n\n const staticSide: string = (\n {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n } as IData\n )[placement.split('-')[0]];\n\n Object.assign(arrEl.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: '-4px',\n });\n }\n }\n}\n\nconst AppPopoverComponent = defineComponent({\n props: {\n opts: {\n type: Object as PropType<IPopoverOptions>,\n default: () => ({}),\n },\n },\n setup(props, ctx) {\n // 样式命名空间\n const ns = useNamespace('popover');\n // 是否显示\n const isShow = ref(false);\n // 是否悬浮在内容区,当悬浮在内容区时 autoClose 禁用\n const isHover = ref(false);\n // 跟 dom 元素\n const el = ref<HTMLDivElement>();\n // arrow dom 元素\n const arrEl = ref<HTMLDivElement>();\n // 是否可以自动关闭\n const autoClose = computed<boolean>(() => {\n return props.opts.autoClose === true && isHover.value === false;\n });\n\n const { zIndex } = useUIStore();\n const popoverZIndex = zIndex.increment();\n\n // 鼠标入飘窗内容区\n function onMouseenter(e: MouseEvent): void {\n e.stopPropagation();\n isHover.value = true;\n }\n\n // 鼠标出飘窗内容区\n function onMouseleave(e: MouseEvent): void {\n e.stopPropagation();\n isHover.value = false;\n }\n\n const modal = new Modal({\n mode: ViewMode.POPOVER,\n viewUsage: 2,\n dismiss: (data: IModalData) => {\n zIndex.decrement();\n ctx.emit('dismiss', data);\n },\n });\n\n let isCloseing = false;\n\n // 点击容器关闭飘窗\n async function dismiss(data?: IModalData) {\n isCloseing = true;\n await modal.dismiss(data);\n setTimeout(() => {\n isCloseing = false;\n }, 300);\n }\n\n // 组件销毁用于事件触发\n function destroy(e: Event): void {\n e.stopPropagation();\n if (autoClose.value && !isCloseing) {\n dismiss();\n }\n }\n\n function addEvents(): void {\n window.addEventListener('mousedown', destroy, { capture: true });\n window.addEventListener('blur', destroy, { capture: true });\n window.addEventListener('resize', destroy, { capture: true });\n }\n\n function removeEvents(): void {\n window.removeEventListener('mousedown', destroy, { capture: true });\n window.removeEventListener('blur', destroy, { capture: true });\n window.removeEventListener('resize', destroy, { capture: true });\n }\n\n addEvents();\n\n // 清除自动更新方法\n let cleanUpAutoUpdate = () => {};\n\n onUnmounted(() => {\n removeEvents();\n cleanUpAutoUpdate();\n });\n\n /**\n * 飘窗显示并计算位置\n *\n * @author chitanda\n * @date 2022-11-09 12:11:04\n * @param {HTMLElement} target\n * @return {*} {Promise<void>}\n */\n async function present(target: HTMLElement): Promise<void> {\n isShow.value = true;\n const updatePosition = () => {\n return computePos(target, el.value!, arrEl.value!, props.opts);\n };\n cleanUpAutoUpdate = autoUpdate(target, el.value!, updatePosition);\n }\n\n return {\n ns,\n el,\n arrEl,\n isShow,\n isHover,\n modal,\n popoverZIndex,\n present,\n dismiss,\n onMouseenter,\n onMouseleave,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.is('show', this.isShow),\n this.ns.is('hover', this.isHover),\n ]}\n ref='el'\n style={{ zIndex: this.popoverZIndex }}\n onMouseenter={this.onMouseenter}\n onMouseleave={this.onMouseleave}\n >\n {!this.opts.noArrow && (\n <div class={[this.ns.e('arrow')]} ref='arrEl'></div>\n )}\n {this.$slots.default?.(this.modal)}\n </div>\n );\n },\n});\n\n/**\n * 创建飘窗\n *\n * @author chitanda\n * @date 2022-12-29 15:12:59\n * @export\n * @param {() => VNode} render\n * @param {IPopoverOptions} [opts]\n * @return {*} {OverlayPopoverContainer}\n */\nexport function createPopover(\n render: () => VNode,\n opts?: IPopoverOptions,\n): OverlayPopoverContainer {\n return new OverlayPopoverContainer(AppPopoverComponent, render, opts);\n}\n","import { defineComponent, PropType, reactive, ref, VNode } from 'vue';\nimport {\n OverlayContainer,\n useNamespace,\n useUIStore,\n} from '@ibiz-template/vue3-util';\nimport { isNumber } from 'lodash-es';\nimport {\n IModalData,\n IModalOptions,\n IOverlayContainer,\n Modal,\n ViewMode,\n} from '@ibiz-template/runtime';\nimport './app-modal-component.scss';\n\nexport const AppModalComponent = defineComponent({\n props: {\n opts: {\n type: Object as PropType<IModalOptions>,\n default: () => ({}),\n },\n },\n setup(props, ctx) {\n const ns = useNamespace('modal');\n const isShow = ref(false);\n let data: IData;\n\n const { zIndex } = useUIStore();\n const modalZIndex = zIndex.increment();\n\n // 处理自定义样式\n const customStyle = reactive<IData>({});\n const { width, height } = props.opts;\n if (width) {\n customStyle.width = isNumber(width) ? `${width}px` : width;\n }\n if (height) {\n customStyle.height = isNumber(height) ? `${height}px` : height;\n }\n\n // 合并options\n const options = ref<IModalOptions>({ footerHide: true, modalClass: '' });\n if (props.opts) {\n Object.assign(options.value, props.opts);\n }\n\n const modal = new Modal({\n mode: ViewMode.MODAL,\n viewUsage: 2,\n dismiss: (_data: IData) => {\n zIndex.decrement();\n isShow.value = false;\n data = _data;\n },\n });\n\n // Modal自身的所有关闭方式最终都走这个\n const onBeforeClose = async (done: () => void) => {\n const isClose = await modal.dismiss();\n if (isClose) {\n done();\n }\n };\n\n // 外部函数式调用\n const dismiss = (_data?: IModalData) => {\n modal.dismiss(_data);\n };\n\n const present = () => {\n isShow.value = true;\n };\n // 完全关闭后调用销毁\n const onClosed = () => {\n ctx.emit('dismiss', data);\n };\n\n return {\n ns,\n isShow,\n options,\n modalZIndex,\n customStyle,\n modal,\n present,\n dismiss,\n onClosed,\n onBeforeClose,\n };\n },\n render() {\n return (\n <el-dialog\n model-value={this.isShow}\n align-center={true}\n class={[\n this.ns.b(),\n this.options.placement && this.ns.m(this.options.placement),\n this.options.modalClass,\n ]}\n style={this.customStyle}\n z-index={this.modalZIndex}\n onClosed={this.onClosed}\n before-close={this.onBeforeClose}\n >\n {this.$slots.default?.(this.modal)}\n </el-dialog>\n );\n },\n});\n\n/**\n * 创建模态框\n *\n * @author chitanda\n * @date 2022-12-29 15:12:50\n * @export\n * @param {() => VNode} render\n * @param {(IModalOptions | undefined)} [opts]\n * @return {*} {IOverlayContainer}\n */\nexport function createModal(\n render: () => VNode,\n opts?: IModalOptions | undefined,\n): IOverlayContainer {\n return new OverlayContainer(AppModalComponent, render, opts);\n}\n","import { defineComponent, PropType, ref, VNode } from 'vue';\nimport {\n OverlayContainer,\n useNamespace,\n useUIStore,\n} from '@ibiz-template/vue3-util';\nimport {\n IDrawerOptions,\n IModalData,\n IOverlayContainer,\n Modal,\n ViewMode,\n} from '@ibiz-template/runtime';\nimport { isNumber } from 'lodash-es';\nimport './app-drawer-component.scss';\n\nexport const AppDrawerComponent = defineComponent({\n props: {\n opts: {\n type: Object as PropType<IDrawerOptions>,\n default: () => ({}),\n },\n },\n setup(props, ctx) {\n const ns = useNamespace('drawer');\n\n const isShow = ref(false);\n\n let data: IData;\n\n const { zIndex } = useUIStore();\n const drawerZIndex = zIndex.increment();\n\n // 处理抽屉size\n const size = ref<number | string>('100%');\n const { width, height, placement } = props.opts;\n // 上下看高度\n if (placement === 'top' || placement === 'bottom') {\n if (isNumber(height)) {\n size.value = height;\n } else {\n size.value = '100%';\n }\n }\n // 左右看宽度\n if (placement === 'left' || placement === 'right') {\n if (isNumber(width)) {\n size.value = width;\n } else {\n size.value = 800;\n }\n }\n\n const modal = new Modal({\n mode: ViewMode.DRAWER,\n viewUsage: 2,\n dismiss: (_data: IModalData) => {\n zIndex.decrement();\n isShow.value = false;\n data = _data;\n },\n });\n\n // 自身的所有关闭方式最终都走这个\n const onBeforeClose = async (done: () => void) => {\n const isClose = await modal.dismiss();\n if (isClose) {\n done();\n }\n };\n\n // 外部函数式调用\n const dismiss = (_data?: IModalData) => {\n modal.dismiss(_data);\n };\n\n const present = () => {\n isShow.value = true;\n };\n\n // 完全关闭后调用销毁\n const onClosed = () => {\n ctx.emit('dismiss', data);\n };\n\n let direction = '';\n\n switch (props.opts.placement) {\n case 'left':\n direction = 'ltr';\n break;\n case 'top':\n direction = 'ttb';\n break;\n case 'bottom':\n direction = 'btt';\n break;\n default:\n direction = 'rtl';\n }\n\n return {\n ns,\n isShow,\n size,\n direction,\n drawerZIndex,\n modal,\n dismiss,\n present,\n onClosed,\n onBeforeClose,\n };\n },\n render() {\n return (\n <el-drawer\n model-value={this.isShow}\n lock-scroll\n size={this.size}\n class={this.ns.b()}\n z-index={this.drawerZIndex}\n direction={this.direction}\n before-close={this.onBeforeClose}\n onClosed={this.onClosed}\n >\n {this.$slots.default?.(this.modal)}\n </el-drawer>\n );\n },\n});\n\n/**\n * 创建抽屉\n *\n * @author chitanda\n * @date 2022-12-29 15:12:57\n * @export\n * @param {() => VNode} render\n * @param {(IDrawerOptions | undefined)} [opts]\n * @return {*} {IOverlayContainer}\n */\nexport function createDrawer(\n render: () => VNode,\n opts?: IDrawerOptions | undefined,\n): IOverlayContainer {\n return new OverlayContainer(AppDrawerComponent, render, opts);\n}\n","import {\n defineComponent,\n onMounted,\n PropType,\n reactive,\n ref,\n VNode,\n} from 'vue';\nimport {\n OverlayContainer,\n useNamespace,\n useUIStore,\n} from '@ibiz-template/vue3-util';\nimport {\n IModalData,\n IFloatWindowOptions,\n IOverlayContainer,\n Modal,\n ViewMode,\n} from '@ibiz-template/runtime';\nimport interact from 'interactjs';\nimport './app-float-window-component.scss';\n\nexport const AppFloatWindowComponent = defineComponent({\n props: {\n opts: {\n type: Object as PropType<IFloatWindowOptions>,\n default: () => ({}),\n },\n },\n setup(props, ctx) {\n const ns = useNamespace('float-window');\n\n const containerRef = ref<HTMLDivElement>();\n\n const isShow = ref(false);\n\n let data: IData;\n\n const { zIndex } = useUIStore();\n const modalZIndex = zIndex.increment();\n\n // 合并options\n const options = ref<IFloatWindowOptions>({\n width: 500,\n height: 600,\n x: 100,\n y: 100,\n });\n\n if (props.opts) {\n Object.assign(options.value, props.opts);\n }\n\n const state = reactive({\n x: window.innerWidth - 600,\n y: 100,\n width: 500,\n height: 600,\n minWidth: 300,\n minHeight: 300,\n });\n\n const calcStyle = () => {\n return {\n left: `${state.x}px`,\n top: `${state.y}px`,\n height: `${state.height}px`,\n width: `${state.width}px`,\n zIndex: modalZIndex,\n };\n };\n\n const setStyle = () => {\n Object.assign(containerRef.value!, calcStyle());\n };\n\n onMounted(() => {\n const dragHandles = containerRef.value!.getElementsByClassName(\n ns.b('drag-handle'),\n );\n const dragHandle = (\n dragHandles[0] ? dragHandles[0] : containerRef.value!\n ) as HTMLDivElement;\n // 注册窗口拖拽\n interact(dragHandle).draggable({\n modifiers: [\n interact.modifiers.restrictRect({\n restriction: document.body,\n endOnly: true,\n }),\n ],\n cursorChecker: () => {\n return 'move';\n },\n listeners: {\n move: event => {\n // 计算偏移量保持位置\n state.x += event.dx;\n state.y += event.dy;\n setStyle();\n },\n },\n });\n // 注册窗口大小变更\n interact(containerRef.value!).resizable({\n // 可拖拽的边缘\n edges: {\n top: true,\n right: true,\n bottom: true,\n left: true,\n },\n margin: 6,\n modifiers: [\n // 保持在父对象内部\n interact.modifiers.restrictEdges({ outer: document.body }),\n // 缩放最小宽度\n interact.modifiers.restrictSize({\n min: { width: state.minWidth, height: state.minHeight },\n }),\n ],\n inertia: true,\n listeners: {\n move: event => {\n state.x += event.deltaRect.left;\n state.y += event.deltaRect.top;\n // 更新宽高\n state.width = event.rect.width;\n state.height = event.rect.height;\n setStyle();\n },\n },\n });\n });\n\n const modal = new Modal({\n mode: ViewMode.MODAL,\n viewUsage: 2,\n dismiss: (_data: IData) => {\n zIndex.decrement();\n isShow.value = false;\n data = _data;\n },\n });\n\n // 外部函数式调用\n const dismiss = (_data?: IModalData) => {\n modal.dismiss(_data);\n };\n\n const present = () => {\n isShow.value = true;\n };\n\n // 完全关闭后调用销毁\n const onClosed = () => {\n ctx.emit('dismiss', data);\n };\n\n return {\n ns,\n isShow,\n options,\n modalZIndex,\n modal,\n calcStyle,\n present,\n dismiss,\n onClosed,\n containerRef,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.is('show', this.isShow),\n this.options.windowClass,\n ]}\n style={this.calcStyle()}\n z-index={this.modalZIndex}\n ref='containerRef'\n >\n <div class={this.ns.b('header')}>\n <div class={this.ns.be('header', 'caption')}></div>\n <div class={this.ns.b('actions')}>\n <i\n class={this.ns.b('action-item')}\n onClick={() => {\n this.dismiss();\n }}\n ></i>\n </div>\n </div>\n <div class={this.ns.b('content')}>\n {this.$slots.default?.(this.modal)}+\n </div>\n </div>\n );\n },\n});\n\n/**\n * 创建全局悬浮窗口\n *\n * @author chitanda\n * @date 2023-10-11 21:10:55\n * @export\n * @param {() => VNode} render\n * @param {IFloatWindowOptions} [opts]\n * @return {*} {IOverlayContainer}\n */\nexport function createFloatWindow(\n render: () => VNode,\n opts?: IFloatWindowOptions,\n): IOverlayContainer {\n return new OverlayContainer(AppFloatWindowComponent, render, opts);\n}\n","import {\n IOverlayController,\n IDrawerOptions,\n IPopoverOptions,\n IModalOptions,\n IOverlayContainer,\n IOverlayPopoverContainer,\n IFloatWindowOptions,\n} from '@ibiz-template/runtime';\nimport { isFunction, isString } from 'lodash-es';\nimport { h, resolveComponent, ConcreteComponent } from 'vue';\nimport { createPopover } from '../app-popover/app-popover-component';\nimport { createModal } from '../app-modal/app-modal-component';\nimport { createDrawer } from '../app-drawer/app-drawer-component';\nimport { createFloatWindow } from '../app-float-window/app-float-window-component';\n\nfunction resolveComponentOrStr(component: unknown): string | ConcreteComponent {\n return isString(component)\n ? resolveComponent(component)\n : (component as ConcreteComponent);\n}\n\n/**\n * 用不同呈现方式绘制组件的通用工具类\n *\n * @author lxm\n * @date 2022-11-08 16:11:09\n * @export\n * @class OverlayController\n * @implements {IOverlayController}\n */\nexport class OverlayController implements IOverlayController {\n popover<T = void>(\n element: HTMLElement,\n component: unknown,\n props?: IParams,\n opts?: IPopoverOptions,\n ): Promise<T> {\n const popover = this.createPopover(component, props, opts);\n popover.present(element);\n return popover.onWillDismiss();\n }\n\n createPopover(\n component: unknown,\n props?: IParams,\n opts?: IPopoverOptions,\n ): IOverlayPopoverContainer {\n return createPopover(\n isFunction(component)\n ? component\n : () => h(resolveComponentOrStr(component), { ...props }),\n opts,\n );\n }\n\n drawer<T = void>(\n component: unknown,\n props?: IParams,\n opts?: IDrawerOptions,\n ): Promise<T> {\n const drawer = this.createDrawer(component, props, opts);\n drawer.present();\n return drawer.onWillDismiss();\n }\n\n createDrawer(\n component: unknown,\n props?: IParams,\n opts?: IDrawerOptions,\n ): IOverlayContainer {\n return createDrawer(\n isFunction(component)\n ? component\n : () => h(resolveComponentOrStr(component), { ...props }),\n opts,\n );\n }\n\n async modal<T = void>(\n component: unknown,\n props?: IParams,\n opts?: IModalOptions,\n ): Promise<T> {\n const modal = this.createModal(component, props, opts);\n modal.present();\n return modal.onWillDismiss();\n }\n\n createModal(\n component: unknown,\n props?: IParams,\n opts?: IModalOptions,\n ): IOverlayContainer {\n return createModal(\n isFunction(component)\n ? component\n : () => h(resolveComponentOrStr(component), { ...props }),\n opts,\n );\n }\n\n async floatWindow<T = void>(\n component: unknown,\n props?: IParams,\n opts?: IFloatWindowOptions,\n ): Promise<T> {\n const floatWindow = this.createFloatWindow(component, props, opts);\n floatWindow.present();\n return floatWindow.onWillDismiss();\n }\n\n createFloatWindow(\n component: unknown,\n props?: IParams,\n opts?: IFloatWindowOptions,\n ): IOverlayContainer {\n return createFloatWindow(\n isFunction(component)\n ? component\n : () => h(resolveComponentOrStr(component), { ...props }),\n opts,\n );\n }\n}\n","import { IMDControlController } from '@ibiz-template/runtime';\n\n/**\n * 使用分页组件\n *\n * @author lxm\n * @date 2022-09-06 17:09:09\n * @export\n * @param {GridController} c\n * @returns {*}\n */\nexport function usePagination(c: IMDControlController): {\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n onPageRefresh: () => void;\n} {\n function onPageChange(page: number): void {\n if (!page || page === c.state.curPage) {\n return;\n }\n c.state.curPage = page;\n c.load();\n }\n\n function onPageSizeChange(size: number): void {\n if (!size || size === c.state.size) {\n return;\n }\n c.state.size = size;\n\n // 当page为第一页的时候切换size不会触发pageChange,需要自己触发加载\n if (c.state.curPage === 1) {\n c.load();\n }\n }\n\n function onPageRefresh(): void {\n c.load();\n }\n return { onPageChange, onPageSizeChange, onPageRefresh };\n}\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport {\n defineComponent,\n h,\n PropType,\n resolveComponent,\n VNode,\n VNodeArrayChildren,\n} from 'vue';\nimport { IDEGrid, IDEGridColumn, IDEGridGroupColumn } from '@ibiz/model-core';\nimport { GridController, IControlProvider } from '@ibiz-template/runtime';\nimport {\n IGridProps,\n useAppGridBase,\n useITableEvent,\n} from './grid-control.util';\nimport './grid.scss';\nimport { useRowEditPopover } from '../row-edit-popover/use-row-edit-popover';\nimport { usePagination } from '../../../util';\n\n// 绘制除分组列之外的表格列\nexport function renderColumn(\n c: GridController,\n model: IDEGridColumn,\n renderColumns: IDEGridColumn[],\n index: number,\n): VNode | null {\n if (model.hideDefault) {\n return null;\n }\n const { codeName: columnName, width } = model;\n const columnC = c.columns[columnName!];\n const columnState = c.state.columnStates.find(\n item => item.key === columnName,\n )!;\n\n // 如果没有配置自适应列,则最后一列变为自适应列\n const widthFlexGrow =\n columnC.isAdaptiveColumn ||\n (!c.hasAdaptiveColumn && index === renderColumns.length - 1);\n\n const widthName = widthFlexGrow ? 'min-width' : 'width';\n // 表格列自定义\n return (\n <el-table-column\n label={model.caption}\n prop={columnName}\n {...{ [widthName]: width }}\n fixed={columnState.fixed}\n sortable={model.enableSort ? 'custom' : false}\n align={model.align?.toLowerCase() || 'center'}\n >\n {{\n default: ({ row }: IData): VNode | null => {\n let elRow = row; // element表格数据\n if (row.isGroupData) {\n // 有第一条数据时,分组那一行绘制第一条数据\n elRow = row.first;\n }\n\n const rowState = c.findRowState(elRow);\n if (rowState) {\n const comp = resolveComponent(c.providers[columnName!].component);\n return h(comp, {\n controller: columnC,\n row: rowState,\n key: elRow.tempsrfkey + columnName,\n });\n }\n return null;\n },\n }}\n </el-table-column>\n );\n}\n\n// 绘制表格列\nexport function renderChildColumn(\n c: GridController,\n model: IDEGridColumn,\n renderColumns: IDEGridColumn[],\n index: number,\n): VNode | null {\n if (model.columnType === 'GROUPGRIDCOLUMN') {\n const childColumns =\n (model as IDEGridGroupColumn).degridColumns?.filter(\n item => !item.hideDefault,\n ) || [];\n const { width } = model;\n const align = model.align?.toLowerCase() || 'center';\n return (\n <el-table-column\n prop={model.codeName}\n label={model.caption}\n min-width={width}\n align={align}\n >\n {{\n default: (): VNodeArrayChildren => {\n return childColumns.map((column, index2) => {\n return renderChildColumn(c, column, renderColumns, index2);\n });\n },\n }}\n </el-table-column>\n );\n }\n return renderColumn(c, model, renderColumns, index);\n}\n\nexport const GridControl = defineComponent({\n name: 'IBizGridControl',\n props: {\n modelData: { type: Object as PropType<IDEGrid>, required: true },\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 /**\n * 部件行数据默认激活模式\n * - 0 不激活\n * - 1 单击激活\n * - 2 双击激活(默认值)\n *\n * @type {(number | 0 | 1 | 2)}\n */\n mdctrlActiveMode: { type: Number, default: undefined },\n singleSelect: { type: Boolean, default: undefined },\n rowEditOpen: { type: Boolean, default: undefined },\n isSimple: { type: Boolean, required: false },\n data: { type: Array<IData>, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup(props) {\n const c = useControlController((...args) => new GridController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const {\n tableRef,\n onRowClick,\n onDbRowClick,\n onSelectionChange,\n onSortChange,\n handleRowClassName,\n handleHeaderCellClassName,\n } = useITableEvent(c);\n const { onPageChange, onPageRefresh, onPageSizeChange } = usePagination(c);\n\n const renderNoData = (): VNode | false => {\n // 未加载不显示无数据\n const { isLoaded } = c.state;\n return (\n isLoaded && (\n <iBizNoData\n text={c.model.emptyText}\n emptyTextLanguageRes={c.model.emptyTextLanguageRes}\n ></iBizNoData>\n )\n );\n };\n const { tableData, renderColumns, defaultSort, summaryMethod } =\n useAppGridBase(c, props as IGridProps);\n\n const { renderPopover } = useRowEditPopover(tableRef, c);\n\n return {\n c,\n ns,\n tableRef,\n tableData,\n renderColumns,\n onDbRowClick,\n onRowClick,\n onSelectionChange,\n onSortChange,\n onPageChange,\n onPageSizeChange,\n onPageRefresh,\n handleRowClassName,\n handleHeaderCellClassName,\n renderNoData,\n summaryMethod,\n renderPopover,\n defaultSort,\n };\n },\n render() {\n if (!this.c.state.isCreated) {\n return;\n }\n const state = this.c.state;\n const { hideHeader, enablePagingBar } = this.c.model;\n return (\n <iBizControlBase\n class={[\n this.ns.is('show-header', !hideHeader),\n this.ns.is('enable-page', enablePagingBar),\n this.ns.is('enable-group', this.c.model.enableGroup),\n ]}\n controller={this.c}\n >\n {\n <el-table\n ref={'tableRef'}\n class={this.ns.e('table')}\n default-sort={this.defaultSort}\n border\n show-header={!hideHeader}\n show-summary={this.c.enableAgg}\n summary-method={this.summaryMethod}\n highlight-current-row={state.singleSelect}\n row-class-name={this.handleRowClassName}\n header-cell-class-name={this.handleHeaderCellClassName}\n row-key={'tempsrfkey'}\n data={this.tableData}\n onRowClick={this.onRowClick}\n onRowDblclick={this.onDbRowClick}\n onSelectionChange={this.onSelectionChange}\n onSortChange={this.onSortChange}\n tooltip-effect={'light'}\n >\n {{\n empty: this.renderNoData,\n default: (): VNodeArrayChildren => {\n return [\n !state.singleSelect && (\n <el-table-column\n class-name={this.ns.e('selection')}\n type='selection'\n width='55'\n ></el-table-column>\n ),\n this.renderColumns.map((model, index) => {\n return renderChildColumn(\n this.c,\n model,\n this.renderColumns,\n index,\n );\n }),\n ];\n },\n append: () => {\n return this.renderPopover();\n },\n }}\n </el-table>\n }\n {enablePagingBar && (\n <iBizPagination\n total={state.total}\n curPage={state.curPage}\n size={state.size}\n onChange={this.onPageChange}\n onPageSizeChange={this.onPageSizeChange}\n onPageRefresh={this.onPageRefresh}\n ></iBizPagination>\n )}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 表格适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class GridProvider\n * @implements {IControlProvider}\n */\nexport class GridProvider implements IControlProvider {\n component: string = 'IBizGridControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport {\n IBizGridFieldColumn,\n IBizGridFieldEditColumn,\n IBizGridUAColumn,\n IBizGridGroupColumn,\n} from '../grid-column';\nimport { IBizRowEditPopover } from '../row-edit-popover/row-edit-popover';\nimport { GridControl } from './grid';\nimport { GridProvider } from './grid.provider';\n\nexport * from './grid-control.util';\n\nexport const IBizGridControl = withInstall(GridControl, (v: App) => {\n v.component(GridControl.name, GridControl);\n v.component(IBizRowEditPopover.name, IBizRowEditPopover);\n v.use(IBizGridFieldColumn);\n v.use(IBizGridUAColumn);\n v.use(IBizGridFieldEditColumn);\n v.use(IBizGridGroupColumn);\n registerControlProvider(ControlType.GRID, () => new GridProvider());\n});\n\nexport default IBizGridControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, computed, VNode } from 'vue';\nimport { IDEList, ILayoutPanel } from '@ibiz/model-core';\nimport { isNil } from 'lodash-es';\nimport {\n IControlProvider,\n IMDControlGroupState,\n ListController,\n} from '@ibiz-template/runtime';\nimport './list.scss';\nimport { usePagination } from '../../util';\n\nexport const ListControl = defineComponent({\n name: 'IBizListControl',\n props: {\n modelData: { type: Object as PropType<IDEList>, required: true },\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 /**\n * 部件行数据默认激活模式\n * - 0 不激活\n * - 1 单击激活\n * - 2 双击激活(默认值)\n *\n * @type {(number | 0 | 1 | 2)}\n */\n mdctrlActiveMode: { type: Number, default: undefined },\n\n /**\n * 是否为单选\n * - true 单选\n * - false 多选\n *\n * @type {(Boolean)}\n */\n singleSelect: { type: Boolean, default: undefined },\n isSimple: { type: Boolean, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup(props) {\n const c = useControlController((...args) => new ListController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const { onPageChange, onPageRefresh, onPageSizeChange } = usePagination(c);\n\n // 是否可以加载更多\n const isLodeMoreDisabled = computed(() => {\n if (c.model.enablePagingBar === true) {\n return true;\n }\n return (\n c.state.items.length >= c.state.total ||\n c.state.isLoading ||\n c.state.total <= c.state.size\n );\n });\n\n // 绘制项布局面板\n const renderPanelItem = (item: IData, modelData: ILayoutPanel): VNode => {\n const { context, params } = c;\n // 是否选中数据\n const findIndex = c.state.selectedData.findIndex(data => {\n return data.srfkey === item.srfkey;\n });\n const itemClass = [ns.b('item'), ns.is('active', findIndex !== -1)];\n return (\n <iBizControlShell\n class={itemClass}\n data={item}\n modelData={modelData}\n context={context}\n params={params}\n onClick={(): Promise<void> => c.onRowClick(item)}\n onDblclick={(): Promise<void> => c.onDbRowClick(item)}\n ></iBizControlShell>\n );\n };\n\n // 绘制默认列表项\n const renderDefaultItem = (item: IData): VNode => {\n // 是否选中数据\n const findIndex = c.state.selectedData.findIndex(data => {\n return data.srfkey === item.srfkey;\n });\n const itemClass = [ns.b('item'), ns.is('active', findIndex !== -1)];\n return (\n <div\n class={itemClass}\n key={item.srfkey}\n onClick={(): Promise<void> => c.onRowClick(item)}\n onDblclick={(): Promise<void> => c.onDbRowClick(item)}\n >\n {`${isNil(item.srfmajortext) ? '' : item.srfmajortext}`}\n </div>\n );\n };\n\n // 绘制分组\n const renderGroup = (group: IMDControlGroupState): VNode => {\n const panel = props.modelData.itemLayoutPanel;\n return (\n <el-collapse-item\n title={group.caption}\n class={ns.be('group-content', 'item')}\n >\n {group.children.length > 0 ? (\n group.children.map(item => {\n return panel\n ? renderPanelItem(item, panel)\n : renderDefaultItem(item);\n })\n ) : (\n <div class={ns.bem('group-content', 'item', 'empty')}>无数据</div>\n )}\n </el-collapse-item>\n );\n };\n\n // 绘制卡片内容\n const renderListContent = (): VNode => {\n if (c.model.enableGroup && !c.state.isSimple) {\n return (\n <el-collapse class={[ns.b('group-content'), ns.b('content')]}>\n {c.state.groups?.map(group => {\n return (\n <div class={[ns.b('scroll-item')]}>{renderGroup(group)}</div>\n );\n })}\n </el-collapse>\n );\n }\n const panel = props.modelData.itemLayoutPanel;\n return (\n <div\n class={[ns.b('scroll'), ns.b('content')]}\n v-infinite-scroll={(): Promise<void> => c.loadMore()}\n infinite-scroll-distance={10}\n infinite-scroll-disabled={isLodeMoreDisabled.value}\n >\n {c.state.items.map((item: IData) => {\n return (\n <div class={[ns.b('scroll-item')]}>\n {panel ? renderPanelItem(item, panel) : renderDefaultItem(item)}\n </div>\n );\n })}\n </div>\n );\n };\n\n // 绘制项行为\n const renderQuickToolBar = (): VNode | undefined => {\n const ctrlModel = c.model.controls?.find(item => {\n return item.name === `${c.model.name!}_quicktoolbar`;\n });\n if (!ctrlModel) {\n return;\n }\n return (\n <iBizToolbarControl\n modelData={ctrlModel}\n context={c.context}\n params={c.params}\n ></iBizToolbarControl>\n );\n };\n\n const renderBatchToolBar = (): VNode | undefined => {\n const ctrlModel = c.model.controls?.find(item => {\n return item.name === `${c.model.name!}_batchtoolbar`;\n });\n if (!ctrlModel) {\n return;\n }\n return (\n <div class={ns.b('batchtoolbar')}>\n <iBizToolbarControl\n modelData={ctrlModel}\n context={c.context}\n params={c.params}\n ></iBizToolbarControl>\n </div>\n );\n };\n\n const renderNoData = (): VNode | undefined => {\n // 未加载不显示无数据\n const { isLoaded } = c.state;\n if (!isLoaded) {\n return;\n }\n return (\n isLoaded && (\n <iBizNoData\n class={ns.b('content')}\n text={c.model.emptyText}\n emptyTextLanguageRes={c.model.emptyTextLanguageRes}\n >\n {renderQuickToolBar()}\n </iBizNoData>\n )\n );\n };\n\n return {\n c,\n ns,\n renderListContent,\n renderNoData,\n renderBatchToolBar,\n onPageChange,\n onPageRefresh,\n onPageSizeChange,\n };\n },\n render() {\n const { enablePagingBar } = this.c.model;\n\n let content = null;\n if (this.c.state.isCreated) {\n content = [\n this.c.state.items.length > 0\n ? this.renderListContent()\n : this.renderNoData(),\n this.renderBatchToolBar(),\n enablePagingBar ? (\n <iBizPagination\n class={this.ns.e('pagination')}\n total={this.c.state.total}\n curPage={this.c.state.curPage}\n size={this.c.state.size}\n onChange={this.onPageChange}\n onPageSizeChange={this.onPageSizeChange}\n onPageRefresh={this.onPageRefresh}\n ></iBizPagination>\n ) : null,\n ];\n }\n\n return (\n <iBizControlBase\n class={[this.ns.is('enable-page', !!enablePagingBar)]}\n controller={this.c}\n >\n {content}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 列表适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ListProvider\n * @implements {IControlProvider}\n */\nexport class ListProvider implements IControlProvider {\n component: string = 'IBizListControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ListControl } from './list';\nimport { ListProvider } from './list.provider';\n\nexport const IBizListControl = withInstall(ListControl, function (v: App) {\n v.component(ListControl.name, ListControl);\n registerControlProvider(ControlType.LIST, () => new ListProvider());\n});\n\nexport default IBizListControl;\n","import { IControlProvider, SearchFormController } from '@ibiz-template/runtime';\nimport { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { IDESearchForm } from '@ibiz/model-core';\nimport { defineComponent, PropType, reactive } from 'vue';\nimport './search-form.scss';\n\nexport const SearchFormControl = defineComponent({\n name: 'IBizSearchFormControl',\n props: {\n modelData: {\n type: Object as PropType<IDESearchForm>,\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 loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new SearchFormController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n c.evt.on('onCreated', () => {\n // 表单成员state响应式\n const keys = Object.keys(c.details);\n keys.forEach(key => {\n const detail = c.details[key];\n detail.state = reactive(detail.state);\n });\n });\n\n return { c, ns };\n },\n\n render() {\n const { state } = this.c;\n if (!state.isCreated) {\n return;\n }\n return (\n <iBizFormControl\n class={[this.ns.b()]}\n controller={this.c}\n onKeyup={(e: KeyboardEvent): Promise<void> => this.c.onKeyUp(e)}\n >\n {{\n ...this.$slots,\n }}\n </iBizFormControl>\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 SearchFormProvider\n * @implements {IControlProvider}\n */\nexport class SearchFormProvider implements IControlProvider {\n component: string = 'IBizSearchFormControl';\n}\n","import { ControlType, registerControlProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { SearchFormControl } from './search-form';\nimport { SearchFormProvider } from './search-form.provider';\n\nexport const IBizSearchFormControl = withInstall(\n SearchFormControl,\n function (v: App) {\n v.component(SearchFormControl.name, SearchFormControl);\n registerControlProvider(\n ControlType.SEARCHFORM,\n () => new SearchFormProvider(),\n );\n },\n);\n\nexport default IBizSearchFormControl;\n","import { FormGroupPanelController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IDEFormGroupPanel, IUIActionGroupDetail } from '@ibiz/model-core';\nimport { computed, defineComponent, PropType, ref, VNode } from 'vue';\nimport './form-group-panel.scss';\n\nexport const FormGroupPanel = defineComponent({\n name: 'IBizFormGroupPanel',\n props: {\n modelData: {\n type: Object as PropType<IDEFormGroupPanel>,\n required: true,\n },\n controller: {\n type: FormGroupPanelController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-group');\n const isCollapse = ref(!props.controller.defaultExpansion);\n\n const changeCollapse = (): void => {\n if (!props.controller.disableClose) {\n isCollapse.value = !isCollapse.value;\n }\n };\n\n // 点击工具栏处理\n const onActionClick = async (\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ): Promise<void> => {\n await props.controller.onActionClick(detail, event);\n };\n\n const captionText = computed(() => {\n const { captionItemName, caption, capLanguageRes } = props.modelData;\n if (captionItemName) {\n return props.controller.data[captionItemName];\n }\n let text = caption;\n if (capLanguageRes) {\n text = ibiz.i18n.t(capLanguageRes.lanResTag!, caption);\n }\n return text;\n });\n\n return { ns, isCollapse, captionText, changeCollapse, onActionClick };\n },\n render() {\n const { state } = this.controller;\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n const content = (\n <iBizRow\n class={this.ns.be('content', 'row')}\n layout={this.modelData.layout}\n >\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 const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n if (this.modelData.showCaption === true) {\n classArr.push(this.ns.m('show-header'));\n classArr.push(this.ns.b('collapse'));\n classArr.push(this.ns.is('collapse', this.isCollapse));\n if (this.controller.disableClose) {\n classArr.push(this.ns.bm('collapse', 'disable-close'));\n }\n if (this.modelData.showMoreMode === 2) {\n classArr.push(this.ns.m('show-more'));\n }\n }\n\n // 头部绘制\n let header: unknown = null;\n if (this.modelData.showCaption) {\n header = (\n <div class={[this.ns.b('header')]} onClick={this.changeCollapse}>\n <div class={[this.ns.be('header', 'left')]}>\n <div class={[this.ns.e('caption'), ...this.controller.labelClass]}>\n {this.captionText}\n </div>\n </div>\n <div class={[this.ns.be('header', 'right')]}>\n {this.modelData.uiactionGroup && (\n <iBizActionToolbar\n class={this.ns.e('toolbar')}\n action-details={\n this.modelData.uiactionGroup.uiactionGroupDetails\n }\n actions-state={state.actionGroupState}\n onActionClick={this.onActionClick}\n caption={this.modelData.uiactionGroup.name}\n mode={\n this.modelData.actionGroupExtractMode === 'ITEMS'\n ? 'dropdown'\n : 'buttons'\n }\n ></iBizActionToolbar>\n )}\n {this.modelData.titleBarCloseMode !== undefined &&\n this.modelData.titleBarCloseMode !== 0 &&\n (this.isCollapse ? (\n <ion-icon name='caret-forward-sharp' />\n ) : (\n <ion-icon name='caret-down-sharp' />\n ))}\n </div>\n </div>\n );\n }\n\n // 底部绘制\n let footer: unknown = null;\n if (this.modelData.showMoreMode === 2) {\n footer = (\n <div class={[this.ns.b('footer')]}>\n <div\n class={this.ns.be('footer', 'show-more-button')}\n onClick={(): void => {\n state.isShowMore = !state.isShowMore;\n }}\n >\n {!state.isShowMore ? '显示更多' : '收起'}\n </div>\n </div>\n );\n }\n\n return (\n <div\n class={classArr}\n onClick={(event: MouseEvent) => this.controller.onClick(event)}\n >\n {header}\n <div class={[this.ns.b('content')]}>{content}</div>\n {footer}\n </div>\n );\n },\n});\nexport default FormGroupPanel;\n","import {\n FormController,\n FormGroupPanelController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormGroupPanel } from '@ibiz/model-core';\n\n/**\n * 表单分组面板适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormGroupPanelProvider\n * @implements {EditorProvider}\n */\nexport class FormGroupPanelProvider implements IFormDetailProvider {\n component: string = 'IBizFormGroupPanel';\n\n async createController(\n detailModel: IDEFormGroupPanel,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormGroupPanelController> {\n const c = new FormGroupPanelController(detailModel, form, parent);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormGroupPanel from './form-group-panel';\nimport { FormGroupPanelProvider } from './form-group-panel.provider';\n\nexport const IBizFormGroupPanel = withInstall(\n FormGroupPanel,\n function (v: App) {\n v.component(FormGroupPanel.name, FormGroupPanel);\n // 表单分组\n registerFormDetailProvider(\n 'GROUPPANEL',\n () => new FormGroupPanelProvider(),\n );\n },\n);\n\nexport default IBizFormGroupPanel;\n","import { defineComponent, h, PropType, resolveComponent } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './form-item.scss';\nimport { IDEFormItem } from '@ibiz/model-core';\nimport { FormItemController } from '@ibiz-template/runtime';\n\nexport const FormItem = defineComponent({\n name: 'IBizFormItem',\n props: {\n modelData: {\n type: Object as PropType<IDEFormItem>,\n required: true,\n },\n controller: {\n type: FormItemController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-item');\n const c = props.controller;\n const onValueChange = (val: unknown, name?: string): void => {\n props.controller.setDataValue(val, name);\n };\n\n return { ns, c, onValueChange };\n },\n render() {\n if (!this.c.state.visible) {\n return null;\n }\n\n // 编辑器内容\n let editor = null;\n const editorProps = {\n style: this.controller.editor!.style,\n value: this.controller.value,\n data: this.controller.data,\n controller: this.controller.editor,\n disabled: this.controller.state.disabled,\n readonly: this.controller.model.editor!.readOnly,\n onChange: this.onValueChange,\n onFocus: (event: MouseEvent) => this.c.onFocus(event),\n onBlur: (event: MouseEvent) => this.c.onBlur(event),\n onEnter: (event: MouseEvent) => this.controller.onEnter(event),\n };\n if (this.c.form.state.isLoaded) {\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 <iBizFormItemContainer\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n ]}\n required={this.c.state.required}\n error={this.c.state.error}\n label={this.modelData.caption}\n labelClass={this.controller.labelClass}\n label-pos={this.c.model.labelPos}\n label-width={this.c.model.labelWidth}\n onClick={(event: MouseEvent) => this.c.onClick(event)}\n >\n {editor}\n </iBizFormItemContainer>\n );\n },\n});\nexport default FormItem;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent } from 'vue';\nimport './form-item-container.scss';\n\nexport const IBizFormItemContainer = defineComponent({\n name: 'IBizFormItemContainer',\n props: {\n required: {\n type: Boolean,\n required: true,\n },\n error: {\n type: String,\n },\n label: {\n type: String,\n },\n labelClass: {\n type: Array<string>,\n },\n labelPos: {\n type: String,\n required: true,\n },\n labelWidth: {\n type: Number,\n default: 130,\n },\n },\n setup(props) {\n const ns = useNamespace('form-item-container');\n\n const cssVars = computed(() => {\n if (props.labelWidth !== 130) {\n return ns.cssVarBlock({ 'label-width': `${props.labelWidth}px` });\n }\n return {};\n });\n return { ns, cssVars };\n },\n render() {\n // label内容\n const label = (\n <div\n class={[this.ns.e('label'), ...(this.labelClass || [])]}\n title={this.label}\n >\n {this.label}\n </div>\n );\n\n // 内容区,包含编辑器和错误消息\n const content = (\n <div\n class={[\n this.ns.e('content'),\n this.ns.em('content', `label-${this.labelPos.toLowerCase()}`),\n ]}\n >\n <div class={[this.ns.e('editor')]}>{this.$slots.default?.()}</div>\n {this.error ? (\n <div title={this.error} class={[this.ns.e('error')]}>\n {this.error}\n </div>\n ) : null}\n </div>\n );\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.labelPos.toLowerCase()),\n this.ns.is('required', this.required),\n this.ns.is('error', !!this.error),\n ]}\n style={this.cssVars}\n >\n {this.labelPos === 'LEFT' || this.labelPos === 'TOP' ? label : null}\n {content}\n {this.labelPos === 'RIGHT' || this.labelPos === 'BOTTOM' ? label : null}\n </div>\n );\n },\n});\n","import {\n FormController,\n FormItemController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormDetail } from '@ibiz/model-core';\n\n/**\n * 表单项适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormItemProvider\n * @implements {EditorProvider}\n */\nexport class FormItemProvider implements IFormDetailProvider {\n component: string = 'IBizFormItem';\n\n async createController(\n detailModel: IDEFormDetail,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormItemController> {\n const c = new FormItemController(detailModel, form, parent);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormItem from './form-item';\nimport { IBizFormItemContainer } from './form-item-container/form-item-container';\nimport { FormItemProvider } from './form-item.provider';\n\nexport * from './form-item-container/form-item-container';\n\nexport const IBizFormItem = withInstall(FormItem, function (v: App) {\n v.component(FormItem.name, FormItem);\n v.component(IBizFormItemContainer.name, IBizFormItemContainer);\n // 表单项\n registerFormDetailProvider('FORMITEM', () => new FormItemProvider());\n});\n\nexport default IBizFormItem;\n","import { defineComponent, PropType, VNode } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './form-page.scss';\nimport { IDEForm } from '@ibiz/model-core';\nimport { FormPageController } from '@ibiz-template/runtime';\n\nexport const FormPage = defineComponent({\n name: 'IBizFormPage',\n props: {\n modelData: {\n type: Object as PropType<IDEForm>,\n required: true,\n },\n },\n setup() {\n const ns = useNamespace('form-page');\n return { ns };\n },\n render() {\n const { noTabHeader } = this.modelData;\n const defaultSlots: VNode[] =\n (this.$slots.default?.()[0]?.children as VNode[]) || [];\n if (defaultSlots.length === 1 || noTabHeader) {\n return (\n <div class={[this.ns.b(), this.ns.m('no-tab-header')]}>\n {defaultSlots}\n </div>\n );\n }\n return (\n <el-tabs\n class={[this.ns.b(), this.ns.b('tab')]}\n model-value={defaultSlots[0]?.key}\n >\n {defaultSlots.map(slot => {\n const props = slot.props;\n if (!props || !props.controller) {\n return slot;\n }\n const c = props.controller as FormPageController;\n // 不显示且不用保活时直接不绘制\n if (!c.state.visible && !c.state.keepAlive) {\n return null;\n }\n return (\n <el-tab-pane class={this.ns.b('tab-item')} name={c.model.id} lazy>\n {{\n default: (): VNode => slot,\n label: (): JSX.Element => {\n return (\n <span class={c.labelClass}>\n {c.model.sysImage ? (\n <iBizIcon icon={c.model.sysImage} />\n ) : null}\n {c.model.caption}\n </span>\n );\n },\n }}\n </el-tab-pane>\n );\n })}\n </el-tabs>\n );\n },\n});\n\nexport default FormPage;\n","import { FormPageController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IDEFormPage } from '@ibiz/model-core';\nimport { defineComponent, PropType, VNode } from 'vue';\n\nexport const IBizFormPageItem = defineComponent({\n name: 'IBizFormPageItem',\n props: {\n modelData: {\n type: Object as PropType<IDEFormPage>,\n required: true,\n },\n controller: {\n type: FormPageController,\n required: true,\n },\n },\n setup() {\n const ns = useNamespace('form-page-item');\n return { ns };\n },\n render() {\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n defaultSlots.forEach(item => {\n const data = item.component?.data;\n if (data) {\n data.class = { [this.ns.b('child')]: true };\n }\n });\n return (\n <iBizRow\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.id),\n ...this.controller.containerClass,\n ]}\n layout={this.modelData.layout}\n >\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\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 },\n});\n","import {\n FormController,\n FormPageController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormPage } from '@ibiz/model-core';\n\n/**\n * 表单分页部件适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormPageProvider\n * @implements {EditorProvider}\n */\nexport class FormPageProvider implements IFormDetailProvider {\n component: string = 'IBizFormPageItem';\n\n async createController(\n detailModel: IDEFormPage,\n form: FormController,\n _parent: undefined,\n ): Promise<FormPageController> {\n const c = new FormPageController(detailModel, form);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormPage from './form-page';\nimport { IBizFormPageItem } from './form-page-item/form-page.item';\nimport { FormPageProvider } from './form-page.provider';\n\nexport * from './form-page-item/form-page.item';\n\nexport const IBizFormPage = withInstall(FormPage, function (v: App) {\n v.component(FormPage.name, FormPage);\n v.component(IBizFormPageItem.name, IBizFormPageItem);\n // 表单分页\n registerFormDetailProvider('FORMPAGE', () => new FormPageProvider());\n});\n\nexport default IBizFormPage;\n","import { FormButtonController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IDEFormButton } from '@ibiz/model-core';\nimport { defineComponent, PropType, computed } from 'vue';\nimport './form-button.scss';\n\nexport const FormButton = defineComponent({\n name: 'IBizFormButton',\n props: {\n modelData: {\n type: Object as PropType<IDEFormButton>,\n required: true,\n },\n controller: {\n type: FormButtonController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-button');\n const captionText = computed(() => {\n const { caption, captionItemName, capLanguageRes } = props.modelData;\n if (captionItemName && props.controller.data[captionItemName]) {\n return props.controller.data[captionItemName];\n }\n let text = caption;\n if (capLanguageRes) {\n text = ibiz.i18n.t(capLanguageRes.lanResTag!, caption);\n }\n return text;\n });\n\n return { ns, captionText };\n },\n render() {\n if (!this.controller.state.visible) {\n return null;\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n this.ns.is('loading', this.controller.state.loading),\n ...this.controller.containerClass,\n ]}\n >\n <el-button\n sime='small'\n onClick={this.controller.onClick.bind(this.controller)}\n loading={this.controller.state.loading}\n disabled={this.controller.state.disabled}\n >\n <div class={this.ns.b('content')}>\n <iBizIcon\n class={this.ns.bm('content', 'icon')}\n icon={this.modelData.sysImage}\n />\n <span class={this.ns.bm('content', 'caption')}>\n {this.modelData.showCaption ? this.captionText : null}\n </span>\n </div>\n </el-button>\n </div>\n );\n },\n});\nexport default FormButton;\n","import {\n FormButtonController,\n FormController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormButton } from '@ibiz/model-core';\n\n/**\n * 表单按钮适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormButtonProvider\n * @implements {EditorProvider}\n */\nexport class FormButtonProvider implements IFormDetailProvider {\n component: string = 'IBizFormButton';\n\n async createController(\n detailModel: IDEFormButton,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormButtonController> {\n const c = new FormButtonController(detailModel, form, parent);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormButton from './form-button';\nimport { FormButtonProvider } from './form-button.provider';\n\nexport const IBizFormButton = withInstall(FormButton, function (v: App) {\n v.component(FormButton.name, FormButton);\n // 表单按钮\n registerFormDetailProvider('BUTTON', () => new FormButtonProvider());\n});\n\nexport default IBizFormButton;\n","import { defineComponent, h, PropType, resolveComponent } from 'vue';\nimport { useController, useNamespace } from '@ibiz-template/vue3-util';\nimport './form-druipart.scss';\nimport { IDEFormDRUIPart } from '@ibiz/model-core';\nimport { EventBase, FormDRUIPartController } from '@ibiz-template/runtime';\n\nexport const FormDRUIPart = defineComponent({\n name: 'IBizFormDRUIPart',\n props: {\n modelData: {\n type: Object as PropType<IDEFormDRUIPart>,\n required: true,\n },\n controller: {\n type: FormDRUIPartController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-druipart');\n useController(props.controller);\n\n const onCreated = (event: EventBase): void => {\n props.controller.setEmbedView(event.view);\n };\n\n return {\n ns,\n onCreated,\n };\n },\n render() {\n if (\n !this.controller.state.visible ||\n !this.controller.state.viewComponentKey\n ) {\n return null;\n }\n const viewShell = resolveComponent('IBizViewShell');\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ]}\n onClick={(event: MouseEvent) => this.controller.onClick(event)}\n >\n {h(viewShell, {\n context: this.controller.navContext,\n params: this.controller.navParams,\n key: this.controller.state.viewComponentKey,\n viewId: this.controller.model.appViewId,\n state: { noLoadDefault: true },\n onCreated: this.onCreated,\n })}\n {this.controller.state.showMask && (\n <div class={this.ns.e('mask')}>\n {this.modelData.maskInfo || '请先保存主数据'}\n </div>\n )}\n </div>\n );\n },\n});\nexport default FormDRUIPart;\n","import {\n FormController,\n FormDRUIPartController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormDRUIPart } from '@ibiz/model-core';\n\n/**\n * 表单按钮适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormDRUIPartProvider\n * @implements {EditorProvider}\n */\nexport class FormDRUIPartProvider implements IFormDetailProvider {\n component: string = 'IBizFormDRUIPart';\n\n async createController(\n detailModel: IDEFormDRUIPart,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormDRUIPartController> {\n const c = new FormDRUIPartController(detailModel, form, parent);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormDRUIPart from './form-druipart';\nimport { FormDRUIPartProvider } from './form-druipart.provider';\n\nexport const IBizFormDRUIPart = withInstall(FormDRUIPart, function (v: App) {\n v.component(FormDRUIPart.name, FormDRUIPart);\n // 表单关系界面\n registerFormDetailProvider('DRUIPART', () => new FormDRUIPartProvider());\n});\n\nexport default IBizFormDRUIPart;\n","import { defineComponent, PropType } from 'vue';\nimport { useController, useNamespace } from '@ibiz-template/vue3-util';\nimport { IDEFormMDCtrl } from '@ibiz/model-core';\nimport { FormMDCtrlController } from '@ibiz-template/runtime';\nimport './form-mdctrl.scss';\n\nexport const FormMDCtrl = defineComponent({\n name: 'IBizFormMDCtrl',\n props: {\n modelData: {\n type: Object as PropType<IDEFormMDCtrl>,\n required: true,\n },\n controller: {\n type: FormMDCtrlController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-mdctrl');\n useController(props.controller);\n\n const c = props.controller;\n const hasCaption = c.model.showCaption && !!c.model.caption;\n\n return { c, ns, hasCaption };\n },\n render() {\n const { model } = this.c;\n let content;\n\n // 根据内容类型绘制内容组件\n switch (model.contentType) {\n case 'GRID':\n case 'LIST':\n case 'DATAVIEW':\n content = <iBizFormMDCtrlMD controller={this.c} />;\n break;\n case 'FORM':\n content = <iBizFormMDCtrlForm controller={this.c} />;\n break;\n case 'REPEATER':\n content = <iBizFormMDCtrlRepeater controller={this.c} />;\n break;\n default:\n <div>{model.contentType}暂未支持</div>;\n break;\n }\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n this.hasCaption ? this.ns.m('show-caption') : '',\n ]}\n >\n {this.hasCaption && (\n <div class={this.ns.b('header')}>\n <span class={this.ns.e('title')}>{this.c.model.caption}</span>\n </div>\n )}\n {content}\n </div>\n );\n },\n});\n\nexport default FormMDCtrl;\n","import { computed, defineComponent, h, resolveComponent } from 'vue';\nimport {\n EventBase,\n FormMDCtrlFormController,\n IEditFormController,\n} from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './form-mdctrl-form.scss';\n\nexport const FormMDCtrlForm = defineComponent({\n name: 'IBizFormMDCtrlForm',\n props: {\n controller: {\n type: FormMDCtrlFormController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-mdctrl-form');\n\n /** 是否显示操作按钮 */\n const showActions = computed(() => {\n return props.controller.enableCreate || props.controller.enableDelete;\n });\n\n const renderAddBtn = () => {\n return (\n <el-button\n class={[\n ns.be('item-actions', 'create'),\n ns.be('item-actions', 'btn'),\n ]}\n onClick={(): void => props.controller.create()}\n >\n 添加\n </el-button>\n );\n };\n\n const onCreated = (id: string, event: EventBase): void => {\n props.controller.setFormController(id, event.ctrl as IEditFormController);\n };\n\n return { ns, showActions, onCreated, renderAddBtn };\n },\n render() {\n const { state, formProvider, model } = this.controller;\n\n return (\n <iBizMDCtrlContainer\n class={this.ns.b()}\n items={state.items}\n enableCreate={this.controller.enableCreate}\n enableDelete={this.controller.enableDelete}\n onAddClick={(): void => this.controller.create()}\n onRemoveClick={(item: IData) => this.controller.remove(item.id)}\n >\n {{\n item: ({ data }: { data: IData }) => {\n if (!formProvider) {\n return <div>未找到表单的适配器</div>;\n }\n const formComponent = h(resolveComponent(formProvider.component), {\n class: this.ns.be('item', 'form'),\n modelData: model.contentControl!,\n context: data.context,\n params: data.params,\n onCreated: (event: EventBase) => {\n this.onCreated(data.id, event);\n },\n });\n return formComponent;\n },\n }}\n </iBizMDCtrlContainer>\n );\n },\n});\n","import {\n VNode,\n computed,\n defineComponent,\n h,\n ref,\n resolveComponent,\n} from 'vue';\nimport {\n EventBase,\n FormMDCtrlMDController,\n IMDControlController,\n} from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './form-mdctrl-md.scss';\n\nexport const FormMDCtrlMD = defineComponent({\n name: 'IBizFormMDCtrlMD',\n props: {\n controller: {\n type: FormMDCtrlMDController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-mdctrl-md');\n\n /** 是否显示操作按钮 */\n const showActions = computed(() => {\n return props.controller.enableCreate || props.controller.enableDelete;\n });\n\n const onCreated = (event: EventBase): void => {\n props.controller.setMDControl(event.ctrl as IMDControlController);\n };\n\n /** 是否选中数据 */\n const isSelected = ref(false);\n const onSelectionChange = (event: EventBase): void => {\n isSelected.value = event.data.length > 0;\n };\n\n return { ns, showActions, isSelected, onCreated, onSelectionChange };\n },\n render() {\n const { mdProvider, model } = this.controller;\n\n const isLoaded = this.controller.form.state.isLoaded;\n\n let controlComponent: VNode | null = null;\n\n if (isLoaded) {\n //* 绘制多数据部件\n const controlProps: IData = {\n class: this.ns.b('content'),\n modelData: model.contentControl!,\n context: this.controller.form.context,\n params: this.controller.form.params,\n onCreated: this.onCreated,\n onSelectionChange: this.onSelectionChange,\n };\n\n // 表格的额外props\n if (model.contentType === 'GRID') {\n controlProps.rowEditOpen = true;\n }\n\n controlComponent = h(\n resolveComponent(mdProvider.component),\n controlProps,\n );\n }\n\n return (\n <div class={this.ns.b()}>\n {controlComponent}\n {this.showActions && (\n <div class={this.ns.b('actions')}>\n {this.controller.enableCreate && (\n <el-button\n class={[\n this.ns.be('actions', 'create'),\n this.ns.be('actions', 'btn'),\n ]}\n onClick={(): void => this.controller.create()}\n >\n 添加\n </el-button>\n )}\n {this.controller.enableDelete && (\n <el-button\n type='danger'\n disabled={!this.isSelected}\n class={[\n this.ns.be('actions', 'remove'),\n this.ns.be('actions', 'btn'),\n ]}\n onClick={(): void => this.controller.remove()}\n >\n 删除\n </el-button>\n )}\n </div>\n )}\n </div>\n );\n },\n});\n","import { defineComponent, PropType } from 'vue';\nimport {\n EventBase,\n FormMDCtrlRepeaterController,\n} from '@ibiz-template/runtime';\nimport { RuntimeError } from '@ibiz-template/core';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './repeater-single-form.scss';\n\nexport const RepeaterSingleForm = defineComponent({\n name: 'IBizRepeaterSingleForm',\n props: {\n data: {\n type: Object as PropType<IData>,\n required: true,\n },\n controller: {\n type: FormMDCtrlRepeaterController,\n required: true,\n },\n },\n emits: {\n change: (_value: IData) => true,\n },\n setup(_props, { emit }) {\n const ns = useNamespace('repeater-single-form');\n\n const onFormDataChange = (event: EventBase) => {\n // 隔离抛出不一样的对象\n const formData = { ...event.data[0] };\n emit('change', formData);\n };\n\n return { ns, onFormDataChange };\n },\n render() {\n if (!this.controller.repeatedForm) {\n throw new RuntimeError('没有repeatedForm');\n }\n return (\n <iBizControlShell\n class={this.ns.b()}\n context={this.controller.context}\n params={this.controller.params}\n modelData={this.controller.repeatedForm}\n isSimple={true}\n data={this.data}\n onFormDataChange={this.onFormDataChange}\n ></iBizControlShell>\n );\n },\n});\n","import { defineComponent } from 'vue';\nimport { FormMDCtrlRepeaterController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { RepeaterSingleForm } from '../repeater-single-form/repeater-single-form';\n\nexport const RepeaterMultiForm = defineComponent({\n name: 'IBizRepeaterMultiForm',\n props: {\n controller: {\n type: FormMDCtrlRepeaterController,\n required: true,\n },\n },\n emits: {\n change: (_value: IData[]) => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('repeater-multi-form');\n\n const onValueChange = (value: IData, index: number) => {\n const arrData = [...(props.controller.value as IData[])];\n arrData[index] = value;\n emit('change', arrData);\n };\n\n return { ns, onValueChange };\n },\n render() {\n const items = this.controller.value as IData[];\n return (\n <iBizMDCtrlContainer\n class={this.ns.b()}\n items={items}\n enableCreate={this.controller.enableCreate}\n enableDelete={this.controller.enableDelete}\n onAddClick={(): void => this.controller.create()}\n onRemoveClick={(_item: IData, index: number): void =>\n this.controller.remove(index)\n }\n >\n {{\n item: ({ data, index }: { data: IData; index: number }) => {\n return (\n <RepeaterSingleForm\n key={index}\n data={data}\n controller={this.controller}\n onChange={(value: IData) => {\n this.onValueChange(value, index);\n }}\n ></RepeaterSingleForm>\n );\n },\n }}\n </iBizMDCtrlContainer>\n );\n },\n});\n","import { defineComponent, h, reactive, resolveComponent, watch } from 'vue';\nimport {\n EditFormController,\n EventBase,\n FormMDCtrlRepeaterController,\n IEditFormController,\n} from '@ibiz-template/runtime';\nimport { useCtx, useNamespace } from '@ibiz-template/vue3-util';\nimport './repeater-grid.scss';\nimport { recursiveIterate } from '@ibiz-template/core';\nimport { IDEFormDetail, IDEFormItem } from '@ibiz/model-core';\n\nexport const RepeaterGrid = defineComponent({\n name: 'IBizRepeaterGrid',\n props: {\n controller: {\n type: FormMDCtrlRepeaterController,\n required: true,\n },\n },\n emits: {\n change: (_value: IData[]) => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('repeater-grid');\n const formItems: IDEFormItem[] = [];\n // 遍历所有的项,如果有逻辑的话加入\n recursiveIterate(\n props.controller.repeatedForm,\n (item: IDEFormDetail) => {\n if (item.detailType === 'FORMITEM') {\n formItems.push(item);\n }\n },\n {\n childrenFields: ['deformPages', 'deformTabPages', 'deformDetails'],\n },\n );\n\n const onSingleValueChange = (value: IData, index: number) => {\n const arrData = [...(props.controller.value as IData[])];\n arrData[index] = value;\n emit('change', arrData);\n };\n\n const ctx = useCtx();\n const formControllers = reactive<IEditFormController[]>([]);\n const addFormController = async (data: IData = {}) => {\n const formC = new EditFormController(\n props.controller.repeatedForm,\n props.controller.context,\n props.controller.params,\n ctx,\n );\n formC.state.isSimple = true;\n await formC.created();\n formC.setSimpleData(data);\n formControllers.push(formC);\n formC.evt.on('onFormDataChange', (event: EventBase) => {\n // 隔离抛出不一样的对象\n const formData = { ...event.data[0] };\n const index = formControllers.indexOf(formC);\n onSingleValueChange(formData, index);\n });\n };\n\n watch(\n () => props.controller.value as IData[] | null,\n newVal => {\n if (newVal && newVal.length > 0) {\n newVal.forEach((item, index) => {\n const formC = formControllers[index] as EditFormController;\n if (formC) {\n const changeVal = item || {};\n // 找有没有不一致的属性\n const find = Object.keys(formC.data).find(key => {\n return changeVal[key] !== formC.data[key];\n });\n // 内外部数据不一致时,只能是外部修改了,这是更新数据并重走load\n if (find) {\n formC.setSimpleData(changeVal);\n }\n } else {\n addFormController(item);\n }\n });\n // 数据个数比表单控制器少的时候,把后面多余的表单控制器全部设置成没有加载的状态\n if (newVal.length < formControllers.length) {\n formControllers.forEach((c, index) => {\n if (index >= newVal.length) {\n c.state.isLoaded = false;\n }\n });\n }\n }\n },\n { immediate: true, deep: true },\n );\n\n const renderRemoveBtn = (index: number) => {\n if (!props.controller.enableDelete) {\n return null;\n }\n if (ibiz.config.form.mdCtrlConfirmBeforeRemove) {\n return (\n <el-popconfirm\n title='是否删除选中项'\n confirm-button-text='确认'\n cancel-button-text='取消'\n onConfirm={() => props.controller.remove(index)}\n >\n {{\n reference: () => {\n return (\n <el-button\n text\n type='danger'\n class={[ns.be('index', 'remove')]}\n >\n 删除\n </el-button>\n );\n },\n }}\n </el-popconfirm>\n );\n }\n return (\n <el-button\n text\n type='danger'\n class={[ns.be('index', 'remove')]}\n onClick={() => props.controller.remove(index)}\n >\n 删除\n </el-button>\n );\n };\n\n return { ns, formItems, formControllers, renderRemoveBtn };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n {this.controller.enableCreate && (\n <el-button\n class={this.ns.e('add-btn')}\n onClick={() => {\n this.controller.create();\n }}\n >\n 添加\n </el-button>\n )}\n <el-table\n class={this.ns.e('table')}\n show-header={true}\n data={this.controller.value}\n cell-class-name={({ columnIndex }: IData) => {\n // 索引单元格样式\n return columnIndex === 0 ? this.ns.b('index') : '';\n }}\n >\n <el-table-column type='index' width={66} align='center'>\n {{\n default: (opts: IData) => {\n const { $index } = opts;\n if (!this.controller.enableDelete) {\n return <span>{$index + 1}</span>;\n }\n return [\n this.renderRemoveBtn($index),\n <span class={this.ns.be('index', 'text')}>{$index + 1}</span>,\n ];\n },\n }}\n </el-table-column>\n {this.formItems.length > 0 &&\n this.formItems.map(item => {\n return (\n <el-table-column\n label={item.caption}\n prop={item.id}\n align='center'\n >\n {{\n default: (opts: IData) => {\n const { $index } = opts;\n const formC = this.formControllers[\n $index\n ] as EditFormController;\n if (!formC || !formC.state.isLoaded) {\n return <div>不存在或加载中</div>;\n }\n const formItemC = formC.formItems.find(\n x => x.name === item.id,\n )!;\n\n let editor = null;\n if (!formItemC.editorProvider) {\n editor = (\n <not-supported-editor modelData={item.editor} />\n );\n } else {\n const component = resolveComponent(\n formItemC.editorProvider.formEditor,\n );\n editor = h(component, {\n value: formItemC.value,\n data: formItemC.data,\n controller: formItemC.editor,\n disabled: formItemC.state.disabled,\n readonly: formItemC.model.editor!.readOnly,\n onChange: (val: unknown, name?: string): void => {\n formItemC.setDataValue(val, name);\n },\n });\n }\n\n return (\n <iBizGridEditItem\n error={formItemC.state.error}\n required={formItemC.state.required}\n >\n {editor}\n </iBizGridEditItem>\n );\n },\n }}\n </el-table-column>\n );\n })}\n </el-table>\n </div>\n );\n },\n});\n","import { defineComponent } from 'vue';\nimport { FormMDCtrlRepeaterController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { RepeaterSingleForm } from './repeater-single-form/repeater-single-form';\nimport { RepeaterMultiForm } from './repeater-multi-form/repeater-multi-form';\nimport { RepeaterGrid } from './repeater-grid/repeater-grid';\n\nexport const FormMDCtrlRepeater = defineComponent({\n name: 'IBizFormMDCtrlRepeater',\n props: {\n controller: {\n type: FormMDCtrlRepeaterController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-mdctrl-repeater');\n const onDataChange = (data: IData | IData[] | null) => {\n props.controller.setValue(data);\n };\n return { ns, onDataChange };\n },\n render() {\n const classNames = [this.ns.b()];\n switch (this.controller.repeaterStyle) {\n case 'MultiForm':\n return (\n <RepeaterMultiForm\n class={classNames}\n onChange={this.onDataChange}\n controller={this.controller}\n ></RepeaterMultiForm>\n );\n case 'Grid':\n return (\n <RepeaterGrid\n class={classNames}\n controller={this.controller}\n onChange={this.onDataChange}\n ></RepeaterGrid>\n );\n case 'SingleForm':\n return (\n <RepeaterSingleForm\n class={classNames}\n data={this.controller.value as IData}\n controller={this.controller}\n onChange={this.onDataChange}\n ></RepeaterSingleForm>\n );\n default:\n return (\n <div class={classNames}>\n 暂未支持重复器样式{this.controller.repeaterStyle}\n </div>\n );\n }\n },\n});\n","import { ModelError } from '@ibiz-template/core';\nimport {\n FormController,\n FormMDCtrlController,\n FormMDCtrlFormController,\n FormMDCtrlMDController,\n FormMDCtrlRepeaterController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormMDCtrl } from '@ibiz/model-core';\n/**\n * 表单多数据部件适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormMDCtrlProvider\n * @implements {EditorProvider}\n */\nexport class FormMDCtrlProvider implements IFormDetailProvider {\n component: string = 'IBizFormMDCtrl';\n\n async createController(\n detailModel: IDEFormMDCtrl,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormMDCtrlController> {\n let c;\n switch (detailModel.contentType) {\n case 'LIST':\n case 'GRID':\n case 'DATAVIEW':\n c = new FormMDCtrlMDController(detailModel, form, parent);\n break;\n case 'FORM':\n c = new FormMDCtrlFormController(detailModel, form, parent);\n break;\n case 'REPEATER':\n c = new FormMDCtrlRepeaterController(detailModel, form, parent);\n break;\n default:\n throw new ModelError(\n detailModel,\n `暂未支持内容类型为${detailModel.contentType}`,\n );\n }\n await c.init();\n return c;\n }\n}\n","import { PropType, computed, defineComponent } from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './mdctrl-container.scss';\n\nexport const MDCtrlContainer = defineComponent({\n name: 'IBizMDCtrlContainer',\n props: {\n enableCreate: {\n type: Boolean,\n required: true,\n },\n enableDelete: {\n type: Boolean,\n required: true,\n },\n items: {\n type: Object as PropType<IData[]>,\n required: true,\n },\n },\n emits: {\n addClick: () => true,\n removeClick: (_data: IData, _index: number) => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('mdctrl-container');\n\n /** 是否显示操作按钮 */\n const showActions = computed(() => {\n return props.enableCreate || props.enableDelete;\n });\n\n const renderAddBtn = () => {\n return (\n <el-button\n class={[\n ns.be('item-actions', 'create'),\n ns.be('item-actions', 'btn'),\n ]}\n onClick={(): void => emit('addClick')}\n >\n 添加\n </el-button>\n );\n };\n\n const renderRemoveBtn = (item: IData, index: number) => {\n if (!props.enableDelete) {\n return null;\n }\n if (ibiz.config.form.mdCtrlConfirmBeforeRemove) {\n return (\n <el-popconfirm\n title='是否删除选中项'\n confirm-button-text='确认'\n cancel-button-text='取消'\n onConfirm={() => emit('removeClick', item, index)}\n >\n {{\n reference: () => {\n return (\n <el-button\n type='danger'\n class={[\n ns.be('item-actions', 'remove'),\n ns.be('item-actions', 'btn'),\n ]}\n >\n 删除\n </el-button>\n );\n },\n }}\n </el-popconfirm>\n );\n }\n return (\n <el-button\n type='danger'\n class={[\n ns.be('item-actions', 'remove'),\n ns.be('item-actions', 'btn'),\n ]}\n onClick={() => emit('removeClick', item, index)}\n >\n 删除\n </el-button>\n );\n };\n\n return { ns, showActions, renderAddBtn, renderRemoveBtn };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n {this.items?.length ? (\n this.items.map((item, index) => {\n const formComponent = this.$slots.item ? (\n this.$slots.item({ data: item, index })\n ) : (\n <div>未提供item插槽</div>\n );\n\n return (\n <div class={this.ns.b('item')}>\n {formComponent}\n {this.showActions && (\n <div class={this.ns.b('item-actions')}>\n {index === 0 && this.enableCreate && this.renderAddBtn()}\n {this.renderRemoveBtn(item, index)}\n </div>\n )}\n </div>\n );\n })\n ) : (\n <div class={this.ns.b('no-data')}>\n {this.enableCreate && (\n <div class={this.ns.b('item-actions')}>{this.renderAddBtn()}</div>\n )}\n </div>\n )}\n </div>\n );\n },\n});\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormMDCtrl from './form-mdctrl';\nimport { FormMDCtrlForm } from './form-mdctrl-form/form-mdctrl-form';\nimport { FormMDCtrlMD } from './form-mdctrl-md/form-mdctrl-md';\nimport { FormMDCtrlRepeater } from './form-mdctrl-repeater/form-mdctrl-repeater';\nimport { FormMDCtrlProvider } from './form-mdctrl.provider';\nimport { MDCtrlContainer } from './mdctrl-container/mdctrl-container';\n\nexport const IBizFormMDCtrl = withInstall(FormMDCtrl, function (v: App) {\n v.component(FormMDCtrl.name, FormMDCtrl);\n v.component(FormMDCtrlForm.name, FormMDCtrlForm);\n v.component(FormMDCtrlMD.name, FormMDCtrlMD);\n v.component(FormMDCtrlRepeater.name, FormMDCtrlRepeater);\n v.component(MDCtrlContainer.name, MDCtrlContainer);\n registerFormDetailProvider('MDCTRL', () => new FormMDCtrlProvider());\n});\n\nexport default IBizFormMDCtrl;\n","import { IDEFormRawItem } from '@ibiz/model-core';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType } from 'vue';\nimport { FormRawItemController } from '@ibiz-template/runtime';\nimport './form-rawitem.scss';\n\nexport const FormRawItem = defineComponent({\n name: 'IBizFormRawItem',\n props: {\n modelData: {\n type: Object as PropType<IDEFormRawItem>,\n required: true,\n },\n controller: {\n type: FormRawItemController,\n required: true,\n },\n },\n setup() {\n const ns = useNamespace('form-raw-item');\n return { ns };\n },\n render() {\n if (!this.controller.state.visible) {\n return null;\n }\n return (\n <iBizRawItem\n class={[this.ns.b(), ...this.controller.containerClass]}\n rawItem={this.modelData}\n onClick={(event: MouseEvent) => this.controller.onClick(event)}\n ></iBizRawItem>\n );\n },\n});\n\nexport default FormRawItem;\n","import {\n FormController,\n FormRawItemController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormRawItem } from '@ibiz/model-core';\n/**\n * 表单直接内容适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormRawItemProvider\n * @implements {EditorProvider}\n */\nexport class FormRawItemProvider implements IFormDetailProvider {\n component: string = 'IBizFormRawItem';\n\n async createController(\n detailModel: IDEFormRawItem,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormRawItemController> {\n const c = new FormRawItemController(detailModel, form, parent);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormRawItem from './form-rawitem';\nimport { FormRawItemProvider } from './form-rawitem.provider';\n\nexport const IBizFormRawItem = withInstall(FormRawItem, function (v: App) {\n v.component(FormRawItem.name, FormRawItem);\n // 表单直接内容\n registerFormDetailProvider('RAWITEM', () => new FormRawItemProvider());\n});\n\nexport default IBizFormRawItem;\n","import { defineComponent, PropType, VNode } from 'vue';\nimport { useController, useNamespace } from '@ibiz-template/vue3-util';\nimport './form-tab-panel.scss';\nimport { IDEFormTabPanel } from '@ibiz/model-core';\nimport {\n FormTabPanelController,\n FormTabPageController,\n} from '@ibiz-template/runtime';\n\nexport const FormTabPanel = defineComponent({\n name: 'IBizFormTabPanel',\n props: {\n modelData: {\n type: Object as PropType<IDEFormTabPanel>,\n required: true,\n },\n controller: {\n type: FormTabPanelController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-tab-panel');\n useController(props.controller);\n\n return {\n ns,\n };\n },\n render() {\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n return (\n <el-tabs\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ]}\n model-value={this.modelData.deformTabPages?.[0].id}\n onClick={(event: MouseEvent) => this.controller.onClick(event)}\n >\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n const c = props.controller as FormTabPageController;\n // 不显示且不用保活时直接不绘制\n if (!c.state.visible && !c.state.keepAlive) {\n return null;\n }\n return (\n <el-tab-pane\n class={this.ns.b('tab-item')}\n label={c.model.caption}\n name={c.model.id}\n lazy\n >\n {{\n default: (): VNode => slot,\n label: (): JSX.Element => {\n return (\n <span class={c.labelClass}>\n {c.model.sysImage && <iBizIcon icon={c.model.sysImage} />}\n {c.model.showCaption && c.model.caption}\n </span>\n );\n },\n }}\n </el-tab-pane>\n );\n })}\n </el-tabs>\n );\n },\n});\nexport default FormTabPanel;\n","import {\n FormController,\n FormTabPanelController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormTabPanel } from '@ibiz/model-core';\n\n/**\n * 表单分页部件适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormTabPanelProvider\n * @implements {EditorProvider}\n */\nexport class FormTabPanelProvider implements IFormDetailProvider {\n component: string = 'IBizFormTabPanel';\n\n async createController(\n detailModel: IDEFormTabPanel,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormTabPanelController> {\n const c = new FormTabPanelController(detailModel, form, parent);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormTabPanel from './form-tab-panel';\nimport { FormTabPanelProvider } from './form-tab-panel.provider';\n\nexport const IBizFormTabPanel = withInstall(FormTabPanel, function (v: App) {\n v.component(FormTabPanel.name, FormTabPanel);\n // 表单关系界面\n registerFormDetailProvider('TABPANEL', () => new FormTabPanelProvider());\n});\n\nexport default IBizFormTabPanel;\n","import { defineComponent, PropType, VNode } from 'vue';\nimport { useController, useNamespace } from '@ibiz-template/vue3-util';\nimport './form-tab-page.scss';\nimport { IDEFormTabPage } from '@ibiz/model-core';\nimport { FormTabPageController } from '@ibiz-template/runtime';\n\nexport const FormTabPage = defineComponent({\n name: 'IBizFormTabPage',\n props: {\n modelData: {\n type: Object as PropType<IDEFormTabPage>,\n required: true,\n },\n controller: {\n type: FormTabPageController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('form-tab-page');\n useController(props.controller);\n\n return {\n ns,\n };\n },\n render() {\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n return (\n <iBizRow\n class={[\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ]}\n layout={this.modelData.layout}\n onClick={(event: MouseEvent) => this.controller.onClick(event)}\n >\n {defaultSlots.map(slot => {\n const props = slot.props as IData;\n if (!props || !props.controller) {\n return slot;\n }\n const c = props.controller;\n return (\n <iBizCol layoutPos={c.model.layoutPos} state={c.state}>\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n },\n});\nexport default FormTabPage;\n","import {\n FormController,\n FormTabPageController,\n IFormDetailContainerController,\n IFormDetailProvider,\n} from '@ibiz-template/runtime';\nimport { IDEFormTabPage } from '@ibiz/model-core';\n\n/**\n * 表单分页部件分页适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FormTabPageProvider\n * @implements {EditorProvider}\n */\nexport class FormTabPageProvider implements IFormDetailProvider {\n component: string = 'IBizFormTabPage';\n\n async createController(\n detailModel: IDEFormTabPage,\n form: FormController,\n parent: IFormDetailContainerController | undefined,\n ): Promise<FormTabPageController> {\n const c = new FormTabPageController(detailModel, form, parent);\n await c.init();\n return c;\n }\n}\n","import { registerFormDetailProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport FormTabPage from './form-tab-page';\nimport { FormTabPageProvider } from './form-tab-page.provider';\n\nexport const IBizFormTabPage = withInstall(FormTabPage, function (v: App) {\n v.component(FormTabPage.name, FormTabPage);\n // 表单关系界面\n registerFormDetailProvider('TABPAGE', () => new FormTabPageProvider());\n});\n\nexport default IBizFormTabPage;\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 EditFormProvider\n * @implements {IControlProvider}\n */\nexport class EditFormProvider implements IControlProvider {\n component: string = 'IBizEditFormControl';\n}\n","/* eslint-disable no-param-reassign */\nimport { EditFormController, IControlProvider } from '@ibiz-template/runtime';\nimport { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { IDEEditForm } from '@ibiz/model-core';\nimport { defineComponent, PropType, reactive, watch } from 'vue';\n\nexport const EditFormControl = defineComponent({\n name: 'IBizEditFormControl',\n props: {\n modelData: {\n type: Object as PropType<IDEEditForm>,\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 isSimple: { type: Boolean, required: false },\n data: { type: Object as PropType<IData>, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup(props) {\n const c = useControlController(\n (...args) => new EditFormController(...args),\n { excludePropsKeys: ['data'] },\n );\n\n if (props.isSimple) {\n c.evt.on('onMounted', () => {\n // 第一次data直接赋值,后面默认加载会走load\n c.setSimpleData(props.data || {});\n });\n watch(\n () => props.data,\n newVal => {\n const changeVal = newVal || {};\n // 找有没有不一致的属性\n const find = Object.keys(c.data).find(key => {\n return changeVal[key] !== c.data[key];\n });\n // 内外部数据不一致时,只能是外部修改了,这是更新数据并重走load\n if (find) {\n c.setSimpleData(changeVal);\n }\n },\n { deep: true },\n );\n }\n\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n c.evt.on('onCreated', () => {\n // 表单成员state响应式\n const keys = Object.keys(c.details);\n keys.forEach(key => {\n const detail = c.details[key];\n detail.state = reactive(detail.state);\n });\n });\n\n return { c, ns };\n },\n\n render() {\n return (\n <iBizFormControl class={this.ns.b()} controller={this.c}>\n {{ ...this.$slots }}\n </iBizFormControl>\n );\n },\n});\n","import { ControlType, registerControlProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { EditFormProvider } from './edit-form.provider';\nimport { EditFormControl } from './edit-form';\n\nexport const IBizEditFormControl = withInstall(\n EditFormControl,\n function (v: App) {\n v.component(EditFormControl.name, EditFormControl);\n registerControlProvider(ControlType.FORM, () => new EditFormProvider());\n },\n);\n\nexport default IBizEditFormControl;\n","import { findChildFormDetails, FormController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IDEFormDetail, IDEFormItem } from '@ibiz/model-core';\nimport {\n defineComponent,\n h,\n PropType,\n renderSlot,\n resolveComponent,\n VNode,\n} from 'vue';\nimport './form.scss';\n\nexport const FormControl = defineComponent({\n name: 'IBizFormControl',\n props: {\n controller: {\n type: Object as PropType<FormController>,\n required: true,\n },\n },\n setup(props, { slots }) {\n const ns = useNamespace('control-form');\n\n const c = props.controller;\n\n /** 作用域插槽提供的参数 */\n const slotProps: IData = { form: c };\n\n /**\n * 按照类型绘制表单成员\n * @author lxm\n * @date 2023-06-12 06:24:14\n * @param {IDEFormDetail} detail\n * @return {*} {(VNode | VNode[] | undefined)}\n */\n const renderByDetailType = (\n detail: IDEFormDetail,\n ): VNode | VNode[] | undefined => {\n if ((detail as IDEFormItem).hidden) {\n return;\n }\n const detailId = detail.id!;\n\n // 表单成员组件的props\n const detailProps: IData = {\n modelData: detail,\n controller: c.details[detailId],\n key: detail.id,\n };\n\n // 有插槽走插槽\n if (slots[detailId]) {\n return renderSlot(slots, detailId, {\n ...slotProps,\n ...detailProps,\n });\n }\n\n // 子插槽\n const childSlots: IData = {};\n // 表单项如果有编辑器插槽的时候,调用插槽绘制表单项的默认插槽。\n if (detail.detailType === 'FORMITEM' && slots[`${detailId}_editor`]) {\n childSlots.default = (...args: IData[]): VNode[] => {\n return slots[`${detailId}_editor`]!(...args);\n };\n }\n const childDetails = findChildFormDetails(detail);\n if (childDetails.length) {\n // 容器成员绘制子成员\n childSlots.default = (): (VNode[] | VNode | undefined)[] =>\n childDetails.map(child => {\n return renderByDetailType(child);\n });\n }\n\n // 根据适配器绘制表单成员\n const provider = c.providers[detailId];\n if (!provider) {\n return (\n <div>暂未支持的表单项类型: {detail.detailType}或找不到对应适配器</div>\n );\n }\n const component = resolveComponent(provider.component) as string;\n return h(\n component,\n {\n ...detailProps,\n },\n childSlots,\n );\n };\n\n /** 内置表单成员组件 */\n const FormDetail = (_props: {\n modelData: IDEFormDetail | IDEFormDetail[];\n }): (VNode | VNode[] | undefined)[] => {\n const { modelData } = _props;\n const detailModels = modelData instanceof Array ? modelData : [modelData];\n return detailModels.map(detail => {\n return renderByDetailType(detail);\n });\n };\n FormDetail.props = ['modelData'];\n\n slotProps.FormDetail = FormDetail;\n\n return { ns, c, FormDetail, slotProps, renderByDetailType };\n },\n render() {\n const { state, model, controlPanel } = this.c;\n const { isCreated } = state;\n const slots: IData = {};\n if (isCreated) {\n if (this.$slots.default) {\n slots.default = () => {\n return this.$slots.default!({\n ...this.slotProps,\n });\n };\n } else {\n const key = controlPanel ? model.name! : 'default';\n // 树自己绘制,要传递额外的参数\n slots[key] = (): VNode => {\n return (\n <iBizFormPage modelData={this.c.model} controller={this.c}>\n {this.c.model.deformPages?.map(page => {\n return this.renderByDetailType(page);\n })}\n </iBizFormPage>\n );\n };\n }\n }\n\n return (\n <iBizControlBase class={[this.ns.b()]} controller={this.c}>\n {slots}\n </iBizControlBase>\n );\n },\n});\n","import { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { FormControl } from './form';\nimport {\n IBizFormButton,\n IBizFormDRUIPart,\n IBizFormGroupPanel,\n IBizFormItem,\n IBizFormPage,\n IBizFormMDCtrl,\n IBizFormRawItem,\n IBizFormTabPanel,\n IBizFormTabPage,\n} from '../form-detail';\n\nexport const IBizFormControl = withInstall(FormControl, function (v: App) {\n v.component(FormControl.name, FormControl);\n v.use(IBizFormPage);\n v.use(IBizFormItem);\n v.use(IBizFormGroupPanel);\n v.use(IBizFormButton);\n v.use(IBizFormDRUIPart);\n v.use(IBizFormMDCtrl);\n v.use(IBizFormRawItem);\n v.use(IBizFormTabPanel);\n v.use(IBizFormTabPage);\n});\n\nexport default IBizFormControl;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { IDETBUIActionItem } from '@ibiz/model-core';\nimport { defineComponent, PropType, ref, VNode } from 'vue';\nimport { IToolbarController } from '@ibiz-template/runtime';\nimport './export-excel.scss';\n\nexport const IBizExportExcel = defineComponent({\n name: 'IBizExportExcel',\n props: {\n size: {\n type: String,\n required: false,\n },\n item: {\n type: Object as PropType<IDETBUIActionItem>,\n required: true,\n },\n btnContent: {\n type: Function,\n required: true,\n },\n controller: {\n type: Object as PropType<IToolbarController>,\n },\n },\n emits: ['exportExcel'],\n setup(props, { emit }) {\n const ns = useNamespace('export-excel');\n const startPage = ref(1);\n const endPage = ref(9999);\n const onCommand = (command: string, e: MouseEvent): void => {\n if (!command) {\n return;\n }\n emit('exportExcel', e, {\n type: command,\n startPage: startPage.value,\n endPage: endPage.value,\n });\n };\n return { ns, endPage, startPage, onCommand };\n },\n render() {\n return (\n <el-dropdown\n size={this.$props.size}\n onCommand={this.onCommand}\n popper-class={this.ns.b()}\n trigger='click'\n >\n {{\n default: (): VNode => {\n return (\n <el-button\n title={this.item.tooltip}\n size={this.$props.size}\n class={this.ns.e('button')}\n >\n {this.btnContent(this.item)}\n </el-button>\n );\n },\n dropdown: (): VNode => {\n return (\n <el-dropdown-menu>\n <el-dropdown-item command='maxRowCount'>\n 导出全部(最大导出1000行)\n </el-dropdown-item>\n\n <el-dropdown-item command='activatedPage'>\n 导出当前页\n </el-dropdown-item>\n\n <el-dropdown-item command='selectedRows'>\n 导出当前选中\n </el-dropdown-item>\n\n <el-dropdown-item class={this.ns.e('custom')} command=''>\n <el-input\n type='number'\n v-model={this.startPage}\n size='small'\n maxlength='4'\n onClick={(event: Event): void => {\n event.stopPropagation();\n }}\n onChange={(value: number): void => {\n this.startPage = value;\n }}\n ></el-input>\n <span\n class='item-text'\n onClick={(event: Event): void => {\n event.stopPropagation();\n }}\n >\n -\n </span>\n <el-input\n v-model={this.endPage}\n size='small'\n type='number'\n maxlength='4'\n onClick={(event: Event): void => {\n event.stopPropagation();\n }}\n ></el-input>\n <span\n class='item-text'\n onClick={(event: Event): void => {\n event.stopPropagation();\n }}\n >\n 页\n </span>\n <el-button\n onClick={(e: MouseEvent): void =>\n this.onCommand('customPage', e)\n }\n size='small'\n >\n 导出\n </el-button>\n </el-dropdown-item>\n </el-dropdown-menu>\n );\n },\n }}\n </el-dropdown>\n );\n },\n});\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { ref, defineComponent, PropType, VNode } from 'vue';\nimport {\n IDEToolbar,\n IDEToolbarItem,\n IDETBGroupItem,\n IDETBUIActionItem,\n} from '@ibiz/model-core';\nimport {\n IControlProvider,\n IExtraButton,\n ToolbarController,\n} from '@ibiz-template/runtime';\nimport { IBizExportExcel } from './export-excel/export-excel';\nimport './toolbar.scss';\n\nconst btnContent = (item: IDEToolbarItem): (string | VNode)[] => {\n const image = item.sysImage;\n const result = [];\n if (item.showIcon && image) {\n result.push(<iBizIcon icon={image} />);\n }\n if (item.showCaption) {\n if (item.capLanguageRes) {\n const caption = ibiz.i18n.t(item.capLanguageRes.lanResTag!, item.caption);\n result.push(caption);\n } else if (item.caption) {\n result.push(item.caption);\n }\n }\n return result;\n};\n\nexport const ToolbarControl = defineComponent({\n name: 'IBizToolbarControl',\n props: {\n modelData: {\n type: Object as PropType<IDEToolbar>,\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 },\n setup() {\n const c = useControlController((...args) => new ToolbarController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const btnSize = ref('default');\n\n // 点击事件\n const handleClick = async (\n item: IDEToolbarItem,\n event: MouseEvent,\n params?: IData,\n ): Promise<void> => {\n await c.onItemClick(item, event, params);\n };\n\n const renderExtraButtons = (extraButtons: IExtraButton[]): VNode[] => {\n return extraButtons.map(button => {\n return (\n <div key={button.id} class={[ns.e('item')]}>\n <el-button\n title={button.tooltip}\n size={btnSize.value}\n onClick={(e: MouseEvent): Promise<void> => handleClick(button, e)}\n >\n {btnContent(button)}\n </el-button>\n </div>\n );\n });\n };\n\n const renderToolbarItem = (item: IDEToolbarItem): VNode | null => {\n const itemId = item.id!;\n if (item.itemType === 'SEPERATOR') {\n return (\n <div key={itemId} class={[ns.e('item'), ns.e('item-separator')]}>\n |\n </div>\n );\n }\n if (item.itemType === 'RAWITEM') {\n return (\n <div key={itemId} class={[ns.e('item'), ns.e('item-rawitem')]}>\n {btnContent(item)}\n </div>\n );\n }\n if (\n item.itemType === 'DEUIACTION' &&\n c.state.buttonsState[itemId].visible\n ) {\n const actionId = (item as IDETBUIActionItem).uiactionId;\n if (actionId === 'exportexcel') {\n return (\n <IBizExportExcel\n class={[ns.e('item'), ns.e('item-deuiaction')]}\n item={item}\n btnContent={btnContent}\n size={btnSize.value}\n controller={c}\n onExportExcel={(e: MouseEvent, data: IData): void => {\n handleClick(item, e, data);\n }}\n ></IBizExportExcel>\n );\n }\n return (\n <div\n key={itemId}\n class={[\n ns.e('item'),\n ns.e('item-deuiaction'),\n ns.is('loading', c.state.buttonsState[itemId].loading),\n ]}\n >\n <el-button\n title={item.tooltip}\n size={btnSize.value}\n loading={c.state.buttonsState[itemId].loading}\n disabled={c.state.buttonsState[itemId].disabled}\n onClick={(e: MouseEvent): Promise<void> => handleClick(item, e)}\n >\n {btnContent(item)}\n </el-button>\n </div>\n );\n }\n if (item.itemType === 'ITEMS') {\n return (\n <div key={itemId} class={[ns.e('item'), ns.e('item-items')]}>\n <el-dropdown trigger='click' placement='bottom-start'>\n {{\n default: (): VNode => {\n return (\n <el-button title={item.tooltip} size={btnSize.value}>\n {btnContent(item)}\n </el-button>\n );\n },\n dropdown: (): VNode => {\n return (\n <el-dropdown-menu>\n {(item as IDETBGroupItem).detoolbarItems?.map(item2 => {\n return (\n <el-dropdown-item\n key={item2.id}\n disabled={c.state.buttonsState[item2.id!].disabled}\n onClick={(e: MouseEvent): Promise<void> =>\n handleClick(item2, e)\n }\n >\n {btnContent(item2)}\n </el-dropdown-item>\n );\n })}\n </el-dropdown-menu>\n );\n },\n }}\n </el-dropdown>\n </div>\n );\n }\n return null;\n };\n\n return {\n c,\n btnSize,\n ns,\n handleClick,\n renderExtraButtons,\n renderToolbarItem,\n };\n },\n render() {\n const { state } = this.c;\n\n let content = null;\n if (state.isCreated) {\n content = [\n // 绘制最前方的额外按钮\n state.extraButtons.before?.length > 0 &&\n this.renderExtraButtons(state.extraButtons.before),\n this.modelData.detoolbarItems?.map((item, index) => {\n const toolbarItemNode = this.renderToolbarItem(item);\n // 绘制指定位置后的额外按钮\n if (state.extraButtons[index]?.length) {\n return [\n toolbarItemNode,\n this.renderExtraButtons(state.extraButtons[index]),\n ];\n }\n return toolbarItemNode;\n }),\n // 绘制最后方的额外按钮\n state.extraButtons.after?.length > 0 &&\n this.renderExtraButtons(state.extraButtons.after),\n ];\n }\n\n return (\n <iBizControlBase\n controller={this.c}\n class={[this.ns.m(state.viewMode.toLowerCase())]}\n >\n {content}\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 ToolbarProvider\n * @implements {IControlProvider}\n */\nexport class ToolbarProvider implements IControlProvider {\n component: string = 'IBizToolbarControl';\n}\n","import { ControlType, registerControlProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { ToolbarControl } from './toolbar';\nimport { ToolbarProvider } from './toolbar.provider';\n\nexport const IBizToolbarControl = withInstall(\n ToolbarControl,\n function (v: App) {\n v.component(ToolbarControl.name, ToolbarControl);\n registerControlProvider(ControlType.TOOLBAR, () => new ToolbarProvider());\n },\n);\n\nexport default IBizToolbarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType } from 'vue';\nimport { ICaptionBar } from '@ibiz/model-core';\nimport './caption-bar.scss';\nimport { CaptionBarController, IControlProvider } from '@ibiz-template/runtime';\n\nexport const CaptionBarControl = defineComponent({\n name: 'IBizCaptionBarControl',\n props: {\n modelData: {\n type: Object as PropType<ICaptionBar>,\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 },\n setup() {\n const c = useControlController(\n (...args) => new CaptionBarController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n return { c, ns };\n },\n render() {\n return (\n <iBizControlBase controller={this.c} class={[this.ns.b()]}>\n <div\n class={[\n this.ns.b('caption'),\n this.ns.is('show-icon', !!this.c.model.sysImage),\n ]}\n >\n {this.c.model.sysImage && (\n <iBizIcon\n class={[this.ns.be('caption', 'icon')]}\n icon={this.c.model.sysImage}\n ></iBizIcon>\n )}\n {this.c.state.caption}\n </div>\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 CaptionBarProvider\n * @implements {IControlProvider}\n */\nexport class CaptionBarProvider implements IControlProvider {\n component: string = 'IBizCaptionBarControl';\n}\n","import { ControlType, registerControlProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { CaptionBarControl } from './caption-bar';\nimport { CaptionBarProvider } from './caption-bar.provider';\n\nexport const IBizCaptionBarControl = withInstall(\n CaptionBarControl,\n function (v: App) {\n v.component(CaptionBarControl.name, CaptionBarControl);\n registerControlProvider(\n ControlType.CAPTIONBAR,\n () => new CaptionBarProvider(),\n );\n },\n);\n\nexport default IBizCaptionBarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport {\n IDEDataView,\n ILayoutPanel,\n IUIActionGroupDetail,\n} from '@ibiz/model-core';\nimport {\n DataViewControlController,\n IControlProvider,\n IMDControlGroupState,\n ISortItem,\n} from '@ibiz-template/runtime';\nimport './data-view.scss';\nimport { usePagination } from '../../util';\n\nexport const DataViewControl = defineComponent({\n name: 'IBizDataViewControl',\n props: {\n modelData: { type: Object as PropType<IDEDataView>, required: true },\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 /**\n * 部件行数据默认激活模式\n * - 0 不激活\n * - 1 单击激活\n * - 2 双击激活(默认值)\n *\n * @type {(number | 0 | 1 | 2)}\n */\n mdctrlActiveMode: { type: Number, default: undefined },\n singleSelect: { type: Boolean, default: undefined },\n loadDefault: { type: Boolean, default: true },\n },\n setup(props) {\n const c = useControlController(\n (...args) => new DataViewControlController<IDEDataView>(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const classNames = computed(() => {\n return [ns.is('enable-page', c.model.enablePagingBar === true)];\n });\n\n // 是否可以加载更多\n const isLodeMoreDisabled = computed(() => {\n if (c.model.enablePagingBar === true) {\n return true;\n }\n return (\n c.state.items.length >= c.state.total ||\n c.state.isLoading ||\n c.state.total <= c.state.size\n );\n });\n\n const { onPageChange, onPageRefresh, onPageSizeChange } = usePagination(c);\n\n // 行单击事件\n const onRowClick = (item: IData, event: MouseEvent): Promise<void> => {\n event.stopPropagation();\n return c.onRowClick(item);\n };\n\n // 行双击事件\n const onDbRowClick = (item: IData, event: MouseEvent): Promise<void> => {\n event.stopPropagation();\n return c.onDbRowClick(item);\n };\n\n // 绘制项布局面板\n const renderPanelItem = (item: IData, modelData: ILayoutPanel): VNode => {\n const { context, params } = c;\n return (\n <iBizControlShell\n data={item}\n modelData={modelData}\n context={context}\n params={params}\n onClick={(event: MouseEvent): Promise<void> =>\n onRowClick(item, event)\n }\n onDblclick={(event: MouseEvent): Promise<void> =>\n onDbRowClick(item, event)\n }\n ></iBizControlShell>\n );\n };\n // 绘制项行为\n const renderItemAction = (item: IData): VNode => {\n return (\n <iBizActionToolbar\n class={ns.bem('item-content', 'bottom', 'actions')}\n action-details={\n c.getOptItemModel()!.deuiactionGroup?.uiactionGroupDetails\n }\n actions-state={c.getOptItemAction(item)}\n onActionClick={(\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ): Promise<void> => c.onActionClick(detail, item, event)}\n ></iBizActionToolbar>\n );\n };\n\n // 绘制默认项\n const renderDefaultItem = (item: IData): VNode => {\n return (\n <div class={ns.b('item-content')}>\n <div class={ns.be('item-content', 'top')}>\n <div class={ns.bem('item-content', 'top', 'title')}>\n {item.srfmajortext}\n </div>\n <div class={ns.bem('item-content', 'top', 'description')}>\n {item.content}\n </div>\n </div>\n {c.getOptItemModel() ? (\n <div class={ns.be('item-content', 'bottom')}>\n {renderItemAction(item)}\n </div>\n ) : null}\n </div>\n );\n };\n\n // 绘制卡片\n const renderCard = (item: IData): VNode => {\n // 是否选中数据\n const findIndex = c.state.selectedData.findIndex(data => {\n return data.srfkey === item.srfkey;\n });\n const cardClass = [ns.b('item'), ns.is('active', findIndex !== -1)];\n const cardStyle = {};\n if (c.model.cardWidth) {\n Object.assign(cardStyle, {\n width: `${c.model.cardWidth}px`,\n });\n }\n if (c.model.cardHeight) {\n Object.assign(cardStyle, {\n height: `${c.model.cardHeight}px`,\n });\n }\n const panel = props.modelData.itemLayoutPanel;\n\n return (\n <el-card\n shadow='hover'\n class={cardClass}\n body-style={cardStyle}\n onClick={(event: MouseEvent): Promise<void> =>\n onRowClick(item, event)\n }\n onDblclick={(event: MouseEvent): Promise<void> =>\n onDbRowClick(item, event)\n }\n >\n {panel ? renderPanelItem(item, panel) : renderDefaultItem(item)}\n </el-card>\n );\n };\n\n // 绘制分组\n const renderGroup = (group: IMDControlGroupState): VNode => {\n const { cardColXS, cardColSM, cardColMD, cardColLG } = c.model;\n return (\n <div class={ns.be('group-content', 'item')}>\n <div class={ns.be('group-content', 'item-header')}>\n <span class={ns.be('group-content', 'item-title')}>\n {group.caption}\n </span>\n <span class={ns.be('group-content', 'item-action')}>\n {c.model.groupUIActionGroup && group.groupActionGroupState && (\n <iBizActionToolbar\n class={ns.be('group-content', 'header-actions')}\n action-details={\n c.model.groupUIActionGroup.uiactionGroupDetails\n }\n actions-state={group.groupActionGroupState}\n onActionClick={(\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ) => {\n c.onGroupToolbarClick(detail, event, group);\n }}\n ></iBizActionToolbar>\n )}\n </span>\n </div>\n {cardColXS || cardColSM || cardColMD || cardColLG ? (\n <el-row class={ns.be('group-content', 'item-row')}>\n {group.children.length > 0 ? (\n group.children.map(child => {\n return (\n <el-col\n xs={cardColXS}\n sm={cardColSM}\n md={cardColMD}\n lg={cardColLG}\n class={ns.be('group-content', 'item-col')}\n >\n {renderCard(child)}\n </el-col>\n );\n })\n ) : (\n <div class={ns.bem('group-content', 'item', 'empty')}>\n 无数据\n </div>\n )}\n </el-row>\n ) : (\n <div class={ns.be('group-content', 'item-content')}>\n {group.children.length > 0 ? (\n group.children.map(child => {\n return renderCard(child);\n })\n ) : (\n <div class={ns.bem('group-content', 'item', 'empty')}>\n 无数据\n </div>\n )}\n </div>\n )}\n </div>\n );\n };\n\n // 绘制卡片内容\n const renderDataViewContent = (): VNode | VNode[] => {\n const { cardColXS, cardColSM, cardColMD, cardColLG } = c.model;\n if (c.model.enableGroup) {\n return (\n <div class={ns.b('group-content')}>\n {c.state.groups.map(group => {\n return (\n <div class={[ns.b('scroll-item')]}>{renderGroup(group)}</div>\n );\n })}\n </div>\n );\n }\n if (cardColXS || cardColSM || cardColMD || cardColLG) {\n return (\n <el-row class={[ns.b('item-row')]}>\n {c.state.items.map(item => {\n return (\n <el-col\n xs={cardColXS}\n sm={cardColSM}\n md={cardColMD}\n lg={cardColLG}\n class={[ns.b('item-col')]}\n >\n {renderCard(item)}\n </el-col>\n );\n })}\n </el-row>\n );\n }\n return c.state.items.map(item => {\n return <div class={[ns.b('scroll-item')]}>{renderCard(item)}</div>;\n });\n };\n\n // 绘制有数据的时候的呈现\n const renderHasData = (): VNode => {\n return (\n <div\n class={[ns.b('scroll'), ns.e('content')]}\n v-infinite-scroll={(): Promise<void> => c.loadMore()}\n infinite-scroll-distance={10}\n infinite-scroll-disabled={isLodeMoreDisabled.value}\n >\n {renderDataViewContent()}\n </div>\n );\n };\n\n const renderNoData = (): VNode | undefined => {\n // 未加载不显示无数据\n const { isLoaded } = c.state;\n if (!isLoaded) {\n return;\n }\n return (\n <iBizNoData\n class={ns.e('content')}\n text={c.model.emptyText}\n emptyTextLanguageRes={c.model.emptyTextLanguageRes}\n ></iBizNoData>\n );\n };\n\n return {\n c,\n ns,\n classNames,\n renderHasData,\n renderNoData,\n onPageChange,\n onPageRefresh,\n onPageSizeChange,\n };\n },\n render() {\n const { items, isCreated } = this.c.state;\n const { enablePagingBar } = this.c.model;\n\n let content = null;\n if (isCreated) {\n content = [\n this.c.state.noSort ? null : (\n <iBizSortBar\n onSortChange={(item: ISortItem, order: 'asc' | 'desc') => {\n this.c.setSort(item.key, order);\n this.c.load();\n }}\n sortItems={this.c.state.sortItems}\n ></iBizSortBar>\n ),\n items.length > 0 ? this.renderHasData() : this.renderNoData(),\n enablePagingBar ? (\n <iBizPagination\n class={this.ns.e('pagination')}\n total={this.c.state.total}\n curPage={this.c.state.curPage}\n size={this.c.state.size}\n onChange={this.onPageChange}\n onPageSizeChange={this.onPageSizeChange}\n onPageRefresh={this.onPageRefresh}\n ></iBizPagination>\n ) : null,\n ];\n }\n\n return (\n <iBizControlBase\n class={[this.ns.is('enable-page', !!enablePagingBar)]}\n controller={this.c}\n >\n {content}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 数据视图(卡片)部件适配器\n *\n * @export\n * @class DataViewControlProvider\n * @implements {IControlProvider}\n */\nexport class DataViewControlProvider implements IControlProvider {\n component: string = 'IBizDataViewControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { DataViewControl } from './data-view';\nimport { DataViewControlProvider } from './data-view.provider';\n\nexport * from './data-view.provider';\n\nexport const IBizDataViewControl = withInstall(\n DataViewControl,\n function (v: App) {\n v.component(DataViewControl.name, DataViewControl);\n registerControlProvider(\n ControlType.DATAVIEW,\n () => new DataViewControlProvider(),\n );\n },\n);\n\nexport default IBizDataViewControl;\n","import { RuntimeError } from '@ibiz-template/core';\nimport { ITreeController, ITreeNodeData } from '@ibiz-template/runtime';\nimport { ElTree } from 'element-plus';\nimport { debounce } from 'lodash-es';\nimport { Ref } from 'vue';\n\n/**\n * 根据id查找树节点数据对象\n * @author lxm\n * @date 2023-09-28 03:45:35\n * @export\n * @param {string} id\n * @param {ITreeController} c\n * @return {*} {(ITreeNodeData | undefined)}\n */\nexport function findNodeData(\n id: string,\n c: ITreeController,\n): ITreeNodeData | undefined {\n return c.state.items.find(item => item.id === id);\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useElTreeUtil(\n treeRef: Ref<InstanceType<typeof ElTree> | null>,\n c: ITreeController,\n) {\n const getTreeInstance = () => {\n const elTree = treeRef.value;\n if (!elTree) {\n throw new RuntimeError('找不到el-tree实例对象');\n }\n return elTree;\n };\n\n const _updateUI = () => {\n const elTree = treeRef.value;\n if (!elTree) {\n setTimeout(() => {\n _updateUI();\n }, 200);\n return;\n }\n // 设置节点展开\n Object.values(elTree.store.nodesMap).forEach(node => {\n const shouldExpanded = c.state.expandedKeys.includes(node.data.id);\n if (shouldExpanded !== node.expanded) {\n if (shouldExpanded) {\n node.expand();\n } else {\n node.collapse();\n }\n }\n });\n // 设置选中状态。\n if (c.state.singleSelect) {\n treeRef.value!.setCurrentKey(c.state.selectedData[0]?.id || null);\n } else {\n // el-tree,会把没选中的反选,且不触发check事件\n elTree.setCheckedKeys(c.state.selectedData.map(item => item.id));\n }\n };\n\n /**\n * 更新树的UI状态,如选中状态和展开状态。\n * 在树组件的loadData和调用updateKeyChildren之后去更新\n * 加了防抖,所以尽可能多的调用,确保状态 todo\n * @author lxm\n * @date 2023-09-28 03:36:44\n */\n const updateUI = debounce(_updateUI, 500) as typeof _updateUI;\n\n /**\n * 切换节点的展开\n * @author lxm\n * @date 2023-11-08 03:57:27\n * @param {string} id\n */\n const triggerNodeExpand = (id: string): boolean | undefined => {\n const elTree = getTreeInstance();\n const target = elTree.store.nodesMap[id];\n if (target) {\n if (target.expanded) {\n target.collapse();\n return false;\n }\n target.expand();\n return true;\n }\n };\n\n return { getTreeInstance, updateUI, triggerNodeExpand };\n}\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport {\n computed,\n defineComponent,\n nextTick,\n PropType,\n ref,\n resolveComponent,\n watch,\n} from 'vue';\nimport { MenuItem } from '@imengyu/vue3-context-menu';\nimport { createUUID } from 'qx-util';\nimport {\n IDETBGroupItem,\n IDETBRawItem,\n IDETBUIActionItem,\n IDEToolbarItem,\n IDETree,\n IDETreeNode,\n} from '@ibiz/model-core';\nimport {\n IButtonContainerState,\n IButtonState,\n IControlProvider,\n ITreeNodeData,\n TreeController,\n} from '@ibiz-template/runtime';\nimport './tree.scss';\nimport { RuntimeError } from '@ibiz-template/core';\nimport { ElTree } from 'element-plus';\nimport { findNodeData, useElTreeUtil } from './el-tree-util';\n\nexport const TreeControl = defineComponent({\n name: 'IBizTreeControl',\n props: {\n modelData: { type: Object as PropType<IDETree>, required: true },\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 /**\n * 部件行数据默认激活模式\n * - 0 不激活\n * - 1 单击激活\n * - 2 双击激活(默认值)\n *\n * @type {(number | 0 | 1 | 2)}\n */\n mdctrlActiveMode: { type: Number, default: undefined },\n\n /**\n * 是否为单选\n * - true 单选\n * - false 多选\n *\n * @type {(Boolean)}\n */\n singleSelect: { type: Boolean, default: undefined },\n navigational: { type: Boolean, default: undefined },\n defaultExpandedKeys: { type: Array as PropType<string[]> },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController((...args) => new TreeController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const treeRef = ref<InstanceType<typeof ElTree> | null>(null);\n\n const { updateUI, triggerNodeExpand } = useElTreeUtil(treeRef, c);\n\n /**\n * 创建新的节点对象,隔离组件数据和controller数据\n * @author lxm\n * @date 2023-08-30 09:35:25\n * @param {ITreeNodeData[]} nodes\n * @return {*} {IData[]}\n */\n const toElNodes = (nodes: ITreeNodeData[]): IData[] => {\n return nodes.map(node => ({\n id: node.id,\n leaf: node.leaf,\n }));\n };\n\n // el-treeUI更新子节点\n c.evt.on('onAfterRefreshParent', event => {\n if (treeRef.value) {\n const { parentNode, children } = event;\n treeRef.value!.updateKeyChildren(parentNode.id, toElNodes(children));\n updateUI();\n }\n });\n\n /** 树展示数据 */\n const treeData = computed(() => {\n if (!c.state.isLoaded) {\n return [];\n }\n return c.model.rootVisible\n ? c.state.rootNodes\n : c.state.rootNodes.reduce<ITreeNodeData[]>((result, nodeData) => {\n if (nodeData.children) {\n return result.concat(nodeData.children);\n }\n return result;\n }, []);\n });\n\n // 根节点数据变更时重绘tree\n const treeRefreshKey = ref('');\n watch(treeData, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n treeRefreshKey.value = createUUID();\n }\n });\n\n /**\n * 触发节点加载数据\n * @author lxm\n * @date 2023-05-29 09:16:07\n * @param {IData} item\n * @param {(nodes: IData[]) => void} callback\n */\n const loadData = async (\n item: IData,\n callback: (nodes: IData[]) => void,\n ) => {\n let nodes: ITreeNodeData[];\n if (item.level === 0) {\n nodes = treeData.value;\n ibiz.log.debug('初始加载');\n } else {\n const nodeData = findNodeData(item.data.id, c)!;\n if (nodeData.children) {\n ibiz.log.debug('节点展开加载-本地', nodeData);\n nodes = nodeData.children;\n } else {\n ibiz.log.debug('节点展开加载-远程', nodeData);\n nodes = await c.loadNodes(nodeData);\n }\n }\n ibiz.log.debug('给树返回值', nodes);\n\n callback(toElNodes(nodes));\n updateUI();\n };\n\n // 值变更优化,加载成功后的值变更需要等渲染完成之后执行,其他情况不用\n let selectionWait = false;\n c.evt.on('onLoadSuccess', () => {\n selectionWait = true;\n setTimeout(() => {\n selectionWait = false;\n }, 200);\n });\n\n // 选中数据回显\n c.evt.on('onSelectionChange', async () => {\n if (selectionWait) {\n await nextTick();\n }\n if (c.state.singleSelect) {\n treeRef.value!.setCurrentKey(c.state.selectedData[0]?.id || null);\n } else {\n // el-tree,会把没选中的反选,且不触发check事件\n treeRef.value!.setCheckedKeys(\n c.state.selectedData.map(item => item.id),\n );\n }\n });\n\n /**\n * 多选时选中节点变更\n */\n const onCheck = (\n nodeData: ITreeNodeData,\n opts: { checkedNodes: ITreeNodeData[] },\n ) => {\n const { checkedNodes } = opts;\n c.setSelection(checkedNodes);\n };\n\n let forbidClick: boolean = false;\n /**\n * 节点单击事件\n */\n const onNodeClick = (nodeData: ITreeNodeData, evt: MouseEvent) => {\n evt.stopPropagation();\n if (forbidClick) {\n return;\n }\n\n // 导航树节点不配置导航视图的时候,只切换展开状态\n if (c.state.navigational) {\n const nodeModel = c.getNodeModel(nodeData.nodeId);\n if (!nodeModel?.navAppViewId) {\n const expanded = triggerNodeExpand(nodeData.id);\n c.onExpandChange(nodeData, expanded!);\n return;\n }\n }\n\n c.onTreeNodeClick(nodeData);\n forbidClick = true;\n setTimeout(() => {\n forbidClick = false;\n }, 200);\n };\n\n /**\n * 节点双击事件\n */\n const onNodeDbClick = (nodeData: ITreeNodeData, evt: MouseEvent) => {\n evt.stopPropagation();\n c.onDbTreeNodeClick(nodeData);\n };\n\n // *上下文菜单相关 /\n\n let ContextMenu: IData;\n c.evt.on('onMounted', () => {\n // 有上下文菜单时加载组件\n if (Object.values(c.contextMenus).length > 0) {\n const importMenu = () => import('@imengyu/vue3-context-menu');\n importMenu().then(value => {\n ContextMenu = value.default;\n if (ContextMenu.default && !ContextMenu.showContextMenu) {\n ContextMenu = ContextMenu.default;\n }\n });\n }\n });\n\n const iBizRawItem = resolveComponent('IBizRawItem');\n const iBizIcon = resolveComponent('IBizIcon');\n\n /**\n * 计算上下文菜单组件配置项集合\n */\n const calcContextMenuItems = (\n toolbarItems: IDEToolbarItem[],\n nodeData: ITreeNodeData,\n evt: MouseEvent,\n menuState: IButtonContainerState,\n ): MenuItem[] => {\n const result: MenuItem[] = [];\n toolbarItems.forEach(item => {\n if (item.itemType === 'SEPERATOR') {\n result.push({\n divided: 'self',\n });\n return;\n }\n\n const buttonState = menuState[item.id!] as IButtonState;\n if (buttonState && !buttonState.visible) {\n return;\n }\n\n // 除分隔符之外的公共部分\n const menuItem: MenuItem = {};\n if (item.showCaption && item.caption) {\n menuItem.label = item.caption;\n }\n if (item.sysImage && item.showIcon) {\n menuItem.icon = <iBizIcon icon={item.sysImage}></iBizIcon>;\n }\n\n // 界面行为项\n if (item.itemType === 'DEUIACTION') {\n menuItem.disabled = buttonState.disabled;\n menuItem.clickClose = true;\n const { uiactionId } = item as IDETBUIActionItem;\n if (uiactionId) {\n menuItem.onClick = () => {\n c.doUIAction(uiactionId, nodeData, evt);\n };\n }\n } else if (item.itemType === 'RAWITEM') {\n const { rawItem } = item as IDETBRawItem;\n if (rawItem) {\n menuItem.label = (\n <iBizRawItem rawItem={item as IDETBRawItem}></iBizRawItem>\n );\n }\n } else if (item.itemType === 'ITEMS') {\n // 分组项绘制子菜单\n if ((item as IDETBGroupItem).detoolbarItems?.length) {\n menuItem.children = calcContextMenuItems(\n (item as IDETBGroupItem).detoolbarItems!,\n nodeData,\n evt,\n menuState,\n );\n }\n }\n result.push(menuItem);\n });\n\n return result;\n };\n\n /**\n * 节点右键菜单点击事件\n */\n const onNodeContextmenu = async (\n nodeData: ITreeNodeData,\n evt: MouseEvent,\n ) => {\n // 阻止原生浏览器右键菜单打开\n evt.preventDefault();\n evt.stopPropagation();\n const nodeModel = c.getNodeModel(nodeData.nodeId);\n if (!nodeModel?.decontextMenu) {\n return;\n }\n const contextMenuC = c.contextMenus[nodeModel.decontextMenu.id!];\n\n if (!contextMenuC.model.detoolbarItems) {\n return;\n }\n\n // 更新菜单的权限状态\n await contextMenuC.calcButtonState(\n nodeData.deData || (nodeData.srfkey ? nodeData : undefined),\n nodeModel.appDataEntityId,\n );\n const menuState = contextMenuC.state.buttonsState;\n\n const menus: MenuItem[] = calcContextMenuItems(\n contextMenuC.model.detoolbarItems,\n nodeData,\n evt,\n menuState,\n );\n if (!menus.length) {\n return;\n }\n\n ContextMenu.showContextMenu({\n x: evt.x,\n y: evt.y,\n customClass: ns.b('context-menu'),\n items: menus,\n });\n };\n\n /**\n * 绘制上下文菜单触发图标\n * @param nodeModel\n * @param nodeData\n * @returns\n */\n const renderContextMenu = (\n nodeModel: IDETreeNode,\n nodeData: ITreeNodeData,\n ) => {\n if (!nodeModel?.decontextMenu?.detoolbarItems?.length) {\n return;\n }\n\n return (\n <div\n class={ns.b('context-menu-trigger')}\n onClick={(evt: MouseEvent) => onNodeContextmenu(nodeData, evt)}\n >\n <ion-icon\n class={ns.be('context-menu-trigger', 'caption-icon')}\n name='ellipsis-horizontal'\n />\n </div>\n );\n };\n\n const updateNodeExpand = (data: IData, expanded: boolean) => {\n const nodeData = findNodeData(data.id, c);\n if (!nodeData) {\n throw new RuntimeError(`没有找到id为${data.id}的节点`);\n }\n c.onExpandChange(nodeData, expanded);\n };\n\n return {\n c,\n ns,\n treeRef,\n treeData,\n treeRefreshKey,\n findNodeData,\n onCheck,\n onNodeClick,\n onNodeDbClick,\n onNodeContextmenu,\n loadData,\n renderContextMenu,\n updateNodeExpand,\n };\n },\n render() {\n return (\n <iBizControlBase controller={this.c} v-loading={this.c.state.isLoading}>\n {this.c.state.isLoaded && this.treeRefreshKey && (\n <el-tree\n ref={'treeRef'}\n key={this.treeRefreshKey}\n node-key='id'\n highlight-current\n // 点击节点的时候不展开\n expand-on-click-node={false}\n auto-expand-parent={false}\n show-checkbox={!this.c.state.singleSelect}\n check-strictly\n default-expanded-keys={this.c.state.expandedKeys}\n props={{\n label: 'text',\n children: 'children',\n isLeaf: 'leaf',\n }}\n lazy\n load={this.loadData}\n onCheck={this.onCheck}\n onNodeExpand={(data: IData) => {\n this.updateNodeExpand(data, true);\n }}\n onNodeCollapse={(data: IData) => {\n this.updateNodeExpand(data, false);\n }}\n >\n {{\n default: ({ data }: { data: IData }) => {\n const nodeData = this.findNodeData(data.id, this.c)!;\n if (!nodeData) {\n return null;\n }\n const nodeModel = this.c.getNodeModel(nodeData.nodeId)!;\n return (\n <div\n onDblclick={evt => this.onNodeDbClick(nodeData, evt)}\n onClick={evt => this.onNodeClick(nodeData, evt)}\n onContextmenu={evt => this.onNodeContextmenu(nodeData, evt)}\n class={[this.ns.b('node'), nodeModel.sysCss?.cssName]}\n >\n {nodeData.icon && (\n <iBizIcon\n class={this.ns.be('node', 'icon')}\n icon={nodeData.icon}\n ></iBizIcon>\n )}\n {nodeData.textHtml ? (\n <span\n class={this.ns.be('node', 'label')}\n v-html={nodeData.textHtml}\n ></span>\n ) : (\n <span class={this.ns.be('node', 'label')}>\n {nodeData.text}\n </span>\n )}\n {this.renderContextMenu(nodeModel, nodeData)}\n </div>\n );\n },\n }}\n </el-tree>\n )}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 树适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class TreeProvider\n * @implements {IControlProvider}\n */\nexport class TreeProvider implements IControlProvider {\n component: string = 'IBizTreeControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { TreeControl } from './tree';\nimport { TreeProvider } from './tree.provider';\n\nexport const IBizTreeControl = withInstall(TreeControl, function (v: App) {\n v.component(TreeControl.name, TreeControl);\n registerControlProvider(ControlType.TREEVIEW, () => new TreeProvider());\n});\n\nexport default IBizTreeControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, h, PropType, resolveComponent } from 'vue';\nimport { IAppDEGridView, IDEPickupViewPanel } from '@ibiz/model-core';\nimport {\n EventBase,\n IControlProvider,\n IPickupGridViewEvent,\n IPickupGridViewState,\n IViewController,\n PickupViewPanelController,\n} from '@ibiz-template/runtime';\nimport './pickup-view-panel.scss';\n\nexport const PickupViewPanelControl = defineComponent({\n name: 'IBizPickupViewPanelControl',\n props: {\n modelData: { type: Object as PropType<IDEPickupViewPanel>, required: true },\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 /**\n * 是否为单选\n * - true 单选\n * - false 多选\n *\n * @type {(Boolean)}\n */\n singleSelect: { type: Boolean, default: true },\n noLoadDefault: { type: Boolean, default: false },\n },\n setup() {\n const c = useControlController(\n (...args) => new PickupViewPanelController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const onCreated = (event: EventBase): void => {\n c.setEmbedView(\n event.view as IViewController<\n IAppDEGridView,\n IPickupGridViewState,\n IPickupGridViewEvent\n >,\n );\n };\n return {\n c,\n ns,\n onCreated,\n };\n },\n render() {\n return (\n <iBizControlBase controller={this.c}>\n {this.c.state.isCreated &&\n (this.$slots.default\n ? this.$slots.default({\n context: this.c.state.context,\n params: this.c.state.params,\n state: {\n singleSelect: this.c.state.singleSelect,\n noLoadDefault: this.noLoadDefault,\n },\n onCreated: this.onCreated,\n })\n : h(resolveComponent('IBizViewShell'), {\n context: this.c.state.context,\n params: this.c.state.params,\n viewId: this.c.model.embeddedAppDEViewId,\n state: {\n singleSelect: this.c.state.singleSelect,\n noLoadDefault: this.noLoadDefault,\n },\n onCreated: this.onCreated,\n }))}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 选择视图面板适配器\n *\n * @export\n * @class PickupViewPanelProvider\n * @implements {IControlProvider}\n */\nexport class PickupViewPanelProvider implements IControlProvider {\n component: string = 'IBizPickupViewPanelControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { PickupViewPanelControl } from './pickup-view-panel';\nimport { PickupViewPanelProvider } from './pickup-view-panel.provider';\n\nexport const IBizPickupViewPanelControl = withInstall(\n PickupViewPanelControl,\n function (v: App) {\n v.component(PickupViewPanelControl.name, PickupViewPanelControl);\n registerControlProvider(\n ControlType.PICKUP_VIEW_PANEL,\n () => new PickupViewPanelProvider(),\n );\n },\n);\n\nexport default IBizPickupViewPanelControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IAppDETabExplorerView, ITabExpPanel } from '@ibiz/model-core';\nimport './tab-exp-panel.scss';\nimport {\n IControlProvider,\n TabExpPanelController,\n} from '@ibiz-template/runtime';\n\nexport const TabExpPanelControl = defineComponent({\n name: 'IBizTabExpPanelControl',\n props: {\n modelData: { type: Object as PropType<ITabExpPanel>, required: true },\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 defaultTabName: { type: String, required: false },\n },\n setup() {\n const c = useControlController(\n (...args) => new TabExpPanelController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const handleTabChange = (): void => {\n c.handleTabChange();\n };\n\n const tabPosition =\n (c.view.model as IAppDETabExplorerView).tabLayout?.toLowerCase() || 'top';\n\n return {\n c,\n ns,\n tabPosition,\n handleTabChange,\n };\n },\n render() {\n const { isCreated, tabPages } = this.c.state;\n return (\n <iBizControlBase controller={this.c}>\n {isCreated && (\n <el-tabs\n v-model={this.c.state.activeName}\n tabPosition={this.tabPosition}\n onTabChange={this.handleTabChange}\n >\n {tabPages.map(tab => {\n return (\n <el-tab-pane\n class={[this.ns.e('tab-item')]}\n label={tab.caption}\n name={tab.tabTag}\n >\n {{\n label: (): VNode => {\n return (\n <span class={[...tab.class]}>\n {this.c.isShowIcon && (\n <iBizIcon icon={tab.sysImage} />\n )}\n {this.c.isShowCaption && tab.caption}\n </span>\n );\n },\n }}\n </el-tab-pane>\n );\n })}\n </el-tabs>\n )}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 分页导航面板\n *\n * @export\n * @class TabExpPanelProvider\n * @implements {IControlProvider}\n */\nexport class TabExpPanelProvider implements IControlProvider {\n component: string = 'IBizTabExpPanelControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { TabExpPanelControl } from './tab-exp-panel';\nimport { TabExpPanelProvider } from './tab-exp-panel.provider';\n\nexport const IBizTabExpPanelControl = withInstall(\n TabExpPanelControl,\n function (v: App) {\n v.component(TabExpPanelControl.name, TabExpPanelControl);\n registerControlProvider(\n ControlType.TAB_EXP_PANEL,\n () => new TabExpPanelProvider(),\n );\n },\n);\n\nexport default IBizTabExpPanelControl;\n","import { Namespace } from '@ibiz-template/core';\nimport { IExpBarControlController } from '@ibiz-template/runtime';\nimport { debounce } from 'lodash-es';\nimport { VNode } from 'vue';\nimport { useRoute } from 'vue-router';\nimport {\n onRouteChange,\n route2routePath,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './render-util.scss';\n\n/**\n * 导航栏绘制工具(标题,快速搜索)\n * @author lxm\n * @date 2023-08-02 08:06:38\n * @export\n * @param {ExpBarControlController} c\n * @param {Namespace} ns\n * @return {*} {({ renderTitle: () => VNode | null; renderQuickSearch: () => VNode | null })}\n */\nexport function useExpBarRender(\n c: IExpBarControlController,\n ns: Namespace,\n): { renderTitle: () => VNode | null; renderQuickSearch: () => VNode | null } {\n const expBarNs = useNamespace('exp-bar');\n\n const debounceSearch = debounce(() => {\n c.load();\n }, 500);\n\n const onInput = (value: string): void => {\n c.state.query = value;\n debounceSearch();\n };\n\n const renderTitle = (): VNode | null => {\n const { model } = c;\n if (!model.showTitleBar) {\n return null;\n }\n let title = model.title;\n if (model.titleLanguageRes) {\n title = ibiz.i18n.t(model.titleLanguageRes.lanResTag!, model.title);\n }\n return (\n <div class={[ns.b('caption'), expBarNs.b('caption')]}>\n {model.sysImage && (\n <iBizIcon\n class={[expBarNs.be('caption', 'icon')]}\n icon={model.sysImage}\n ></iBizIcon>\n )}\n {title && <span class={[ns.be('caption', 'text')]}>{title}</span>}\n </div>\n );\n };\n\n const renderQuickSearch = (): VNode | null => {\n const { model } = c;\n if (!model.enableSearch) {\n return null;\n }\n return (\n <el-input\n model-value={c.state.query}\n class={[ns.b('quick-search'), expBarNs.b('quick-search')]}\n placeholder={c.state.placeHolder}\n onInput={onInput}\n >\n {{\n prefix: (): VNode => {\n return <ion-icon class={ns.e('search-icon')} name='search' />;\n },\n }}\n </el-input>\n );\n };\n\n return { renderTitle, renderQuickSearch };\n}\n\n/**\n * 监听路由变更,当自身所处的路由变更时触发导航栏控制器onRouterChange\n * @author lxm\n * @date 2023-09-14 10:02:41\n * @export\n * @param {IExpBarControlController} c\n */\nexport function useWatchRouteChange(c: IExpBarControlController): void {\n const depth = c.view.modal.routeDepth;\n if (depth) {\n const route = useRoute();\n let selfKey: string | undefined;\n onRouteChange(({ currentKey, fullPath }) => {\n if (!selfKey) {\n selfKey = currentKey;\n } else if (selfKey === currentKey) {\n const routePath = route2routePath(route);\n const { srfnav } = routePath.pathNodes[depth! - 1];\n c.onRouterChange({ srfnav: srfnav || '', path: fullPath });\n }\n }, depth);\n }\n}\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent, PropType, VNode } from 'vue';\nimport { ITreeExpBar } from '@ibiz/model-core';\nimport './tree-exp-bar.scss';\nimport { IControlProvider, TreeExpBarController } from '@ibiz-template/runtime';\nimport { useExpBarRender, useWatchRouteChange } from '../render-util';\n\nexport const TreeExpBarControl = defineComponent({\n name: 'IBizTreeExpBarControl',\n props: {\n modelData: { type: Object as PropType<ITreeExpBar>, required: true },\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 srfnav: { type: String, required: false },\n noNeedNavView: { type: Boolean, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new TreeExpBarController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const { renderTitle, renderQuickSearch } = useExpBarRender(c, ns);\n useWatchRouteChange(c);\n\n const navigational = computed(() => {\n return c.view.model.viewType !== 'DEMPICKUPVIEW2';\n });\n\n return {\n c,\n ns,\n navigational,\n renderTitle,\n renderQuickSearch,\n };\n },\n render() {\n const { state, XDataModel } = this.c;\n const { isCreated } = state;\n\n const slots: IData = {\n captionbar: this.renderTitle,\n searchbar: this.renderQuickSearch,\n };\n if (isCreated) {\n if (XDataModel) {\n const key = this.c.controlPanel ? XDataModel.name! : 'default';\n // 树自己绘制,要传递额外的参数\n slots[key] = (): VNode => {\n return (\n <iBizControlShell\n context={this.c.context}\n params={this.c.params}\n modelData={XDataModel}\n singleSelect={true}\n navigational={this.navigational}\n mdctrlActiveMode={1}\n loadDefault={false}\n default-expanded-keys={this.c.defaultExpandedKeys}\n ></iBizControlShell>\n );\n };\n }\n }\n return <iBizControlBase controller={this.c}>{slots}</iBizControlBase>;\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 树导航栏适配器\n *\n * @export\n * @class TreeExpBarProvider\n * @implements {IControlProvider}\n */\nexport class TreeExpBarProvider implements IControlProvider {\n component: string = 'IBizTreeExpBarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { TreeExpBarControl } from './tree-exp-bar';\nimport { TreeExpBarProvider } from './tree-exp-bar.provider';\n\nexport const IBizTreeExpBarControl = withInstall(\n TreeExpBarControl,\n function (v: App) {\n v.component(TreeExpBarControl.name, TreeExpBarControl);\n registerControlProvider(\n ControlType.TREE_EXP_BAR,\n () => new TreeExpBarProvider(),\n );\n },\n);\n\nexport default IBizTreeExpBarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IListExpBar } from '@ibiz/model-core';\nimport './list-exp-bar.scss';\nimport {\n ExpBarControlController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { useExpBarRender, useWatchRouteChange } from '../render-util';\n\nexport const ListExpBarControl = defineComponent({\n name: 'IBizListExpBarControl',\n props: {\n modelData: { type: Object as PropType<IListExpBar>, required: true },\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 srfnav: { type: String, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new ExpBarControlController<IListExpBar>(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const { renderTitle, renderQuickSearch } = useExpBarRender(c, ns);\n useWatchRouteChange(c);\n\n return {\n c,\n ns,\n renderTitle,\n renderQuickSearch,\n };\n },\n render() {\n const { isCreated } = this.c.state;\n const { XDataModel } = this.c;\n\n const slots: IData = {\n captionbar: this.renderTitle,\n searchbar: this.renderQuickSearch,\n };\n if (isCreated) {\n if (XDataModel) {\n // 列表自己绘制,要传递额外的参数\n const key = this.c.controlPanel ? XDataModel.name! : 'default';\n slots[key] = (): VNode => {\n return (\n <iBizControlShell\n context={this.c.context}\n params={this.c.params}\n modelData={XDataModel}\n singleSelect={true}\n mdctrlActiveMode={1}\n loadDefault={false}\n ></iBizControlShell>\n );\n };\n }\n }\n\n return <iBizControlBase controller={this.c}>{slots}</iBizControlBase>;\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 列表导航栏适配器\n *\n * @author zk\n * @date 2023-05-29 02:05:26\n * @export\n * @class ListExpBarProvider\n * @implements {IControlProvider}\n */\nexport class ListExpBarProvider implements IControlProvider {\n component: string = 'IBizListExpBarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ListExpBarControl } from './list-exp-bar';\nimport { ListExpBarProvider } from './list-exp-bar.provider';\n\nexport const IBizListExpBarControl = withInstall(\n ListExpBarControl,\n function (v: App) {\n v.component(ListExpBarControl.name, ListExpBarControl);\n registerControlProvider(\n ControlType.LIST_EXPBAR,\n () => new ListExpBarProvider(),\n );\n },\n);\n\nexport default IBizListExpBarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IGridExpBar } from '@ibiz/model-core';\nimport './grid-exp-bar.scss';\nimport {\n ExpBarControlController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { useExpBarRender, useWatchRouteChange } from '../render-util';\n\nexport const GridExpBarControl = defineComponent({\n name: 'IBizGridExpBarControl',\n props: {\n modelData: { type: Object as PropType<IGridExpBar>, required: true },\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 srfnav: { type: String, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new ExpBarControlController<IGridExpBar>(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const { renderTitle, renderQuickSearch } = useExpBarRender(c, ns);\n useWatchRouteChange(c);\n\n return {\n c,\n ns,\n renderTitle,\n renderQuickSearch,\n };\n },\n render() {\n const { isCreated } = this.c.state;\n const { XDataModel } = this.c;\n\n const slots: IData = {\n captionbar: this.renderTitle,\n searchbar: this.renderQuickSearch,\n };\n if (isCreated) {\n if (XDataModel) {\n const key = this.c.controlPanel ? XDataModel.name! : 'default';\n // 表格自己绘制,要传递额外的参数\n slots[key] = (): VNode => {\n return (\n <iBizControlShell\n context={this.c.context}\n params={this.c.params}\n modelData={XDataModel}\n singleSelect={true}\n mdctrlActiveMode={1}\n loadDefault={false}\n ></iBizControlShell>\n );\n };\n }\n }\n\n return <iBizControlBase controller={this.c}>{slots}</iBizControlBase>;\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 表格导航栏适配器\n *\n * @author zk\n * @date 2023-05-29 02:05:26\n * @export\n * @class GridExpBarProvider\n * @implements {IControlProvider}\n */\nexport class GridExpBarProvider implements IControlProvider {\n component: string = 'IBizGridExpBarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { GridExpBarControl } from './grid-exp-bar';\nimport { GridExpBarProvider } from './grid-exp-bar.provider';\n\nexport const IBizGridExpBarControl = withInstall(\n GridExpBarControl,\n function (v: App) {\n v.component(GridExpBarControl.name, GridExpBarControl);\n registerControlProvider(\n ControlType.GRID_EXPBAR,\n () => new GridExpBarProvider(),\n );\n },\n);\n\nexport default IBizGridExpBarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IDataViewExpBar } from '@ibiz/model-core';\nimport './data-view-exp-bar.scss';\nimport {\n ExpBarControlController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { useExpBarRender, useWatchRouteChange } from '../render-util';\n\nexport const DataViewExpBarControl = defineComponent({\n name: 'IBizDataViewExpBarControl',\n props: {\n modelData: { type: Object as PropType<IDataViewExpBar>, required: true },\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 srfnav: { type: String, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new ExpBarControlController<IDataViewExpBar>(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const { renderTitle, renderQuickSearch } = useExpBarRender(c, ns);\n useWatchRouteChange(c);\n\n return {\n c,\n ns,\n renderTitle,\n renderQuickSearch,\n };\n },\n render() {\n const { isCreated } = this.c.state;\n const { XDataModel } = this.c;\n\n const slots: IData = {\n captionbar: this.renderTitle,\n searchbar: this.renderQuickSearch,\n };\n if (isCreated) {\n if (XDataModel) {\n const key = this.c.controlPanel ? XDataModel.name! : 'default';\n // 卡片自己绘制,要传递额外的参数\n slots[key] = (): VNode => {\n return (\n <iBizControlShell\n context={this.c.context}\n params={this.c.params}\n modelData={XDataModel}\n singleSelect={true}\n mdctrlActiveMode={1}\n loadDefault={false}\n ></iBizControlShell>\n );\n };\n }\n }\n\n return <iBizControlBase controller={this.c}>{slots}</iBizControlBase>;\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 卡片导航栏适配器\n *\n * @author zk\n * @date 2023-05-29 02:05:26\n * @export\n * @class DataViewExpBarProvider\n * @implements {IControlProvider}\n */\nexport class DataViewExpBarProvider implements IControlProvider {\n component: string = 'IBizDataViewExpBarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { DataViewExpBarControl } from './data-view-view-exp-bar';\nimport { DataViewExpBarProvider } from './data-view-exp-bar.provider';\n\nexport const IBizDataViewExpBarControl = withInstall(\n DataViewExpBarControl,\n function (v: App) {\n v.component(DataViewExpBarControl.name, DataViewExpBarControl);\n registerControlProvider(\n ControlType.DATA_VIEW_EXPBAR,\n () => new DataViewExpBarProvider(),\n );\n },\n);\n\nexport default IBizDataViewExpBarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { ICalendarExpBar } from '@ibiz/model-core';\nimport './calendar-exp-bar.scss';\nimport {\n CalendarExpBarController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { useExpBarRender, useWatchRouteChange } from '../render-util';\n\nexport const CalendarExpBarControl = defineComponent({\n name: 'IBizCalendarExpBarControl',\n props: {\n modelData: { type: Object as PropType<ICalendarExpBar>, required: true },\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 srfnav: { type: String, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new CalendarExpBarController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const { renderTitle, renderQuickSearch } = useExpBarRender(c, ns);\n useWatchRouteChange(c);\n\n return {\n c,\n ns,\n renderTitle,\n renderQuickSearch,\n };\n },\n render() {\n const { state, XDataModel } = this.c;\n const { isCreated } = state;\n const slots: IData = {\n captionbar: this.renderTitle,\n searchbar: this.renderQuickSearch,\n };\n if (isCreated) {\n if (XDataModel) {\n const key = this.c.controlPanel ? XDataModel.name! : 'default';\n slots[key] = (): VNode => {\n return (\n <iBizControlShell\n context={this.c.context}\n params={this.c.params}\n modelData={XDataModel}\n singleSelect={true}\n mdctrlActiveMode={1}\n loadDefault={false}\n ></iBizControlShell>\n );\n };\n }\n }\n return <iBizControlBase controller={this.c}>{slots}</iBizControlBase>;\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 日历导航栏适配器\n *\n * @export\n * @class CalendarExpBarProvider\n * @implements {IControlProvider}\n */\nexport class CalendarExpBarProvider implements IControlProvider {\n component: string = 'IBizCalendarExpBarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { CalendarExpBarControl } from './calendar-exp-bar';\nimport { CalendarExpBarProvider } from './calendar-exp-bar.provider';\n\nexport const IBizCalendarExpBarControl = withInstall(\n CalendarExpBarControl,\n function (v: App) {\n v.component(CalendarExpBarControl.name, CalendarExpBarControl);\n registerControlProvider(\n ControlType.CALENDAR_EXPBAR,\n () => new CalendarExpBarProvider(),\n );\n },\n);\n\nexport default IBizCalendarExpBarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IChartExpBar } from '@ibiz/model-core';\nimport './chart-exp-bar.scss';\nimport {\n ChartExpBarController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { useExpBarRender, useWatchRouteChange } from '../render-util';\n\nexport const ChartExpBarControl = defineComponent({\n name: 'IBizChartExpBarControl',\n props: {\n modelData: { type: Object as PropType<IChartExpBar>, required: true },\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 srfnav: { type: String, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new ChartExpBarController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const { renderTitle, renderQuickSearch } = useExpBarRender(c, ns);\n useWatchRouteChange(c);\n\n return {\n c,\n ns,\n renderTitle,\n renderQuickSearch,\n };\n },\n render() {\n const { isCreated } = this.c.state;\n const { XDataModel } = this.c;\n\n const slots: IData = {\n captionbar: this.renderTitle,\n searchbar: this.renderQuickSearch,\n };\n if (isCreated) {\n if (XDataModel) {\n const key = this.c.controlPanel ? XDataModel.name! : 'default';\n slots[key] = (): VNode => {\n return (\n <iBizControlShell\n context={this.c.context}\n params={this.c.params}\n modelData={XDataModel}\n singleSelect={true}\n mdctrlActiveMode={1}\n loadDefault={false}\n ></iBizControlShell>\n );\n };\n }\n }\n\n return <iBizControlBase controller={this.c}>{slots}</iBizControlBase>;\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 图表导航栏适配器\n *\n * @export\n * @class ChartExpBarProvider\n * @implements {IControlProvider}\n */\nexport class ChartExpBarProvider implements IControlProvider {\n component: string = 'IBizChartExpBarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ChartExpBarControl } from './chart-exp-bar';\nimport { ChartExpBarProvider } from './chart-exp-bar.provider';\n\nexport const IBizChartExpBarControl = withInstall(\n ChartExpBarControl,\n function (v: App) {\n v.component(ChartExpBarControl.name, ChartExpBarControl);\n registerControlProvider(\n ControlType.CHART_EXPBAR,\n () => new ChartExpBarProvider(),\n );\n },\n);\n\nexport default IBizChartExpBarControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport { ISearchBar, ISearchBarGroup } from '@ibiz/model-core';\nimport './search-bar.scss';\nimport {\n IControlProvider,\n IOverlayPopoverContainer,\n SearchBarController,\n} from '@ibiz-template/runtime';\n\nexport const SearchBarControl = defineComponent({\n name: 'IBizSearchBarControl',\n props: {\n modelData: {\n type: Object as PropType<ISearchBar>,\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 },\n setup() {\n const c = useControlController(\n (...args) => new SearchBarController(...args),\n );\n\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const onSearch = (): void => {\n c.onSearch();\n };\n\n const onKeydown = (e: KeyboardEvent): void => {\n if (e.code === 'Enter') {\n onSearch();\n }\n };\n\n const cssVars = computed(() => {\n if (c.model.quickSearchWidth) {\n return ns.cssVarBlock({\n 'quick-search-width': `${c.model.quickSearchWidth}px`,\n });\n }\n return {};\n });\n\n const onGroupClick = (item: ISearchBarGroup) => {\n c.state.selectedGroupItem = item;\n onSearch();\n };\n\n if (\n c.model.enableGroup &&\n c.model.searchBarGroups &&\n c.model.searchBarGroups?.length > 0\n ) {\n c.state.selectedGroupItem = c.model.searchBarGroups[0];\n }\n\n const filterButtonRef = ref();\n let popover: IOverlayPopoverContainer | undefined;\n const showFilter = async () => {\n popover = ibiz.overlay.createPopover(\n () => {\n return (\n <iBizFilterTreeControl\n onClose={() => {\n if (popover) {\n popover.dismiss();\n }\n }}\n controller={c}\n ></iBizFilterTreeControl>\n );\n },\n undefined,\n { placement: 'bottom-end', autoClose: true },\n );\n popover.present(filterButtonRef.value.$el as HTMLElement);\n await popover.onWillDismiss();\n popover = undefined;\n };\n\n return {\n c,\n ns,\n cssVars,\n filterButtonRef,\n onSearch,\n onKeydown,\n onGroupClick,\n showFilter,\n };\n },\n render() {\n const quickSearchSlots: IData = {};\n\n if (this.c.model.enableFilter) {\n quickSearchSlots.append = () => {\n return (\n <el-button\n ref='filterButtonRef'\n type='primary'\n onClick={() => this.showFilter()}\n >\n <iBizIcon icon={{ cssClass: 'funnel-outline' }}></iBizIcon>\n </el-button>\n );\n };\n }\n\n return (\n <iBizControlBase\n controller={this.c}\n class={[this.ns.b()]}\n style={this.cssVars}\n >\n {this.c.model.enableGroup && (\n <div class={this.ns.b('quick-group')}>\n {this.c.model.searchBarGroups?.map(groupItem => {\n return (\n <span\n class={[\n this.ns.b('quick-group-item'),\n this.ns.is(\n 'selected',\n this.c.state.selectedGroupItem?.id === groupItem.id,\n ),\n ]}\n onClick={() => this.onGroupClick(groupItem)}\n >\n {groupItem.caption}\n </span>\n );\n })}\n </div>\n )}\n {this.c.model.enableQuickSearch && (\n <el-input\n v-model={this.c.state.query}\n class={this.ns.b('quick-search')}\n placeholder={this.c.placeHolder}\n clearable={true}\n onKeydown={this.onKeydown}\n suffix-icon={\n <ion-icon\n onClick={this.onSearch}\n class={this.ns.e('search-icon')}\n name='search'\n />\n }\n >\n {quickSearchSlots}\n </el-input>\n )}\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 SearchBarProvider\n * @implements {IControlProvider}\n */\nexport class SearchBarProvider implements IControlProvider {\n component: string = 'IBizSearchBarControl';\n}\n","import {\n IControlProvider,\n IFilterBranchNode,\n IFilterLeafNode,\n SearchBarController,\n ValueOP,\n} from '@ibiz-template/runtime';\nimport { SearchBarFilterController } from '@ibiz-template/runtime/out/controller/control/search-bar/search-bar-filter.controller';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, h, PropType, resolveComponent } from 'vue';\nimport './filter-tree.scss';\n\nconst FilterModes = [\n { valueOP: ValueOP.EQ, label: '等于(=)' },\n { valueOP: ValueOP.NOT_EQ, label: '不等于(<>)' },\n { valueOP: ValueOP.GT, label: '大于(>)' },\n { valueOP: ValueOP.GT_AND_EQ, label: '大于等于(>=)' },\n { valueOP: ValueOP.LT, label: '小于(<)' },\n { valueOP: ValueOP.LT_AND_EQ, label: '小于等于(<=)' },\n { valueOP: ValueOP.IS_NULL, label: '值为空(Nil)' },\n { valueOP: ValueOP.IS_NOT_NULL, label: '值不为空(NotNil)' },\n { valueOP: ValueOP.IN, label: '值在范围中(In)' },\n { valueOP: ValueOP.NOT_IN, label: '值不在范围中(NotIn)' },\n { valueOP: ValueOP.LIKE, label: '文本包含(%)' },\n { valueOP: ValueOP.LIFT_LIKE, label: '文本左包含(%#)' },\n { valueOP: ValueOP.RIGHT_LIKE, label: '文本右包含(#%)' },\n] as const;\n\nexport const FilterTreeControl = defineComponent({\n name: 'IBizFilterTreeControl',\n props: {\n controller: {\n type: Object as PropType<SearchBarController>,\n required: true,\n },\n provider: { type: Object as PropType<IControlProvider> },\n },\n emits: {\n close: () => true,\n },\n setup(props, { emit }) {\n const ns = useNamespace('filter-tree');\n\n const findFilterController = (\n fieldName: string | null,\n valueOP: string | null,\n ) => {\n return props.controller.filterControllers.find(item => {\n if (item.fieldName === fieldName) {\n // 有配属性搜索模式的匹配才是,没配的都是指向没配的哪个过滤项\n return item.valueOP ? item.valueOP === valueOP : true;\n }\n return false;\n });\n };\n\n const allFields: Array<{\n name: string;\n label: string;\n valueOPs: string[];\n }> = [];\n\n const getFilterModes = (fieldName: string | null) => {\n if (!fieldName) {\n return;\n }\n const field = allFields.find(item => item.name === fieldName);\n if (!field) {\n return;\n }\n return field.valueOPs;\n };\n\n props.controller.filterControllers.forEach(filterC => {\n let find = allFields.find(x => x.name === filterC.fieldName);\n if (find === undefined) {\n find = { name: filterC.fieldName, label: filterC.label, valueOPs: [] };\n allFields.push(find);\n }\n if (!filterC.valueOP) {\n find.valueOPs = FilterModes.map(item => item.valueOP);\n } else {\n find.valueOPs.push(filterC.valueOP);\n }\n });\n\n /**\n * 属性选择变更\n * @author lxm\n * @date 2023-10-16 05:02:07\n * @param {IFilterLeafNode} node\n * @param {string} field\n */\n const onFieldSelect = (node: IFilterLeafNode, field: string) => {\n node.field = field;\n };\n\n /**\n * 值操作模式选择变更\n * @author lxm\n * @date 2023-10-16 05:02:23\n * @param {IFilterLeafNode} node\n * @param {string} valueOP\n */\n const onValueOPSelect = (node: IFilterLeafNode, valueOP: string) => {\n node.valueOP = valueOP;\n };\n\n /**\n * 过滤分组逻辑类型变更\n * @author lxm\n * @date 2023-10-16 05:05:44\n * @param {IFilterBranchNode} node\n * @param {('AND' | 'OR')} logicType\n */\n const onGroupLogicTypeChange = (\n node: IFilterBranchNode,\n logicType: 'AND' | 'OR',\n ) => {\n node.logicType = logicType;\n };\n\n /**\n * 添加一个过滤组\n * @author lxm\n * @date 2023-10-16 05:02:43\n * @param {IFilterBranchNode} node\n */\n const addGroup = (node: IFilterBranchNode) => {\n node.children.push({\n leaf: false,\n logicType: 'AND',\n children: [{ leaf: true, field: null, valueOP: null, value: null }],\n });\n };\n\n /**\n * 添加一个过滤项\n * @author lxm\n * @date 2023-10-16 05:02:57\n * @param {IFilterBranchNode} node\n */\n const addItem = (node: IFilterBranchNode) => {\n node.children.push({\n leaf: true,\n field: null,\n valueOP: null,\n value: null,\n });\n };\n\n /**\n * 绘制编辑器\n * @param node\n * @param filterC\n * @returns\n */\n const renderEditor = (\n node: IFilterLeafNode,\n filterC: SearchBarFilterController,\n ) => {\n let editor = null;\n if (filterC.editorProvider) {\n const component = resolveComponent(filterC.editorProvider.formEditor);\n editor = h(component, {\n value: node.value,\n controller: filterC.editor,\n onChange: (val: unknown): void => {\n node.value = val;\n },\n });\n } else {\n editor = <not-supported-editor modelData={filterC.model.editor} />;\n }\n return <div class={ns.e('editor')}>{editor}</div>;\n };\n\n /**\n * 绘制过滤项\n * @param node\n * @returns\n */\n const renderFilterItem = (node: IFilterLeafNode) => {\n const filterC = findFilterController(node.field, node.valueOP);\n const availableModes = getFilterModes(node.field);\n return (\n <div class={ns.b('item')}>\n <el-select\n model-value={node.field}\n teleported={false}\n class={ns.e('field-select')}\n onChange={(field: string) => {\n onFieldSelect(node, field);\n }}\n >\n {allFields.map(field => {\n return (\n <el-option\n key={field.name}\n value={field.name}\n label={field.label}\n />\n );\n })}\n </el-select>\n {availableModes && availableModes.length > 0 && (\n <iBizFilterModeSelect\n class={ns.e('mode-select')}\n value={node.valueOP}\n modes={availableModes}\n onChange={(valueOP: string) => {\n onValueOPSelect(node, valueOP);\n }}\n ></iBizFilterModeSelect>\n )}\n {filterC && renderEditor(node, filterC)}\n </div>\n );\n };\n\n /**\n * 绘制过滤分组\n * @param node\n * @returns\n */\n const renderFilterGroup = (node: IFilterBranchNode) => {\n return (\n <div class={ns.b('group')}>\n <div class={ns.be('group', 'actions')}>\n <el-button\n text\n type='primary'\n onClick={() => {\n addGroup(node);\n }}\n >\n 添加组\n </el-button>\n <el-button\n text\n onClick={() => {\n addItem(node);\n }}\n >\n 添加项\n </el-button>\n <el-select\n model-value={node.logicType}\n teleported={false}\n class={ns.be('group', 'logic-type')}\n onChange={(logicType: 'AND' | 'OR') => {\n onGroupLogicTypeChange(node, logicType);\n }}\n >\n <el-option key='AND' value='AND' label='AND' />\n <el-option key='OR' value='OR' label='OR' />\n </el-select>\n </div>\n <div class={ns.be('group', 'list')}>\n {node.children.length > 0 &&\n node.children.map((child, index) => {\n const childContent = child.leaf\n ? renderFilterItem(child)\n : renderFilterGroup(child);\n\n return (\n <div class={ns.be('group', 'list-item')}>\n <div class={ns.be('group', 'list-item-left')}>\n {node.logicType}\n </div>\n {childContent}\n <iBizIcon\n class={ns.be('group', 'list-item-right')}\n onClick={() => {\n node.children.splice(index, 1);\n }}\n icon={{ cssClass: 'trash' }}\n ></iBizIcon>\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n /**\n * 关闭过滤器\n * @author lxm\n * @date 2023-10-16 05:37:10\n */\n const onClose = () => {\n emit('close');\n };\n\n return { ns, renderFilterGroup, renderFilterItem, onClose };\n },\n render() {\n const { state } = this.controller;\n return (\n <div class={[this.ns.b()]}>\n {state.filterNodes.length > 0 &&\n state.filterNodes.map(node => {\n if (node.leaf) {\n return this.renderFilterItem(node);\n }\n return this.renderFilterGroup(node);\n })}\n <div class={this.ns.b('footer')}>\n <el-button\n onClick={() => {\n this.controller.onSearch();\n this.onClose();\n }}\n >\n 搜索\n </el-button>\n <el-button\n onClick={() => {\n this.controller.resetFilter();\n }}\n >\n 重置\n </el-button>\n </div>\n </div>\n );\n },\n});\n","import { ValueOP } from '@ibiz-template/runtime';\nimport { defineComponent, computed } from 'vue';\n\nconst FilterModes = [\n { valueOP: ValueOP.EQ, label: '等于(=)' },\n { valueOP: ValueOP.NOT_EQ, label: '不等于(<>)' },\n { valueOP: ValueOP.GT, label: '大于(>)' },\n { valueOP: ValueOP.GT_AND_EQ, label: '大于等于(>=)' },\n { valueOP: ValueOP.LT, label: '小于(<)' },\n { valueOP: ValueOP.LT_AND_EQ, label: '小于等于(<=)' },\n { valueOP: ValueOP.IS_NULL, label: '值为空(Nil)' },\n { valueOP: ValueOP.IS_NOT_NULL, label: '值不为空(NotNil)' },\n { valueOP: ValueOP.IN, label: '值在范围中(In)' },\n { valueOP: ValueOP.NOT_IN, label: '值不在范围中(NotIn)' },\n { valueOP: ValueOP.LIKE, label: '文本包含(%)' },\n { valueOP: ValueOP.LIFT_LIKE, label: '文本左包含(%#)' },\n { valueOP: ValueOP.RIGHT_LIKE, label: '文本右包含(#%)' },\n] as const;\n\nexport const FilterModeSelect = defineComponent({\n name: 'IBizFilterModeSelect',\n props: {\n value: String,\n modes: Array<string>,\n },\n emits: {\n change: (_mode: string) => true,\n },\n setup(props, { emit }) {\n /** 显示可选的过滤类型 */\n const availableModes = computed(() => {\n if (props.modes?.length) {\n return FilterModes.filter(item => props.modes!.includes(item.valueOP));\n }\n return FilterModes;\n });\n\n /**\n * 选择变更处理\n * @author lxm\n * @date 2023-10-16 04:54:58\n * @param {string} value\n */\n const onChange = (value: string) => {\n emit('change', value);\n };\n\n return { availableModes, onChange };\n },\n render() {\n return (\n <el-select\n model-value={this.value}\n teleported={false}\n onChange={(value: string) => {\n this.onChange(value);\n }}\n >\n {this.availableModes.map(mode => {\n return (\n <el-option\n key={mode.valueOP}\n value={mode.valueOP}\n label={mode.label}\n />\n );\n })}\n </el-select>\n );\n },\n});\n","import { ControlType, registerControlProvider } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { SearchBarControl } from './search-bar';\nimport { SearchBarProvider } from './search-bar.provider';\nimport { FilterTreeControl } from './filter-tree/filter-tree';\nimport { FilterModeSelect } from './filter-mode-select/filter-mode-select';\n\nexport const IBizSearchBarControl = withInstall(\n SearchBarControl,\n function (v: App) {\n v.component(SearchBarControl.name, SearchBarControl);\n v.component(FilterTreeControl.name, FilterTreeControl);\n v.component(FilterModeSelect.name, FilterModeSelect);\n registerControlProvider(\n ControlType.SEARCHBAR,\n () => new SearchBarProvider(),\n );\n },\n);\n\nexport default IBizSearchBarControl;\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 列表适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ChartProvider\n * @implements {IControlProvider}\n */\nexport class ChartProvider implements IControlProvider {\n component: string = 'IBizChartControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { ControlLoadingPlaceholder } from '@ibiz-template/vue3-util';\nimport { App, defineAsyncComponent } from 'vue';\nimport { ChartProvider } from './chart.provider';\n\nexport const IBizChartControl = {\n install(v: App): void {\n v.component(\n 'IBizChartControl',\n defineAsyncComponent({\n loader: () => import('./chart'),\n loadingComponent: ControlLoadingPlaceholder,\n delay: 0,\n }),\n );\n registerControlProvider(ControlType.CHART, () => new ChartProvider());\n },\n};\n\nexport default IBizChartControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, resolveComponent, h } from 'vue';\nimport { IDEWizardEditForm, IDEWizardPanel } from '@ibiz/model-core';\nimport './wizard-panel.scss';\nimport {\n EventBase,\n IControlProvider,\n WizardPanelController,\n} from '@ibiz-template/runtime';\n\nexport const WizardPanelControl = defineComponent({\n name: 'IBizWizardPanelControl',\n props: {\n modelData: {\n type: Object as PropType<IDEWizardPanel>,\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 },\n setup() {\n const c = useControlController(\n (...args) => new WizardPanelController(...args),\n );\n\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n return { c, ns };\n },\n render() {\n const { activeFormTag } = this.c.state;\n let stepsTitle = null;\n let formComponent = null;\n let footer = null;\n\n // 表单绘制\n if (activeFormTag && this.c.activeWizardForm) {\n const wizardForm = this.c.activeWizardForm;\n const supportActions = wizardForm.stepActions;\n if (this.c.providers[activeFormTag]) {\n const component = resolveComponent(\n this.c.providers[activeFormTag]!.component,\n );\n const editForm = this.c.model.deeditForms?.find(_editForm => {\n return (\n activeFormTag ===\n (_editForm as IDEWizardEditForm).dewizardForm?.formTag\n );\n });\n formComponent = h(component, {\n class: this.ns.e('form'),\n modelData: editForm,\n context: this.c.context,\n params: this.c.params,\n key: activeFormTag,\n onMounted: (event: EventBase) =>\n this.c.onFormMounted(activeFormTag, event),\n onSaveSuccess: (event: EventBase) => this.c.onFormSaved(event),\n });\n }\n\n const { dewizard } = this.c.model;\n // 底部按钮\n footer = supportActions && dewizard && (\n <div key={`${activeFormTag}footer`} class={this.ns.b('footer')}>\n {supportActions.includes('PREV') && (\n <el-button\n onClick={(): void => {\n this.c.onPrevClick();\n }}\n >\n {dewizard.prevCaption ? dewizard.prevCaption : '后退'}\n </el-button>\n )}\n {supportActions.includes('NEXT') && (\n <el-button\n onClick={(): void => {\n this.c.onNextClick();\n }}\n >\n {dewizard.nextCaption ? dewizard.nextCaption : '前进'}\n </el-button>\n )}\n {supportActions.includes('FINISH') && (\n <el-button\n onClick={(): void => {\n this.c.onFinishClick();\n }}\n >\n {dewizard.finishCaption ? dewizard.finishCaption : '完成'}\n </el-button>\n )}\n </div>\n );\n\n const { dewizardSteps } = dewizard!;\n if (\n this.c.model.showStepBar &&\n dewizardSteps &&\n dewizardSteps.length > 0\n ) {\n const active =\n this.c.steps.indexOf(\n this.c.stepTags[\n `${\n this.c.model.name\n }_form_${this.c.state.activeFormTag?.toLowerCase()}`\n ],\n ) + 1;\n stepsTitle = (\n <el-steps\n class={this.ns.b('header')}\n align-center\n finish-status='success'\n active={active}\n >\n {dewizardSteps.map(step => {\n return <el-step title={step.title}></el-step>;\n })}\n </el-steps>\n );\n }\n }\n return (\n <iBizControlBase\n controller={this.c}\n class={[this.ns.b(), this.ns.is('header', this.c.model.showStepBar)]}\n >\n {stepsTitle}\n {formComponent}\n {footer}\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 WizardPanelProvider\n * @implements {IControlProvider}\n */\nexport class WizardPanelProvider implements IControlProvider {\n component: string = 'IBizWizardPanelControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { WizardPanelControl } from './wizard-panel';\nimport { WizardPanelProvider } from './wizard-panel.provider';\n\nexport const IBizWizardPanelControl = withInstall(\n WizardPanelControl,\n function (v: App) {\n v.component(WizardPanelControl.name, WizardPanelControl);\n registerControlProvider(\n ControlType.WIZARD_PANEL,\n () => new WizardPanelProvider(),\n );\n },\n);\n\nexport default IBizWizardPanelControl;\n","import {\n ControlController,\n IDRBarController,\n IDRBarEvent,\n IDRBarState,\n IDRBarItemsState,\n IEditFormController,\n calcNavParams,\n Srfuf,\n IPanelItemNavPosController,\n} from '@ibiz-template/runtime';\nimport { IDEDRBar, IDEDRBarItem } from '@ibiz/model-core';\nimport { Router } from 'vue-router';\n\n/**\n * 数据关系栏控制器\n *\n * @export\n * @class DRBarController\n * @extends {ControlController<IDEDRBar, IDRBarState, IDRBarEvent>}\n * @implements {IDRBarController}\n */\nexport class DRBarController\n extends ControlController<IDEDRBar, IDRBarState, IDRBarEvent>\n implements IDRBarController\n{\n /**\n * 导航占位控制器\n *\n * @readonly\n * @memberof DRBarController\n */\n get navPos(): IPanelItemNavPosController {\n return this.view.layoutPanel?.panelItems\n .nav_pos as IPanelItemNavPosController;\n }\n\n /**\n * 表单部件\n *\n * @readonly\n * @memberof DRBarController\n */\n get form(): IEditFormController {\n return this.view.getController('form') as IEditFormController;\n }\n\n /**\n * 获取数据\n *\n * @return {*} {IData[]}\n * @memberof DRBarController\n */\n getData(): IData[] {\n return this.form?.getData() || [{}];\n }\n\n /**\n * Router 对象\n *\n * @type {Router}\n * @memberof DRTabController\n */\n router!: Router;\n\n /**\n * 设置 Router 对象\n *\n * @param {Router} router\n * @memberof DRTabController\n */\n setRouter(router: Router): void {\n this.router = router;\n }\n\n /**\n * 路由层级\n *\n * @readonly\n * @type {(number | undefined)}\n * @memberof DRBarController\n */\n get routeDepth(): number | undefined {\n return this.view.modal.routeDepth;\n }\n\n /**\n * 初始化state的属性\n *\n * @protected\n * @memberof DRBarController\n */\n protected initState(): void {\n super.initState();\n this.state.drBarItems = [];\n }\n\n /**\n * 创建完成\n *\n * @return {*} {Promise<void>}\n * @memberof DRBarController\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n this.initDRBarItems();\n }\n\n /**\n * 加载完成\n *\n * @return {*} {Promise<void>}\n * @memberof DRBarController\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n if (this.form) {\n this.form.evt.on('onLoadSuccess', () => {\n this.handleFormChange();\n });\n this.form.evt.on('onLoadDraftSuccess', () => {\n this.handleFormChange();\n });\n this.form.evt.on('onSaveSuccess', () => {\n this.handleFormChange();\n });\n }\n }\n\n /**\n * 处理表单数据变更\n *\n * @memberof DRBarController\n */\n handleFormChange(): void {\n const disabled = this.getData()[0].srfuf !== Srfuf.UPDATE;\n this.setDRBarItemsState(this.state.drBarItems, disabled);\n }\n\n /**\n * 设置关系项状态\n *\n * @param {IDRBarItemsState[]} drBarItems 关系项\n * @param {boolean} disabled 禁用状态\n * @memberof DRBarController\n */\n setDRBarItemsState(drBarItems: IDRBarItemsState[], disabled: boolean): void {\n drBarItems.forEach(item => {\n // 排除首项\n if (item.tag !== this.model.uniqueTag) {\n item.disabled = disabled;\n }\n if (item.children) {\n this.setDRBarItemsState(item.children, disabled);\n }\n });\n }\n\n /**\n * 初始化关系项数据\n *\n * @memberof DRBarController\n */\n initDRBarItems(): void {\n const {\n editItemCaption,\n editItemCapLanguageRes,\n hideEditItem,\n editItemSysImage,\n uniqueTag,\n dedrctrlItems,\n } = this.model;\n const drBarItems: IDRBarItemsState[] = [];\n let caption = editItemCaption;\n if (editItemCapLanguageRes) {\n caption = ibiz.i18n.t(editItemCapLanguageRes.lanResTag!, editItemCaption);\n }\n // 首项\n drBarItems.push({\n tag: uniqueTag!,\n caption,\n hidden: !!hideEditItem,\n disabled: false,\n sysImage: editItemSysImage,\n fullPath: this.router.currentRoute.value.fullPath,\n });\n // 关系项\n dedrctrlItems?.forEach((item: IDEDRBarItem) => {\n let itemCaption = item.caption;\n if (item.capLanguageRes) {\n itemCaption = ibiz.i18n.t(item.capLanguageRes.lanResTag!, item.caption);\n }\n drBarItems.push({\n tag: item.id!,\n caption: itemCaption,\n sysImage: item.sysImage,\n hidden: false,\n disabled: false,\n });\n });\n this.state.drBarItems = drBarItems;\n }\n\n /**\n * 处理选中改变\n *\n * @param {string} key\n * @memberof DRBarController\n */\n handleSelectChange(key: string): void {\n const drBarItem = this.model.dedrctrlItems?.find(item => item.id === key);\n if (drBarItem) {\n this.setVisible('navPos');\n this.openNavPosView(drBarItem);\n } else {\n this.setVisible('form');\n if (this.routeDepth) {\n this.router.push(this.state.drBarItems[0].fullPath!);\n }\n }\n }\n\n /**\n * 设置显示状态\n *\n * @param {('form' | 'navPos')} ctrlName 显示的部件名称\n * @memberof DRBarController\n */\n setVisible(ctrlName: 'form' | 'navPos'): void {\n const viewForm = this.view.layoutPanel?.panelItems.view_form;\n if (ctrlName === 'form') {\n if (viewForm) {\n viewForm.state.visible = true;\n viewForm.state.keepAlive = true;\n }\n if (this.navPos) {\n this.navPos.state.visible = false;\n this.navPos.state.keepAlive = true;\n }\n } else {\n if (viewForm) {\n viewForm.state.visible = false;\n viewForm.state.keepAlive = true;\n }\n if (this.navPos) {\n this.navPos.state.visible = true;\n this.navPos.state.keepAlive = true;\n }\n }\n }\n\n /**\n * 准备参数\n *\n * @param {IDEDRBarItem} drBarItem 关系项\n * @return {*}\n * @memberof DRBarController\n */\n prepareParams(drBarItem: IDEDRBarItem): {\n context: IContext;\n params: IParams;\n } {\n const { navigateContexts, navigateParams } = drBarItem;\n const model = {\n navContexts: navigateContexts,\n navParams: navigateParams,\n };\n const originParams = {\n context: this.context,\n params: this.params,\n data: this.getData()[0],\n };\n const { resultContext, resultParams } = calcNavParams(model, originParams);\n const context = Object.assign(this.context.clone(), resultContext);\n const params = { ...this.params, ...resultParams };\n return { context, params };\n }\n\n /**\n * 打开导航占位视图\n *\n * @param {IDEDRBarItem} drBarItem 关系项\n * @memberof DRBarController\n */\n async openNavPosView(drBarItem: IDEDRBarItem): Promise<void> {\n const { context, params } = this.prepareParams(drBarItem);\n this.navPos?.openView({\n key: drBarItem.id!,\n context,\n params,\n viewId: drBarItem.appViewId,\n });\n }\n}\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IDEDRBar } from '@ibiz/model-core';\nimport { useRouter } from 'vue-router';\nimport { IControlProvider, IDRBarItemsState } from '@ibiz-template/runtime';\nimport { DRBarController } from './drbar.controller';\n\nexport const DRBarControl = defineComponent({\n name: 'IBizDrBarControl',\n props: {\n modelData: { type: Object as PropType<IDEDRBar>, required: true },\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 },\n setup() {\n const c = useControlController((...args) => new DRBarController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const router = useRouter();\n\n c.setRouter(router);\n const handleSelect = (key: string): void => {\n c.handleSelectChange(key);\n };\n\n const renderMenuItems = (item: IDRBarItemsState): VNode | undefined => {\n if (!item.hidden) {\n if (item.children) {\n return (\n <el-sub-menu class={ns.b('group')} index={item.tag}>\n {{\n default: () =>\n item.children!.map(child => {\n return renderMenuItems(child);\n }),\n title: () => [\n <iBizIcon\n class={ns.e('icon')}\n icon={item.sysImage}\n ></iBizIcon>,\n <span>{item.caption}</span>,\n ],\n }}\n </el-sub-menu>\n );\n }\n return (\n <el-menu-item\n class={ns.e('item')}\n index={item.tag}\n disabled={item.disabled}\n >\n <iBizIcon class={ns.e('icon')} icon={item.sysImage}></iBizIcon>\n <span>{item.caption}</span>\n </el-menu-item>\n );\n }\n };\n\n return {\n c,\n ns,\n handleSelect,\n renderMenuItems,\n };\n },\n render() {\n const { isCreated, drBarItems } = this.c.state;\n return (\n <iBizControlBase controller={this.c} class={this.ns.b()}>\n {isCreated && (\n <el-menu\n default-active={drBarItems[0]?.tag}\n onSelect={this.handleSelect}\n >\n {drBarItems.map(item => {\n return this.renderMenuItems(item);\n })}\n </el-menu>\n )}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 数据关系栏适配器\n *\n * @export\n * @class DRBarProvider\n * @implements {IControlProvider}\n */\nexport class DRBarProvider implements IControlProvider {\n component: string = 'IBizDrBarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { DRBarControl } from './drbar';\nimport { DRBarProvider } from './drbar.provider';\n\nexport * from './drbar.controller';\n\nexport const IBizDRBarControl = withInstall(DRBarControl, function (v: App) {\n v.component(DRBarControl.name, DRBarControl);\n registerControlProvider(ControlType.DRBAR, () => new DRBarProvider());\n});\n\nexport default IBizDRBarControl;\n","import {\n ControlController,\n IDRTabController,\n IDRTabEvent,\n IDRTabState,\n IDRTabPagesState,\n IEditFormController,\n calcNavParams,\n Srfuf,\n IPanelItemNavPosController,\n} from '@ibiz-template/runtime';\nimport { getNestedRoutePath } from '@ibiz-template/vue3-util';\nimport { IDEDRCtrlItem, IDEDRTab } from '@ibiz/model-core';\nimport { Router } from 'vue-router';\n\n/**\n * 数据关系栏控制器\n *\n * @export\n * @class DRTabController\n * @extends {ControlController<IDEDRTab, IDRTabState, IDRTabEvent>}\n * @implements {IDRTabController}\n */\nexport class DRTabController\n extends ControlController<IDEDRTab, IDRTabState, IDRTabEvent>\n implements IDRTabController\n{\n /**\n * 导航占位控制器\n *\n * @readonly\n * @memberof DRTabController\n */\n get navPos(): IPanelItemNavPosController {\n return this.view.layoutPanel?.panelItems\n .nav_pos as IPanelItemNavPosController;\n }\n\n /**\n * 表单部件\n *\n * @readonly\n * @memberof DRTabController\n */\n get form(): IEditFormController {\n return this.view.getController('form') as IEditFormController;\n }\n\n /**\n * 路由层级\n *\n * @readonly\n * @type {(number | undefined)}\n * @memberof DRTabController\n */\n get routeDepth(): number | undefined {\n return this.view.modal.routeDepth;\n }\n\n /**\n * Router 对象\n *\n * @type {Router}\n * @memberof DRTabController\n */\n router!: Router;\n\n /**\n * 设置 Router 对象\n *\n * @param {Router} router\n * @memberof DRTabController\n */\n setRouter(router: Router): void {\n this.router = router;\n }\n\n /**\n * 获取数据\n *\n * @return {*} {IData[]}\n * @memberof DRTabController\n */\n getData(): IData[] {\n return this.form?.getData() || [{}];\n }\n\n /**\n * 初始化state的属性\n *\n * @protected\n * @memberof DRTabController\n */\n protected initState(): void {\n super.initState();\n this.state.drTabPages = [];\n }\n\n /**\n * 创建完成\n *\n * @return {*} {Promise<void>}\n * @memberof DRTabController\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n }\n\n /**\n * 加载完成\n *\n * @return {*} {Promise<void>}\n * @memberof DRTabController\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n if (this.form) {\n this.form.evt.on('onLoadSuccess', () => {\n this.handleFormChange();\n });\n this.form.evt.on('onLoadDraftSuccess', () => {\n this.handleFormChange();\n });\n this.form.evt.on('onSaveSuccess', () => {\n this.handleFormChange();\n });\n }\n this.initDRTabPages();\n }\n\n /**\n * 处理表单数据变更\n *\n * @memberof DRTabController\n */\n handleFormChange(): void {\n const disabled = this.getData()[0].srfuf !== Srfuf.UPDATE;\n this.setDRTabPagesState(this.state.drTabPages, disabled);\n }\n\n /**\n * 设置关系分页状态\n *\n * @param {IDRTabPagesState[]} drTabPages 关系分页\n * @param {boolean} disabled 禁用状态\n * @memberof DRTabController\n */\n setDRTabPagesState(drTabPages: IDRTabPagesState[], disabled: boolean): void {\n drTabPages.forEach(item => {\n // 排除首项\n if (item.tag !== this.model.uniqueTag) {\n item.disabled = disabled;\n }\n });\n }\n\n /**\n * 初始化关系分页数据\n *\n * @memberof DRTabController\n */\n initDRTabPages(): void {\n const {\n editItemCaption,\n editItemCapLanguageRes,\n hideEditItem,\n editItemSysImage,\n uniqueTag,\n dedrtabPages,\n } = this.model;\n const drTabPages: IDRTabPagesState[] = [];\n let caption = editItemCaption;\n if (editItemCapLanguageRes) {\n caption = ibiz.i18n.t(editItemCapLanguageRes.lanResTag!, editItemCaption);\n }\n\n // 首项\n drTabPages.push({\n tag: uniqueTag!,\n caption,\n hidden: !!hideEditItem,\n disabled: false,\n sysImage: editItemSysImage,\n fullPath: this.routeDepth\n ? getNestedRoutePath(this.router.currentRoute.value, this.routeDepth!)\n : '',\n });\n // 关系项\n dedrtabPages?.forEach((item: IDEDRCtrlItem) => {\n let itemCaption = item.caption;\n if (item.capLanguageRes) {\n itemCaption = ibiz.i18n.t(item.capLanguageRes.lanResTag!, item.caption);\n }\n drTabPages.push({\n tag: item.id!,\n caption: itemCaption,\n sysImage: item.sysImage,\n hidden: false,\n disabled: false,\n });\n });\n this.state.drTabPages = drTabPages;\n if ((this.view.state as IData).srfnav) {\n this.state.activeName = (this.view.state as IData).srfnav!;\n this.handleTabChange();\n } else {\n this.state.activeName = drTabPages[0].tag;\n }\n }\n\n /**\n * 处理分页改变\n *\n * @memberof DRTabController\n */\n handleTabChange(): void {\n const { activeName } = this.state;\n const drBarItem = this.model.dedrtabPages?.find(\n item => item.id === activeName,\n );\n\n if (drBarItem) {\n this.setVisible('navPos');\n this.openNavPosView(drBarItem);\n } else {\n this.setVisible('form');\n if (this.routeDepth) {\n this.router.push(this.state.drTabPages[0].fullPath!);\n }\n }\n }\n\n /**\n * 设置显示状态\n *\n * @param {('form' | 'navPos')} ctrlName 显示的部件名称\n * @memberof DRTabController\n */\n setVisible(ctrlName: 'form' | 'navPos'): void {\n const viewForm = this.view.layoutPanel?.panelItems.view_form;\n if (ctrlName === 'form') {\n if (viewForm) {\n viewForm.state.visible = true;\n viewForm.state.keepAlive = true;\n }\n if (this.navPos) {\n this.navPos.state.visible = false;\n this.navPos.state.keepAlive = true;\n }\n } else {\n if (viewForm) {\n viewForm.state.visible = false;\n viewForm.state.keepAlive = true;\n }\n if (this.navPos) {\n this.navPos.state.visible = true;\n this.navPos.state.keepAlive = true;\n }\n }\n }\n\n /**\n * 准备参数\n *\n * @param {IDEDRCtrlItem} drTabPages 关系分页\n * @return {*}\n * @memberof DRTabController\n */\n prepareParams(drTabPages: IDEDRCtrlItem): {\n context: IContext;\n params: IParams;\n } {\n const { navigateContexts, navigateParams } = drTabPages;\n const model = {\n navContexts: navigateContexts,\n navParams: navigateParams,\n };\n const originParams = {\n context: this.context,\n params: this.params,\n data: this.getData()[0],\n };\n const { resultContext, resultParams } = calcNavParams(model, originParams);\n const context = Object.assign(this.context.clone(), resultContext, {\n currentSrfNav: drTabPages.id,\n });\n const params = { ...this.params, ...resultParams };\n return { context, params };\n }\n\n /**\n * 打开导航占位视图\n *\n * @param {IDEDRCtrlItem} drTabPages 关系分页\n * @memberof DRTabController\n */\n async openNavPosView(drTabPages: IDEDRCtrlItem): Promise<void> {\n const { context, params } = this.prepareParams(drTabPages);\n this.navPos?.openView({\n key: drTabPages.id!,\n context,\n params,\n viewId: drTabPages.appViewId,\n });\n }\n}\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType } from 'vue';\nimport { IDEDRTab } from '@ibiz/model-core';\nimport { useRouter } from 'vue-router';\nimport { IControlProvider } from '@ibiz-template/runtime';\nimport { DRTabController } from './drtab.controller';\n\nexport const DRTabControl = defineComponent({\n name: 'IBizDrTabControl',\n props: {\n modelData: { type: Object as PropType<IDEDRTab>, required: true },\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 },\n setup() {\n const c = useControlController((...args) => new DRTabController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const router = useRouter();\n\n c.setRouter(router);\n\n const handleTabChange = (): void => {\n c.handleTabChange();\n };\n\n return {\n c,\n ns,\n handleTabChange,\n };\n },\n render() {\n const { isCreated, drTabPages } = this.c.state;\n return (\n <iBizControlBase controller={this.c} class={this.ns.b()}>\n {isCreated && (\n <el-tabs\n v-model={this.c.state.activeName}\n onTabChange={this.handleTabChange}\n >\n {drTabPages.map(tab => {\n return (\n <el-tab-pane\n class={this.ns.e('tab-item')}\n label={tab.caption}\n disabled={tab.disabled}\n name={tab.tag}\n ></el-tab-pane>\n );\n })}\n </el-tabs>\n )}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 数据关系分页适配器\n *\n * @export\n * @class DRTabProvider\n * @implements {IControlProvider}\n */\nexport class DRTabProvider implements IControlProvider {\n component: string = 'IBizDrTabControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { DRTabControl } from './drtab';\nimport { DRTabProvider } from './drtab.provider';\n\nexport * from './drtab.controller';\n\nexport const IBizDRTabControl = withInstall(DRTabControl, function (v: App) {\n v.component(DRTabControl.name, DRTabControl);\n registerControlProvider(ControlType.DRTAB, () => new DRTabProvider());\n});\n\nexport default IBizDRTabControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport {\n ConcreteComponent,\n defineComponent,\n h,\n PropType,\n reactive,\n ref,\n resolveComponent,\n VNode,\n} from 'vue';\nimport {\n IDashboard,\n IDBContainerPortletPart,\n IDBPortletPart,\n} from '@ibiz/model-core';\nimport './dashboard.scss';\nimport { DashboardController, IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 根据类型绘制数据看板成员\n *\n * @author lxm\n * @date 2022-10-14 17:10:42\n * @param {PortletPartModel} model 模型\n * @param {IData} opts 额外参数\n */\nfunction renderPortletByType(\n model: IDBPortletPart,\n c: DashboardController,\n opts?: IData,\n): VNode {\n const provider = c.providers[model.id!];\n const controller = c.portlets[model.id!];\n const commonProps = {\n modelData: model,\n controller,\n };\n\n if (!provider) {\n return <div>暂未支持{model.portletType}</div>;\n }\n\n const providerComp = resolveComponent(\n provider.component,\n ) as ConcreteComponent;\n // 绘制容器\n if (model.portletType === 'CONTAINER') {\n const container = model as IDBContainerPortletPart;\n return h(\n providerComp,\n {\n ...commonProps,\n key: model.id,\n },\n {\n default: () =>\n container.controls?.map(child => renderPortletByType(child, c, opts)),\n },\n );\n }\n\n // 绘制门户部件\n return h(providerComp, {\n ...commonProps,\n key: model.id,\n });\n}\n\nexport const DashboardControl = defineComponent({\n name: 'IBizDashboardControl',\n props: {\n modelData: {\n type: Object as PropType<IDashboard>,\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 },\n setup() {\n const c = useControlController(\n (...args) => new DashboardController(...args),\n );\n\n // 自定义门户模型数组\n const customModelDatas = ref([]);\n\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n c.evt.on('onCreated', () => {\n // 数据看板成员state响应式\n Object.values(c.portlets).forEach(portlet => {\n portlet.state = reactive(portlet.state);\n });\n });\n\n // 处理自定义布局数据改变\n const handleCustomModelChange = async (args: IData) => {\n customModelDatas.value = args.model;\n await c.initPortlets(customModelDatas.value);\n };\n\n return { c, ns, customModelDatas, handleCustomModelChange };\n },\n\n render() {\n const { state, model } = this.c;\n\n const renderDefaultContent = () => {\n return (\n <iBizRow class={[this.ns.b()]} layout={model.layout}>\n {model.controls?.map((child: IDBPortletPart) => {\n return (\n <iBizCol\n layoutPos={child.layoutPos}\n state={this.c.portlets[child.id!]?.state}\n >\n {renderPortletByType(child, this.c)}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n };\n\n const renderCustomSlots = () => {\n const slots: IData = {\n default: () => {\n return renderDefaultContent();\n },\n };\n this.customModelDatas.forEach((item: IData) => {\n slots[item.codeName!] = () => renderPortletByType(item, this.c);\n });\n return slots;\n };\n\n return (\n <iBizControlBase controller={this.c} class={[this.ns.b()]}>\n {state.isCreated &&\n (model.enableCustomized ? (\n <iBizCustomDashboardContainer\n modelData={this.modelData}\n dashboard={this.c}\n onChanged={this.handleCustomModelChange}\n >\n {renderCustomSlots()}\n </iBizCustomDashboardContainer>\n ) : (\n renderDefaultContent()\n ))}\n </iBizControlBase>\n );\n },\n});\n","import {\n CustomDashboardController,\n DashboardController,\n getPortletProvider,\n IPortletController,\n IPortletProvider,\n} from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IDBPortletPart, ISysImage } from '@ibiz/model-core';\nimport { clone } from 'ramda';\nimport {\n computed,\n ConcreteComponent,\n defineComponent,\n h,\n onUnmounted,\n PropType,\n Ref,\n ref,\n resolveComponent,\n watch,\n} from 'vue';\nimport './dashboard-design.scss';\n\ninterface IPortletList {\n type: string;\n portletCodeName: string;\n portletName: string;\n portletImage?: ISysImage;\n groupCodeName: string;\n groupName: string;\n appCodeName: string;\n appName: string;\n}\n\ninterface IList {\n type: string;\n name: string;\n children: IData[];\n}\n\nexport const DashboardDesign = defineComponent({\n name: 'IBizDashboardDesign',\n props: {\n dashboard: {\n type: Object as PropType<DashboardController>,\n required: true,\n },\n customDashboard: {\n type: Object as PropType<CustomDashboardController>,\n required: true,\n },\n isShowDesign: {\n type: Boolean,\n required: true,\n },\n },\n emits: ['saved'],\n setup(props, { emit }) {\n const ns = useNamespace(`dashboard-design`);\n const customC = props.customDashboard;\n\n // 过滤数据\n const filterData = (list: IPortletList[]) => {\n const items: IPortletList[] = [];\n list.forEach(data => {\n if (Object.is(data.type, 'app')) {\n items.push(data);\n }\n const dataType = customC.model?.appDataEntityId || 'app';\n if (Object.is(data.appCodeName, dataType)) {\n items.push(data);\n }\n });\n return items;\n };\n\n // 准备list项集合\n const prepareListChildren = (children: IData[], data: IPortletList) => {\n let item = children.find(child =>\n Object.is(data.groupCodeName, child.type),\n );\n if (!item) {\n item = {};\n Object.assign(item, {\n type: data.groupCodeName,\n name: data.groupName,\n children: [],\n });\n children.push(item);\n }\n const _item = item.children.find((child: IPortletList) =>\n Object.is(child.portletCodeName, data.portletCodeName),\n );\n if (!_item) {\n item.children.push(data);\n }\n };\n\n // 准备list集合\n const prepareList = (datas: IPortletList[]) => {\n const list: IList[] = [];\n datas.forEach(data => {\n let item = list.find(_item => Object.is(data.type, _item.type));\n if (!item) {\n item = {} as IList;\n Object.assign(item, {\n type: data.type,\n name: Object.is(data.type, 'app') ? '全局' : data.appName,\n children: [],\n });\n list.push(item);\n }\n prepareListChildren(item.children!, data);\n });\n return list;\n };\n\n // 分组集合\n const prepareGroup = (datas: IPortletList[]) => {\n const items: IData[] = [];\n datas.forEach((data: IPortletList) => {\n const item = items.find((_item: IData) =>\n Object.is(_item.value, data.groupCodeName),\n );\n if (item) {\n const _item = item.children.find((a: IData) =>\n Object.is(a.portletCodeName, data.portletCodeName),\n );\n if (!_item) {\n item.children.push(data);\n }\n } else {\n items.push({\n name: data.groupName,\n value: data.groupCodeName,\n children: [data],\n });\n }\n });\n return items;\n };\n\n // 准备UI需要的数据\n const prepareData = () => {\n const list: IPortletList[] = [];\n const app = ibiz.hub.getApp(ibiz.env.appId);\n if (app.model.appPortletCats && app.model.appPortlets) {\n app.model.appPortlets.forEach(portlet => {\n const portletCat = app.model.appPortletCats?.find(\n cat => cat.codeName === portlet.appPortletCat?.codeName,\n );\n const temp: IPortletList = {\n type: 'app',\n portletCodeName: portlet.codeName!,\n portletName: portlet.name!,\n portletImage: (portlet.control as IDBPortletPart).sysImage,\n groupCodeName: portletCat?.codeName || '',\n groupName: portletCat?.name || '',\n appCodeName: portlet.appDataEntityId || app.model.pkgcodeName!,\n appName: app.model.name!,\n };\n list.push(temp);\n });\n }\n const datas = filterData(list);\n const result = prepareList(datas);\n const groups = prepareGroup(datas);\n return { portlets: datas, list: result.reverse(), groups };\n };\n\n const result = prepareData();\n // 门户项目列表\n const portlets = ref(result.portlets);\n // 列表\n const list = ref(result.list);\n // 分组\n const groups = ref(result.groups);\n // 分组过滤值\n const filterVal = ref('');\n\n // 自定义模型对象\n const layoutModel: Ref<IData[]> = ref(clone(customC.customModelData));\n\n // 门户provider\n const providers: Ref<{ [key: string]: IPortletProvider }> = ref({});\n\n // 门户部件控制器\n const portletControllers: Ref<{ [key: string]: IPortletController }> = ref(\n {},\n );\n\n // 滚动区域\n const designPanel: Ref<Element | null> = ref(null);\n\n // 默认展开\n const defaultOpens = computed(() => {\n let tempOpens: string[] = [];\n if (filterVal.value) {\n tempOpens = [filterVal.value];\n } else {\n list.value.forEach((item, index) => {\n tempOpens.push(item.type + index);\n item.children.forEach((child, index2) => {\n tempOpens.push(child.type + index2);\n });\n });\n }\n return tempOpens;\n });\n\n // 初始化providers\n const initPortlets = async (portletModels: IDBPortletPart[]) => {\n if (!portletModels?.length) {\n return;\n }\n await Promise.all(\n portletModels.map(async portlet => {\n const provider = await getPortletProvider(portlet);\n if (provider) {\n providers.value[portlet.id!] = provider;\n const controller = await provider.createController(\n portlet,\n props.dashboard,\n );\n portletControllers.value[portlet.id!] = controller;\n }\n }),\n );\n };\n\n // 根据codeName去全局获取portlet模型\n const getPortletByCodeName = (\n codeName: string,\n ): IDBPortletPart | undefined => {\n const app = ibiz.hub.getApp(ibiz.env.appId);\n if (app.model.appPortlets) {\n const appPortlet = app.model.appPortlets.find(portlet => {\n return portlet.control?.codeName === codeName;\n });\n if (appPortlet) {\n return appPortlet.control as IDBPortletPart;\n }\n }\n };\n\n // 根据自定义数据获取模型数组\n const convertData = (models: IData[]) => {\n const tempModelDatas: IDBPortletPart[] = [];\n if (models.length > 0) {\n models.forEach((item: IData) => {\n const temModelData = getPortletByCodeName(item.portletCodeName);\n if (temModelData) {\n tempModelDatas.push(temModelData);\n }\n });\n }\n return tempModelDatas;\n };\n\n // 准备porlet绘制相关数据\n const preparePortlet = async () => {\n const tempModelDatas: IDBPortletPart[] = convertData(layoutModel.value);\n await initPortlets(tempModelDatas);\n };\n\n watch(\n () => props.isShowDesign,\n async newVal => {\n if (newVal) {\n const tempData = await customC.loadCustomModelData();\n layoutModel.value = clone(tempData);\n await preparePortlet();\n }\n },\n { immediate: true },\n );\n\n // 菜单项是否禁用\n const isDisabled = (child: IPortletList) => {\n const model = layoutModel.value.find(\n item => item.i === child.portletCodeName,\n );\n return !!model;\n };\n\n // 重置\n const onReset = () => {\n layoutModel.value = [];\n };\n\n // 保存\n const onSave = async () => {\n const model = await customC.saveCustomModelData(layoutModel.value);\n emit('saved', { model });\n };\n\n // 删除项\n const removeItem = async (child: IData) => {\n const index = layoutModel.value.indexOf(child);\n if (index !== -1) {\n layoutModel.value.splice(index, 1);\n // 删除的时候销毁controller\n const temModelData = getPortletByCodeName(child.portletCodeName);\n if (temModelData) {\n const controller = portletControllers.value[temModelData.id!];\n await controller.destroyed();\n }\n }\n };\n\n // 上次滚动区域高度\n const lastScrollHeight = ref(0);\n\n // 新增项\n const addLayoutItem = async (child: IPortletList) => {\n const element = designPanel.value;\n if (element) {\n lastScrollHeight.value = element.scrollHeight + 3 * customC.layoutRowH;\n }\n let maxY = 0;\n // eslint-disable-next-line no-restricted-syntax\n for (const obj of layoutModel.value) {\n if (obj.y > maxY) {\n maxY = obj.y;\n }\n }\n layoutModel.value.push({\n w: 4,\n h: 3,\n x: 0,\n y: maxY + 3,\n i: child.portletCodeName,\n ...child,\n });\n await preparePortlet();\n\n // 滚动区域高度发生变化后滚动到最底部\n if (element) {\n const intervalId = setInterval(() => {\n // 轮询操作\n if (element.scrollHeight >= lastScrollHeight.value) {\n element.scrollTo({\n top: element.scrollHeight,\n behavior: 'smooth',\n });\n clearInterval(intervalId);\n }\n }, 50);\n }\n };\n\n // 改变列数\n const handleColNumberChange = (colNumber: number) => {\n customC.layoutColNum = colNumber;\n };\n\n // 改变单元格高度\n const handleRolHChange = (rowH: number) => {\n customC.layoutRowH = rowH;\n };\n\n // 栅格背景size\n const maskSize = computed(() => {\n return `calc((100% - 10px) / ${customC.layoutColNum}) ${\n customC.layoutRowH + 10\n }px`;\n });\n\n onUnmounted(async () => {\n const controllers = Object.values(portletControllers.value);\n await Promise.all(\n controllers.map(async portlet => {\n await portlet.destroyed();\n }),\n );\n });\n\n return {\n ns,\n customC,\n portlets,\n list,\n groups,\n filterVal,\n defaultOpens,\n layoutModel,\n onReset,\n onSave,\n removeItem,\n addLayoutItem,\n handleColNumberChange,\n handleRolHChange,\n isDisabled,\n providers,\n portletControllers,\n getPortletByCodeName,\n maskSize,\n designPanel,\n };\n },\n\n render() {\n const renderElMenuItem = (child: IPortletList) => {\n return (\n <el-menu-item\n key={child.portletCodeName}\n index={child.portletCodeName}\n tag={child.portletCodeName}\n disabled={this.isDisabled(child)}\n >\n <span>\n <ion-icon icon={child.portletImage} />\n {child.portletName}\n </span>\n <ion-icon\n title='添加'\n name='arrow-forward-outline'\n onClick={() => this.addLayoutItem(child)}\n ></ion-icon>\n </el-menu-item>\n );\n };\n\n const renderTree = () => {\n return this.filterVal ? (\n <el-menu\n default-openeds={this.defaultOpens}\n class={this.ns.is('filter', true)}\n key={this.filterVal}\n >\n {this.groups.map(group => {\n if (group.value === this.filterVal) {\n return (\n <el-sub-menu key={group.value} index={group.value}>\n {{\n title: () => {\n return group.name;\n },\n default: () => {\n return group.children.map((child: IPortletList) => {\n return renderElMenuItem(child);\n });\n },\n }}\n </el-sub-menu>\n );\n }\n return null;\n })}\n </el-menu>\n ) : (\n <el-menu\n class={this.ns.is('no-filter', true)}\n default-openeds={this.defaultOpens}\n key='default'\n >\n {this.list.map((item, index) => {\n return (\n <el-sub-menu key={item.type + index} index={item.type + index}>\n {{\n title: () => {\n if (item.type === 'app') {\n return '全局';\n }\n return item.name;\n },\n default: () => {\n return item.children.map((child, index2) => {\n return (\n <el-sub-menu\n key={child.type + index2}\n index={child.type + index2}\n >\n {{\n title: () => {\n return child.name;\n },\n default: () => {\n return child.children.map(\n (child2: IPortletList) => {\n return renderElMenuItem(child2);\n },\n );\n },\n }}\n </el-sub-menu>\n );\n });\n },\n }}\n </el-sub-menu>\n );\n })}\n </el-menu>\n );\n };\n\n // 绘制门户部件自身\n const renderPortlet = (item: IData) => {\n const portletModel = this.getPortletByCodeName(item.portletCodeName);\n if (portletModel) {\n const provider = this.providers[portletModel.id!];\n const controller = this.portletControllers[portletModel.id!];\n\n const commonProps = {\n modelData: portletModel,\n controller,\n };\n\n if (!provider) {\n return <div>暂未支持{portletModel.portletType}</div>;\n }\n\n const providerComp = resolveComponent(\n provider.component,\n ) as ConcreteComponent;\n\n // 绘制门户部件\n return h(providerComp, {\n ...commonProps,\n key: portletModel.id,\n });\n }\n };\n\n return (\n <div class={this.ns.b()}>\n <div class={this.ns.b('header')}>\n <span>自定义门户</span>\n <span class={this.ns.b('header-utils')}>\n <div class={this.ns.be('header-utils', 'col-num')}>\n 列数:\n <el-input-number\n v-model={this.customC.layoutColNum}\n onChange={this.handleColNumberChange}\n />\n </div>\n <div class={this.ns.be('header-utils', 'row-h')}>\n 单元格高度:\n <el-input-number\n v-model={this.customC.layoutRowH}\n onChange={this.handleRolHChange}\n />\n </div>\n <el-button\n class={this.ns.be('header-utils', 'reset')}\n onClick={this.onReset}\n >\n 恢复默认\n </el-button>\n <el-button\n class={this.ns.be('header-utils', 'save')}\n onClick={this.onSave}\n >\n 保存\n </el-button>\n </span>\n </div>\n <div class={this.ns.b('content')}>\n <div class={this.ns.b('tree')}>\n <el-select\n v-model={this.filterVal}\n clearable\n class={this.ns.b('tree-filter')}\n >\n {this.groups.map(group => {\n return (\n <el-option\n key={group.value}\n value={group.value}\n label={group.name}\n ></el-option>\n );\n })}\n </el-select>\n <div class={this.ns.b('tree-content')}>{renderTree()}</div>\n </div>\n <div class={this.ns.b('scroll-box')} ref='designPanel'>\n <div class={this.ns.b('panel')}>\n <div\n class={this.ns.b('grid-layout-mask')}\n style={{\n backgroundSize: this.maskSize,\n }}\n ></div>\n <grid-layout\n class={this.ns.b('grid-layout')}\n layout={this.layoutModel}\n col-num={this.customC.layoutColNum}\n row-height={this.customC.layoutRowH}\n is-draggable={true}\n is-resizable={true}\n is-mirrored={false}\n vertical-compact={true}\n margin={[10, 10]}\n use-css-transforms={true}\n style={{\n maxHeight: '100%',\n }}\n >\n {this.layoutModel.map(item => {\n return (\n <grid-item\n x={item.x}\n y={item.y}\n w={item.w}\n h={item.h}\n i={item.i}\n key={item.i}\n >\n <el-card class={this.ns.b('grid-layout-item')}>\n <div class={this.ns.b('grid-layout-item-header')}>\n <span>{item.portletName}</span>\n <ion-icon\n name='close-outline'\n onClick={() => this.removeItem(item)}\n ></ion-icon>\n </div>\n <div class={this.ns.b('grid-layout-item-content')}>\n {renderPortlet(item)}\n </div>\n </el-card>\n </grid-item>\n );\n })}\n </grid-layout>\n </div>\n </div>\n </div>\n </div>\n );\n },\n});\n","import {\n CustomDashboardController,\n DashboardController,\n} from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IDashboard, IDBPortletPart } from '@ibiz/model-core';\nimport {\n computed,\n CSSProperties,\n defineComponent,\n onMounted,\n PropType,\n reactive,\n ref,\n} from 'vue';\nimport './custom-dashboard-container.scss';\n\nexport const CustomDashboardContainer = defineComponent({\n name: 'IBizCustomDashboardContainer',\n props: {\n modelData: {\n type: Object as PropType<IDashboard>,\n required: true,\n },\n dashboard: {\n type: Object as PropType<DashboardController>,\n required: true,\n },\n },\n setup(props, { emit }) {\n const ns = useNamespace(`custom-dashboard-container`);\n\n const customC = reactive(new CustomDashboardController(props.modelData));\n\n // 是否初始化完成\n const isInited = ref(false);\n\n // 是否显示设计面板\n const isShowDesign = ref(false);\n\n // 工具栏收缩\n const showTypeDir = ref(false);\n\n // 打开设计面板\n const openDesign = () => {\n isShowDesign.value = true;\n };\n\n // 点击伸缩\n const clickCollapse = (type: string) => {\n showTypeDir.value = type === 'left';\n };\n\n // 根据codeName去全局获取portlet模型\n const getPortletByCodeName = (\n codeName: string,\n ): IDBPortletPart | undefined => {\n const app = ibiz.hub.getApp(ibiz.env.appId);\n if (app.model.appPortlets) {\n const appPortlet = app.model.appPortlets.find(portlet => {\n return portlet.control?.codeName === codeName;\n });\n if (appPortlet) {\n return appPortlet.control as IDBPortletPart;\n }\n }\n };\n\n // 根据自定义数据获取模型数组\n const convertData = (models: IData[]) => {\n const tempModelDatas: IDBPortletPart[] = [];\n if (models.length > 0) {\n models.forEach((item: IData) => {\n const temModelData = getPortletByCodeName(item.portletCodeName);\n if (temModelData) {\n tempModelDatas.push(temModelData);\n }\n });\n }\n return tempModelDatas;\n };\n\n // 保存完成\n const onSaved = (args: IData) => {\n isShowDesign.value = false;\n const tempModelDatas: IDBPortletPart[] = convertData(args.model);\n emit('changed', { model: tempModelDatas });\n };\n\n // 是否显示默认插件\n const isShowDefault = computed(() => {\n return customC.customModelData.length === 0;\n });\n\n onMounted(async () => {\n const model = await customC.loadCustomModelData();\n const tempModelDatas: IDBPortletPart[] = convertData(model);\n emit('changed', { model: tempModelDatas });\n isInited.value = true;\n });\n\n return {\n ns,\n customC,\n isShowDesign,\n isInited,\n isShowDefault,\n showTypeDir,\n openDesign,\n onSaved,\n clickCollapse,\n };\n },\n\n render() {\n return (\n <div class={[this.ns.b()]}>\n <div class={this.ns.b('build-btn')}>\n {this.showTypeDir ? (\n <div>\n <el-button\n class={this.ns.b('deisgn-btn')}\n onClick={this.openDesign}\n >\n <ion-icon name='build-outline'></ion-icon>\n </el-button>\n <el-button\n class={this.ns.b('forward-btn')}\n onClick={() => this.clickCollapse('right')}\n >\n <ion-icon name='chevron-forward-outline'></ion-icon>\n </el-button>\n </div>\n ) : (\n <el-button\n class={this.ns.b('back-btn')}\n onClick={() => this.clickCollapse('left')}\n >\n <ion-icon name='chevron-back-outline'></ion-icon>\n </el-button>\n )}\n </div>\n <el-drawer\n v-model={this.isShowDesign}\n with-header={false}\n size='80%'\n modal-class={'custom-dashboard-drawer'}\n >\n {this.isShowDesign && (\n <iBizDashboardDesign\n dashboard={this.dashboard}\n custom-dashboard={this.customC}\n is-show-design={this.isShowDesign}\n onSaved={this.onSaved}\n />\n )}\n </el-drawer>\n {this.isInited &&\n (this.isShowDefault\n ? this.$slots.default?.()\n : this.customC.customModelData.map(item => {\n const itemStyle = {\n position: 'absolute',\n height: `${item.h * this.customC.layoutRowH}px`,\n width: `calc(100% / ${this.customC.layoutColNum} * ${item.w})`,\n top: `${item.y * this.customC.layoutRowH}px`,\n left: `calc(100% / ${this.customC.layoutColNum} * ${item.x})`,\n } as CSSProperties;\n return (\n <div style={itemStyle}>\n {this.$slots[item.portletCodeName]?.()}\n </div>\n );\n }))}\n </div>\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 DashboardProvider\n * @implements {IControlProvider}\n */\nexport class DashboardProvider implements IControlProvider {\n component: string = 'IBizDashboardControl';\n}\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IDBContainerPortletPart } from '@ibiz/model-core';\nimport { ContainerPortletController } from '@ibiz-template/runtime';\nimport './container-portlet.scss';\n\nexport const ContainerPortlet = defineComponent({\n name: 'IBizContainerPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBContainerPortletPart>,\n required: true,\n },\n controller: {\n type: ContainerPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n return { ns };\n },\n render() {\n const defaultSlots: VNode[] = this.$slots.default?.() || [];\n const content = (\n <iBizRow 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 return (\n <iBizCol\n layoutPos={props.modelData.layoutPos}\n state={props.controller.state}\n >\n {slot}\n </iBizCol>\n );\n })}\n </iBizRow>\n );\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n {content}\n </iBizPortletLayout>\n );\n },\n});\n","import {\n ContainerPortletController,\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n} from '@ibiz-template/runtime';\nimport { IDBPortletPart } from '@ibiz/model-core';\n\n/**\n * 数据看板容器适配器\n *\n * @author lxm\n * @date 2022-10-19 15:10:44\n * @export\n * @class ListPortletProvider\n */\nexport class ContainerPortletProvider implements IPortletProvider {\n component: string = 'IBizContainerPortlet';\n\n async createController(\n portletModel: IDBPortletPart,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<ContainerPortletController> {\n const c = new ContainerPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ContainerPortlet } from './container-portlet';\nimport { ContainerPortletProvider } from './container-portlet.provider';\n\nexport * from './container-portlet';\n\nexport const IBizContainerPortlet = withInstall(\n ContainerPortlet,\n function (v: App) {\n v.component(ContainerPortlet.name, ContainerPortlet);\n // 容器分组\n registerPortletProvider('CONTAINER', () => new ContainerPortletProvider());\n },\n);\n\nexport default IBizContainerPortlet;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent } from 'vue';\nimport { IUIActionGroupDetail } from '@ibiz/model-core';\nimport './portlet-layout.scss';\nimport { PortletPartController } from '@ibiz-template/runtime';\n\n/**\n * 门户控件布局\n */\nexport const PortletLayout = defineComponent({\n name: 'IBizPortletLayout',\n props: {\n controller: {\n type: PortletPartController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace('portlet-layout');\n const c = props.controller;\n // 处理标题\n const isShowHeader = computed(() => {\n return (\n (c.model.showTitleBar && (c.model.title || c.model.sysImage)) ||\n c.model.uiactionGroup\n );\n });\n\n // 点击工具栏处理\n const onActionClick = async (\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ): Promise<void> => {\n await props.controller.onActionClick(detail, event);\n };\n\n return { c, ns, isShowHeader, onActionClick };\n },\n render() {\n const { model, state } = this.controller;\n let title = model.title;\n if (model.titleLanguageRes) {\n title = ibiz.i18n.t(model.titleLanguageRes.lanResTag!, model.title);\n }\n return (\n <div class={[this.ns.b(), this.ns.is('no-header', !this.isShowHeader)]}>\n {this.isShowHeader && (\n <div key='header' class={this.ns.b('header')}>\n <div class={this.ns.be('header', 'left')}>\n {model.showTitleBar && (\n <div class={this.ns.e('caption')}>\n <iBizIcon\n class={this.ns.e('caption-icon')}\n icon={model.sysImage}\n ></iBizIcon>\n <span class={this.ns.e('caption-text')} title={title}>\n {title}\n </span>\n </div>\n )}\n </div>\n <div class={this.ns.be('header', 'right')}>\n {model.uiactionGroup && (\n <iBizActionToolbar\n class={this.ns.e('toolbar')}\n action-details={model.uiactionGroup.uiactionGroupDetails}\n actions-state={state.actionGroupState}\n onActionClick={this.onActionClick}\n ></iBizActionToolbar>\n )}\n </div>\n </div>\n )}\n <div key='content' class={this.ns.b('content')}>\n {this.$slots.default?.()}\n </div>\n </div>\n );\n },\n});\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, h, PropType, resolveComponent } from 'vue';\nimport { IDBAppViewPortletPart } from '@ibiz/model-core';\nimport { ViewPortletController } from '@ibiz-template/runtime';\n\nexport const ViewPortlet = defineComponent({\n name: 'IBizViewPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBAppViewPortletPart>,\n required: true,\n },\n controller: {\n type: ViewPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n const view = props.modelData.portletAppView;\n return { ns, view };\n },\n\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n const { context, params } = this.controller;\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n {h(resolveComponent('IBizViewShell'), {\n context,\n params,\n modelData: this.view,\n })}\n </iBizPortletLayout>\n );\n },\n});\n","import {\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n ViewPortletController,\n} from '@ibiz-template/runtime';\nimport { IDBPortletPart } from '@ibiz/model-core';\n\n/**\n * 数据看板视图适配器\n *\n * @author zk\n * @date 2023-07-12 08:07:58\n * @export\n * @class ViewPortletProvider\n * @implements {IPortletProvider}\n */\nexport class ViewPortletProvider implements IPortletProvider {\n component: string = 'IBizViewPortlet';\n\n async createController(\n portletModel: IDBPortletPart,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<ViewPortletController> {\n const c = new ViewPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ViewPortlet } from './view-portlet';\nimport { ViewPortletProvider } from './view-portlet.provider';\n\nexport * from './view-portlet';\n\nexport const IBizViewPortlet = withInstall(ViewPortlet, function (v: App) {\n v.component(ViewPortlet.name, ViewPortlet);\n // 门户视图\n registerPortletProvider('VIEW', () => new ViewPortletProvider());\n});\n\nexport default IBizViewPortlet;\n","import {\n AppMenuIconViewController,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { IAppMenu, IAppMenuItem } from '@ibiz/model-core';\nimport { defineComponent, PropType, Ref, ref, VNode } from 'vue';\nimport './app-menu-portlet.scss';\n\nexport const AppMenuPortletControl = defineComponent({\n name: 'IBizAppMenuPortletControl',\n props: {\n modelData: { type: Object as PropType<IAppMenu>, required: true },\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 collapse: Boolean,\n currentPath: String,\n },\n setup() {\n const c = useControlController(\n (...args) => new AppMenuIconViewController(...args),\n );\n const ns = useNamespace(\n `control-${c.model.controlType!.toLowerCase()}-portlet`,\n );\n // 默认激活菜单项\n const defaultActive = ref('');\n // 默认展开菜单项数组\n const defaultOpens: Ref<string[]> = ref([]);\n c.model.appMenuItems?.forEach(item => {\n if (item.itemType === 'MENUITEM') {\n defaultOpens.value.push(item.id!);\n }\n });\n\n const onClick = async (key: string, event: MouseEvent): Promise<void> => {\n await c.onClickMenuItem(key, event);\n };\n\n const renderItem = (item: IAppMenuItem): VNode | null => {\n const state = c.state.menuItemsState[item.id!];\n if (!state.visible) {\n return null;\n }\n let label = item.caption;\n if (item.capLanguageRes) {\n label = ibiz.i18n.t(item.capLanguageRes.lanResTag!, item.caption);\n }\n return (\n <div\n class={[ns.b('item'), ns.is('disabled', !item.appFuncId)]}\n title={item.tooltip || item.caption}\n onClick={(event): void => {\n if (item.appFuncId) {\n onClick(item.id!, event);\n }\n }}\n >\n <iBizIcon\n class={ns.be('item', 'icon')}\n icon={item.sysImage}\n ></iBizIcon>\n <span class={ns.be('item', 'label')}>{label}</span>\n </div>\n );\n };\n\n const renderGroup = (item: IAppMenuItem): VNode | null => {\n const state = c.state.menuItemsState[item.id!];\n if (!state.visible) {\n return null;\n }\n return (\n <el-collapse-item\n class={ns.b('group')}\n name={item.id}\n title={item.caption}\n >\n {item.appMenuItems?.map(child => {\n return renderItem(child);\n })}\n </el-collapse-item>\n );\n };\n\n return {\n c,\n ns,\n defaultActive,\n defaultOpens,\n onClick,\n renderGroup,\n renderItem,\n };\n },\n render() {\n const { state, model } = this.c;\n let content: VNode | null = null;\n if (state.isCreated && model.appMenuItems?.length) {\n content = (\n <el-collapse class={this.ns.e('content')} v-model={this.defaultOpens}>\n {model.appMenuItems.map(item => {\n if (item.itemType !== 'MENUITEM') {\n return null;\n }\n return this.renderGroup(item);\n })}\n </el-collapse>\n );\n }\n\n return (\n <iBizControlBase class={[this.ns.b()]} controller={this.c}>\n {content}\n </iBizControlBase>\n );\n },\n});\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType } from 'vue';\nimport { IAppMenu, IDBAppMenuPortletPart } from '@ibiz/model-core';\nimport { ControlType, MenuPortletController } from '@ibiz-template/runtime';\n\nexport const MenuPortlet = defineComponent({\n name: 'IBizMenuPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBAppMenuPortletPart>,\n required: true,\n },\n controller: {\n type: MenuPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n const menu: IAppMenu | undefined = props.modelData.controls?.find(item => {\n return item.controlType === ControlType.APP_MENU;\n });\n return { ns, menu };\n },\n\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n const { context, params } = this.controller;\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n {this.menu && (\n <iBizAppMenuPortletControl\n modelData={this.menu}\n context={context}\n params={params}\n ></iBizAppMenuPortletControl>\n )}\n </iBizPortletLayout>\n );\n },\n});\n","import {\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n MenuPortletController,\n} from '@ibiz-template/runtime';\nimport { IDBPortletPart } from '@ibiz/model-core';\n\n/**\n * 数据看板菜单适配器\n *\n * @author lxm\n * @date 2022-10-19 15:10:44\n * @export\n * @class ListPortletProvider\n */\nexport class MenuPortletProvider implements IPortletProvider {\n component: string = 'IBizMenuPortlet';\n\n async createController(\n portletModel: IDBPortletPart,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<MenuPortletController> {\n const c = new MenuPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { AppMenuPortletControl } from './app-menu-portlet/app-menu-portlet';\nimport { MenuPortlet } from './menu-portlet';\nimport { MenuPortletProvider } from './menu-portlet.provider';\n\nexport * from './menu-portlet';\n\nexport const IBizMenuPortlet = withInstall(MenuPortlet, function (v: App) {\n v.component(MenuPortlet.name, MenuPortlet);\n v.component(AppMenuPortletControl.name, AppMenuPortletControl);\n // 菜单\n registerPortletProvider('APPMENU', () => new MenuPortletProvider());\n});\n\nexport default IBizMenuPortlet;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, resolveComponent, h } from 'vue';\nimport { IDBChartPortlet } from '@ibiz/model-core';\nimport { ChartPortletController, ControlType } from '@ibiz-template/runtime';\n\nexport const ChartPortlet = defineComponent({\n name: 'IBizChartPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBChartPortlet>,\n required: true,\n },\n controller: {\n type: ChartPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n\n const chart = props.modelData.controls?.find(item => {\n return item.controlType === ControlType.CHART;\n });\n\n return { ns, chart };\n },\n\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n const { context, params } = this.controller;\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n {h(resolveComponent('IBizChartControl'), {\n context,\n params,\n modelData: this.chart,\n })}\n </iBizPortletLayout>\n );\n },\n});\n","import {\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n ChartPortletController,\n} from '@ibiz-template/runtime';\nimport { IDBChartPortlet } from '@ibiz/model-core';\n\n/**\n * 图表看板视图适配器\n *\n * @author zk\n * @date 2023-07-12 08:07:58\n * @export\n * @class ChartPortletProvider\n * @implements {IPortletProvider}\n */\nexport class ChartPortletProvider implements IPortletProvider {\n component: string = 'IBizChartPortlet';\n\n async createController(\n portletModel: IDBChartPortlet,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<ChartPortletController> {\n const c = new ChartPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ChartPortlet } from './chart-portlet';\nimport { ChartPortletProvider } from './chart-portlet.provider';\n\nexport * from './chart-portlet';\n\nexport const IBizChartPortlet = withInstall(ChartPortlet, function (v: App) {\n v.component(ChartPortlet.name, ChartPortlet);\n // 门户视图\n registerPortletProvider('CHART', () => new ChartPortletProvider());\n});\n\nexport default IBizChartPortlet;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, resolveComponent, h } from 'vue';\nimport { IDBRawItemPortletPart } from '@ibiz/model-core';\nimport { RawItemPortletController } from '@ibiz-template/runtime';\n\nexport const RawItemPortlet = defineComponent({\n name: 'IBizRawItemPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBRawItemPortletPart>,\n required: true,\n },\n controller: {\n type: RawItemPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n\n const rawItem = props.modelData;\n\n return { ns, rawItem };\n },\n\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n {h(resolveComponent('iBizRawItem'), {\n rawItem: this.rawItem,\n })}\n </iBizPortletLayout>\n );\n },\n});\n","import {\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n RawItemPortletController,\n} from '@ibiz-template/runtime';\nimport { IDBRawItemPortletPart } from '@ibiz/model-core';\n\n/**\n * 直接内容门户部件适配器\n *\n * @author zk\n * @date 2023-07-12 08:07:58\n * @export\n * @class RawItemPortletProvider\n * @implements {IPortletProvider}\n */\nexport class RawItemPortletProvider implements IPortletProvider {\n component: string = 'IBizRawItemPortlet';\n\n async createController(\n portletModel: IDBRawItemPortletPart,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<RawItemPortletController> {\n const c = new RawItemPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { RawItemPortlet } from './rawitem-portlet';\nimport { RawItemPortletProvider } from './rawitem-portlet.provider';\n\nexport * from './rawitem-portlet';\n\nexport const IBizRawItemPortlet = withInstall(\n RawItemPortlet,\n function (v: App) {\n v.component(RawItemPortlet.name, RawItemPortlet);\n registerPortletProvider('RAWITEM', () => new RawItemPortletProvider());\n },\n);\n\nexport default IBizRawItemPortlet;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, resolveComponent, h } from 'vue';\nimport { IDBListPortletPart } from '@ibiz/model-core';\nimport { ControlType, ListPortletController } from '@ibiz-template/runtime';\n\nexport const ListPortlet = defineComponent({\n name: 'IBizListPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBListPortletPart>,\n required: true,\n },\n controller: {\n type: ListPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n\n const list = props.modelData.controls?.find(item => {\n return item.controlType === ControlType.LIST;\n });\n\n return { ns, list };\n },\n\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n const { context, params } = this.controller;\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n {h(resolveComponent('IBizListControl'), {\n context,\n params,\n modelData: this.list,\n })}\n </iBizPortletLayout>\n );\n },\n});\n","import {\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n ListPortletController,\n} from '@ibiz-template/runtime';\nimport { IDBListPortletPart } from '@ibiz/model-core';\n\n/**\n * 列表门户部件适配器\n *\n * @author zk\n * @date 2023-07-12 08:07:58\n * @export\n * @class ListPortletProvider\n * @implements {IPortletProvider}\n */\nexport class ListPortletProvider implements IPortletProvider {\n component: string = 'IBizListPortlet';\n\n async createController(\n portletModel: IDBListPortletPart,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<ListPortletController> {\n const c = new ListPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ListPortlet } from './list-portlet';\nimport { ListPortletProvider } from './list-portlet.provider';\n\nexport * from './list-portlet';\n\nexport const IBizListPortlet = withInstall(ListPortlet, function (v: App) {\n v.component(ListPortlet.name, ListPortlet);\n registerPortletProvider('LIST', () => new ListPortletProvider());\n});\n\nexport default IBizListPortlet;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType } from 'vue';\nimport { IDBHtmlPortletPart } from '@ibiz/model-core';\nimport { HtmlPortletController } from '@ibiz-template/runtime';\nimport './html-portlet.scss';\n\nexport const HtmlPortlet = defineComponent({\n name: 'IBizHtmlPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBHtmlPortletPart>,\n required: true,\n },\n controller: {\n type: HtmlPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n\n return { ns };\n },\n\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n <iframe src={this.modelData.pageUrl}></iframe>\n </iBizPortletLayout>\n );\n },\n});\n","import {\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n HtmlPortletController,\n} from '@ibiz-template/runtime';\nimport { IDBHtmlPortletPart } from '@ibiz/model-core';\n\n/**\n * 网页门户部件适配器\n *\n * @author zk\n * @date 2023-07-12 08:07:58\n * @export\n * @class HtmlPortletProvider\n * @implements {IPortletProvider}\n */\nexport class HtmlPortletProvider implements IPortletProvider {\n component: string = 'IBizHtmlPortlet';\n\n async createController(\n portletModel: IDBHtmlPortletPart,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<HtmlPortletController> {\n const c = new HtmlPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { HtmlPortlet } from './html-portlet';\nimport { HtmlPortletProvider } from './html-portlet.provider';\n\nexport * from './html-portlet';\n\nexport const IBizHtmlPortlet = withInstall(HtmlPortlet, function (v: App) {\n v.component(HtmlPortlet.name, HtmlPortlet);\n registerPortletProvider('HTML', () => new HtmlPortletProvider());\n});\n\nexport default IBizHtmlPortlet;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType } from 'vue';\nimport { IDBToolbarPortlet, IUIActionGroupDetail } from '@ibiz/model-core';\nimport { ActionBarPortletController } from '@ibiz-template/runtime';\n\nexport const ActionBarPortlet = defineComponent({\n name: 'IBizActionBarPortlet',\n props: {\n modelData: {\n type: Object as PropType<IDBToolbarPortlet>,\n required: true,\n },\n controller: {\n type: ActionBarPortletController,\n required: true,\n },\n },\n setup(props) {\n const ns = useNamespace(\n `portlet-${props.modelData.portletType?.toLowerCase()}`,\n );\n\n // 点击工具栏处理\n const onActionClick = async (\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ): Promise<void> => {\n await props.controller.onActionClick(detail, event);\n };\n\n return { ns, onActionClick };\n },\n\n render() {\n const classArr: string[] = [\n this.ns.b(),\n this.ns.m(this.modelData.codeName),\n ...this.controller.containerClass,\n ];\n\n return (\n <iBizPortletLayout controller={this.controller} class={classArr}>\n {this.modelData.uiactionGroup && (\n <iBizActionToolbar\n action-details={this.modelData.uiactionGroup.uiactionGroupDetails}\n actions-state={this.controller.state.actionGroupState}\n onActionClick={this.onActionClick}\n ></iBizActionToolbar>\n )}\n </iBizPortletLayout>\n );\n },\n});\n","import {\n IDashboardController,\n IPortletContainerController,\n IPortletProvider,\n ActionBarPortletController,\n} from '@ibiz-template/runtime';\nimport { IDBToolbarPortlet } from '@ibiz/model-core';\n\n/**\n * 操作栏门户部件适配器\n *\n * @author zk\n * @date 2023-07-12 08:07:58\n * @export\n * @class ActionBarPortletProvider\n * @implements {IPortletProvider}\n */\nexport class ActionBarPortletProvider implements IPortletProvider {\n component: string = 'IBizActionBarPortlet';\n\n async createController(\n portletModel: IDBToolbarPortlet,\n dashboard: IDashboardController,\n parent?: IPortletContainerController,\n ): Promise<ActionBarPortletController> {\n const c = new ActionBarPortletController(\n portletModel as IPortletContainerController,\n dashboard,\n parent,\n );\n await c.init();\n return c;\n }\n}\n","import { registerPortletProvider } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ActionBarPortlet } from './actionbar-portlet';\nimport { ActionBarPortletProvider } from './actionbar-portlet.provider';\n\nexport * from './actionbar-portlet';\n\nexport const IBizActionBarPortlet = withInstall(\n ActionBarPortlet,\n function (v: App) {\n v.component(ActionBarPortlet.name, ActionBarPortlet);\n // 门户视图\n registerPortletProvider('ACTIONBAR', () => new ActionBarPortletProvider());\n },\n);\n\nexport default IBizActionBarPortlet;\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { DashboardControl } from './dashboard';\nimport { DashboardDesign } from './dashboard-design/dashboard-design';\nimport { CustomDashboardContainer } from './custom-dashboard-container/custom-dashboard-container';\nimport { DashboardProvider } from './dashboard.provider';\nimport {\n IBizContainerPortlet,\n IBizMenuPortlet,\n IBizViewPortlet,\n PortletLayout,\n IBizChartPortlet,\n IBizRawItemPortlet,\n IBizListPortlet,\n IBizHtmlPortlet,\n IBizActionBarPortlet,\n} from './portlet';\n\nexport * from './portlet';\n\nexport const IBizDashboardControl = withInstall(\n DashboardControl,\n function (v: App) {\n v.component(DashboardControl.name, DashboardControl);\n v.component(DashboardDesign.name, DashboardDesign);\n v.component(CustomDashboardContainer.name, CustomDashboardContainer);\n registerControlProvider(\n ControlType.DASHBOARD,\n () => new DashboardProvider(),\n );\n v.component(PortletLayout.name, PortletLayout);\n v.use(IBizContainerPortlet);\n v.use(IBizViewPortlet);\n v.use(IBizMenuPortlet);\n v.use(IBizChartPortlet);\n v.use(IBizRawItemPortlet);\n v.use(IBizListPortlet);\n v.use(IBizHtmlPortlet);\n v.use(IBizActionBarPortlet);\n },\n);\n\nexport default IBizDashboardControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, ref, VNode, watch } from 'vue';\nimport { ILayoutPanel, ISysCalendar } from '@ibiz/model-core';\nimport './calendar.scss';\nimport {\n CalendarController,\n ICalendarItemData,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport dayjs from 'dayjs';\n\nexport const CalendarControl = defineComponent({\n name: 'IBizCalendarControl',\n props: {\n modelData: { type: Object as PropType<ISysCalendar>, required: true },\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 mdctrlActiveMode: { type: Number, default: undefined },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController(\n (...args) => new CalendarController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const calendarRef = ref<IData>();\n\n const selectDate = (tag: string): void => {\n if (!calendarRef.value) return;\n calendarRef.value.selectDate(tag);\n };\n\n watch(\n () => c.state.selectedDate,\n (oldVal: Date, newVal: Date) => {\n const oldDateString = dayjs(oldVal).format('YYYY-MM');\n const newDateString = dayjs(newVal).format('YYYY-MM');\n // 月份相同不加载数据\n if (oldDateString === newDateString) {\n return;\n }\n c.load();\n },\n );\n\n /**\n * 计算数据项样式\n *\n * @author zk\n * @date 2023-08-08 11:08:29\n * @param {ICalendarItemData} data\n * @return {*} {IData}\n */\n const calcItemStyle = (data: ICalendarItemData): IData => {\n return {\n color: data.color,\n backgroundColor: data.bkColor,\n };\n };\n\n return {\n c,\n ns,\n calendarRef,\n selectDate,\n calcItemStyle,\n };\n },\n render() {\n // 绘制项布局面板\n const renderPanelItem = (\n item: ICalendarItemData,\n modelData: ILayoutPanel,\n ): VNode => {\n const { context, params } = this.c;\n // 是否选中数据\n const findIndex = this.c.state.selectedData.findIndex(data => {\n return data.deData.srfkey === item.deData.srfkey;\n });\n const itemClass = [\n this.ns.b('item'),\n this.ns.is('active', findIndex !== -1),\n ];\n const style = this.calcItemStyle(item);\n return (\n <iBizControlShell\n class={itemClass}\n data={item.deData}\n modelData={modelData}\n context={context}\n params={params}\n style={style}\n onClick={(e: MouseEvent): Promise<void> => {\n e.stopPropagation();\n return this.c.onRowClick(item);\n }}\n onDblclick={(e: MouseEvent): Promise<void> => {\n e.stopPropagation();\n return this.c.onDbRowClick(item);\n }}\n ></iBizControlShell>\n );\n };\n\n // 绘制默认列表项\n const renderDefaultItem = (item: ICalendarItemData): VNode => {\n // 是否选中数据\n const findIndex = this.c.state.selectedData.findIndex(data => {\n return data.deData.srfkey === item.deData.srfkey;\n });\n const itemClass = [\n this.ns.b('item'),\n this.ns.is('active', findIndex !== -1),\n ];\n const style = this.calcItemStyle(item);\n return (\n <div\n class={itemClass}\n key={item.deData.srfkey}\n style={style}\n onClick={(): Promise<void> => this.c.onRowClick(item)}\n onDblclick={(): Promise<void> => this.c.onDbRowClick(item)}\n >\n {`${item.text}`}\n </div>\n );\n };\n\n /**\n * 绘制日历列表\n *\n * @author zk\n * @date 2023-08-08 02:08:34\n * @param {ICalendarItemData[]} items\n * @param {ISysCalendarItem} model\n * @return {*} {VNode[]}\n */\n const renderCalendarList = (items: ICalendarItemData[]): VNode[] => {\n return items.map(item => {\n const model = this.c.model.sysCalendarItems?.find(calendarItems => {\n return item.itemType === calendarItems.itemType;\n });\n const panel = model!.layoutPanel;\n return panel ? renderPanelItem(item, panel) : renderDefaultItem(item);\n });\n };\n\n /**\n * 绘制日历项\n *\n * @author zk\n * @date 2023-08-08 02:08:26\n * @return {*} {VNode}\n */\n const renderCalendarItems = (date: Date): VNode[] => {\n const dateString = dayjs(date).format('YYYY-MM-DD');\n const items = this.c.state.items.filter((item: ICalendarItemData) => {\n const begin = new Date(item.beginTime);\n return dateString === dayjs(begin).format('YYYY-MM-DD');\n });\n return renderCalendarList(items);\n };\n\n /**\n * 绘制默认的日历\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-22 14:18:10\n */\n const renderElCalender = () => {\n return (\n <div class={this.ns.b('content')}>\n <el-calendar v-model={this.c.state.selectedDate} ref='calendarRef'>\n {{\n header: ({ date }: { date: string }): VNode[] => {\n return [\n <span>{date}</span>,\n <div class={this.ns.b('content-header')}>\n <el-date-picker\n v-model={this.c.state.selectedDate}\n type='month'\n />\n <el-button-group>\n <el-button\n size='small'\n onClick={(): void => {\n this.selectDate('prev-year');\n }}\n >\n 去年\n </el-button>\n <el-button\n size='small'\n onClick={(): void => {\n this.selectDate('prev-month');\n }}\n >\n 上个月\n </el-button>\n <el-button\n size='small'\n onClick={(): void => {\n this.selectDate('today');\n }}\n >\n 今天\n </el-button>\n <el-button\n size='small'\n onClick={(): void => {\n this.selectDate('next-month');\n }}\n >\n 下个月\n </el-button>\n <el-button\n size='small'\n onClick={(): void => {\n this.selectDate('next-year');\n }}\n >\n 明年\n </el-button>\n </el-button-group>\n </div>,\n ];\n },\n 'date-cell': ({ data }: { data: IData }): VNode => {\n const { date } = data;\n return (\n <div class={this.ns.b('day')}>\n <p class={this.ns.b('date-text')}>{date.getDate()}</p>\n <div class={this.ns.b('items')}>\n {renderCalendarItems(date)}\n </div>\n </div>\n );\n },\n }}\n </el-calendar>\n <div class={this.ns.b('footer')}>\n {this.c.model.sysCalendarItems?.map(calendarItem => {\n let label = calendarItem.name!;\n if (calendarItem.nameLanguageRes) {\n label = ibiz.i18n.t(\n calendarItem.nameLanguageRes.lanResTag!,\n calendarItem.name,\n );\n }\n return (\n <div class={this.ns.e('calendar-item')}>\n <div\n class={this.ns.e('icon')}\n style={{\n background: calendarItem.bkcolor,\n color: calendarItem.color,\n }}\n ></div>\n {label}\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n /**\n * 无数据\n * @param {*} VNode\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-22 14:46:37\n */\n const renderNoData = (): VNode | false => {\n // 未加载不显示无数据\n const { isLoaded } = this.c.state;\n return (\n isLoaded && (\n <iBizNoData\n text={this.c.model.emptyText}\n emptyTextLanguageRes={this.c.model.emptyTextLanguageRes}\n ></iBizNoData>\n )\n );\n };\n\n /**\n * 绘制时间轴日历\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-11-22 14:18:25\n */\n const renderTimeLine = () => {\n return (\n <div class={this.ns.b('timeline-content')}>\n <el-timeline>\n {this.c.state.items.length > 0\n ? this.c.state.items.map(item => {\n const model = this.c.model.sysCalendarItems?.find(\n calendarItems => {\n return item.itemType === calendarItems.itemType;\n },\n );\n return (\n <el-timeline-item\n key={item.id}\n placement='top'\n color={item.bkColor}\n timestamp={item.beginTime}\n >\n {model?.layoutPanel\n ? renderPanelItem(item, model.layoutPanel)\n : renderDefaultItem(item)}\n </el-timeline-item>\n );\n })\n : renderNoData()}\n </el-timeline>\n </div>\n );\n };\n\n const renderCalendar = () => {\n switch (this.c.model.calendarStyle) {\n case 'TIMELINE':\n return renderTimeLine();\n break;\n default:\n return renderElCalender();\n break;\n }\n };\n\n return (\n <iBizControlBase controller={this.c}>{renderCalendar()}</iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 树适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class CalendarProvider\n * @implements {IControlProvider}\n */\nexport class CalendarProvider implements IControlProvider {\n component: string = 'IBizCalendarControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { CalendarControl } from './calendar';\nimport { CalendarProvider } from './calendar.provider';\n\nexport const IBizCalendarControl = withInstall(\n CalendarControl,\n function (v: App) {\n v.component(CalendarControl.name, CalendarControl);\n registerControlProvider(ControlType.CALENDAR, () => new CalendarProvider());\n },\n);\n\nexport default IBizCalendarControl;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent, PropType, StyleValue, VNode } from 'vue';\nimport draggable from 'vuedraggable';\nimport {\n IDEKanban,\n ILayoutPanel,\n IUIActionGroupDetail,\n} from '@ibiz/model-core';\nimport {\n KanbanController,\n IMDControlGroupState,\n IDragChangeInfo,\n IControlProvider,\n} from '@ibiz-template/runtime';\nimport './kanban.scss';\n\nexport const KanbanControl = defineComponent({\n name: 'IBizKanbanControl',\n components: {\n draggable,\n },\n props: {\n modelData: { type: Object as PropType<IDEKanban>, required: true },\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 mdctrlActiveMode: { type: Number, default: undefined },\n singleSelect: { type: Boolean, default: undefined },\n loadDefault: { type: Boolean, default: true },\n },\n setup(props) {\n const c = useControlController((...args) => new KanbanController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const disabled = computed(() => {\n return !c.state.draggable || c.state.updating;\n });\n\n const groupClass = c.model.groupSysCss?.cssName || ''; // 分组样式表\n\n // 分组的行内样式\n const groupStyle: StyleValue = {};\n switch (c.model.groupLayout) {\n case 'ROW':\n groupStyle.width = `${c.model.groupWidth || 300}px`;\n groupStyle.height = '100%';\n break;\n case 'COLUMN':\n groupStyle.width = '100%';\n groupStyle.height = `${c.model.height || 500}px`;\n break;\n default:\n }\n\n // 行单击事件\n const onRowClick = (item: IData, event: MouseEvent): Promise<void> => {\n event.stopPropagation();\n return c.onRowClick(item);\n };\n\n // 行双击事件\n const onDbRowClick = (item: IData, event: MouseEvent): Promise<void> => {\n event.stopPropagation();\n return c.onDbRowClick(item);\n };\n\n // 绘制项布局面板\n const renderPanelItemLayout = (\n item: IData,\n modelData: ILayoutPanel,\n ): VNode => {\n const { context, params } = c;\n return (\n <iBizControlShell\n data={item}\n modelData={modelData}\n context={context}\n params={params}\n ></iBizControlShell>\n );\n };\n\n // 绘制操作项行为\n const renderItemAction = (item: IData): VNode => {\n return (\n <iBizActionToolbar\n class={ns.bem('item', 'bottom', 'actions')}\n action-details={\n c.getOptItemModel()!.deuiactionGroup?.uiactionGroupDetails\n }\n actions-state={c.getOptItemAction(item)}\n onActionClick={(\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ): Promise<void> => c.onActionClick(detail, item, event)}\n ></iBizActionToolbar>\n );\n };\n\n // 绘制默认项\n const renderDefaultItem = (item: IData) => {\n return [\n <div class={ns.be('item', 'top')}>\n <div class={ns.bem('item', 'top', 'title')}>{item.srfmajortext}</div>\n <div class={ns.bem('item', 'top', 'description')}>{item.content}</div>\n </div>,\n c.getOptItemModel() ? (\n <div class={ns.be('item', 'bottom')}>{renderItemAction(item)}</div>\n ) : null,\n ];\n };\n\n // 绘制卡片\n const renderCard = (item: IData): VNode => {\n // 是否选中数据\n const findIndex = c.state.selectedData.findIndex(data => {\n return data.srfkey === item.srfkey;\n });\n const cardClass = [\n ns.b('item'),\n ns.is('selected', findIndex !== -1),\n ns.is('disabled', disabled.value),\n ];\n const cardStyle: StyleValue = {};\n if (c.model.cardWidth) {\n cardStyle.width = `${c.model.cardWidth}px`;\n }\n if (c.model.cardHeight) {\n cardStyle.height = `${c.model.cardHeight}px`;\n }\n\n // 项布局面板\n const panel = props.modelData.itemLayoutPanel;\n\n return (\n <el-card\n shadow='hover'\n class={cardClass}\n body-style={cardStyle}\n onClick={(event: MouseEvent): Promise<void> =>\n onRowClick(item, event)\n }\n onDblclick={(event: MouseEvent): Promise<void> =>\n onDbRowClick(item, event)\n }\n >\n {panel ? renderPanelItemLayout(item, panel) : renderDefaultItem(item)}\n </el-card>\n );\n };\n\n /**\n * 绘制无数据\n * @author lxm\n * @date 2023-08-30 03:53:21\n * @return {*} {(VNode | undefined)}\n */\n const renderNoData = (): VNode | undefined => {\n // 未加载不显示无数据\n if (!c.state.isLoaded) {\n return;\n }\n return (\n <iBizNoData\n text={c.model.emptyText}\n emptyTextLanguageRes={c.model.emptyTextLanguageRes}\n ></iBizNoData>\n );\n };\n\n let cacheInfo: Partial<IDragChangeInfo> | null = null;\n const onChange = (evt: IData, groupKey: string | number) => {\n if (evt.moved) {\n // 排序\n c.onDragChange({\n from: groupKey,\n to: groupKey,\n fromIndex: evt.moved.oldIndex,\n toIndex: evt.moved.newIndex,\n });\n }\n if (evt.added) {\n cacheInfo = {\n to: groupKey,\n toIndex: evt.added.newIndex,\n };\n }\n if (evt.removed) {\n if (cacheInfo) {\n cacheInfo.from = groupKey;\n cacheInfo.fromIndex = evt.removed.oldIndex;\n c.onDragChange(cacheInfo as IDragChangeInfo);\n }\n cacheInfo = null;\n }\n };\n\n // 绘制分组\n const renderGroup = (group: IMDControlGroupState) => {\n return (\n <div class={[ns.b('group'), groupClass]} style={groupStyle}>\n <div style={{}} class={ns.be('group', 'header')}>\n <span class={ns.be('group', 'header-caption')}>\n {group.caption}\n </span>\n <span class={ns.be('group', 'header-right')}>\n {c.enableNew && (\n <el-button\n class={ns.be('group', 'header-new')}\n text\n circle\n onClick={(event: MouseEvent) => {\n c.onClickNew(event, group.key);\n }}\n >\n <ion-icon name='add-outline' title='新建'></ion-icon>\n </el-button>\n )}\n {c.model.groupUIActionGroup && group.groupActionGroupState && (\n <iBizActionToolbar\n class={ns.be('group', 'header-actions')}\n action-details={\n c.model.groupUIActionGroup.uiactionGroupDetails\n }\n caption='...'\n mode='dropdown'\n actions-state={c.state.groupActionGroupState}\n onActionClick={(\n detail: IUIActionGroupDetail,\n event: MouseEvent,\n ) => {\n c.onGroupToolbarClick(detail, event, group);\n }}\n ></iBizActionToolbar>\n )}\n </span>\n </div>\n <draggable\n class={ns.be('group', 'list')}\n modelValue={group.children}\n group={c.model.id}\n itemKey='srfkey'\n disabled={disabled.value}\n onChange={(evt: IData) => onChange(evt, group.key)}\n >\n {{\n item: ({ element }: { element: IData }) => {\n return renderCard(element);\n },\n header: () => {\n if (group.children.length) {\n return null;\n }\n return (\n <div class={ns.be('group', 'list')}>{renderNoData()}</div>\n );\n },\n }}\n </draggable>\n </div>\n );\n };\n\n return {\n c,\n ns,\n renderGroup,\n };\n },\n render() {\n const { groups, isCreated } = this.c.state;\n return (\n <iBizControlBase\n controller={this.c}\n class={[this.ns.m(this.modelData.groupLayout?.toLowerCase())]}\n >\n {isCreated &&\n groups.length > 0 &&\n groups.map(group => {\n return this.renderGroup(group);\n })}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 看板(kanban)部件适配器\n *\n * @export\n * @class KanbanProvider\n * @implements {IControlProvider}\n */\nexport class KanbanProvider implements IControlProvider {\n component: string = 'IBizKanbanControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { KanbanControl } from './kanban';\nimport { KanbanProvider } from './kanban.provider';\n\nexport const IBizKanbanControl = withInstall(KanbanControl, function (v: App) {\n v.component(KanbanControl.name, KanbanControl);\n registerControlProvider(ControlType.KANBAN, () => new KanbanProvider());\n});\n\nexport default IBizKanbanControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport {\n computed,\n defineComponent,\n h,\n PropType,\n resolveComponent,\n VNode,\n VNodeArrayChildren,\n} from 'vue';\nimport { IDETree, IDETreeColumn } from '@ibiz/model-core';\nimport { ITreeNodeData, TreeGridExController } from '@ibiz-template/runtime';\nimport './tree-grid-ex.scss';\n\nexport const TreeGridExControl = defineComponent({\n name: 'IBizTreeGridExControl',\n props: {\n modelData: { type: Object as PropType<IDETree>, required: true },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n },\n setup() {\n const c = useControlController(\n (...args) => new TreeGridExController(...args),\n );\n const ns2 = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const ns = useNamespace(`control-grid`);\n\n const renderNoData = (): VNode | false => {\n // 未加载不显示无数据\n const { isLoaded } = c.state;\n return (\n isLoaded && (\n <iBizNoData\n text={c.model.emptyText}\n emptyTextLanguageRes={c.model.emptyTextLanguageRes}\n ></iBizNoData>\n )\n );\n };\n\n // 实际绘制的表格列\n const renderColumns = computed(() => {\n const columns: IDETreeColumn[] = [];\n c.state.columnStates.forEach(item => {\n if (item.hidden) {\n return;\n }\n const columnModel =\n c.fieldColumns[item.key]?.model || c.uaColumns[item.key]?.model;\n if (columnModel) {\n columns.push(columnModel);\n }\n });\n return columns;\n });\n\n // 根据id查找树节点数据对象\n const findNodeData = (id: string): ITreeNodeData | undefined => {\n return c.state.items.find(item => item.id === id);\n };\n\n const calcHasChildren = (node: IData) => {\n node.hasChildren = !node.leaf;\n return node;\n };\n\n /** 树展示数据 */\n const treeData = computed(() => {\n if (!c.state.isLoaded) {\n return [];\n }\n return c.model.rootVisible\n ? c.state.rootNodes\n : c.state.rootNodes.reduce<IData[]>((result, nodeData) => {\n calcHasChildren(nodeData);\n if (nodeData.children) {\n return result.concat(nodeData.children.map(calcHasChildren));\n }\n return result;\n }, []);\n });\n\n /**\n * 触发节点加载数据\n * @author lxm\n * @date 2023-05-29 09:16:07\n * @param {IData} item\n * @param {(nodes: IData[]) => void} callback\n */\n const loadData = async (\n item: IData,\n treeNode: unknown,\n callback: (nodes: IData[]) => void,\n ) => {\n let nodes: IData[];\n if (item.level === 0) {\n nodes = treeData.value;\n } else {\n const nodeData = findNodeData(item.id)!;\n if (nodeData.children) {\n nodes = nodeData.children;\n } else {\n nodes = await c.loadNodes(nodeData);\n }\n }\n callback(nodes);\n };\n\n return {\n c,\n ns,\n ns2,\n treeData,\n renderColumns,\n renderNoData,\n loadData,\n };\n },\n render() {\n const state = this.c.state;\n\n const renderColumn = (\n model: IDETreeColumn,\n index: number,\n ): VNode | null => {\n if (model.hideDefault) {\n return null;\n }\n const { codeName: columnName, width } = model;\n const columnC = this.c.columns[columnName!];\n const columnState = this.c.state.columnStates.find(\n item => item.key === columnName,\n )!;\n\n // 最后一列变为自适应列\n const widthFlexGrow = index === this.renderColumns.length - 1;\n\n const widthName = widthFlexGrow ? 'min-width' : 'width';\n return (\n <el-table-column\n label={model.caption}\n prop={columnName}\n {...{ [widthName]: width }}\n fixed={columnState.fixed}\n sortable={model.enableSort ? 'custom' : false}\n align={model.align?.toLowerCase() || 'center'}\n >\n {{\n default: ({ row }: IData): VNode | null => {\n const elRow = row; // element表格数据\n\n const rowState = state.items.find(\n item => item.srfkey === elRow.srfkey,\n );\n if (rowState) {\n Object.assign(rowState, { data: rowState.deData });\n const comp = resolveComponent(\n this.c.providers[columnName!].component,\n );\n return h(comp, {\n controller: columnC,\n row: rowState,\n key: elRow.srfkey + columnName,\n });\n }\n return null;\n },\n }}\n </el-table-column>\n );\n };\n return (\n <iBizControlBase controller={this.c} class={[this.ns.b(), this.ns2.b()]}>\n {this.c.state.isLoaded && (\n <el-table\n ref={'tableRef'}\n class={this.ns.e('table')}\n border\n row-key={'id'}\n lazy\n data={this.treeData}\n tree-props={{ children: 'children', hasChildren: 'hasChildren' }}\n load={this.loadData}\n >\n {{\n empty: this.renderNoData,\n default: (): VNodeArrayChildren => {\n return [\n this.renderColumns.map((model, index) => {\n return renderColumn(model, index);\n }),\n ];\n },\n }}\n </el-table>\n )}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 树适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class TreeProvider\n * @implements {IControlProvider}\n */\nexport class TreeGridExProvider implements IControlProvider {\n component: string = 'IBizTreeGridExControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { TreeGridExControl } from './tree-grid-ex';\nimport { TreeGridExProvider } from './tree-grid-ex.provider';\n\nexport const IBizTreeGridExControl = withInstall(\n TreeGridExControl,\n function (v: App) {\n v.component(TreeGridExControl.name, TreeGridExControl);\n registerControlProvider(\n ControlType.TREE_GRIDEX,\n () => new TreeGridExProvider(),\n );\n },\n);\n\nexport default IBizTreeGridExControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport {\n computed,\n defineComponent,\n PropType,\n VNode,\n VNodeArrayChildren,\n} from 'vue';\nimport { IDEGrid, IDEGridFieldColumn } from '@ibiz/model-core';\nimport { IControlProvider, TreeGridController } from '@ibiz-template/runtime';\nimport { RuntimeModelError } from '@ibiz-template/core';\nimport { useRowEditPopover } from '../grid/row-edit-popover/use-row-edit-popover';\nimport {\n IGridProps,\n useAppGridBase,\n useAppGridPagination,\n useITableEvent,\n} from '../grid/grid';\nimport { renderChildColumn } from '../grid/grid/grid';\n\nexport const TreeGridControl = defineComponent({\n name: 'IBizTreeGridControl',\n props: {\n modelData: { type: Object as PropType<IDEGrid>, required: true },\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 /**\n * 部件行数据默认激活模式\n * - 0 不激活\n * - 1 单击激活\n * - 2 双击激活(默认值)\n *\n * @type {(number | 0 | 1 | 2)}\n */\n mdctrlActiveMode: { type: Number, default: undefined },\n singleSelect: { type: Boolean, default: undefined },\n rowEditOpen: { type: Boolean, default: undefined },\n isSimple: { type: Boolean, required: false },\n data: { type: Array<IData>, required: false },\n loadDefault: { type: Boolean, default: true },\n },\n setup(props) {\n const c = useControlController(\n (...args) => new TreeGridController(...args),\n );\n // 继承表格部件样式\n const ns = useNamespace(`control-grid`);\n const ns2 = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const {\n tableRef,\n onRowClick,\n onDbRowClick,\n onSelectionChange,\n onSortChange,\n handleRowClassName,\n } = useITableEvent(c);\n const { onPageChange, onPageRefresh, onPageSizeChange } =\n useAppGridPagination(c);\n const { renderColumns, defaultSort, summaryMethod } = useAppGridBase(\n c,\n props as IGridProps,\n );\n const { renderPopover } = useRowEditPopover(tableRef, c);\n\n // 树表格值属性名称\n let treeGridValueField = '';\n // 树表格父属性名称\n let treeGridParentField = '';\n\n const initTreeGridField = () => {\n const treeGridParent: IDEGridFieldColumn | undefined =\n c.model.degridColumns?.find((item: IDEGridFieldColumn) => {\n return item.treeColumnMode === 4 || item.treeColumnMode === 12;\n });\n const treeGridValue: IDEGridFieldColumn | undefined =\n c.model.degridColumns?.find((item: IDEGridFieldColumn) => {\n return item.treeColumnMode === 2 || item.treeColumnMode === 3;\n });\n if (!treeGridParent) {\n throw new RuntimeModelError(c.model, '树表格无值列模式');\n }\n if (!treeGridValue) {\n throw new RuntimeModelError(c.model, '树表格无父值列模式');\n }\n treeGridValueField = treeGridValue.appDEFieldId!.toLowerCase();\n treeGridParentField = treeGridParent.appDEFieldId!.toLowerCase();\n };\n // 初始化树表格属性\n initTreeGridField();\n\n // 树表格附加属性\n const getTreeGridDataItem = (data: IData): IData => {\n // 判断是否有子 (显示下拉图标)\n data.hasChildren = c.state.items.some(\n item => data[treeGridValueField!] === item[treeGridParentField!],\n );\n data.children = [];\n return data;\n };\n\n // 表格数据\n const tableData = computed(() => {\n const state = c.state;\n const items: IData[] = state.rows.map(item =>\n getTreeGridDataItem(item.data),\n );\n const noParentData = items.filter(item => !item[treeGridParentField]);\n return noParentData;\n });\n\n const renderNoData = (): VNode | false => {\n // 未加载不显示无数据\n const { isLoaded } = c.state;\n return (\n isLoaded && (\n <iBizNoData\n text={c.model.emptyText}\n emptyTextLanguageRes={c.model.emptyTextLanguageRes}\n ></iBizNoData>\n )\n );\n };\n\n // 触发节点加载数据\n const loadData = async (\n item: IData,\n row: unknown,\n callback: (nodes: IData[]) => void,\n ) => {\n const items = c.state.items.filter(\n data => item[treeGridValueField] === data[treeGridParentField],\n );\n callback(items);\n };\n return {\n c,\n ns,\n ns2,\n tableRef,\n tableData,\n renderColumns,\n defaultSort,\n onDbRowClick,\n onRowClick,\n onSelectionChange,\n onSortChange,\n onPageChange,\n onPageSizeChange,\n onPageRefresh,\n handleRowClassName,\n renderNoData,\n loadData,\n summaryMethod,\n renderPopover,\n };\n },\n render() {\n const state = this.c.state;\n const { hideHeader, enablePagingBar } = this.c.model;\n return (\n <iBizControlBase\n class={[\n this.ns.b(),\n this.ns2.b(),\n this.ns.is('show-header', !hideHeader),\n this.ns.is('enable-page', enablePagingBar),\n this.ns.is('enable-group', this.c.model.enableGroup),\n ]}\n controller={this.c}\n >\n {this.c.state.isLoaded && (\n <el-table\n ref={'tableRef'}\n class={this.ns.e('table')}\n default-sort={this.defaultSort}\n border\n show-header={!hideHeader}\n show-summary={this.c.enableAgg}\n summary-method={this.summaryMethod}\n highlight-current-row={state.singleSelect}\n row-class-name={this.handleRowClassName}\n row-key={'srfkey'}\n data={this.tableData}\n onRowClick={this.onRowClick}\n onRowDblclick={this.onDbRowClick}\n onSelectionChange={this.onSelectionChange}\n onSortChange={this.onSortChange}\n tooltip-effect={'light'}\n tree-props={{ children: 'children', hasChildren: 'hasChildren' }}\n load={this.loadData}\n lazy\n >\n {{\n empty: this.renderNoData,\n default: (): VNodeArrayChildren => {\n return [\n !state.singleSelect && (\n <el-table-column\n class-name={this.ns.e('selection')}\n type='selection'\n width='55'\n ></el-table-column>\n ),\n state.isCreated &&\n this.renderColumns.map((model, index) => {\n return renderChildColumn(\n this.c,\n model,\n this.renderColumns,\n index,\n );\n }),\n ];\n },\n append: () => {\n return this.renderPopover();\n },\n }}\n </el-table>\n )}\n {enablePagingBar && (\n <iBizPagination\n total={state.total}\n curPage={state.curPage}\n size={state.size}\n onChange={this.onPageChange}\n onPageSizeChange={this.onPageSizeChange}\n onPageRefresh={this.onPageRefresh}\n ></iBizPagination>\n )}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 表格适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class GridProvider\n * @implements {IControlProvider}\n */\nexport class TreeGridProvider implements IControlProvider {\n component: string = 'IBizTreeGridControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { TreeGridControl } from './tree-grid';\nimport { TreeGridProvider } from './tree-grid.provider';\n\nexport const IBizTreeGridControl = withInstall(\n TreeGridControl,\n function (v: App) {\n v.component(TreeGridControl.name, TreeGridControl);\n registerControlProvider(ControlType.TREEGRID, () => new TreeGridProvider());\n },\n);\n\nexport default IBizTreeGridControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport {\n defineComponent,\n PropType,\n resolveComponent,\n h,\n ref,\n onMounted,\n Ref,\n onUnmounted,\n} from 'vue';\nimport { IDEMultiEditViewPanel } from '@ibiz/model-core';\nimport {\n DataChangeEvent,\n IPanelUiItem,\n MEditViewPanelController,\n} from '@ibiz-template/runtime';\nimport './medit-view-panel.scss';\n\nexport const MEditViewPanelControl = defineComponent({\n name: 'IBizMEditViewPanelControl',\n props: {\n modelData: {\n type: Object as PropType<IDEMultiEditViewPanel>,\n required: true,\n },\n context: { type: Object as PropType<IContext>, required: true },\n params: { type: Object as PropType<IParams>, default: () => ({}) },\n },\n setup() {\n const c = useControlController(\n (...args) => new MEditViewPanelController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n\n const panelContent: Ref<Element | null> = ref(null);\n\n const lastScrollHeight = ref(0);\n\n let mutationObserver: null | MutationObserver = null;\n\n const handleDelete = (item: IPanelUiItem) => {\n c.handleDelete(item);\n };\n\n onMounted(() => {\n if (panelContent.value) {\n mutationObserver = new MutationObserver(() => {\n const scrollHeight = panelContent.value!.scrollHeight;\n if (scrollHeight !== lastScrollHeight.value) {\n // 滚动高度变化了\n if (c.state.isNeedScroll) {\n lastScrollHeight.value = scrollHeight;\n panelContent.value!.scrollTop = scrollHeight;\n }\n }\n });\n mutationObserver.observe(panelContent.value!, {\n childList: true, // 子节点的变动(新增、删除或者更改)\n attributes: true, // 属性的变动\n characterData: true, // 节点内容或节点文本的变动\n subtree: true, // 是否将观察器应用于该节点的所有后代节点\n });\n }\n });\n\n onUnmounted(() => {\n if (mutationObserver) {\n mutationObserver.disconnect();\n }\n });\n\n return {\n c,\n ns,\n panelContent,\n handleDelete,\n };\n },\n render() {\n const viewShell = resolveComponent('IBizViewShell');\n\n const renderTabTop = () => {\n return (\n <el-tabs class={this.ns.b('tabs')} v-model={this.c.state.activeTab}>\n {this.c.state.panelUiItems.map((item, index) => {\n return (\n <el-tab-pane key={item.id + item.srfmajortext} name={item.id}>\n {{\n label: () => {\n return (\n <div class={this.ns.b('tab-label')}>\n <span>{item.srfmajortext}</span>\n <ion-icon\n name='close-outline'\n onClick={() => this.c.handleTabDelete(item, index)}\n ></ion-icon>\n </div>\n );\n },\n default: () => {\n return (\n this.c.state.activeTab === item.id &&\n h(viewShell, {\n context: item.context,\n params: item.params,\n viewId: this.c.model.embeddedAppViewId,\n onDataChange: (args: DataChangeEvent) =>\n this.c.onViewDataChange(args, item.id),\n })\n );\n },\n }}\n </el-tab-pane>\n );\n })}\n </el-tabs>\n );\n };\n\n const renderRow = () => {\n return this.c.state.panelUiItems.map(item => {\n return (\n <div class={this.ns.b('item')} key={item.id}>\n {[\n h(viewShell, {\n context: item.context,\n params: item.params,\n viewId: this.c.model.embeddedAppViewId,\n onDataChange: (args: DataChangeEvent) =>\n this.c.onViewDataChange(args, item.id),\n }),\n <div class={this.ns.b('close')}>\n <ion-icon\n name='close-outline'\n onClick={() => this.handleDelete(item)}\n ></ion-icon>\n </div>,\n ]}\n </div>\n );\n });\n };\n\n const renderContent = () => {\n if (!this.c.model.embeddedAppViewId) {\n return;\n }\n if (Object.is(this.c.model.panelStyle, 'TAB_TOP')) {\n return renderTabTop();\n }\n return renderRow();\n };\n\n return (\n <iBizControlBase controller={this.c}>\n <div class={this.ns.b('content')} ref='panelContent'>\n {this.c.state.panelUiItems.length > 0 ? renderContent() : null}\n </div>\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 多编辑视图面板适配器\n *\n * @export\n * @class MEditViewPanelProvider\n * @implements {IControlProvider}\n */\nexport class MEditViewPanelProvider implements IControlProvider {\n component: string = 'IBizMEditViewPanelControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { MEditViewPanelControl } from './medit-view-panel';\nimport { MEditViewPanelProvider } from './medit-view-panel.provider';\n\nexport const IBizMEditViewPanelControl = withInstall(\n MEditViewPanelControl,\n function (v: App) {\n v.component(MEditViewPanelControl.name, MEditViewPanelControl);\n registerControlProvider(\n ControlType.MULTI_EDIT_VIEWPANEL,\n () => new MEditViewPanelProvider(),\n );\n },\n);\n\nexport default IBizMEditViewPanelControl;\n","import { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport { ISysMap } from '@ibiz/model-core';\nimport './map.scss';\nimport {\n MapController,\n IControlProvider,\n IMapData,\n} from '@ibiz-template/runtime';\nimport { MapOptions } from '../../common';\n\nconst MapControl = defineComponent({\n name: 'IBizMapControl',\n props: {\n modelData: { type: Object as PropType<ISysMap>, required: true },\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 mdctrlActiveMode: { type: Number, default: undefined },\n loadDefault: { type: Boolean, default: true },\n },\n setup() {\n const c = useControlController((...args) => new MapController(...args));\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const mapRef = ref();\n\n const mapOpts = computed<Partial<MapOptions>>(() => {\n return {\n strAreaCode: c.state.strAreaCode,\n defaultAreaCode: c.state.defaultAreaCode,\n jsonBaseUrl: c.state.jsonBaseUrl,\n };\n });\n\n return {\n c,\n ns,\n mapRef,\n mapOpts,\n };\n },\n render() {\n const { state } = this.c;\n return (\n <iBizControlBase controller={this.c}>\n {state.isLoaded && (\n <iBizMapChart\n areaData={state.areaData}\n pointData={state.pointData}\n options={this.mapOpts}\n class={this.ns.e('map')}\n onMapChange={(e: IData) => {\n this.c.onMapChange(e.areaCode);\n }}\n onPointChange={(e: IMapData) => {\n this.c.onAreaClick(e);\n }}\n onAreaChange={(e: IMapData) => {\n this.c.onPointClick(e);\n }}\n ></iBizMapChart>\n )}\n </iBizControlBase>\n );\n },\n});\n\nexport default MapControl;\n","import { IControlProvider } from '@ibiz-template/runtime';\n/**\n * 地图适配器\n *\n * @author lxm\n * @date 2022-10-25 18:10:57\n * @export\n * @class ChartProvider\n * @implements {IControlProvider}\n */\nexport class MapProvider implements IControlProvider {\n component: string = 'IBizMapControl';\n}\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport MapControl from './map';\nimport { MapProvider } from './map.provider';\n\nexport const IBizMapControl = {\n install(v: App): void {\n v.component(MapControl.name, MapControl);\n registerControlProvider(ControlType.MAP, () => new MapProvider());\n },\n};\n\nexport default IBizMapControl;\n","import {\n IControlProvider,\n ReportPanelController,\n} from '@ibiz-template/runtime';\nimport { useControlController, useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType, VNode } from 'vue';\nimport { IDEReportPanel } from '@ibiz/model-core';\nimport './report-panel.scss';\n\nexport const ReportPanelControl = defineComponent({\n name: 'IBizReportPanelControl',\n props: {\n modelData: { type: Object as PropType<IDEReportPanel>, required: true },\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 noLoadDefault: { type: Boolean, default: false },\n },\n setup() {\n const c = useControlController(\n (...args) => new ReportPanelController(...args),\n );\n const ns = useNamespace(`control-${c.model.controlType!.toLowerCase()}`);\n const renderContent = (): VNode | false => {\n // 未加载不显示无数据\n const { reportType } = c.state;\n switch (reportType) {\n case 'USER':\n return <iBizUserReportPanel controller={c}></iBizUserReportPanel>;\n case 'USER2':\n return <iBizUser2ReportPanel controller={c}></iBizUser2ReportPanel>;\n default:\n return <div>暂未实现</div>;\n }\n };\n return {\n c,\n ns,\n renderContent,\n };\n },\n render() {\n if (!this.c.state.isCreated) {\n return;\n }\n return (\n <iBizControlBase controller={this.c}>\n {this.renderContent()}\n </iBizControlBase>\n );\n },\n});\n","import { IControlProvider } from '@ibiz-template/runtime';\n\n/**\n * 报表面板适配器\n *\n * @export\n * @class ReportPanelProvider\n * @implements {IControlProvider}\n */\nexport class ReportPanelProvider implements IControlProvider {\n component: string = 'IBizReportPanelControl';\n}\n","import { defineComponent, PropType } from 'vue';\nimport { ReportPanelController } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './user-report-panel.scss';\n\nexport const UserReportPanel = defineComponent({\n name: 'IBizUserReportPanel',\n props: {\n controller: { type: Object as PropType<ReportPanelController> },\n },\n setup(props) {\n const c = props.controller;\n const ns = useNamespace(`user-report-panel`);\n const generator = c && c.generator;\n return {\n c,\n ns,\n generator,\n };\n },\n render() {\n if (!this.c) {\n return;\n }\n const state = this.c.state;\n return (\n <div class={this.ns.e('container')}>\n <iBizRelationshipDesign\n data={state.data}\n context={this.c.context}\n params={this.c.params}\n config={this.generator && this.generator.config.CONFIG}\n pluginConfig={this.generator && this.generator.config.PLUGINCONFIG}\n nodeLegendConfig={\n this.generator && this.generator.config.NODELEGENDCONFIG\n }\n edgeLegendConfig={\n this.generator && this.generator.config.EDGELEGENDCONFIG\n }\n hooks={this.generator && this.generator.config.HOOKS}\n showLoading={true}\n onInit={(args: IData) => {\n // eslint-disable-next-line no-unused-expressions\n this.generator && this.generator.init(args);\n }}\n ></iBizRelationshipDesign>\n </div>\n );\n },\n});\n","import { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { UserReportPanel } from './user-report-panel';\n\nexport const IBizUserReportPanel = withInstall(\n UserReportPanel,\n function (v: App) {\n v.component(UserReportPanel.name, UserReportPanel);\n },\n);\n\nexport default IBizUserReportPanel;\n","import { defineComponent, PropType } from 'vue';\nimport { ReportPanelController, UIActionUtil } from '@ibiz-template/runtime';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport './user2-report-panel.scss';\n\nexport const User2ReportPanel = defineComponent({\n name: 'IBizUser2ReportPanel',\n props: {\n controller: { type: Object as PropType<ReportPanelController> },\n },\n setup(props) {\n const c = props.controller;\n const ns = useNamespace(`user2-report-panel`);\n const generator = c && c.generator;\n const handleClick = async (e: MouseEvent) => {\n let clickValue = (e.target as HTMLElement).getAttribute('click');\n let params = (e.target as HTMLElement).getAttribute('params');\n if (!clickValue || !c || !params) {\n return;\n }\n clickValue = clickValue.replaceAll('`', '');\n params = params.replaceAll('`', '\"');\n const pattern = /\\(([^)]+)\\)/;\n const result = pattern.exec(clickValue);\n if (result && result[1]) {\n UIActionUtil.exec(result[1]!, {\n context: c.context,\n params: c.params,\n data: [JSON.parse(params)],\n view: c.view,\n });\n }\n };\n return {\n c,\n ns,\n generator,\n handleClick,\n };\n },\n render() {\n if (!this.c) {\n return;\n }\n const state = this.c.state;\n if (state.isLoaded) {\n return (\n <div\n class={this.ns.e('container')}\n v-html={state.data}\n onClick={(e: MouseEvent) => {\n this.handleClick(e);\n }}\n ></div>\n );\n }\n return <div class={this.ns.e('empty')}>暂无数据</div>;\n },\n});\n","import { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { User2ReportPanel } from './user2-report-panel';\n\nexport const IBizUser2ReportPanel = withInstall(\n User2ReportPanel,\n function (v: App) {\n v.component(User2ReportPanel.name, User2ReportPanel);\n },\n);\n\nexport default IBizUser2ReportPanel;\n","import { registerControlProvider, ControlType } from '@ibiz-template/runtime';\nimport { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { ReportPanelControl } from './report-panel';\nimport { ReportPanelProvider } from './report-panel.provider';\nimport { IBizUser2ReportPanel, IBizUserReportPanel } from './report-detail';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const IBizReportPanelControl: any = withInstall(\n ReportPanelControl,\n function (v: App) {\n v.use(IBizUserReportPanel);\n v.use(IBizUser2ReportPanel);\n v.component(ReportPanelControl.name, ReportPanelControl);\n registerControlProvider(\n ControlType.REPORT_PANEL,\n () => new ReportPanelProvider(),\n );\n },\n);\n\nexport default IBizReportPanelControl;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { defineComponent, PropType } from 'vue';\nimport './not-supported-editor.scss';\nimport { IEditor } from '@ibiz/model-core';\n\nexport const NotSupportedEditor = defineComponent({\n name: 'NotSupportedEditor',\n props: {\n modelData: {\n type: Object as PropType<IEditor>,\n required: true,\n },\n },\n setup() {\n const ns = useNamespace('not-supported-editor');\n return { ns };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n 未支持的编辑器类型 - {this.modelData.editorType}\n </div>\n );\n },\n});\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","import { ref, defineComponent, Ref, watch } from 'vue';\nimport {\n getSpanProps,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './span.scss';\nimport { CodeListItem } from '@ibiz-template/runtime';\nimport { isNil } from 'ramda';\nimport { DataTypes } from '@ibiz-template/core';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { SpanEditorController } from '../span-editor.controller';\n\ndayjs.extend(customParseFormat);\n\nfunction isValidDateFormat(dateStr: string, format: string): boolean {\n if (dateStr === format) {\n return false;\n }\n return dayjs(dateStr, format, true).isValid(); // 严格模式判断是否是复合值格式化要求的日期文本\n}\n\nexport const IBizSpan = defineComponent({\n name: 'IBizSpan',\n props: getSpanProps<SpanEditorController>(),\n setup(props, { emit }) {\n const ns = useNamespace('span');\n\n const c = props.controller;\n\n const text: Ref<string> = ref('');\n\n const codeList = c.codeList;\n\n // 文本分隔符\n const textSeparator =\n c.model.textSeparator || c.editorParams?.TEXTSEPARATOR || ',';\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (isNil(newVal)) {\n text.value = '';\n return;\n }\n const { valueFormat, dataType, unitName } = c.parent;\n if (c.model.valueType === 'SIMPLES') {\n text.value = (newVal as string[]).join(textSeparator);\n } else if (c.model.valueType === 'OBJECT') {\n text.value = (newVal as IData)[\n c.model.objectNameField ? c.model.objectNameField : 'srfmajortext'\n ];\n } else if (c.model.valueType === 'OBJECTS') {\n const tempValue: string[] = [];\n (newVal as IData[]).forEach((_item: IData) => {\n tempValue.push(\n _item[\n c.model.objectNameField\n ? c.model.objectNameField\n : 'srfmajortext'\n ],\n );\n });\n text.value = tempValue.join(textSeparator);\n } else if (c.model.editorType === 'ADDRESSPICKUP') {\n // 解析地址选择器的JSON字符串数据\n try {\n const tempValue: string[] = [];\n const items: IData[] = JSON.parse(newVal as string);\n items.forEach((_item: IData) => {\n tempValue.push(\n _item[\n c.model.objectNameField\n ? c.model.objectNameField\n : 'srfmajortext'\n ],\n );\n });\n text.value = tempValue.join(textSeparator);\n } catch (error) {\n ibiz.log.error(`标签地址选择器的值不符合JSON格式${newVal}`);\n }\n } else if (valueFormat) {\n try {\n if (dataType != null && DataTypes.isDate(dataType)) {\n text.value = dayjs(newVal as string).format(valueFormat);\n } else {\n // 面板属性项是拿不到dataType的,此时先用dayjs格式化,如果能格出来说明是时间型,否则走text-format\n const tempVal = dayjs(newVal as string).format(valueFormat);\n if (isValidDateFormat(tempVal, valueFormat)) {\n text.value = tempVal;\n } else {\n text.value = ibiz.util.text.format(`${newVal}`, valueFormat);\n }\n }\n } catch (error) {\n text.value = `${newVal}`;\n ibiz.log.error(`${newVal} 值格式化错误`);\n }\n } else {\n text.value = `${newVal}`;\n }\n if (unitName) {\n text.value += unitName;\n }\n }\n },\n {\n immediate: true,\n },\n );\n\n // 代码表数据\n const items = ref<readonly CodeListItem[]>([]);\n if (codeList) {\n watch(\n () => props.data,\n newVal => {\n c.loadCodeList(newVal).then(_codeList => {\n items.value = _codeList;\n });\n },\n {\n immediate: true,\n deep: true,\n },\n );\n }\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n c,\n text,\n editorRef,\n items,\n };\n },\n render() {\n let content = null;\n\n if (this.c.codeList && this.items.length > 0) {\n content = (\n <iBizCodeList\n class={this.ns.e('code-list')}\n codeListItems={this.items}\n codeList={this.c.codeList}\n value={this.text}\n ></iBizCodeList>\n );\n } else if (this.text) {\n content = this.text;\n } else {\n content = '- - -';\n }\n\n return (\n <span\n class={[this.ns.b(), this.readonly ? this.ns.m('readonly') : '']}\n ref='editorRef'\n >\n {content}\n </span>\n );\n },\n});\n","import { defineComponent, ref, Ref, watch } from 'vue';\nimport {\n getSpanProps,\n getEditorEmits,\n useNamespace,\n useFocusAndBlur,\n} from '@ibiz-template/vue3-util';\nimport './span-link.scss';\nimport { SpanEditorController } from '../span-editor.controller';\n\nexport const IBizSpanLink = defineComponent({\n name: 'IBizSpanLink',\n props: getSpanProps<SpanEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('span-link');\n\n const c = props.controller!;\n\n const curValue: Ref<string> = ref('');\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal && newVal !== oldVal) {\n curValue.value = `${newVal}`;\n }\n },\n { immediate: true },\n );\n\n // 打开数据链接视图\n const openLinkView = async () => {\n await c.openLinkView(props.data);\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return { ns, openLinkView, curValue, editorRef };\n },\n render() {\n return (\n <div\n class={[this.ns.b(), this.readonly ? this.ns.m('readonly') : '']}\n ref='editorRef'\n >\n <a onClick={this.openLinkView}>{this.curValue}</a>\n </div>\n );\n },\n});\n","import { ISpan, IAppCodeList } from '@ibiz/model-core';\nimport {\n CodeListEditorController,\n OpenAppViewCommand,\n} from '@ibiz-template/runtime';\nimport { RuntimeModelError } from '@ibiz-template/core';\n\n/**\n * 标签编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class SpanEditorController extends CodeListEditorController<ISpan> {\n /**\n *值项\n */\n public valueItem = '';\n\n /**\n * 代码表模型\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-05-24 10:55:50\n */\n public codeList: IAppCodeList | undefined = undefined;\n\n protected async onInit(): Promise<void> {\n super.onInit();\n // span-link临时用editorItems\n if (this.model?.editorItems?.[0]) {\n this.valueItem = this.model.editorItems[0].id!;\n }\n // 初始化代码表\n if (this.model.appCodeListId) {\n const app = await ibiz.hub.getApp(this.context.srfappid);\n this.codeList = app.codeList.getCodeList(this.model.appCodeListId);\n }\n }\n\n /**\n * 打开数据链接视图\n */\n public async openLinkView(data: IData): Promise<IData[] | undefined> {\n const tempContext = this.context.clone();\n if (data[this.valueItem]) {\n tempContext.srfkey = data[this.valueItem];\n }\n const { context, params } = this.handlePublicParams(\n data,\n tempContext,\n this.params,\n );\n const { linkAppViewId } = this.model;\n if (!linkAppViewId) {\n throw new RuntimeModelError(this.model, '请配置数据链接视图');\n }\n return ibiz.commands.execute(\n OpenAppViewCommand.TAG,\n linkAppViewId,\n context,\n params,\n );\n }\n}\n","import { ISpan } from '@ibiz/model-core';\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { SpanEditorController } from './span-editor.controller';\n\n/**\n * 标签编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class SpanEditorProvider\n * @implements {EditorProvider}\n */\nexport class SpanEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizSpan';\n\n gridEditor: string = 'IBizSpan';\n\n constructor(editorType?: string) {\n if (editorType === 'SPAN_LINK') {\n this.formEditor = 'IBizSpanLink';\n this.gridEditor = 'IBizSpanLink';\n }\n }\n\n async createController(\n editorModel: ISpan,\n parentController: IEditorContainerController,\n ): Promise<SpanEditorController> {\n const c = new SpanEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent, onUnmounted, ref, watch } from 'vue';\nimport { debounce } from 'lodash-es';\nimport {\n getEditorEmits,\n getInputProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { IChatMessage, IPortalAsyncAction } from '@ibiz-template/core';\nimport { createUUID } from 'qx-util';\nimport { TextBoxEditorController } from '../text-box-editor.controller';\nimport './input.scss';\n\nexport const IBizInput = defineComponent({\n name: 'IBizInput',\n props: getInputProps<TextBoxEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('input');\n const c = props.controller;\n const editorModel = c.model;\n const inputRef = ref();\n\n // 文本域默认行数,仅在 textarea 类型下有效\n const rows = ref(2);\n if (editorModel.editorType === 'TEXTAREA_10') {\n rows.value = 10;\n }\n\n // 类型\n const type = computed(() => {\n switch (editorModel.editorType) {\n case 'TEXTBOX':\n return 'text';\n case 'PASSWORD':\n return 'password';\n case 'TEXTAREA':\n case 'TEXTAREA_10':\n return 'textarea';\n default:\n return 'string';\n }\n });\n\n const currentVal = ref<string>('');\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal == null) {\n currentVal.value = '';\n } else {\n currentVal.value = newVal.toString();\n }\n }\n },\n { immediate: true },\n );\n\n let isDebounce = false;\n let awaitSearch: () => void;\n let blurCacheValue: string | undefined;\n // 防抖值变更回调\n const debounceChange = debounce(\n (val: string | number) => {\n // 拦截掉blur触发后change\n if (blurCacheValue !== val) {\n emit('change', val);\n }\n blurCacheValue = undefined;\n isDebounce = false;\n if (awaitSearch) {\n awaitSearch();\n }\n },\n 300,\n { leading: true },\n );\n // 值变更\n const handleChange = (val: string | number) => {\n isDebounce = true;\n debounceChange(val);\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n if (isDebounce) {\n awaitSearch = () => {\n inputRef.value.$el.dispatchEvent(e);\n };\n }\n }\n };\n\n /**\n * blur时马上抛值变更\n * @author lxm\n * @date 2023-03-06 06:36:23\n */\n const onBlur = (event: IData) => {\n blurCacheValue = event.target.value;\n // eslint-disable-next-line eqeqeq\n if (blurCacheValue != props.value) {\n emit('change', blurCacheValue);\n }\n emit('blur', event);\n };\n\n // 自动聚焦\n if (props.autoFocus) {\n watch(inputRef, newVal => {\n if (newVal) {\n const inputTag = type.value === 'textarea' ? 'textarea' : 'input';\n const input = newVal.$el.getElementsByTagName(inputTag)[0];\n input.focus();\n }\n });\n }\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let chatInstance: any;\n\n const onClick = async () => {\n if (c.deService) {\n const module = await import('@ibiz-template-plugin/ai-chat');\n const chat = module.chat || module.default.chat;\n chatInstance = chat;\n const aiChat = chat.create({\n question: async (arr: IChatMessage[]) => {\n const id = createUUID();\n await c.deService?.aiChatSse(\n (msg: IPortalAsyncAction) => {\n ibiz.log.info('aiChatSse', msg);\n // 20: 持续回答中,消息会持续推送。同一个消息 id 会显示在同一个框内\n if (msg.actionstate === 20 && msg.actionresult) {\n aiChat.addMessage({\n messageid: id,\n state: msg.actionstate,\n type: 'DEFAULT',\n role: 'ASSISTANT',\n content: msg.actionresult as string,\n });\n }\n // 30: 回答完成,包含具体所有消息内容。直接覆盖之前的临时拼接消息\n else if (msg.actionstate === 30 && msg.actionresult) {\n const result = JSON.parse(msg.actionresult as string);\n const choices = result.choices;\n if (choices && choices.length > 0) {\n aiChat.replaceMessage({\n messageid: id,\n state: msg.actionstate,\n type: 'DEFAULT',\n role: 'ASSISTANT',\n content: choices[0].content || '',\n });\n }\n }\n // 40: 回答报错,展示错误信息\n else if (msg.actionstate === 40) {\n aiChat.replaceMessage({\n messageid: id,\n state: msg.actionstate,\n type: 'ERROR',\n role: 'ASSISTANT',\n content: msg.actionresult as string,\n });\n }\n },\n c.context,\n {},\n {\n messages: arr,\n },\n );\n aiChat.addMessage({\n messageid: id,\n state: 10,\n type: 'DEFAULT',\n role: 'ASSISTANT',\n content: '',\n });\n return true;\n },\n action: ((action: string, message: IChatMessage) => {\n if (action === 'backfill') {\n handleChange(message.content);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any,\n });\n const res = await c.deService?.aiChatHistory(c.context, {});\n if (res.data && Array.isArray(res.data)) {\n res.data.forEach(item => {\n const msg = {\n messageid: createUUID(),\n state: 30,\n type: 'DEFAULT',\n role: item.role,\n content: item.content,\n } as const;\n aiChat.addMessage(msg);\n });\n }\n }\n };\n\n onUnmounted(() => {\n if (chatInstance) {\n chatInstance.close();\n }\n });\n\n // 只读文本计算和事件抛出\n const readonlyText = computed(() => {\n const { unitName } = props.controller.parent;\n // 只读显示\n let text = `${currentVal.value}`;\n // 当有值且单位存在时才显示单位\n if (text && unitName) {\n text += unitName;\n }\n return text;\n });\n\n // 是否允许自动填充\n const shouldAutoComplete = computed(() => {\n // 根据配置的编辑器参数autocomplete来决定\n return c.model.editorParams &&\n c.model.editorParams.autocomplete &&\n c.toBoolean(c.model.editorParams.autocomplete)\n ? 'on'\n : 'new-password';\n });\n\n return {\n c,\n ns,\n rows,\n type,\n currentVal,\n readonlyText,\n handleChange,\n handleKeyUp,\n onBlur,\n onFocus,\n inputRef,\n onClick,\n shouldAutoComplete,\n };\n },\n render() {\n const { unitName } = this.c.parent;\n const { editorWidth, editorHeight, predefinedType } = this.c.model;\n\n let content = null;\n if (this.readonly) {\n // 只读显示\n content = this.readonlyText;\n } else {\n // 编辑态显示\n const slots: IData = {};\n if (unitName) {\n slots.suffix = () => {\n return <i class={this.ns.e('unit')}>{unitName}</i>;\n };\n }\n if (predefinedType === 'AUTH_USERID') {\n slots.prefix = () => <ion-icon name='person'></ion-icon>;\n } else if (predefinedType === 'AUTH_PASSWORD') {\n slots.prefix = () => <ion-icon name='unlock-alt'></ion-icon>;\n }\n\n content = (\n <el-input\n ref='inputRef'\n clearable={true}\n v-model={this.currentVal}\n placeholder={this.c.placeHolder}\n type={this.type}\n rows={this.rows}\n resize='none'\n onInput={this.handleChange}\n onKeyup={this.handleKeyUp}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n class={this.ns.b('input')}\n disabled={this.disabled}\n show-password={this.type === 'password'}\n autocomplete={this.shouldAutoComplete}\n >\n {slots}\n </el-input>\n );\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.ns.is('textarea', Object.is(this.type, 'textarea')),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n style={{\n width: editorWidth ? `${editorWidth}px` : '',\n height: editorHeight ? `${editorHeight}px` : '',\n }}\n >\n {content}\n {this.c.chatCompletion ? (\n <div class={this.ns.e('ai-chat')} onClick={this.onClick}>\n <ion-icon src='./assets/images/svg/chat.svg' />\n </div>\n ) : null}\n </div>\n );\n },\n});\n","import { defineComponent, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getInputNumberProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-input-number.scss';\nimport { TextBoxEditorController } from '../text-box-editor.controller';\n\nexport const IBizInputNumber = defineComponent({\n name: 'IBizInputNumber',\n props: getInputNumberProps<TextBoxEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('input-number');\n\n const c = props.controller;\n\n const currentVal = ref<number | null | string>('');\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n const number = Number(newVal);\n currentVal.value = Number.isNaN(number) ? '' : number;\n }\n },\n { immediate: true },\n );\n\n const handleChange = (e: number | null) => {\n emit('change', e);\n };\n\n const inputRef = ref();\n\n if (props.autoFocus) {\n watch(inputRef, newVal => {\n if (newVal) {\n const input = newVal.$el.getElementsByTagName('input')[0];\n input.focus();\n }\n });\n }\n\n // 聚焦\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n // 失焦\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n return {\n ns,\n c,\n currentVal,\n handleChange,\n inputRef,\n onFocus,\n onBlur,\n handleKeyUp,\n };\n },\n render() {\n const { unitName } = this.c.parent;\n\n let content = null;\n if (this.readonly) {\n // 只读显示\n content = `${this.currentVal}`;\n // 当有值且单位存在时才显示单位\n if (content && unitName) {\n content += unitName;\n }\n } else {\n // 编辑态显示\n content = [\n <el-input-number\n ref='inputRef'\n v-model={this.currentVal}\n placeholder={this.c.placeHolder}\n precision={this.c.precision}\n disabled={this.disabled}\n onChange={this.handleChange}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onKeyup={this.handleKeyUp}\n ></el-input-number>,\n unitName && <i class={this.ns.e('unit')}>{unitName}</i>,\n ];\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n {content}\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\nimport { defineComponent, Ref, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getInputIpProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-input-ip.scss';\nimport { TextBoxEditorController } from '../text-box-editor.controller';\n\nexport const IBizInputIP = defineComponent({\n name: 'IBizInputIP',\n props: getInputIpProps<TextBoxEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('input-ip');\n\n const c = props.controller;\n\n // 获取当前值\n const currentVal = ref<string[]>([]);\n\n // 当前组件是否已获取到焦点\n const activeElement = ref(false);\n\n // 当前组件输入框是否全部失焦\n const isAllBlur = ref(false);\n\n // 四段ip\n const firstIp = ref('');\n const secIp = ref('');\n const thirdIp = ref('');\n const forIp = ref('');\n\n // 初始赋值\n if (props.value) {\n const ipArr = props.value.split('.');\n currentVal.value = ipArr;\n firstIp.value = currentVal.value[0];\n secIp.value = currentVal.value[1];\n thirdIp.value = currentVal.value[2];\n forIp.value = currentVal.value[3];\n }\n\n // 验证格式\n const checkIpVal = (\n newVal: string,\n oldVal: string,\n ip: Ref<string>,\n index: number,\n ) => {\n if (newVal === '') return;\n const reg = /^(([0-9]|([1-9]\\d)|(1\\d\\d)|(2([0-4]\\d|5[0-5]))))$/g;\n if (reg.test(newVal)) {\n currentVal.value[index] = newVal;\n } else if (ip) {\n ibiz.message.warning(`ip格式验证未通过,第${index + 1}段ip重置回旧值`);\n ip.value = oldVal;\n currentVal.value[index] = oldVal;\n }\n if (firstIp.value && secIp.value && thirdIp.value && forIp.value) {\n emit(\n 'change',\n `${firstIp.value}.${secIp.value}.${thirdIp.value}.${forIp.value}`,\n );\n }\n };\n\n // 监听每段IP变化\n watch(firstIp, (newVal: string, oldVal: string) => {\n checkIpVal(newVal, oldVal, firstIp, 0);\n });\n watch(secIp, (newVal: string, oldVal: string) => {\n checkIpVal(newVal, oldVal, secIp, 1);\n });\n watch(thirdIp, (newVal: string, oldVal: string) => {\n checkIpVal(newVal, oldVal, thirdIp, 2);\n });\n watch(forIp, (newVal: string, oldVal: string) => {\n checkIpVal(newVal, oldVal, forIp, 3);\n });\n\n // 输入框获取到焦点时设置该组件已获取到焦点\n const getFocus = () => {\n activeElement.value = true;\n if (isAllBlur.value) {\n isAllBlur.value = false;\n emit('focus');\n }\n };\n\n // 失焦事件\n const blur = () => {\n activeElement.value = false;\n setTimeout(() => {\n if (!activeElement.value) {\n isAllBlur.value = true;\n emit('blur');\n }\n }, 0);\n };\n\n return {\n ns,\n c,\n currentVal,\n getFocus,\n blur,\n firstIp,\n secIp,\n thirdIp,\n forIp,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n <el-input\n type='text'\n size='small'\n disabled={this.disabled}\n readonly={this.readonly}\n onFocus={this.getFocus}\n onBlur={this.blur}\n maxlength={3}\n v-model={this.firstIp}\n />\n .\n <el-input\n type='text'\n size='small'\n disabled={this.disabled}\n readonly={this.readonly}\n onFocus={this.getFocus}\n onBlur={this.blur}\n maxlength={3}\n v-model={this.secIp}\n />\n .\n <el-input\n type='text'\n size='small'\n disabled={this.disabled}\n readonly={this.readonly}\n onFocus={this.getFocus}\n onBlur={this.blur}\n maxlength={3}\n v-model={this.thirdIp}\n />\n .\n <el-input\n type='text'\n size='small'\n disabled={this.disabled}\n readonly={this.readonly}\n onFocus={this.getFocus}\n onBlur={this.blur}\n maxlength={3}\n v-model={this.forIp}\n />\n </div>\n );\n },\n});\n","import {\n EditorController,\n IAppDEService,\n getDeACMode,\n} from '@ibiz-template/runtime';\nimport {\n IAppDEACMode,\n IDEACModeDataItem,\n ITextArea,\n ITextBox,\n} from '@ibiz/model-core';\nimport { toNumber } from 'lodash-es';\n\n/**\n * 输入框编辑器控制器\n *\n * @author lxm\n * @date 2022-08-24 20:08:25\n * @export\n * @class TextBoxEditorController\n * @extends {EditorController}\n */\nexport class TextBoxEditorController extends EditorController<ITextBox> {\n /**\n * 精度\n * @author lxm\n * @date 2023-09-26 10:22:47\n * @type {number}\n */\n precision?: number;\n\n /**\n * 应用实体服务\n *\n * @author chitanda\n * @date 2023-10-12 14:10:41\n * @type {IAppDEService}\n */\n deService?: IAppDEService;\n\n /**\n * 自填模式\n *\n * @author chitanda\n * @date 2023-10-12 10:10:52\n * @type {IAppDEACMode}\n */\n deACMode?: IAppDEACMode;\n\n /**\n * 自填模式对应主键属性名称\n *\n * @author chitanda\n * @date 2023-10-12 10:10:58\n * @type {string}\n */\n keyName: string = 'srfkey';\n\n /**\n * 自填模式对应主文本属性名称\n *\n * @author chitanda\n * @date 2023-10-12 10:10:02\n * @type {string}\n */\n textName: string = 'srfmajortext';\n\n /**\n * 自填模式排序模式,默认升序\n *\n * @author chitanda\n * @date 2023-10-12 10:10:29\n * @type {string}\n */\n sort: string = 'asc';\n\n /**\n * 自填数据项集合(已排除了value和text)\n *\n * @author chitanda\n * @date 2023-10-12 10:10:23\n * @type {IDEACModeDataItem[]}\n */\n dataItems: IDEACModeDataItem[] = [];\n\n /**\n * AI 聊天自填模式\n *\n * @author chitanda\n * @date 2023-10-12 10:10:37\n * @type {boolean}\n */\n chatCompletion: boolean = false;\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n this.precision = this.editorParams.precision\n ? toNumber(this.editorParams.precision)\n : this.model.precision;\n if (\n this.model.editorType === 'TEXTAREA' ||\n this.model.editorType === 'TEXTAREA_10'\n ) {\n const model = this.model as ITextArea;\n if (model.appDEACModeId) {\n this.deACMode = await getDeACMode(\n model.appDEACModeId,\n model.appDataEntityId!,\n this.context.srfappid,\n );\n if (this.deACMode) {\n if (this.deACMode.actype === 'AUTOCOMPLETE') {\n // 自填模式相关\n const { minorSortAppDEFieldId, minorSortDir } = this.deACMode;\n if (minorSortAppDEFieldId && minorSortDir) {\n this.sort = `${minorSortAppDEFieldId.toLowerCase()},${minorSortDir.toLowerCase()}`;\n }\n if (this.deACMode.textAppDEFieldId) {\n this.textName = this.deACMode.textAppDEFieldId;\n }\n if (this.deACMode.valueAppDEFieldId) {\n this.keyName = this.deACMode.valueAppDEFieldId;\n }\n if (this.deACMode.deacmodeDataItems) {\n this.dataItems = [];\n this.deACMode.deacmodeDataItems.forEach(\n (dataItem: IDEACModeDataItem) => {\n if (dataItem.id !== 'value' && dataItem.id !== 'text') {\n this.dataItems.push(dataItem);\n }\n },\n );\n }\n }\n if (this.deACMode.actype === 'CHATCOMPLETION') {\n this.deService = await ibiz.hub\n .getApp(model.appId)\n .deService.getService(model.appDataEntityId!);\n this.chatCompletion = true;\n }\n }\n }\n }\n // 预置类型\n if (this.model.predefinedType === 'AUTH_USERID') {\n this.placeHolder = '请输入账号';\n } else if (this.model.predefinedType === 'AUTH_PASSWORD') {\n this.placeHolder = '请输入密码';\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ITextBox } from '@ibiz/model-core';\nimport { TextBoxEditorController } from './text-box-editor.controller';\n\n/**\n * 输入框编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class TextBoxEditorProvider\n * @implements {EditorProvider}\n */\nexport class TextBoxEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizInput';\n\n gridEditor: string = 'IBizInput';\n\n constructor(editorType?: string) {\n if (editorType === 'NUMBER') {\n this.formEditor = 'IBizInputNumber';\n this.gridEditor = 'IBizInputNumber';\n }\n if (editorType === 'IPADDRESSTEXTBOX') {\n this.formEditor = 'IBizInputIP';\n this.gridEditor = 'IBizInputIP';\n }\n }\n\n async createController(\n editorModel: ITextBox,\n parentController: IEditorContainerController,\n ): Promise<TextBoxEditorController> {\n const c = new TextBoxEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { ref, Ref, defineComponent, computed, watch } from 'vue';\nimport {\n getDropdownProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-dropdown.scss';\nimport { DropDownListEditorController } from '../dropdown-list-editor.controller';\n\nexport const IBizDropdown = defineComponent({\n name: 'IBizDropdown',\n props: getDropdownProps<DropDownListEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('dropdown');\n const c = props.controller;\n\n const items: Ref<readonly IData[]> = ref([]);\n\n // 是否是树形\n const hasChildren = ref(false);\n\n // 树数据\n const treeNodes: Ref<IData[]> = ref([]);\n\n // 样式变量\n const cssVars = computed(() => {\n if (c.model.editorType === 'DROPDOWNLIST_100') {\n return ns.cssVarBlock({ width: `100px` });\n }\n return {};\n });\n\n // 处理树数据\n const handleTreeNodes = (nodes: readonly IData[]) => {\n if (nodes.length === 0) {\n return [];\n }\n const list: IData[] = [];\n nodes.forEach((codeItem: IData) => {\n const tempObj: IData = {\n label: codeItem.text,\n value: codeItem.value.toString(),\n disabled: codeItem.disableSelect === true,\n children: [],\n };\n if (codeItem.children && codeItem.children.length > 0) {\n tempObj.children = handleTreeNodes(codeItem.children);\n }\n list.push(tempObj);\n });\n return list;\n };\n\n c.loadCodeList(props.data!).then((codeList: readonly IData[]) => {\n items.value = codeList;\n for (let i = 0; i < items.value.length; i++) {\n const _item = items.value[i];\n if (_item.children) {\n hasChildren.value = true;\n treeNodes.value = handleTreeNodes(codeList);\n break;\n }\n }\n });\n\n // 当前值\n const curValue = computed({\n get() {\n if (props.value) {\n return c!.multiple\n ? props.value?.toString().split(',')\n : props.value.toString();\n }\n return props.value?.toString();\n },\n set(select: string | Array<string> | undefined) {\n if (Array.isArray(select)) {\n emit('change', select.length === 0 ? null : select.join(','));\n } else {\n emit('change', select);\n }\n },\n });\n\n const valueText = computed(() => {\n const valueArr = Array.isArray(curValue.value)\n ? curValue.value\n : [curValue.value];\n\n return items.value\n .filter(item => {\n let isInclude = false;\n valueArr.forEach(val => {\n // eslint-disable-next-line eqeqeq\n if (val == item.value) {\n isInclude = true;\n }\n });\n return isInclude;\n })\n .map(item => item.text)\n .join(',');\n });\n\n watch(\n valueText,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n // 自动聚焦\n const editorRef = ref();\n if (props.autoFocus) {\n watch(editorRef, newVal => {\n if (newVal) {\n newVal.focus();\n }\n });\n }\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n const onBlur = (e: IData) => {\n setTimeout(() => {\n emit('blur', e);\n }, 100);\n };\n\n // 处理点击键盘\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n /**\n * 自定义节点样式\n * @param data 数据对象\n * @param _node 节点对象\n * @returns\n */\n const customNodeClass = (data: IData, _node: Node) => {\n return data.children.length ? ns.e('branch-node') : null;\n };\n\n return {\n ns,\n c,\n curValue,\n items,\n customNodeClass,\n valueText,\n hasChildren,\n onBlur,\n onFocus,\n editorRef,\n treeNodes,\n cssVars,\n handleKeyUp,\n };\n },\n\n render() {\n // 编辑态内容\n const editContent = this.hasChildren ? (\n <el-tree-select\n v-model={this.curValue}\n clearable\n data={this.treeNodes}\n check-strictly\n render-after-expand={false}\n multiple={this.c.multiple}\n placeholder={this.c.placeHolder ? this.c.placeHolder : ' '}\n disabled={this.disabled}\n props={{\n class: this.customNodeClass,\n }}\n />\n ) : (\n <el-select\n ref='editorRef'\n v-model={this.curValue}\n clearable\n class={[this.ns.e('select')]}\n multiple={this.c.multiple}\n placeholder={this.c.placeHolder ? this.c.placeHolder : ' '}\n disabled={this.disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyup={this.handleKeyUp}\n >\n {this.items.map(item => {\n return (\n <el-option\n key={item.value}\n value={item.value.toString()}\n label={item.text}\n disabled={item.disableSelect === true}\n ></el-option>\n );\n })}\n </el-select>\n );\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n style={this.cssVars}\n >\n {this.readonly ? this.valueText : editContent}\n </div>\n );\n },\n});\n","import { CodeListEditorController } from '@ibiz-template/runtime';\nimport { IDropDownList } from '@ibiz/model-core';\n\n/**\n * 下拉列表框编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class DropDownListEditorController extends CodeListEditorController<IDropDownList> {\n /**\n * 是否多选\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 14:33:14\n */\n public multiple = false;\n\n protected async onInit(): Promise<void> {\n super.onInit();\n if (this.model.editorType === 'MDROPDOWNLIST') {\n this.multiple = true;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IDropDownList } from '@ibiz/model-core';\nimport { DropDownListEditorController } from './dropdown-list-editor.controller';\n\n/**\n * 多选框列表编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class DropDownListEditorProvider\n * @implements {EditorProvider}\n */\nexport class DropDownListEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizDropdown';\n\n gridEditor: string = 'IBizDropdown';\n\n async createController(\n editorModel: IDropDownList,\n parentController: IEditorContainerController,\n ): Promise<DropDownListEditorController> {\n const c = new DropDownListEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent } from 'vue';\nimport {\n getCheckboxProps,\n getEditorEmits,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { CheckBoxEditorController } from '../check-box-editor.controller';\n\nexport const IBizCheckbox = defineComponent({\n name: 'IBizCheckbox',\n props: getCheckboxProps<CheckBoxEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('checkbox');\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n let selectValue = 1;\n\n let nullValue = 0;\n\n if (editorModel.editorParams?.selectValue) {\n selectValue = editorModel.editorParams.selectValue;\n }\n if (editorModel.editorParams?.nullValue) {\n nullValue = editorModel.editorParams.nullValue;\n }\n\n // 当前值\n const currentVal = computed({\n get() {\n // eslint-disable-next-line eqeqeq\n if (props.value == selectValue) {\n return true;\n }\n return false;\n },\n set(val: boolean) {\n let value;\n if (val) {\n value = selectValue;\n } else {\n value = nullValue;\n }\n emit('change', value);\n },\n });\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n editorModel,\n currentVal,\n editorRef,\n };\n },\n render() {\n return (\n <div class={[this.ns.b()]} ref='editorRef'>\n <el-checkbox\n v-model={this.currentVal}\n disabled={this.disabled || this.readonly}\n ></el-checkbox>\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { ICheckBox } from '@ibiz/model-core';\n\n/**\n * 选项框编辑器控制器\n *\n * @export\n * @class CheckBoxEditorController\n * @extends {EditorController}\n */\nexport class CheckBoxEditorController extends EditorController<ICheckBox> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ICheckBox } from '@ibiz/model-core';\nimport { CheckBoxEditorController } from './check-box-editor.controller';\n\n/**\n * 选项框编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class CheckBoxEditorProvider\n * @implements {EditorProvider}\n */\nexport class CheckBoxEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizCheckbox';\n\n gridEditor: string = 'IBizGridCheckbox';\n\n async createController(\n editorModel: ICheckBox,\n parentController: IEditorContainerController,\n ): Promise<CheckBoxEditorController> {\n const c = new CheckBoxEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent, ref, watch } from 'vue';\nimport {\n getCheckboxListProps,\n getEditorEmits,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { isNil } from 'ramda';\nimport './ibiz-checkbox-list.scss';\nimport { CheckBoxListEditorController } from '../checkbox-list-editor.controller';\n\nexport const IBizCheckboxList = defineComponent({\n name: 'IBizCheckboxList',\n props: getCheckboxListProps<CheckBoxListEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('checkbox-list');\n\n const c = props.controller;\n\n const codeList = c.codeList;\n\n // 代码表数据\n const items = ref<readonly IData[]>([]);\n watch(\n () => props.data,\n newVal => {\n c.loadCodeList(newVal).then(_codeList => {\n items.value = _codeList;\n });\n },\n {\n immediate: true,\n deep: true,\n },\n );\n\n // 当前模式\n const currentMode = computed(() => {\n if (codeList && codeList.orMode) {\n return codeList.orMode.toLowerCase();\n }\n return 'str';\n });\n\n // 值分隔符\n let valueSeparator = ',';\n if (codeList && codeList.valueSeparator) {\n valueSeparator = codeList.valueSeparator;\n }\n\n // 选中数组\n const selectArray = computed({\n get() {\n if (!isNil(props.value)) {\n if (Object.is(currentMode.value, 'num') && items) {\n const selectsArray: Array<string | number> = [];\n const num: number =\n typeof props.value === 'string'\n ? parseInt(props.value, 10)\n : props.value;\n items.value.forEach((item: IData) => {\n // eslint-disable-next-line no-bitwise\n if ((num & item.value) === item.value) {\n selectsArray.push(item.value);\n }\n });\n return selectsArray;\n }\n if (Object.is(currentMode.value, 'str')) {\n const strVal = props.value! as string;\n if (strVal !== '') {\n if (codeList) {\n const selects: Array<string | number> =\n strVal.split(valueSeparator);\n if (codeList.codeItemValueNumber) {\n for (let i = 0, len = selects.length; i < len; i++) {\n selects[i] = Number(selects[i]);\n }\n }\n return selects;\n }\n return strVal.split(',');\n }\n }\n }\n return [];\n },\n set(val: Array<string | number>) {\n let value: null | string | number | string[] = null;\n if (Object.is(currentMode.value, 'num')) {\n let temp: number = 0;\n val.forEach(item => {\n const numVal: number =\n typeof item === 'string' ? parseInt(item, 10) : item;\n // eslint-disable-next-line no-bitwise\n temp |= numVal;\n });\n value = temp;\n } else if (Object.is(currentMode.value, 'str')) {\n const _datas: string[] = [];\n if (items.value.length > 0) {\n items.value.forEach((_item: IData) => {\n const index = val.findIndex((_key: unknown) =>\n Object.is(_item.value, _key),\n );\n if (index === -1) {\n return;\n }\n _datas.push(_item.value);\n });\n value = _datas.join(valueSeparator);\n }\n }\n emit('change', value);\n },\n });\n\n const onSelectArrayChange = (value: Array<string | number>) => {\n selectArray.value = value;\n };\n\n const valueText = computed(() => {\n const valueArr = Array.isArray(selectArray.value)\n ? selectArray.value\n : [selectArray.value];\n\n return items.value\n .filter(item => {\n let isInclude = false;\n valueArr.forEach(val => {\n // eslint-disable-next-line eqeqeq\n if (val == item.value) {\n isInclude = true;\n }\n });\n return isInclude;\n })\n .map(item => item.text)\n .join(',');\n });\n\n watch(\n valueText,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n items,\n selectArray,\n valueText,\n editorRef,\n onSelectArrayChange,\n };\n },\n render() {\n return (\n <div\n ref='editorRef'\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n {this.readonly ? (\n this.valueText\n ) : (\n <el-checkbox-group\n model-value={this.selectArray}\n onChange={this.onSelectArrayChange}\n >\n {this.items.map((item, index: number) => (\n <el-checkbox\n key={index}\n label={item.value}\n disabled={this.disabled || item.disableSelect === true}\n >\n <span class={this.ns.e('text')}>{item.text}</span>\n </el-checkbox>\n ))}\n </el-checkbox-group>\n )}\n </div>\n );\n },\n});\n","import { CodeListEditorController } from '@ibiz-template/runtime';\nimport { IAppCodeList, ICheckBoxList } from '@ibiz/model-core';\n\n/**\n * 选项框列表编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class CheckBoxListEditorController extends CodeListEditorController<ICheckBoxList> {\n /**\n * 代码表模型\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-05-24 10:55:50\n */\n codeList: IAppCodeList | undefined = undefined;\n\n protected async onInit(): Promise<void> {\n super.onInit();\n if (this.model.appCodeListId) {\n const app = await ibiz.hub.getApp(this.context.srfappid);\n this.codeList = app.codeList.getCodeList(this.model.appCodeListId);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ICheckBoxList } from '@ibiz/model-core';\nimport { CheckBoxListEditorController } from './checkbox-list-editor.controller';\n\n/**\n * 多选框列表编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class CheckBoxListEditorProvider\n * @implements {EditorProvider}\n */\nexport class CheckBoxListEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizCheckboxList';\n\n gridEditor: string = 'IBizCheckboxList';\n\n async createController(\n editorModel: ICheckBoxList,\n parentController: IEditorContainerController,\n ): Promise<CheckBoxListEditorController> {\n const c = new CheckBoxListEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getRadioProps,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-radio.scss';\nimport { notNilEmpty } from 'qx-util';\nimport { RadioButtonListEditorController } from '../radio-button-list.controller';\n\nexport const IBizRadio = defineComponent({\n name: 'IBizRadio',\n props: getRadioProps<RadioButtonListEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('radio');\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n const onSelectValueChange = (value: string | number) => {\n emit('change', value);\n };\n\n // 代码表\n const items = ref<readonly IData[]>([]);\n watch(\n () => props.data,\n newVal => {\n c.loadCodeList(newVal).then(_codeList => {\n items.value = _codeList;\n });\n },\n {\n immediate: true,\n deep: true,\n },\n );\n\n const valueText = computed(() => {\n // eslint-disable-next-line eqeqeq\n return items.value.find(item => item.value == props.value)?.text || '';\n });\n\n watch(\n valueText,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n editorModel,\n items,\n valueText,\n onSelectValueChange,\n editorRef,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n ref='editorRef'\n >\n {this.readonly ? (\n this.valueText\n ) : (\n <el-radio-group\n class={this.ns.e('group')}\n model-value={notNilEmpty(this.value) ? String(this.value) : ''}\n onChange={this.onSelectValueChange}\n >\n {this.items.map((_item, index: number) => (\n <el-radio\n key={index}\n label={notNilEmpty(_item.value) ? String(_item.value) : ''}\n disabled={this.disabled || _item.disableSelect === true}\n >\n <span class={this.ns.e('text')}>{_item.text}</span>\n </el-radio>\n ))}\n </el-radio-group>\n )}\n </div>\n );\n },\n});\n","import { CodeListEditorController } from '@ibiz-template/runtime';\nimport { IRadioButtonList } from '@ibiz/model-core';\n\n/**\n * 单选项列表编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class RadioButtonListEditorController extends CodeListEditorController<IRadioButtonList> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IRadioButtonList } from '@ibiz/model-core';\nimport { RadioButtonListEditorController } from './radio-button-list.controller';\n\n/**\n * 单选框列表编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class RadioButtonListEditorProvider\n * @implements {EditorProvider}\n */\nexport class RadioButtonListEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizRadio';\n\n gridEditor: string = 'IBizRadio';\n\n async createController(\n editorModel: IRadioButtonList,\n parentController: IEditorContainerController,\n ): Promise<RadioButtonListEditorController> {\n const c = new RadioButtonListEditorController(\n editorModel,\n parentController,\n );\n await c.init();\n return c;\n }\n}\n","/* eslint-disable no-nested-ternary */\nimport { ref, watch, defineComponent } from 'vue';\nimport {\n getDatePickerProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-date-picker.scss';\nimport dayjs from 'dayjs';\nimport { DatePickerEditorController } from '../date-picker-editor.controller';\n\nexport const IBizDatePicker = defineComponent({\n name: 'IBizDatePicker',\n props: getDatePickerProps<DatePickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('date-picker');\n const c = props.controller;\n\n const editorModel = c!.model;\n\n const type = ref('date');\n const format = ref('YYYY-MM-DD');\n\n const isTimePicker = ref(false);\n\n switch (editorModel.editorType) {\n case 'DATEPICKEREX':\n case 'DATEPICKEREX_NOTIME':\n type.value = 'date';\n break;\n case 'DATEPICKEREX_NODAY':\n case 'DATEPICKEREX_NODAY_NOSECOND':\n isTimePicker.value = true;\n type.value = 'time';\n break;\n case 'DATEPICKEREX_HOUR':\n case 'DATEPICKEREX_MINUTE':\n case 'DATEPICKEREX_SECOND':\n case 'DATEPICKEREX_NOSECOND':\n case 'DATEPICKER':\n default:\n type.value = 'datetime';\n }\n // 值格式化\n const valueFormat = c!.valueFormat;\n if (valueFormat) {\n format.value = valueFormat;\n }\n\n // 格式化后的值\n const formatValue = ref();\n watch(\n () => props.value,\n (newVal, oldVal) => {\n // 空值不转换\n if (newVal && newVal !== oldVal) {\n const formatVal = dayjs(newVal).format(valueFormat);\n if (formatVal !== 'Invalid Date') {\n formatValue.value = formatVal;\n } else {\n formatValue.value = newVal;\n }\n }\n },\n { immediate: true },\n );\n // 处理值变更\n const handleChange = (date: string, _dateType: IData) => {\n emit('change', date);\n };\n\n const onOpenChange = (_isOpen: boolean) => {};\n\n const inputRef = ref();\n\n if (props.autoFocus) {\n watch(inputRef, newVal => {\n if (newVal) {\n const input = newVal.$el.getElementsByTagName('input')[0];\n input.click();\n }\n });\n }\n\n // 聚焦\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n // 失焦\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n watch(\n formatValue,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n return {\n ns,\n c,\n editorModel,\n type,\n format,\n formatValue,\n handleChange,\n onOpenChange,\n inputRef,\n isTimePicker,\n onFocus,\n onBlur,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n this.ns.e(this.editorModel.editorType),\n ]}\n >\n {this.readonly ? (\n this.formatValue\n ) : this.isTimePicker ? (\n <el-time-picker\n ref='inputRef'\n type={this.type}\n format={this.format}\n value-format={this.format}\n placeholder={this.c!.placeHolder}\n v-model={this.formatValue}\n onVisibleChange={this.onOpenChange}\n onChange={this.handleChange}\n disabled={this.disabled}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n ></el-time-picker>\n ) : (\n <el-date-picker\n ref='inputRef'\n type={this.type}\n format={this.format}\n value-format={this.format}\n placeholder={this.c!.placeHolder}\n v-model={this.formatValue}\n onVisibleChange={this.onOpenChange}\n onChange={this.handleChange}\n disabled={this.disabled}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n ></el-date-picker>\n )}\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { IDatePicker } from '@ibiz/model-core';\n\n/**\n * 选项框列表编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class DatePickerEditorController extends EditorController<IDatePicker> {\n /**\n * 根据编辑器类型获取格式化\n *\n * @author lxm\n * @date 2022-11-03 16:11:21\n * @protected\n * @returns {*} {string}\n */\n getFormatByType(editorType: string | undefined): string {\n switch (editorType) {\n // 时间选择器\n case 'DATEPICKER':\n return 'YYYY-MM-DD HH:mm:ss';\n // 时间选择控件\n case 'DATEPICKEREX':\n return 'YYYY-MM-DD HH:mm:ss';\n // 时间选择控件_无小时\n case 'DATEPICKEREX_NOTIME':\n return 'YYYY-MM-DD';\n // 时间选择控件_小时\n case 'DATEPICKEREX_HOUR':\n return 'YYYY-MM-DD HH';\n // 时间选择控件_分钟\n case 'DATEPICKEREX_MINUTE':\n return 'YYYY-MM-DD HH:mm';\n // 时间选择控件_秒钟\n case 'DATEPICKEREX_SECOND':\n return 'YYYY-MM-DD HH:mm:ss';\n // 时间选择控件_无日期\n case 'DATEPICKEREX_NODAY':\n return 'HH:mm:ss';\n // 时间选择控件_无日期无秒钟\n case 'DATEPICKEREX_NODAY_NOSECOND':\n return 'HH:mm';\n // 时间选择控件_无秒钟\n case 'DATEPICKEREX_NOSECOND':\n return 'YYYY-MM-DD HH:mm';\n default:\n return 'YYYY-MM-DD HH:mm:ss';\n }\n }\n\n /**\n * 值格式化\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 14:33:14\n */\n public valueFormat: string | undefined;\n\n protected async onInit(): Promise<void> {\n super.onInit();\n this.valueFormat = this.getFormatByType(this.model.editorType);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IDatePicker } from '@ibiz/model-core';\nimport { DatePickerEditorController } from './date-picker-editor.controller';\n\n/**\n * 日期时间选择器编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class DatePickerEditorProvider\n * @implements {EditorProvider}\n */\nexport class DatePickerEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizDatePicker';\n\n gridEditor: string = 'IBizDatePicker';\n\n async createController(\n editorModel: IDatePicker,\n parentController: IEditorContainerController,\n ): Promise<DatePickerEditorController> {\n const c = new DatePickerEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, Ref, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getRawProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { RawEditorController } from '../raw-editor.controller';\nimport './ibiz-raw.scss';\n\nexport const IBizRaw = defineComponent({\n name: 'IBizRaw',\n props: getRawProps<RawEditorController>(),\n emits: getEditorEmits(),\n setup(props) {\n const ns = useNamespace('raw');\n const c = props.controller;\n const editorModel = c.model;\n\n // 传入内容\n const content: Ref<string | number | undefined> = ref('');\n\n // 类型\n let type = 'TEXT';\n // handlerBars模版\n let template = '';\n if (editorModel.contentType) {\n type = editorModel.contentType;\n }\n if (editorModel.editorParams?.contenttype) {\n type = editorModel.editorParams?.contenttype;\n }\n if (editorModel.editorParams?.template) {\n template = editorModel.editorParams.template.replaceAll('//n', '\\n');\n }\n if (editorModel.editorParams?.TEMPLATE) {\n template = editorModel.editorParams.TEMPLATE.replaceAll('//n', '\\n');\n }\n // TODO 等接口有了放开\n // if (editorModel.template) {\n // template = editorModel.template.replaceAll('//n', '\\n');\n // }\n\n watch(\n () => props.value,\n async (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (typeof newVal === 'string' || typeof newVal === 'number') {\n content.value = newVal;\n }\n if (template && newVal) {\n let obj = null;\n if (typeof newVal === 'string') {\n try {\n obj = JSON.parse(newVal);\n } catch (error) {\n ibiz.log.error('JSON字符串转换错误');\n }\n }\n content.value = await ibiz.util.hbs.render(\n template,\n (obj || newVal) as IData,\n );\n }\n }\n },\n {\n immediate: true,\n },\n );\n\n return {\n ns,\n content,\n type,\n template,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n {this.content && (\n <iBizRawItem\n class={this.ns.b('content')}\n content={this.content}\n type={this.type}\n ></iBizRawItem>\n )}\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { IRaw } from '@ibiz/model-core';\n\n/**\n * 直接内容编辑器控制器\n *\n * @export\n * @class RawEditorController\n * @extends {EditorController}\n */\nexport class RawEditorController extends EditorController<IRaw> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IRaw } from '@ibiz/model-core';\nimport { RawEditorController } from './raw-editor.controller';\n\n/**\n * 直接内容编辑器适配器\n *\n * @export\n * @class RawEditorProvider\n * @implements {EditorProvider}\n */\nexport class RawEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizRaw';\n\n gridEditor: string = 'IBizRaw';\n\n async createController(\n editorModel: IRaw,\n parentController: IEditorContainerController,\n ): Promise<RawEditorController> {\n const c = new RawEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getStepperProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { toNumber } from 'lodash-es';\nimport { StepperEditorController } from '../stepper-editor.controller';\n\nexport const IBizStepper = defineComponent({\n name: 'IBizStepper',\n props: getStepperProps<StepperEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('stepper');\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n const currentVal = ref<number | null>(null);\n\n // 步进器步长\n let step = 1;\n // 数值精度\n let precision = 0;\n // 设置步进器允许的最大值\n let max = Infinity;\n // 设置步进器允许的最小值\n let min = -Infinity;\n if (editorModel.editorParams) {\n if (editorModel.editorParams.stepvalue) {\n step = toNumber(editorModel.editorParams.stepvalue);\n }\n if (editorModel.editorParams.precision) {\n precision = toNumber(editorModel.editorParams.precision);\n }\n if (editorModel.editorParams.maxvalue) {\n max = toNumber(editorModel.editorParams.maxvalue);\n }\n if (editorModel.editorParams.minvalue) {\n min = toNumber(editorModel.editorParams.minvalue);\n }\n }\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n const number = Number(newVal);\n currentVal.value = Number.isNaN(number) ? 0 : number;\n }\n },\n { immediate: true },\n );\n\n const handleChange = (e: number | null): void => {\n emit('change', e);\n };\n\n const inputRef = ref();\n\n // 聚焦\n const onFocus = (): void => {\n emit('focus');\n };\n\n // 失焦\n const onBlur = (): void => {\n emit('blur');\n };\n\n return {\n ns,\n c,\n currentVal,\n handleChange,\n inputRef,\n step,\n precision,\n max,\n min,\n onFocus,\n onBlur,\n };\n },\n render() {\n let content = null;\n if (this.readonly) {\n // 只读显示\n content = `${this.currentVal}`;\n } else {\n // 编辑态显示\n content = [\n <el-input-number\n ref='inputRef'\n v-model={this.currentVal}\n placeholder={this.c.placeHolder}\n precision={this.precision}\n min={this.min}\n max={this.max}\n step={this.step}\n disabled={this.disabled}\n onChange={this.handleChange}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n ></el-input-number>,\n ];\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n {content}\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { IStepper } from '@ibiz/model-core';\n\n/**\n * 步进器编辑器控制器\n *\n * @export\n * @class StepperEditorController\n * @extends {EditorController}\n */\nexport class StepperEditorController extends EditorController<IStepper> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IStepper } from '@ibiz/model-core';\nimport { StepperEditorController } from './stepper-editor.controller';\n\n/**\n * 步进器编辑器适配器\n *\n * @export\n * @class StepperEditorProvider\n * @implements {EditorProvider}\n */\nexport class StepperEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizStepper';\n\n gridEditor: string = 'IBizStepper';\n\n async createController(\n editorModel: IStepper,\n parentController: IEditorContainerController,\n ): Promise<StepperEditorController> {\n const c = new StepperEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getRateProps,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { toNumber } from 'lodash-es';\nimport { RateEditorController } from '../rate-editor.controller';\n\nexport const IBizRate = defineComponent({\n name: 'IBizRate',\n props: getRateProps<RateEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('rate');\n // 当前值\n const currentVal = ref<number>();\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n // icon 的颜色\n let colors: IData[] = [];\n // 是否显示辅助文字\n let showText = false;\n // 设置允许的最大值\n let max = 5;\n // 辅助文字数组\n let texts: IData[] = [];\n if (editorModel.editorParams) {\n if (editorModel.editorParams.colors) {\n colors = c.toObj(editorModel.editorParams.colors) as IData[];\n }\n if (editorModel.editorParams.showText) {\n showText = c.toBoolean(editorModel.editorParams.showText);\n }\n if (editorModel.editorParams.maxvalue) {\n max = toNumber(editorModel.editorParams.maxvalue);\n }\n if (editorModel.editorParams.texts) {\n texts = c.toObj(editorModel.editorParams.texts) as IData[];\n }\n }\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (!newVal) {\n currentVal.value = 0;\n } else {\n currentVal.value = newVal as number;\n }\n }\n },\n { immediate: true },\n );\n\n const handleChange = (currentValue: number | undefined): void => {\n emit('change', currentValue);\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n currentVal,\n handleChange,\n colors,\n showText,\n max,\n texts,\n editorRef,\n };\n },\n render() {\n return (\n <div class={[this.ns.b()]} ref='editorRef'>\n <el-rate\n v-model={this.currentVal}\n disabled={this.disabled || this.readonly}\n max={this.max}\n colors={this.colors}\n showText={this.showText}\n texts={this.texts}\n onChange={this.handleChange}\n ></el-rate>\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { IRating } from '@ibiz/model-core';\n\n/**\n * 评分器编辑器控制器\n *\n * @export\n * @class RateEditorController\n * @extends {EditorController}\n */\nexport class RateEditorController extends EditorController<IRating> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IRating } from '@ibiz/model-core';\nimport { RateEditorController } from './rate-editor.controller';\n\n/**\n * 评分器编辑器适配器\n *\n * @export\n * @class RateEditorProvider\n * @implements {EditorProvider}\n */\nexport class RateEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizRate';\n\n gridEditor: string = 'IBizRate';\n\n async createController(\n editorModel: IRating,\n parentController: IEditorContainerController,\n ): Promise<RateEditorController> {\n const c = new RateEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getSwitchProps,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { SwitchEditorController } from '../switch-editor.controller';\n\nexport const IBizSwitch = defineComponent({\n name: 'IBizSwitch',\n props: getSwitchProps<SwitchEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('switch');\n const c = props.controller;\n const editorModel = c.model;\n\n // 当前值\n const currentVal = ref<boolean>(false);\n\n // 文字描述\n let activeText = '';\n let inactiveText = '';\n\n // 开关文字描述配置\n let dicData: IData[] = [\n { value: 0, label: '' },\n { value: 1, label: '' },\n ];\n if (editorModel.editorParams) {\n if (editorModel.editorParams.dicData) {\n dicData = c.toObj(editorModel.editorParams.dicData) as IData[];\n }\n }\n\n if (dicData && Array.isArray(dicData)) {\n const inactiveResult = dicData.find((item: IData) => {\n return item.value === 0;\n });\n if (inactiveResult) {\n inactiveText = inactiveResult.label;\n }\n const activeResult = dicData.find((item: IData) => {\n return item.value === 1;\n });\n if (activeResult) {\n activeText = activeResult.label;\n }\n }\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (!newVal) {\n currentVal.value = false;\n } else {\n // eslint-disable-next-line eqeqeq\n currentVal.value = props.value == 1;\n }\n }\n },\n { immediate: true },\n );\n\n const handleChange = (currentValue: boolean): void => {\n const emitValue = currentValue === true ? 1 : 0;\n emit('change', emitValue);\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n currentVal,\n activeText,\n inactiveText,\n handleChange,\n dicData,\n editorRef,\n };\n },\n render() {\n return (\n <div class={[this.ns.b()]} ref='editorRef'>\n <el-switch\n v-model={this.currentVal}\n disabled={this.disabled || this.readonly}\n activeText={this.activeText}\n inactiveText={this.inactiveText}\n onChange={this.handleChange}\n ></el-switch>\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { ICheckBox } from '@ibiz/model-core';\n\n/**\n * 开关编辑器控制器\n *\n * @export\n * @class SwitchEditorController\n * @extends {EditorController}\n */\nexport class SwitchEditorController extends EditorController<ICheckBox> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ICheckBox } from '@ibiz/model-core';\nimport { SwitchEditorController } from './switch-editor.controller';\n\n/**\n * 开关编辑器适配器\n *\n * @export\n * @class SwitchEditorProvider\n * @implements {EditorProvider}\n */\nexport class SwitchEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizSwitch';\n\n gridEditor: string = 'IBizSwitch';\n\n async createController(\n editorModel: ICheckBox,\n parentController: IEditorContainerController,\n ): Promise<SwitchEditorController> {\n const c = new SwitchEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getSliderProps,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { toNumber } from 'lodash-es';\nimport { SliderEditorController } from '../slider-editor.controller';\n\nexport const IBizSlider = defineComponent({\n name: 'IBizSlider',\n props: getSliderProps<SliderEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('slider');\n const c = props.controller;\n const editorModel = c.model;\n\n // 步长\n let step = 1;\n // 设置滑动输入条允许的最大值\n let max = 100;\n // 设置滑动输入条允许的最小值\n let min = 0;\n // 是否显示间断点\n let showStops = false;\n // 是否开启选择范围\n let range = false;\n // 是否显示输入框,仅在非范围选择时有效\n let showInput = false;\n if (editorModel.editorParams) {\n if (editorModel.editorParams.stepvalue) {\n step = toNumber(editorModel.editorParams.stepvalue);\n }\n if (editorModel.editorParams.maxvalue) {\n max = toNumber(editorModel.editorParams.maxvalue);\n }\n if (editorModel.editorParams.minvalue) {\n min = toNumber(editorModel.editorParams.minvalue);\n }\n if (editorModel.editorParams.showstops) {\n showStops = c.toBoolean(editorModel.editorParams.showstops);\n }\n if (editorModel.editorParams.range) {\n range = c.toBoolean(editorModel.editorParams.range);\n }\n if (editorModel.editorParams.showinput) {\n showInput = c.toBoolean(editorModel.editorParams.showinput);\n }\n }\n\n // 当前值\n const currentVal = ref<number | Array<number>>();\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal === null || newVal === undefined) {\n // 如果是范围给数组\n if (range) {\n currentVal.value = [0, 1];\n } else {\n currentVal.value = 0;\n }\n } else {\n // 如果是范围解析JSON成数组\n // eslint-disable-next-line no-lonely-if\n if (range) {\n currentVal.value = JSON.parse(newVal as string);\n } else {\n currentVal.value = Number(newVal) as number;\n }\n }\n }\n },\n { immediate: true },\n );\n\n const handleChange = (currentValue: number | undefined | Array<number>) => {\n if (Array.isArray(currentValue)) {\n emit('change', JSON.stringify(currentValue));\n } else {\n emit('change', currentValue);\n }\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n currentVal,\n handleChange,\n step,\n max,\n min,\n showStops,\n range,\n showInput,\n editorRef,\n };\n },\n render() {\n return (\n <div\n class={[this.ns.b(), this.readonly ? this.ns.m('readonly') : '']}\n ref='editorRef'\n >\n <el-slider\n v-model={this.currentVal}\n disabled={this.disabled || this.readonly}\n step={this.step}\n max={this.max}\n min={this.min}\n showStops={this.showStops}\n range={this.range}\n showInput={this.showInput}\n onChange={this.handleChange}\n ></el-slider>\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { ISlider } from '@ibiz/model-core';\n\n/**\n * 滑动输入条编辑器控制器\n *\n * @export\n * @class SliderEditorController\n * @extends {EditorController}\n */\nexport class SliderEditorController extends EditorController<ISlider> {\n protected async onInit(): Promise<void> {\n super.onInit();\n if (this.model.precision) {\n ibiz.log.warn('滑动输入条不支持配置精度');\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ISlider } from '@ibiz/model-core';\nimport { SliderEditorController } from './slider-editor.controller';\n\n/**\n * 滑动输入条编辑器适配器\n *\n * @export\n * @class SliderEditorProvider\n * @implements {EditorProvider}\n */\nexport class SliderEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizSlider';\n\n gridEditor: string = 'IBizSlider';\n\n async createController(\n editorModel: ISlider,\n parentController: IEditorContainerController,\n ): Promise<SliderEditorController> {\n const c = new SliderEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent, Ref, ref, watch } from 'vue';\nimport {\n getListBoxProps,\n getEditorEmits,\n useNamespace,\n useFocusAndBlur,\n} from '@ibiz-template/vue3-util';\nimport { isNil } from 'ramda';\nimport './ibiz-list-box.scss';\nimport { ListBoxEditorController } from '../list-box-editor.controller';\nimport { ListBoxPickerEditorController } from '../list-box-picker-editor.controller';\n\nexport const IBizListBox = defineComponent({\n name: 'IBizListBox',\n props: getListBoxProps<\n ListBoxEditorController | ListBoxPickerEditorController\n >(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('list-box');\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n let multiple: boolean = false;\n if (editorModel.editorParams) {\n if (editorModel.editorParams.multiple) {\n multiple = c.toBoolean(editorModel.editorParams.multiple);\n }\n }\n\n const codeList = (c as ListBoxEditorController).codeList;\n\n const editorType = editorModel.editorType;\n\n // 代码表数据(LISTBOX) or AC请求数据(LISTBOXPICKUP)\n const items = ref<readonly IData[]>([]);\n\n // 更新列表框选项\n const loadListBoxItems = async () => {\n if (Object.is('LISTBOX', editorType)) {\n const controller = c as ListBoxEditorController;\n controller.loadCodeList(props.data).then(_codeList => {\n items.value = _codeList;\n });\n } else if (Object.is('LISTBOXPICKUP', editorType)) {\n const controller = c as ListBoxPickerEditorController;\n if (controller.model.appDataEntityId) {\n const res = await controller.getServiceData(props.data);\n if (res) {\n items.value = res.data.map(item => ({\n value: item[controller.keyName],\n text: item[controller.textName],\n }));\n }\n }\n }\n };\n\n loadListBoxItems();\n\n // 当前模式\n const currentMode = computed(() => {\n if (codeList && codeList.orMode) {\n return codeList.orMode.toLowerCase();\n }\n return 'str';\n });\n\n // 值分隔符\n let valueSeparator = ',';\n if (codeList && codeList.valueSeparator) {\n valueSeparator = codeList.valueSeparator;\n }\n\n // 选中数组\n const selectArray: Ref<(string | number)[]> = ref([]);\n\n // 监听当前值生成selectArray\n watch(\n () => props.value,\n newVal => {\n if (!isNil(newVal)) {\n if (multiple) {\n let selectsArray: Array<string | number> = [];\n if (editorType === 'LISTBOX') {\n if (Object.is(currentMode.value, 'num') && items) {\n const num: number =\n typeof newVal === 'string' ? parseInt(newVal, 10) : newVal;\n items.value.forEach((item: IData) => {\n // eslint-disable-next-line no-bitwise\n if ((num & item.value) === item.value) {\n selectsArray.push(item.value);\n }\n });\n } else if (Object.is(currentMode.value, 'str')) {\n if (newVal !== '') {\n if (codeList && typeof newVal === 'string') {\n selectsArray = newVal.split(valueSeparator);\n if (codeList.codeItemValueNumber) {\n for (let i = 0, len = selectsArray.length; i < len; i++) {\n selectsArray[i] = Number(selectsArray[i]);\n }\n }\n }\n }\n }\n } else if (editorType === 'LISTBOXPICKUP') {\n if (newVal !== '') {\n selectsArray = (newVal as string).split(valueSeparator);\n }\n }\n selectArray.value = selectsArray;\n } else {\n selectArray.value = [newVal];\n }\n } else {\n selectArray.value = [];\n }\n },\n { immediate: true, deep: true },\n );\n\n // 选中数据改变\n const onSelectArrayChange = (value: Array<string | number>) => {\n let _value;\n // 单多选\n if (multiple) {\n const values = [...value];\n if (Object.is('LISTBOX', editorType)) {\n // 根据代码表模式对值进行计算\n if (Object.is(currentMode, 'num')) {\n let temp: number = 0;\n values.forEach(item => {\n // eslint-disable-next-line no-bitwise\n temp |= parseInt(item as string, 10);\n });\n _value = temp;\n } else if (Object.is(currentMode, 'str')) {\n _value = values.join(valueSeparator);\n }\n } else if (Object.is('LISTBOXPICKUP', editorType)) {\n _value = values.join(valueSeparator);\n }\n } else {\n _value = value;\n }\n emit('change', _value);\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n return {\n ns,\n items,\n selectArray,\n onSelectArrayChange,\n multiple,\n editorRef,\n };\n },\n render() {\n return (\n <div class={[this.ns.b()]} ref='editorRef'>\n {this.multiple ? (\n <el-checkbox-group\n class={this.ns.b('checkbox')}\n modelValue={this.selectArray}\n onChange={this.onSelectArrayChange}\n >\n {this.items.map((item, index: number) => (\n <el-checkbox\n key={index}\n label={item.value}\n disabled={\n this.disabled || this.readonly || item.disableSelect === true\n }\n >\n <span class={this.ns.e('text')}>{item.text}</span>\n </el-checkbox>\n ))}\n </el-checkbox-group>\n ) : (\n <el-radio-group\n class={this.ns.b('radio')}\n modelValue={this.selectArray[0]}\n >\n {this.items.map((item, index: number) => (\n <el-radio\n key={index}\n label={item.value}\n disabled={\n this.disabled || this.readonly || item.disableSelect === true\n }\n onChange={() => {\n this.onSelectArrayChange(item.value);\n }}\n >\n <span class={this.ns.e('text')}>{item.text}</span>\n </el-radio>\n ))}\n </el-radio-group>\n )}\n </div>\n );\n },\n});\n","import { CodeListEditorController } from '@ibiz-template/runtime';\nimport { IAppCodeList, IListBox } from '@ibiz/model-core';\n\n/**\n * 列表框编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class ListBoxEditorController extends CodeListEditorController<IListBox> {\n /**\n * 代码表模型\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-05-24 10:55:50\n */\n codeList: IAppCodeList | undefined = undefined;\n\n protected async onInit(): Promise<void> {\n super.onInit();\n if (this.model.appCodeListId) {\n const app = await ibiz.hub.getApp(this.context.srfappid);\n this.codeList = app.codeList.getCodeList(this.model.appCodeListId);\n }\n }\n}\n","import { IHttpResponse, RuntimeModelError } from '@ibiz-template/core';\nimport { EditorController } from '@ibiz-template/runtime';\nimport { IListBoxPicker } from '@ibiz/model-core';\nimport { mergeDeepLeft } from 'ramda';\n\n/**\n * 列表框picker编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class ListBoxPickerEditorController extends EditorController<IListBoxPicker> {\n /**\n * 主键属性名称\n */\n public keyName: string = 'srfkey';\n\n /**\n * 主文本属性名称\n */\n public textName: string = 'srfmajortext';\n\n /**\n * 数据集codeName\n */\n public interfaceName: string = '';\n\n protected async onInit(): Promise<void> {\n super.onInit();\n if (this.model.editorType === 'LISTBOXPICKUP') {\n if (this.model.appDEDataSetId) {\n this.interfaceName = this.model.appDEDataSetId;\n }\n }\n }\n\n /**\n * 加载实体数据集数据\n *\n * @param {string} query 模糊匹配字符串\n * @param {IData} data 表单数据\n * @returns {*} {Promise<IHttpResponse<IData[]>>}\n * @memberof PickerEditorController\n */\n public async getServiceData(data: IData): Promise<IHttpResponse<IData[]>> {\n const { context, params } = this.handlePublicParams(\n data,\n this.context,\n this.params,\n );\n const tempParams = mergeDeepLeft(params, { size: 1000 });\n if (this.interfaceName) {\n const app = ibiz.hub.getApp(this.context.srfappid);\n const res = await app.deService.exec(\n this.model.appDataEntityId!,\n this.interfaceName,\n context,\n tempParams,\n );\n return res as IHttpResponse<IData[]>;\n }\n throw new RuntimeModelError(this.model, '请配置实体和实体数据集');\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IListBox, IListBoxPicker } from '@ibiz/model-core';\nimport { ListBoxEditorController } from './list-box-editor.controller';\nimport { ListBoxPickerEditorController } from './list-box-picker-editor.controller';\n\n/**\n * 列表框编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class ListBoxEditorProvider\n * @implements {EditorProvider}\n */\nexport class ListBoxEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizListBox';\n\n gridEditor: string = 'IBizListBox';\n\n async createController(\n editorModel: IListBox | IListBoxPicker,\n parentController: IEditorContainerController,\n ): Promise<ListBoxEditorController | ListBoxPickerEditorController> {\n let c;\n if (editorModel.editorType === 'LISTBOXPICKUP') {\n c = new ListBoxPickerEditorController(\n editorModel as IListBoxPicker,\n parentController,\n );\n } else {\n c = new ListBoxEditorController(\n editorModel as IListBox,\n parentController,\n );\n }\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent, Ref, ref, watch } from 'vue';\nimport {\n getAutoCompleteProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-autocomplete.scss';\nimport { debounce } from 'lodash-es';\nimport { AutoCompleteEditorController } from '../autocomplete-editor.controller';\n\nexport const IBizAutoComplete = defineComponent({\n name: 'IBizAutoComplete',\n props: getAutoCompleteProps<AutoCompleteEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('autocomplete');\n\n const c = props.controller!;\n\n const editorType = c.model.editorType;\n\n // 当前值\n const curValue: Ref<string[] | string | null> = ref('');\n\n // 实体数据集\n const items: Ref<IData[]> = ref([]);\n\n // 获取实体数据后,需要判断一次当前值是否在返回数据中\n watch(items, (newVal, oldVal) => {\n if (oldVal.length === 0 && newVal.length > 0) {\n const index = newVal.findIndex((item: IData) =>\n Object.is(item[c.keyName], props.value),\n );\n if (index !== -1) {\n curValue.value = newVal[index][c.textName];\n }\n }\n });\n\n // 是否显示所有数据\n const isShowAll = ref(true);\n\n // 自动选择Ref\n const autoCompleteRef = ref();\n\n watch(\n () => props.value,\n newVal => {\n if (newVal || newVal === null) {\n if (newVal === null) {\n curValue.value = '';\n }\n const index = items.value.findIndex((item: IData) =>\n Object.is(item[c.keyName], newVal),\n );\n if (index !== -1) {\n curValue.value = items.value[index][c.textName];\n } else {\n curValue.value = newVal as string;\n }\n }\n },\n { immediate: true },\n );\n\n // 处理选中数据后的处理逻辑\n const handleDataSelect = async (data: IData) => {\n // 处理回填数据\n const dataItems = await c.calcFillDataItems(data);\n if (dataItems.length) {\n dataItems.forEach(dataItem => {\n emit('change', dataItem.value, dataItem.id);\n });\n }\n\n // 处理本身的值\n emit('change', data[c.keyName]);\n };\n\n // 往外抛值\n const onACSelect = async (item: IData) => {\n await handleDataSelect(item);\n isShowAll.value = true;\n };\n\n // 搜索\n const onSearch = async (query: string, cb?: (_items: IData[]) => void) => {\n if (c.model.appDataEntityId) {\n const trimQuery = query.trim();\n const res = await c.getServiceData(trimQuery, props.data);\n if (res) {\n items.value = res.data as IData[];\n if (cb && cb instanceof Function) {\n cb(items.value);\n }\n }\n }\n };\n // 开始时搜索一次拿items\n onSearch('');\n\n // 清除\n const onClear = () => {\n // 清空回填数据\n const dataItems = c.dataItems;\n if (dataItems.length > 0) {\n dataItems.forEach(dataItem => {\n emit('change', null, dataItem.id);\n });\n }\n emit('change', null);\n };\n\n // 聚焦\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n // 失焦\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n // 输入框focus时是否显示建议\n const triggerOnFocus = computed(() => {\n return !Object.is('AC_NOBUTTON', editorType);\n });\n\n // 是否可以清空\n const autoCompleteClearable = computed(() => {\n return !(\n Object.is('AC_NOBUTTON', editorType) ||\n Object.is('AC_FS_NOBUTTON', editorType)\n );\n });\n\n let isDebounce = false;\n let blurCacheValue: string | undefined;\n // 防抖值变更回调\n const debounceChange = debounce(\n (val: string | number) => {\n // 拦截掉blur触发后change\n if (blurCacheValue !== val) {\n emit('change', val);\n }\n blurCacheValue = undefined;\n isDebounce = false;\n },\n 300,\n { leading: true },\n );\n // 输入完成后抛值\n const handleInput = (val: string | number) => {\n if (editorType !== 'AC_FS' && editorType !== 'AC_FS_NOBUTTON') {\n isDebounce = true;\n debounceChange(val);\n }\n };\n\n // 处理点击键盘\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n return {\n ns,\n c,\n curValue,\n triggerOnFocus,\n autoCompleteClearable,\n autoCompleteRef,\n onSearch,\n onClear,\n onFocus,\n onBlur,\n onACSelect,\n items,\n handleInput,\n isDebounce,\n handleKeyUp,\n };\n },\n render() {\n return (\n <el-autocomplete\n class={this.ns.b()}\n ref='autoCompleteRef'\n v-model={this.curValue}\n value-key={this.c.textName}\n placeholder={this.c.placeHolder}\n placement='bottom'\n clearable={this.autoCompleteClearable}\n popper-class={this.ns.e('transfer')}\n teleported={false}\n fetch-suggestions={this.onSearch}\n onClear={this.onClear}\n disabled={this.disabled || this.readonly}\n onSelect={this.onACSelect}\n onInput={this.handleInput}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onKeyup={this.handleKeyUp}\n >\n {{\n default: ({ item }: { item: IData }) => {\n return (\n <div class={this.ns.e('transfer-item')}>\n {item[this.c.textName]}\n </div>\n );\n },\n suffix: () => {},\n }}\n </el-autocomplete>\n );\n },\n});\n","import { IHttpResponse, RuntimeModelError } from '@ibiz-template/core';\nimport { EditorController, getDeACMode } from '@ibiz-template/runtime';\nimport {\n IAppDEACMode,\n IAutoComplete,\n IDEACModeDataItem,\n} from '@ibiz/model-core';\nimport { mergeDeepLeft } from 'ramda';\n\n/**\n * 自动完成编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class AutoCompleteEditorController extends EditorController<IAutoComplete> {\n /**\n * 主键属性名称\n */\n public keyName: string = 'srfkey';\n\n /**\n * 主文本属性名称\n */\n public textName: string = 'srfmajortext';\n\n /**\n * 数据集codeName\n */\n public interfaceName: string = '';\n\n /**\n * 自填模式sort排序\n */\n public sort: string | undefined = '';\n\n /**\n * 实体自填模式模型\n */\n public deACMode: IAppDEACMode | undefined = undefined;\n\n /**\n * 自填数据项集合(已排除了value和text)\n */\n public dataItems: IDEACModeDataItem[] = [];\n\n protected async onInit(): Promise<void> {\n super.onInit();\n if (this.model.appDataEntityId) {\n if (this.model.appDEDataSetId) {\n this.interfaceName = this.model.appDEDataSetId;\n }\n if (this.model.appDEACModeId) {\n this.deACMode = await getDeACMode(\n this.model.appDEACModeId,\n this.model.appDataEntityId,\n this.context.srfappid,\n );\n if (this.deACMode) {\n // 自填模式相关\n const { minorSortAppDEFieldId, minorSortDir } = this.deACMode;\n if (minorSortAppDEFieldId && minorSortDir) {\n this.sort = `${minorSortAppDEFieldId.toLowerCase()},${minorSortDir.toLowerCase()}`;\n }\n if (this.deACMode.textAppDEFieldId) {\n this.textName = this.deACMode.textAppDEFieldId;\n }\n if (this.deACMode.valueAppDEFieldId) {\n this.keyName = this.deACMode.valueAppDEFieldId;\n }\n if (this.deACMode.deacmodeDataItems) {\n this.dataItems = [];\n this.deACMode.deacmodeDataItems.forEach(\n (dataItem: IDEACModeDataItem) => {\n if (dataItem.id !== 'value' && dataItem.id !== 'text') {\n this.dataItems.push(dataItem);\n }\n },\n );\n }\n }\n }\n }\n }\n\n /**\n * 加载实体数据集数据\n *\n * @param {string} query 模糊匹配字符串\n * @param {IData} data 表单数据\n * @returns {*} {Promise<IHttpResponse<IData[]>>}\n * @memberof PickerEditorController\n */\n public async getServiceData(\n query: string,\n data: IData,\n ): Promise<IHttpResponse<IData[]>> {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\n const { context, params } = this.handlePublicParams(\n data,\n this.context,\n this.params,\n );\n // 固定参数\n const fixedParams = {};\n if (this.sort && !Object.is(this.sort, '')) {\n Object.assign(fixedParams, { sort: this.sort });\n }\n if (query) {\n Object.assign(fixedParams, { query });\n }\n Object.assign(fixedParams, { size: 1000 });\n // 合并计算出来的参数和固定参数,以计算参数为准\n const tempParams = mergeDeepLeft(params, fixedParams);\n if (this.interfaceName) {\n const app = ibiz.hub.getApp(this.context.srfappid);\n const res = await app.deService.exec(\n this.model.appDataEntityId!,\n this.interfaceName,\n context,\n tempParams,\n );\n return res as IHttpResponse<IData[]>;\n }\n throw new RuntimeModelError(this.model, '请配置实体和实体数据集');\n }\n\n /**\n * 计算回填数据\n *\n * @author lxm\n * @date 2022-10-24 16:10:24\n * @param {IData} data 选中数据\n * @returns {*} {Promise<Array<{ id: string; value: any }>>}\n */\n async calcFillDataItems(\n data: IData,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Array<{ id: string; value: any }>> {\n if (this.deACMode) {\n if (this.dataItems.length === 0) {\n return [];\n }\n const result = await Promise.all(\n this.dataItems.map(item => {\n const value = data[item.appDEFieldId!];\n if (item.format) {\n // todo 值格式化\n } else if (item.convertToCodeItemText && item.codeListId) {\n // todo 代码表转换为文本值\n } else if (item.customCode) {\n // todo 脚本代码\n }\n return { id: item.id!, value };\n }),\n );\n return result;\n }\n return [];\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IAutoComplete } from '@ibiz/model-core';\nimport { AutoCompleteEditorController } from './autocomplete-editor.controller';\n\n/**\n * 多选框列表编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class AutoCompleteEditorProvider\n * @implements {EditorProvider}\n */\nexport class AutoCompleteEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizAutoComplete';\n\n gridEditor: string = 'IBizAutoComplete';\n\n async createController(\n editorModel: IAutoComplete,\n parentController: IEditorContainerController,\n ): Promise<AutoCompleteEditorController> {\n const c = new AutoCompleteEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\nimport { CoreConst, HttpError } from '@ibiz-template/core';\nimport { getCookie } from 'qx-util';\nimport { computed, ComputedRef, Ref, ref, watch } from 'vue';\nimport { UploadEditorController } from '../upload-editor.controller';\n\n/**\n * iview的Upload适配逻辑\n *\n * @author lxm\n * @date 2022-11-17 16:11:12\n * @export\n * @param {IParams} props\n * @param {(_value: string | null) => {}} valueChange\n * @param {UploadEditorController} c\n * @returns {*}\n */\nexport function useIViewUpload(\n props: IParams,\n valueChange: (_value: string | null) => void,\n c: UploadEditorController,\n): {\n uploadUrl: Ref<string>;\n downloadUrl: Ref<string>;\n headers: Ref<IData>;\n files: Ref<\n {\n id: string;\n name: string;\n url?: string | undefined;\n }[]\n >;\n limit: ComputedRef<1 | 9999>;\n onDownload: (file: IData) => void;\n onError: (...args: IData[]) => never;\n onRemove: (file: IData) => void;\n onSuccess: (response: IData) => void;\n beforeUpload: () => void;\n} {\n // 文件列表\n const files: Ref<\n {\n id: string;\n name: string;\n url?: string;\n }[]\n > = ref([]);\n\n // 请求头\n const headers: Ref<IData> = ref({\n Authorization: `Bearer ${getCookie(CoreConst.TOKEN)}`,\n });\n\n // 上传文件路径\n const uploadUrl: Ref<string> = ref('');\n\n // 下载文件路径\n const downloadUrl: Ref<string> = ref('');\n\n // 文件上传缓存对象\n const uploadCache: IData = {\n count: 0,\n cacheFiles: [], // iview上传过程中不能改default-file-list,所以需要缓存\n };\n\n // 值响应式变更\n watch(\n () => props.value,\n newVal => {\n files.value = !newVal ? [] : JSON.parse(newVal);\n },\n { immediate: true },\n );\n\n // data响应式变更基础路径\n watch(\n () => props.data,\n newVal => {\n if (newVal) {\n const urls = c.calcBaseUrl(newVal);\n uploadUrl.value = urls.uploadUrl;\n downloadUrl.value = urls.downloadUrl;\n }\n },\n { immediate: true, deep: true },\n );\n\n watch(\n files,\n newVal => {\n // 变更后且下载基础路径存在时解析\n if (newVal?.length && downloadUrl.value) {\n newVal.forEach((file: IData) => {\n file.url = file.url || downloadUrl.value.replace('%fileId%', file.id);\n });\n }\n },\n { immediate: true },\n );\n\n watch(\n downloadUrl,\n newVal => {\n // 变更后且下载基础路径存在时解析\n if (newVal && files.value.length) {\n files.value.forEach((file: IData) => {\n file.url = downloadUrl.value.replace('%fileId%', file.id);\n });\n }\n },\n { immediate: true },\n );\n\n /**\n * 抛出值变更事件,根据files计算value\n *\n * @author lxm\n * @date 2022-11-17 14:11:54\n */\n const emitValue = () => {\n const _files = [...files.value, ...uploadCache.cacheFiles];\n const value: string | null =\n _files.length > 0\n ? JSON.stringify(_files.map(file => ({ name: file.name, id: file.id })))\n : null;\n uploadCache.cacheFiles = [];\n valueChange(value);\n };\n\n // 上传前回调\n const beforeUpload = () => {\n uploadCache.count += 1;\n };\n\n // 上传成功回调\n const onSuccess = (response: IData) => {\n if (!response) {\n return;\n }\n uploadCache.cacheFiles.push({\n name: response.filename,\n id: response.fileid,\n });\n uploadCache.count -= 1;\n\n // 回调都结束后抛出值变更\n if (uploadCache.count === 0) {\n emitValue();\n }\n };\n\n // 上传失败回调\n const onError = (...args: IData[]) => {\n const error = args[0];\n uploadCache.count -= 1;\n throw new HttpError({\n response: { data: JSON.parse(error.message), status: error.status },\n } as any);\n };\n\n // 删除回调\n const onRemove = (file: IData) => {\n if (props.disabled) {\n return;\n }\n const index = files.value.findIndex(item => item.id === file.id);\n if (index !== -1) {\n files.value.splice(index, 1);\n }\n emitValue();\n };\n\n // 下载文件\n const onDownload = (file: IData) => {\n const url = file.url || downloadUrl.value.replace('%fileId%', file.id);\n c.fileDownload({ url, name: file.name });\n };\n\n // 允许上传文件的最大数量\n const limit = computed(() => {\n return c.multiple ? 9999 : 1;\n });\n\n return {\n uploadUrl,\n downloadUrl,\n headers,\n files,\n limit,\n onDownload,\n onError,\n onRemove,\n onSuccess,\n beforeUpload,\n };\n}\n","import { computed, defineComponent } from 'vue';\nimport {\n getEditorEmits,\n getUploadProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-file-upload.scss';\nimport { useIViewUpload } from '../use/use-iview-upload';\nimport { UploadEditorController } from '../upload-editor.controller';\n\nexport const IBizFileUpload = defineComponent({\n name: 'IBizFileUpload',\n props: getUploadProps<UploadEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('file-upload');\n const c = props.controller;\n\n const {\n uploadUrl,\n headers,\n files,\n limit,\n onDownload,\n onError,\n onRemove,\n onSuccess,\n beforeUpload,\n } = useIViewUpload(\n props,\n value => {\n emit('change', value);\n },\n c,\n );\n\n // 不显示上传图标\n const noUploadIcon = computed(() => {\n return limit.value === 1 && files.value?.length === 1;\n });\n\n // 是否是表格列编辑器\n const isGridEditor = computed(() => {\n return !!(c.parent as IData).model.columnType;\n });\n\n return {\n ns,\n c,\n uploadUrl,\n headers,\n files,\n limit,\n noUploadIcon,\n onDownload,\n onError,\n onRemove,\n onSuccess,\n beforeUpload,\n isGridEditor,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n <el-upload\n class={[this.ns.b('icon'), this.ns.is('not-show', this.noUploadIcon)]}\n file-list={this.files}\n action={this.uploadUrl}\n headers={this.headers}\n disabled={this.disabled}\n multiple={this.c.multiple}\n limit={this.limit}\n drag={!!this.c.isDrag}\n accept={this.c.accept}\n before-upload={this.beforeUpload}\n onSuccess={this.onSuccess}\n onError={this.onError}\n onRemove={this.onRemove}\n onPreview={this.onDownload}\n >\n {this.noUploadIcon ? null : (\n <el-button\n class={[this.ns.b('button')]}\n size={this.isGridEditor ? 'small' : 'default'}\n >\n 上传文件\n </el-button>\n )}\n </el-upload>\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\nimport { computed, defineComponent, ref } from 'vue';\nimport {\n getEditorEmits,\n getUploadProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-image-upload.scss';\nimport { useIViewUpload } from '../use/use-iview-upload';\nimport { UploadEditorController } from '../upload-editor.controller';\n\nexport const IBizImageUpload = defineComponent({\n name: 'IBizImageUpload',\n props: getUploadProps<UploadEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('image-upload');\n\n const c = props.controller;\n\n const {\n uploadUrl,\n headers,\n files,\n limit,\n onDownload,\n onError,\n onRemove,\n onSuccess,\n beforeUpload,\n } = useIViewUpload(\n props,\n value => {\n emit('change', value);\n },\n c,\n );\n\n const dialogImageUrl = ref<string>('');\n const dialogVisible = ref<boolean>(false);\n\n const onDialogVisibleChange = (value: boolean) => {\n dialogVisible.value = value;\n };\n\n // 预览\n const onPreview = (file: IData) => {\n dialogImageUrl.value = file.url;\n dialogVisible.value = true;\n };\n\n // 不显示上传图标\n const noUploadIcon = computed(() => {\n return limit.value === 1 && files.value.length === 1;\n });\n\n return {\n ns,\n c,\n files,\n limit,\n headers,\n uploadUrl,\n dialogImageUrl,\n dialogVisible,\n noUploadIcon,\n beforeUpload,\n onSuccess,\n onError,\n onRemove,\n onDownload,\n onDialogVisibleChange,\n onPreview,\n };\n },\n render() {\n // 编辑态展示\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n <div class={this.ns.e('image-upload-list')}>\n {this.files.map(item => (\n <div key={item.id} class={this.ns.e('list-item')}>\n <img src={item.url} />\n <div class={this.ns.e('list-item-cover')}>\n <ion-icon\n class={this.ns.e('preview-icon')}\n onClick={() => this.onPreview(item)}\n name='search'\n ></ion-icon>\n <ion-icon\n class={this.ns.e('download-icon')}\n onClick={() => this.onDownload(item)}\n name='download'\n ></ion-icon>\n <ion-icon\n class={this.ns.e('remove-icon')}\n onClick={() => this.onRemove(item)}\n name='remove'\n ></ion-icon>\n </div>\n </div>\n ))}\n </div>\n <el-upload\n ref='imageUpload'\n class={[this.ns.b('icon'), this.ns.is('not-show', this.noUploadIcon)]}\n file-list={this.files}\n action={this.uploadUrl}\n headers={this.headers}\n disabled={this.disabled}\n multiple={this.c.multiple}\n limit={this.limit}\n show-file-list={false}\n accept={this.c.accept}\n list-type={'picture-card'}\n before-upload={this.beforeUpload}\n onSuccess={this.onSuccess}\n onError={this.onError}\n onRemove={this.onRemove}\n onPreview={this.onDownload}\n >\n <ion-icon\n name='add-outline'\n class={this.ns.e('image-upload-add')}\n ></ion-icon>\n </el-upload>\n {this.dialogVisible ? (\n <el-image-viewer\n onClose={() => this.onDialogVisibleChange(false)}\n url-list={[this.dialogImageUrl]}\n hide-on-click-modal={true}\n close-on-press-escape={true}\n teleported\n z-index={9999}\n ></el-image-viewer>\n ) : null}\n </div>\n );\n },\n});\n","/* eslint-disable no-param-reassign */\nimport { defineComponent } from 'vue';\nimport {\n getEditorEmits,\n getUploadProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { UploadEditorController } from '../upload-editor.controller';\nimport './ibiz-image-preview.scss';\n\nexport const IBizImagePreview = defineComponent({\n name: 'IBizImagePreview',\n props: getUploadProps<UploadEditorController>(),\n emits: getEditorEmits(),\n setup(props) {\n const ns = useNamespace('image-preview');\n\n const c = props.controller;\n\n return {\n ns,\n c,\n };\n },\n render() {\n return (\n <div\n class={[this.ns.b()]}\n onClick={(e: Event) => {\n // 阻止事件冒泡\n e.stopPropagation();\n }}\n >\n <el-image\n fit='contain'\n src={this.value}\n preview-src-list={[this.value]}\n ></el-image>\n </div>\n );\n },\n});\n","import {\n downloadFileFromBlob,\n RuntimeError,\n RuntimeModelError,\n} from '@ibiz-template/core';\nimport { convertNavData, EditorController } from '@ibiz-template/runtime';\nimport { IFileUploader } from '@ibiz/model-core';\nimport qs from 'qs';\n\n/**\n * 文件上传编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class UploadEditorController extends EditorController<IFileUploader> {\n /**\n * 是否支持拖拽\n */\n public isDrag: boolean = false;\n\n /**\n * 是否多选\n */\n public multiple: boolean = true;\n\n /**\n * 接受上传的文件类型\n */\n public accept: string = '';\n\n /**\n * 上传参数\n */\n public uploadParams?: IParams;\n\n /**\n * 下载参数\n */\n public exportParams?: IParams;\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n // 图片类型增加图片类型限制\n if (this.model.editorType?.includes('PICTURE')) {\n this.accept = 'image/*';\n }\n\n // 单项的编辑器类型的设置单选\n if (\n ['FILEUPLOADER_ONE', 'PICTURE_ONE', 'PICTURE_ONE_RAW'].includes(\n this.model.editorType!,\n )\n ) {\n this.multiple = false;\n }\n if (this.editorParams) {\n const { isDrag, multiple, accept, uploadParams, exportParams } =\n this.editorParams;\n if (isDrag) {\n this.isDrag = Boolean(isDrag);\n }\n if (multiple) {\n this.multiple = Boolean(multiple);\n }\n if (accept) {\n this.accept = accept;\n }\n if (uploadParams) {\n try {\n this.uploadParams = JSON.parse(uploadParams);\n } catch (error) {\n throw new RuntimeModelError(\n uploadParams,\n `配置uploadParams没有按标准JSON格式`,\n );\n }\n }\n if (exportParams) {\n try {\n this.exportParams = JSON.parse(exportParams);\n } catch (error) {\n throw new RuntimeModelError(\n exportParams,\n `配置exportParams没有按标准JSON格式`,\n );\n }\n }\n }\n }\n\n /**\n * 计算文件的上传路径和下载路径\n * 下载路径文件id用%fileId%占位,替换即可\n * 配置编辑器参数uploadParams和exportParams时,会像导航参数一样动态添加对应的参数到url上\n *\n * @author lxm\n * @date 2022-11-17 13:11:43\n * @param {IData} data\n * @returns {*} {{ uploadUrl: string; downloadUrl: string }}\n */\n calcBaseUrl(data: IData): { uploadUrl: string; downloadUrl: string } {\n let uploadUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.uploadFileUrl}`;\n let downloadUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.downloadFileUrl}/%fileId%`;\n let uploadParams: IParams = {};\n let exportParams: IParams = {};\n if (this.uploadParams) {\n uploadParams = convertNavData(\n this.uploadParams,\n data,\n this.params,\n this.context,\n );\n }\n if (this.exportParams) {\n exportParams = convertNavData(\n this.exportParams,\n data,\n this.params,\n this.context,\n );\n }\n uploadUrl += qs.stringify(uploadParams, { addQueryPrefix: true });\n downloadUrl += qs.stringify(exportParams, { addQueryPrefix: true });\n\n return { uploadUrl, downloadUrl };\n }\n\n /**\n * 请求url获取文件流,并用JS触发文件下载\n *\n * @author lxm\n * @date 2022-11-17 14:11:09\n * @param {string} url\n * @param {IData} file\n */\n fileDownload(file: { url: string; name: string }): void {\n // 发送get请求\n ibiz.net\n .request(file.url, {\n method: 'get',\n responseType: 'blob',\n baseURL: '', // 已经有baseURL了,这里无需再写\n })\n .then((response: IData) => {\n if (response.status !== 200) {\n throw new RuntimeError('下载文件失败');\n }\n // 请求成功,后台返回的是一个文件流\n if (!response.data) {\n throw new RuntimeError('文件流数据不存在');\n } else {\n // 获取文件名\n const fileName = file.name;\n downloadFileFromBlob(response.data, fileName);\n }\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IFileUploader } from '@ibiz/model-core';\nimport { UploadEditorController } from './upload-editor.controller';\n\n/**\n * 文件上传编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class FileUploaderEditorProvider\n * @implements {EditorProvider}\n */\nexport class FileUploaderEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizFileUpload';\n\n gridEditor: string = 'IBizFileUpload';\n\n constructor(editorType: string) {\n let componentName = 'IBizFileUpload';\n switch (editorType) {\n case 'PICTURE':\n case 'PICTURE_ONE':\n componentName = 'IBizImageUpload';\n break;\n case 'PICTURE_ONE_RAW':\n componentName = 'IBizImagePreview';\n break;\n default:\n }\n this.formEditor = componentName;\n this.gridEditor = componentName;\n }\n\n async createController(\n editorModel: IFileUploader,\n parentController: IEditorContainerController,\n ): Promise<UploadEditorController> {\n const c = new UploadEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { ref, watch, Ref, defineComponent, computed } from 'vue';\nimport {\n getDataPickerProps,\n getEditorEmits,\n renderString,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { isEmpty } from 'ramda';\nimport './ibiz-picker.scss';\nimport { PickerEditorController } from '../picker-editor.controller';\n\nexport const IBizPicker = defineComponent({\n name: 'IBizPicker',\n props: getDataPickerProps<PickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('picker');\n\n const c = props.controller!;\n\n // 当前值\n const curValue: Ref<Array<string> | string | null> = ref('');\n\n // 实体数据集\n const items: Ref<IData[]> = ref([]);\n\n // 是否显示所有数据\n const isShowAll = ref(true);\n\n // 自动选择Ref\n const pickerAutoCompleteRef = ref();\n\n watch(\n () => props.value,\n newVal => {\n if (newVal || newVal === null) {\n if (c.model.valueType === 'OBJECT') {\n curValue.value = newVal\n ? (newVal as IData)[c.objectNameField as string]\n : null;\n } else {\n curValue.value = newVal as string;\n }\n if (newVal === null) {\n curValue.value = '';\n }\n const value = props.data[c.valueItem];\n const index = items.value.findIndex((item: IData) =>\n Object.is(item[c.keyName], value),\n );\n if (index !== -1) {\n return;\n }\n // items里匹配不到当前值项值时,生成自身的选项\n items.value = [];\n if (!isEmpty(newVal) && !isEmpty(value)) {\n items.value.push({ [c.textName]: newVal, [c.keyName]: value });\n }\n }\n },\n { immediate: true },\n );\n\n // 处理选中数据后的处理逻辑\n const handleDataSelect = async (data: IData) => {\n // 处理回填数据\n const dataItems = await c.calcFillDataItems(data);\n if (dataItems.length) {\n dataItems.forEach(dataItem => {\n emit('change', dataItem.value, dataItem.id);\n });\n }\n\n // 处理值项和本身的值\n const item: IData = {};\n Object.assign(item, data);\n Object.assign(item, {\n [c.keyName]: item[c.keyName] ? item[c.keyName] : item.srfkey,\n [c.textName]: item[c.textName] ? item[c.textName] : item.srfmajortext,\n });\n if (c.valueItem) {\n emit('change', item[c.keyName], c.valueItem);\n }\n if (c.model.valueType === 'OBJECT') {\n emit('change', c.handleObjectParams(item));\n } else {\n emit('change', data[c.textName]);\n }\n };\n\n // 打开数据选择视图\n const openPickUpView = async (e: MouseEvent) => {\n e.stopPropagation();\n const res = await c.openPickUpView(props.data);\n if (res && res[0]) {\n await handleDataSelect(res[0]);\n }\n };\n\n // 打开数据链接视图\n const openLinkView = async (e: MouseEvent) => {\n e.stopPropagation();\n const res = await c.openLinkView(props.data);\n if (res && res[0]) {\n await handleDataSelect(res[0]);\n }\n };\n\n // 往外抛值\n const onACSelect = async (item: IData) => {\n await handleDataSelect(item);\n isShowAll.value = true;\n };\n\n // 搜索\n const onSearch = async (query: string, cb?: (_items: IData[]) => void) => {\n if (c.model.appDataEntityId) {\n let trimQuery = '';\n if (query !== props.value) {\n trimQuery = query.trim();\n }\n const res = await c.getServiceData(trimQuery, props.data);\n if (res) {\n items.value = res.data as IData[];\n if (cb && cb instanceof Function) {\n cb(items.value);\n }\n }\n }\n };\n\n // 清除\n const onClear = () => {\n // 清空回填数据\n const dataItems = c.dataItems;\n if (dataItems?.length) {\n dataItems.forEach(dataItem => {\n emit('change', null, dataItem.id);\n });\n }\n if (c.valueItem) {\n emit('change', null, c.valueItem);\n }\n emit('change', null);\n };\n\n const closeCircle = (c.linkView ? 1 : 0) + (c.pickupView ? 1 : 0);\n\n // 自动聚焦\n const editorRef = ref();\n if (props.autoFocus) {\n watch(editorRef, newVal => {\n if (newVal) {\n newVal.focus();\n }\n });\n }\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n // 处理点击键盘\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n const valueText = computed(() => {\n return renderString(curValue.value);\n });\n\n watch(\n valueText,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n return {\n ns,\n c,\n curValue,\n valueText,\n items,\n pickerAutoCompleteRef,\n openPickUpView,\n openLinkView,\n onACSelect,\n onSearch,\n editorRef,\n onClear,\n onFocus,\n onBlur,\n handleKeyUp,\n closeCircle,\n };\n },\n render() {\n if (this.readonly) {\n return (\n <div class={(this.ns.b(), this.ns.m('readonly'))}>{this.valueText}</div>\n );\n }\n return (\n <div class={[this.ns.b(), this.disabled ? this.ns.m('disabled') : '']}>\n {this.c.noAC ? (\n <el-input\n ref='editorRef'\n v-model={this.curValue}\n clearable\n placeholder={this.c.placeHolder}\n onClear={this.onClear}\n disabled={this.disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyup={this.handleKeyUp}\n >\n {{\n suffix: () => {\n if (this.$slots.append) {\n return this.$slots.append({});\n }\n if (this.c.noButton) {\n return;\n }\n return [\n this.c.model.pickupAppViewId ? (\n <ion-icon\n onClick={this.openPickUpView}\n name='search'\n ></ion-icon>\n ) : null,\n this.c.model.linkAppViewId ? (\n <ion-icon\n onClick={this.openLinkView}\n name='link-arrow'\n ></ion-icon>\n ) : null,\n ];\n },\n }}\n </el-input>\n ) : (\n <div\n class={[\n this.ns.e('autocomplete'),\n this.ns.m(this.closeCircle.toString()),\n ]}\n >\n <el-autocomplete\n ref='editorRef'\n v-model={this.curValue}\n value-key={this.c.textName}\n placeholder={this.c.placeHolder}\n clearable\n popper-class={this.ns.e('transfer')}\n fetch-suggestions={this.onSearch}\n onClear={this.onClear}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyup={this.handleKeyUp}\n disabled={this.disabled}\n >\n {{\n default: ({ item }: { item: IData }) => {\n if (this.$slots.append) {\n return this.$slots.append({});\n }\n return (\n <div\n class={this.ns.e('transfer-item')}\n onClick={() => {\n this.onACSelect(item);\n }}\n >\n {item[this.c.textName]}\n </div>\n );\n },\n suffix: () => {\n if (this.c.noButton) {\n return;\n }\n return [\n this.c.model.pickupAppViewId ? (\n <ion-icon\n onClick={this.openPickUpView}\n name='search'\n ></ion-icon>\n ) : null,\n this.c.model.linkAppViewId ? (\n <ion-icon\n onClick={this.openLinkView}\n name='link-arrow'\n ></ion-icon>\n ) : null,\n ];\n },\n }}\n </el-autocomplete>\n </div>\n )}\n </div>\n );\n },\n});\n","import { ref, watch, Ref, defineComponent, computed, onMounted } from 'vue';\nimport {\n getDataPickerProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-mpicker.scss';\nimport { clone } from 'lodash-es';\nimport { PickerEditorController } from '../picker-editor.controller';\n\nexport const IBizMPicker = defineComponent({\n name: 'IBizMPicker',\n props: getDataPickerProps<PickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('mpicker');\n\n const c = props.controller!;\n\n // 当前表单项绑定值key的集合\n const curValue: Ref<Array<string>> = ref([]);\n\n // 实体数据集\n const items: Ref<IData[]> = ref([]);\n\n // 选中项key-value键值对\n const selectItems: Ref<IData[]> = ref([]);\n\n // 下拉是否打开\n const open = ref(false);\n\n // 加载中\n const loading: Ref<boolean> = ref(false);\n\n // 监听传入值\n watch(\n () => props.value,\n newVal => {\n curValue.value = [];\n selectItems.value = [];\n if (newVal) {\n if (c.model.valueType === 'OBJECTS') {\n (newVal as Array<IData>).forEach((item: IData) => {\n const _item = clone(item);\n Object.assign(_item, {\n [c.keyName]: item[c.objectIdField as string],\n [c.textName]: item[c.objectNameField as string],\n });\n if (c.objectValueField) {\n Object.assign(_item, {\n ...item[c.objectValueField],\n });\n delete _item[c.objectValueField];\n }\n if (_item[c.keyName]) {\n selectItems.value.push(_item);\n }\n });\n } else if (c.objectIdField && c.model.valueSeparator) {\n const values = (newVal as string).split(c.model.valueSeparator);\n values.forEach((value: string) => {\n selectItems.value.push({\n [c.keyName]: value,\n });\n });\n } else {\n try {\n selectItems.value = JSON.parse(newVal as string);\n } catch (error) {\n ibiz.log.error(\n `SIMPLE类型地址栏值格式${newVal}不符合JSON字符串要求`,\n );\n }\n }\n selectItems.value.forEach((item: IData) => {\n curValue.value.push(item[c.keyName]);\n // 选项没有的时候补充选项\n const index = items.value.findIndex(i =>\n Object.is(i[c.keyName], item[c.keyName]),\n );\n if (index < 0) {\n items.value.push({\n [c.keyName]: item[c.keyName],\n [c.textName]: item[c.textName],\n });\n }\n });\n }\n },\n { immediate: true, deep: true },\n );\n\n // 处理视图关闭,往外抛值\n const handleOpenViewClose = (result: IData[]) => {\n // 抛出值集合\n const selects: IData[] = [];\n if (result && Array.isArray(result)) {\n result.forEach((select: IData) => {\n Object.assign(select, {\n [c.keyName]: select[c.keyName] ? select[c.keyName] : select.srfkey,\n [c.textName]: select[c.textName]\n ? select[c.textName]\n : select.srfmajortext,\n });\n if (c.model.valueType === 'OBJECTS') {\n selects.push(c.handleObjectParams(select));\n } else if (c.objectIdField) {\n selects.push(select[c.keyName]);\n } else {\n selects.push({\n [c.keyName]: select[c.keyName],\n [c.textName]: select[c.textName],\n });\n }\n const index = items.value.findIndex(item =>\n Object.is(item[c.keyName], select[c.keyName]),\n );\n if (index < 0) {\n items.value.push(select);\n }\n });\n }\n let value: string | Array<IData> | null = null;\n if (selects.length > 0) {\n if (c.model.valueType === 'OBJECTS') {\n value = selects;\n } else {\n value = c.objectIdField\n ? selects.join(c.model.valueSeparator)\n : JSON.stringify(selects);\n }\n }\n emit('change', value);\n };\n\n // 打开数据选择视图\n const openPickUpView = async () => {\n let selectedData;\n if (selectItems.value.length) {\n const _selectItems = JSON.parse(JSON.stringify(selectItems.value));\n _selectItems.forEach((item: IData, index: number) => {\n _selectItems[index].srfkey = item[c.keyName];\n _selectItems[index].srfmajortext = item[c.textName];\n });\n selectedData = JSON.stringify(_selectItems);\n }\n const res = await c.openPickUpView(props.data!, selectedData);\n if (res) {\n handleOpenViewClose(res);\n }\n };\n\n // 下拉选中回调\n const onSelect = (selects: string[]) => {\n const val: Array<IData> = [];\n let value: string | Array<IData> | null = null;\n if (selects.length > 0) {\n selects.forEach((select: string) => {\n let index = items.value.findIndex(item =>\n Object.is(item[c.keyName], select),\n );\n let item: IData = {};\n if (index >= 0) {\n item = items.value[index];\n } else {\n index = selectItems.value.findIndex((selectItem: IData) =>\n Object.is(selectItem[c.keyName], select),\n );\n if (index >= 0) {\n item = selectItems.value[index];\n }\n }\n if (c.model.valueType === 'OBJECTS') {\n val.push(c.handleObjectParams(item));\n } else if (c.objectIdField) {\n val.push(item[c.keyName]);\n } else {\n val.push({\n [c.keyName]: item[c.keyName],\n [c.textName]: item[c.textName],\n });\n }\n });\n if (val.length > 0) {\n if (c.model.valueType === 'OBJECTS') {\n value = val;\n } else {\n value = c.objectIdField\n ? val.join(c.model.valueSeparator)\n : JSON.stringify(val);\n }\n }\n emit('change', value);\n }\n };\n\n // 移除标签回调\n const onRemove = (tag: string) => {\n const index = selectItems.value.findIndex((item: IData) =>\n Object.is(item[c.keyName], tag),\n );\n if (index >= 0) {\n selectItems.value.splice(index, 1);\n const val: Array<IData> = [];\n let value: string | Array<IData> | null = null;\n selectItems.value.forEach((select: IData) => {\n if (c.model.valueType === 'OBJECTS') {\n val.push(c.handleObjectParams(select));\n } else if (c.objectIdField) {\n val.push(select[c.keyName]);\n } else {\n val.push({\n [c.keyName]: select[c.keyName],\n [c.textName]: select[c.textName],\n });\n }\n });\n if (val.length > 0) {\n if (c.model.valueType === 'OBJECTS') {\n value = val;\n } else {\n value = c.objectIdField\n ? val.join(c.model.valueSeparator)\n : JSON.stringify(val);\n }\n }\n emit('change', value);\n }\n };\n\n // 搜索\n const onSearch = async (query: string) => {\n if (c.model.appDataEntityId) {\n loading.value = true;\n try {\n const trimQuery = query.trim();\n const res = await c.getServiceData(trimQuery, props.data!);\n loading.value = false;\n if (res) {\n items.value = res.data as IData[];\n }\n } catch (error) {\n loading.value = false;\n }\n }\n };\n\n // 下拉打开\n const onOpenChange = (flag: boolean) => {\n open.value = flag;\n if (open.value) {\n items.value = [];\n onSearch('');\n }\n };\n\n // 信息展示,只显示名称。\n const valueText = computed(() => {\n return selectItems.value\n .map(item => {\n return item[c.textName];\n })\n .join(',');\n });\n\n watch(\n valueText,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n // 聚焦\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n // 失焦\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n // 处理点击键盘\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n onMounted(() => {\n if (c.objectNameField) {\n onSearch('');\n }\n });\n\n return {\n ns,\n c,\n curValue,\n loading,\n items,\n valueText,\n onSearch,\n onOpenChange,\n onSelect,\n onRemove,\n openPickUpView,\n onFocus,\n onBlur,\n handleKeyUp,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n ref='editorRef'\n >\n {this.readonly && this.valueText}\n {!this.readonly && (\n <el-select\n v-model={this.curValue}\n filterable\n remote\n multiple\n loading={this.loading}\n placeholder={this.c.placeHolder ? this.c.placeHolder : ' '}\n remote-method={this.onSearch}\n onVisibleChange={this.onOpenChange}\n onChange={this.onSelect}\n onRemoveTag={this.onRemove}\n disabled={this.disabled}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onKeyup={this.handleKeyUp}\n >\n {this.items.map(item => {\n return (\n <el-option\n key={item[this.c.keyName]}\n value={item[this.c.keyName]}\n label={item[this.c.textName]}\n ></el-option>\n );\n })}\n </el-select>\n )}\n {!this.readonly && (\n <div class={this.ns.e('buns-position')}>\n <div class={this.ns.e('btns')}>\n {this.c.model.pickupAppViewId ? (\n <ion-icon\n onClick={this.openPickUpView}\n name='search'\n ></ion-icon>\n ) : null}\n </div>\n </div>\n )}\n </div>\n );\n },\n});\n","import { ref, Ref, watch, defineComponent, computed } from 'vue';\nimport {\n getDataPickerProps,\n getEditorEmits,\n renderString,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { isNil } from 'ramda';\nimport './ibiz-picker-dropdown.scss';\nimport { PickerEditorController } from '../picker-editor.controller';\n\nexport const IBizPickerDropDown = defineComponent({\n name: 'IBizPickerDropDown',\n props: getDataPickerProps<PickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('picker-dropdown');\n\n const c = props.controller;\n\n // 当前值\n const curValue: Ref<string | null> = ref('');\n\n // 实体数据集\n const items: Ref<IData[]> = ref([]);\n\n // 是否能请求\n const shouldLoad = ref(false);\n\n // 获取关联数据项值\n const refValue = ref('');\n\n watch(\n () => props.value,\n newVal => {\n if (newVal || newVal === null) {\n if (c.model.valueType === 'OBJECT') {\n curValue.value = newVal\n ? (newVal as IData)[c.objectNameField as string]\n : null;\n } else {\n curValue.value = newVal as string;\n }\n if (newVal === null) {\n curValue.value = '';\n }\n refValue.value = curValue.value as string;\n const value = props.data[c.valueItem];\n const index = items.value.findIndex((item: IData) =>\n Object.is(item[c.keyName], value),\n );\n if (index !== -1) {\n return;\n }\n // items里匹配不到当前值项值时,生成自身的选项\n items.value = [];\n if (!isNil(newVal) && !isNil(value)) {\n items.value.push({ [c.textName]: newVal, [c.keyName]: value });\n }\n }\n },\n { immediate: true },\n );\n\n watch(\n () => props.data[c.valueItem],\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n refValue.value = newVal;\n // 如果值项被清空了,主文本也需清空\n if (newVal === null) {\n emit('change', null);\n }\n }\n },\n { immediate: true, deep: true },\n );\n\n // 加载中\n const loading: Ref<boolean> = ref(false);\n\n // 往外抛值\n const onACSelect = async (data: IData) => {\n // 处理回填数据\n const dataItems = await c.calcFillDataItems(data);\n if (dataItems.length) {\n dataItems.forEach(dataItem => {\n emit('change', dataItem.value, dataItem.id);\n });\n }\n\n // 处理值项和本身的值\n const item: IData = {};\n Object.assign(item, data);\n Object.assign(item, {\n [c.keyName]: item[c.keyName] ? item[c.keyName] : item.srfkey,\n [c.textName]: item[c.textName] ? item[c.textName] : item.srfmajortext,\n });\n if (c.valueItem) {\n emit('change', item[c.keyName], c.valueItem);\n }\n if (c.model.valueType === 'OBJECT') {\n emit('change', c.handleObjectParams(item));\n } else {\n emit('change', data[c.textName]);\n }\n };\n\n // 值变更\n const onSelect = (select: string | Array<string>) => {\n const index = items.value.findIndex(item =>\n Object.is(item[c.keyName], select),\n );\n if (index >= 0) {\n onACSelect(items.value[index]);\n }\n shouldLoad.value = false;\n };\n\n // 在搜索中时,再次触发搜索记录搜索值,等待上次搜索触发完成后再次搜索\n let waitQuery: string | null = null;\n\n // 搜索\n const onSearch = async (query: string) => {\n // 失焦那次不用发请求\n if (!shouldLoad.value) {\n return;\n }\n if (c.model.appDataEntityId && loading.value === false) {\n loading.value = true;\n try {\n let trimQuery = '';\n if (query !== props.value) {\n trimQuery = query.trim();\n }\n const res = await c.getServiceData(trimQuery, props.data!);\n if (res) {\n items.value = res.data as IData[];\n }\n } finally {\n loading.value = false;\n if (waitQuery != null) {\n const selfQuery = waitQuery;\n waitQuery = null;\n await onSearch(selfQuery);\n }\n }\n } else {\n waitQuery = query;\n }\n };\n\n // 下拉打开\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n items.value = [];\n onSearch('');\n }\n };\n\n // 清除\n const onClear = () => {\n // 清空回填数据\n const dataItems = c.dataItems;\n if (dataItems?.length) {\n dataItems.forEach(dataItem => {\n emit('change', null, dataItem.id);\n });\n }\n if (c.valueItem) {\n emit('change', null, c.valueItem);\n }\n emit('change', null);\n };\n\n // 聚焦\n const onFocus = (e: IData) => {\n shouldLoad.value = true;\n emit('focus', e);\n };\n\n // 失焦\n const onBlur = (e: IData) => {\n shouldLoad.value = false;\n emit('blur', e);\n };\n\n // 处理点击键盘\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n // 点击\n const onClick = () => {\n shouldLoad.value = true;\n };\n\n const valueText = computed(() => {\n return renderString(curValue.value);\n });\n\n watch(\n valueText,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n return {\n ns,\n c,\n refValue,\n curValue,\n valueText,\n loading,\n items,\n onOpenChange,\n onClear,\n onSelect,\n onSearch,\n onFocus,\n onBlur,\n onClick,\n handleKeyUp,\n };\n },\n render() {\n if (this.readonly) {\n return (\n <div class={(this.ns.b(), this.ns.m('readonly'))}>{this.valueText}</div>\n );\n }\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n {this.readonly ? (\n this.value\n ) : (\n <el-select\n v-model={this.refValue}\n filterable\n remote\n remote-show-suffix\n clearable\n loading={this.loading}\n placeholder={this.c.placeHolder ? this.c.placeHolder : ' '}\n remote-method={this.onSearch}\n onVisibleChange={this.onOpenChange}\n onChange={this.onSelect}\n onClear={this.onClear}\n disabled={this.disabled}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onKeyup={this.handleKeyUp}\n onClick={this.onClick}\n >\n {this.items.map(item => {\n return (\n <el-option\n value={item[this.c.keyName]}\n key={item[this.c.keyName]}\n label={item[this.c.textName]}\n ></el-option>\n );\n })}\n </el-select>\n )}\n </div>\n );\n },\n});\n","import { computed, defineComponent, ref, Ref, watch } from 'vue';\nimport {\n getDataPickerProps,\n getEditorEmits,\n renderString,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-picker-link.scss';\nimport { PickerEditorController } from '../picker-editor.controller';\n\nexport const IBizPickerLink = defineComponent({\n name: 'IBizPickerLink',\n props: getDataPickerProps<PickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('picker-link');\n\n const c = props.controller!;\n\n const curValue: Ref<string> = ref('');\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal && newVal !== oldVal) {\n if (c.model.valueType === 'OBJECT') {\n curValue.value = newVal\n ? (newVal as IData)[c.objectNameField as string]\n : '';\n } else {\n curValue.value = newVal as string;\n }\n }\n },\n { immediate: true },\n );\n\n // 处理视图关闭,往外抛值\n const handleOpenViewClose = (data: IData) => {\n // 处理值项和本身的值\n const item: IData = {};\n Object.assign(item, data);\n Object.assign(item, {\n [c.keyName]: item[c.keyName] ? item[c.keyName] : item.srfkey,\n [c.textName]: item[c.textName] ? item[c.textName] : item.srfmajortext,\n });\n if (c.valueItem) {\n emit('change', item[c.keyName], c.valueItem);\n }\n if (c.model.valueType === 'OBJECT') {\n emit('change', c.handleObjectParams(item));\n } else {\n emit('change', data[c.textName]);\n }\n };\n\n // 打开数据链接视图\n const openLinkView = async () => {\n const res = await c.openLinkView(props.data!);\n if (res) {\n handleOpenViewClose(res[0]);\n }\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n const valueText = computed(() => {\n return renderString(curValue.value);\n });\n\n watch(\n valueText,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n emit('infoTextChange', newVal);\n }\n },\n { immediate: true },\n );\n\n return { ns, openLinkView, curValue, editorRef };\n },\n render() {\n return (\n <div\n class={[this.ns.b(), this.readonly ? this.ns.m('readonly') : '']}\n ref='editorRef'\n >\n <a onClick={this.openLinkView}>{this.curValue}</a>\n </div>\n );\n },\n});\n","import {\n defineComponent,\n ref,\n resolveComponent,\n watch,\n h,\n computed,\n} from 'vue';\nimport {\n getDataPickerProps,\n getEditorEmits,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-picker-embed-view.scss';\nimport { clone } from 'ramda';\nimport { EventBase } from '@ibiz-template/runtime';\nimport { PickerEditorController } from '../picker-editor.controller';\n\nexport const IBizPickerEmbedView = defineComponent({\n name: 'IBizPickerEmbedView',\n props: getDataPickerProps<PickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('picker-embed-view');\n\n const c = props.controller!;\n\n // 视图上下文\n const context = ref(clone(c.context));\n\n // 视图参数\n const params = ref(clone(c.params));\n\n // 设置视图参数\n const setViewParam = () => {\n const { context: _context, params: _params } = c.handlePublicParams(\n props.data,\n c.context,\n c.params,\n );\n Object.assign(context.value, _context);\n Object.assign(params.value, _params);\n };\n setViewParam();\n\n // 监听表单数据,发生变化时重写计算视图参数\n watch(\n () => props.data,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n setViewParam();\n }\n },\n );\n\n // 视图数据改变\n const onViewDataChange = (event: IData[]) => {\n let tempValue: string = '';\n let temText: string = '';\n if (event && Array.isArray(event)) {\n event.forEach((select: IData) => {\n tempValue += `${select.srfkey},`;\n temText += `${select.srfmajortext},`;\n });\n tempValue = tempValue.substring(0, tempValue.length - 1);\n temText = temText.substring(0, temText.length - 1);\n if (c.valueItem) {\n emit('change', tempValue, c.valueItem);\n }\n emit('change', temText);\n }\n };\n\n // 绑定事件\n const onSelectionChange = (event: EventBase) => {\n onViewDataChange(event.data);\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n const pickupViewModel = computed(() => {\n return c.pickupView;\n });\n\n return {\n ns,\n c,\n context,\n params,\n onSelectionChange,\n editorRef,\n pickupViewModel,\n };\n },\n render() {\n const viewShell = resolveComponent('IBizViewShell');\n return (\n <div class={[this.ns.b()]} ref='editorRef'>\n {this.pickupViewModel\n ? [\n <div class={this.ns.b('view')}>\n {h(viewShell, {\n context: this.context,\n params: this.params,\n viewId: this.c.pickupView?.id,\n onSelectionChange: this.onSelectionChange,\n })}\n </div>,\n <div class={this.ns.b('value')}>\n {this.$props.value ? (\n (this.$props.value as string).split(',').map(item => {\n return <span>{item}; </span>;\n })\n ) : (\n <span>{this.c.placeHolder}</span>\n )}\n </div>,\n ]\n : null}\n </div>\n );\n },\n});\n","import {\n defineComponent,\n onMounted,\n ref,\n Ref,\n resolveComponent,\n watch,\n h,\n} from 'vue';\nimport {\n getDataPickerProps,\n getEditorEmits,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-picker-select-view.scss';\nimport { clone } from 'ramda';\nimport { IModalData, Modal, ViewMode } from '@ibiz-template/runtime';\nimport { PickerEditorController } from '../picker-editor.controller';\n\nexport const IBizPickerSelectView = defineComponent({\n name: 'IBizPickerSelectView',\n props: getDataPickerProps<PickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('picker-select-view');\n\n const c = props.controller!;\n\n const editorModel = c.model;\n\n // 是否单选\n const singleSelect = ref(true);\n if (editorModel.editorParams) {\n if (editorModel.editorParams.multiple) {\n singleSelect.value = !c.toBoolean(editorModel.editorParams.multiple);\n }\n }\n\n // 当前多选框选中值的key集合\n const keySet: Ref<string[]> = ref([]);\n\n // 所有操作过的下拉选项对象集合\n const items: Ref<IData[]> = ref([]);\n\n // 选中数据\n let selectedData = [];\n\n // 输入框值(搜索值)\n const queryValue: Ref<string> = ref('');\n\n // 下拉显示控制变量\n const visible = ref(false);\n\n // 选择视图宽度\n const pickViewWidth = ref('auto');\n\n // 视图上下文\n const context = ref(clone(c.context));\n\n // 视图参数\n const params = ref(clone(c.params));\n\n // 输入框change事件\n const onInputChange = () => {\n context.value = { query: queryValue.value, ...context.value };\n };\n\n // 改变显示事件\n const triggerMenu = (show?: boolean) => {\n if (props.disabled) {\n return;\n }\n if (!show) {\n visible.value = !visible.value;\n } else {\n visible.value = show;\n }\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n watch(\n () => props.value,\n newVal => {\n if (singleSelect.value) {\n if (c.model.valueType === 'OBJECT') {\n queryValue.value = newVal\n ? (newVal as IData)[c.objectNameField as string]\n : null;\n } else {\n queryValue.value = (newVal as string) || '';\n }\n if (!props.data || !c.valueItem || !props.data[c.valueItem]) {\n ibiz.log.error('值项异常');\n } else {\n selectedData = [\n { srfkey: props.data[c.valueItem], srfmajortext: props.value },\n ];\n params.value.selectedData = selectedData;\n }\n } else {\n keySet.value = [];\n const selectItems: IData[] = [];\n if (newVal) {\n if (!props.data || !c.valueItem || !props.data[c.valueItem]) {\n ibiz.log.error('值项异常');\n } else {\n const tempValue = props.data[c.valueItem].split(',');\n const tempText = (newVal as string).split(',');\n tempValue.forEach((srfkey: string, index: number) => {\n selectItems.push({\n srfmajortext: tempText[index],\n srfkey,\n });\n });\n items.value = [];\n selectItems.forEach((item: IData) => {\n keySet.value.push(item.srfkey);\n const index = items.value.findIndex(i =>\n Object.is(i.srfkey, item.srfkey),\n );\n if (index < 0) {\n items.value.push({\n srfmajortext: item.srfmajortext,\n srfkey: item.srfkey,\n });\n }\n });\n }\n }\n selectedData = selectItems;\n params.value.selectedData = selectedData;\n }\n },\n {\n immediate: false,\n deep: true,\n },\n );\n\n onMounted(() => {\n if (editorRef.value) {\n pickViewWidth.value = `${editorRef.value.offsetWidth}px`;\n }\n });\n\n // 清除\n const onClear = () => {\n // 清空回填数据\n const dataItems = c.dataItems;\n if (dataItems?.length) {\n dataItems.forEach(dataItem => {\n emit('change', null, dataItem.id);\n });\n }\n if (c.valueItem) {\n emit('change', null, c.valueItem);\n }\n emit('change', null);\n };\n\n // 视图数据改变\n const onViewDataChange = (event: IData[]) => {\n if (event.length === 0) {\n onClear();\n return;\n }\n if (singleSelect.value) {\n visible.value = false;\n if (c.valueItem) {\n const tempValue = event[0][c.keyName]\n ? event[0][c.keyName]\n : event[0].srfkey;\n emit('change', tempValue, c.valueItem);\n }\n const tempText = event[0][c.textName]\n ? event[0][c.textName]\n : event[0].srfmajortext;\n if (c.model.valueType === 'OBJECT') {\n emit('change', c.handleObjectParams(event[0]));\n } else {\n emit('change', tempText);\n }\n } else {\n let tempValue: string = '';\n let tempText: string = '';\n if (event && Array.isArray(event)) {\n items.value = [];\n event.forEach((select: IData) => {\n const srfkey = select[c.keyName]\n ? select[c.keyName]\n : select.srfkey;\n tempValue += `${srfkey},`;\n const srfmajortext = select[c.textName]\n ? select[c.textName]\n : select.srfmajortext;\n tempText += `${srfmajortext},`;\n const index = items.value.findIndex(item =>\n Object.is(item.srfkey, srfkey),\n );\n if (index < 0) {\n items.value.push({ srfmajortext, srfkey });\n }\n });\n }\n tempValue = tempValue.substring(0, tempValue.length - 1);\n tempText = tempText.substring(0, tempText.length - 1);\n if (c.valueItem) {\n emit('change', tempValue, c.valueItem);\n }\n emit('change', tempText);\n }\n };\n\n // 打开数据链接视图\n const openLinkView = async (e: MouseEvent) => {\n e.stopPropagation();\n const res = await c.openLinkView(props.data);\n if (res) {\n onViewDataChange(res);\n }\n };\n\n // 下拉选中回调\n const onSelectChange = (selects: string[]) => {\n const val: IData[] = [];\n if (selects.length > 0) {\n selects.forEach((select: string) => {\n const index = items.value.findIndex(item =>\n Object.is(item.srfkey, select),\n );\n if (index >= 0) {\n val.push(items.value[index]);\n }\n });\n }\n let tempValue: string = '';\n let tempText: string = '';\n val.forEach((select: IData) => {\n const srfkey = select[c.keyName] ? select[c.keyName] : select.srfkey;\n tempValue += `${srfkey},`;\n const srfmajortext = select[c.textName]\n ? select[c.textName]\n : select.srfmajortext;\n tempText += `${srfmajortext},`;\n });\n tempValue = tempValue.substring(0, tempValue.length - 1);\n tempText = tempText.substring(0, tempText.length - 1);\n // 处理值项和本身的值\n if (c.valueItem) {\n emit('change', tempValue, c.valueItem);\n }\n emit('change', tempText);\n };\n\n // 远程搜索\n const remoteMethod = (e: string) => {\n queryValue.value = e;\n };\n\n // 绑定事件\n const onSelectionChange = (event: IModalData) => {\n if (event.data) {\n onViewDataChange(event.data);\n }\n };\n\n const modal = new Modal({\n mode: ViewMode.DRAWER,\n viewUsage: 2,\n dismiss: (_data: IModalData) => {\n onSelectionChange(_data);\n },\n });\n\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n // 处理点击键盘\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n return {\n ns,\n c,\n singleSelect,\n keySet,\n items,\n queryValue,\n visible,\n pickViewWidth,\n context,\n params,\n editorRef,\n onInputChange,\n triggerMenu,\n onViewDataChange,\n onClear,\n openLinkView,\n onSelectChange,\n remoteMethod,\n onSelectionChange,\n modal,\n onFocus,\n onBlur,\n handleKeyUp,\n };\n },\n render() {\n return (\n <div class={[this.ns.b()]} ref='editorRef'>\n <el-dropdown trigger='click' popper-class={this.ns.b('popper')}>\n {{\n default: () => {\n return this.singleSelect ? (\n <el-input\n v-model={this.queryValue}\n class={this.ns.b('input')}\n placeholder={this.c.placeHolder}\n disabled={this.disabled}\n readonly={this.readonly}\n onChange={this.onInputChange}\n onFocus={(e: IData) => {\n this.triggerMenu(true);\n this.onFocus(e);\n }}\n onBlur={this.onBlur}\n onKeyup={this.handleKeyUp}\n >\n {{\n suffix: () => {\n return [\n this.queryValue && !this.disabled && !this.readonly && (\n <ion-icon\n onClick={this.onClear}\n name='clear'\n ></ion-icon>\n ),\n this.c.model.linkAppViewId && (\n <ion-icon\n onClick={this.openLinkView}\n name='link-arrow'\n ></ion-icon>\n ),\n ];\n },\n }}\n </el-input>\n ) : (\n <el-select\n popper-class='select'\n model-value={this.keySet}\n placeholder={this.c.placeHolder ? this.c.placeHolder : ' '}\n multiple\n filterable\n remote\n remote-method={this.remoteMethod}\n onChange={this.onSelectChange}\n onFocus={(e: IData) => {\n this.triggerMenu(true);\n this.onFocus(e);\n }}\n onBlur={this.onBlur}\n onKeyup={this.handleKeyUp}\n disabled={this.disabled || this.readonly}\n >\n {this.items.map((item: IData, index: number) => {\n return (\n <el-option\n key={item.srfkey + index}\n label={item.srfmajortext}\n value={item.srfkey}\n ></el-option>\n );\n })}\n </el-select>\n );\n },\n dropdown: () => {\n const viewShell = resolveComponent('IBizViewShell');\n return (\n <el-dropdown-menu>\n {this.c.pickupView &&\n h(viewShell, {\n context: this.context,\n params: this.params,\n viewId: this.c.pickupView.id,\n style: { height: '100%', width: this.pickViewWidth },\n onSelectionChange: this.onSelectionChange,\n modal: this.modal,\n })}\n </el-dropdown-menu>\n );\n },\n }}\n </el-dropdown>\n </div>\n );\n },\n});\n","import { IHttpResponse, RuntimeModelError } from '@ibiz-template/core';\nimport {\n EditorController,\n OpenAppViewCommand,\n getDeACMode,\n IViewConfig,\n IModalData,\n} from '@ibiz-template/runtime';\nimport { IAppDEACMode, IDEACModeDataItem, IPicker } from '@ibiz/model-core';\nimport { clone, mergeDeepLeft } from 'ramda';\n\n/**\n * 数据选择编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class PickerEditorController extends EditorController<IPicker> {\n /**\n * 是否多选\n */\n public multiple = false;\n\n /**\n *选择视图相关参数\n */\n public pickupView: IViewConfig | null = null;\n\n /**\n *链接视图相关参数\n */\n public linkView: IViewConfig | null = null;\n\n /**\n *值项\n */\n public valueItem = '';\n\n /**\n * 主键属性名称\n */\n public keyName: string = 'srfkey';\n\n /**\n * 主文本属性名称\n */\n public textName: string = 'srfmajortext';\n\n /**\n * 数据集codeName\n */\n public interfaceName: string = '';\n\n /**\n * 自填模式sort排序\n */\n public sort: string | undefined = '';\n\n /**\n * 不支持AC(根据编辑器类型得)\n */\n public noAC: boolean = false;\n\n /**\n * 不支持按钮(根据编辑器类型得)\n */\n public noButton: boolean = false;\n\n /**\n * 实体自填模式模型\n */\n public deACMode: IAppDEACMode | undefined = undefined;\n\n /**\n * 自填数据项集合(已排除了value和text)\n */\n public dataItems: IDEACModeDataItem[] = [];\n\n // 对象标识属性\n public objectIdField: string | undefined = '';\n\n // 对象名称属性\n public objectNameField: string | undefined = '';\n\n // 对象值属性\n public objectValueField: string | undefined = '';\n\n protected async onInit(): Promise<void> {\n super.onInit();\n this.initParams();\n this.valueItem = this.model.valueItemName?.toLowerCase() || '';\n if (this.model.appDataEntityId) {\n if (this.model.appDEDataSetId) {\n this.interfaceName = this.model.appDEDataSetId;\n }\n if (this.model.appDEACModeId) {\n this.deACMode = await getDeACMode(\n this.model.appDEACModeId,\n this.model.appDataEntityId,\n this.context.srfappid,\n );\n if (this.deACMode) {\n // 自填模式相关\n const { minorSortAppDEFieldId, minorSortDir } = this.deACMode;\n if (minorSortAppDEFieldId && minorSortDir) {\n this.sort = `${minorSortAppDEFieldId.toLowerCase()},${minorSortDir.toLowerCase()}`;\n }\n if (this.deACMode.textAppDEFieldId) {\n this.textName = this.deACMode.textAppDEFieldId;\n }\n if (this.deACMode.valueAppDEFieldId) {\n this.keyName = this.deACMode.valueAppDEFieldId;\n }\n if (this.deACMode.deacmodeDataItems) {\n this.dataItems = [];\n this.deACMode.deacmodeDataItems.forEach(\n (dataItem: IDEACModeDataItem) => {\n if (dataItem.id !== 'value' && dataItem.id !== 'text') {\n this.dataItems.push(dataItem);\n }\n },\n );\n }\n }\n }\n }\n // 这三种嵌入选择视图的需要预先加载视图模型用于绘制\n const embedViewEditors = [\n 'PICKEREX_DROPDOWNVIEW',\n 'PICKEREX_DROPDOWNVIEW_LINK',\n 'PICKUPVIEW',\n ];\n if (\n this.model.editorType &&\n embedViewEditors.includes(this.model.editorType)\n ) {\n this.initPickupViewParams();\n }\n this.objectIdField = this.model.objectIdField?.toLowerCase();\n this.objectNameField = this.model.objectNameField?.toLowerCase();\n this.objectValueField = this.model.objectValueField?.toLowerCase();\n }\n\n /**\n * 初始化noAc和noButton\n */\n public initParams(): void {\n switch (this.model.editorType) {\n case 'PICKEREX_NOAC':\n case 'PICKEREX_NOAC_LINK':\n this.noAC = true;\n break;\n case 'PICKEREX_NOBUTTON':\n this.noButton = true;\n break;\n default:\n this.noButton = false;\n this.noAC = false;\n }\n }\n\n /**\n * 初始化选择视图相关参数\n */\n public async initPickupViewParams(): Promise<void> {\n if (this.model.pickupAppViewId) {\n this.pickupView = await ibiz.hub.config.view.get(\n this.model.pickupAppViewId,\n );\n }\n }\n\n /**\n * 初始化链接视图相关参数\n */\n public async initLinkViewParams(): Promise<void> {\n if (this.model.linkAppViewId) {\n this.linkView = await ibiz.hub.config.view.get(this.model.linkAppViewId);\n }\n }\n\n /**\n * 加载实体数据集数据\n *\n * @param {string} query 模糊匹配字符串\n * @param {IData} data 表单数据\n * @returns {*} {Promise<IHttpResponse<IData[]>>}\n * @memberof PickerEditorController\n */\n public async getServiceData(\n query: string,\n data: IData,\n ): Promise<IHttpResponse<IData[]>> {\n const { context, params } = this.handlePublicParams(\n data,\n this.context,\n this.params,\n );\n // 固定参数\n const fixedParams = {};\n if (this.sort && !Object.is(this.sort, '')) {\n Object.assign(fixedParams, { sort: this.sort });\n }\n if (query) {\n Object.assign(fixedParams, { query });\n }\n Object.assign(fixedParams, { size: 1000 });\n // 合并计算出来的参数和固定参数,以计算参数为准\n const tempParams = mergeDeepLeft(params, fixedParams);\n if (this.interfaceName) {\n const app = ibiz.hub.getApp(this.context.srfappid);\n const res = await app.deService.exec(\n this.model.appDataEntityId!,\n this.interfaceName,\n context,\n tempParams,\n );\n return res as IHttpResponse<IData[]>;\n }\n throw new RuntimeModelError(this.model, '请配置实体和实体数据集');\n }\n\n /**\n * 打开数据选择视图\n *\n * @param {IData} data 数据对象\n * @param {IData[]} selectedData 选中项集合\n * @returns {*} {(Promise<IData[] | undefined>)}\n * @memberof PickerEditorController\n */\n public async openPickUpView(\n data: IData,\n selectedData?: string,\n ): Promise<IData[] | undefined> {\n await this.initPickupViewParams();\n const { context, params } = this.handlePublicParams(\n data,\n this.context,\n this.params,\n );\n if (selectedData) {\n params.selectedData = selectedData;\n }\n if (!this.pickupView) {\n throw new RuntimeModelError(this.model, '请配置数据选择视图');\n }\n // 模态打开视图\n const res = await ibiz.commands.execute<IModalData>(\n OpenAppViewCommand.TAG,\n this.pickupView.id,\n context,\n params,\n { openMode: 'POPUPMODAL' },\n );\n if (res && res.ok && res.data) {\n return res.data;\n }\n ibiz.log.debug('模态取消或关闭异常', res);\n }\n\n /**\n * 打开数据链接视图\n */\n public async openLinkView(data: IData): Promise<IData[] | undefined> {\n const tempContext = this.context.clone();\n if (data[this.valueItem]) {\n tempContext.srfkey = data[this.valueItem];\n }\n const { context, params } = this.handlePublicParams(\n data,\n tempContext,\n this.params,\n );\n\n const { linkAppViewId } = this.model;\n if (!linkAppViewId) {\n throw new RuntimeModelError(this.model, '请配置数据链接视图');\n }\n return ibiz.commands.execute(\n OpenAppViewCommand.TAG,\n linkAppViewId,\n context,\n params,\n );\n }\n\n /**\n * 计算回填数据\n *\n * @author lxm\n * @date 2022-10-24 16:10:24\n * @param {IData} data 选中数据\n * @returns {*} {Promise<Array<{ id: string; value: any }>>}\n */\n async calcFillDataItems(\n data: IData,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Array<{ id: string; value: any }>> {\n if (this.deACMode) {\n if (this.dataItems.length === 0) {\n return [];\n }\n const result = await Promise.all(\n this.dataItems.map(item => {\n const value = data[item.appDEFieldId!];\n if (item.format) {\n // todo 值格式化\n } else if (item.convertToCodeItemText && item.codeListId) {\n // todo 代码表转换为文本值\n } else if (item.customCode) {\n // todo 脚本代码\n }\n return { id: item.id!, value };\n }),\n );\n return result;\n }\n return [];\n }\n\n /**\n * 处理对象数据类型抛值\n * @param {IData} select\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-08-22 15:58:56\n */\n handleObjectParams(select: IData): IData {\n const object: IData = {};\n if (this.objectIdField) {\n Object.assign(object, {\n [this.objectIdField]: select[this.keyName],\n });\n }\n if (this.objectNameField) {\n Object.assign(object, {\n [this.objectNameField]: select[this.textName],\n });\n }\n if (this.objectValueField) {\n Object.assign(object, {\n [this.objectValueField]: clone(select),\n });\n }\n return object;\n }\n}\n","import {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IPicker } from '@ibiz/model-core';\nimport { PickerEditorController } from './picker-editor.controller';\n\n/**\n * 数据选择器编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class DataPickerEditorProvider\n * @implements {EditorProvider}\n */\nexport class DataPickerEditorProvider implements IEditorProvider {\n formEditor: string;\n\n gridEditor: string;\n\n constructor(editorType: string) {\n let componentName = 'IBizPicker';\n switch (editorType) {\n case 'PICKEREX_TRIGGER':\n componentName = 'IBizPickerDropDown';\n break;\n case 'PICKEREX_LINK':\n case 'PICKEREX_LINKONLY':\n componentName = 'IBizPickerLink';\n break;\n case 'ADDRESSPICKUP':\n case 'ADDRESSPICKUP_AC':\n componentName = 'IBizMPicker';\n break;\n case 'PICKEREX_DROPDOWNVIEW':\n case 'PICKEREX_DROPDOWNVIEW_LINK':\n componentName = 'IBizPickerSelectView';\n break;\n case 'PICKUPVIEW':\n componentName = 'IBizPickerEmbedView';\n break;\n default:\n }\n this.formEditor = componentName;\n this.gridEditor = componentName;\n }\n\n async createController(\n editorModel: IPicker,\n parentController: IEditorContainerController,\n ): Promise<PickerEditorController> {\n const c = new PickerEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, Ref, ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getNumberRangeProps,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-number-range-picker.scss';\nimport { toNumber } from 'lodash-es';\nimport { NumberRangeEditorController } from '../number-range-editor.controller';\n\nexport const IBizNumberRangePicker = defineComponent({\n name: 'IBizNumberRangePicker',\n props: getNumberRangeProps<NumberRangeEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('number-range-picker');\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n // 最大值\n let max = Infinity;\n // 最小值\n let min = -Infinity;\n // 数值精度\n let precision = 0;\n // 值分割符\n let valueSeparator = '-';\n // 开始占位提示\n const startPlaceHolder = editorModel.placeHolder\n ? editorModel.placeHolder.split(';')[0] || ''\n : '';\n // 结束占位提示\n const endPlaceHolder = editorModel.placeHolder\n ? editorModel.placeHolder.split(';')[1] || ''\n : '';\n // 选择范围时的分隔符\n let rangeSeparator = '~';\n if (editorModel.editorParams) {\n if (editorModel.editorParams.maxvalue) {\n max = toNumber(editorModel.editorParams.maxvalue);\n }\n if (editorModel.editorParams.minvalue) {\n min = toNumber(editorModel.editorParams.minvalue);\n }\n if (editorModel.editorParams.precision) {\n precision = toNumber(editorModel.editorParams.precision);\n }\n if (editorModel.editorParams.valueSeparator) {\n valueSeparator = editorModel.editorParams.valueSeparator;\n }\n if (editorModel.editorParams.rangeSeparator) {\n rangeSeparator = editorModel.editorParams.rangeSeparator;\n }\n }\n\n // 关系表单项集合\n const refFormItem: Ref<string[]> = ref([]);\n const editorItems = editorModel.editorItems;\n if (editorItems && editorItems.length > 0) {\n const editorItemNames: string[] = editorItems.map(\n (item: IData) => item.id,\n );\n refFormItem.value = editorItemNames;\n }\n\n // 范围最小值\n const minValue = ref<number | null>(null);\n\n // 范围最大值\n const maxValue = ref<number | null>(null);\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal && typeof newVal === 'string') {\n minValue.value = newVal.split(valueSeparator)[0]\n ? Number(newVal.split(valueSeparator)[0])\n : null;\n maxValue.value = newVal.split(valueSeparator)[1]\n ? Number(newVal.split(valueSeparator)[1])\n : null;\n }\n },\n { immediate: true },\n );\n\n // 处理值变化\n const handleChange = (value: number, index: number) => {\n if (index === 0) {\n minValue.value = value;\n } else if (index === 1) {\n maxValue.value = value;\n }\n if (minValue.value !== null && maxValue.value !== null) {\n emit('change', [minValue.value, maxValue.value].join(valueSeparator));\n }\n if (refFormItem.value) {\n const valueName = refFormItem.value[index];\n emit('change', value, valueName);\n }\n };\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n // 处理点击键盘\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n return {\n ns,\n c,\n refFormItem,\n minValue,\n maxValue,\n handleChange,\n max,\n min,\n precision,\n valueSeparator,\n startPlaceHolder,\n endPlaceHolder,\n rangeSeparator,\n editorRef,\n handleKeyUp,\n };\n },\n render() {\n return (\n <div class={[this.ns.b()]} ref='editorRef'>\n <el-input-number\n min={this.min}\n modelValue={this.minValue}\n disabled={this.disabled}\n readonly={this.readonly}\n precision={this.controller.model.precision}\n placeholder={this.startPlaceHolder}\n controls={false}\n onChange={(val: number) => this.handleChange(val, 0)}\n onKeyup={this.handleKeyUp}\n ></el-input-number>\n <div class={this.ns.b('separator')}>{this.rangeSeparator}</div>\n <el-input-number\n min={\n typeof this.minValue === 'number' ? this.minValue + 1 : -Infinity\n }\n max={this.max}\n modelValue={this.maxValue}\n disabled={this.disabled}\n readonly={this.readonly}\n precision={this.controller.model.precision}\n placeholder={this.endPlaceHolder}\n controls={false}\n onChange={(val: number) => this.handleChange(val, 1)}\n onKeyup={this.handleKeyUp}\n ></el-input-number>\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { INumberRange } from '@ibiz/model-core';\n\n/**\n * 数值范围编辑器控制器\n *\n * @export\n * @class NumberRangeEditorController\n * @extends {EditorController}\n */\nexport class NumberRangeEditorController extends EditorController<INumberRange> {}\n","import {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { INumberRange } from '@ibiz/model-core';\nimport { NumberRangeEditorController } from './number-range-editor.controller';\n\n/**\n * 数值范围编辑器适配器\n *\n * @export\n * @class NumberRangeEditorProvider\n * @implements {EditorProvider}\n */\nexport class NumberRangeEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizNumberRangePicker';\n\n gridEditor: string = 'IBizNumberRangePicker';\n\n async createController(\n editorModel: INumberRange,\n parentController: IEditorContainerController,\n ): Promise<NumberRangeEditorController> {\n const c = new NumberRangeEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent, Ref, ref } from 'vue';\nimport {\n getEditorEmits,\n getDateRangeProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-date-range-picker.scss';\nimport { DateRangeEditorController } from '../date-range-editor.controller';\n\nexport const IBizDateRangePicker = defineComponent({\n name: 'IBizDateRangePicker',\n props: getDateRangeProps<DateRangeEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('date-range-picker');\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n // 值分割符\n let valueSeparator = ',';\n // 在范围选择器里取消两个日期面板之间的联动\n let unlinkPanels = false;\n // 开始占位提示\n const startPlaceHolder = editorModel.placeHolder\n ? editorModel.placeHolder.split(';')[0] || ''\n : '';\n // 结束占位提示\n const endPlaceHolder = editorModel.placeHolder\n ? editorModel.placeHolder.split(';')[1] || ''\n : '';\n // 选择范围时的分隔符\n let rangeSeparator = '至';\n if (editorModel.editorParams) {\n if (editorModel.editorParams.valueSeparator) {\n valueSeparator = editorModel.editorParams.valueSeparator;\n }\n if (editorModel.editorParams.rangeSeparator) {\n rangeSeparator = editorModel.editorParams.rangeSeparator;\n }\n if (editorModel.editorParams.unlinkPanels) {\n unlinkPanels = c.toBoolean(editorModel.editorParams.unlinkPanels);\n }\n }\n\n // 类型\n const type = ref('daterange');\n switch (editorModel.editorType) {\n case 'DATERANGE':\n type.value = 'datetimerange';\n break;\n case 'DATERANGE_NOTIME':\n type.value = 'daterange';\n break;\n default:\n type.value = 'datetimerange';\n }\n\n // 格式\n const format = ref('YYYY-MM-DD');\n // 值格式化\n const valueFormat = c!.valueFormat;\n if (valueFormat) {\n format.value = valueFormat;\n }\n\n // 关系表单项集合\n const refFormItem: Ref<string[]> = ref([]);\n const editorItems = editorModel.editorItems;\n if (editorItems && editorItems.length > 0) {\n const editorItemNames: string[] = editorItems.map(\n (item: IData) => item.id,\n );\n refFormItem.value = editorItemNames;\n }\n\n // 当前值\n const curValue = computed({\n get() {\n let value: string[] = [];\n if (refFormItem.value.length > 0) {\n refFormItem.value.forEach((name: string) => {\n if (props.data[name]) {\n value.push(props.data[name]);\n }\n });\n } else if (props.value && typeof props.value === 'string') {\n value = props.value.split(valueSeparator);\n }\n return value;\n },\n set(dates: string[]) {\n if (dates && dates.length > 0) {\n emit('change', dates.join(valueSeparator));\n if (refFormItem.value.length > 0) {\n dates.forEach((date: string, index: number) => {\n emit('change', date, refFormItem.value[index]);\n });\n }\n } else {\n emit('change', null);\n if (refFormItem.value.length > 0) {\n refFormItem.value.forEach((date: string, index: number) => {\n emit('change', null, refFormItem.value[index]);\n });\n }\n }\n },\n });\n\n // 聚焦\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n // 失焦\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n return {\n ns,\n c,\n refFormItem,\n curValue,\n type,\n format,\n valueSeparator,\n startPlaceHolder,\n endPlaceHolder,\n rangeSeparator,\n unlinkPanels,\n onFocus,\n onBlur,\n };\n },\n render() {\n return (\n <div class={[this.ns.b()]}>\n <el-date-picker\n v-model={this.curValue}\n type={this.type}\n popper-class={this.ns.b('popper')}\n format={this.format}\n value-format={this.format}\n disabled={this.disabled}\n readonly={this.readonly}\n range-separator={this.rangeSeparator}\n start-placeholder={this.startPlaceHolder}\n end-placeholder={this.endPlaceHolder}\n unlink-panels={this.unlinkPanels}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n ></el-date-picker>\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { IDateRange } from '@ibiz/model-core';\n\n/**\n * 时间范围编辑器控制器\n *\n * @export\n * @class DateRangeEditorController\n * @extends {EditorController}\n */\nexport class DateRangeEditorController extends EditorController<IDateRange> {\n /**\n * 根据编辑器类型获取格式化\n *\n * @author lxm\n * @date 2022-11-03 16:11:21\n * @public\n * @returns {*} {string}\n */\n public getFormatByType(): string {\n switch (this.model.editorType) {\n // 时间范围选择器\n case 'DATERANGE':\n return 'YYYY-MM-DD HH:mm:ss';\n // 时间范围选择器(YYYY-MM-DD)\n case 'DATERANGE_NOTIME':\n return 'YYYY-MM-DD';\n default:\n return 'YYYY-MM-DD HH:mm:ss';\n }\n }\n\n /**\n * 值格式化\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 14:33:14\n */\n public valueFormat: string | undefined;\n\n protected async onInit(): Promise<void> {\n super.onInit();\n this.valueFormat = this.getFormatByType();\n }\n}\n","import {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IDateRange } from '@ibiz/model-core';\nimport { DateRangeEditorController } from './date-range-editor.controller';\n\n/**\n * 数值范围编辑器适配器\n *\n * @export\n * @class DateRangeEditorProvider\n * @implements {EditorProvider}\n */\nexport class DateRangeEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizDateRangePicker';\n\n gridEditor: string = 'IBizDateRangePicker';\n\n async createController(\n editorModel: IDateRange,\n parentController: IEditorContainerController,\n ): Promise<DateRangeEditorController> {\n const c = new DateRangeEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nexport { _arrayLikeToArray as arrayLikeToArray, _arrayWithHoles as arrayWithHoles, _defineProperty as defineProperty, _iterableToArrayLimit as iterableToArrayLimit, _nonIterableRest as nonIterableRest, _objectSpread2 as objectSpread2, _objectWithoutProperties as objectWithoutProperties, _objectWithoutPropertiesLoose as objectWithoutPropertiesLoose, _slicedToArray as slicedToArray, _unsupportedIterableToArray as unsupportedIterableToArray };\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction compose() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (x) {\n return fns.reduceRight(function (y, f) {\n return f(y);\n }, x);\n };\n}\n\nfunction curry(fn) {\n return function curried() {\n var _this = this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return args.length >= fn.length ? fn.apply(this, args) : function () {\n for (var _len3 = arguments.length, nextArgs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n nextArgs[_key3] = arguments[_key3];\n }\n\n return curried.apply(_this, [].concat(args, nextArgs));\n };\n };\n}\n\nfunction isObject(value) {\n return {}.toString.call(value).includes('Object');\n}\n\nfunction isEmpty(obj) {\n return !Object.keys(obj).length;\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nfunction hasOwnProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nfunction validateChanges(initial, changes) {\n if (!isObject(changes)) errorHandler('changeType');\n if (Object.keys(changes).some(function (field) {\n return !hasOwnProperty(initial, field);\n })) errorHandler('changeField');\n return changes;\n}\n\nfunction validateSelector(selector) {\n if (!isFunction(selector)) errorHandler('selectorType');\n}\n\nfunction validateHandler(handler) {\n if (!(isFunction(handler) || isObject(handler))) errorHandler('handlerType');\n if (isObject(handler) && Object.values(handler).some(function (_handler) {\n return !isFunction(_handler);\n })) errorHandler('handlersType');\n}\n\nfunction validateInitial(initial) {\n if (!initial) errorHandler('initialIsRequired');\n if (!isObject(initial)) errorHandler('initialType');\n if (isEmpty(initial)) errorHandler('initialContent');\n}\n\nfunction throwError(errorMessages, type) {\n throw new Error(errorMessages[type] || errorMessages[\"default\"]);\n}\n\nvar errorMessages = {\n initialIsRequired: 'initial state is required',\n initialType: 'initial state should be an object',\n initialContent: 'initial state shouldn\\'t be an empty object',\n handlerType: 'handler should be an object or a function',\n handlersType: 'all handlers should be a functions',\n selectorType: 'selector should be a function',\n changeType: 'provided value of changes should be an object',\n changeField: 'it seams you want to change a field in the state which is not specified in the \"initial\" state',\n \"default\": 'an unknown error accured in `state-local` package'\n};\nvar errorHandler = curry(throwError)(errorMessages);\nvar validators = {\n changes: validateChanges,\n selector: validateSelector,\n handler: validateHandler,\n initial: validateInitial\n};\n\nfunction create(initial) {\n var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n validators.initial(initial);\n validators.handler(handler);\n var state = {\n current: initial\n };\n var didUpdate = curry(didStateUpdate)(state, handler);\n var update = curry(updateState)(state);\n var validate = curry(validators.changes)(initial);\n var getChanges = curry(extractChanges)(state);\n\n function getState() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function (state) {\n return state;\n };\n validators.selector(selector);\n return selector(state.current);\n }\n\n function setState(causedChanges) {\n compose(didUpdate, update, validate, getChanges)(causedChanges);\n }\n\n return [getState, setState];\n}\n\nfunction extractChanges(state, causedChanges) {\n return isFunction(causedChanges) ? causedChanges(state.current) : causedChanges;\n}\n\nfunction updateState(state, changes) {\n state.current = _objectSpread2(_objectSpread2({}, state.current), changes);\n return changes;\n}\n\nfunction didStateUpdate(state, handler, changes) {\n isFunction(handler) ? handler(state.current) : Object.keys(changes).forEach(function (field) {\n var _handler$field;\n\n return (_handler$field = handler[field]) === null || _handler$field === void 0 ? void 0 : _handler$field.call(handler, state.current[field]);\n });\n return changes;\n}\n\nvar index = {\n create: create\n};\n\nexport default index;\n","var config = {\n paths: {\n vs: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.43.0/min/vs'\n }\n};\n\nexport default config;\n","function curry(fn) {\n return function curried() {\n var _this = this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args.length >= fn.length ? fn.apply(this, args) : function () {\n for (var _len2 = arguments.length, nextArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n nextArgs[_key2] = arguments[_key2];\n }\n\n return curried.apply(_this, [].concat(args, nextArgs));\n };\n };\n}\n\nexport default curry;\n","function isObject(value) {\n return {}.toString.call(value).includes('Object');\n}\n\nexport default isObject;\n","import curry from '../utils/curry.js';\nimport isObject from '../utils/isObject.js';\n\n/**\n * validates the configuration object and informs about deprecation\n * @param {Object} config - the configuration object \n * @return {Object} config - the validated configuration object\n */\n\nfunction validateConfig(config) {\n if (!config) errorHandler('configIsRequired');\n if (!isObject(config)) errorHandler('configType');\n\n if (config.urls) {\n informAboutDeprecation();\n return {\n paths: {\n vs: config.urls.monacoBase\n }\n };\n }\n\n return config;\n}\n/**\n * logs deprecation message\n */\n\n\nfunction informAboutDeprecation() {\n console.warn(errorMessages.deprecation);\n}\n\nfunction throwError(errorMessages, type) {\n throw new Error(errorMessages[type] || errorMessages[\"default\"]);\n}\n\nvar errorMessages = {\n configIsRequired: 'the configuration object is required',\n configType: 'the configuration object should be an object',\n \"default\": 'an unknown error accured in `@monaco-editor/loader` package',\n deprecation: \"Deprecation warning!\\n You are using deprecated way of configuration.\\n\\n Instead of using\\n monaco.config({ urls: { monacoBase: '...' } })\\n use\\n monaco.config({ paths: { vs: '...' } })\\n\\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\\n \"\n};\nvar errorHandler = curry(throwError)(errorMessages);\nvar validators = {\n config: validateConfig\n};\n\nexport default validators;\nexport { errorHandler, errorMessages };\n","var compose = function compose() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (x) {\n return fns.reduceRight(function (y, f) {\n return f(y);\n }, x);\n };\n};\n\nexport default compose;\n","import { objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';\n\nfunction merge(target, source) {\n Object.keys(source).forEach(function (key) {\n if (source[key] instanceof Object) {\n if (target[key]) {\n Object.assign(source[key], merge(target[key], source[key]));\n }\n }\n });\n return _objectSpread2(_objectSpread2({}, target), source);\n}\n\nexport default merge;\n","// The source (has been changed) is https://github.com/facebook/react/issues/5465#issuecomment-157888325\nvar CANCELATION_MESSAGE = {\n type: 'cancelation',\n msg: 'operation is manually canceled'\n};\n\nfunction makeCancelable(promise) {\n var hasCanceled_ = false;\n var wrappedPromise = new Promise(function (resolve, reject) {\n promise.then(function (val) {\n return hasCanceled_ ? reject(CANCELATION_MESSAGE) : resolve(val);\n });\n promise[\"catch\"](reject);\n });\n return wrappedPromise.cancel = function () {\n return hasCanceled_ = true;\n }, wrappedPromise;\n}\n\nexport default makeCancelable;\nexport { CANCELATION_MESSAGE };\n","import { slicedToArray as _slicedToArray, objectWithoutProperties as _objectWithoutProperties } from '../_virtual/_rollupPluginBabelHelpers.js';\nimport state from 'state-local';\nimport config$1 from '../config/index.js';\nimport validators from '../validators/index.js';\nimport compose from '../utils/compose.js';\nimport merge from '../utils/deepMerge.js';\nimport makeCancelable from '../utils/makeCancelable.js';\n\n/** the local state of the module */\n\nvar _state$create = state.create({\n config: config$1,\n isInitialized: false,\n resolve: null,\n reject: null,\n monaco: null\n}),\n _state$create2 = _slicedToArray(_state$create, 2),\n getState = _state$create2[0],\n setState = _state$create2[1];\n/**\n * set the loader configuration\n * @param {Object} config - the configuration object\n */\n\n\nfunction config(globalConfig) {\n var _validators$config = validators.config(globalConfig),\n monaco = _validators$config.monaco,\n config = _objectWithoutProperties(_validators$config, [\"monaco\"]);\n\n setState(function (state) {\n return {\n config: merge(state.config, config),\n monaco: monaco\n };\n });\n}\n/**\n * handles the initialization of the monaco-editor\n * @return {Promise} - returns an instance of monaco (with a cancelable promise)\n */\n\n\nfunction init() {\n var state = getState(function (_ref) {\n var monaco = _ref.monaco,\n isInitialized = _ref.isInitialized,\n resolve = _ref.resolve;\n return {\n monaco: monaco,\n isInitialized: isInitialized,\n resolve: resolve\n };\n });\n\n if (!state.isInitialized) {\n setState({\n isInitialized: true\n });\n\n if (state.monaco) {\n state.resolve(state.monaco);\n return makeCancelable(wrapperPromise);\n }\n\n if (window.monaco && window.monaco.editor) {\n storeMonacoInstance(window.monaco);\n state.resolve(window.monaco);\n return makeCancelable(wrapperPromise);\n }\n\n compose(injectScripts, getMonacoLoaderScript)(configureLoader);\n }\n\n return makeCancelable(wrapperPromise);\n}\n/**\n * injects provided scripts into the document.body\n * @param {Object} script - an HTML script element\n * @return {Object} - the injected HTML script element\n */\n\n\nfunction injectScripts(script) {\n return document.body.appendChild(script);\n}\n/**\n * creates an HTML script element with/without provided src\n * @param {string} [src] - the source path of the script\n * @return {Object} - the created HTML script element\n */\n\n\nfunction createScript(src) {\n var script = document.createElement('script');\n return src && (script.src = src), script;\n}\n/**\n * creates an HTML script element with the monaco loader src\n * @return {Object} - the created HTML script element\n */\n\n\nfunction getMonacoLoaderScript(configureLoader) {\n var state = getState(function (_ref2) {\n var config = _ref2.config,\n reject = _ref2.reject;\n return {\n config: config,\n reject: reject\n };\n });\n var loaderScript = createScript(\"\".concat(state.config.paths.vs, \"/loader.js\"));\n\n loaderScript.onload = function () {\n return configureLoader();\n };\n\n loaderScript.onerror = state.reject;\n return loaderScript;\n}\n/**\n * configures the monaco loader\n */\n\n\nfunction configureLoader() {\n var state = getState(function (_ref3) {\n var config = _ref3.config,\n resolve = _ref3.resolve,\n reject = _ref3.reject;\n return {\n config: config,\n resolve: resolve,\n reject: reject\n };\n });\n var require = window.require;\n\n require.config(state.config);\n\n require(['vs/editor/editor.main'], function (monaco) {\n storeMonacoInstance(monaco);\n state.resolve(monaco);\n }, function (error) {\n state.reject(error);\n });\n}\n/**\n * store monaco instance in local state\n */\n\n\nfunction storeMonacoInstance(monaco) {\n if (!getState().monaco) {\n setState({\n monaco: monaco\n });\n }\n}\n/**\n * internal helper function\n * extracts stored monaco instance\n * @return {Object|null} - the monaco instance\n */\n\n\nfunction __getMonacoInstance() {\n return getState(function (_ref4) {\n var monaco = _ref4.monaco;\n return monaco;\n });\n}\n\nvar wrapperPromise = new Promise(function (resolve, reject) {\n return setState({\n resolve: resolve,\n reject: reject\n });\n});\nvar loader = {\n config: config,\n init: init,\n __getMonacoInstance: __getMonacoInstance\n};\n\nexport default loader;\n","import {\n defineComponent,\n nextTick,\n onMounted,\n onUnmounted,\n ref,\n watch,\n} from 'vue';\nimport './monaco-editor.scss';\nimport {\n getCodeProps,\n getEditorEmits,\n useNamespace,\n useUIStore,\n} from '@ibiz-template/vue3-util';\nimport * as monaco from 'monaco-editor';\nimport loader from '@monaco-editor/loader';\nimport { CodeEditorController } from '../code-editor.controller';\n\nexport const IBizCode = defineComponent({\n name: 'IBizCode',\n props: getCodeProps<CodeEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('code');\n\n const currentVal = ref<string>('');\n\n let editor: monaco.editor.IStandaloneCodeEditor;\n let monacoEditor: typeof monaco.editor;\n const { UIStore } = useUIStore();\n\n // 编辑器主题\n const getMonacoTheme = (name: string): string => {\n return name === 'dark' ? `vs-${UIStore.theme}` : 'vs'; // 官方自带三种主题vs, hc-black, or vs-dark\n };\n\n watch(\n () => UIStore.theme,\n newVal => {\n monacoEditor.setTheme(getMonacoTheme(newVal));\n },\n );\n\n watch(\n () => props.value,\n newVal => {\n if (newVal !== currentVal.value) {\n currentVal.value = newVal || '';\n editor?.setValue(currentVal.value);\n }\n },\n { immediate: true },\n );\n\n const codeEditBox = ref();\n\n const editorInit = (): void => {\n nextTick(() => {\n loader.config({\n paths: {\n vs: `${ibiz.env.pluginBaseUrl}/monaco-editor@0.44.0/min/vs`,\n },\n });\n loader.init().then(loaderMonaco => {\n // 初始化编辑器\n if (!editor) {\n monacoEditor = loaderMonaco.editor;\n editor = monacoEditor.create(codeEditBox.value, {\n language: props.language || props.controller.language, // 语言支持自行查阅demo\n theme: getMonacoTheme(UIStore.theme),\n foldingStrategy: 'indentation',\n renderLineHighlight: 'all', // 行亮\n selectOnLineNumbers: true, // 显示行号\n minimap: {\n enabled: true,\n },\n readOnly: false, // 只读\n fontSize: 16, // 字体大小\n scrollBeyondLastLine: false, // 取消代码后面一大段空白\n overviewRulerBorder: false, // 不要滚动条的边框\n });\n }\n setTimeout(() => {\n editor.layout();\n editor.setValue(currentVal.value);\n });\n\n // 监听值的变化\n editor.onDidChangeModelContent(() => {\n currentVal.value = editor.getValue();\n emit('change', currentVal.value);\n });\n\n window.addEventListener('resize', () => {\n editor.layout();\n });\n });\n });\n };\n\n onMounted(() => {\n editorInit();\n });\n\n onUnmounted(() => {\n editor?.dispose();\n });\n\n return { ns, currentVal, codeEditBox };\n },\n render() {\n return <div ref='codeEditBox' class={this.ns.b()}></div>;\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { ICode } from '@ibiz/model-core';\n\n/**\n * 代码框编辑器控制器\n *\n * @export\n * @class CodeEditorController\n * @extends {EditorController}\n */\nexport class CodeEditorController extends EditorController<ICode> {\n /**\n * 语言类型\n * @author lxm\n * @date 2023-07-21 04:52:16\n * @readonly\n */\n get language(): string {\n return (\n this.editorParams.codeType || this.editorParams.language || 'typescript'\n );\n }\n\n /**\n * 主题\n * @author lxm\n * @date 2023-07-21 04:53:37\n * @readonly\n */\n get theme(): string {\n return this.editorParams.theme || 'vs-dark';\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ICode } from '@ibiz/model-core';\nimport { CodeEditorController } from './code-editor.controller';\n\n/**\n * 代码框编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class CodeEditorProvider\n * @implements {EditorProvider}\n */\nexport class CodeEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizCode';\n\n gridEditor: string = 'IBizCode';\n\n async createController(\n editorModel: ICode,\n parentController: IEditorContainerController,\n ): Promise<CodeEditorController> {\n const c = new CodeEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import {\n downloadFileFromBlob,\n RuntimeError,\n // RuntimeModelError,\n} from '@ibiz-template/core';\nimport { convertNavData, EditorController } from '@ibiz-template/runtime';\nimport { IHtml } from '@ibiz/model-core';\nimport qs from 'qs';\n\n/**\n * html框编辑器控制器\n *\n * @export\n * @class HtmlEditorController\n * @extends {EditorController}\n */\nexport class HtmlEditorController extends EditorController<IHtml> {\n /**\n * 上传参数\n */\n public uploadParams?: IParams;\n\n /**\n * 下载参数\n */\n public exportParams?: IParams;\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n\n if (this.editorParams) {\n const { uploadParams, exportParams } = this.editorParams;\n\n if (uploadParams) {\n try {\n this.uploadParams = JSON.parse(uploadParams);\n } catch (error) {\n ibiz.log.error(\n `编辑器[${ibiz.log.error(\n error,\n )}]编辑器参数 uploadParams 非 json 格式`,\n );\n }\n }\n if (exportParams) {\n try {\n this.exportParams = JSON.parse(exportParams);\n } catch (error) {\n ibiz.log.error(\n `编辑器[${ibiz.log.error(\n error,\n )}]编辑器参数 exportParams 非 json 格式`,\n );\n }\n }\n }\n }\n\n /**\n * 计算文件的上传路径和下载路径\n * 下载路径文件id用%fileId%占位,替换即可\n * 配置编辑器参数uploadParams和exportParams时,会像导航参数一样动态添加对应的参数到url上\n *\n * @author lxm\n * @date 2022-11-17 13:11:43\n * @param {IData} data\n * @returns {*} {{ uploadUrl: string; downloadUrl: string }}\n */\n calcBaseUrl(data: IData): { uploadUrl: string; downloadUrl: string } {\n let uploadUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.uploadFileUrl}`;\n let downloadUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.downloadFileUrl}/%fileId%`;\n let uploadParams: IParams = {};\n let exportParams: IParams = {};\n if (this.uploadParams) {\n uploadParams = convertNavData(\n this.uploadParams,\n data,\n this.params,\n this.context,\n );\n }\n if (this.exportParams) {\n exportParams = convertNavData(\n this.exportParams,\n data,\n this.params,\n this.context,\n );\n }\n uploadUrl += qs.stringify(uploadParams, { addQueryPrefix: true });\n downloadUrl += qs.stringify(exportParams, { addQueryPrefix: true });\n\n return { uploadUrl, downloadUrl };\n }\n\n /**\n * 请求url获取文件流,并用JS触发文件下载\n *\n * @author lxm\n * @date 2022-11-17 14:11:09\n * @param {string} url\n * @param {IData} file\n */\n fileDownload(file: { url: string; name: string }): void {\n // 发送get请求\n ibiz.net\n .request(file.url, {\n method: 'get',\n responseType: 'blob',\n baseURL: '', // 已经有baseURL了,这里无需再写\n })\n .then((response: IData) => {\n if (response.status !== 200) {\n throw new RuntimeError('下载文件失败');\n }\n // 请求成功,后台返回的是一个文件流\n if (!response.data) {\n throw new RuntimeError('文件流数据不存在');\n } else {\n // 获取文件名\n const fileName = file.name;\n downloadFileFromBlob(response.data, fileName);\n }\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IHtml } from '@ibiz/model-core';\nimport { HtmlEditorController } from './html-editor.controller';\n\n/**\n * html框编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class HtmlEditorProvider\n * @implements {EditorProvider}\n */\nexport class HtmlEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizHtml';\n\n gridEditor: string = 'IBizHtml';\n\n async createController(\n editorModel: IHtml,\n parentController: IEditorContainerController,\n ): Promise<HtmlEditorController> {\n const c = new HtmlEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import {\n downloadFileFromBlob,\n RuntimeError,\n RuntimeModelError,\n} from '@ibiz-template/core';\nimport {\n EditorController,\n IAppDEService,\n convertNavData,\n getDeACMode,\n} from '@ibiz-template/runtime';\nimport { IAppDEACMode, IDEACModeDataItem, IMarkdown } from '@ibiz/model-core';\nimport qs from 'qs';\n\n/**\n * MarkDown编辑器控制器\n *\n * @export\n * @class MarkDownEditorController\n * @extends {EditorController}\n */\nexport class MarkDownEditorController extends EditorController<IMarkdown> {\n /**\n * 上传参数\n */\n public uploadParams?: IParams;\n\n /**\n * 下载参数\n */\n public exportParams?: IParams;\n\n /**\n * 应用实体服务\n *\n * @author chitanda\n * @date 2023-10-12 14:10:41\n * @type {IAppDEService}\n */\n deService?: IAppDEService;\n\n /**\n * 自填模式\n *\n * @author chitanda\n * @date 2023-10-12 10:10:52\n * @type {IAppDEACMode}\n */\n deACMode?: IAppDEACMode;\n\n /**\n * 自填模式对应主键属性名称\n *\n * @author chitanda\n * @date 2023-10-12 10:10:58\n * @type {string}\n */\n keyName: string = 'srfkey';\n\n /**\n * 自填模式对应主文本属性名称\n *\n * @author chitanda\n * @date 2023-10-12 10:10:02\n * @type {string}\n */\n textName: string = 'srfmajortext';\n\n /**\n * 自填模式排序模式,默认升序\n *\n * @author chitanda\n * @date 2023-10-12 10:10:29\n * @type {string}\n */\n sort: string = 'asc';\n\n /**\n * 自填数据项集合(已排除了value和text)\n *\n * @author chitanda\n * @date 2023-10-12 10:10:23\n * @type {IDEACModeDataItem[]}\n */\n dataItems: IDEACModeDataItem[] = [];\n\n /**\n * AI 聊天自填模式\n *\n * @author chitanda\n * @date 2023-10-12 10:10:37\n * @type {boolean}\n */\n chatCompletion: boolean = false;\n\n protected async onInit(): Promise<void> {\n await super.onInit();\n\n // 没配高度默认给600px\n if (!this.style.height) {\n this.style.height = '600px';\n }\n\n if (this.editorParams) {\n const { uploadparams, exportparams } = this.editorParams;\n\n if (uploadparams) {\n try {\n this.uploadParams = JSON.parse(uploadparams);\n } catch (error) {\n throw new RuntimeModelError(\n uploadparams,\n `配置uploadparams没有按标准JSON格式`,\n );\n }\n }\n if (exportparams) {\n try {\n this.exportParams = JSON.parse(exportparams);\n } catch (error) {\n throw new RuntimeModelError(\n exportparams,\n `配置exportparams没有按标准JSON格式`,\n );\n }\n }\n }\n\n // 解析自填模式相关模型\n const model = this.model;\n if (model.appDEACModeId) {\n this.deACMode = await getDeACMode(\n model.appDEACModeId,\n model.appDataEntityId!,\n this.context.srfappid,\n );\n if (this.deACMode) {\n if (this.deACMode.actype === 'AUTOCOMPLETE') {\n // 自填模式相关\n const { minorSortAppDEFieldId, minorSortDir } = this.deACMode;\n if (minorSortAppDEFieldId && minorSortDir) {\n this.sort = `${minorSortAppDEFieldId.toLowerCase()},${minorSortDir.toLowerCase()}`;\n }\n if (this.deACMode.textAppDEFieldId) {\n this.textName = this.deACMode.textAppDEFieldId;\n }\n if (this.deACMode.valueAppDEFieldId) {\n this.keyName = this.deACMode.valueAppDEFieldId;\n }\n if (this.deACMode.deacmodeDataItems) {\n this.dataItems = [];\n this.deACMode.deacmodeDataItems.forEach(\n (dataItem: IDEACModeDataItem) => {\n if (dataItem.id !== 'value' && dataItem.id !== 'text') {\n this.dataItems.push(dataItem);\n }\n },\n );\n }\n }\n if (this.deACMode.actype === 'CHATCOMPLETION') {\n this.deService = await ibiz.hub\n .getApp(model.appId)\n .deService.getService(model.appDataEntityId!);\n this.chatCompletion = true;\n }\n }\n }\n }\n\n /**\n * 计算文件的上传路径和下载路径\n * 下载路径文件id用%fileId%占位,替换即可\n * 配置编辑器参数uploadParams和exportParams时,会像导航参数一样动态添加对应的参数到url上\n *\n * @author lxm\n * @date 2022-11-17 13:11:43\n * @param {IData} data\n * @returns {*} {{ uploadUrl: string; downloadUrl: string }}\n */\n calcBaseUrl(data: IData): { uploadUrl: string; downloadUrl: string } {\n let uploadUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.uploadFileUrl}`;\n let downloadUrl = `${ibiz.env.baseUrl}/${ibiz.env.appId}${ibiz.env.downloadFileUrl}/%fileId%`;\n let uploadParams: IParams = {};\n let exportParams: IParams = {};\n if (this.uploadParams) {\n uploadParams = convertNavData(\n this.uploadParams,\n data,\n this.params,\n this.context,\n );\n }\n if (this.exportParams) {\n exportParams = convertNavData(\n this.exportParams,\n data,\n this.params,\n this.context,\n );\n }\n uploadUrl += qs.stringify(uploadParams, { addQueryPrefix: true });\n downloadUrl += qs.stringify(exportParams, { addQueryPrefix: true });\n\n return { uploadUrl, downloadUrl };\n }\n\n /**\n * 请求url获取文件流,并用JS触发文件下载\n *\n * @author lxm\n * @date 2022-11-17 14:11:09\n * @param {string} url\n * @param {IData} file\n */\n fileDownload(file: { url: string; name: string }): void {\n // 发送get请求\n ibiz.net\n .request(file.url, {\n method: 'get',\n responseType: 'blob',\n baseURL: '', // 已经有baseURL了,这里无需再写\n })\n .then((response: IData) => {\n if (response.status !== 200) {\n throw new RuntimeError('下载文件失败');\n }\n // 请求成功,后台返回的是一个文件流\n if (!response.data) {\n throw new RuntimeError('文件流数据不存在');\n } else {\n // 获取文件名\n const fileName = file.name;\n downloadFileFromBlob(response.data, fileName);\n }\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IMarkdown } from '@ibiz/model-core';\nimport { MarkDownEditorController } from './markdown-editor.controller';\n\n/**\n * 代码框编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class MarkDownEditorProvider\n * @implements {EditorProvider}\n */\nexport class MarkDownEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizMarkDown';\n\n gridEditor: string = 'IBizMarkDown';\n\n async createController(\n editorModel: IMarkdown,\n parentController: IEditorContainerController,\n ): Promise<MarkDownEditorController> {\n const c = new MarkDownEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, Ref, ref, VNode, watch } from 'vue';\nimport {\n getArrayProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-array.scss';\nimport { createUUID } from 'qx-util';\nimport { toNumber } from 'lodash-es';\nimport { ArrayEditorController } from '../array-editor.controller';\n\nexport const IBizArray = defineComponent({\n name: 'IBizArray',\n props: getArrayProps<ArrayEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('array');\n\n const c = props.controller!;\n\n const editorModel = c.model;\n\n // 编辑器样式\n let editorStyle = 'default';\n // 输入框大小\n let size = 'default';\n // 数组大小限制\n let limit = 0;\n // 输入内容最长长度\n let maxLength;\n // 是否显示输入内容长度\n let showWordLimit = false;\n // 输入内容前缀\n let prepend = '';\n // 输入内容后缀\n let append = '';\n // 超链接打开方式\n let target = '_blank';\n // 输入内容项集合\n const items: Ref<IData[]> = ref([]);\n\n if (editorModel.editorParams) {\n if (editorModel.editorParams.editorStyle) {\n editorStyle = editorModel.editorParams.editorStyle;\n }\n if (editorModel.editorParams.size) {\n size = editorModel.editorParams.size;\n }\n if (editorModel.editorParams.limit) {\n limit = toNumber(editorModel.editorParams.limit);\n }\n if (editorModel.editorParams.maxLength) {\n maxLength = toNumber(editorModel.editorParams.maxLength);\n }\n if (editorModel.editorParams.showWordLimit) {\n showWordLimit = c.toBoolean(editorModel.editorParams.showWordLimit);\n }\n if (editorModel.editorParams.prepend) {\n prepend = editorModel.editorParams.prepend;\n }\n if (editorModel.editorParams.append) {\n append = editorModel.editorParams.append;\n }\n if (editorModel.editorParams.target) {\n target = editorModel.editorParams.target;\n }\n }\n\n // 输入框类型\n const dataType = editorModel.dataType;\n const type =\n Object.is(dataType, 'NUMBER') || Object.is(dataType, 'INTEGER')\n ? 'number'\n : 'text';\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal && newVal !== oldVal) {\n if (items.value.length === 0) {\n const tempItems = newVal.map((value: string | number) => {\n return { value, key: createUUID() };\n });\n items.value = tempItems;\n }\n }\n },\n { immediate: true },\n );\n\n // 获取Url路径\n const getUrl = (value: string): string => {\n let tempValue = value;\n if (tempValue) {\n if (prepend) {\n tempValue = prepend + tempValue;\n }\n if (append) {\n tempValue += append;\n }\n }\n return tempValue;\n };\n\n // 抛值\n const onEmit = (): void => {\n const result = items.value.map(item => item.value);\n emit('change', result);\n };\n\n // 新增项\n const addItem = (index?: number): void => {\n if (props.disabled || props.readonly) {\n return;\n }\n const tempLink = {\n key: createUUID(),\n value: null,\n };\n if (index) {\n items.value.splice(index, 0, tempLink);\n } else {\n items.value.push(tempLink);\n }\n onEmit();\n };\n\n // 删除项\n const removeItem = (index: number): void => {\n items.value.splice(index, 1);\n onEmit();\n };\n\n // 处理值改变\n const handleChange = (value: string | number, index: number): void => {\n items.value[index].value = value;\n onEmit();\n };\n\n const onBlur = (e: IData): void => {\n emit('blur', e);\n };\n\n const onFocus = (e: IData): void => {\n emit('focus', e);\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e && e.code === 'Enter') {\n emit('enter', e);\n }\n };\n\n return {\n ns,\n c,\n editorStyle,\n type,\n size,\n limit,\n maxLength,\n showWordLimit,\n prepend,\n append,\n target,\n items,\n getUrl,\n addItem,\n removeItem,\n handleChange,\n onBlur,\n onFocus,\n handleKeyUp,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n {this.items.length === 0 ? (\n <ion-icon\n class={this.ns.b('add-icon')}\n name='add'\n onClick={this.addItem}\n />\n ) : (\n this.items.map((item, index) => {\n return (\n <div class={this.ns.b('item')} key={item.key}>\n {this.editorStyle === 'default' ? (\n <el-input\n type={this.type}\n size={this.size}\n v-model={item.value}\n placeholder={this.c.placeHolder}\n disabled={this.disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyup={this.handleKeyUp}\n onChange={(val: string | number): void =>\n this.handleChange(val, index)\n }\n ></el-input>\n ) : (\n <el-tooltip placement='bottom' trigger='hover'>\n {{\n default: (): VNode => {\n return (\n <el-input\n type={this.type}\n size={this.size}\n v-model={item.value}\n placeholder={this.c.placeHolder}\n disabled={this.disabled}\n maxlength={\n Object.is(this.editorStyle, 'url')\n ? this.maxLength\n : null\n }\n show-word-limit={\n Object.is(this.editorStyle, 'url')\n ? this.showWordLimit\n : null\n }\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onChange={(val: string | number): void =>\n this.handleChange(val, index)\n }\n onKeyup={this.handleKeyUp}\n >\n {{\n prefix: (): string | null => {\n if (\n Object.is(this.editorStyle, 'url') &&\n this.prepend\n ) {\n return this.prepend;\n }\n return null;\n },\n suffix: (): string | null => {\n if (\n Object.is(this.editorStyle, 'url') &&\n this.append\n ) {\n return this.append;\n }\n return null;\n },\n }}\n </el-input>\n );\n },\n content: (): VNode => {\n if (this.editorStyle === 'img') {\n return (\n <el-image fit='contain' src={item.value}></el-image>\n );\n }\n return (\n <el-link\n href={this.getUrl(item.value)}\n target={this.target}\n >\n {this.getUrl(item.value)}\n </el-link>\n );\n },\n }}\n </el-tooltip>\n )}\n {!(this.disabled || this.readonly) && (\n <div class={this.ns.b('icons')}>\n {(!this.limit || this.items.length < this.limit) && (\n <ion-icon\n class={this.ns.b('add-icon')}\n name='add'\n onClick={(): void => this.addItem(index + 1)}\n />\n )}\n <ion-icon\n class={this.ns.b('remove-icon')}\n name='remove'\n onClick={(): void => this.removeItem(index)}\n />\n </div>\n )}\n </div>\n );\n })\n )}\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { IArray } from '@ibiz/model-core';\n\n/**\n * 数组编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class ArrayEditorController extends EditorController<IArray> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IArray } from '@ibiz/model-core';\nimport { ArrayEditorController } from './array-editor.controller';\n\n/**\n * 数组编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class ArrayEditorProvider\n * @implements {EditorProvider}\n */\nexport class ArrayEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizArray';\n\n gridEditor: string = 'IBizArray';\n\n async createController(\n editorModel: IArray,\n parentController: IEditorContainerController,\n ): Promise<ArrayEditorController> {\n const c = new ArrayEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, ref, Ref } from 'vue';\nimport {\n getCascaderProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-cascader.scss';\nimport { clone } from 'ramda';\nimport { calcDeCodeNameById } from '@ibiz-template/runtime';\nimport { CascaderEditorController } from '../cascader-editor.controller';\n\nexport const IBizCascader = defineComponent({\n name: 'IBizCascader',\n props: getCascaderProps<CascaderEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('cascader');\n\n const c = props.controller!;\n\n const editorModel = c.model;\n\n const treeRef: Ref<IData | null> = ref(null);\n\n // 关系表单项集合\n const valueItems: Ref<IData[]> = ref([]);\n const editorItems = editorModel.editorItems;\n if (editorItems && editorItems.length > 0) {\n const editorItemNames: IData[] = editorItems.map((item: IData) => {\n return {\n name: item.id,\n appDataEntityId: item.appDataEntityId,\n appDEDataSetId: item.appDEDataSetId,\n };\n });\n valueItems.value = editorItemNames;\n }\n\n // 编辑器样式\n let editorStyle = 'default';\n // 大小\n let size = 'default';\n // 是否支持过滤\n let filterable = true;\n // 是否多选\n let multiple = false;\n // 连接符\n let separator = '/';\n\n if (editorModel.editorParams) {\n if (editorModel.editorParams.editorStyle) {\n editorStyle = editorModel.editorParams.editorStyle;\n }\n if (editorModel.editorParams.size) {\n size = editorModel.editorParams.size;\n }\n if (editorModel.editorParams.filterable) {\n filterable = c.toBoolean(editorModel.editorParams.filterable);\n }\n if (editorModel.editorParams.multiple) {\n multiple = c.toBoolean(editorModel.editorParams.multiple);\n }\n if (editorModel.editorParams.separator) {\n separator = editorModel.editorParams.separator;\n }\n }\n\n // 树数据(用于维护级联选择器默认选中数据)\n const treeData: Ref<IData[]> = ref([]);\n // 数据集\n const items: Ref<IData[]> = ref([]);\n // 选中值\n const selectValue: Ref<string | string[] | string[][] | null> = ref(null);\n // 树选中数据\n const treeSelectData: Ref<IData[]> = ref([]);\n // 值项数据\n const valueItemData: Ref<IData[]> = ref([]);\n // 树默认选中值\n const defaultCheckedKeys: Ref<string[]> = ref([]);\n // 搜索值\n const searchValue = ref('');\n // 是否加载完成\n const isLoaded = ref(false);\n\n // 获取尺寸\n const getSize = () => {\n switch (size) {\n case 'large':\n return 'large';\n case 'small':\n return 'small';\n default:\n return 'default';\n }\n };\n\n // 获取是否为子叶\n const getIsLeaf = (data: IData, _node: IData): boolean => {\n return data.leaf;\n };\n\n // 获取禁用状态\n const getDisabled = (_data: IData, node: IData): boolean => {\n return node.level !== valueItems.value.length;\n };\n\n // 处理选中数据\n const handleSelectData = () => {\n if (props.value && valueItems.value) {\n const tempTreeSelectData: IData[] = [];\n const values = JSON.parse(props.value);\n values.forEach((label: string) => {\n tempTreeSelectData.push({\n label,\n value: [],\n });\n });\n valueItemData.value.forEach((valueItem: IData) => {\n const value = props.data[valueItem.name]\n ? props.data[valueItem.name].split(',')\n : [];\n valueItem.value = value;\n });\n treeSelectData.value = [];\n tempTreeSelectData.forEach((select: IData, index: number) => {\n valueItemData.value.forEach((valueItem: IData) => {\n select.value.push(valueItem.value[index]);\n });\n const value = select.value.join(separator);\n treeSelectData.value.push({\n label: select.label,\n value,\n });\n });\n treeSelectData.value.forEach((select: IData) => {\n const _values: string[] = select.value.split(separator);\n const _labels: string[] = select.label.split(separator);\n _values.forEach((value: string, index: number) => {\n const item = items.value.find(\n (_item: IData) => _item.value === value,\n );\n if (!item) {\n items.value.push({ value, label: _labels[index] });\n }\n });\n });\n if (Object.is(editorStyle, 'default')) {\n let tempSelectValue: string[] | string[][] = [];\n if (!multiple) {\n tempSelectValue = treeSelectData.value[0].value.split(separator);\n } else {\n treeSelectData.value.forEach((select: IData) => {\n tempSelectValue.push(select.value.split(separator));\n });\n }\n selectValue.value = tempSelectValue;\n } else {\n if (multiple) {\n selectValue.value = values;\n } else {\n selectValue.value = values.join(separator);\n }\n const tempDefaultCheckedKeys: string[] =\n valueItemData.value[valueItemData.value.length - 1].value;\n if (valueItemData.value.length > 1) {\n const parentKays =\n valueItemData.value[valueItemData.value.length - 2].value;\n if (parentKays && parentKays.length > 0) {\n parentKays.forEach((parent: string, index: number) => {\n tempDefaultCheckedKeys[\n index\n ] = `${parent}_${tempDefaultCheckedKeys[index]}`;\n });\n }\n }\n defaultCheckedKeys.value = tempDefaultCheckedKeys;\n }\n }\n };\n\n // created处理\n if (valueItems.value && valueItems.value.length > 0) {\n valueItems.value.forEach((valueItem: IData) => {\n valueItemData.value.push({ name: valueItem.name, value: [] });\n });\n }\n\n // 处理查询参数\n const handleQueryParams = async (index: number, value: string) => {\n const context = clone(c.context);\n const params = clone(c.params);\n if (index > 0) {\n const valueItem = valueItems.value[index - 1];\n Object.assign(context, {\n [calcDeCodeNameById(valueItem.appDataEntityId)]: value,\n });\n const appDataEntity = await ibiz.hub.getAppDataEntity(\n valueItem.appDataEntityId,\n )!;\n Object.assign(params, {\n [`n_${appDataEntity.keyAppDEFieldId!.toLowerCase()}_eq`]: value,\n });\n }\n return { context, params };\n };\n\n // 填充树形数据\n const fillTreeData = (node: IData, curNodes: IData[]) => {\n const { level, value } = node;\n isLoaded.value = true;\n let tempNodes: IData[] = [];\n if (level === 0) {\n // 已有回显数据\n handleSelectData();\n if (treeData.value.length > 0) {\n curNodes.forEach((child: IData) => {\n const index = treeData.value.findIndex(\n (_node: IData) => child.value === _node.value,\n );\n if (index > -1) {\n Object.assign(treeData.value[index], child);\n } else {\n treeData.value.push(child);\n tempNodes.push(child);\n }\n });\n } else {\n treeData.value = [...curNodes];\n tempNodes = [...curNodes];\n }\n } else {\n const getTreeData = (nodes: IData[], parentKey: string) => {\n if (nodes && nodes.length > 0) {\n nodes.forEach((_node: IData) => {\n if (_node.value === value) {\n if (_node.children && _node.children.length > 0) {\n curNodes.forEach((childNode: IData) => {\n const index = _node.children.findIndex(\n (child: IData) => child.value === childNode.value,\n );\n if (index > -1) {\n Object.assign(_node.children[index], childNode);\n } else {\n _node.children.push(childNode);\n tempNodes.push(childNode);\n }\n });\n } else {\n _node.children = curNodes;\n tempNodes = curNodes;\n }\n } else {\n getTreeData(_node.children, parentKey);\n }\n });\n }\n };\n getTreeData(treeData.value, value);\n }\n // 在数据回显中,已有选中数据时,树重新load会导致selectValue被清空\n const tempSelectValue = selectValue.value || [];\n setTimeout(() => {\n selectValue.value = tempSelectValue;\n isLoaded.value = false;\n });\n return tempNodes;\n };\n\n // 加载数据\n const loadData = async (node: IData, resolve: (_n: IData[]) => void) => {\n const { level } = node;\n // eslint-disable-next-line no-nested-ternary\n const value = Object.is(editorStyle, 'default')\n ? node.value\n : node.data\n ? node.data.value\n : null;\n const valueItem = valueItems.value[level];\n try {\n if (valueItem.appDataEntityId && valueItem.appDEDataSetId) {\n const { context, params } = await handleQueryParams(level, value);\n const app = ibiz.hub.getApp(c.context.srfappid);\n const response = await app.deService.exec(\n valueItem.appDataEntityId,\n valueItem.appDEDataSetId,\n context,\n params,\n );\n if (response && response.status === 200 && response.data.length > 0) {\n const nodes: IData[] = response.data.map(\n (item: IData, index: number) => ({\n ...item,\n value: item.srfkey,\n label: item.srfmajortext ? item.srfmajortext : `标题${index}`,\n leaf: level === valueItems.value.length - 1,\n nodekey: `${value ? `${value}_${item.srfkey}` : item.srfkey}`,\n }),\n );\n nodes.forEach((_node: IData) => {\n const index = items.value.findIndex(\n (item: IData) => _node.value === item.value,\n );\n if (index > -1) {\n items.value[index] = _node;\n } else {\n items.value.push(_node);\n }\n });\n // 级联选择器值回显特殊处理--将懒加载回的数据填充到树型数据中\n if (Object.is(editorStyle, 'default')) {\n const tempNodes = fillTreeData(node, nodes);\n resolve(tempNodes);\n } else {\n resolve(nodes);\n }\n }\n }\n resolve([]);\n } catch (error) {\n console.log(valueItem, '查询数据集失败');\n resolve([]);\n }\n };\n\n // 处理树选择器值改变\n const handleTreeValueChange = () => {\n const tempSelectValue: string[] = [];\n selectValue.value = [];\n treeSelectData.value.forEach((item: IData) => {\n tempSelectValue.push(item.label);\n });\n if (multiple) {\n selectValue.value = tempSelectValue;\n } else {\n selectValue.value =\n tempSelectValue.length > 0 ? tempSelectValue[0] : null;\n }\n valueItemData.value.forEach((valueItem: IData) => {\n emit(\n 'change',\n valueItem.value.length > 0 ? valueItem.value.join(',') : null,\n valueItem.name,\n );\n });\n emit(\n 'change',\n selectValue.value!.length > 0\n ? JSON.stringify(selectValue.value)\n : null,\n );\n };\n\n // 处理树选择清空\n const handleTreeClear = () => {\n treeSelectData.value = [];\n valueItemData.value.forEach((valueItem: IData) => {\n valueItem.value = [];\n });\n if (treeRef.value) {\n treeRef.value.setCheckedKeys([]);\n }\n handleTreeValueChange();\n };\n\n // 处理级联选择器值改变\n const handleCascaderValueChange = () => {\n if (!isLoaded.value) {\n // 计算值项选中数据\n valueItemData.value.forEach((valueItem: IData) => {\n valueItem.value = [];\n });\n if (selectValue.value?.length) {\n (selectValue.value as string[]).forEach(\n (item: string | string[], index: number) => {\n if (typeof item === 'string') {\n valueItemData.value[index].value.push(item);\n } else {\n item.forEach((_item: string, _index: number) => {\n valueItemData.value[_index].value.push(_item);\n });\n }\n },\n );\n }\n // 计算当前选中数据文本\n const curSelectPath: string | string[][] = [];\n let curSelectText: string[] = [];\n if (selectValue.value?.length) {\n (selectValue.value as string[]).forEach(\n (selected: string[] | string) => {\n if (multiple) {\n const selectItems: string[] = (selected as string[]).map(\n // eslint-disable-next-line array-callback-return\n (select: string) => {\n const selectItem = items.value.find(\n (item: IData) => item.value === select,\n );\n if (selectItem) {\n return selectItem.label;\n }\n },\n );\n curSelectPath.push(selectItems);\n } else {\n const selectItem = items.value.find(\n (item: IData) => item.value === selected,\n );\n if (selectItem) {\n curSelectPath.push(selectItem.label);\n }\n }\n },\n );\n }\n valueItemData.value.forEach((valueItem: IData) => {\n emit(\n 'change',\n valueItem.value.length > 0 ? valueItem.value.join(',') : null,\n valueItem.name,\n );\n });\n if (curSelectPath.length > 0) {\n if (multiple) {\n curSelectPath.forEach((path: string[]) => {\n curSelectText.push(path.join(separator));\n });\n } else {\n curSelectText = [curSelectPath.join(separator)];\n }\n }\n emit(\n 'change',\n curSelectText.length > 0 ? JSON.stringify(curSelectText) : null,\n );\n }\n };\n\n // 处理删除标签(多选删除)\n const handleRemoveTag = () => {\n setTimeout(() => {\n handleCascaderValueChange();\n });\n };\n\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n return {\n ns,\n c,\n valueItems,\n editorStyle,\n filterable,\n separator,\n onBlur,\n onFocus,\n treeData,\n items,\n selectValue,\n treeSelectData,\n valueItemData,\n defaultCheckedKeys,\n searchValue,\n isLoaded,\n getSize,\n getIsLeaf,\n getDisabled,\n loadData,\n treeRef,\n handleTreeClear,\n handleRemoveTag,\n multiple,\n handleCascaderValueChange,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n >\n <el-cascader\n popper-class={this.ns.b('popper')}\n clearable\n options={this.treeData}\n size={this.getSize()}\n separator={this.separator}\n filterable={this.filterable}\n placeholder={this.c.placeHolder ? this.c.placeHolder : ' '}\n props={{\n lazy: true,\n multiple: this.multiple,\n lazyLoad: this.loadData,\n }}\n disable={this.disabled}\n v-model={this.selectValue}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onRemoveTag={this.handleRemoveTag}\n onChange={this.handleCascaderValueChange}\n ></el-cascader>\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { ICascader } from '@ibiz/model-core';\n\n/**\n * 级联选择器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class CascaderEditorController extends EditorController<ICascader> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ICascader } from '@ibiz/model-core';\nimport { CascaderEditorController } from './cascader-editor.controller';\n\n/**\n * 级联选择器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class CascaderEditorProvider\n * @implements {EditorProvider}\n */\nexport class CascaderEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizCascader';\n\n gridEditor: string = 'IBizCascader';\n\n async createController(\n editorModel: ICascader,\n parentController: IEditorContainerController,\n ): Promise<CascaderEditorController> {\n const c = new CascaderEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { computed, defineComponent, Ref, ref, StyleValue, watch } from 'vue';\nimport {\n getEditorEmits,\n getColorPickerProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-color-picker.scss';\nimport { ColorPickerEditorController } from '../color-picker-editor.controller';\n\nexport const IBizColorPicker = defineComponent({\n name: 'IBizColorPicker',\n props: getColorPickerProps<ColorPickerEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('color-picker');\n\n const c = props.controller;\n\n const currentVal = ref<string | null>('');\n\n const colorPicker: Ref<null | IData> = ref(null);\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (!newVal) {\n currentVal.value = '';\n } else {\n currentVal.value = newVal;\n }\n }\n },\n { immediate: true },\n );\n\n const handleChange = (e: string | null) => {\n emit('change', e);\n };\n\n const showPicker = (_e: Event) => {\n // element-plus源码里有100延时,必须在之后打开\n setTimeout(() => {\n if (colorPicker.value) {\n colorPicker.value.show();\n }\n }, 200);\n };\n\n const contentStyle = computed(() => {\n if (c.style) {\n return c.style;\n }\n return null;\n });\n\n // 聚焦\n const onFocus = (e: IData) => {\n emit('focus', e);\n };\n\n // 失焦\n const onBlur = (e: IData) => {\n emit('blur', e);\n };\n\n return {\n ns,\n c,\n currentVal,\n contentStyle,\n colorPicker,\n handleChange,\n showPicker,\n onFocus,\n onBlur,\n };\n },\n render() {\n let content = null;\n if (this.readonly) {\n // 只读显示\n content = `${this.currentVal}`;\n } else {\n // 编辑态显示\n content = (\n <span\n class={this.ns.b('content')}\n style={this.contentStyle as StyleValue}\n onClick={this.showPicker}\n >\n <el-color-picker\n ref='colorPicker'\n v-model={this.currentVal}\n disabled={this.disabled}\n onChange={this.handleChange}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n size='small'\n ></el-color-picker>\n <span class={this.ns.b('text')}>{this.currentVal}</span>\n </span>\n );\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n style={{ color: this.currentVal || '' }}\n >\n {content}\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { ITextBox } from '@ibiz/model-core';\n\n/**\n * 颜色选择器控制器\n *\n * @author zzq\n * @date 2323-8-14 19:42:00\n * @export\n * @class ColorPickerEditorController\n * @extends {EditorController}\n */\nexport class ColorPickerEditorController extends EditorController<ITextBox> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { ITextBox } from '@ibiz/model-core';\nimport { ColorPickerEditorController } from './color-picker-editor.controller';\n\n/**\n * 颜色选择器适配器\n *\n * @author zzq\n * @date 2323-8-14 19:42:00\n * @export\n * @class ColorPickerEditorProvider\n * @implements {EditorProvider}\n */\nexport class ColorPickerEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizColorPicker';\n\n gridEditor: string = 'IBizColorPicker';\n\n async createController(\n editorModel: ITextBox,\n parentController: IEditorContainerController,\n ): Promise<ColorPickerEditorController> {\n const c = new ColorPickerEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { defineComponent, ref, Ref, watch } from 'vue';\nimport {\n getEditorEmits,\n getRawProps,\n useFocusAndBlur,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport './ibiz-preset-rawitem.scss';\nimport { PresetRawitemEditorController } from '../preset-rawitem.controller';\n\nexport const IBizPresetRawitem = defineComponent({\n name: 'IBizPresetRawitem',\n props: getRawProps<PresetRawitemEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('preset-rawitem');\n\n const c = props.controller;\n\n const editorModel = c.model;\n\n // 聚焦失焦事件\n const { componentRef: editorRef } = useFocusAndBlur(\n () => emit('focus'),\n () => emit('blur'),\n );\n\n // 预置类型\n const type = c.model.predefinedType;\n\n // 传入内容\n const content: Ref<string | number | undefined> = ref('');\n\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n content.value = newVal as string;\n }\n },\n {\n immediate: true,\n },\n );\n\n return {\n ns,\n editorModel,\n editorRef,\n type,\n content,\n };\n },\n render() {\n let content = null;\n if (this.type === 'FIELD_IMAGE') {\n content = (\n <iBizRawItem content={this.content} type={'IMAGE'}></iBizRawItem>\n );\n } else if (this.type === 'FIELD_TEXT_DYNAMIC') {\n content = (\n <iBizRawItem content={this.content} type={'TEXT'}></iBizRawItem>\n );\n } else {\n content = <div>暂未支持{this.type}</div>;\n }\n\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n ]}\n ref='editorRef'\n >\n {content}\n </div>\n );\n },\n});\n","import { EditorController } from '@ibiz-template/runtime';\nimport { IEditor } from '@ibiz/model-core';\n\n/**\n * 预置直接内容编辑器控制器\n * @return {*}\n * @author: zhujiamin\n * @Date: 2022-08-25 10:57:58\n */\nexport class PresetRawitemEditorController extends EditorController<IEditor> {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IEditorContainerController,\n IEditorProvider,\n} from '@ibiz-template/runtime';\nimport { IEditor } from '@ibiz/model-core';\nimport { PresetRawitemEditorController } from './preset-rawitem.controller';\n\n/**\n * 预置直接内容编辑器适配器\n *\n * @author lxm\n * @date 2022-09-19 22:09:03\n * @export\n * @class PresetRawitemEditorProvider\n * @implements {EditorProvider}\n */\nexport class PresetRawitemEditorProvider implements IEditorProvider {\n formEditor: string = 'IBizPresetRawitem';\n\n gridEditor: string = 'IBizPresetRawitem';\n\n async createController(\n editorModel: IEditor,\n parentController: IEditorContainerController,\n ): Promise<PresetRawitemEditorController> {\n const c = new PresetRawitemEditorController(editorModel, parentController);\n await c.init();\n return c;\n }\n}\n","import { registerEditorProvider } from '@ibiz-template/runtime';\nimport { App, defineAsyncComponent } from 'vue';\nimport { NotSupportedEditor } from './not-supported-editor/not-supported-editor';\nimport { IBizSpan, IBizSpanLink, SpanEditorProvider } from './span';\nimport {\n IBizInput,\n IBizInputNumber,\n IBizInputIP,\n TextBoxEditorProvider,\n} from './text-box';\nimport { IBizDropdown, DropDownListEditorProvider } from './dropdown-list';\nimport { IBizCheckbox, CheckBoxEditorProvider } from './check-box';\nimport { IBizCheckboxList, CheckBoxListEditorProvider } from './check-box-list';\nimport { IBizRadio, RadioButtonListEditorProvider } from './radio-button-list';\nimport { IBizDatePicker, DatePickerEditorProvider } from './date-picker';\nimport { IBizRaw, RawEditorProvider } from './raw';\nimport { IBizStepper, StepperEditorProvider } from './stepper';\nimport { IBizRate, RateEditorProvider } from './rate';\nimport { IBizSwitch, SwitchEditorProvider } from './switch';\nimport { IBizSlider, SliderEditorProvider } from './slider';\nimport { IBizListBox, ListBoxEditorProvider } from './list-box';\nimport { IBizAutoComplete, AutoCompleteEditorProvider } from './autocomplete';\nimport {\n IBizFileUpload,\n IBizImagePreview,\n IBizImageUpload,\n FileUploaderEditorProvider,\n} from './upload';\nimport {\n IBizPicker,\n IBizMPicker,\n IBizPickerDropDown,\n IBizPickerLink,\n IBizPickerEmbedView,\n IBizPickerSelectView,\n DataPickerEditorProvider,\n} from './data-picker';\nimport {\n IBizNumberRangePicker,\n NumberRangeEditorProvider,\n} from './number-range';\nimport { IBizDateRangePicker, DateRangeEditorProvider } from './date-range';\nimport { CodeEditorProvider, IBizCode } from './code';\nimport { HtmlEditorProvider } from './html';\nimport { MarkDownEditorProvider } from './markdown';\nimport { IBizArray, ArrayEditorProvider } from './array';\nimport { IBizCascader, CascaderEditorProvider } from './cascader';\nimport { IBizColorPicker, ColorPickerEditorProvider } from './color-picker';\nimport { IBizPresetRawitem, PresetRawitemEditorProvider } from './preset';\n\nexport const IBizEditor = {\n install: (v: App): void => {\n // 组件注册\n v.component(NotSupportedEditor.name, NotSupportedEditor);\n v.component(IBizSpan.name, IBizSpan);\n v.component(IBizSpanLink.name, IBizSpanLink);\n v.component(IBizInput.name, IBizInput);\n v.component(IBizInputNumber.name, IBizInputNumber);\n v.component(IBizInputIP.name, IBizInputIP);\n v.component(IBizDropdown.name, IBizDropdown);\n v.component(IBizCheckbox.name, IBizCheckbox);\n v.component(IBizCheckboxList.name, IBizCheckboxList);\n v.component(IBizRadio.name, IBizRadio);\n v.component(IBizDatePicker.name, IBizDatePicker);\n v.component(IBizRaw.name, IBizRaw);\n v.component(IBizStepper.name, IBizStepper);\n v.component(IBizRate.name, IBizRate);\n v.component(IBizSwitch.name, IBizSwitch);\n v.component(IBizSlider.name, IBizSlider);\n v.component(IBizListBox.name, IBizListBox);\n v.component(IBizAutoComplete.name, IBizAutoComplete);\n v.component(IBizFileUpload.name, IBizFileUpload);\n v.component(IBizImagePreview.name, IBizImagePreview);\n v.component(IBizImageUpload.name, IBizImageUpload);\n v.component(IBizPicker.name, IBizPicker);\n v.component(IBizMPicker.name, IBizMPicker);\n v.component(IBizPickerDropDown.name, IBizPickerDropDown);\n v.component(IBizPickerLink.name, IBizPickerLink);\n v.component(IBizPickerEmbedView.name, IBizPickerEmbedView);\n v.component(IBizPickerSelectView.name, IBizPickerSelectView);\n v.component(IBizNumberRangePicker.name, IBizNumberRangePicker);\n v.component(IBizDateRangePicker.name, IBizDateRangePicker);\n v.component(IBizCode.name, IBizCode);\n v.component(IBizArray.name, IBizArray);\n v.component(IBizCascader.name, IBizCascader);\n v.component(IBizColorPicker.name, IBizColorPicker);\n v.component(IBizPresetRawitem.name, IBizPresetRawitem);\n v.component(\n 'IBizHtml',\n defineAsyncComponent(() => import('./html/wang-editor/wang-editor')),\n );\n v.component(\n 'IBizMarkDown',\n defineAsyncComponent(\n () => import('./markdown/ibiz-markdown-editor/ibiz-markdown-editor'),\n ),\n );\n\n // 标签\n registerEditorProvider('SPAN', () => new SpanEditorProvider());\n registerEditorProvider(\n 'SPAN_ADDRESSPICKUP',\n () => new SpanEditorProvider(),\n );\n registerEditorProvider(\n 'SPAN_LINK',\n () => new SpanEditorProvider('SPAN_LINK'),\n );\n // 文本框\n const textBoxEditorProvider = new TextBoxEditorProvider();\n registerEditorProvider('TEXTBOX', () => textBoxEditorProvider);\n registerEditorProvider('TEXTAREA', () => textBoxEditorProvider);\n registerEditorProvider('TEXTAREA_10', () => textBoxEditorProvider);\n registerEditorProvider('PASSWORD', () => textBoxEditorProvider);\n registerEditorProvider('NUMBER', () => new TextBoxEditorProvider('NUMBER'));\n registerEditorProvider(\n 'IPADDRESSTEXTBOX',\n () => new TextBoxEditorProvider('IPADDRESSTEXTBOX'),\n );\n // 下拉列表框\n registerEditorProvider(\n 'DROPDOWNLIST',\n () => new DropDownListEditorProvider(),\n );\n // 下拉列表框(宽度100)\n registerEditorProvider(\n 'DROPDOWNLIST_100',\n () => new DropDownListEditorProvider(),\n );\n registerEditorProvider(\n 'MDROPDOWNLIST',\n () => new DropDownListEditorProvider(),\n );\n // 选项框\n registerEditorProvider('CHECKBOX', () => new CheckBoxEditorProvider());\n // 选项框列表\n registerEditorProvider(\n 'CHECKBOXLIST',\n () => new CheckBoxListEditorProvider(),\n );\n // 单选框列表\n registerEditorProvider(\n 'RADIOBUTTONLIST',\n () => new RadioButtonListEditorProvider(),\n );\n\n // 日期选择器\n const datePickerProvider = new DatePickerEditorProvider();\n registerEditorProvider('DATEPICKER', () => datePickerProvider);\n registerEditorProvider('DATEPICKEREX', () => datePickerProvider);\n registerEditorProvider('DATEPICKEREX_NOTIME', () => datePickerProvider);\n registerEditorProvider('DATEPICKEREX_HOUR', () => datePickerProvider);\n registerEditorProvider('DATEPICKEREX_MINUTE', () => datePickerProvider);\n registerEditorProvider('DATEPICKEREX_SECOND', () => datePickerProvider);\n registerEditorProvider('DATEPICKEREX_NODAY', () => datePickerProvider);\n registerEditorProvider(\n 'DATEPICKEREX_NODAY_NOSECOND',\n () => datePickerProvider,\n );\n // 文件上传\n registerEditorProvider(\n 'FILEUPLOADER',\n () => new FileUploaderEditorProvider('FILEUPLOADER'),\n );\n registerEditorProvider(\n 'FILEUPLOADER_ONE',\n () => new FileUploaderEditorProvider('FILEUPLOADER_ONE'),\n );\n // 图片上传\n registerEditorProvider(\n 'PICTURE',\n () => new FileUploaderEditorProvider('PICTURE'),\n );\n registerEditorProvider(\n 'PICTURE_ONE',\n () => new FileUploaderEditorProvider('PICTURE_ONE'),\n );\n registerEditorProvider(\n 'PICTURE_ONE_RAW',\n () => new FileUploaderEditorProvider('PICTURE_ONE_RAW'),\n );\n // 直接内容\n registerEditorProvider('RAW', () => new RawEditorProvider());\n // 步进器\n registerEditorProvider('STEPPER', () => new StepperEditorProvider());\n // 评分器\n registerEditorProvider('RATING', () => new RateEditorProvider());\n // 滑动输入条\n registerEditorProvider('SLIDER', () => new SliderEditorProvider());\n // 开关\n registerEditorProvider('SWITCH', () => new SwitchEditorProvider());\n // 列表框\n registerEditorProvider('LISTBOX', () => new ListBoxEditorProvider());\n // 列表框(选择)\n registerEditorProvider('LISTBOXPICKUP', () => new ListBoxEditorProvider());\n // 自动完成\n const AutoCompleteProvider = new AutoCompleteEditorProvider();\n registerEditorProvider('AC', () => AutoCompleteProvider);\n registerEditorProvider('AC_FS', () => AutoCompleteProvider);\n registerEditorProvider('AC_NOBUTTON', () => AutoCompleteProvider);\n registerEditorProvider('AC_FS_NOBUTTON', () => AutoCompleteProvider);\n // 数据选择类\n registerEditorProvider(\n 'PICKER',\n () => new DataPickerEditorProvider('PICKER'),\n );\n registerEditorProvider(\n 'PICKEREX_NOAC',\n () => new DataPickerEditorProvider('PICKEREX_NOAC'),\n );\n registerEditorProvider(\n 'PICKEREX_NOAC_LINK',\n () => new DataPickerEditorProvider('PICKEREX_NOAC_LINK'),\n );\n registerEditorProvider(\n 'PICKEREX_TRIGGER_LINK',\n () => new DataPickerEditorProvider('PICKEREX_TRIGGER_LINK'),\n );\n registerEditorProvider(\n 'PICKEREX_TRIGGER',\n () => new DataPickerEditorProvider('PICKEREX_TRIGGER'),\n );\n registerEditorProvider(\n 'PICKEREX_LINK',\n () => new DataPickerEditorProvider('PICKEREX_LINK'),\n );\n registerEditorProvider(\n 'ADDRESSPICKUP',\n () => new DataPickerEditorProvider('ADDRESSPICKUP'),\n );\n registerEditorProvider(\n 'ADDRESSPICKUP_AC',\n () => new DataPickerEditorProvider('ADDRESSPICKUP_AC'),\n );\n registerEditorProvider(\n 'PICKEREX_LINKONLY',\n () => new DataPickerEditorProvider('PICKEREX_LINKONLY'),\n );\n registerEditorProvider(\n 'PICKEREX_NOBUTTON',\n () => new DataPickerEditorProvider('PICKEREX_NOBUTTON'),\n );\n registerEditorProvider(\n 'PICKEREX_DROPDOWNVIEW',\n () => new DataPickerEditorProvider('PICKEREX_DROPDOWNVIEW'),\n );\n registerEditorProvider(\n 'PICKEREX_DROPDOWNVIEW_LINK',\n () => new DataPickerEditorProvider('PICKEREX_DROPDOWNVIEW_LINK'),\n );\n registerEditorProvider(\n 'PICKUPVIEW',\n () => new DataPickerEditorProvider('PICKUPVIEW'),\n );\n // 数值范围\n registerEditorProvider(\n 'NUMBERRANGE',\n () => new NumberRangeEditorProvider(),\n );\n // 时间范围\n registerEditorProvider('DATERANGE', () => new DateRangeEditorProvider());\n registerEditorProvider(\n 'DATERANGE_NOTIME',\n () => new DateRangeEditorProvider(),\n );\n // 代码编辑框\n registerEditorProvider('CODE', () => new CodeEditorProvider());\n // 富文本HTML编辑框\n registerEditorProvider('HTMLEDITOR', () => new HtmlEditorProvider());\n // MARKDOWN编辑框\n registerEditorProvider('MARKDOWN', () => new MarkDownEditorProvider());\n // 数组编辑器\n registerEditorProvider('ARRAY', () => new ArrayEditorProvider());\n // 级联选择器\n registerEditorProvider('CASCADER', () => new CascaderEditorProvider());\n // 颜色选择器\n registerEditorProvider(\n 'COLORPICKER',\n () => new ColorPickerEditorProvider(),\n );\n\n // 预置类型编辑器 `${predefinedType}_${editorType}`;\n registerEditorProvider(\n 'FIELD_IMAGE_PICTURE_ONE',\n () => new PresetRawitemEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_TEXT_DYNAMIC_SPAN',\n () => new SpanEditorProvider(),\n );\n registerEditorProvider('STATIC_LABEL_RAW', () => new RawEditorProvider());\n registerEditorProvider(\n 'FIELD_TEXTBOX_TEXTBOX',\n () => textBoxEditorProvider,\n );\n registerEditorProvider(\n 'FIELD_TEXTAREA_TEXTAREA',\n () => textBoxEditorProvider,\n );\n registerEditorProvider(\n 'FIELD_RADIOBUTTONLIST_RADIOBUTTONLIST',\n () => new RadioButtonListEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_CHECKBOXLIST_CHECKBOXLIST',\n () => new CheckBoxListEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_DROPDOWNLIST_DROPDOWNLIST',\n () => new DropDownListEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_RATING_RATING',\n () => new RateEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_SWITCH_SWITCH',\n () => new SwitchEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_SLIDER_SLIDER',\n () => new SliderEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_DATEPICKER_DATEPICKER',\n () => new DatePickerEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_DATERANGE_DATERANGE',\n () => new DateRangeEditorProvider(),\n );\n registerEditorProvider(\n 'FIELD_PICKER_PICKER',\n () => new DataPickerEditorProvider('PICKER'),\n );\n registerEditorProvider(\n 'FIELD_ARRAY_ARRAY',\n () => new ArrayEditorProvider(),\n );\n registerEditorProvider('AUTH_USERID_TEXTBOX', () => textBoxEditorProvider);\n registerEditorProvider(\n 'AUTH_PASSWORD_PASSWORD',\n () => textBoxEditorProvider,\n );\n },\n};\n\nexport default IBizEditor;\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport { computed, defineComponent, onMounted } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport './404-view.scss';\n\nexport const View404 = defineComponent({\n setup() {\n const ns = useNamespace('404-view');\n const router = useRouter();\n const route = useRoute();\n const gotoIndexView = () => {\n router.push('/');\n };\n\n onMounted(() => ibiz.util.hiddenAppLoading());\n\n const isTop = computed(() => {\n return !route.params.view1;\n });\n\n return { ns, isTop, gotoIndexView };\n },\n render() {\n return (\n <div class={[this.ns.b(), this.ns.is('top', this.isTop)]}>\n <img class={this.ns.b('img')} src='./assets/images/404.png' />\n <div class={this.ns.b('text')}>\n <div class={this.ns.be('text', 'text1')}>\n 抱歉,您访问的页面不存在!\n </div>\n {this.isTop ? (\n <div class={this.ns.be('text', 'text2')}>\n 您要找的页面不存在,请返回\n <a on-click={this.gotoIndexView}>首页</a>\n 继续浏览\n </div>\n ) : null}\n </div>\n </div>\n );\n },\n});\n","import {\n defineComponent,\n reactive,\n ref,\n resolveComponent,\n h,\n Ref,\n onMounted,\n} from 'vue';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { useRoute } from 'vue-router';\nimport { IBizContext } from '@ibiz-template/core';\nimport { IAppView } from '@ibiz/model-core';\nimport './login-view.scss';\n\ninterface LoginData {\n username: string;\n password: string;\n}\n\nconst rules = {\n username: [\n {\n required: true,\n message: '请输入账号',\n trigger: 'blur',\n },\n ],\n password: [\n {\n required: true,\n message: '请输入密码',\n trigger: 'blur',\n },\n {\n type: 'string',\n min: 6,\n message: '密码长度不能少于6位',\n trigger: 'blur',\n },\n ],\n};\n\nexport const LoginView = defineComponent({\n setup() {\n const ns = useNamespace('login-view');\n\n const loginData = reactive<LoginData>({\n username: '',\n password: '',\n });\n\n const formRef = ref<IData | null>(null);\n\n const route = useRoute();\n\n const ru = (route.query.ru as string) || '/';\n\n const hasLoginView = ref(false);\n\n const loginView: Ref<null | IAppView> = ref(null);\n\n const viewShell = resolveComponent('IBizViewShell');\n\n const context = IBizContext.create({});\n\n const params = {};\n\n const loading = ref(false);\n\n const isMounted = ref(false);\n\n const isRemember = ref(false);\n\n const appTitle = ibiz.env.AppTitle;\n\n ibiz.appData = undefined;\n ibiz.orgData = undefined;\n\n const onClick = async () => {\n formRef.value!.validate(async (vaild: boolean) => {\n if (vaild) {\n loading.value = true;\n const bol = await ibiz.auth.login(\n loginData.username,\n loginData.password,\n isRemember.value,\n );\n if (bol === true) {\n window.location.hash = ru;\n window.location.reload();\n }\n loading.value = false;\n }\n });\n };\n\n // 支持enter登录\n const onKeyUp = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onClick();\n }\n };\n\n onMounted(async () => {\n try {\n const loginViewModel = await ibiz.hub.getAppView('AppLoginView');\n if (loginViewModel) {\n loginView.value = loginViewModel;\n hasLoginView.value = true;\n }\n } catch (err) {\n ibiz.log.error(err);\n }\n ibiz.util.hiddenAppLoading();\n isMounted.value = true;\n });\n\n return () => {\n if (isMounted.value) {\n return hasLoginView.value ? (\n h(viewShell, {\n context,\n params,\n viewId: loginView.value!.id,\n })\n ) : (\n <div class={ns.b()}>\n <div class={ns.b('box')}>\n <header class={ns.b('box-header')}>\n <img src='./assets/images/login-header.png' />\n <span class={ns.b('box-header-title')}>{appTitle}</span>\n </header>\n <main class={ns.b('box-main')}>\n <img\n class={ns.be('box-main', 'avatar')}\n src='./assets/images/login-avatar.png'\n />\n <div class={ns.b('box-main-content')}>\n <el-form model={loginData} rules={rules} ref={formRef}>\n <el-form-item size='large' prop='username'>\n <el-input\n v-model={loginData.username}\n clearable\n placeholder='请输入账号'\n onKeyup={(e: KeyboardEvent) => onKeyUp(e)}\n >\n {{\n prefix: () => <ion-icon name='person'></ion-icon>,\n }}\n </el-input>\n </el-form-item>\n <el-form-item size='large' prop='password'>\n <el-input\n type='password'\n v-model={loginData.password}\n show-password\n placeholder='请输入密码'\n onKeyup={(e: KeyboardEvent) => onKeyUp(e)}\n >\n {{\n prefix: () => <ion-icon name='unlock-alt'></ion-icon>,\n }}\n </el-input>\n </el-form-item>\n <el-checkbox v-model={isRemember.value} label='记住我' />\n <el-form-item size='large'>\n <el-button\n type='primary'\n onClick={onClick}\n size='large'\n round\n loading={loading.value}\n >\n 登录\n </el-button>\n </el-form-item>\n </el-form>\n </div>\n </main>\n </div>\n </div>\n );\n }\n return null;\n };\n },\n});\n","import { IViewProvider } from '@ibiz-template/runtime';\n\n/**\n * 应用流程跟踪视图\n *\n * @export\n * @class WFStepTraceViewProvider\n * @implements {IViewProvider}\n */\nexport class WFStepTraceViewProvider implements IViewProvider {\n component: string = 'IBizWFStepTraceView';\n}\n","import { IModal, WFStepTraceViewController } from '@ibiz-template/runtime';\nimport { useNamespace, useViewController } from '@ibiz-template/vue3-util';\nimport { IAppView } from '@ibiz/model-core';\nimport { defineComponent, PropType } from 'vue';\n\nexport const WFStepTraceView = defineComponent({\n name: 'IBizWFStepTraceView',\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 },\n setup() {\n const ns = useNamespace('view');\n const c = useViewController(\n (...args) => new WFStepTraceViewController(...args),\n );\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, viewClassNames };\n },\n render() {\n return (\n <div class={this.viewClassNames}>\n <iBizExtendActionTimeLine\n data={this.c.state.historyData}\n ></iBizExtendActionTimeLine>\n </div>\n );\n },\n});\n","import { withInstall } from '@ibiz-template/vue3-util';\nimport { App } from 'vue';\nimport { registerViewProvider, ViewType } from '@ibiz-template/runtime';\nimport { WFStepTraceViewProvider } from './wf-step-trace-view.provider';\nimport { WFStepTraceView } from './wf-step-trace-view';\n\nexport const IBizWFStepTraceView = withInstall(\n WFStepTraceView,\n function (v: App) {\n v.component(WFStepTraceView.name, WFStepTraceView);\n registerViewProvider(\n ViewType.APP_WF_STEP_TRACE_VIEW,\n () => new WFStepTraceViewProvider(),\n );\n },\n);\n","import { createI18n } from 'vue-i18n';\nimport { I18n } from '@ibiz-template/core';\n\nconst i18n = createI18n({\n legacy: false,\n locale: 'zh-CN',\n});\n\nexport class IBizI18n implements I18n {\n protected html: HTMLElement;\n\n protected defaultLang: string;\n\n protected langMap: Map<string, () => Promise<IData>> = new Map();\n\n constructor() {\n this.defaultLang = 'zh-CN';\n this.html = document.querySelector('html')!;\n const lang =\n localStorage.getItem('language') ||\n navigator.language ||\n this.defaultLang;\n i18n.global.locale.value = lang;\n this.html.setAttribute('lang', lang);\n // 设置默认支持的多语言\n this.langMap.set('en', () => import('./en/index'));\n this.langMap.set('zh-CN', () => import('./zh-CN/index'));\n }\n\n /**\n * 初始化加载默认多语言文件\n *\n * @author chitanda\n * @date 2023-08-24 17:08:04\n * @return {*} {Promise<void>}\n */\n async init(): Promise<void> {\n const lang = i18n.global.locale.value;\n let p: () => Promise<IData>;\n if (this.langMap.has(lang)) {\n p = this.langMap.get(lang)!;\n } else {\n p = this.langMap.get(this.defaultLang)!;\n }\n const module = await p();\n i18n.global.setLocaleMessage(i18n.global.locale.value, module.default);\n }\n\n /**\n * 设置异步加载的多语言模块\n *\n * @author chitanda\n * @date 2023-08-24 23:08:01\n * @param {Record<string, () => Promise<IData>>} languages\n */\n setLangConfigs(languages: Record<string, () => Promise<IData>>): void {\n const keys = Object.keys(languages);\n keys.forEach(key => {\n this.langMap.set(key, languages[key]);\n });\n }\n\n /**\n * 设置\n *\n * @author chitanda\n * @date 2023-08-24 16:08:42\n * @param {string} lang\n */\n setLang(lang: string): void {\n ibiz.confirm\n .warning({\n title: '提示',\n desc: '切换语言需要刷新页面,确认切换?',\n })\n .then(() => {\n localStorage.setItem('language', lang);\n window.location.reload();\n });\n }\n\n getLang(): string {\n return this.html.getAttribute('lang') || this.defaultLang;\n }\n\n t(tag: string, options?: IParams | undefined): string;\n\n t(tag: string, defaultMsg?: string | undefined, options?: IParams): string;\n\n t(tag: unknown, defaultMsg?: unknown, options?: unknown): string {\n return i18n!.global.t(\n tag as string,\n defaultMsg as string,\n options as IParams,\n );\n }\n}\n\nconst iBizI18n = new IBizI18n();\n\nexport { i18n, iBizI18n };\n","import { RuntimeError } from '@ibiz-template/core';\nimport {\n ViewEngineBase,\n ViewController,\n IEditFormController,\n SysUIActionTag,\n EventBase,\n IEditViewState,\n IEditViewEvent,\n ControlVO,\n calcDeCodeNameById,\n OpenAppViewCommand,\n IModalData,\n getAppViewRef,\n ViewCallTag,\n} from '@ibiz-template/runtime';\nimport { IAppDEEditView } from '@ibiz/model-core';\n\nexport class EditViewEngine extends ViewEngineBase {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDEEditView,\n * IEditViewState,\n * IEditViewEvent\n * >}\n * @memberof EditViewEngine\n */\n protected declare view: ViewController<\n IAppDEEditView,\n IEditViewState,\n IEditViewEvent\n >;\n\n get form(): IEditFormController {\n return this.view.getController('form') as IEditFormController;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames, modal } = this.view;\n childNames.push('form');\n\n // 给表单加默认不加载\n if (!this.view.slotProps.form) {\n this.view.slotProps.form = {};\n }\n this.view.slotProps.form.loadDefault = false;\n\n modal.hooks.shouldDismiss.tapPromise(async context => {\n if (this.form.state.modified) {\n const isAllow = await ibiz.confirm.error({\n title: '关闭提醒',\n desc: '表单数据已经修改,确定要关闭?',\n });\n if (!isAllow) {\n context.allowClose = false;\n // return null;\n }\n }\n });\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n const { model, evt } = this.view;\n\n // 监控form事件\n const formDeId = this.form.model.appDataEntityId;\n const formDataStateChange = (event: EventBase): void => {\n const data = event.data[0];\n this.toolbar?.calcButtonState(data, formDeId);\n if (data.srfkey) {\n evt.emit('onViewInfoChange', { dataInfo: data.srfmajortext || '' });\n } else {\n evt.emit('onViewInfoChange', { dataInfo: '新建' });\n }\n };\n\n this.form.evt.on('onLoadSuccess', event => {\n formDataStateChange(event);\n evt.emit('onDataChange', { ...event, actionType: 'LOAD' });\n });\n this.form.evt.on('onLoadDraftSuccess', event => {\n formDataStateChange(event);\n evt.emit('onDataChange', { ...event, actionType: 'LOADDRAFT' });\n });\n this.form.evt.on('onSaveSuccess', event => {\n this.view.state.closeOK = true;\n const deName = calcDeCodeNameById(this.view.model.appDataEntityId!);\n const formData = event.data[0];\n if (this.view.context[deName] !== formData.srfkey) {\n this.view.context[deName] = formData.srfkey;\n }\n formDataStateChange(event);\n evt.emit('onDataChange', { ...event, actionType: 'SAVE' });\n });\n this.form.evt.on('onRemoveSuccess', event => {\n formDataStateChange(event);\n evt.emit('onDataChange', { ...event, actionType: 'REMOVE' });\n });\n\n if (!this.view.state.noLoadDefault && model.loadDefault) {\n this.load();\n }\n }\n\n getData(): IData[] {\n return this.form.getData();\n }\n\n async load(): Promise<IData> {\n return this.form.load();\n }\n\n async save(): Promise<IData> {\n return this.form.save();\n }\n\n async refresh(): Promise<void> {\n await this.load();\n // this.view.evt.emit('refreshed', [data]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<any> {\n if (key === SysUIActionTag.SAVE) {\n await this.form.save();\n return null;\n }\n if (key === SysUIActionTag.SAVE_AND_EXIT) {\n await this.form.save();\n return { closeView: true };\n }\n if (key === SysUIActionTag.REMOVE_AND_EXIT) {\n const res = await this.form.remove();\n return { closeView: res };\n }\n if (key === SysUIActionTag.SAVE_AND_NEW) {\n this.saveAndNew();\n return null;\n }\n if (key === SysUIActionTag.REFRESH) {\n await this.refresh();\n return null;\n }\n if (key === SysUIActionTag.SAVE_AND_START) {\n await this.wfStart();\n return null;\n }\n if (key === SysUIActionTag.VIEW_WF_STEP) {\n await this.wfSubmit();\n return null;\n }\n if (key === ViewCallTag.LOAD) {\n this.load();\n return null;\n }\n if (key === ViewCallTag.VALIDATE) {\n return this.form.validate();\n }\n if (key === ViewCallTag.WF_WITHDRAW) {\n await this.wfWithdraw();\n }\n return super.call(key, args);\n }\n\n /**\n * 保存并新建\n *\n * @author zk\n * @date 2023-06-01 01:06:59\n * @return {*}\n * @memberof EditViewEngine\n */\n async saveAndNew(): Promise<void> {\n await this.form.save();\n this.form.state.data = new ControlVO();\n // 置空主键\n this.view.context[calcDeCodeNameById(this.view.model.appDataEntityId!)] =\n undefined;\n await this.form.load();\n }\n\n /**\n * 工作流启动\n *\n * @author lxm\n * @date 2022-09-29 20:09:27\n * @returns {*} {Promise<void>}\n */\n async wfStart(): Promise<void> {\n // 先保存\n await this.save();\n\n const app = ibiz.hub.getApp(this.view.context.srfappid);\n const entityService = await app.deService.getService(\n this.view.model.appDataEntityId!,\n );\n\n // *获取工作流版本信息\n const res = await entityService.wf.getWFVersion();\n if (res.data.length === 0) {\n throw new RuntimeError('当前工作流版本不存在');\n }\n // todo 多个的情况要出一个确认框选择后走后续逻辑\n\n const wfInfo = res.data[0];\n const refKey = `WFSTART@${wfInfo.wfversion}`;\n\n // 处理视图上下文\n const newContext = Object.assign(this.view.context.clone(), {\n activeForm: wfInfo['process-form'],\n });\n // 处理视图参数\n const newParams = {\n processDefinitionKey: wfInfo.definitionkey,\n };\n\n // 查找工作流启动视图\n const startView = getAppViewRef(this.view.model, refKey);\n\n // *没有工作流启动视图的,自己启动工作流\n if (!startView) {\n await this.form.wfStart({ viewParam: newParams });\n await this.view.closeView();\n return;\n }\n\n // *有工作流启动视图的,由启动视图执行工作流启动\n const result: IModalData = await ibiz.commands.execute(\n OpenAppViewCommand.TAG,\n startView.refAppViewId,\n newContext,\n newParams,\n );\n\n // 启动视图正常关闭后关闭当前视图\n if (result.ok) {\n await this.view.closeView();\n }\n }\n\n /**\n * 工作流提交\n *\n * @author lxm\n * @date 2022-09-29 20:09:27\n * @returns {*} {Promise<void>}\n */\n wfSubmit(): Promise<void> {\n return this.form.wfSubmit();\n }\n\n /**\n * 工作流撤回\n *\n * @author zk\n * @date 2023-11-22 11:11:55\n * @return {*} {Promise<void>}\n * @memberof MobEditViewEngine\n */\n async wfWithdraw(): Promise<void> {\n const app = ibiz.hub.getApp(this.view.context.srfappid);\n const data = this.form.state.data;\n const entityService = await app.deService.getService(\n this.view.model.appDataEntityId!,\n );\n await entityService.wf.exec(\n 'withdraw',\n this.view.context,\n {\n ...this.view.params,\n taskId: this.view.params.taskId || this.view.params.srftaskid,\n },\n data instanceof ControlVO ? data.getOrigin() : data,\n );\n // 刷新预定义todo实体数据\n ibiz.mc.command.send({ srfdecodename: 'SysTodo' }, 'OBJECTUPDATED');\n }\n}\n","import {\n IDRBarController,\n IEditView2Event,\n IEditView2State,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { IAppDEEditView } from '@ibiz/model-core';\nimport { EditViewEngine } from './edit-view.engine';\n\n/**\n * 编辑视图2(左右关系)\n *\n * @export\n * @class EditView2Engine\n * @extends {EditViewEngine}\n */\nexport class EditView2Engine extends EditViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDEEditView,\n * IEditView2State,\n * IEditView2Event\n * >}\n * @memberof EditView2Engine\n */\n protected declare view: ViewController<\n IAppDEEditView,\n IEditView2State,\n IEditView2Event\n >;\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('drbar');\n }\n\n /**\n * 数据关系栏\n *\n * @readonly\n * @memberof EditView2Engine\n */\n get drbar(): IDRBarController {\n return this.view.getController('drbar') as IDRBarController;\n }\n}\n","import {\n IDRTabController,\n IEditView3Event,\n IEditView3State,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { IAppDEEditView } from '@ibiz/model-core';\nimport { EditViewEngine } from './edit-view.engine';\n\n/**\n * 编辑视图3(分页关系)\n *\n * @export\n * @class EditView3Engine\n * @extends {EditViewEngine}\n */\nexport class EditView3Engine extends EditViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDEEditView,\n * IEditView3State,\n * IEditView3Event\n * >}\n * @memberof EditView3Engine\n */\n protected declare view: ViewController<\n IAppDEEditView,\n IEditView3State,\n IEditView3Event\n >;\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('drtab');\n }\n\n /**\n * 数据分页栏\n *\n * @readonly\n * @memberof EditView3Engine\n */\n get drtab(): IDRTabController {\n return this.view.getController('drtab') as IDRTabController;\n }\n}\n","import {\n IDRTabController,\n IEditView4Event,\n IEditView4State,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { IAppDEEditView } from '@ibiz/model-core';\nimport { EditViewEngine } from './edit-view.engine';\n\n/**\n * 编辑视图4(上下关系)\n *\n * @export\n * @class EditView4Engine\n * @extends {EditViewEngine}\n */\nexport class EditView4Engine extends EditViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDEEditView,\n * IEditView4State,\n * IEditView4Event\n * >}\n * @memberof EditView4Engine\n */\n protected declare view: ViewController<\n IAppDEEditView,\n IEditView4State,\n IEditView4Event\n >;\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('drtab');\n }\n\n /**\n * 数据分页栏\n *\n * @readonly\n * @memberof EditView4Engine\n */\n get drtab(): IDRTabController {\n return this.view.getController('drtab') as IDRTabController;\n }\n}\n","import {\n ViewController,\n IGridViewEvent,\n IGridViewState,\n MDViewEngine,\n IGridController,\n SysUIActionTag,\n} from '@ibiz-template/runtime';\nimport { IAppDEGridView } from '@ibiz/model-core';\n\nexport class GridViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDEGridView,\n IGridViewState,\n IGridViewEvent\n >;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.NEW_ROW) {\n this.grid.newRow();\n return null;\n }\n if (key === SysUIActionTag.TOGGLE_ROW_EDIT) {\n this.grid.toggleRowEdit();\n return null;\n }\n if (key === SysUIActionTag.SAVE_ROW) {\n this.grid.save(args.data[0]);\n return null;\n }\n if (key === SysUIActionTag.SAVE) {\n this.grid.saveAll();\n return null;\n }\n\n return super.call(key, args);\n }\n\n get grid(): IGridController {\n return this.view.getController('grid') as IGridController;\n }\n\n async onCreated(): Promise<void> {\n super.onCreated();\n const { model } = this.view;\n if (!this.view.slotProps.grid) {\n this.view.slotProps.grid = {};\n }\n this.view.slotProps.grid.mdctrlActiveMode = model.gridRowActiveMode!;\n this.view.slotProps.grid.rowEditOpen = model.rowEditDefault!;\n }\n}\n","import {\n IViewController,\n ViewEngineBase,\n IIndexViewState,\n IViewEvent,\n IAppMenuController,\n ViewCallTag,\n} from '@ibiz-template/runtime';\nimport { IAppIndexView } from '@ibiz/model-core';\nimport { isEmpty, isNil } from 'ramda';\n\nexport class IndexViewEngine extends ViewEngineBase {\n protected declare view: IViewController<\n IAppIndexView,\n IIndexViewState,\n IViewEvent\n >;\n\n get appmenu(): IAppMenuController {\n return this.view.getController('appmenu') as IAppMenuController;\n }\n\n /**\n * 启用折叠\n * @author lxm\n * @date 2023-10-18 12:09:36\n * @readonly\n * @type {boolean}\n */\n get enableCollapse(): boolean {\n return (\n this.view.model.mainMenuAlign === 'LEFT' ||\n this.view.model.mainMenuAlign === undefined\n );\n }\n\n initViewState(): void {\n super.initViewState();\n this.view.state.isCollapse = false;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n this.view.childNames.push('appmenu');\n\n if (!this.view.slotProps.appmenu) {\n this.view.slotProps.appmenu = {};\n }\n this.view.slotProps.appmenu.collapse = this.view.state.isCollapse;\n\n // 设置主题色\n this.setTheme();\n\n ibiz.util.hiddenAppLoading();\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n // 屏幕宽度小于1200时折叠\n if (window.innerWidth <= 1200) {\n this.toggleCollapse();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n async call(key: string, _args: any): Promise<IData | null | undefined> {\n if (key === ViewCallTag.TOGGLE_COLLAPSE) {\n this.toggleCollapse();\n return null;\n }\n }\n\n /**\n * 切换首页视图的折叠\n * @author lxm\n * @date 2023-10-17 05:31:37\n * @protected\n */\n protected toggleCollapse(): void {\n // 非左侧菜单模式折叠功能不生效\n if (!this.enableCollapse) {\n ibiz.log.error('非左侧菜单模式折叠功能不启用');\n return;\n }\n\n // 修改视图和给应用菜单的控制变量\n this.view.state.isCollapse = !this.view.state.isCollapse;\n this.view.slotProps.appmenu.collapse = this.view.state.isCollapse;\n\n // 修改首页左侧容器宽度\n const leftContainer =\n this.view.layoutPanel?.panelItems.container_scroll_left;\n if (leftContainer) {\n if (this.view.state.isCollapse) {\n leftContainer.state.layout.width = '56px';\n } else {\n leftContainer.state.layout.width = `${leftContainer.model.width}px`;\n }\n }\n }\n\n /**\n * 根据首页viewStyle设置主题(临时)\n * @return {*}\n * @author: zhujiamin\n * @Date: 2023-09-05 15:27:15\n */\n setTheme(): void {\n const viewStyle = this.view.model.viewStyle;\n const htmlDom = document.querySelector('html');\n let themeClass = '';\n if (htmlDom && viewStyle) {\n switch (viewStyle) {\n case 'DEFAULT':\n if (!isNil(ibiz.config.theme) && !isEmpty(ibiz.config.theme)) {\n themeClass = ibiz.config.theme;\n } else {\n themeClass = 'light';\n }\n break;\n case 'STYLE2':\n themeClass = 'dark';\n break;\n case 'STYLE3':\n themeClass = 'omni-oa';\n break;\n default:\n themeClass = 'light';\n break;\n }\n htmlDom.classList.forEach(removeClass => {\n htmlDom.classList.remove(removeClass);\n });\n htmlDom.classList.add(themeClass);\n }\n }\n\n protected calcViewHeaderVisible(): boolean {\n return true;\n }\n}\n","import {\n MDViewEngine,\n ViewController,\n IListViewState,\n IListViewEvent,\n IListController,\n} from '@ibiz-template/runtime';\nimport { IAppDEListView } from '@ibiz/model-core';\n\nexport class ListViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDEListView,\n IListViewState,\n IListViewEvent\n >;\n\n get list(): IListController {\n return this.view.getController('list') as IListController;\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n const { model } = this.view;\n this.list.state.mdctrlActiveMode = model.mdctrlActiveMode!;\n }\n}\n","import {\n MDViewEngine,\n ViewController,\n IDataViewState,\n IDataViewEvent,\n IDataViewControlController,\n} from '@ibiz-template/runtime';\nimport { IAppDEDataView } from '@ibiz/model-core';\n\nexport class DataViewEngine extends MDViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEDataView, IDataViewState, IDataViewEvent>}\n * @memberof DataViewEngine\n */\n protected declare view: ViewController<\n IAppDEDataView,\n IDataViewState,\n IDataViewEvent\n >;\n\n /**\n * 数据视图(卡片)部件\n *\n * @readonly\n * @memberof DataViewEngine\n */\n get dataview(): IDataViewControlController {\n return this.view.getController('dataview') as IDataViewControlController;\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @memberof DataViewEngine\n */\n async onCreated(): Promise<void> {\n super.onCreated();\n const { model } = this.view;\n if (!this.view.slotProps.dataview) {\n this.view.slotProps.dataview = {};\n }\n this.view.slotProps.dataview.mdctrlActiveMode = model.mdctrlActiveMode!;\n }\n}\n","import {\n ViewEngineBase,\n ViewController,\n IEditFormController,\n SysUIActionTag,\n EventBase,\n IOptViewState,\n IOptViewEvent,\n ViewCallTag,\n} from '@ibiz-template/runtime';\nimport { IAppDEEditView } from '@ibiz/model-core';\n\nexport class OptViewEngine extends ViewEngineBase {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEEditView, IOptViewState, IOptViewEvent>}\n * @memberof OptViewEngine\n */\n protected declare view: ViewController<\n IAppDEEditView,\n IOptViewState,\n IOptViewEvent\n >;\n\n /**\n * 表单部件\n *\n * @readonly\n * @memberof OptViewEngine\n */\n get form(): IEditFormController {\n return this.view.getController('form') as IEditFormController;\n }\n\n /**\n * 视图created生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof OptViewEngine\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames, modal } = this.view;\n childNames.push('form');\n\n // 给表单加默认不加载\n if (!this.view.slotProps.form) {\n this.view.slotProps.form = {};\n }\n this.view.slotProps.form.loadDefault = false;\n\n modal.hooks.shouldDismiss.tapPromise(async context => {\n if (this.form.state.modified) {\n const isAllow = await ibiz.confirm.error({\n title: '关闭提醒',\n desc: '表单数据已经修改,确定要关闭?',\n });\n if (!isAllow) {\n context.allowClose = false;\n // return null;\n }\n }\n });\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof OptViewEngine\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n const { model, evt } = this.view;\n\n // 监控form事件\n const formDeId = this.form.model.appDataEntityId;\n const formDataStateChange = (event: EventBase): void => {\n const data = event.data[0];\n this.toolbar?.calcButtonState(data, formDeId);\n if (data.srfkey) {\n evt.emit('onViewInfoChange', { dataInfo: data.srfmajortext });\n }\n };\n\n this.form.evt.on('onLoadSuccess', event => {\n formDataStateChange(event);\n });\n this.form.evt.on('onLoadDraftSuccess', event => {\n formDataStateChange(event);\n });\n this.form.evt.on('onSaveSuccess', event => {\n formDataStateChange(event);\n });\n\n if (!this.view.state.noLoadDefault && model.loadDefault) {\n this.load();\n }\n }\n\n /**\n * 获取数据\n *\n * @return {*} {IData[]}\n * @memberof OptViewEngine\n */\n getData(): IData[] {\n return this.form.getData();\n }\n\n /**\n * 加载\n *\n * @memberof OptViewEngine\n */\n load(): Promise<IData> {\n return this.form.load();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<any> {\n if (key === SysUIActionTag.CANCEL) {\n this.cancel();\n return null;\n }\n if (key === SysUIActionTag.OK) {\n await this.confirm();\n return null;\n }\n if (key === ViewCallTag.LOAD) {\n this.load();\n return null;\n }\n if (key === ViewCallTag.VALIDATE) {\n return this.form.validate();\n }\n return super.call(key, args);\n }\n\n /**\n * 确认\n *\n * @memberof OptViewEngine\n */\n async confirm(): Promise<void> {\n await this.form.save();\n this.view.closeView({ ok: true, data: this.getData() });\n }\n\n /**\n * 取消\n *\n * @memberof OptViewEngine\n */\n cancel(): void {\n this.view.closeView({ ok: false, data: [] });\n }\n}\n","import {\n ViewController,\n IPickupGridViewEvent,\n IPickupGridViewState,\n IGridController,\n ViewCallTag,\n} from '@ibiz-template/runtime';\n// import { IAppDEPickupGridView } from '@ibiz/model-core';\nimport { IAppDEGridView } from '@ibiz/model-core';\nimport { GridViewEngine } from './grid-view.engine';\n// todo 缺失 IAppDEPickupGridView\nexport class PickupGridViewEngine extends GridViewEngine {\n protected declare view: ViewController<\n IAppDEGridView,\n IPickupGridViewState,\n IPickupGridViewEvent\n >;\n\n /**\n * 表格控制器\n *\n * @author zk\n * @date 2023-05-26 05:05:43\n * @readonly\n * @memberof PickupGridViewEngine\n */\n get grid(): IGridController {\n return this.view.getController('grid') as IGridController;\n }\n\n async onCreated(): Promise<void> {\n super.onCreated();\n const { model } = this.view;\n if (!this.view.slotProps.grid) {\n this.view.slotProps.grid = {};\n }\n this.view.slotProps.grid.singleSelect = this.view.state.singleSelect;\n this.view.slotProps.grid.mdctrlActiveMode = model.gridRowActiveMode!;\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n this.xdataControl.evt.on('onSelectionChange', async event => {\n this.view.evt.emit('onSelectionChange', { ...event });\n });\n this.xdataControl.evt.on('onActive', async event => {\n this.view.evt.emit('onDataActive', { ...event });\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === ViewCallTag.GET_ALL_DATA) {\n return this.grid.state.items;\n }\n return super.call(key, args);\n }\n}\n","import {\n ViewEngineBase,\n ViewController,\n IPickupViewPanelController,\n SysUIActionTag,\n IPickupViewState,\n IPickupViewEvent,\n} from '@ibiz-template/runtime';\nimport { IAppDEPickupView } from '@ibiz/model-core';\n\nexport class PickupViewEngine extends ViewEngineBase {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEPickupView, IPickupViewState, IPickupViewEvent>}\n * @memberof PickupViewEngine\n */\n protected declare view: ViewController<\n IAppDEPickupView,\n IPickupViewState,\n IPickupViewEvent\n >;\n\n /**\n * 选中数据\n *\n * @type {IData[]}\n * @memberof PickupViewEngine\n */\n selectData: IData[] = [];\n\n /**\n * 选择视图面板\n *\n * @readonly\n * @memberof PickupViewEngine\n */\n get pickupViewPanel(): IPickupViewPanelController {\n return this.view.getController(\n 'pickupviewpanel',\n ) as IPickupViewPanelController;\n }\n\n /**\n * 视图created生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof PickupViewEngine\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('pickupviewpanel');\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof PickupViewEngine\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n this.pickupViewPanel.state.singleSelect = true;\n this.pickupViewPanel.evt.on('onSelectionChange', event => {\n this.selectData = event.data;\n });\n this.pickupViewPanel.evt.on('onDataActive', event => {\n this.pickupViewPanelDataActive(event.data);\n });\n }\n\n /**\n * 选则面板激活数据\n *\n * @author zk\n * @date 2023-05-26 05:05:13\n * @param {*} data\n * @memberof PickupViewEngine\n */\n protected pickupViewPanelDataActive(data: IData[]): void {\n this.selectData = data;\n this.view.closeView({ ok: true, data: this.selectData });\n }\n\n async call(\n key: string,\n args: IData | undefined,\n ): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.CANCEL) {\n this.cancel();\n return null;\n }\n if (key === SysUIActionTag.OK) {\n this.confirm();\n return null;\n }\n return super.call(key, args);\n }\n\n /**\n * 确认\n *\n * @memberof PickupViewEngine\n */\n confirm(): void {\n this.view.closeView({ ok: true, data: this.selectData });\n }\n\n /**\n * 取消\n *\n * @memberof PickupViewEngine\n */\n cancel(): void {\n this.view.closeView({ ok: false, data: [] });\n }\n}\n","import { RuntimeModelError } from '@ibiz-template/core';\nimport {\n ViewController,\n IMPickupViewState,\n IMPickupViewEvent,\n SysUIActionTag,\n IListController,\n} from '@ibiz-template/runtime';\nimport { IAppDEPickupView } from '@ibiz/model-core';\nimport { PickupViewEngine } from './pickup-view.engine';\n\n/**\n * 多数据选择视图引擎\n *\n * @author zk\n * @date 2023-05-25 03:05:17\n * @export\n * @class MPickupViewEngine\n * @extends {ViewEngineBase}\n */\nexport class MPickupViewEngine extends PickupViewEngine {\n protected declare view: ViewController<\n IAppDEPickupView,\n IMPickupViewState,\n IMPickupViewEvent\n >;\n\n /**\n * 简单列表控制器\n *\n * @author zk\n * @date 2023-05-26 03:05:43\n * @readonly\n * @memberof MPickupViewEngine\n */\n get simpleList(): IListController {\n return this.view.getController('simplelist') as IListController;\n }\n\n /**\n * 视图created生命周期执行逻辑\n *\n * @author zk\n * @date 2023-05-26 05:05:36\n * @return {*} {Promise<void>}\n * @memberof MPickupViewEngine\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n if (!this.view.providers.simplelist) {\n throw new RuntimeModelError(\n this.view.model,\n '缺少配置叫simplelist的列表部件',\n );\n }\n\n const { childNames } = this.view;\n childNames.push('simplelist');\n // 设置回显selectedData\n if (this.view.params.selectedData) {\n this.selectData = JSON.parse(this.view.params.selectedData);\n delete this.view.params.selectedData;\n }\n if (!this.view.slotProps.simplelist) {\n this.view.slotProps.simplelist = {};\n }\n if (!this.view.slotProps.pickupviewpanel) {\n this.view.slotProps.pickupviewpanel = {};\n }\n this.view.slotProps.simplelist.mdctrlActiveMode = 2;\n this.view.slotProps.simplelist.isSimple = true;\n this.view.slotProps.simplelist.singleSelect = false;\n this.view.slotProps.pickupviewpanel.singleSelect = false;\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @author zk\n * @date 2023-05-26 05:05:27\n * @return {*} {Promise<void>}\n * @memberof MPickupViewEngine\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n // 列表激活取消选中\n this.simpleList.evt.on('onActive', event => {\n this.simpleListActive(event.data);\n });\n // 默认回显选中数据\n this.simpleList.setData(this.selectData);\n }\n\n async call(\n key: string,\n args: IData | undefined,\n ): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.CANCEL) {\n this.cancel();\n return null;\n }\n if (key === SysUIActionTag.OK) {\n this.confirm();\n return null;\n }\n if (key === SysUIActionTag.ADD_SELECTION) {\n this.addSelection();\n return null;\n }\n if (key === SysUIActionTag.ADD_ALL) {\n this.addAll();\n return null;\n }\n if (key === SysUIActionTag.REMOVE_ALL) {\n this.removeAll();\n return null;\n }\n if (key === SysUIActionTag.REMOVE_SELECTION) {\n this.removeSelection();\n return null;\n }\n return super.call(key, args);\n }\n\n /**\n * 选则面板激活数据\n *\n * @author zk\n * @date 2023-05-26 05:05:13\n * @param {*} data\n * @memberof PickupViewEngine\n */\n protected pickupViewPanelDataActive(data: IData[]): void {\n this.handlePushSimpleListItems(data);\n }\n\n /**\n * 列表激活\n *\n * @author zk\n * @date 2023-05-26 05:05:47\n * @param {IData[]} data\n * @memberof MPickupViewEngine\n */\n protected simpleListActive(data: IData[]): void {\n const items = this.simpleList.getAllData();\n data.forEach(item => {\n const index = items.findIndex(_item => _item.srfkey === item.srfkey);\n if (index !== -1) {\n items.splice(index, 1);\n }\n });\n this.simpleList.setData(items);\n }\n\n /**\n * 添加选中\n *\n * @author zk\n * @date 2023-05-25 05:05:10\n * @memberof MPickupViewEngine\n */\n async addSelection(): Promise<void> {\n const selectItem = await this.pickupViewPanel.getSelectedData();\n this.handlePushSimpleListItems(selectItem);\n }\n\n /**\n * 处理添加简单列表数据\n *\n * @author zk\n * @date 2023-05-26 02:05:41\n * @param {IData[]} data\n * @memberof MPickupViewEngine\n */\n protected handlePushSimpleListItems(data: IData[]): void {\n const allData = this.simpleList.getAllData();\n const items = [...allData, ...data];\n // 去重items\n const uniqueItems = this.handleUniqueItems(items);\n this.simpleList.setData(uniqueItems);\n }\n\n /**\n * 去重数组\n *\n * @author zk\n * @date 2023-05-26 03:05:08\n * @param {IData[]} arr\n * @return {*}\n * @memberof MPickupViewEngine\n */\n protected handleUniqueItems(arr: IData[]): IData[] {\n const res = new Map();\n return arr.filter(\n (item: IData) => !res.has(item.srfkey) && res.set(item.srfkey, 1),\n );\n }\n\n /**\n * 添加所有\n *\n * @author zk\n * @date 2023-05-25 05:05:12\n * @memberof MPickupViewEngine\n */\n async addAll(): Promise<void> {\n const allItems = await this.pickupViewPanel.getAllData();\n this.handlePushSimpleListItems(allItems);\n }\n\n /**\n * 删除所有\n *\n * @author zk\n * @date 2023-05-25 05:05:14\n * @memberof MPickupViewEngine\n */\n removeAll(): void {\n this.simpleList.setData([]);\n }\n\n /**\n * 删除选中\n *\n * @author zk\n * @date 2023-05-25 05:05:16\n * @memberof MPickupViewEngine\n */\n protected removeSelection(): void {\n const selectData = this.simpleList.getData();\n const items = this.simpleList.getAllData();\n selectData.forEach((_item: IData) => {\n const index = items.findIndex(\n (item: IData) => _item.srfkey === item.srfkey,\n );\n if (index !== -1) {\n items.splice(index, 1);\n }\n });\n this.simpleList.setData(items);\n }\n\n /**\n * 提交\n *\n * @author zk\n * @date 2023-05-25 06:05:42\n * @memberof MPickupViewEngine\n */\n confirm(): void {\n const items = this.simpleList.getAllData();\n this.view.closeView({ ok: true, data: items });\n }\n}\n","import {\n ViewController,\n ITreeViewEvent,\n ITreeViewState,\n MDViewEngine,\n ITreeController,\n SysUIActionTag,\n} from '@ibiz-template/runtime';\nimport { IAppDETreeView } from '@ibiz/model-core';\n\nexport class TreeViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDETreeView,\n ITreeViewState,\n ITreeViewEvent\n >;\n\n get tree(): ITreeController {\n return this.view.getController('tree') as ITreeController;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n if (!this.view.slotProps.tree) {\n this.view.slotProps.tree = {};\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.REFRESH_ALL) {\n await this.tree.refresh();\n return null;\n }\n // 有数据刷新子节点,没数据刷新所有\n if (key === SysUIActionTag.REFRESH) {\n if (args?.data?.[0]) {\n await this.tree.refreshNodeChildren(args.data[0], false);\n } else {\n await this.tree.refresh();\n }\n return null;\n }\n if (key === SysUIActionTag.REFRESH_PARENT) {\n await this.tree.refreshNodeChildren(args.data[0], true);\n return null;\n }\n return super.call(key, args);\n }\n}\n","import { ModelError } from '@ibiz-template/core';\nimport {\n ViewEngineBase,\n ViewController,\n ITabExpPanelController,\n ITabExpViewEvent,\n ITabExpViewState,\n calcDeCodeNameById,\n} from '@ibiz-template/runtime';\nimport {\n IAppDETabExplorerView,\n IPanelContainer,\n IPanelItem,\n} from '@ibiz/model-core';\n\nexport class TabExpViewEngine extends ViewEngineBase {\n /**\n * 分页面板视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDETabExplorerView,\n * ITabExpViewState,\n * ITabExpViewEvent\n * >}\n * @memberof TabExpViewEngine\n */\n protected declare view: ViewController<\n IAppDETabExplorerView,\n ITabExpViewState,\n ITabExpViewEvent\n >;\n\n /**\n * 分页导航面板\n *\n * @readonly\n * @memberof TabExpViewEngine\n */\n get tabExpPanel(): ITabExpPanelController {\n return this.view.getController('tabexppanel') as ITabExpPanelController;\n }\n\n /**\n * 视图created生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof TabExpViewEngine\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('tabexppanel');\n if (!this.view.slotProps.tabexppanel) {\n this.view.slotProps.tabexppanel = {};\n }\n this.view.slotProps.tabexppanel.defaultTabName = this.view.state.srfnav;\n this.preprocessTabExpModelLayout();\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n await this.loadEntityData();\n }\n\n async loadEntityData(): Promise<void> {\n // 分页导航没有主键不加载\n const deName = calcDeCodeNameById(this.view.model.appDataEntityId!);\n if (!this.view.context[deName]) {\n return;\n }\n return super.loadEntityData();\n }\n\n /**\n * 根据视图模型配置方向决定分页面板部件位置方向\n *\n * @author zk\n * @date 2023-09-20 05:09:37\n * @protected\n * @memberof TabExpViewEngine\n */\n protected preprocessTabExpModelLayout(): void {\n const findPanelItem = (\n name: string,\n items: IPanelItem[] = this.view.model.viewLayoutPanel!.rootPanelItems!,\n ): IPanelItem | undefined => {\n if (items?.length) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // 判断当前元素是否为目标子成员\n if (item.id === name) {\n return item; // 找到目标子成员,返回\n }\n // 如果当前元素包含panelItems属性,并且panelItems是一个非空数组,则递归查找子成员\n const container = item as IPanelContainer;\n if (container.panelItems && container.panelItems.length > 0) {\n const result = findPanelItem(name, container.panelItems);\n if (result) {\n return result; // 找到目标子成员,返回\n }\n }\n }\n }\n return undefined;\n };\n\n const findPanelItemsAndDelete = (\n names: string[],\n items: IPanelItem[] = this.view.model.viewLayoutPanel!.rootPanelItems!,\n ) => {\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // 判断当前元素是否为目标子成员\n if (names.includes(item.id!)) {\n items.splice(i, 1);\n }\n // 如果当前元素包含panelItems属性,并且panelItems是一个非空数组,则递归删除成员\n const container = item as IPanelContainer;\n if (container.panelItems && container.panelItems.length > 0) {\n findPanelItemsAndDelete(names, container.panelItems);\n }\n }\n };\n\n const setTabExpModelLayout = (name: string): void => {\n // 预制分页面板\n const tabexppanel = findPanelItem('tabexppanel');\n if (!tabexppanel) {\n throw new ModelError(\n this.view.model.viewLayoutPanel!,\n `未找到tabexppanel布局占位`,\n );\n }\n // 实际分页面板容器\n const layoutContainer = findPanelItem(name);\n if (!layoutContainer) {\n throw new ModelError(\n this.view.model.viewLayoutPanel!,\n `未找到${name}布局容器`,\n );\n }\n (layoutContainer as IPanelContainer).panelItems = [tabexppanel];\n };\n const { tabLayout } = this.view.model as IAppDETabExplorerView;\n // 需删除的容器数组\n const deleteItems: string[] = [\n 'view_tabexppanel',\n 'view_tabexppanel_left',\n 'view_tabexppanel_bottom',\n 'view_tabexppanel_right',\n ];\n // 配置方向的部件容器名称\n let containerName: string = 'view_tabexppanel';\n switch (tabLayout) {\n case 'LEFT':\n containerName = 'view_tabexppanel_left';\n deleteItems.splice(1, 1);\n break;\n case 'BOTTOM':\n containerName = 'view_tabexppanel_bottom';\n deleteItems.splice(2, 1);\n break;\n case 'RIGHT':\n containerName = 'view_tabexppanel_right';\n deleteItems.splice(3, 1);\n break;\n case 'TOP':\n deleteItems.splice(0, 1);\n break;\n default:\n deleteItems.splice(0, 1);\n break;\n }\n // 设置分页导航面板布局\n setTabExpModelLayout(containerName);\n // 删除多余布局模型\n findPanelItemsAndDelete(deleteItems);\n }\n\n /**\n * 计算视图头部元素的显示与否\n * 所有部件容器名称均为:view_部件名称\n *\n * @author lxm\n * @date 2023-06-06 07:16:26\n * @protected\n */\n protected calcViewHeaderVisible(): boolean {\n let showHeader = super.calcViewHeaderVisible();\n\n const { tabLayout } = this.view.model;\n // 只有上方显示分页的时候,且有分页导航面板时显示头部\n if ((tabLayout === undefined || tabLayout === 'TOP') && this.tabExpPanel) {\n showHeader = true;\n }\n return showHeader;\n }\n}\n","import { recursiveIterate } from '@ibiz-template/core';\nimport {\n ViewController,\n IExpBarControlController,\n IExpViewState,\n IExpViewEvent,\n MDViewEngine,\n IMDControlController,\n EventBase,\n MDCtrlLoadParams,\n getControl,\n} from '@ibiz-template/runtime';\nimport {\n IAppDEExplorerView,\n IAppDEMultiDataView,\n IPanelContainer,\n} from '@ibiz/model-core';\n\ntype IAppDEMultiDataExpView = IAppDEExplorerView & IAppDEMultiDataView;\n\n/**\n * 导航视图引擎基类\n *\n * @author zk\n * @date 2023-05-30 06:05:44\n * @export\n * @class ExpViewEngine\n * @extends {ViewEngineBase}\n */\nexport class ExpViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDEMultiDataExpView,\n IExpViewState,\n IExpViewEvent\n >;\n\n /**\n * 导航栏部件名称\n *\n * @author zk\n * @date 2023-05-30 06:05:34\n * @readonly\n * @type {string}\n * @memberof ExpViewEngine\n */\n get expBarName(): string {\n throw Error('子类实现');\n }\n\n /**\n * 表格导航栏部件控制器\n *\n * @author zk\n * @date 2023-05-29 04:05:32\n * @readonly\n * @memberof GridExpViewEngine\n */\n get expBar(): IExpBarControlController {\n return this.view.getController(this.expBarName) as IExpBarControlController;\n }\n\n /**\n * 数据部件控制器(多数据)\n * @author lxm\n * @date 2023-05-22 01:56:35\n * @readonly\n * @type {IMDControlController}\n */\n protected get xdataControl(): IMDControlController {\n return this.expBar.xDataController;\n }\n\n /**\n * 组件创建\n *\n * @author zk\n * @date 2023-05-29 04:05:56\n * @memberof GridExpViewEngine\n */\n async onCreated(): Promise<void> {\n super.onCreated();\n this.modifySplitContainer();\n const { childNames } = this.view;\n childNames.push(this.expBarName);\n\n if (!this.view.slotProps[this.expBarName]) {\n this.view.slotProps[this.expBarName] = {};\n }\n this.view.slotProps[this.expBarName].loadDefault = false;\n this.view.slotProps[this.expBarName].srfnav = this.view.state.srfnav;\n }\n\n /**\n * 修改导航容器的模型(适配导航栏上配置的高宽)\n * @author lxm\n * @date 2023-08-31 03:35:44\n * @protected\n */\n protected modifySplitContainer(): void {\n const expBarModel = getControl(this.view.model, this.expBarName)!;\n const { width, height } = expBarModel;\n\n // 都没配的时候不处理\n if (!width && !height) {\n return;\n }\n recursiveIterate(\n this.view.model.viewLayoutPanel!,\n (container: IPanelContainer) => {\n if (container.id === 'view_exp_split') {\n if (width) {\n container.panelItems![0].layoutPos!.width = width;\n }\n if (height) {\n container.panelItems![0].layoutPos!.height = height;\n }\n }\n },\n {\n childrenFields: ['rootPanelItems', 'panelItems', 'panelTabPages'],\n },\n );\n }\n\n protected async onXDataActive(_event: EventBase): Promise<void> {\n // 导航激活不触发openData,由导航栏内部自己处理激活后的导航逻辑\n }\n\n protected getSearchParams(): IParams {\n const params = super.getSearchParams();\n if (this.expBar.state.query) {\n params.query = this.expBar.state.query;\n }\n return params;\n }\n\n protected async load(_args?: MDCtrlLoadParams): Promise<void> {\n await this.expBar.load();\n }\n}\n","import {\n IGridExpViewEvent,\n IGridExpViewState,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { IAppDEGridExplorerView } from '@ibiz/model-core';\nimport { ExpViewEngine } from './exp-view.engine';\n/**\n * 表格导航视图引擎\n *\n * @author zk\n * @date 2023-05-30 09:05:54\n * @export\n * @class GridExpViewEngine\n * @extends {ExpViewEngine}\n */\nexport class GridExpViewEngine extends ExpViewEngine {\n /**\n * 视图泛型\n *\n * @author zk\n * @date 2023-05-30 10:05:59\n * @protected\n * @type {ViewController<IAppDEGridExplorerView,IGridExpViewState,IGridExpViewEvent\n * >}\n * @memberof GridExpViewEngine\n */\n protected declare view: ViewController<\n IAppDEGridExplorerView,\n IGridExpViewState,\n IGridExpViewEvent\n >;\n\n /**\n * 表格导航栏部件名称\n *\n * @author zk\n * @date 2023-05-30 06:05:21\n * @readonly\n * @type {string}\n * @memberof GridExpViewEngine\n */\n get expBarName(): string {\n return 'gridexpbar';\n }\n}\n","import {\n IListExpViewEvent,\n IListExpViewState,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { IAppDEListExplorerView } from '@ibiz/model-core';\nimport { ExpViewEngine } from './exp-view.engine';\n/**\n * 列表导航视图引擎\n *\n * @author zk\n * @date 2023-05-30 09:05:09\n * @export\n * @class ListExpViewEngine\n * @extends {ExpViewEngine}\n */\nexport class ListExpViewEngine extends ExpViewEngine {\n /**\n * 视图泛型\n *\n * @author zk\n * @date 2023-05-30 10:05:59\n * @protected\n * @type {ViewController<IAppDEListExplorerView,IListExpViewState,IListExpViewEvent\n * >}\n * @memberof ListExpViewEngine\n */\n protected declare view: ViewController<\n IAppDEListExplorerView,\n IListExpViewState,\n IListExpViewEvent\n >;\n\n /**\n * 列表导航栏部件名称\n *\n * @author zk\n * @date 2023-05-30 06:05:21\n * @readonly\n * @type {string}\n * @memberof ListExpViewEngine\n */\n get expBarName(): string {\n return 'listexpbar';\n }\n}\n","import { IAppDEDataViewExplorerView } from '@ibiz/model-core';\n\nimport {\n IDataViewExpViewState,\n IDataViewExpViewEvent,\n ViewController,\n} from '@ibiz-template/runtime';\nimport { ExpViewEngine } from './exp-view.engine';\n/**\n * 卡片导航视图引擎\n *\n * @author zk\n * @date 2023-05-30 09:05:54\n * @export\n * @class DataViewExpViewEngine\n * @extends {ExpViewEngine}\n */\nexport class DataViewExpViewEngine extends ExpViewEngine {\n /**\n * 视图泛型\n *\n * @author zk\n * @date 2023-05-30 10:05:59\n * @protected\n * @type {ViewController<IAppDEDataViewExplorerView,IDataViewExpViewState,IDataViewExpViewEvent\n * >}\n * @memberof DataViewExpViewEngine\n */\n protected declare view: ViewController<\n IAppDEDataViewExplorerView,\n IDataViewExpViewState,\n IDataViewExpViewEvent\n >;\n\n /**\n * 卡片导航视图导航栏部件名称\n *\n * @author zk\n * @date 2023-05-30 06:05:53\n * @readonly\n * @type {string}\n * @memberof DataViewExpViewEngine\n */\n get expBarName(): string {\n return 'dataviewexpbar';\n }\n}\n","import {\n ViewController,\n ITreeExpViewEvent,\n ITreeExpViewState,\n SysUIActionTag,\n ITreeController,\n} from '@ibiz-template/runtime';\nimport { IAppDETreeExplorerView } from '@ibiz/model-core';\nimport { ExpViewEngine } from './exp-view.engine';\n\nexport class TreeExpViewEngine extends ExpViewEngine {\n /**\n * 树导航视图控制器\n */\n protected declare view: ViewController<\n IAppDETreeExplorerView,\n ITreeExpViewState,\n ITreeExpViewEvent\n >;\n\n /**\n * 树导航栏部件名称\n *\n * @author lxm\n * @date 2023-08-31 03:43:02\n * @readonly\n * @type {string}\n */\n get expBarName(): string {\n return 'treeexpbar';\n }\n\n /**\n * 树部件控制器\n *\n * @readonly\n * @memberof TreeExpViewEngine\n */\n get tree(): ITreeController {\n return this.expBar.xDataController as ITreeController;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.REFRESH_ALL) {\n await this.tree.refresh();\n return null;\n }\n // 有数据刷新子节点,没数据刷新所有\n if (key === SysUIActionTag.REFRESH) {\n if (args?.data?.[0]) {\n await this.tree.refreshNodeChildren(args.data[0], false);\n } else {\n await this.tree.refresh();\n }\n return null;\n }\n if (key === SysUIActionTag.REFRESH_PARENT) {\n await this.tree.refreshNodeChildren(args.data[0], true);\n return null;\n }\n return super.call(key, args);\n }\n}\n","import {\n ViewEngineBase,\n ViewController,\n IWizardViewState,\n IWizardViewEvent,\n IWizardPanelController,\n} from '@ibiz-template/runtime';\nimport { IAppDEWizardView } from '@ibiz/model-core';\n\nexport class WizardViewEngine extends ViewEngineBase {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEWizardView, IWizardViewState, IWizardViewEvent>}\n * @memberof WizardViewEngine\n */\n protected declare view: ViewController<\n IAppDEWizardView,\n IWizardViewState,\n IWizardViewEvent\n >;\n\n /**\n * 数据视图(卡片)部件\n *\n * @readonly\n * @memberof WizardViewEngine\n */\n get wizardPanel(): IWizardPanelController {\n return this.view.getController('wizardpanel') as IWizardPanelController;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('wizardpanel');\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @memberof WizardViewEngine\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n if (!this.view.slotProps.wizardpanel) {\n this.view.slotProps.wizardpanel = {};\n }\n\n this.wizardPanel.initialize();\n\n this.wizardPanel.evt.on('onFinishSuccess', _event => {\n this.view.closeView({ ok: true, data: [] });\n });\n }\n}\n","import {\n ViewController,\n IChartViewEvent,\n IChartViewState,\n MDViewEngine,\n IChartController,\n} from '@ibiz-template/runtime';\nimport { IAppDEChartView } from '@ibiz/model-core';\n\nexport class ChartViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDEChartView,\n IChartViewState,\n IChartViewEvent\n >;\n\n /**\n * 多数据部件名称\n * @author lxm\n * @date 2023-06-07 09:17:19\n * @readonly\n * @type {string}\n */\n get xdataControlName(): string {\n return 'chart';\n }\n\n get chart(): IChartController {\n return this.view.getController('chart') as IChartController;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n if (!this.view.slotProps.chart) {\n this.view.slotProps.chart = {};\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport { RuntimeModelError } from '@ibiz-template/core';\nimport {\n ViewController,\n IWFDynaEditViewState,\n IWFDynaEditViewEvent,\n WFLink,\n IModalData,\n OpenAppViewCommand,\n IAppDEService,\n IEditFormController,\n getControl,\n getWFSubmitViewId,\n} from '@ibiz-template/runtime';\nimport { IAppDEWFDynaEditView, IDEEditForm } from '@ibiz/model-core';\nimport { createUUID } from 'qx-util';\nimport { EditViewEngine } from './edit-view.engine';\n\nexport class WFDynaEditViewEngine extends EditViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEWFDynaEditView, IWFDynaEditViewState, IWFDynaEditViewEvent>}\n * @memberof WFDynaEditViewEngine\n */\n protected declare view: ViewController<\n IAppDEWFDynaEditView,\n IWFDynaEditViewState,\n IWFDynaEditViewEvent\n >;\n\n /**\n * 流程表单是否可编辑\n *\n * @author lxm\n * @date 2022-09-29 15:09:16\n * @type {boolean}\n */\n isEditable: boolean = false;\n\n /**\n * 是否计算工作流工具栏\n * @author lxm\n * @date 2023-06-20 06:33:37\n * @type {boolean}\n */\n isCalcWFToolbar: boolean = true;\n\n /**\n * 实体服务\n * @author lxm\n * @date 2023-06-19 07:09:38\n * @type {IAppDEService}\n */\n entityService!: IAppDEService;\n\n /**\n * 当前激活表单模型\n *\n * @author lxm\n * @date 2022-09-29 17:09:44\n * @type {IDEEditForm}\n */\n processForm!: IDEEditForm;\n\n get form(): IEditFormController {\n return this.view.getController(\n this.processForm.name!,\n ) as IEditFormController;\n }\n\n /**\n * 工作流links\n *\n * @author lxm\n * @date 2022-10-08 16:10:53\n * @type {WFLink[]}\n */\n wfLinks: WFLink[] = [];\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n\n // 实体服务\n const app = ibiz.hub.getApp(this.view.context.srfappid);\n this.entityService = await app.deService.getService(\n this.view.model.appDataEntityId!,\n );\n\n // 第一次计算\n await this.calcProcessForm();\n const { childNames } = this.view;\n childNames.push(this.processForm.name!);\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n\n this.toolbar?.evt.on('onClick', async event => {\n if (event.buttonType === 'extra' && event.eventArg) {\n this.onLinkClick(event.eventArg);\n }\n });\n }\n\n async load(): Promise<IData> {\n const res = await super.load();\n if (this.isCalcWFToolbar) {\n this.calcWfToolbar();\n }\n return res;\n }\n\n /**\n * 刷新页面\n *\n * @author lxm\n * @date 2022-09-29 15:09:03\n * @returns {*} {Promise<void>}\n */\n async refresh(): Promise<void> {\n const previous = this.processForm;\n await this.calcProcessForm();\n // 表单没有变化的时候调用表单的刷新\n if (previous === this.processForm) {\n await super.refresh();\n }\n }\n\n /**\n * 计算流程步骤表单的名称\n * @author lxm\n * @date 2023-06-20 06:24:21\n * @return {*} {Promise<string>}\n */\n async calcProcessFormName(): Promise<string> {\n const res = await this.entityService.wf.getWFStep(this.view.params);\n this.isEditable = res.data.isEditable === 'true';\n const key = `process-${ibiz.env.isMob ? 'mob' : ''}form`;\n const processForm = res.data[key] ? `wfform_${res.data[key]}` : 'form';\n return processForm;\n }\n\n /**\n * 计算当前步骤的表单\n *\n * @author lxm\n * @date 2022-09-29 15:09:07\n * @returns {*} {Promise<void>}\n */\n async calcProcessForm(): Promise<void> {\n const processForm = await this.calcProcessFormName();\n const formModel = getControl(this.view.model, processForm.toLowerCase());\n if (!formModel) {\n throw new RuntimeModelError(\n this.view.model,\n `找不到表单${processForm}的模型`,\n );\n }\n this.processForm = formModel;\n\n if (!this.view.slotProps.form) {\n this.view.slotProps.form = {};\n }\n this.view.slotProps.form.modelData = this.processForm;\n }\n\n /**\n * 计算工作流工具栏,需要在表单加载回来之后执行\n *\n * @author lxm\n * @date 2022-09-30 19:09:44\n * @returns {*} {Promise<void>}\n */\n async calcWfToolbar(): Promise<void> {\n if (!this.toolbar) {\n throw new RuntimeModelError(this.view.model, '缺少工具栏部件模型');\n }\n this.toolbar.clearExtraButtons();\n\n const app = ibiz.hub.getApp(this.view.context.srfappid);\n const entityService = await app.deService.getService(\n this.view.model.appDataEntityId!,\n );\n\n const res = await entityService.wf.getWFLink(\n Object.assign(this.view.context.clone(), {\n taskDefinitionKey: this.view.params.taskDefinitionKey,\n }),\n this.getData()[0].getOrigin(),\n );\n this.wfLinks = res.data as WFLink[];\n // 创建按钮唯一标识\n this.wfLinks.forEach((item: WFLink) => {\n item.id = createUUID();\n });\n const extraButtons = this.wfLinks.map(link => {\n return {\n id: link.id,\n caption: link.sequenceFlowName,\n buttonType: 'extra',\n tooltip: link.sequenceFlowName,\n showCaption: true,\n } as const;\n });\n this.toolbar.setExtraButtons('before', extraButtons);\n }\n\n /**\n * 工作流工具栏点击回调处理\n *\n * @author lxm\n * @date 2022-10-08 17:10:29\n * @param {id} link 点击按钮对应的id\n * @returns {*} {Promise<void>}\n */\n async onLinkClick(id: string): Promise<void> {\n const link = this.wfLinks.find(wfLink => {\n return wfLink.id === id;\n });\n if (link) {\n return this.wfSubmitByLink(link);\n }\n }\n\n /**\n * 根据工作流link处理工作流提交\n *\n * @param {WFLink} link\n * @returns {*}\n * @memberof WFDynaEditViewController\n */\n async wfSubmitByLink(link: WFLink): Promise<void> {\n // 流程表单可以编辑才会先保存\n if (this.isEditable) {\n await this.save();\n }\n\n // 处理视图上下文\n const newContext = Object.assign(this.view.context.clone(), {\n isEditable: this.isEditable,\n activeForm: link.sequenceflowform,\n });\n // 处理视图参数\n const newParams = {\n ...link,\n };\n\n const submitView = getWFSubmitViewId(this.view.model, link);\n\n // *没有工作流操作视图的,自己提交工作流\n if (!submitView) {\n await this.form.wfSubmit({ viewParam: newParams });\n await this.view.closeView();\n return;\n }\n\n // *有工作流操作视图的,由提交视图执行工作流提交\n const result: IModalData = await ibiz.commands.execute(\n OpenAppViewCommand.TAG,\n submitView,\n newContext,\n newParams,\n );\n\n // 提交视图正常关闭后关闭当前视图\n if (result.ok) {\n await this.view.closeView();\n }\n }\n}\n","/* eslint-disable no-restricted-syntax */\nimport {\n ViewController,\n IWFDynaEditView3State,\n IWFDynaEditView3Event,\n IDRTabController,\n} from '@ibiz-template/runtime';\nimport { IAppDEWFDynaEditView } from '@ibiz/model-core';\nimport { WFDynaEditViewEngine } from './wf-dyna-edit-view.engine';\n\nexport class WFDynaEditView3Engine extends WFDynaEditViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEWFDynaEditView3, IWFDynaEditView3State, IWFDynaEditView3Event>}\n * @memberof WFDynaEditView3Engine\n */\n protected declare view: ViewController<\n IAppDEWFDynaEditView,\n IWFDynaEditView3State,\n IWFDynaEditView3Event\n >;\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('drtab');\n }\n\n /**\n * 数据分页栏\n *\n * @readonly\n * @memberof EditView3Engine\n */\n get drtab(): IDRTabController {\n return this.view.getController('drtab') as IDRTabController;\n }\n}\n","import {\n ViewController,\n IWFDynaActionViewState,\n IWFDynaActionViewEvent,\n SysUIActionTag,\n} from '@ibiz-template/runtime';\nimport { IAppDEWFDynaActionView } from '@ibiz/model-core';\nimport { WFDynaEditViewEngine } from './wf-dyna-edit-view.engine';\n\nexport class WFDynaActionViewEngine extends WFDynaEditViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEWFDynaActionView, IWFDynaActionViewState, IWFDynaActionViewEvent>}\n * @memberof WFDynaActionViewEngine\n */\n protected declare view: ViewController<\n IAppDEWFDynaActionView,\n IWFDynaActionViewState,\n IWFDynaActionViewEvent\n >;\n\n isCalcWFToolbar = false;\n\n async calcProcessFormName(): Promise<string> {\n this.isEditable = this.view.context.isEditable === 'true';\n const processForm = this.view.context.processForm\n ? `wfform_${this.view.context.processForm}`\n : 'form';\n return processForm;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.OK) {\n this.onOkButtonClick();\n return null;\n }\n if (key === SysUIActionTag.CANCEL) {\n await this.onCancelButtonClick();\n return null;\n }\n return super.call(key, args);\n }\n\n /**\n * 确认按钮回调\n *\n * @author lxm\n * @date 2022-09-12 20:09:13\n */\n async onOkButtonClick(): Promise<void> {\n // 先保存数据在提交工作流\n if (this.view.context.isEditable) {\n await this.save();\n } else {\n // 如果不需要调用保存需手动 将修改状态置空\n this.form.state.modified = false;\n }\n await this.form.wfSubmit({});\n await this.view.closeView({ ok: true, data: this.getData() });\n }\n\n /**\n * 取消按钮回调\n *\n * @author lxm\n * @date 2022-09-12 20:09:00\n */\n async onCancelButtonClick(): Promise<void> {\n await this.view.closeView({ ok: false, data: [] });\n }\n}\n","import {\n ViewController,\n IWFDynaStartViewState,\n IWFDynaStartViewEvent,\n SysUIActionTag,\n} from '@ibiz-template/runtime';\nimport { IAppDEWFDynaStartView } from '@ibiz/model-core';\nimport { WFDynaEditViewEngine } from './wf-dyna-edit-view.engine';\n\nexport class WFDynaStartViewEngine extends WFDynaEditViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEWFDynaStartView, IWFDynaStartViewState, IWFDynaStartViewEvent>}\n * @memberof WFDynaStartViewEngine\n */\n protected declare view: ViewController<\n IAppDEWFDynaStartView,\n IWFDynaStartViewState,\n IWFDynaStartViewEvent\n >;\n\n isCalcWFToolbar = false;\n\n async calcProcessFormName(): Promise<string> {\n this.isEditable = this.view.context.isEditable === 'true';\n const processForm = this.view.context.processForm\n ? `wfform_${this.view.context.processForm}`\n : 'form';\n return processForm;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.OK) {\n this.onOkButtonClick();\n return null;\n }\n if (key === SysUIActionTag.CANCEL) {\n await this.onCancelButtonClick();\n return null;\n }\n return super.call(key, args);\n }\n\n /**\n * 确认按钮回调\n *\n * @author lxm\n * @date 2022-09-12 20:09:13\n */\n async onOkButtonClick(): Promise<void> {\n await this.save();\n await this.form.wfStart({});\n await this.view.closeView({ ok: true, data: this.getData() });\n }\n\n /**\n * 取消按钮回调\n *\n * @author lxm\n * @date 2022-09-12 20:09:00\n */\n async onCancelButtonClick(): Promise<void> {\n await this.view.closeView({ ok: false, data: [] });\n }\n}\n","import {\n ViewEngineBase,\n ViewController,\n IPortalViewState,\n IPortalViewEvent,\n IWizardPanelController,\n} from '@ibiz-template/runtime';\nimport { IAppView } from '@ibiz/model-core';\n\nexport class PortalViewEngine extends ViewEngineBase {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppView, IAppPortalViewState, IAppPortalViewEvent>}\n * @memberof PortalViewEngine\n */\n protected declare view: ViewController<\n IAppView,\n IPortalViewState,\n IPortalViewEvent\n >;\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('dashboard');\n }\n\n /**\n * 数据看板部件\n *\n * @readonly\n * @memberof PortalViewEngine\n */\n get dashboard(): IWizardPanelController {\n return this.view.getController('dashboard') as IWizardPanelController;\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n // 实体看板视图加载主数据\n if (this.view.model.appDataEntityId) {\n await this.loadEntityData();\n }\n }\n}\n","import {\n ViewEngineBase,\n ViewController,\n IWizardPanelController,\n IPanelViewEvent,\n IPanelViewState,\n} from '@ibiz-template/runtime';\nimport { IAppView } from '@ibiz/model-core';\n\nexport class PanelViewEngine extends ViewEngineBase {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppView, IPanelViewState, IPanelViewEvent>}\n * @memberof PanelViewEngine\n */\n protected declare view: ViewController<\n IAppView,\n IPanelViewState,\n IPanelViewEvent\n >;\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('panel');\n }\n\n /**\n * 面板部件\n *\n * @readonly\n * @memberof PanelViewEngine\n */\n get panel(): IWizardPanelController {\n return this.view.getController('panel') as IWizardPanelController;\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n // 实体面板视图加载主数据\n if (this.view.model.appDataEntityId) {\n await this.loadEntityData();\n }\n }\n}\n","import {\n IViewController,\n ViewEngineBase,\n IViewEvent,\n IViewState,\n} from '@ibiz-template/runtime';\nimport { IAppDECustomView } from '@ibiz/model-core';\n\nexport class CustomViewEngine extends ViewEngineBase {\n protected declare view: IViewController<\n IAppDECustomView,\n IViewState,\n IViewEvent\n >;\n}\n","import {\n ViewController,\n IPickupTreeViewState,\n IPickupTreeViewEvent,\n TreeDataSetNodeData,\n ViewCallTag,\n} from '@ibiz-template/runtime';\nimport { IAppDETreeView } from '@ibiz/model-core';\nimport { TreeViewEngine } from './tree-view.engine';\n\nexport class PickupTreeViewEngine extends TreeViewEngine {\n protected declare view: ViewController<\n IAppDETreeView,\n IPickupTreeViewState,\n IPickupTreeViewEvent\n >;\n\n /**\n * 创建完成\n *\n * @author zk\n * @date 2023-05-26 05:05:35\n * @memberof PickupGridViewEngine\n */\n async onCreated(): Promise<void> {\n super.onCreated();\n if (!this.view.slotProps.tree) {\n this.view.slotProps.tree = {};\n }\n this.view.slotProps.tree.singleSelect = this.view.state.singleSelect;\n }\n\n /**\n * 挂载完成\n *\n * @author zk\n * @date 2023-05-26 10:05:13\n * @memberof PickupGridViewEngine\n */\n async onMounted(): Promise<void> {\n const { model } = this.view;\n this.xdataControl.evt.on('onSelectionChange', async event => {\n if (event.data[0] && event.data[0] instanceof TreeDataSetNodeData) {\n event.data[0] = event.data[0].deData;\n }\n this.view.evt.emit('onSelectionChange', { ...event });\n });\n this.xdataControl.evt.on('onActive', async event => {\n this.view.evt.emit('onDataActive', { ...event });\n });\n // 默认加载\n if (!this.view.state.noLoadDefault && model.loadDefault) {\n this.load();\n }\n }\n\n async call(\n key: string,\n args: IData | undefined,\n ): Promise<IData | null | undefined> {\n if (key === ViewCallTag.GET_ALL_DATA) {\n return this.tree.state.items;\n }\n return super.call(key, args);\n }\n}\n","import {\n ViewController,\n IPickupDataViewEvent,\n IPickupDataViewState,\n IDataViewControlController,\n ViewCallTag,\n} from '@ibiz-template/runtime';\nimport { IAppDEDataView } from '@ibiz/model-core';\nimport { DataViewEngine } from './data-view.engine';\n\nexport class PickupDataViewEngine extends DataViewEngine {\n protected declare view: ViewController<\n IAppDEDataView,\n IPickupDataViewState,\n IPickupDataViewEvent\n >;\n\n /**\n * 表格控制器\n *\n * @author zk\n * @date 2023-05-26 05:05:43\n * @readonly\n * @memberof PickupDataViewViewEngine\n */\n get dataview(): IDataViewControlController {\n return this.view.getController('dataview') as IDataViewControlController;\n }\n\n async onCreated(): Promise<void> {\n super.onCreated();\n this.view.slotProps.dataview.singleSelect = this.view.state.singleSelect;\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n this.xdataControl.evt.on('onSelectionChange', async event => {\n this.view.evt.emit('onSelectionChange', { ...event });\n });\n this.xdataControl.evt.on('onActive', async event => {\n this.view.evt.emit('onDataActive', { ...event });\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === ViewCallTag.GET_ALL_DATA) {\n return this.dataview.state.items;\n }\n return super.call(key, args);\n }\n}\n","import { ITreeExpBarController } from '@ibiz-template/runtime';\nimport { PickupViewEngine } from './pickup-view.engine';\n\nexport class PickupView2Engine extends PickupViewEngine {\n /**\n * 树导航栏\n *\n * @readonly\n * @memberof TreeExpViewEngine\n */\n get treeExpBar(): ITreeExpBarController {\n return this.view.getController('treeexpbar') as ITreeExpBarController;\n }\n\n /**\n * 视图created生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof PickupView2Engine\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('treeexpbar');\n if (!this.view.slotProps.treeexpbar) {\n this.view.slotProps.treeexpbar = {};\n }\n this.view.slotProps.treeexpbar.noNeedNavView = true;\n\n if (!this.view.slotProps.pickupviewpanel) {\n this.view.slotProps.pickupviewpanel = {};\n }\n this.view.slotProps.pickupviewpanel.noLoadDefault = true;\n this.view.slotProps.pickupviewpanel.singleSelect = true;\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof PickupView2Engine\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n this.treeExpBar.load();\n this.treeExpBar.evt.on('onNavViewChange', event => {\n this.view.slotProps.pickupviewpanel.context = event.navViewMsg.context;\n this.view.slotProps.pickupviewpanel.params = {\n ...this.view.params,\n ...event.navViewMsg.params,\n };\n });\n }\n}\n","import {\n ViewController,\n ICalendarViewEvent,\n ICalendarViewState,\n MDViewEngine,\n} from '@ibiz-template/runtime';\nimport { IAppDECalendarView } from '@ibiz/model-core';\n\nexport class CalendarViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDECalendarView,\n ICalendarViewState,\n ICalendarViewEvent\n >;\n}\n","import {\n ViewController,\n ViewEngineBase,\n ICalendarExpBarController,\n ICalendarExpViewEvent,\n ICalendarExpViewState,\n} from '@ibiz-template/runtime';\nimport { IAppDECalendarExplorerView } from '@ibiz/model-core';\n\nexport class CalendarExpViewEngine extends ViewEngineBase {\n /**\n * 日历导航视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDECalendarExplorerView,\n * ICalendarExpViewState,\n * ICalendarExpViewEvent\n * >}\n * @memberof CalendarExpViewEngine\n */\n protected declare view: ViewController<\n IAppDECalendarExplorerView,\n ICalendarExpViewState,\n ICalendarExpViewEvent\n >;\n\n /**\n * 树导航栏\n *\n * @readonly\n * @memberof CalendarExpViewEngine\n */\n get calendarExpBar(): ICalendarExpBarController {\n return this.view.getController(\n 'calendarexpbar',\n ) as ICalendarExpBarController;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('calendarexpbar');\n if (!this.view.slotProps.calendarexpbar) {\n this.view.slotProps.calendarexpbar = {};\n }\n this.view.slotProps.calendarexpbar.srfnav = this.view.state.srfnav;\n }\n\n async onMounted(): Promise<void> {\n await super.onMounted();\n const { model } = this.view;\n // 默认加载\n if (!this.view.state.noLoadDefault && model.loadDefault) {\n this.calendarExpBar.load();\n }\n }\n}\n","import { ITreeExpBarController } from '@ibiz-template/runtime';\nimport { MPickupViewEngine } from './mpickup-view-engine';\n\n/**\n * 多数据选择视图(左右关系)引擎\n *\n * @author zk\n * @date 2023-05-25 03:05:17\n * @export\n * @class MPickupViewEngine\n * @extends {ViewEngineBase}\n */\nexport class MPickupView2Engine extends MPickupViewEngine {\n /**\n * 树导航栏\n *\n * @readonly\n * @memberof TreeExpViewEngine\n */\n get treeExpBar(): ITreeExpBarController {\n return this.view.getController('treeexpbar') as ITreeExpBarController;\n }\n\n /**\n * 视图created生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof PickupView2Engine\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('treeexpbar');\n if (!this.view.slotProps.treeexpbar) {\n this.view.slotProps.treeexpbar = {};\n }\n this.view.slotProps.treeexpbar.noNeedNavView = true;\n this.view.slotProps.pickupviewpanel.noLoadDefault = true;\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @return {*} {Promise<void>}\n * @memberof PickupView2Engine\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n this.treeExpBar.load();\n this.treeExpBar.evt.on('onNavViewChange', event => {\n this.view.slotProps.pickupviewpanel.context = event.navViewMsg.context;\n this.view.slotProps.pickupviewpanel.params = event.navViewMsg.params;\n });\n }\n}\n","import {\n MDViewEngine,\n ViewController,\n IKanbanViewState,\n IKanbanViewEvent,\n IKanbanController,\n} from '@ibiz-template/runtime';\nimport { IAppDEKanbanView } from '@ibiz/model-core';\n\nexport class KanbanViewEngine extends MDViewEngine {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<IAppDEKanbanView, IKanbanViewState, IKanbanViewEvent>}\n * @memberof KanbanViewEngine\n */\n protected declare view: ViewController<\n IAppDEKanbanView,\n IKanbanViewState,\n IKanbanViewEvent\n >;\n\n /**\n * 数据视图(卡片)部件\n *\n * @readonly\n * @memberof KanbanViewEngine\n */\n get kanbanview(): IKanbanController {\n return this.view.getController('kanban') as IKanbanController;\n }\n\n /**\n * 视图mounted生命周期执行逻辑\n *\n * @memberof KanbanViewEngine\n */\n async onCreated(): Promise<void> {\n super.onCreated();\n const { model } = this.view;\n if (!this.view.slotProps.kanban) {\n this.view.slotProps.kanban = {};\n }\n this.view.slotProps.kanban.mdctrlActiveMode = model.mdctrlActiveMode!;\n }\n}\n","import {\n ViewController,\n IFormPickupDataViewState,\n IFormPickupDataViewEvent,\n} from '@ibiz-template/runtime';\nimport { IAppDEDataView } from '@ibiz/model-core';\nimport { PickupDataViewEngine } from './pickup-data-view.engine';\n\nexport class FormPickupDataViewEngine extends PickupDataViewEngine {\n protected declare view: ViewController<\n IAppDEDataView,\n IFormPickupDataViewState,\n IFormPickupDataViewEvent\n >;\n}\n","import {\n SysUIActionTag,\n ViewController,\n ViewEngineBase,\n} from '@ibiz-template/runtime';\nimport { RouteLocationNormalizedLoaded, useRoute } from 'vue-router';\nimport { IPanelField } from '@ibiz/model-core';\nimport { PanelFieldController } from '@ibiz-template/vue3-util';\n\nexport class LoginViewEngine extends ViewEngineBase {\n route: RouteLocationNormalizedLoaded = useRoute();\n\n get AppLoginView(): ViewController {\n return this.view.getController('AppLoginView') as ViewController;\n }\n\n async onMounted(): Promise<void> {\n super.onMounted();\n\n // 支持enter登录\n document.addEventListener('keydown', this.enterKeyListener);\n }\n\n async onDestroyed(): Promise<void> {\n super.onDestroyed();\n // 移除全局事件监听以避免内存泄漏\n document.removeEventListener('keydown', this.enterKeyListener);\n }\n\n async call(key: string, args: IData = {}): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.LOGIN) {\n await this.login(args);\n }\n if (key === SysUIActionTag.CANCEL_CHANGES) {\n await this.cancelChanges();\n }\n return super.call(key, args);\n }\n\n async login(args: IData): Promise<void> {\n let rememberme;\n if (\n this.AppLoginView.layoutPanel &&\n typeof this.AppLoginView.layoutPanel.data.isRemember === 'boolean'\n ) {\n rememberme = this.AppLoginView.layoutPanel.data.isRemember;\n }\n const bol = await ibiz.auth.login(\n args.data[0].username,\n args.data[0].password,\n rememberme,\n );\n if (bol === true) {\n window.location.hash = (this.route.query.ru as string) || '/';\n window.location.reload();\n }\n }\n\n async cancelChanges(): Promise<void> {\n if (this.AppLoginView.layoutPanel) {\n Object.keys(this.AppLoginView.layoutPanel.panelItems).forEach(key => {\n const controller = this.AppLoginView.layoutPanel!.panelItems[\n key\n ] as PanelFieldController;\n const { viewFieldName } = controller.model as IPanelField;\n if (viewFieldName) {\n controller.setDataValue('', viewFieldName);\n }\n });\n }\n }\n\n private enterKeyListener = async (event: KeyboardEvent) => {\n if (event.key === 'Enter' && this.AppLoginView.layoutPanel) {\n const args = {\n data: [\n {\n username: this.AppLoginView.layoutPanel.data.username,\n password: this.AppLoginView.layoutPanel.data.password,\n },\n ],\n };\n await this.login(args);\n }\n };\n}\n","import {\n ViewController,\n ITreeGridExViewEvent,\n ITreeGridExViewState,\n MDViewEngine,\n} from '@ibiz-template/runtime';\nimport { IAppDETreeGridExView } from '@ibiz/model-core';\n\nexport class TreeGridExViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDETreeGridExView,\n ITreeGridExViewState,\n ITreeGridExViewEvent\n >;\n}\n","import {\n ViewController,\n ITreeGridViewEvent,\n ITreeGridViewState,\n} from '@ibiz-template/runtime';\nimport { IAppDETreeGridView } from '@ibiz/model-core';\nimport { GridViewEngine } from './grid-view.engine';\n\nexport class TreeGridViewEngine extends GridViewEngine {\n protected declare view: ViewController<\n IAppDETreeGridView,\n ITreeGridViewState,\n ITreeGridViewEvent\n >;\n\n /**\n * 多数据部件名称\n *\n * @author zk\n * @date 2023-10-07 06:10:44\n * @readonly\n * @type {string}\n * @memberof TreeGridViewEngine\n */\n get xdataControlName(): string {\n return 'treegrid';\n }\n}\n","import {\n ViewController,\n IMEditView9Event,\n IMEditView9State,\n MDViewEngine,\n IMEditViewPanelController,\n SysUIActionTag,\n} from '@ibiz-template/runtime';\nimport { IAppDEMEditView } from '@ibiz/model-core';\n\nexport class MEditView9Engine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDEMEditView,\n IMEditView9State,\n IMEditView9Event\n >;\n\n /**\n * 多数据部件名称\n * @author lxm\n * @date 2023-06-07 09:17:19\n * @readonly\n * @type {string}\n */\n get xdataControlName(): string {\n return 'meditviewpanel';\n }\n\n get meditviewpanel(): IMEditViewPanelController {\n return this.view.getController(\n 'meditviewpanel',\n ) as IMEditViewPanelController;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n if (!this.view.slotProps.meditviewpanel) {\n this.view.slotProps.meditviewpanel = {};\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.NEW) {\n await this.meditviewpanel.handleAdd();\n return null;\n }\n if (key === SysUIActionTag.REFRESH) {\n return null;\n }\n return super.call(key, args);\n }\n}\n","import {\n ViewController,\n ViewEngineBase,\n IChartExpBarController,\n IChartExpViewEvent,\n IChartExpViewState,\n} from '@ibiz-template/runtime';\nimport { IAppDEChartExplorerView } from '@ibiz/model-core';\n\nexport class ChartExpViewEngine extends ViewEngineBase {\n /**\n * 图表导航视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDEChartExplorerView,\n * IChartExpViewState,\n * IChartExpViewEvent\n * >}\n * @memberof ChartExpViewEngine\n */\n protected declare view: ViewController<\n IAppDEChartExplorerView,\n IChartExpViewState,\n IChartExpViewEvent\n >;\n\n /**\n * 图表导航栏\n *\n * @readonly\n * @memberof ChartExpViewEngine\n */\n get chartExpBar(): IChartExpBarController {\n return this.view.getController('chartexpbar') as IChartExpBarController;\n }\n\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('chartexpbar');\n if (!this.view.slotProps.chartexpbar) {\n this.view.slotProps.chartexpbar = {};\n }\n this.view.slotProps.chartexpbar.srfnav = this.view.state.srfnav;\n }\n}\n","import {\n ViewController,\n IMapViewEvent,\n IMapViewState,\n MDViewEngine,\n IMapController,\n} from '@ibiz-template/runtime';\nimport { IAppDEMapView } from '@ibiz/model-core';\n\nexport class MapViewEngine extends MDViewEngine {\n protected declare view: ViewController<\n IAppDEMapView,\n IMapViewState,\n IMapViewEvent\n >;\n\n get map(): IMapController {\n return this.view.getController('map') as IMapController;\n }\n\n async onCreated(): Promise<void> {\n super.onCreated();\n if (!this.view.slotProps.map) {\n this.view.slotProps.map = {};\n }\n }\n}\n","import {\n IReportPanelController,\n IReportViewEvent,\n IReportViewState,\n ISearchBarController,\n ISearchFormController,\n SysUIActionTag,\n ViewController,\n ViewEngineBase,\n} from '@ibiz-template/runtime';\nimport { IAppDEReportView } from '@ibiz/model-core';\n\nexport class ReportViewEngine extends ViewEngineBase {\n /**\n * 视图控制器\n *\n * @protected\n * @type {ViewController<\n * IAppDEReportView,\n * IReportViewState,\n * IReportViewEvent\n * >}\n * @memberof EditViewEngine\n */\n protected declare view: ViewController<\n IAppDEReportView,\n IReportViewState,\n IReportViewEvent\n >;\n\n /**\n * 搜索表单控制器\n *\n * @readonly\n */\n protected get searchForm(): ISearchFormController {\n return this.view.getController('searchform') as ISearchFormController;\n }\n\n /**\n * 搜索栏控制器\n *\n * @readonly\n */\n protected get searchBar(): ISearchBarController {\n return this.view.getController('searchbar') as ISearchBarController;\n }\n\n /**\n * 报表部件\n *\n * @readonly\n */\n get reportpanel(): IReportPanelController {\n return this.view.getController('reportpanel') as IReportPanelController;\n }\n\n /**\n * 初始化\n *\n * @return {*} {Promise<void>}\n * @memberof ReportViewEngine\n */\n async onCreated(): Promise<void> {\n await super.onCreated();\n const { childNames } = this.view;\n childNames.push('searchform', 'searchbar', 'reportpanel');\n if (!this.view.slotProps.reportpanel) {\n this.view.slotProps.reportpanel = {};\n }\n }\n\n /**\n * 挂载\n *\n * @return {*} {Promise<void>}\n * @memberof ReportViewEngine\n */\n async onMounted(): Promise<void> {\n await super.onMounted();\n const { model } = this.view;\n\n this.reportpanel.evt.on('onBeforeLoad', () => {\n this.reportpanel.state.searchParams = this.getSearchParams();\n });\n\n this.reportpanel.evt.on('onLoadSuccess', event => {\n this.view.evt.emit('onDataChange', { ...event, actionType: 'LOAD' });\n });\n // 计算是否默认展开搜索表单\n const controller = this.viewLayoutPanel!.panelItems.view_searchform;\n if (controller) {\n const formExists = !!this.searchForm;\n controller.state.keepAlive = formExists;\n controller.state.visible = formExists && !!model.expandSearchForm;\n }\n\n // 搜索表单搜索触发加载\n if (this.searchForm) {\n this.searchForm.evt.on('onSearch', () => {\n this.reLoad();\n });\n }\n\n // 搜索栏搜索触发加载\n if (this.searchBar) {\n this.searchBar.evt.on('onSearch', () => {\n this.reLoad();\n });\n }\n\n if (!this.view.state.noLoadDefault && model.loadDefault) {\n this.load();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n async call(key: string, args: any): Promise<IData | null | undefined> {\n if (key === SysUIActionTag.REFRESH) {\n await this.refresh();\n return null;\n }\n if (key === SysUIActionTag.SEARCH) {\n await this.searchForm.search();\n return null;\n }\n if (key === SysUIActionTag.RESET) {\n await this.searchForm.reset();\n return null;\n }\n return super.call(key, args);\n }\n\n /**\n * 获取数据\n *\n * @return {*} {IData[]}\n * @memberof ReportViewEngine\n */\n getData(): IData[] {\n return this.reportpanel.getData();\n }\n\n /**\n * 加载数据\n *\n * @return {*} {Promise<IData>}\n * @memberof ReportViewEngine\n */\n async load(): Promise<IData> {\n return this.reportpanel.load();\n }\n\n /**\n * 视图重新加载\n *\n * @return {*} {Promise<void>}\n */\n protected async reLoad(): Promise<void> {\n await this.reportpanel.load({ isInitialLoad: true });\n }\n\n /**\n * 刷新\n *\n * @return {*} {Promise<void>}\n * @memberof ReportViewEngine\n */\n async refresh(): Promise<void> {\n await this.load();\n }\n\n /**\n * 获取搜索相关的查询参数\n *\n * @return {*} {IParams}\n */\n protected getSearchParams(): IParams {\n const params: IParams = {};\n // 有搜索表单的整合相关参数\n if (this.searchForm) {\n Object.assign(params, this.searchForm.getFilterParams());\n }\n // 有搜索栏的整合相关参数\n if (this.searchBar) {\n Object.assign(params, this.searchBar.getFilterParams());\n }\n return params;\n }\n\n /**\n *计算视图头部实现是否显示\n *\n * @protected\n * @return {*} {boolean}\n * @memberof ReportViewEngine\n */\n protected calcViewHeaderVisible(): boolean {\n let showHeader = super.calcViewHeaderVisible();\n // 搜索栏\n if (!this.searchBar || !this.searchBar.state.visible) {\n const controller = this.viewLayoutPanel!.panelItems.view_searchbar;\n if (controller) {\n controller.state.visible = false;\n }\n } else {\n showHeader = true;\n }\n return showHeader;\n }\n\n /**\n * 切换搜索表单的显示与否\n *\n * @protected\n */\n protected toggleFilter(): void {\n if (this.searchForm) {\n const searchformContainer =\n this.viewLayoutPanel!.panelItems.view_searchform;\n if (searchformContainer) {\n searchformContainer.state.visible = !searchformContainer.state.visible;\n }\n }\n }\n}\n","import { IViewController } from '@ibiz-template/runtime';\nimport { App } from 'vue';\nimport { EditViewEngine } from './edit-view.engine';\nimport { EditView2Engine } from './edit-view2.engine';\nimport { EditView3Engine } from './edit-view3.engine';\nimport { EditView4Engine } from './edit-view4.engine';\nimport { GridViewEngine } from './grid-view.engine';\nimport { IndexViewEngine } from './index-view.engine';\nimport { ListViewEngine } from './list-view.engine';\nimport { DataViewEngine } from './data-view.engine';\nimport { OptViewEngine } from './opt-view.engine';\nimport { PickupGridViewEngine } from './pickup-grid-view.engine';\nimport { PickupViewEngine } from './pickup-view.engine';\nimport { MPickupViewEngine } from './mpickup-view-engine';\nimport { TreeViewEngine } from './tree-view.engine';\nimport { TabExpViewEngine } from './tab-exp-view.engine';\nimport { GridExpViewEngine } from './grid-exp-view.engine';\nimport { ListExpViewEngine } from './list-exp-view.engine';\nimport { DataViewExpViewEngine } from './data-view-exp-view.engine';\nimport { TreeExpViewEngine } from './tree-exp-view.engine';\nimport { WizardViewEngine } from './wizard-view-engine';\nimport { ChartViewEngine } from './chart-view.engine';\nimport { WFDynaEditView3Engine } from './wf-dyna-edit-view3.engine';\nimport { WFDynaActionViewEngine } from './wf-dyna-action-view.engine';\nimport { WFDynaStartViewEngine } from './wf-dyna-start-view.engine';\nimport { PortalViewEngine } from './portal-view-engine';\nimport { PanelViewEngine } from './panel-view-engine';\nimport { CustomViewEngine } from './custom-view.engine';\nimport { PickupTreeViewEngine } from './pickup-tree-view.engine';\nimport { PickupDataViewEngine } from './pickup-data-view.engine';\nimport { PickupView2Engine } from './pickup-view2.engine';\nimport { CalendarViewEngine } from './calendar-view.engine';\nimport { CalendarExpViewEngine } from './calendar-exp-view.engine';\nimport { MPickupView2Engine } from './mpickup-view2-engine';\nimport { KanbanViewEngine } from './kanban-view.engine';\nimport { FormPickupDataViewEngine } from './form-pickup-data-view.engine';\nimport { LoginViewEngine } from './login-view.engine';\nimport { TreeGridExViewEngine } from './tree-grid-ex-view.engine';\nimport { TreeGridViewEngine } from './tree-grid-view.engine';\nimport { MEditView9Engine } from './medit-view9.engine';\nimport { ChartExpViewEngine } from './chart-exp-view.engine';\nimport { MapViewEngine } from './map-view.engine';\nimport { ReportViewEngine } from './report-view.engine';\n\nexport * from './grid-view.engine';\nexport * from './index-view.engine';\nexport * from './data-view.engine';\nexport * from './opt-view.engine';\nexport * from './tab-exp-view.engine';\nexport * from './tree-exp-view.engine';\n\nexport const IBizViewEngine = {\n install: (_v: App): void => {\n ibiz.engine.register(\n `VIEW_AppIndexView`,\n (c: IViewController) => new IndexViewEngine(c),\n );\n ibiz.engine.register(\n `VIEW_APPINDEXVIEW`,\n (c: IViewController) => new IndexViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_GridView',\n (c: IViewController) => new GridViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_ListView',\n (c: IViewController) => new ListViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_TreeView',\n (c: IViewController) => new TreeViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_EditView',\n (c: IViewController) => new EditViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_EditView2',\n (c: IViewController) => new EditView2Engine(c),\n );\n ibiz.engine.register(\n 'VIEW_EditView3',\n (c: IViewController) => new EditView3Engine(c),\n );\n ibiz.engine.register(\n 'VIEW_EditView4',\n (c: IViewController) => new EditView4Engine(c),\n );\n ibiz.engine.register(\n 'VIEW_DataView',\n (c: IViewController) => new DataViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_OptionView',\n (c: IViewController) => new OptViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_PickupGridView',\n (c: IViewController) => new PickupGridViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_PickupTreeView',\n (c: IViewController) => new PickupTreeViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEPICKUPVIEW2',\n (c: IViewController) => new PickupView2Engine(c),\n );\n ibiz.engine.register(\n 'VIEW_PickupView',\n (c: IViewController) => new PickupViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_MPickupView',\n (c: IViewController) => new MPickupViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEMPICKUPVIEW2',\n (c: IViewController) => new MPickupView2Engine(c),\n );\n ibiz.engine.register(\n 'VIEW_TabExpView',\n (c: IViewController) => new TabExpViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_GridExpView',\n (c: IViewController) => new GridExpViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_ListExpView',\n (c: IViewController) => new ListExpViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DataViewExpView',\n (c: IViewController) => new DataViewExpViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_ChartView',\n (c: IViewController) => new ChartViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_TreeExpView',\n (c: IViewController) => new TreeExpViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_WizardView',\n (c: IViewController) => new WizardViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEWFDYNAEDITVIEW3',\n (c: IViewController) => new WFDynaEditView3Engine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEWFDYNAACTIONVIEW',\n (c: IViewController) => new WFDynaActionViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEWFDYNASTARTVIEW',\n (c: IViewController) => new WFDynaStartViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_APPPORTALVIEW',\n (c: IViewController) => new PortalViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEPORTALVIEW',\n (c: IViewController) => new PortalViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_PortalView9',\n (c: IViewController) => new PortalViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_PortalView',\n (c: IViewController) => new PortalViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEPANELVIEW',\n (c: IViewController) => new PanelViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DECUSTOMVIEW',\n (c: IViewController) => new CustomViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEPICKUPDATAVIEW',\n (c: IViewController) => new PickupDataViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEINDEXPICKUPDATAVIEW',\n (c: IViewController) => new PickupDataViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DECALENDARVIEW',\n (c: IViewController) => new CalendarViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_CalendarExpView',\n (c: IViewController) => new CalendarExpViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_FormPickupDataView',\n (c: IViewController) => new FormPickupDataViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_KanBanView',\n (c: IViewController) => new KanbanViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_APPLOGINVIEW',\n (c: IViewController) => new LoginViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_TreeGridExView',\n (c: IViewController) => new TreeGridExViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DETREEGRIDVIEW',\n (c: IViewController) => new TreeGridViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DECHARTEXPVIEW',\n (c: IViewController) => new ChartExpViewEngine(c),\n );\n\n // 注册部件视图\n ibiz.engine.register(\n 'VIEW_GridView9',\n (c: IViewController) => new GridViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_ListView9',\n (c: IViewController) => new ListViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_EditView9',\n (c: IViewController) => new EditViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DataView9',\n (c: IViewController) => new DataViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_TreeView9',\n (c: IViewController) => new TreeViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DETABEXPVIEW9',\n (c: IViewController) => new TabExpViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_PortalView9',\n (c: IViewController) => new PortalViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEPORTALVIEW9',\n (c: IViewController) => new PortalViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEMEDITVIEW9',\n (c: IViewController) => new MEditView9Engine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEMAPVIEW',\n (c: IViewController) => new MapViewEngine(c),\n );\n ibiz.engine.register(\n 'VIEW_DEREPORTVIEW',\n (c: IViewController) => new ReportViewEngine(c),\n );\n },\n};\n","/*! Element Plus v2.4.2 */\n\nvar zhCn = {\n name: \"zh-cn\",\n el: {\n colorpicker: {\n confirm: \"\\u786E\\u5B9A\",\n clear: \"\\u6E05\\u7A7A\"\n },\n datepicker: {\n now: \"\\u6B64\\u523B\",\n today: \"\\u4ECA\\u5929\",\n cancel: \"\\u53D6\\u6D88\",\n clear: \"\\u6E05\\u7A7A\",\n confirm: \"\\u786E\\u5B9A\",\n selectDate: \"\\u9009\\u62E9\\u65E5\\u671F\",\n selectTime: \"\\u9009\\u62E9\\u65F6\\u95F4\",\n startDate: \"\\u5F00\\u59CB\\u65E5\\u671F\",\n startTime: \"\\u5F00\\u59CB\\u65F6\\u95F4\",\n endDate: \"\\u7ED3\\u675F\\u65E5\\u671F\",\n endTime: \"\\u7ED3\\u675F\\u65F6\\u95F4\",\n prevYear: \"\\u524D\\u4E00\\u5E74\",\n nextYear: \"\\u540E\\u4E00\\u5E74\",\n prevMonth: \"\\u4E0A\\u4E2A\\u6708\",\n nextMonth: \"\\u4E0B\\u4E2A\\u6708\",\n year: \"\\u5E74\",\n month1: \"1 \\u6708\",\n month2: \"2 \\u6708\",\n month3: \"3 \\u6708\",\n month4: \"4 \\u6708\",\n month5: \"5 \\u6708\",\n month6: \"6 \\u6708\",\n month7: \"7 \\u6708\",\n month8: \"8 \\u6708\",\n month9: \"9 \\u6708\",\n month10: \"10 \\u6708\",\n month11: \"11 \\u6708\",\n month12: \"12 \\u6708\",\n weeks: {\n sun: \"\\u65E5\",\n mon: \"\\u4E00\",\n tue: \"\\u4E8C\",\n wed: \"\\u4E09\",\n thu: \"\\u56DB\",\n fri: \"\\u4E94\",\n sat: \"\\u516D\"\n },\n months: {\n jan: \"\\u4E00\\u6708\",\n feb: \"\\u4E8C\\u6708\",\n mar: \"\\u4E09\\u6708\",\n apr: \"\\u56DB\\u6708\",\n may: \"\\u4E94\\u6708\",\n jun: \"\\u516D\\u6708\",\n jul: \"\\u4E03\\u6708\",\n aug: \"\\u516B\\u6708\",\n sep: \"\\u4E5D\\u6708\",\n oct: \"\\u5341\\u6708\",\n nov: \"\\u5341\\u4E00\\u6708\",\n dec: \"\\u5341\\u4E8C\\u6708\"\n }\n },\n select: {\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n noData: \"\\u65E0\\u6570\\u636E\",\n placeholder: \"\\u8BF7\\u9009\\u62E9\"\n },\n cascader: {\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\n placeholder: \"\\u8BF7\\u9009\\u62E9\",\n noData: \"\\u6682\\u65E0\\u6570\\u636E\"\n },\n pagination: {\n goto: \"\\u524D\\u5F80\",\n pagesize: \"\\u6761/\\u9875\",\n total: \"\\u5171 {total} \\u6761\",\n pageClassifier: \"\\u9875\",\n page: \"\\u9875\",\n prev: \"\\u4E0A\\u4E00\\u9875\",\n next: \"\\u4E0B\\u4E00\\u9875\",\n currentPage: \"\\u7B2C {pager} \\u9875\",\n prevPages: \"\\u5411\\u524D {pager} \\u9875\",\n nextPages: \"\\u5411\\u540E {pager} \\u9875\",\n deprecationWarning: \"\\u4F60\\u4F7F\\u7528\\u4E86\\u4E00\\u4E9B\\u5DF2\\u88AB\\u5E9F\\u5F03\\u7684\\u7528\\u6CD5\\uFF0C\\u8BF7\\u53C2\\u8003 el-pagination \\u7684\\u5B98\\u65B9\\u6587\\u6863\"\n },\n messagebox: {\n title: \"\\u63D0\\u793A\",\n confirm: \"\\u786E\\u5B9A\",\n cancel: \"\\u53D6\\u6D88\",\n error: \"\\u8F93\\u5165\\u7684\\u6570\\u636E\\u4E0D\\u5408\\u6CD5!\"\n },\n upload: {\n deleteTip: \"\\u6309 delete \\u952E\\u53EF\\u5220\\u9664\",\n delete: \"\\u5220\\u9664\",\n preview: \"\\u67E5\\u770B\\u56FE\\u7247\",\n continue: \"\\u7EE7\\u7EED\\u4E0A\\u4F20\"\n },\n table: {\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\",\n confirmFilter: \"\\u7B5B\\u9009\",\n resetFilter: \"\\u91CD\\u7F6E\",\n clearFilter: \"\\u5168\\u90E8\",\n sumText: \"\\u5408\\u8BA1\"\n },\n tree: {\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\"\n },\n transfer: {\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n noData: \"\\u65E0\\u6570\\u636E\",\n titles: [\"\\u5217\\u8868 1\", \"\\u5217\\u8868 2\"],\n filterPlaceholder: \"\\u8BF7\\u8F93\\u5165\\u641C\\u7D22\\u5185\\u5BB9\",\n noCheckedFormat: \"\\u5171 {total} \\u9879\",\n hasCheckedFormat: \"\\u5DF2\\u9009 {checked}/{total} \\u9879\"\n },\n image: {\n error: \"\\u52A0\\u8F7D\\u5931\\u8D25\"\n },\n pageHeader: {\n title: \"\\u8FD4\\u56DE\"\n },\n popconfirm: {\n confirmButtonText: \"\\u786E\\u5B9A\",\n cancelButtonText: \"\\u53D6\\u6D88\"\n }\n }\n};\n\nexport { zhCn as default };\n","import { useNamespace } from '@ibiz-template/vue3-util';\nimport {\n Ref,\n computed,\n defineComponent,\n getCurrentInstance,\n inject,\n onMounted,\n onUnmounted,\n ref,\n unref,\n} from 'vue';\nimport './devtool-action.scss';\nimport { QXEvent } from 'qx-util';\nimport { useRouter } from 'vue-router';\nimport { DevtoolEvent } from './interface/devtool-event';\nimport { DevtoolView } from './interface/devtool-view';\n\nexport const DevtoolAction = defineComponent({\n name: 'IBizDevtoolAction',\n setup() {\n const ns = useNamespace('devtool-action');\n\n const evt: QXEvent<DevtoolEvent> = inject('devtool-evt')!;\n const items: Ref<DevtoolView[]> = ref([]);\n const activeItem: Ref<DevtoolView | null> = ref(null);\n const isShow = ref(false);\n const height = ref('');\n const activeCollapse = ref(['context', 'params']);\n\n const router = useRouter();\n const instance = getCurrentInstance()?.proxy;\n\n router.afterEach(() => {\n if (instance) {\n activeItem.value = null;\n instance.$forceUpdate();\n }\n });\n\n const getObjEntriesArray = (obj: Record<string, unknown>) => {\n if (!obj) {\n return [];\n }\n return Object.entries(obj).map(([key, value]) => {\n return {\n key,\n value:\n Object.prototype.toString.call(value) === '[object Object]'\n ? JSON.stringify(value)\n : `${value}`,\n };\n });\n };\n\n const contextArray = computed(() => {\n if (!activeItem.value) {\n return [];\n }\n return getObjEntriesArray(activeItem.value.controller.context);\n });\n\n const paramsArray = computed(() => {\n if (!activeItem.value) {\n return [];\n }\n return getObjEntriesArray(activeItem.value.controller.params);\n });\n\n const onDataChange = (data: Map<string, DevtoolView>) => {\n items.value = [...data.values()];\n };\n\n const keydownHandle = (e: KeyboardEvent) => {\n if ((e.ctrlKey || e.metaKey) && e.code === 'F12') {\n isShow.value = !isShow.value;\n }\n };\n\n const onItemClick = (item: DevtoolView) => {\n if (item.key === activeItem.value?.key) {\n activeItem.value = null;\n } else {\n activeItem.value = item;\n }\n };\n\n const copy = (value: string) => {\n if (!value) {\n return;\n }\n const result = ibiz.util.text.copy(value);\n if (result) {\n ibiz.message.success('拷贝成功!');\n } else {\n ibiz.message.error('拷贝失败,浏览器copy操作不被支持或未被启用!');\n }\n };\n\n const minimize = () => {\n height.value = '44px';\n };\n\n const expand = () => {\n height.value = '100%';\n };\n\n const close = () => {\n isShow.value = false;\n };\n\n const onMouseEnter = (item: DevtoolView) => {\n const el = unref(item.dom);\n if (el) {\n el.style.outline = '3px solid #409EFF';\n }\n };\n\n const onMouseLeave = (item: DevtoolView) => {\n const el = unref(item.dom);\n if (el) {\n el.style.outline = '';\n }\n };\n\n onMounted(() => {\n evt.on('change', onDataChange);\n document.addEventListener('keydown', keydownHandle);\n });\n\n onUnmounted(() => {\n evt.off('change', onDataChange);\n document.removeEventListener('keydown', keydownHandle);\n });\n\n return {\n ns,\n items,\n activeItem,\n height,\n isShow,\n activeCollapse,\n contextArray,\n paramsArray,\n onItemClick,\n copy,\n minimize,\n expand,\n close,\n onMouseEnter,\n onMouseLeave,\n };\n },\n render() {\n if (!this.isShow) {\n return;\n }\n\n return (\n <div class={this.ns.b()} style={{ height: this.height }}>\n {this.activeItem ? (\n <div class={this.ns.b('collapse')}>\n <el-collapse v-model={this.activeCollapse}>\n <el-collapse-item title='应用上下文' name='context'>\n {this.contextArray.map(item => (\n <div class={this.ns.b('collapse-item')}>\n <div\n class={this.ns.be('collapse-item', 'key')}\n title={item.key}\n onClick={() => this.copy(item.key)}\n >\n {item.key}\n </div>\n <div\n class={this.ns.be('collapse-item', 'value')}\n title={item.value}\n onClick={() => this.copy(item.value)}\n >\n {`:${item.value}`}\n </div>\n </div>\n ))}\n </el-collapse-item>\n <el-collapse-item title='视图参数' name='params'>\n {this.paramsArray.map(item => (\n <div class={this.ns.b('collapse-item')}>\n <div\n class={this.ns.be('collapse-item', 'key')}\n title={item.key}\n onClick={() => this.copy(item.key)}\n >\n {item.key}\n </div>\n <div\n class={this.ns.be('collapse-item', 'value')}\n title={item.value}\n onClick={() => this.copy(item.value)}\n >\n {`:${item.value}`}\n </div>\n </div>\n ))}\n </el-collapse-item>\n </el-collapse>\n </div>\n ) : null}\n <div class={this.ns.b('container')}>\n <div class={this.ns.b('header')}>\n <ion-icon name='remove-outline' onClick={this.minimize}></ion-icon>\n <ion-icon name='expand-outline' onClick={this.expand}></ion-icon>\n <ion-icon name='close-outline' onClick={this.close}></ion-icon>\n </div>\n <div class={this.ns.b('content')}>\n {this.items.map(item => {\n if (!item.controller.isActive) {\n return null;\n }\n const { caption, name } = item.controller.model;\n const text = `${caption || ''}(${name || ''})`;\n const type = this.activeItem?.key === item.key ? 'success' : '';\n return (\n <div key={item.key} class={this.ns.b('item')}>\n <el-tag\n type={type}\n class={this.ns.be('item', 'text')}\n title={text}\n onClick={() => this.onItemClick(item)}\n onMouseenter={() => this.onMouseEnter(item)}\n onMouseleave={() => this.onMouseLeave(item)}\n >\n {text}\n </el-tag>\n <div\n class={this.ns.be('item', 'button')}\n onClick={() => this.copy(name!)}\n >\n 拷贝\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n },\n});\n","import { Ref, createApp } from 'vue';\nimport { ViewController } from '@ibiz-template/runtime';\nimport { QXEvent } from 'qx-util';\nimport ElementPlus from 'element-plus';\nimport zhCn from 'element-plus/dist/locale/zh-cn.mjs';\nimport { Router } from 'vue-router';\nimport { DevtoolAction } from './devtool-action';\nimport { DevtoolEvent } from './interface/devtool-event';\nimport { DevtoolView } from './interface/devtool-view';\n\nexport class Devtool {\n /**\n * 视图map\n *\n * @author zhanghengfeng\n * @date 2023-08-28 18:08:16\n */\n viewMap = new Map<string, DevtoolView>();\n\n /**\n * 事件中心\n *\n * @author zhanghengfeng\n * @date 2023-08-28 18:08:43\n */\n evt = new QXEvent<DevtoolEvent>();\n\n /**\n * 初始化devtool工具\n *\n * @author zhanghengfeng\n * @date 2023-08-28 18:08:24\n * @param {Router} router\n */\n init(router: Router): void {\n const devtool = document.createElement('div');\n devtool.classList.add('devtool');\n document.body.append(devtool);\n const app = createApp(DevtoolAction);\n app.use(router);\n app.use(ElementPlus, {\n locale: zhCn,\n });\n app.provide('devtool-evt', this.evt);\n app.mount(devtool);\n }\n\n /**\n * 注册视图\n *\n * @author zhanghengfeng\n * @date 2023-08-28 18:08:25\n * @param {string} key\n * @param {ViewController} controller\n * @param {(Ref<HTMLElement | null>)} dom\n */\n registerView(\n key: string,\n controller: ViewController,\n dom: Ref<HTMLElement | null>,\n ): void {\n this.viewMap.set(key, {\n key,\n controller,\n dom,\n });\n this.evt.emit('change', this.viewMap);\n }\n\n /**\n * 注销视图\n *\n * @author zhanghengfeng\n * @date 2023-08-28 18:08:39\n * @param {string} key\n */\n unRegisterView(key: string): void {\n this.viewMap.delete(key);\n this.evt.emit('change', this.viewMap);\n }\n}\n\nconst devtool = new Devtool();\n\nexport { devtool };\n","import { App } from 'vue';\n\nimport {\n IBizView,\n IBizPortalView,\n IBizPanelControl,\n IBizViewLayoutPanelControl,\n} from '@ibiz-template/vue3-util';\nimport IBizCommonComponents from './common';\nimport IBizPanelComponents from './panel-component';\nimport {\n IBizAppMenuControl,\n IBizGridControl,\n IBizToolbarControl,\n IBizEditFormControl,\n IBizFormControl,\n IBizSearchFormControl,\n IBizListControl,\n IBizCaptionBarControl,\n IBizDataViewControl,\n IBizTreeControl,\n IBizPickupViewPanelControl,\n IBizTabExpPanelControl,\n IBizListExpBarControl,\n IBizGridExpBarControl,\n IBizDataViewExpBarControl,\n IBizTreeExpBarControl,\n IBizSearchBarControl,\n IBizWizardPanelControl,\n IBizChartControl,\n IBizDRBarControl,\n IBizDRTabControl,\n IBizDashboardControl,\n IBizAppMenuIconViewControl,\n IBizCalendarControl,\n IBizCalendarExpBarControl,\n IBizKanbanControl,\n IBizTreeGridExControl,\n IBizTreeGridControl,\n IBizMEditViewPanelControl,\n IBizChartExpBarControl,\n IBizMapControl,\n IBizReportPanelControl,\n} from './control';\nimport IBizEditor from './editor';\nimport { IBizWFStepTraceView } from './view';\nimport { iBizI18n } from './locale';\nimport { IBizViewEngine } from './view-engine';\n\nexport * from './common';\nexport * from './control';\nexport * from './panel-component';\nexport * from './editor';\nexport * from './view';\nexport * from './view-engine';\nexport * from './util';\nexport { devtool } from './devtool';\nexport { i18n } from './locale';\n\nexport default {\n install: (v: App): void => {\n // 公共组件\n ibiz.i18n = iBizI18n;\n ibiz.util.getExcelUtil = () => import('./util/xlsx-util/xlsx-util');\n\n v.use(IBizCommonComponents);\n v.use(IBizPanelComponents);\n v.use(IBizViewEngine);\n v.use(IBizView);\n v.use(IBizPortalView);\n v.use(IBizWFStepTraceView);\n // 部件\n v.use(IBizDataViewControl);\n v.use(IBizTreeControl);\n v.use(IBizAppMenuControl);\n v.use(IBizAppMenuIconViewControl);\n v.use(IBizGridControl);\n v.use(IBizTreeGridControl);\n v.use(IBizListControl);\n v.use(IBizChartControl);\n v.use(IBizPickupViewPanelControl);\n v.use(IBizToolbarControl);\n v.use(IBizViewLayoutPanelControl);\n v.use(IBizPanelControl);\n v.use(IBizFormControl);\n v.use(IBizListExpBarControl);\n v.use(IBizDataViewExpBarControl);\n v.use(IBizGridExpBarControl);\n v.use(IBizSearchFormControl);\n v.use(IBizEditFormControl);\n v.use(IBizCaptionBarControl);\n v.use(IBizTabExpPanelControl);\n v.use(IBizTreeExpBarControl);\n v.use(IBizSearchBarControl);\n v.use(IBizWizardPanelControl);\n v.use(IBizDRBarControl);\n v.use(IBizDRTabControl);\n v.use(IBizDashboardControl);\n v.use(IBizCalendarControl);\n v.use(IBizCalendarExpBarControl);\n v.use(IBizKanbanControl);\n v.use(IBizTreeGridExControl);\n v.use(IBizMEditViewPanelControl);\n v.use(IBizChartExpBarControl);\n v.use(IBizMapControl);\n v.use(IBizReportPanelControl);\n // 编辑器\n v.use(IBizEditor);\n },\n};\n"],"names":["IBizActionToolbar","exports","defineComponent","props","actionDetails","type","required","actionsState","caption","mode","default","setup","emit","ns","detail","e","handleClick","render","details","capLanguageRes","addSeparator","_createVNode","_resolveComponent","sysImage","command","length","map","visible","multiplier","span","spanDefault","_offset","offset","result","_span","IBizCol","layoutPos","state","useNamespace","spacingClass","computed","ns2","classArr","top","bottom","left","position","right","spacingRight","value","gridAttrs","gridLayoutPos","colXS","colXSOffset","colSM","colSMOffset","colMD","colMDOffset","colLG","calcGridSpanOffset","colLGOffset","alignStyle","calcContentAlignStyle","cssVars","lg","layout","colClass","_a","_b","_c","defaultSlot","pos","h","resolveComponent","undefined","_isSlot","s","_isVNode","IBizRow","valign","align","_dir","dir","flexDirection","justifyContent","alignItems","IBizRawItem","content","String","rawItem","contentType","rawItemContent","ref","rawItemType","includes","isImg","imgUrl","reg","playerParams","dividerParams","mute","autoplay","replay","showcontrols","contentPosition","rawItemText","convertValue","alertParams","closeabled","rawConfig","replaceAll","watch","newVal","oldVal","immediate","renderContent","_createTextVNode","path","html","IBizNoData","text","emptyTextLanguageRes","label","IBizSplit","modelValue","min","max","outerWrapper","oldOffset","isMoving","computedMin","computedMax","currentValue","initOffset","wrapperClasses","paneClasses","b","isHorizontal","anotherOffset","valueIsPx","offsetSize","px2percent","parseFloat","numerator","denominator","size","value1","value2","getAnotherOffset","res","handleMove","outerWidth","moveOffset","anotherValue","Object","assign","atMax","getMax","handleUp","document","handleMousedown","pageX","pageY","computeOffset","nextTick","getComputedThresholdValue","val","onMounted","window","onBeforeUnmount","_d","_e","_f","_g","_h","_i","_j","_k","_l","$slots","trigger","IBizSplitTrigger","prop","isVertical","classes","barConClasses","items","_item","i","tempData","dataS","tag","data","acceptingOfficerNoDup","forEach","noDup","IBizExtendActionTimeLine","name","UIData","sortData","a","handleVal","handleTasks","clone","tasks","task","Date","copyTasks","commentsData","usertasks","isShow","comment","push","authorNames","authorName","isLink","comments","handlelinkName","handleTask","sort","item","arr","linkName","noDupName","date","dayjs","format","changeExpand","userTask","renderTimeline","formatDate","ViewMessage","messages","Array","getType","messageType","message","IBizPagination","total","curPage","emits","start","end","onPageChange","page","onPageSizeChange","pageRefresh","inputChange","event","stopPropagation","_mergeProps","onChange","IBizSortBar","sortItems","SortChange","_order","onItemClick","x","order","onClick","bm","be","DataImport","dismiss","appDataEntity","dataImport","inputUpLoad","isLoading","onCancelButtonClick","selectFile","templateUrl","codeName2","request","str","responseType","fileName","blob","decodeURIComponent","elink","Blob","download","URL","$event","obj","errorMessage","selectedFile","asyncImportData","ibiz","notification","desc","importData","srfdecodename","_message","totalNum","errorNum","success","successNum","error","onLinkClick","onFileChange","_withDirectives","root","pluralize","require","module","this","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","token","interpolate","args","match","index","replace","sanitizeWord","rules","len","replaceWord","replaceMap","keepMap","checkWord","bool","count","inclusive","pluralized","replacement","single","plural","key","pluralLower","importMapping","method","id","url","DataImport2","columnMap","Map","selectValues","dataOption","select","ColumnMappingSave","fileid","columnMappingListMap","watchValue","listvalue","columnMappingSaveName","columnData","columnMapData","options","isNoPersonel","keys","itemName","lastIndex","captionMap","columnMapValue","columnitem","substring","newColumnValue","set","_oldValue","newValue","onButtonColumnMappingImportClick","previewinfo","fields","columnMapArr","values","listValue","system_tag","resput","data_entity_tag","codeName","import_tag","onButtonImportClick","dataEntityTag","findDialog","el","params","regex","parentElement","maxWidth","n_import_tag_eq","n_system_tag_eq","n_data_entity_tag_eq","importItem","dataimport2","columnMappingListQuery","renderSelect","itemx","_slot","change","appDEDataImports","renderTable","rows","row","rowIndex","cell","cellIndex","border","padding","newRows","headers","getCookie","CoreConst","UploadUrl","uploadUrl","qs","response","_file","_fileList","firstArrayLength","env","currentArrayLength","currentArray","addQueryPrefix","j","diff","beforeUpload","onSuccess","renderEmpty","_slot2","splice","blur","handleDeleteOption","_resolveDirective","IBizCommonComponents","v","IBizControlBase","IBizIcon","IBizRouterView","IBizViewShell","IBizControlShell","IBizCodeList","defineAsyncComponent","AuthUserinfo","modelData","controller","srfusername","srfpersonname","ctx","inject","menuAlign","useRouter","view","mainMenuAlign","bol","router","location","reload","isCollapse","c","dropdown","__defProp","__defNormalProp","__publicField","AuthUserinfoProvider","panelItem","panel","parent","PanelItemController","IBizAuthUserinfo","withInstall","registerPanelItemProvider","NavPosIndexState","PanelItemState","NavPosIndexController","find","currentKey","fullPath","lastFullPath","Modal","ViewMode","modal","routerCallback","dataInfo","operateIndex","lastKey","route","appContext","indexPath","NavPosIndex","onViewCreated","routeDepth","onRouteChange","useRoute","cacheFullPath","appmenu","to","from","next","viewModals","cacheKeys","containerClass","Component","NavPosIndexProvider","IBizNavPosIndex","NavTabsState","NavTabsController","info","findItem","reject","isNil","findIndex","removeKeys","NavTabs","actions","changePage","pane","onTabClick","onTabRemove","handleCommand","removeOther","msg","action","NavTabsProvider","IBizNavTabs","PanelButtonState","PanelButtonController","model","uiactionId","UIActionButtonState","names","_state","UIActionUtil","PanelButton","captionItemName","renderMode","showCaption","itemStyle","isText","captionText","buttonType","handleButtonClick","PanelButtonProvider","IBizPanelButton","PanelAppTitleState","PanelAppTitleController","indexViewModel","PanelAppTitle","routePath","route2routePath","pathNodes","slice","routePath2string","setTimeout","showImgOnly","icon","icon2","isSvg","caption2","subCaption","subCaption2","iconVNode","captionNode","PanelAppTitleProvider","IBizPanelAppTitle","PanelAppHeader","titleBarCloseMode","changeCollapse","collapsible","defaultSlots","slot","PanelAppHeaderProvider","IBizPanelAppHeader","PanelViewHeader","PanelViewHeaderProvider","IBizPanelViewHeader","PanelExpHeader","PanelExpHeaderProvider","IBizPanelExpHeader","PanelViewContent","PanelViewContentProvider","IBizPanelViewContent","PanelTabPanel","PanelTabPanelProvider","IBizPanelTabPanel","PanelTabPage","m","PanelTabPageProvider","IBizPanelTabPage","SplitContainerController","predefinedType","panelItems","width","widthMode","height","heightMode","SplitContainer","splitMode","SplitContainerProvider","IBizSplitContainer","PanelIndexViewSearch","query","debounceSearch","onInput","debounce","is","PanelIndexViewSearchProvider","IBizPanelIndexViewSearch","PanelAppLoginViewState","PanelAppLoginViewController","PanelAppLoginView","PanelAppLoginViewProvider","IBizPanelAppLoginView","PanelRememberMeState","PanelRememberMeController","PanelRememberMe","isRemember","PanelRememberMeProvider","IBizPanelRememberMe","IndexActions","IndexActionsProvider","PanelContainerController","IBizIndexActions","PanelContainerGroupState","PanelContainerGroupController","PanelContainerGroupProvider","PanelContainerGroup","defaultExpansion","header","IBizPanelContainerGroup","stateTexts","stateType","AsyncAction","actionstate","begintime","stepinfo","completionrate","asyncacitonname","fileDownload","file","filename","baseURL","delimiter","downloadFileFromBlob","RuntimeError","AsyncActionPreview","asyncAction","onClose","reactive","title","beginTime","endTime","errorDetails","reason","errorFileUrl","actionResult","endtime","Number","onDownLoad","AsyncActionProvider","_event","UserMessage","showPopover","currentTab","imagePath","appStore","useAppStore","actualMsgs","showLength","showHistoryLength","_","hiddenHistory","showMoreHistory","popoverRef","onMsgClick","_msg","restLength","loadMoreText","provider","getAsyncActionProvider","UserMessageProvider","IBizUserMessage","registerAsyncActionProvider","SearchFormButtonsController","searchFrom","SearchFormButtons","onSearchButtonClick","onResetButtonClick","saveFilterConfirm","confirmButtonText","cancelButtonText","searchButtonStyle","SearchFormButtonsProvider","IBizSearchFormButtons","IBizPanelComponents","IBizPanelContainer","IBizPanelCtrlPos","IBizScrollContainer","IBizNavPos","IBizSingleDataContainer","IBizMultiDataContainer","IBizPanelField","IBizPanelRawItem","IBizGridContainer","IBizPanelContainerImage","getMenus","disabled","renderMenuItem","isFirst","menu","collapse","counterData","menuItemsState","tooltip","image","renderSubmenu","subMenu","AppMenuControl","useControlController","AppMenuController","menus","defaultActive","context","createUUID","calcCurMenu","app","allItems","func","currentPath","activeMenu","defaultOpens","counter","defaultActiveMenuItem","getAllItems","itemType","appFuncId","getAppFunc","appViewId","defaultOpensArr","counterRefId","onUnmounted","menuMode","isShowCollapse","expanded","warning","ViewCallTag","AppMenuProvider","IBizAppMenuControl","registerControlProvider","ControlType","AppMenuIconViewProvider","AppMenuIconViewControl","AppMenuIconViewController","appMenuItems","onClickMenuItem","renderItem","i18n","t","lanResTag","renderGroup","_a2","child","IBizAppMenuIconViewControl","GridFieldColumn","onCellClick","onTextClick","CustomHtml","fieldValue","formatValue","codeListText","onInfoTextChange","isNotNil","GridFieldColumnProvider","columnModel","grid","GridFieldColumnController","IBizGridFieldColumn","registerGridColumnProvider","GridUAColumn","onStopPropagation","onActionClick","GridUAColumnProvider","GridUAColumnController","IBizGridUAColumn","useCellEdit","componentRef","readonly","hasError","editable","setEditable","flag","cellEditable","editorShowEdit","editorReadOnly","editorDisabled","isAutoFocus","showEditMask","funcs","onMaskClick","useClickOutside","_evt","onFocus","onBlur","gridEditItemProps","editorProps","useRowEdit","_componentRef","useAllEdit","GridFieldEditColumn","fieldName","rowDataChange","useByShowMode","infoText","editItem","overflowMode","class","editor","GridFieldEditColumnProvider","GridFieldEditColumnController","IBizGridEditItem","showTooltip","tooltipContent","IBizGridFieldEditColumn","GridGroupColumn","GridGroupColumnProvider","GridGroupColumnController","IBizGridGroupColumn","IBizRowEditPopover","show","cancel","onCancel","onConfirm","useEventListener","evt","capture","useITableEvent","tableRef","forbidChange","onRowClick","_column","onDbRowClick","onSelectionChange","selection","table","isLoaded","onSortChange","opts","order1","handleRowClassName","activeClassName","rowState","handleHeaderCellClassName","_row","column","_rowIndex","_columnIndex","gridColumn","useAppGridPagination","onPageRefresh","useAppGridBase","initSimpleData","GridRowState","ControlVO","defaultSort","fieldColumn","tableData","children","first","renderColumns","columns","useRowEditPopover","popInstance","showPop","editingRow","popStyle","findTrEl","tableEl","$el","selector","trEl","showRowEditPop","popEl","y","computePosition","placement","renderPopover","showPlaceholder","display","ins","on","LoadingUtil","ElLoading","MessageUtil","duration","closable","ElMessage","ModalUtil","ElMessageBox","resolve","ConfirmUtil","Namespace","NotificationUtil","errorHandler","noticeType","ElNotification","OpenViewUtil","appView","generateRoutePath","openViewModal","openViewPopover","getDrawerPlacement","openViewDrawer","middlewareArr","flip","shift","arrow","arrEl","element","computePos","middlewareData","style","strategy","middleware","arrowX","arrowY","noArrow","staticSide","isHover","AppPopoverComponent","useUIStore","popoverZIndex","zIndex","onMouseenter","onMouseleave","isCloseing","destroy","autoClose","addEvents","viewUsage","removeEvents","cleanUpAutoUpdate","present","target","updatePosition","autoUpdate","AppModalComponent","customStyle","isNumber","footerHide","modalClass","_data","modalZIndex","onClosed","done","onBeforeClose","createModal","OverlayContainer","AppDrawerComponent","direction","drawerZIndex","createDrawer","AppFloatWindowComponent","containerRef","minWidth","minHeight","calcStyle","setStyle","dragHandles","getElementsByClassName","interact","dragHandle","modifiers","restriction","endOnly","listeners","edges","margin","restrictEdges","inertia","deltaRect","createFloatWindow","resolveComponentOrStr","component","isString","OverlayController","popover","createPopover","isFunction","drawer","floatWindow","usePagination","renderColumn","hideDefault","columnName","columnC","columnState","columnStates","widthName","isAdaptiveColumn","hasAdaptiveColumn","widthFlexGrow","elRow","isGroupData","comp","renderChildColumn","childColumns","degridColumns","index2","GridControl","mdctrlActiveMode","singleSelect","rowEditOpen","isSimple","loadDefault","GridController","renderNoData","summaryMethod","enablePagingBar","hideHeader","append","GridProvider","IBizGridControl","ListControl","toLowerCase","isLodeMoreDisabled","renderPanelItem","itemClass","renderDefaultItem","selectedData","srfkey","group","renderListContent","itemLayoutPanel","renderQuickToolBar","ctrlModel","renderBatchToolBar","isCreated","ListProvider","IBizListControl","SearchFormControl","onKeyUp","SearchFormProvider","IBizSearchFormControl","FormGroupPanel","disableClose","showMoreMode","footer","isShowMore","FormGroupPanelProvider","detailModel","form","FormGroupPanelController","IBizFormGroupPanel","registerFormDetailProvider","FormItem","onValueChange","setDataValue","IBizFormItemContainer","labelClass","labelPos","labelWidth","FormItemProvider","FormItemController","IBizFormItem","FormPage","noTabHeader","IBizFormPageItem","FormPageProvider","_parent","FormPageController","IBizFormPage","FormButton","FormButtonProvider","FormButtonController","IBizFormButton","FormDRUIPart","useController","onCreated","setEmbedView","viewShell","viewId","noLoadDefault","maskInfo","FormDRUIPartProvider","FormDRUIPartController","IBizFormDRUIPart","FormMDCtrl","hasCaption","FormMDCtrlForm","showActions","renderAddBtn","formProvider","enableCreate","formComponent","FormMDCtrlMD","isSelected","mdProvider","controlComponent","controlProps","RepeaterSingleForm","_value","onFormDataChange","formData","repeatedForm","RepeaterMultiForm","arrData","enableDelete","onRemoveClick","RepeaterGrid","formItems","recursiveIterate","detailType","childrenFields","onSingleValueChange","useCtx","formControllers","addFormController","formC","EditFormController","created","setSimpleData","indexOf","changeVal","renderRemoveBtn","columnIndex","$index","formItemC","editorProvider","FormMDCtrlRepeater","onDataChange","classNames","FormMDCtrlProvider","FormMDCtrlMDController","FormMDCtrlFormController","FormMDCtrlRepeaterController","ModelError","MDCtrlContainer","removeClick","_index","config","IBizFormMDCtrl","FormRawItem","FormRawItemProvider","FormRawItemController","IBizFormRawItem","FormTabPanel","FormTabPanelProvider","FormTabPanelController","IBizFormTabPanel","FormTabPage","FormTabPageProvider","FormTabPageController","IBizFormTabPage","EditFormProvider","EditFormControl","Boolean","excludePropsKeys","deep","IBizEditFormControl","FormControl","slots","slotProps","renderByDetailType","detailId","detailProps","renderSlot","childDetails","findChildFormDetails","childSlots","FormDetail","_props","detailModels","controlPanel","IBizFormControl","IBizExportExcel","btnContent","startPage","endPage","onCommand","ToolbarControl","btnSize","renderExtraButtons","renderToolbarItem","extraButtons","button","itemId","actionId","_slot3","item2","_slot4","toolbarItemNode","ToolbarProvider","IBizToolbarControl","CaptionBarControl","CaptionBarProvider","IBizCaptionBarControl","DataViewControl","renderItemAction","renderCard","bem","cardStyle","cardClass","cardWidth","cardColSM","cardColMD","cardColLG","cardColXS","groupUIActionGroup","onGroupToolbarClick","renderDataViewContent","enableGroup","renderHasData","DataViewControlProvider","IBizDataViewControl","findNodeData","useElTreeUtil","treeRef","getTreeInstance","elTree","_updateUI","node","shouldExpanded","updateUI","TreeControl","navigational","defaultExpandedKeys","triggerNodeExpand","toElNodes","nodes","parentNode","nodeData","treeData","treeRefreshKey","loadData","concat","callback","selectionWait","debug","checkedNodes","forbidClick","nodeModel","onNodeDbClick","ContextMenu","iBizRawItem","iBizIcon","toolbarItems","navAppViewId","onExpandChange","onTreeNodeClick","buttonState","menuItem","importMenu","calcContextMenuItems","menuState","divided","onNodeContextmenu","contextMenuC","onCheck","onNodeClick","customClass","TreeProvider","IBizTreeControl","PickupViewPanelControl","embeddedAppDEViewId","PickupViewPanelProvider","IBizPickupViewPanelControl","TabExpPanelControl","defaultTabName","handleTabChange","TabExpPanelController","tabPosition","tabPages","tab","tabTag","TabExpPanelProvider","IBizTabExpPanelControl","useExpBarRender","expBarNs","renderTitle","showTitleBar","titleLanguageRes","renderQuickSearch","useWatchRouteChange","depth","selfKey","srfnav","TreeExpBarControl","noNeedNavView","XDataModel","searchbar","TreeExpBarProvider","IBizTreeExpBarControl","ListExpBarControl","ListExpBarProvider","IBizListExpBarControl","GridExpBarControl","GridExpBarProvider","IBizGridExpBarControl","DataViewExpBarControl","DataViewExpBarProvider","IBizDataViewExpBarControl","CalendarExpBarControl","CalendarExpBarProvider","IBizCalendarExpBarControl","ChartExpBarControl","ChartExpBarProvider","IBizChartExpBarControl","SearchBarControl","onSearch","SearchBarController","onKeydown","cssVarBlock","onGroupClick","showFilter","filterButtonRef","quickSearchSlots","cssClass","groupItem","SearchBarProvider","FilterModes","ValueOP","FilterTreeControl","findFilterController","valueOP","allFields","getFilterModes","field","valueOPs","filterControllers","filterC","onValueOPSelect","onGroupLogicTypeChange","logicType","addGroup","addItem","renderEditor","leaf","renderFilterItem","onFieldSelect","availableModes","childContent","renderFilterGroup","FilterModeSelect","modes","_mode","filter","IBizSearchBarControl","ChartProvider","IBizChartControl","ControlLoadingPlaceholder","WizardPanelControl","activeFormTag","stepsTitle","activeWizardForm","supportActions","stepActions","providers","editForm","deeditForms","_editForm","onSaveSuccess","dewizard","onPrevClick","prevCaption","onNextClick","nextCaption","onFinishClick","finishCaption","dewizardSteps","showStepBar","active","steps","stepTags","step","WizardPanelProvider","IBizWizardPanelControl","DRBarController","ControlController","Srfuf","drBarItems","editItemCaption","editItemCapLanguageRes","hideEditItem","editItemSysImage","uniqueTag","dedrctrlItems","itemCaption","drBarItem","ctrlName","viewForm","navigateContexts","navigateParams","originParams","resultContext","resultParams","calcNavParams","DRBarControl","setRouter","handleSelect","handleSelectChange","renderMenuItems","DRBarProvider","IBizDRBarControl","DRTabController","drTabPages","dedrtabPages","getNestedRoutePath","activeName","DRTabControl","DRTabProvider","IBizDRTabControl","renderPortletByType","commonProps","portlets","providerComp","container","DashboardControl","DashboardController","portlet","customModelDatas","handleCustomModelChange","renderDefaultContent","renderCustomSlots","DashboardDesign","dashboard","customDashboard","isShowDesign","customC","filterData","list2","list","dataType","appDataEntityId","appCodeName","prepareList","datas","prepareListChildren","prepareData","temp","hub","portletCat","portletCodeName","portletName","portletImage","groupCodeName","groupName","groups2","prepareGroup","result2","groups","layoutModel","portletControllers","filterVal","tempOpens","customModelData","initPortlets","portletModels","getPortletProvider","getPortletByCodeName","appPortlet","convertData","models","temModelData","tempModelDatas","appPortlets","control","preparePortlet","onSave","removeItem","lastScrollHeight","designPanel","isDisabled","maxY","onReset","intervalId","handleColNumberChange","colNumber","rowH","addLayoutItem","controllers","w","handleRolHChange","behavior","renderElMenuItem","renderTree","Promise","destroyed","child2","portletModel","renderPortlet","layoutColNum","CustomDashboardContainer","isInited","openDesign","clickCollapse","showTypeDir","isShowDefault","onSaved","_b2","DashboardProvider","ContainerPortlet","ContainerPortletProvider","ContainerPortletController","IBizContainerPortlet","registerPortletProvider","PortletLayout","PortletPartController","isShowHeader","uiactionGroup","ViewPortlet","ViewPortletProvider","ViewPortletController","IBizViewPortlet","AppMenuPortletControl","MenuPortlet","controlType","MenuPortletProvider","MenuPortletController","IBizMenuPortlet","ChartPortlet","chart","ChartPortletProvider","ChartPortletController","IBizChartPortlet","RawItemPortlet","RawItemPortletProvider","RawItemPortletController","IBizRawItemPortlet","ListPortlet","ListPortletProvider","ListPortletController","IBizListPortlet","HtmlPortlet","HtmlPortletProvider","HtmlPortletController","IBizHtmlPortlet","ActionBarPortlet","uiactionGroupDetails","actionGroupState","ActionBarPortletProvider","ActionBarPortletController","IBizActionBarPortlet","IBizDashboardControl","CalendarControl","calendarRef","selectDate","selectedDate","newDateString","oldDateString","calcItemStyle","renderCalendarList","deData","calendarItems","onDblclick","dateString","begin","renderElCalender","renderCalendarItems","calendarItem","renderTimeLine","sysCalendarItems","nameLanguageRes","renderCalendar","CalendarProvider","IBizCalendarControl","KanbanControl","components","draggable","groupStyle","renderPanelItemLayout","cacheInfo","groupKey","groupClass","fromIndex","toIndex","moved","newIndex","added","removed","onDragChange","enableNew","KanbanProvider","IBizKanbanControl","TreeGridExControl","emptyText","calcHasChildren","treeNode","enableSort","TreeGridExProvider","IBizTreeGridExControl","TreeGridControl","TreeGridController","treeGridParentField","initTreeGridField","treeGridParent","treeColumnMode","treeGridValue","RuntimeModelError","treeGridValueField","getTreeGridDataItem","hasChildren","TreeGridProvider","IBizTreeGridControl","MEditViewPanelControl","panelContent","mutationObserver","handleDelete","scrollHeight","isNeedScroll","scrollTop","observe","childList","attributes","characterData","subtree","disconnect","renderTabTop","activeTab","panelUiItems","srfmajortext","handleTabDelete","embeddedAppViewId","onViewDataChange","renderRow","panelStyle","MEditViewPanelProvider","IBizMEditViewPanelControl","MapControl","mapRef","mapOpts","strAreaCode","defaultAreaCode","jsonBaseUrl","onMapChange","MapProvider","IBizMapControl","ReportPanelControl","reportType","ReportPanelProvider","UserReportPanel","generator","EDGELEGENDCONFIG","init","IBizUserReportPanel","User2ReportPanel","getAttribute","clickValue","pattern","IBizUser2ReportPanel","IBizReportPanelControl","NotSupportedEditor","n","r","o","f","u","d","l","M","Y","p","D","g","isValidDateFormat","dateStr","IBizSpan","getSpanProps","codeList","textSeparator","valueFormat","unitName","valueType","tempValue","JSON","DataTypes","tempVal","_codeList","editorRef","IBizSpanLink","getEditorEmits","curValue","openLinkView","useFocusAndBlur","SpanEditorController","CodeListEditorController","tempContext","linkAppViewId","OpenAppViewCommand","SpanEditorProvider","editorType","editorModel","parentController","IBizInput","inputRef","currentVal","isDebounce","blurCacheValue","awaitSearch","debounceChange","leading","handleKeyUp","handleChange","inputTag","chatInstance","aiChat","chat","getElementsByTagName","input","deService","choices","aiChatSse","messageid","role","readonlyText","editorWidth","editorHeight","editorParams","shouldAutoComplete","prefix","IBizInputNumber","isNaN","number","autoFocus","precision","IBizInputIP","getInputIpProps","activeElement","secIp","ipArr","firstIp","thirdIp","forIp","ip","checkIpVal","isAllBlur","getFocus","TextBoxEditorController","EditorController","toNumber","getDeACMode","minorSortAppDEFieldId","minorSortDir","dataItem","TextBoxEditorProvider","IBizDropdown","tempObj","handleTreeNodes","codeItem","treeNodes","isArray","isInclude","valueArr","_node","valueText","editContent","customNodeClass","DropDownListEditorController","DropDownListEditorProvider","IBizCheckbox","nullValue","selectValue","get","CheckBoxEditorController","CheckBoxEditorProvider","IBizCheckboxList","loadCodeList","currentMode","valueSeparator","selectArray","selectsArray","strVal","selects","numVal","_key","_datas","onSelectArrayChange","CheckBoxListEditorController","CheckBoxListEditorProvider","IBizRadio","onSelectValueChange","notNilEmpty","RadioButtonListEditorController","RadioButtonListEditorProvider","IBizDatePicker","getDatePickerProps","isTimePicker","formatVal","_dateType","onOpenChange","_isOpen","placeHolder","DatePickerEditorController","DatePickerEditorProvider","IBizRaw","template","RawEditorController","RawEditorProvider","IBizStepper","maxvalue","StepperEditorController","StepperEditorProvider","IBizRate","showText","colors","texts","RateEditorController","RateEditorProvider","IBizSwitch","activeText","dicData","inactiveText","inactiveResult","toObj","activeResult","emitValue","SwitchEditorController","SwitchEditorProvider","IBizSlider","range","showStops","showInput","stepvalue","minvalue","showstops","toBoolean","SliderEditorController","SliderEditorProvider","IBizListBox","multiple","loadListBoxItems","then","orMode","num","parseInt","ListBoxEditorController","ListBoxPickerEditorController","tempParams","mergeDeepLeft","ListBoxEditorProvider","IBizAutoComplete","isShowAll","handleDataSelect","dataItems","cb","triggerOnFocus","autoCompleteClearable","onClear","autoCompleteRef","onACSelect","handleInput","code","AutoCompleteEditorController","fixedParams","AutoCompleteEditorProvider","useIViewUpload","valueChange","files","downloadUrl","uploadCache","urls","_files","onError","HttpError","onRemove","onDownload","limit","IBizFileUpload","noUploadIcon","isGridEditor","isDrag","IBizImageUpload","getUploadProps","dialogImageUrl","dialogVisible","onDialogVisibleChange","onPreview","accept","IBizImagePreview","UploadEditorController","uploadParams","exportParams","convertNavData","FileUploaderEditorProvider","componentName","IBizPicker","pickerAutoCompleteRef","isEmpty","textName","valueItem","trimQuery","closeCircle","getServiceData","renderString","openPickUpView","noAC","suffix","IBizMPicker","open","selectItems","objectValueField","objectIdField","keyName","handleOpenViewClose","_selectItems","parse","stringify","selectItem","loading","objectNameField","IBizPickerDropDown","refValue","shouldLoad","onSelect","selfQuery","waitQuery","isOpen","IBizPickerLink","IBizPickerEmbedView","setViewParam","_context","_params","temText","pickupViewModel","IBizPickerSelectView","keySet","pickViewWidth","onInputChange","triggerMenu","queryValue","tempText","offsetWidth","handleObjectParams","onSelectChange","remoteMethod","PickerEditorController","embedViewEditors","object","DataPickerEditorProvider","IBizNumberRangePicker","Infinity","startPlaceHolder","rangeSeparator","endPlaceHolder","editorItems","editorItemNames","minValue","refFormItem","maxValue","split","valueName","NumberRangeEditorController","NumberRangeEditorProvider","IBizDateRangePicker","unlinkPanels","dates","DateRangeEditorController","DateRangeEditorProvider","_defineProperty","ownKeys","enumerableOnly","symbols","sym","_objectSpread2","source","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arr","_n","_s","err","minLen","_arrayLikeToArray","arr2","compose","_len","fns","curry","fn","curried","_this","_len2","_key2","_len3","nextArgs","_key3","isObject","hasOwnProperty","property","validateChanges","initial","changes","validateSelector","validateHandler","handler","_handler","validateInitial","throwError","errorMessages","validators","create","didUpdate","didStateUpdate","update","updateState","validate","getChanges","extractChanges","getState","setState","causedChanges","_handler$field","validateConfig","informAboutDeprecation","merge","CANCELATION_MESSAGE","makeCancelable","promise","hasCanceled_","wrappedPromise","_state$create","config$1","_state$create2","globalConfig","_validators$config","monaco","_ref","isInitialized","wrapperPromise","storeMonacoInstance","injectScripts","getMonacoLoaderScript","configureLoader","script","createScript","src","_ref2","loaderScript","_ref3","__getMonacoInstance","_ref4","loader","IBizCode","monacoEditor","UIStore","getMonacoTheme","editorInit","paths","vs","loaderMonaco","codeEditBox","language","foldingStrategy","selectOnLineNumbers","minimap","CodeEditorController","CodeEditorProvider","HtmlEditorController","HtmlEditorProvider","MarkDownEditorController","uploadparams","exportparams","MarkDownEditorProvider","IBizArray","editorStyle","showWordLimit","maxLength","prepend","tempItems","onEmit","getUrl","tempLink","ArrayEditorController","ArrayEditorProvider","IBizCascader","valueItems","filterable","separator","defaultCheckedKeys","searchValue","getSize","treeSelectData","getIsLeaf","tempTreeSelectData","valueItemData","getDisabled","handleSelectData","_labels","tempSelectValue","_values","tempDefaultCheckedKeys","parentKays","handleQueryParams","calcDeCodeNameById","tempNodes","level","keyAppDEFieldId","curNodes","getTreeData","parentKey","childNode","fillTreeData","nodekey","console","handleTreeValueChange","curSelectPath","selected","handleCascaderValueChange","curSelectText","handleRemoveTag","CascaderEditorController","CascaderEditorProvider","IBizColorPicker","colorPicker","showPicker","contentStyle","ColorPickerEditorController","ColorPickerEditorProvider","IBizPresetRawitem","PresetRawitemEditorController","PresetRawitemEditorProvider","IBizEditor","registerEditorProvider","textBoxEditorProvider","datePickerProvider","AutoCompleteProvider","View404","gotoIndexView","isTop","view1","username","password","LoginView","loginData","hasLoginView","loginView","IBizContext","isMounted","appTitle","orgData","formRef","vaild","ru","loginViewModel","hiddenAppLoading","WFStepTraceViewProvider","WFStepTraceView","useViewController","WFStepTraceViewController","sysCss","typeClass","sysCssName","viewType","cssName","viewClassNames","historyData","IBizWFStepTraceView","registerViewProvider","ViewType","createI18n","IBizI18n","lang","languages","defaultMsg","iBizI18n","EditViewEngine","ViewEngineBase","childNames","formDeId","formDataStateChange","deName","SysUIActionTag","wfInfo","refKey","newContext","newParams","startView","getAppViewRef","EditView2Engine","EditView3Engine","EditView4Engine","GridViewEngine","MDViewEngine","IndexViewEngine","_args","leftContainer","viewStyle","htmlDom","themeClass","removeClass","ListViewEngine","DataViewEngine","OptViewEngine","PickupGridViewEngine","PickupViewEngine","MPickupViewEngine","uniqueItems","selectData","TreeViewEngine","TabExpViewEngine","findPanelItem","findPanelItemsAndDelete","setTabExpModelLayout","tabexppanel","layoutContainer","tabLayout","deleteItems","containerName","showHeader","ExpViewEngine","expBarModel","getControl","GridExpViewEngine","ListExpViewEngine","DataViewExpViewEngine","TreeExpViewEngine","WizardViewEngine","ChartViewEngine","WFDynaEditViewEngine","previous","processForm","formModel","link","wfLink","submitView","getWFSubmitViewId","WFDynaEditView3Engine","WFDynaActionViewEngine","WFDynaStartViewEngine","PortalViewEngine","PanelViewEngine","CustomViewEngine","PickupTreeViewEngine","TreeDataSetNodeData","PickupDataViewEngine","PickupView2Engine","CalendarViewEngine","CalendarExpViewEngine","MPickupView2Engine","KanbanViewEngine","FormPickupDataViewEngine","LoginViewEngine","rememberme","viewFieldName","TreeGridExViewEngine","TreeGridViewEngine","MEditView9Engine","ChartExpViewEngine","MapViewEngine","ReportViewEngine","formExists","searchformContainer","IBizViewEngine","_v","zhCn","DevtoolAction","activeItem","activeCollapse","instance","getCurrentInstance","proxy","getObjEntriesArray","contextArray","paramsArray","keydownHandle","copy","minimize","expand","close","onMouseEnter","unref","onMouseLeave","Devtool","QXEvent","devtool2","createApp","ElementPlus","dom","devtool","IBizView","IBizPortalView","IBizViewLayoutPanelControl","IBizPanelControl"],"mappings":"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FAA4F,IAAI,EACjG,CAAC,qEAAsE,OAAO,EAC9E,CAAC,iCAAkC,IAAI,EACvC,CAAC,oBAAqB,MAAM,EAC5B,CAAC,4FAA6F,MAAM,EACpG,CAAC,yGAA0G,MAAM,EACjH,CAAC,8FAA+F,MAAM,EACtG,CAAC,0BAA2B,KAAK,EACjC,CAAC,+BAAgC,MAAM,EACvC,CAAC,sBAAuB,MAAM,EAC9B,CAAC,oBAAqB,QAAQ,EAC9B,CAAC,eAAgB,IAAI,EACrB,CAAC,YAAa,IAAI,EAClB,CAAC,QAAS,KAAK,CACnB,EAAI,QAAQ,SAAUA,EAAM,CACxB,OAAOV,EAAU,gBAAgBU,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CACrD,CAAG,EAKD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,SACJ,EAAI,QAAQV,EAAU,kBAAkB,EAE/BA,CACT,CAAC,oCCpfDA,GAAU,cAAc,wBAAyB,QAAQ,EAUlD,SAASgC,GAAOC,EAAK,CACxB,OAAOjC,GAAUiC,CAAG,CACxB,CAUO,SAASC,GAAYD,EAAK,CAC7B,OAAOD,GAAOC,CAAG,EAAE,aACvB,CCXoE,SAAApQ,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAA,OAAA,UAAA,SAAA,KAAAA,CAAA,IAAA,mBAAA,CAAAC,EAAAD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","x_google_ignoreList":[12,13,294,361,362,363,364,365,366,367,368,369,370,441]}