@kp-ui/lowcode-pc 1.0.0-alpha.10 → 1.0.0-alpha.12

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 (140) hide show
  1. package/core/src/components/DragBtn.vue2.js +0 -1
  2. package/core/src/components/DragBtn.vue2.js.map +1 -1
  3. package/core/src/components/common/RenderWidgetList.vue2.js +0 -1
  4. package/core/src/components/common/RenderWidgetList.vue2.js.map +1 -1
  5. package/core/src/components/common/desginer/WidgetWrapper.vue2.js +0 -1
  6. package/core/src/components/common/desginer/WidgetWrapper.vue2.js.map +1 -1
  7. package/core/src/components/common/render/LowcodeRenderProvider.vue.js +0 -1
  8. package/core/src/components/common/render/LowcodeRenderProvider.vue.js.map +1 -1
  9. package/core/src/components/common/render/RenderForm.vue.js +0 -1
  10. package/core/src/components/common/render/RenderForm.vue.js.map +1 -1
  11. package/core/src/components/common/render/useFormContext.js +0 -1
  12. package/core/src/components/common/render/useFormContext.js.map +1 -1
  13. package/core/src/components/contextMenu/useWidgetContextMenu.js +0 -1
  14. package/core/src/components/contextMenu/useWidgetContextMenu.js.map +1 -1
  15. package/core/src/hooks/useAppRef.js +0 -1
  16. package/core/src/hooks/useAppRef.js.map +1 -1
  17. package/core/src/hooks/useDataHttp.js +0 -1
  18. package/core/src/hooks/useDataHttp.js.map +1 -1
  19. package/core/src/hooks/useDesigner.js +0 -1
  20. package/core/src/hooks/useDesigner.js.map +1 -1
  21. package/core/src/hooks/useField.js +2 -2
  22. package/core/src/hooks/useField.js.map +1 -1
  23. package/core/src/lang/zh-CN.js +1 -0
  24. package/core/src/lang/zh-CN.js.map +1 -1
  25. package/install.js +1 -0
  26. package/install.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js +0 -1
  29. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js.map +1 -1
  30. package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue2.js +0 -1
  31. package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue2.js.map +1 -1
  32. package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue2.js +0 -1
  33. package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue2.js.map +1 -1
  34. package/src/components/desginer/form-widget/container-widget/grid-widget.vue2.js +0 -1
  35. package/src/components/desginer/form-widget/container-widget/grid-widget.vue2.js.map +1 -1
  36. package/src/components/desginer/form-widget/container-widget/index.js +0 -1
  37. package/src/components/desginer/form-widget/container-widget/index.js.map +1 -1
  38. package/src/components/desginer/form-widget/container-widget/tab-widget.vue2.js +0 -1
  39. package/src/components/desginer/form-widget/container-widget/tab-widget.vue2.js.map +1 -1
  40. package/src/components/desginer/form-widget/container-widget/useTableWidget.js +1 -2
  41. package/src/components/desginer/form-widget/container-widget/useTableWidget.js.map +1 -1
  42. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js +0 -1
  43. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js.map +1 -1
  44. package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue2.js +0 -1
  45. package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue2.js.map +1 -1
  46. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js +0 -1
  47. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js.map +1 -1
  48. package/src/components/field-widget/bpmn-editor-widget.vue2.js +0 -1
  49. package/src/components/field-widget/bpmn-editor-widget.vue2.js.map +1 -1
  50. package/src/components/field-widget/button-list-widget.vue2.js +0 -1
  51. package/src/components/field-widget/button-list-widget.vue2.js.map +1 -1
  52. package/src/components/field-widget/button-widget.vue2.js +0 -1
  53. package/src/components/field-widget/button-widget.vue2.js.map +1 -1
  54. package/src/components/field-widget/cascader-widget.vue2.js +0 -1
  55. package/src/components/field-widget/cascader-widget.vue2.js.map +1 -1
  56. package/src/components/field-widget/checkbox-widget.vue2.js +0 -1
  57. package/src/components/field-widget/checkbox-widget.vue2.js.map +1 -1
  58. package/src/components/field-widget/code-editor-widget.vue2.js +0 -1
  59. package/src/components/field-widget/code-editor-widget.vue2.js.map +1 -1
  60. package/src/components/field-widget/color-widget.vue2.js +0 -1
  61. package/src/components/field-widget/color-widget.vue2.js.map +1 -1
  62. package/src/components/field-widget/date-range-widget.vue2.js +0 -1
  63. package/src/components/field-widget/date-range-widget.vue2.js.map +1 -1
  64. package/src/components/field-widget/date-widget.vue2.js +0 -1
  65. package/src/components/field-widget/date-widget.vue2.js.map +1 -1
  66. package/src/components/field-widget/divider-widget.vue2.js +0 -1
  67. package/src/components/field-widget/divider-widget.vue2.js.map +1 -1
  68. package/src/components/field-widget/diy-compontent-widget.vue2.js +0 -1
  69. package/src/components/field-widget/diy-compontent-widget.vue2.js.map +1 -1
  70. package/src/components/field-widget/dropdown-widget.vue2.js +0 -1
  71. package/src/components/field-widget/dropdown-widget.vue2.js.map +1 -1
  72. package/src/components/field-widget/file-upload-widget.vue2.js +0 -1
  73. package/src/components/field-widget/file-upload-widget.vue2.js.map +1 -1
  74. package/src/components/field-widget/form-item-wrapper.vue2.js +0 -1
  75. package/src/components/field-widget/form-item-wrapper.vue2.js.map +1 -1
  76. package/src/components/field-widget/hooks/useSelect.js +0 -1
  77. package/src/components/field-widget/hooks/useSelect.js.map +1 -1
  78. package/src/components/field-widget/html-text-widget.vue2.js +0 -1
  79. package/src/components/field-widget/html-text-widget.vue2.js.map +1 -1
  80. package/src/components/field-widget/index.js +0 -1
  81. package/src/components/field-widget/index.js.map +1 -1
  82. package/src/components/field-widget/input-widget.vue2.js +0 -1
  83. package/src/components/field-widget/input-widget.vue2.js.map +1 -1
  84. package/src/components/field-widget/number-widget.vue2.js +0 -1
  85. package/src/components/field-widget/number-widget.vue2.js.map +1 -1
  86. package/src/components/field-widget/radio-widget.vue2.js +0 -1
  87. package/src/components/field-widget/radio-widget.vue2.js.map +1 -1
  88. package/src/components/field-widget/rate-widget.vue2.js +0 -1
  89. package/src/components/field-widget/rate-widget.vue2.js.map +1 -1
  90. package/src/components/field-widget/rich-editor-widget.vue2.js +0 -1
  91. package/src/components/field-widget/rich-editor-widget.vue2.js.map +1 -1
  92. package/src/components/field-widget/select-widget.vue2.js +0 -1
  93. package/src/components/field-widget/select-widget.vue2.js.map +1 -1
  94. package/src/components/field-widget/slider-widget.vue2.js +0 -1
  95. package/src/components/field-widget/slider-widget.vue2.js.map +1 -1
  96. package/src/components/field-widget/static-text-widget.vue2.js +0 -1
  97. package/src/components/field-widget/static-text-widget.vue2.js.map +1 -1
  98. package/src/components/field-widget/switch-widget.vue2.js +0 -1
  99. package/src/components/field-widget/switch-widget.vue2.js.map +1 -1
  100. package/src/components/field-widget/textarea-widget.vue2.js +0 -1
  101. package/src/components/field-widget/textarea-widget.vue2.js.map +1 -1
  102. package/src/components/field-widget/time-range-widget.vue2.js +0 -1
  103. package/src/components/field-widget/time-range-widget.vue2.js.map +1 -1
  104. package/src/components/field-widget/time-widget.vue2.js +0 -1
  105. package/src/components/field-widget/time-widget.vue2.js.map +1 -1
  106. package/src/components/field-widget/tree-widget.vue2.js +0 -1
  107. package/src/components/field-widget/tree-widget.vue2.js.map +1 -1
  108. package/src/components/field-widget/treeSelect-widget.vue2.js +0 -1
  109. package/src/components/field-widget/treeSelect-widget.vue2.js.map +1 -1
  110. package/src/components/field-widget/useField.js +0 -1
  111. package/src/components/field-widget/useField.js.map +1 -1
  112. package/src/components/field-widget/vue-render-widget.vue2.js +0 -1
  113. package/src/components/field-widget/vue-render-widget.vue2.js.map +1 -1
  114. package/src/components/form-render/container-items/data-table-widget.vue2.js +0 -1
  115. package/src/components/form-render/container-items/data-table-widget.vue2.js.map +1 -1
  116. package/src/components/form-render/container-items/grid-col-widget.vue2.js +0 -1
  117. package/src/components/form-render/container-items/grid-col-widget.vue2.js.map +1 -1
  118. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js +0 -1
  119. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js.map +1 -1
  120. package/src/components/form-render/container-items/grid-widget.vue2.js +0 -1
  121. package/src/components/form-render/container-items/grid-widget.vue2.js.map +1 -1
  122. package/src/components/form-render/container-items/index.js +0 -1
  123. package/src/components/form-render/container-items/index.js.map +1 -1
  124. package/src/components/form-render/container-items/tab-widget.vue2.js +0 -1
  125. package/src/components/form-render/container-items/tab-widget.vue2.js.map +1 -1
  126. package/src/components/form-render/container-items/vf-box-widget.vue2.js +0 -1
  127. package/src/components/form-render/container-items/vf-box-widget.vue2.js.map +1 -1
  128. package/src/components/form-render/container-items/vf-collapse-widget.vue2.js +0 -1
  129. package/src/components/form-render/container-items/vf-collapse-widget.vue2.js.map +1 -1
  130. package/src/components/public/ActionButtonListRender.vue2.js +0 -1
  131. package/src/components/public/ActionButtonListRender.vue2.js.map +1 -1
  132. package/src/components/public/ConfigView/CustomPageRender.vue.js +0 -1
  133. package/src/components/public/ConfigView/CustomPageRender.vue.js.map +1 -1
  134. package/src/components/public/CustomerModal/CustomerModal.vue2.js +0 -1
  135. package/src/components/public/CustomerModal/CustomerModal.vue2.js.map +1 -1
  136. package/src/components/public/DynamicDialog.vue.js +0 -1
  137. package/src/components/public/DynamicDialog.vue.js.map +1 -1
  138. package/src/components/render/index.vue2.js +0 -1
  139. package/src/components/render/index.vue2.js.map +1 -1
  140. package/stats.html +1 -1
@@ -1,5 +1,4 @@
1
1
  import { defineComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, unref, createVNode, toDisplayString } from "vue";
2
- /* empty css */
3
2
  import { SvgIcon } from "tmgc2-share";
4
3
  import { useI18n } from "../utils/i18n.js";
5
4
  const _hoisted_1 = ["title"];
@@ -1 +1 @@
1
- {"version":3,"file":"DragBtn.vue2.js","sources":["../../../../../core/src/components/DragBtn.vue"],"sourcesContent":["<template>\n <div :class=\"{ 'drag-handler': true, selected: selected }\">\n <i :title=\"i18nt('designer.hint.dragHandler')\">\n <svg-icon icon-class=\"icon-el-drag-move\" />\n </i>\n <i>\n {{\n i18n2t(\n `designer.widgetLabel.${widget.type}`,\n `extension.widgetLabel.${widget.type}`\n )\n }}\n </i>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { useI18n } from '@kp-ui/lowcode-core';\n import { SvgIcon } from 'tmgc2-share';\n import type { Widget } from '@kp-ui/lowcode-core';\n\n const { i18nt, i18n2t } = useI18n();\n\n const props = defineProps<{\n selected: boolean;\n widget: Widget;\n }>();\n</script>\n<style lang=\"scss\" scoped>\n .drag-handler {\n position: absolute;\n top: -1px;\n left: -1px;\n height: 20px;\n line-height: 20px;\n z-index: 12;\n background: var(--ant-primary-color);\n display: flex;\n align-items: center;\n padding: 0 4px;\n opacity: 0;\n transition: opacity 0.2s;\n visibility: hidden;\n &.selected {\n opacity: 0.6;\n visibility: visible;\n &:hover {\n opacity: 1;\n }\n }\n\n i {\n font-size: 12px;\n font-style: normal;\n color: #fff;\n margin: 0 2px;\n cursor: move;\n display: flex;\n align-items: center;\n }\n }\n</style>\n"],"names":["_createElementBlock","selected","_createElementVNode","_unref","_createVNode","widget"],"mappings":";;;;;;;;;;;;AAqBI,UAAM,EAAE,OAAO,OAAA,IAAW,QAAA;;0BApB1BA,mBAYM,OAAA;AAAA,QAZA,wDAAyCC,KAAAA,UAAQ;AAAA,MAAA;QACnDC,mBAEI,KAAA;AAAA,UAFA,OAAOC,MAAA,KAAA,EAAK,2BAAA;AAAA,QAAA;UACZC,YAA2CD,MAAA,OAAA,GAAA,EAAjC,cAAW,qBAAmB;AAAA,QAAA;QAE5CD,mBAOI,2BALIC,MAAA,MAAA;AAAA,UAAoDE,wBAAAA,KAAAA,OAAO,IAAI;AAAA,UAAiDA,yBAAAA,KAAAA,OAAO,IAAI;AAAA,QAAA;;;;;"}
1
+ {"version":3,"file":"DragBtn.vue2.js","sources":["../../../../../core/src/components/DragBtn.vue"],"sourcesContent":["<template>\n <div :class=\"{ 'drag-handler': true, selected: selected }\">\n <i :title=\"i18nt('designer.hint.dragHandler')\">\n <svg-icon icon-class=\"icon-el-drag-move\" />\n </i>\n <i>\n {{\n i18n2t(\n `designer.widgetLabel.${widget.type}`,\n `extension.widgetLabel.${widget.type}`\n )\n }}\n </i>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { useI18n } from '@kp-ui/lowcode-core';\n import { SvgIcon } from 'tmgc2-share';\n import type { Widget } from '@kp-ui/lowcode-core';\n\n const { i18nt, i18n2t } = useI18n();\n\n const props = defineProps<{\n selected: boolean;\n widget: Widget;\n }>();\n</script>\n<style lang=\"scss\" scoped>\n .drag-handler {\n position: absolute;\n top: -1px;\n left: -1px;\n height: 20px;\n line-height: 20px;\n z-index: 12;\n background: var(--ant-primary-color);\n display: flex;\n align-items: center;\n padding: 0 4px;\n opacity: 0;\n transition: opacity 0.2s;\n visibility: hidden;\n &.selected {\n opacity: 0.6;\n visibility: visible;\n &:hover {\n opacity: 1;\n }\n }\n\n i {\n font-size: 12px;\n font-style: normal;\n color: #fff;\n margin: 0 2px;\n cursor: move;\n display: flex;\n align-items: center;\n }\n }\n</style>\n"],"names":["_createElementBlock","selected","_createElementVNode","_unref","_createVNode","widget"],"mappings":";;;;;;;;;;;AAqBI,UAAM,EAAE,OAAO,OAAA,IAAW,QAAA;;0BApB1BA,mBAYM,OAAA;AAAA,QAZA,wDAAyCC,KAAAA,UAAQ;AAAA,MAAA;QACnDC,mBAEI,KAAA;AAAA,UAFA,OAAOC,MAAA,KAAA,EAAK,2BAAA;AAAA,QAAA;UACZC,YAA2CD,MAAA,OAAA,GAAA,EAAjC,cAAW,qBAAmB;AAAA,QAAA;QAE5CD,mBAOI,2BALIC,MAAA,MAAA;AAAA,UAAoDE,wBAAAA,KAAAA,OAAO,IAAI;AAAA,UAAiDA,yBAAAA,KAAAA,OAAO,IAAI;AAAA,QAAA;;;;;"}
@@ -1,7 +1,6 @@
1
1
  import { defineComponent, mergeModels, useModel, createBlock, createElementBlock, unref, openBlock, normalizeClass, withCtx, createCommentVNode, createElementVNode, createVNode, resolveDynamicComponent, Fragment, renderList } from "vue";
2
2
  import Draggable from "vuedraggable";
3
3
  import { useDesigner } from "../../hooks/useDesigner.js";
4
- /* empty css */
5
4
  import WidgetWrapper from "./desginer/WidgetWrapper.vue.js";
6
5
  const _hoisted_1 = ["id", "data-widget-id"];
7
6
  const _hoisted_2 = {
@@ -1 +1 @@
1
- {"version":3,"file":"RenderWidgetList.vue2.js","sources":["../../../../../../core/src/components/common/RenderWidgetList.vue"],"sourcesContent":["<template>\n <template v-if=\"designState\">\n <draggable\n v-model=\"draggableList\"\n class=\"designer-widget-list list-transition-container\"\n :class=\"[{ 'empty-list': !draggableList.length }, { 'desginer-canvas': isCanvas }]\"\n tag=\"div\"\n :animation=\"200\"\n group=\"widget\"\n handle=\".drag-handler\"\n item-key=\"id\"\n :move=\"onMove\"\n :data-allow-types=\"allowTypes.join(',')\"\n :data-not-allow-types=\"notAllowTypes.join(',')\"\n @update=\"onDragUpdate\"\n @add=\"(evt: any) => onDragAdd(evt, draggableList)\"\n >\n <template #item=\"{ element: widget, index }\">\n <div :id=\"widget.id\" class=\"transition-group-el\" :data-widget-id=\"widget.id\">\n <WidgetWrapper :widget=\"widget\" :index=\"index\" v-model:list=\"draggableList\">\n <component\n :is=\"getWidget(widget)\"\n :widget=\"widget\"\n :field=\"widget\"\n :index=\"index\"\n />\n </WidgetWrapper>\n </div>\n </template>\n <template #footer>\n <div v-if=\"!draggableList.length\" class=\"empty-drop-zone\"> 拖拽组件到此处 </div>\n </template>\n </draggable>\n </template>\n <template v-else>\n <div\n v-for=\"(widget, index) in draggableList\"\n :key=\"`${widget.id}_${index}`\"\n class=\"t-overflow-hidden\"\n >\n <component :is=\"getWidget(widget)\" :widget=\"widget\" :field=\"widget\" :index=\"index\" />\n </div>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\n import draggable from 'vuedraggable';\n import { useDesigner, WidgetWrapper } from '@kp-ui/lowcode-core';\n import type { Widget, FormDesigner } from '@kp-ui/lowcode-core';\n\n defineOptions({\n inheritAttrs: false,\n name: 'RenderWidgetList'\n });\n\n const props = withDefaults(\n defineProps<{\n isCanvas?: boolean;\n allowTypes?: string[];\n notAllowTypes?: string[];\n parentWidget: Widget | FormDesigner | null;\n }>(),\n {\n isCanvas: false,\n allowTypes: () => [],\n notAllowTypes: () => []\n }\n );\n\n const { designer, onDragAdd, onDragUpdate, designState, getWidget } = useDesigner();\n\n const onMove = (evt: any) => {\n return designer.value.checkWidgetMove(evt);\n };\n\n const draggableList = defineModel<Widget[]>('list', {\n type: Array,\n default: []\n });\n</script>\n\n<style scoped lang=\"scss\">\n .designer-widget-list {\n position: relative;\n display: flex;\n flex-direction: column;\n // gap: 3px;\n &.empty-list {\n min-height: 96px;\n }\n .empty-drop-zone {\n position: absolute;\n // top: 5px;\n left: 0;\n width: 100%;\n z-index: 2;\n }\n :deep(.sortable-ghost) {\n z-index: 99;\n }\n }\n\n .list-transition-container {\n display: flex;\n flex-direction: column;\n padding: 2px;\n }\n\n .transition-group-el {\n position: relative;\n padding: 1px;\n .sortable-ghost {\n width: 100%;\n }\n }\n\n /* SortableJS 自动应用的类 */\n .ghost-placeholder {\n opacity: 0.5;\n background: #c8ebfb;\n border: 2px dashed var(--ant-primary-color);\n height: 40px;\n margin: 4px 0;\n border-radius: 4px;\n }\n\n .sortable-chosen {\n background: #fdfdfd;\n }\n\n .empty-drop-zone {\n line-height: 1.2;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n font-size: 12px;\n margin: 2px 0;\n height: 90px;\n background: rgba(#000, 0.05);\n border: 1px dashed #d9d9d9;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #999;\n font-size: 14px;\n }\n .desginer-canvas {\n &:deep(.ant-form-item) {\n margin-bottom: 0;\n }\n }\n</style>\n"],"names":["_useModel","_unref","_createBlock","draggable","isCanvas","allowTypes","notAllowTypes","_withCtx","_createElementVNode","_createVNode","_resolveDynamicComponent","_createElementBlock","_openBlock","_Fragment","_renderList"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEI,UAAM,EAAE,UAAU,WAAW,cAAc,aAAa,UAAA,IAAc,YAAA;AAEtE,UAAM,SAAS,CAAC,QAAa;AACzB,aAAO,SAAS,MAAM,gBAAgB,GAAG;AAAA,IAC7C;AAEA,UAAM,gBAAgBA,kBAAsB,MAG3C;;aA7EeC,MAAA,WAAA,kBACZC,YA8BYD,MAAAE,SAAA,GAAA;AAAA;oBA7BC,cAAA;AAAA,qEAAA,cAAa,QAAA;AAAA,QACtB,uBAAM,kDAAgD,CAAA,EAAA,cAAA,CAC5B,oBAAc,OAAA,wBAA+BC,KAAAA,SAAAA,CAAQ,CAAA,CAAA;AAAA,QAC/E,KAAI;AAAA,QACH,WAAW;AAAA,QACZ,OAAM;AAAA,QACN,QAAO;AAAA,QACP,YAAS;AAAA,QACR,MAAM;AAAA,QACN,oBAAkBC,KAAAA,WAAW,KAAI,GAAA;AAAA,QACjC,wBAAsBC,KAAAA,cAAc,KAAI,GAAA;AAAA,QACxC,UAAQL,MAAA,YAAA;AAAA,QACR,kCAAM,QAAaA,iBAAU,KAAK,cAAA,KAAa;AAAA,MAAA;QAErC,MAAIM,QACX,CASM,EAAA,SAVkB,QAAQ,YAAK;AAAA,UACrCC,mBASM,OAAA;AAAA,YATA,IAAI,OAAO;AAAA,YAAI,OAAM;AAAA,YAAuB,kBAAgB,OAAO;AAAA,UAAA;YACrEC,YAOgBR,MAAA,aAAA,GAAA;AAAA,cAPA;AAAA,cAAiB;AAAA,cAAsB,MAAM,cAAA;AAAA,qEAAA,cAAa,QAAA;AAAA,YAAA;+BACtE,MAKE;AAAA,8BALFC,YAKEQ,wBAJOT,MAAA,SAAA,EAAU,MAAM,CAAA,GAAA;AAAA,kBACpB;AAAA,kBACA,OAAO;AAAA,kBACP;AAAA,gBAAA;;;;;;QAKN,gBACP,MAAyE;AAAA,UAA7D,CAAA,cAAA,MAAc,uBAA1BU,mBAAyE,OAAzE,YAA0D,WAAS;;;iGAK3EC,UAAA,IAAA,GAAAD,mBAMME,UAAA,EAAA,KAAA,EAAA,GAAAC,WALwB,cAAA,OAAa,CAA/B,QAAQ,UAAK;4BADzBH,mBAMM,OAAA;AAAA,UAJD,KAAG,GAAK,OAAO,EAAE,IAAI,KAAK;AAAA,UAC3B,OAAM;AAAA,QAAA;wBAENT,YAAqFQ,wBAArET,MAAA,SAAA,EAAU,MAAM,CAAA,GAAA;AAAA,YAAI;AAAA,YAAiB,OAAO;AAAA,YAAS;AAAA,UAAA;;;;;;"}
1
+ {"version":3,"file":"RenderWidgetList.vue2.js","sources":["../../../../../../core/src/components/common/RenderWidgetList.vue"],"sourcesContent":["<template>\n <template v-if=\"designState\">\n <draggable\n v-model=\"draggableList\"\n class=\"designer-widget-list list-transition-container\"\n :class=\"[{ 'empty-list': !draggableList.length }, { 'desginer-canvas': isCanvas }]\"\n tag=\"div\"\n :animation=\"200\"\n group=\"widget\"\n handle=\".drag-handler\"\n item-key=\"id\"\n :move=\"onMove\"\n :data-allow-types=\"allowTypes.join(',')\"\n :data-not-allow-types=\"notAllowTypes.join(',')\"\n @update=\"onDragUpdate\"\n @add=\"(evt: any) => onDragAdd(evt, draggableList)\"\n >\n <template #item=\"{ element: widget, index }\">\n <div :id=\"widget.id\" class=\"transition-group-el\" :data-widget-id=\"widget.id\">\n <WidgetWrapper :widget=\"widget\" :index=\"index\" v-model:list=\"draggableList\">\n <component\n :is=\"getWidget(widget)\"\n :widget=\"widget\"\n :field=\"widget\"\n :index=\"index\"\n />\n </WidgetWrapper>\n </div>\n </template>\n <template #footer>\n <div v-if=\"!draggableList.length\" class=\"empty-drop-zone\"> 拖拽组件到此处 </div>\n </template>\n </draggable>\n </template>\n <template v-else>\n <div\n v-for=\"(widget, index) in draggableList\"\n :key=\"`${widget.id}_${index}`\"\n class=\"t-overflow-hidden\"\n >\n <component :is=\"getWidget(widget)\" :widget=\"widget\" :field=\"widget\" :index=\"index\" />\n </div>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\n import draggable from 'vuedraggable';\n import { useDesigner, WidgetWrapper } from '@kp-ui/lowcode-core';\n import type { Widget, FormDesigner } from '@kp-ui/lowcode-core';\n\n defineOptions({\n inheritAttrs: false,\n name: 'RenderWidgetList'\n });\n\n const props = withDefaults(\n defineProps<{\n isCanvas?: boolean;\n allowTypes?: string[];\n notAllowTypes?: string[];\n parentWidget: Widget | FormDesigner | null;\n }>(),\n {\n isCanvas: false,\n allowTypes: () => [],\n notAllowTypes: () => []\n }\n );\n\n const { designer, onDragAdd, onDragUpdate, designState, getWidget } = useDesigner();\n\n const onMove = (evt: any) => {\n return designer.value.checkWidgetMove(evt);\n };\n\n const draggableList = defineModel<Widget[]>('list', {\n type: Array,\n default: []\n });\n</script>\n\n<style scoped lang=\"scss\">\n .designer-widget-list {\n position: relative;\n display: flex;\n flex-direction: column;\n // gap: 3px;\n &.empty-list {\n min-height: 96px;\n }\n .empty-drop-zone {\n position: absolute;\n // top: 5px;\n left: 0;\n width: 100%;\n z-index: 2;\n }\n :deep(.sortable-ghost) {\n z-index: 99;\n }\n }\n\n .list-transition-container {\n display: flex;\n flex-direction: column;\n padding: 2px;\n }\n\n .transition-group-el {\n position: relative;\n padding: 1px;\n .sortable-ghost {\n width: 100%;\n }\n }\n\n /* SortableJS 自动应用的类 */\n .ghost-placeholder {\n opacity: 0.5;\n background: #c8ebfb;\n border: 2px dashed var(--ant-primary-color);\n height: 40px;\n margin: 4px 0;\n border-radius: 4px;\n }\n\n .sortable-chosen {\n background: #fdfdfd;\n }\n\n .empty-drop-zone {\n line-height: 1.2;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n font-size: 12px;\n margin: 2px 0;\n height: 90px;\n background: rgba(#000, 0.05);\n border: 1px dashed #d9d9d9;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #999;\n font-size: 14px;\n }\n .desginer-canvas {\n &:deep(.ant-form-item) {\n margin-bottom: 0;\n }\n }\n</style>\n"],"names":["_useModel","_unref","_createBlock","draggable","isCanvas","allowTypes","notAllowTypes","_withCtx","_createElementVNode","_createVNode","_resolveDynamicComponent","_createElementBlock","_openBlock","_Fragment","_renderList"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEI,UAAM,EAAE,UAAU,WAAW,cAAc,aAAa,UAAA,IAAc,YAAA;AAEtE,UAAM,SAAS,CAAC,QAAa;AACzB,aAAO,SAAS,MAAM,gBAAgB,GAAG;AAAA,IAC7C;AAEA,UAAM,gBAAgBA,kBAAsB,MAG3C;;aA7EeC,MAAA,WAAA,kBACZC,YA8BYD,MAAAE,SAAA,GAAA;AAAA;oBA7BC,cAAA;AAAA,qEAAA,cAAa,QAAA;AAAA,QACtB,uBAAM,kDAAgD,CAAA,EAAA,cAAA,CAC5B,oBAAc,OAAA,wBAA+BC,KAAAA,SAAAA,CAAQ,CAAA,CAAA;AAAA,QAC/E,KAAI;AAAA,QACH,WAAW;AAAA,QACZ,OAAM;AAAA,QACN,QAAO;AAAA,QACP,YAAS;AAAA,QACR,MAAM;AAAA,QACN,oBAAkBC,KAAAA,WAAW,KAAI,GAAA;AAAA,QACjC,wBAAsBC,KAAAA,cAAc,KAAI,GAAA;AAAA,QACxC,UAAQL,MAAA,YAAA;AAAA,QACR,kCAAM,QAAaA,iBAAU,KAAK,cAAA,KAAa;AAAA,MAAA;QAErC,MAAIM,QACX,CASM,EAAA,SAVkB,QAAQ,YAAK;AAAA,UACrCC,mBASM,OAAA;AAAA,YATA,IAAI,OAAO;AAAA,YAAI,OAAM;AAAA,YAAuB,kBAAgB,OAAO;AAAA,UAAA;YACrEC,YAOgBR,MAAA,aAAA,GAAA;AAAA,cAPA;AAAA,cAAiB;AAAA,cAAsB,MAAM,cAAA;AAAA,qEAAA,cAAa,QAAA;AAAA,YAAA;+BACtE,MAKE;AAAA,8BALFC,YAKEQ,wBAJOT,MAAA,SAAA,EAAU,MAAM,CAAA,GAAA;AAAA,kBACpB;AAAA,kBACA,OAAO;AAAA,kBACP;AAAA,gBAAA;;;;;;QAKN,gBACP,MAAyE;AAAA,UAA7D,CAAA,cAAA,MAAc,uBAA1BU,mBAAyE,OAAzE,YAA0D,WAAS;;;iGAK3EC,UAAA,IAAA,GAAAD,mBAMME,UAAA,EAAA,KAAA,EAAA,GAAAC,WALwB,cAAA,OAAa,CAA/B,QAAQ,UAAK;4BADzBH,mBAMM,OAAA;AAAA,UAJD,KAAG,GAAK,OAAO,EAAE,IAAI,KAAK;AAAA,UAC3B,OAAM;AAAA,QAAA;wBAENT,YAAqFQ,wBAArET,MAAA,SAAA,EAAU,MAAM,CAAA,GAAA;AAAA,YAAI;AAAA,YAAiB,OAAO;AAAA,YAAS;AAAA,UAAA;;;;;;"}
@@ -1,6 +1,5 @@
1
1
  import { defineComponent, mergeModels, useModel, reactive, createElementBlock, openBlock, withModifiers, normalizeClass, unref, createVNode, createCommentVNode, renderSlot, createBlock } from "vue";
2
2
  import { useDesigner } from "../../../hooks/useDesigner.js";
3
- /* empty css */
4
3
  import DragBtn from "../../DragBtn.vue.js";
5
4
  import WidgetContextMenu from "../../contextMenu/WidgetContextMenu.vue.js";
6
5
  const _hoisted_1 = {
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetWrapper.vue2.js","sources":["../../../../../../../core/src/components/common/desginer/WidgetWrapper.vue"],"sourcesContent":["<template>\n <div\n class=\"widget-wrapper\"\n :class=\"{\n selected: selected(widget.id),\n 'container-wrapper': widget.category === 'container'\n }\"\n @click.stop=\"onWidgetClick(widget)\"\n @contextmenu.prevent.stop=\"onContextMenu\"\n >\n <!-- 拖动手柄 -->\n <DragBtn :selected=\"selected(widget.id)\" :widget=\"widget\" />\n <!-- 隐藏 -->\n <div v-if=\"widget.options.hidden\" class=\"widget-hidden\"></div>\n\n <slot></slot>\n <!-- 右键菜单 -->\n <WidgetContextMenu\n v-if=\"contextMenuState.visible\"\n v-model:visible=\"contextMenuState.visible\"\n v-model:list=\"list\"\n :x=\"contextMenuState.x\"\n :y=\"contextMenuState.y\"\n :widget=\"widget\"\n :index=\"index\"\n :parentWidget=\"parentWidget\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { reactive } from 'vue';\n import { useDesigner, Widget, WidgetContextMenu, DragBtn } from '@kp-ui/lowcode-core';\n\n const props = defineProps<{\n widget: Widget;\n index: number;\n parentWidget?: any;\n }>();\n\n const list = defineModel<Widget[]>('list', { default: () => [] });\n const { designer, selected, onWidgetClick } = useDesigner();\n\n const contextMenuState = reactive({\n visible: false,\n x: 0,\n y: 0\n });\n\n const onContextMenu = (event: MouseEvent) => {\n contextMenuState.x = event.clientX;\n contextMenuState.y = event.clientY;\n contextMenuState.visible = true;\n };\n</script>\n\n<style lang=\"scss\" scoped>\n .widget-wrapper {\n position: relative;\n padding: 2px;\n min-height: 20px;\n cursor: pointer;\n border: 1px dashed #cccccc;\n gap: 3px;\n\n &.container-wrapper {\n border-width: 2px;\n &.selected {\n outline: solid var(--ant-primary-color);\n }\n }\n\n &.selected {\n /* background-color: rgba(24, 144, 255, 0.1); */\n outline: 2px solid var(--ant-primary-color);\n }\n\n .widget-hidden {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: repeating-linear-gradient(\n 45deg,\n rgba(0, 0, 0, 0.1),\n rgba(0, 0, 0, 0.1) 10px,\n rgba(0, 0, 0, 0.2) 10px,\n rgba(0, 0, 0, 0.2) 20px\n );\n z-index: 11;\n }\n\n .action-buttons {\n position: absolute;\n bottom: -2px;\n right: -2px;\n height: 22px;\n width: 22px;\n background-color: var(--ant-primary-color);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 11;\n font-size: 14px;\n\n &:hover {\n background-color: #ff4d4f;\n }\n }\n }\n</style>\n"],"names":["_useModel","_createElementBlock","_unref","widget","_withModifiers","_createVNode","_openBlock","_renderSlot","_createBlock","index","parentWidget"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwCI,UAAM,OAAOA,SAAqB,SAAC,MAA6B;AAChE,UAAM,EAAY,UAAU,cAAA,IAAkB,YAAA;AAE9C,UAAM,mBAAmB,SAAS;AAAA,MAC9B,SAAS;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,IAAA,CACN;AAED,UAAM,gBAAgB,CAAC,UAAsB;AACzC,uBAAiB,IAAI,MAAM;AAC3B,uBAAiB,IAAI,MAAM;AAC3B,uBAAiB,UAAU;AAAA,IAC/B;;0BApDAC,mBA0BM,OAAA;AAAA,QAzBF,uBAAM,kBAAgB;AAAA,oBACUC,MAAA,QAAA,EAASC,KAAAA,OAAO,EAAE;AAAA,UAAoCA,qBAAAA,KAAAA,OAAO,aAAQ;AAAA,QAAA;QAIpG,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,cAAA,CAAA,WAAOF,MAAA,aAAA,EAAcC,KAAAA,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAChC,6BAA0B,eAAa,CAAA,WAAA,MAAA,CAAA;AAAA,MAAA;QAGxCE,YAA4DH,MAAA,OAAA,GAAA;AAAA,UAAlD,UAAUA,MAAA,QAAA,EAASC,KAAAA,OAAO,EAAE;AAAA,UAAI,QAAQA,KAAAA;AAAAA,QAAAA;QAEvCA,KAAAA,OAAO,QAAQ,UAA1BG,UAAA,GAAAL,mBAA8D,OAA9D,UAA8D;QAE9DM,WAAa,KAAA,QAAA,WAAA,CAAA,GAAA,QAAA,IAAA;AAAA,QAGH,iBAAiB,wBAD3BC,YASEN,MAAA,iBAAA,GAAA;AAAA;UAPU,SAAS,iBAAiB;AAAA,UAAjB,oBAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAA,iBAAiB,UAAO;AAAA,UACjC,MAAM,KAAA;AAAA,iEAAA,KAAI,QAAA;AAAA,UACjB,GAAG,iBAAiB;AAAA,UACpB,GAAG,iBAAiB;AAAA,UACpB,QAAQC,KAAAA;AAAAA,UACR,OAAOM,KAAAA;AAAAA,UACP,cAAcC,KAAAA;AAAAA,QAAAA;;;;;"}
1
+ {"version":3,"file":"WidgetWrapper.vue2.js","sources":["../../../../../../../core/src/components/common/desginer/WidgetWrapper.vue"],"sourcesContent":["<template>\n <div\n class=\"widget-wrapper\"\n :class=\"{\n selected: selected(widget.id),\n 'container-wrapper': widget.category === 'container'\n }\"\n @click.stop=\"onWidgetClick(widget)\"\n @contextmenu.prevent.stop=\"onContextMenu\"\n >\n <!-- 拖动手柄 -->\n <DragBtn :selected=\"selected(widget.id)\" :widget=\"widget\" />\n <!-- 隐藏 -->\n <div v-if=\"widget.options.hidden\" class=\"widget-hidden\"></div>\n\n <slot></slot>\n <!-- 右键菜单 -->\n <WidgetContextMenu\n v-if=\"contextMenuState.visible\"\n v-model:visible=\"contextMenuState.visible\"\n v-model:list=\"list\"\n :x=\"contextMenuState.x\"\n :y=\"contextMenuState.y\"\n :widget=\"widget\"\n :index=\"index\"\n :parentWidget=\"parentWidget\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { reactive } from 'vue';\n import { useDesigner, Widget, WidgetContextMenu, DragBtn } from '@kp-ui/lowcode-core';\n\n const props = defineProps<{\n widget: Widget;\n index: number;\n parentWidget?: any;\n }>();\n\n const list = defineModel<Widget[]>('list', { default: () => [] });\n const { designer, selected, onWidgetClick } = useDesigner();\n\n const contextMenuState = reactive({\n visible: false,\n x: 0,\n y: 0\n });\n\n const onContextMenu = (event: MouseEvent) => {\n contextMenuState.x = event.clientX;\n contextMenuState.y = event.clientY;\n contextMenuState.visible = true;\n };\n</script>\n\n<style lang=\"scss\" scoped>\n .widget-wrapper {\n position: relative;\n padding: 2px;\n min-height: 20px;\n cursor: pointer;\n border: 1px dashed #cccccc;\n gap: 3px;\n\n &.container-wrapper {\n border-width: 2px;\n &.selected {\n outline: solid var(--ant-primary-color);\n }\n }\n\n &.selected {\n /* background-color: rgba(24, 144, 255, 0.1); */\n outline: 2px solid var(--ant-primary-color);\n }\n\n .widget-hidden {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: repeating-linear-gradient(\n 45deg,\n rgba(0, 0, 0, 0.1),\n rgba(0, 0, 0, 0.1) 10px,\n rgba(0, 0, 0, 0.2) 10px,\n rgba(0, 0, 0, 0.2) 20px\n );\n z-index: 11;\n }\n\n .action-buttons {\n position: absolute;\n bottom: -2px;\n right: -2px;\n height: 22px;\n width: 22px;\n background-color: var(--ant-primary-color);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 11;\n font-size: 14px;\n\n &:hover {\n background-color: #ff4d4f;\n }\n }\n }\n</style>\n"],"names":["_useModel","_createElementBlock","_unref","widget","_withModifiers","_createVNode","_openBlock","_renderSlot","_createBlock","index","parentWidget"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwCI,UAAM,OAAOA,SAAqB,SAAC,MAA6B;AAChE,UAAM,EAAY,UAAU,cAAA,IAAkB,YAAA;AAE9C,UAAM,mBAAmB,SAAS;AAAA,MAC9B,SAAS;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,IAAA,CACN;AAED,UAAM,gBAAgB,CAAC,UAAsB;AACzC,uBAAiB,IAAI,MAAM;AAC3B,uBAAiB,IAAI,MAAM;AAC3B,uBAAiB,UAAU;AAAA,IAC/B;;0BApDAC,mBA0BM,OAAA;AAAA,QAzBF,uBAAM,kBAAgB;AAAA,oBACUC,MAAA,QAAA,EAASC,KAAAA,OAAO,EAAE;AAAA,UAAoCA,qBAAAA,KAAAA,OAAO,aAAQ;AAAA,QAAA;QAIpG,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,cAAA,CAAA,WAAOF,MAAA,aAAA,EAAcC,KAAAA,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAChC,6BAA0B,eAAa,CAAA,WAAA,MAAA,CAAA;AAAA,MAAA;QAGxCE,YAA4DH,MAAA,OAAA,GAAA;AAAA,UAAlD,UAAUA,MAAA,QAAA,EAASC,KAAAA,OAAO,EAAE;AAAA,UAAI,QAAQA,KAAAA;AAAAA,QAAAA;QAEvCA,KAAAA,OAAO,QAAQ,UAA1BG,UAAA,GAAAL,mBAA8D,OAA9D,UAA8D;QAE9DM,WAAa,KAAA,QAAA,WAAA,CAAA,GAAA,QAAA,IAAA;AAAA,QAGH,iBAAiB,wBAD3BC,YASEN,MAAA,iBAAA,GAAA;AAAA;UAPU,SAAS,iBAAiB;AAAA,UAAjB,oBAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAA,iBAAiB,UAAO;AAAA,UACjC,MAAM,KAAA;AAAA,iEAAA,KAAI,QAAA;AAAA,UACjB,GAAG,iBAAiB;AAAA,UACpB,GAAG,iBAAiB;AAAA,UACpB,QAAQC,KAAAA;AAAAA,UACR,OAAOM,KAAAA;AAAAA,UACP,cAAcC,KAAAA;AAAAA,QAAAA;;;;;"}
@@ -1,5 +1,4 @@
1
1
  import { defineComponent, watch, provide, renderSlot } from "vue";
2
- /* empty css */
3
2
  import { useLocaleStore } from "@kp-ui/i18n";
4
3
  import { storeToRefs } from "pinia";
5
4
  import { useI18n } from "../../../utils/i18n.js";
@@ -1 +1 @@
1
- {"version":3,"file":"LowcodeRenderProvider.vue.js","sources":["../../../../../../../core/src/components/common/render/LowcodeRenderProvider.vue"],"sourcesContent":["<template>\n <slot></slot>\n</template>\n<script lang=\"tsx\" setup>\n import { useI18n, type Widget } from '@kp-ui/lowcode-core';\n import { Component, provide, watch } from 'vue';\n import { useLocaleStore } from '@kp-ui/i18n';\n import { storeToRefs } from 'pinia';\n\n defineOptions({\n inheritAttrs: false,\n name: 'LowcodeRenderProvider'\n });\n\n const props = withDefaults(\n defineProps<{\n designState?: boolean;\n getWidget: (widget: Widget) => Component;\n context: any;\n }>(),\n {\n designState: false\n }\n );\n\n const localeStore = useLocaleStore();\n const { locale } = storeToRefs(localeStore);\n const { initLocale } = useI18n();\n\n watch(\n locale,\n () => {\n initLocale(locale.value);\n },\n {\n immediate: true\n }\n );\n\n provide('designState', props.designState); // 设计态标识\n provide('getWidget', props.getWidget);\n provide('formConfig', props.context?.formConfig);\n provide('formWidgetId', props.context?.formWidgetId);\n // 提供给子组件的数据\n provide('refList', props.context?.widgetRefList);\n provide('formData', props.context?.formDataModel);\n provide('getReadMode', () => props.context?.readModeFlag.value);\n</script>\n"],"names":["props","__props","localeStore","useLocaleStore","locale","storeToRefs","initLocale","useI18n","watch","value","immediate","provide","designState","getWidget","context","formConfig","formWidgetId","widgetRefList","formDataModel","readModeFlag","_renderSlot","_ctx","$slots"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAcI,UAAMA,QAAQC;AAWd,UAAMC,cAAcC,eAAc;AAClC,UAAM;AAAA,MAAEC;AAAAA,IAAO,IAAIC,YAAYH,WAAW;AAC1C,UAAM;AAAA,MAAEI;AAAAA,QAAeC,QAAO;AAE9BC,UACIJ,QACA,MAAM;AACFE,iBAAWF,OAAOK,KAAK;AAAA,IAC3B,GACA;AAAA,MACIC,WAAW;AAAA,IACf,CACJ;AAEAC,YAAQ,eAAeX,MAAMY,WAAW;AACxCD,YAAQ,aAAaX,MAAMa,SAAS;AACpCF,YAAQ,eAAcX,WAAMc,YAANd,mBAAee,UAAU;AAC/CJ,YAAQ,iBAAgBX,WAAMc,YAANd,mBAAegB,YAAY;AAEnDL,YAAQ,YAAWX,WAAMc,YAANd,mBAAeiB,aAAa;AAC/CN,YAAQ,aAAYX,WAAMc,YAANd,mBAAekB,aAAa;AAChDP,YAAQ,eAAe,MAAA;;AAAMX,cAAAA,MAAAA,MAAMc,YAANd,gBAAAA,IAAemB,aAAaV;AAAAA,KAAK;;aA7C9DW,WAAaC,KAAAC,QAAA,SAAA;AAAA;;;"}
1
+ {"version":3,"file":"LowcodeRenderProvider.vue.js","sources":["../../../../../../../core/src/components/common/render/LowcodeRenderProvider.vue"],"sourcesContent":["<template>\n <slot></slot>\n</template>\n<script lang=\"tsx\" setup>\n import { useI18n, type Widget } from '@kp-ui/lowcode-core';\n import { Component, provide, watch } from 'vue';\n import { useLocaleStore } from '@kp-ui/i18n';\n import { storeToRefs } from 'pinia';\n\n defineOptions({\n inheritAttrs: false,\n name: 'LowcodeRenderProvider'\n });\n\n const props = withDefaults(\n defineProps<{\n designState?: boolean;\n getWidget: (widget: Widget) => Component;\n context: any;\n }>(),\n {\n designState: false\n }\n );\n\n const localeStore = useLocaleStore();\n const { locale } = storeToRefs(localeStore);\n const { initLocale } = useI18n();\n\n watch(\n locale,\n () => {\n initLocale(locale.value);\n },\n {\n immediate: true\n }\n );\n\n provide('designState', props.designState); // 设计态标识\n provide('getWidget', props.getWidget);\n provide('formConfig', props.context?.formConfig);\n provide('formWidgetId', props.context?.formWidgetId);\n // 提供给子组件的数据\n provide('refList', props.context?.widgetRefList);\n provide('formData', props.context?.formDataModel);\n provide('getReadMode', () => props.context?.readModeFlag.value);\n</script>\n"],"names":["props","__props","localeStore","useLocaleStore","locale","storeToRefs","initLocale","useI18n","watch","value","immediate","provide","designState","getWidget","context","formConfig","formWidgetId","widgetRefList","formDataModel","readModeFlag","_renderSlot","_ctx","$slots"],"mappings":";;;;;;;;;;;;;;;;;;;;AAcI,UAAMA,QAAQC;AAWd,UAAMC,cAAcC,eAAc;AAClC,UAAM;AAAA,MAAEC;AAAAA,IAAO,IAAIC,YAAYH,WAAW;AAC1C,UAAM;AAAA,MAAEI;AAAAA,QAAeC,QAAO;AAE9BC,UACIJ,QACA,MAAM;AACFE,iBAAWF,OAAOK,KAAK;AAAA,IAC3B,GACA;AAAA,MACIC,WAAW;AAAA,IACf,CACJ;AAEAC,YAAQ,eAAeX,MAAMY,WAAW;AACxCD,YAAQ,aAAaX,MAAMa,SAAS;AACpCF,YAAQ,eAAcX,WAAMc,YAANd,mBAAee,UAAU;AAC/CJ,YAAQ,iBAAgBX,WAAMc,YAANd,mBAAegB,YAAY;AAEnDL,YAAQ,YAAWX,WAAMc,YAANd,mBAAeiB,aAAa;AAC/CN,YAAQ,aAAYX,WAAMc,YAANd,mBAAekB,aAAa;AAChDP,YAAQ,eAAe,MAAA;;AAAMX,cAAAA,MAAAA,MAAMc,YAANd,gBAAAA,IAAemB,aAAaV;AAAAA,KAAK;;aA7C9DW,WAAaC,KAAAC,QAAA,SAAA;AAAA;;;"}
@@ -1,6 +1,5 @@
1
1
  import { defineComponent, ref, computed, onMounted, createBlock, openBlock, unref, withKeys, normalizeClass, withCtx, createVNode } from "vue";
2
2
  import { Form } from "ant-design-vue";
3
- /* empty css */
4
3
  import { useEmitter } from "../../../utils/useEmitter.js";
5
4
  import RenderWidgetList from "../RenderWidgetList.vue.js";
6
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1 +1 @@
1
- {"version":3,"file":"RenderForm.vue.js","sources":["../../../../../../../core/src/components/common/render/RenderForm.vue"],"sourcesContent":["<template>\n <Form\n ref=\"renderForm\"\n :layout=\"labelPosition\"\n :class=\"['render-form', 'tpf-form', customClass, readModeFlag ? 'readonly-mode-form' : '']\"\n :scrollToFirstError=\"true\"\n :validateOnRuleChange=\"false\"\n :model=\"formDataModel\"\n @keydown.enter=\"handleEnterKey\"\n >\n <RenderWidgetList :parentWidget=\"null\" v-model:list=\"widgetList\" />\n </Form>\n</template>\n\n<script lang=\"ts\" setup>\n import { computed, ref, onMounted, type PropType } from 'vue';\n import { Form } from 'ant-design-vue';\n import { RenderWidgetList } from '@kp-ui/lowcode-core';\n import { useEmitter } from '@kp-ui/lowcode-core/src/utils/useEmitter';\n\n /**\n * 表单容器组件\n * 负责渲染表单及其子组件\n */\n const props = defineProps({\n context: {\n type: Object as PropType<any>,\n required: true\n }\n });\n\n const emit = defineEmits(['form-submit', 'form-cancel']);\n\n // 组件引用\n const renderForm = ref();\n const { emit$, on$, off$ } = useEmitter();\n\n // 从上下文中获取数据\n const formDataModel = computed({\n get: () => props.context.formDataModel.value,\n set: val => {\n props.context.formDataModel.value = val;\n }\n });\n const readModeFlag = computed(() => props.context.readModeFlag.value);\n const formConfig = computed(() => props.context.formConfig.value);\n const widgetList = computed(() => props.context.widgetList.value);\n const labelPosition = computed(() => props.context.labelPosition.value);\n const customClass = computed(() => props.context.customClass.value);\n\n /**\n * 处理回车键事件\n */\n const handleEnterKey = () => {\n if (formConfig.value?.isEnterSubmit === 1) {\n props.context.onFormUpdate();\n }\n };\n\n onMounted(() => {});\n\n // 暴露方法\n defineExpose({\n renderForm,\n off$,\n on$,\n emit$\n });\n</script>\n"],"names":["_createBlock","_unref","_normalizeClass","_createVNode"],"mappings":";;;;;;;;;;;;;;;AAwBI,UAAM,QAAQ;AAUd,UAAM,aAAa,IAAA;AACnB,UAAM,EAAE,OAAO,KAAK,KAAA,IAAS,WAAA;AAG7B,UAAM,gBAAgB,SAAS;AAAA,MAC3B,KAAK,MAAM,MAAM,QAAQ,cAAc;AAAA,MACvC,KAAK,CAAA,QAAO;AACR,cAAM,QAAQ,cAAc,QAAQ;AAAA,MACxC;AAAA,IAAA,CACH;AACD,UAAM,eAAe,SAAS,MAAM,MAAM,QAAQ,aAAa,KAAK;AACpE,UAAM,aAAa,SAAS,MAAM,MAAM,QAAQ,WAAW,KAAK;AAChE,UAAM,aAAa,SAAS,MAAM,MAAM,QAAQ,WAAW,KAAK;AAChE,UAAM,gBAAgB,SAAS,MAAM,MAAM,QAAQ,cAAc,KAAK;AACtE,UAAM,cAAc,SAAS,MAAM,MAAM,QAAQ,YAAY,KAAK;AAKlE,UAAM,iBAAiB,MAAM;;AACzB,YAAI,gBAAW,UAAX,mBAAkB,mBAAkB,GAAG;AACvC,cAAM,QAAQ,aAAA;AAAA,MAClB;AAAA,IACJ;AAEA,cAAU,MAAM;AAAA,IAAC,CAAC;AAGlB,aAAa;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACH;;0BAlEDA,YAUOC,MAAA,IAAA,GAAA;AAAA,iBATC;AAAA,QAAJ,KAAI;AAAA,QACH,QAAQ,cAAA;AAAA,QACR,OAAKC,eAAA,CAAA,eAAA,YAA8B,YAAA,OAAa,aAAA,QAAY,uBAAA,EAAA,CAAA;AAAA,QAC5D,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,OAAO,cAAA;AAAA,QACP,oBAAe,gBAAc,CAAA,OAAA,CAAA;AAAA,MAAA;yBAE9B,MAAmE;AAAA,UAAnEC,YAAmEF,MAAA,gBAAA,GAAA;AAAA,YAAhD,cAAc;AAAA,YAAc,MAAM,WAAA;AAAA,mEAAA,WAAU,QAAA;AAAA,UAAA;;;;;;;"}
1
+ {"version":3,"file":"RenderForm.vue.js","sources":["../../../../../../../core/src/components/common/render/RenderForm.vue"],"sourcesContent":["<template>\n <Form\n ref=\"renderForm\"\n :layout=\"labelPosition\"\n :class=\"['render-form', 'tpf-form', customClass, readModeFlag ? 'readonly-mode-form' : '']\"\n :scrollToFirstError=\"true\"\n :validateOnRuleChange=\"false\"\n :model=\"formDataModel\"\n @keydown.enter=\"handleEnterKey\"\n >\n <RenderWidgetList :parentWidget=\"null\" v-model:list=\"widgetList\" />\n </Form>\n</template>\n\n<script lang=\"ts\" setup>\n import { computed, ref, onMounted, type PropType } from 'vue';\n import { Form } from 'ant-design-vue';\n import { RenderWidgetList } from '@kp-ui/lowcode-core';\n import { useEmitter } from '@kp-ui/lowcode-core/src/utils/useEmitter';\n\n /**\n * 表单容器组件\n * 负责渲染表单及其子组件\n */\n const props = defineProps({\n context: {\n type: Object as PropType<any>,\n required: true\n }\n });\n\n const emit = defineEmits(['form-submit', 'form-cancel']);\n\n // 组件引用\n const renderForm = ref();\n const { emit$, on$, off$ } = useEmitter();\n\n // 从上下文中获取数据\n const formDataModel = computed({\n get: () => props.context.formDataModel.value,\n set: val => {\n props.context.formDataModel.value = val;\n }\n });\n const readModeFlag = computed(() => props.context.readModeFlag.value);\n const formConfig = computed(() => props.context.formConfig.value);\n const widgetList = computed(() => props.context.widgetList.value);\n const labelPosition = computed(() => props.context.labelPosition.value);\n const customClass = computed(() => props.context.customClass.value);\n\n /**\n * 处理回车键事件\n */\n const handleEnterKey = () => {\n if (formConfig.value?.isEnterSubmit === 1) {\n props.context.onFormUpdate();\n }\n };\n\n onMounted(() => {});\n\n // 暴露方法\n defineExpose({\n renderForm,\n off$,\n on$,\n emit$\n });\n</script>\n"],"names":["_createBlock","_unref","_normalizeClass","_createVNode"],"mappings":";;;;;;;;;;;;;;AAwBI,UAAM,QAAQ;AAUd,UAAM,aAAa,IAAA;AACnB,UAAM,EAAE,OAAO,KAAK,KAAA,IAAS,WAAA;AAG7B,UAAM,gBAAgB,SAAS;AAAA,MAC3B,KAAK,MAAM,MAAM,QAAQ,cAAc;AAAA,MACvC,KAAK,CAAA,QAAO;AACR,cAAM,QAAQ,cAAc,QAAQ;AAAA,MACxC;AAAA,IAAA,CACH;AACD,UAAM,eAAe,SAAS,MAAM,MAAM,QAAQ,aAAa,KAAK;AACpE,UAAM,aAAa,SAAS,MAAM,MAAM,QAAQ,WAAW,KAAK;AAChE,UAAM,aAAa,SAAS,MAAM,MAAM,QAAQ,WAAW,KAAK;AAChE,UAAM,gBAAgB,SAAS,MAAM,MAAM,QAAQ,cAAc,KAAK;AACtE,UAAM,cAAc,SAAS,MAAM,MAAM,QAAQ,YAAY,KAAK;AAKlE,UAAM,iBAAiB,MAAM;;AACzB,YAAI,gBAAW,UAAX,mBAAkB,mBAAkB,GAAG;AACvC,cAAM,QAAQ,aAAA;AAAA,MAClB;AAAA,IACJ;AAEA,cAAU,MAAM;AAAA,IAAC,CAAC;AAGlB,aAAa;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACH;;0BAlEDA,YAUOC,MAAA,IAAA,GAAA;AAAA,iBATC;AAAA,QAAJ,KAAI;AAAA,QACH,QAAQ,cAAA;AAAA,QACR,OAAKC,eAAA,CAAA,eAAA,YAA8B,YAAA,OAAa,aAAA,QAAY,uBAAA,EAAA,CAAA;AAAA,QAC5D,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,OAAO,cAAA;AAAA,QACP,oBAAe,gBAAc,CAAA,OAAA,CAAA;AAAA,MAAA;yBAE9B,MAAmE;AAAA,UAAnEC,YAAmEF,MAAA,gBAAA,GAAA;AAAA,YAAhD,cAAc;AAAA,YAAc,MAAM,WAAA;AAAA,mEAAA,WAAU,QAAA;AAAA,UAAA;;;;;;;"}
@@ -1,5 +1,4 @@
1
1
  import { useTemplateRef, ref, computed, watchEffect, onMounted, nextTick } from "vue";
2
- /* empty css */
3
2
  import { set, cloneDeep } from "lodash-es";
4
3
  import { message } from "ant-design-vue";
5
4
  import { getUuidKey } from "@kp-ui/tool";
@@ -1 +1 @@
1
- {"version":3,"file":"useFormContext.js","sources":["../../../../../../../core/src/components/common/render/useFormContext.ts"],"sourcesContent":["import { computed, nextTick, onMounted, provide, ref, useTemplateRef, watchEffect } from 'vue';\nimport {\n useFormValidation,\n FormConfig,\n Widget,\n cloneFormConfigWithoutEventHandler,\n generateId,\n getContainerWidgetByName,\n insertCustomCssToHead,\n insertGlobalFunctionsToHtml\n} from '@kp-ui/lowcode-core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { message } from 'ant-design-vue';\nimport { getUuidKey } from '@kp-ui/tool';\nimport { routerReloadStatus, useComRef, useExecFunction, useRef } from 'tmgc2-share';\nimport { useEmitter } from '@kp-ui/lowcode-core/src/utils/useEmitter';\nimport { useI18n, useAppRef } from '@kp-ui/lowcode-core';\n\nexport interface FormRenderProps {\n vfCtx?: Record<string, any>;\n formJson?: any;\n formData?: Record<string, any>;\n optionData?: Record<string, any>;\n disabledMode?: boolean;\n renderConfig?: {\n languageName?: string;\n };\n parentForm?: any;\n dynamicCreation?: boolean;\n debug?: boolean;\n}\n\n/**\n * 表单上下文配置\n */\nexport interface FormContextOptions {\n props: FormRenderProps;\n renderForm: any;\n}\n\n/**\n * 创建表单上下文\n * @param options 表单上下文配置\n * @returns 表单上下文\n */\nexport const useFormContext = ({ renderForm, props }: FormContextOptions) => {\n const { formJson } = props;\n const dynamicDialogRef = useTemplateRef<any>('dynamicDialogRef');\n const { i18nt } = useI18n();\n const [readModeFlag, setReadMode] = useRef(false);\n\n const emitter = useEmitter();\n\n const formJsonObj = ref();\n // 状态变量\n const formDataModel = ref<Record<string, any>>({});\n const isLoading = ref(false);\n const widgetRefList = ref<Map<string, any>>(new Map());\n const dialogProps = ref({});\n const childFormRef = ref();\n\n const formWidgetId = Symbol('formWidget');\n\n const dialogOrDrawerRef = ref();\n\n const { executeFunction, context, execHttpFunction } = useExecFunction();\n const { getFormRef, getWidgetRef, registerToRefList } = useAppRef(widgetRefList, formWidgetId);\n\n // 计算属性\n const formConfig = computed<FormConfig>(() => formJsonObj.value?.formConfig || {});\n\n const widgetList = computed(() => formJsonObj.value?.widgetList || []);\n const labelPosition = computed(() => {\n return formConfig.value?.labelPosition || 'horizontal';\n });\n\n const setChildFormRef = chid => {\n childFormRef.value = chid;\n };\n\n const labelWidth = computed(() => {\n return formConfig.value?.labelWidth ? `${formConfig.value.labelWidth}px` : '80px';\n });\n\n const customClass = computed(() => {\n return formConfig.value?.customClass || '';\n });\n\n // 初始化表单验证器\n let formValidator = useFormValidation(renderForm);\n\n // 监听 widgetList 变化,重新初始化验证器\n watchEffect(() => {\n formValidator = useFormValidation(renderForm);\n });\n\n /**\n * 设置表单JSON数据\n */\n const setFormJson = async (json: any) => {\n formJsonObj.value = json || { widgetList: [], formConfig: {} };\n\n // 重新构建表单数据模型\n formDataModel.value = {};\n insertCustomCode();\n await nextTick();\n handleOnMounted();\n };\n\n /**\n * 获取表单数据\n */\n const getFormData = () => {\n return formDataModel.value || {};\n };\n\n /**\n * 设置表单数据\n */\n const setFormData = (data: Record<string, any>) => {\n if (!data) return;\n // 更新表单数据模型\n Object.keys(data).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(formDataModel.value, key)) {\n formDataModel.value[key] = data[key];\n }\n });\n };\n\n /**\n * 设置加载状态\n */\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n };\n\n /**\n * 重置表单验证\n */\n const resetValidation = () => {\n formValidator.resetValidation();\n };\n\n /**\n * 清除表单验证\n */\n const clearValidate = () => {\n formValidator.clearValidate();\n };\n\n const setDialogOrDrawerRef = (ddRef: any) => {\n dialogOrDrawerRef.value = ddRef;\n };\n\n /**\n * 当显示多级嵌套弹窗或抽屉时,获取最顶层VFormRender组件实例\n * @returns {object}\n */\n const getTopFormRef = () => {\n if (!props.parentForm) {\n return getFormRef();\n }\n\n let topFormRef = props.parentForm;\n while (topFormRef.parentForm) {\n topFormRef = topFormRef.parentForm;\n }\n\n return topFormRef;\n };\n\n /**\n * 显示弹窗表单,动态创建v-form-render组件,option-data、global-dsv等属性继承父级表单\n * @param dialogName\n * @param formData\n * @param extraData\n */\n const showDialog = (dialogName, formData = {}, extraData = {}) => {\n const topFormRef = getTopFormRef();\n const dialogCon = (getContainerWidgetByName(topFormRef?.widgetList || [], dialogName) ||\n getContainerWidgetByName(widgetList.value || [], dialogName)) as Widget | null;\n\n if (dialogCon === null) {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n\n if (!dialogName || dialogCon.type !== 'vf-dialog') {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n const dFormJson = {\n widgetList: cloneDeep(dialogCon?.widgetList || []),\n formConfig: cloneFormConfigWithoutEventHandler(topFormRef?.formConfig?.value || {})\n };\n const wrapperDivId = getUuidKey();\n dialogProps.value = {\n options: dialogCon.options,\n formJson: dFormJson,\n formData: { ...formData },\n optionData: topFormRef.optionData,\n parentFormRef: context.value,\n extraData: extraData,\n wrapperId: wrapperDivId,\n vfCtx: { ...formData }\n };\n\n dynamicDialogRef.value?.show();\n };\n /**\n * 获取父级VFormRender组件实例\n * @returns {object}\n */\n const getParentFormRef = () => {\n return props.parentForm;\n };\n\n const getChildFormRef = () => {\n return dynamicDialogRef.value?.getFormRef();\n };\n\n /**\n * 字段值变化事件处理器\n */\n const fieldChangeEventHandler = () => {\n emitter.off$('fieldChange');\n emitter.on$('fieldChange', ({ fieldName, value }) => {\n // 过滤掉错误值\n value = value ?? '';\n set(formDataModel.value, fieldName, value);\n });\n };\n\n const onFormDetail = async () => {\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformDetail, {\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const onFormUpdate = async () => {\n const valid = await formValidator.validate();\n if (!valid) throw new Error(i18nt('表单验证失败'));\n\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformUpdate, {\n data: formDataModel.value,\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const handleOnMounted = () => {\n if (formConfig.value?.onFormMounted) {\n console.log('onFormMounted: ');\n executeFunction({\n functionBody: formConfig.value?.onFormMounted\n });\n }\n };\n\n /**\n * 插入自定义样式和脚本\n * @param cssCode CSS代码\n * @param functions 自定义函数\n * @param formId 表单ID\n */\n const insertCustomCode = () => {\n const formId = 'vfRender' + generateId();\n const { cssCode, functions } = formConfig.value;\n console.log({ cssCode });\n\n if (cssCode) {\n insertCustomCssToHead(cssCode, formId || '');\n }\n if (functions) {\n insertGlobalFunctionsToHtml(functions, formId || '');\n }\n };\n\n const reload = () => {\n const router = context.value?.$router;\n router?.replace({\n query: {\n ...router.currentRoute.value.query,\n _t: Date.now()\n }\n });\n };\n\n const goBack = (reloadStatus?: routerReloadStatus, cb?: () => void) => {\n const goBack = getFormRef().vfCtx?.goBack;\n if (typeof goBack === 'function') {\n goBack(reloadStatus, cb);\n } else {\n const router = context.value?.$router;\n router?.go(-1);\n }\n };\n\n const getFieldValue = (field: string) => {\n return formDataModel.value[field];\n };\n\n const getVfCtx = () => {\n return props.vfCtx;\n };\n\n onMounted(() => {\n if (formJson) {\n setFormJson(formJson);\n }\n fieldChangeEventHandler();\n });\n\n const expose = {\n context,\n i18nt,\n goBack,\n reload,\n formValidator,\n getFieldValue,\n resetValidation,\n clearValidate,\n getVfCtx,\n getParentFormRef,\n getFormRef,\n getWidgetRef,\n showDialog,\n getFormData,\n getChildFormRef,\n setFormData,\n setReadMode,\n setFormJson,\n setLoading,\n onFormDetail,\n onFormUpdate,\n formDataModel,\n isLoading,\n vfCtx: props.vfCtx,\n // 计算属性\n formConfig,\n dynamicDialogRef,\n setChildFormRef,\n setDialogOrDrawerRef\n };\n\n return {\n formWidgetId,\n registerToRefList,\n dialogOrDrawerRef,\n\n emitter,\n // 状态\n formJsonObj,\n readModeFlag,\n // 引用\n widgetRefList,\n\n widgetList,\n labelPosition,\n labelWidth,\n customClass,\n dialogProps,\n\n expose,\n ...expose\n };\n};\n"],"names":["goBack"],"mappings":"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"}
1
+ {"version":3,"file":"useFormContext.js","sources":["../../../../../../../core/src/components/common/render/useFormContext.ts"],"sourcesContent":["import { computed, nextTick, onMounted, provide, ref, useTemplateRef, watchEffect } from 'vue';\nimport {\n useFormValidation,\n FormConfig,\n Widget,\n cloneFormConfigWithoutEventHandler,\n generateId,\n getContainerWidgetByName,\n insertCustomCssToHead,\n insertGlobalFunctionsToHtml\n} from '@kp-ui/lowcode-core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { message } from 'ant-design-vue';\nimport { getUuidKey } from '@kp-ui/tool';\nimport { routerReloadStatus, useComRef, useExecFunction, useRef } from 'tmgc2-share';\nimport { useEmitter } from '@kp-ui/lowcode-core/src/utils/useEmitter';\nimport { useI18n, useAppRef } from '@kp-ui/lowcode-core';\n\nexport interface FormRenderProps {\n vfCtx?: Record<string, any>;\n formJson?: any;\n formData?: Record<string, any>;\n optionData?: Record<string, any>;\n disabledMode?: boolean;\n renderConfig?: {\n languageName?: string;\n };\n parentForm?: any;\n dynamicCreation?: boolean;\n debug?: boolean;\n}\n\n/**\n * 表单上下文配置\n */\nexport interface FormContextOptions {\n props: FormRenderProps;\n renderForm: any;\n}\n\n/**\n * 创建表单上下文\n * @param options 表单上下文配置\n * @returns 表单上下文\n */\nexport const useFormContext = ({ renderForm, props }: FormContextOptions) => {\n const { formJson } = props;\n const dynamicDialogRef = useTemplateRef<any>('dynamicDialogRef');\n const { i18nt } = useI18n();\n const [readModeFlag, setReadMode] = useRef(false);\n\n const emitter = useEmitter();\n\n const formJsonObj = ref();\n // 状态变量\n const formDataModel = ref<Record<string, any>>({});\n const isLoading = ref(false);\n const widgetRefList = ref<Map<string, any>>(new Map());\n const dialogProps = ref({});\n const childFormRef = ref();\n\n const formWidgetId = Symbol('formWidget');\n\n const dialogOrDrawerRef = ref();\n\n const { executeFunction, context, execHttpFunction } = useExecFunction();\n const { getFormRef, getWidgetRef, registerToRefList } = useAppRef(widgetRefList, formWidgetId);\n\n // 计算属性\n const formConfig = computed<FormConfig>(() => formJsonObj.value?.formConfig || {});\n\n const widgetList = computed(() => formJsonObj.value?.widgetList || []);\n const labelPosition = computed(() => {\n return formConfig.value?.labelPosition || 'horizontal';\n });\n\n const setChildFormRef = chid => {\n childFormRef.value = chid;\n };\n\n const labelWidth = computed(() => {\n return formConfig.value?.labelWidth ? `${formConfig.value.labelWidth}px` : '80px';\n });\n\n const customClass = computed(() => {\n return formConfig.value?.customClass || '';\n });\n\n // 初始化表单验证器\n let formValidator = useFormValidation(renderForm);\n\n // 监听 widgetList 变化,重新初始化验证器\n watchEffect(() => {\n formValidator = useFormValidation(renderForm);\n });\n\n /**\n * 设置表单JSON数据\n */\n const setFormJson = async (json: any) => {\n formJsonObj.value = json || { widgetList: [], formConfig: {} };\n\n // 重新构建表单数据模型\n formDataModel.value = {};\n insertCustomCode();\n await nextTick();\n handleOnMounted();\n };\n\n /**\n * 获取表单数据\n */\n const getFormData = () => {\n return formDataModel.value || {};\n };\n\n /**\n * 设置表单数据\n */\n const setFormData = (data: Record<string, any>) => {\n if (!data) return;\n // 更新表单数据模型\n Object.keys(data).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(formDataModel.value, key)) {\n formDataModel.value[key] = data[key];\n }\n });\n };\n\n /**\n * 设置加载状态\n */\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n };\n\n /**\n * 重置表单验证\n */\n const resetValidation = () => {\n formValidator.resetValidation();\n };\n\n /**\n * 清除表单验证\n */\n const clearValidate = () => {\n formValidator.clearValidate();\n };\n\n const setDialogOrDrawerRef = (ddRef: any) => {\n dialogOrDrawerRef.value = ddRef;\n };\n\n /**\n * 当显示多级嵌套弹窗或抽屉时,获取最顶层VFormRender组件实例\n * @returns {object}\n */\n const getTopFormRef = () => {\n if (!props.parentForm) {\n return getFormRef();\n }\n\n let topFormRef = props.parentForm;\n while (topFormRef.parentForm) {\n topFormRef = topFormRef.parentForm;\n }\n\n return topFormRef;\n };\n\n /**\n * 显示弹窗表单,动态创建v-form-render组件,option-data、global-dsv等属性继承父级表单\n * @param dialogName\n * @param formData\n * @param extraData\n */\n const showDialog = (dialogName, formData = {}, extraData = {}) => {\n const topFormRef = getTopFormRef();\n const dialogCon = (getContainerWidgetByName(topFormRef?.widgetList || [], dialogName) ||\n getContainerWidgetByName(widgetList.value || [], dialogName)) as Widget | null;\n\n if (dialogCon === null) {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n\n if (!dialogName || dialogCon.type !== 'vf-dialog') {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n const dFormJson = {\n widgetList: cloneDeep(dialogCon?.widgetList || []),\n formConfig: cloneFormConfigWithoutEventHandler(topFormRef?.formConfig?.value || {})\n };\n const wrapperDivId = getUuidKey();\n dialogProps.value = {\n options: dialogCon.options,\n formJson: dFormJson,\n formData: { ...formData },\n optionData: topFormRef.optionData,\n parentFormRef: context.value,\n extraData: extraData,\n wrapperId: wrapperDivId,\n vfCtx: { ...formData }\n };\n\n dynamicDialogRef.value?.show();\n };\n /**\n * 获取父级VFormRender组件实例\n * @returns {object}\n */\n const getParentFormRef = () => {\n return props.parentForm;\n };\n\n const getChildFormRef = () => {\n return dynamicDialogRef.value?.getFormRef();\n };\n\n /**\n * 字段值变化事件处理器\n */\n const fieldChangeEventHandler = () => {\n emitter.off$('fieldChange');\n emitter.on$('fieldChange', ({ fieldName, value }) => {\n // 过滤掉错误值\n value = value ?? '';\n set(formDataModel.value, fieldName, value);\n });\n };\n\n const onFormDetail = async () => {\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformDetail, {\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const onFormUpdate = async () => {\n const valid = await formValidator.validate();\n if (!valid) throw new Error(i18nt('表单验证失败'));\n\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformUpdate, {\n data: formDataModel.value,\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const handleOnMounted = () => {\n if (formConfig.value?.onFormMounted) {\n console.log('onFormMounted: ');\n executeFunction({\n functionBody: formConfig.value?.onFormMounted\n });\n }\n };\n\n /**\n * 插入自定义样式和脚本\n * @param cssCode CSS代码\n * @param functions 自定义函数\n * @param formId 表单ID\n */\n const insertCustomCode = () => {\n const formId = 'vfRender' + generateId();\n const { cssCode, functions } = formConfig.value;\n console.log({ cssCode });\n\n if (cssCode) {\n insertCustomCssToHead(cssCode, formId || '');\n }\n if (functions) {\n insertGlobalFunctionsToHtml(functions, formId || '');\n }\n };\n\n const reload = () => {\n const router = context.value?.$router;\n router?.replace({\n query: {\n ...router.currentRoute.value.query,\n _t: Date.now()\n }\n });\n };\n\n const goBack = (reloadStatus?: routerReloadStatus, cb?: () => void) => {\n const goBack = getFormRef().vfCtx?.goBack;\n if (typeof goBack === 'function') {\n goBack(reloadStatus, cb);\n } else {\n const router = context.value?.$router;\n router?.go(-1);\n }\n };\n\n const getFieldValue = (field: string) => {\n return formDataModel.value[field];\n };\n\n const getVfCtx = () => {\n return props.vfCtx;\n };\n\n onMounted(() => {\n if (formJson) {\n setFormJson(formJson);\n }\n fieldChangeEventHandler();\n });\n\n const expose = {\n context,\n i18nt,\n goBack,\n reload,\n formValidator,\n getFieldValue,\n resetValidation,\n clearValidate,\n getVfCtx,\n getParentFormRef,\n getFormRef,\n getWidgetRef,\n showDialog,\n getFormData,\n getChildFormRef,\n setFormData,\n setReadMode,\n setFormJson,\n setLoading,\n onFormDetail,\n onFormUpdate,\n formDataModel,\n isLoading,\n vfCtx: props.vfCtx,\n // 计算属性\n formConfig,\n dynamicDialogRef,\n setChildFormRef,\n setDialogOrDrawerRef\n };\n\n return {\n formWidgetId,\n registerToRefList,\n dialogOrDrawerRef,\n\n emitter,\n // 状态\n formJsonObj,\n readModeFlag,\n // 引用\n widgetRefList,\n\n widgetList,\n labelPosition,\n labelWidth,\n customClass,\n dialogProps,\n\n expose,\n ...expose\n };\n};\n"],"names":["goBack"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { computed } from "vue";
2
2
  import { RollbackOutlined, UnlockOutlined, LockOutlined, VerticalAlignTopOutlined, VerticalAlignBottomOutlined, ArrowUpOutlined, ArrowDownOutlined, AppstoreOutlined, CopyOutlined, DeleteOutlined } from "@ant-design/icons-vue";
3
3
  import { useDesigner } from "../../hooks/useDesigner.js";
4
- /* empty css */
5
4
  import { useI18n } from "../../utils/i18n.js";
6
5
  function useWidgetContextMenu(props) {
7
6
  const { designer, isBI } = useDesigner();
@@ -1 +1 @@
1
- {"version":3,"file":"useWidgetContextMenu.js","sources":["../../../../../../core/src/components/contextMenu/useWidgetContextMenu.ts"],"sourcesContent":["import { Component, computed, Ref } from 'vue';\nimport { Widget } from '@kp-ui/lowcode-core/src/types/schema';\nimport {\n DeleteOutlined,\n LockOutlined,\n UnlockOutlined,\n VerticalAlignTopOutlined,\n VerticalAlignBottomOutlined,\n ArrowUpOutlined,\n ArrowDownOutlined,\n AppstoreOutlined,\n CopyOutlined,\n RollbackOutlined\n} from '@ant-design/icons-vue';\nimport { useDesigner } from '@kp-ui/lowcode-core';\nimport { useI18n } from '@kp-ui/lowcode-core';\n\nexport interface MenuItem {\n key: string;\n label?: string;\n icon?: Component;\n onClick?: () => void;\n divider?: boolean;\n children?: MenuItem[];\n hidden?: boolean;\n}\n\nexport function useWidgetContextMenu(props: {\n widget: Widget;\n index: number;\n parentWidget?: Widget;\n onClose: () => void;\n list: Ref<Widget[]>;\n}) {\n const { designer, isBI } = useDesigner();\n const { i18nt } = useI18n();\n\n // 上移组件\n const moveUpWidget = () => {\n designer.value.moveUpWidget(props.list.value, props.index);\n designer.value.emitHistoryChange();\n };\n\n // 下移组件\n const moveDownWidget = () => {\n designer.value.moveDownWidget(props.list.value, props.index);\n designer.value.emitHistoryChange();\n };\n\n // 复制组件\n const cloneWidget = () => {\n const list = props.list.value;\n if (!list) return;\n const cloned = designer.value.copyWidget(props.widget);\n list.splice(props.index + 1, 0, cloned);\n designer.value.setSelected(cloned);\n designer.value.emitHistoryChange();\n };\n\n // 删除组件\n const removeWidget = () => {\n designer.value.removeWidget(props.list.value, props.index, props.parentWidget);\n };\n\n // 选择父组件\n const selectParentWidget = () => {\n if (props.parentWidget?.id) {\n designer.value.setSelected(props.parentWidget);\n } else {\n designer.value.clearSelected();\n }\n };\n\n const handleAction = (action: () => void) => {\n action();\n props.onClose();\n };\n\n const handleLock = () => {\n props.widget.options.locked = !props.widget.options.locked;\n props.onClose();\n };\n\n const handleLayer = (type: 'top' | 'bottom' | 'up' | 'down') => {\n const widget = props.widget;\n const zIndex = widget.options.zIndex || 0;\n const list = designer.value.widgetList;\n switch (type) {\n case 'top':\n const maxZ = Math.max(...list.map(w => w.options.zIndex || 0));\n widget.options.zIndex = maxZ + 1;\n break;\n case 'bottom':\n const minZ = Math.min(...list.map(w => w.options.zIndex || 0));\n widget.options.zIndex = minZ - 1;\n break;\n case 'up':\n widget.options.zIndex = zIndex + 1;\n break;\n case 'down':\n widget.options.zIndex = zIndex - 1;\n break;\n }\n props.onClose();\n };\n\n const menuConfigs = computed<MenuItem[]>(() => {\n const configs: MenuItem[] = [];\n\n // 选择父组件\n if (props.parentWidget?.id) {\n configs.push({\n key: 'selectParent',\n label: i18nt('designer.hint.selectParentWidget'),\n icon: RollbackOutlined,\n onClick: () => handleAction(selectParentWidget)\n });\n configs.push({ key: 'd1', divider: true });\n }\n\n if (isBI.value) {\n // BI 模式特有:锁定\n configs.push({\n key: 'lock',\n label: props.widget.options.locked\n ? i18nt('designer.hint.unlock')\n : i18nt('designer.hint.lock'),\n icon: props.widget.options.locked ? UnlockOutlined : LockOutlined,\n onClick: handleLock\n });\n\n // BI 模式特有:图层\n configs.push({\n key: 'layer',\n label: i18nt('designer.hint.layer'),\n icon: AppstoreOutlined,\n children: [\n {\n key: 'bringToFront',\n label: i18nt('designer.hint.bringToFront'),\n icon: VerticalAlignTopOutlined,\n onClick: () => handleLayer('top')\n },\n {\n key: 'sendToBack',\n label: i18nt('designer.hint.sendToBack'),\n icon: VerticalAlignBottomOutlined,\n onClick: () => handleLayer('bottom')\n },\n {\n key: 'bringForward',\n label: i18nt('designer.hint.bringForward'),\n icon: ArrowUpOutlined,\n onClick: () => handleLayer('up')\n },\n {\n key: 'sendBackward',\n label: i18nt('designer.hint.sendBackward'),\n icon: ArrowDownOutlined,\n onClick: () => handleLayer('down')\n }\n ]\n });\n\n configs.push({\n key: 'clone',\n label: i18nt('designer.hint.cloneWidget'),\n icon: CopyOutlined,\n onClick: () => handleAction(cloneWidget)\n });\n\n configs.push({ key: 'd2', divider: true });\n } else {\n // 非 BI 模式:上移/下移/复制\n configs.push({\n key: 'moveUp',\n label: i18nt('designer.hint.moveUpWidget'),\n icon: ArrowUpOutlined,\n onClick: () => handleAction(moveUpWidget),\n hidden: props.index <= 0\n });\n configs.push({\n key: 'moveDown',\n label: i18nt('designer.hint.moveDownWidget'),\n icon: ArrowDownOutlined,\n onClick: () => handleAction(moveDownWidget),\n hidden: props.index >= props.list.value.length - 1\n });\n\n configs.push({\n key: 'clone',\n label: i18nt('designer.hint.cloneWidget'),\n icon: CopyOutlined,\n onClick: () => handleAction(cloneWidget)\n });\n\n configs.push({ key: 'd3', divider: true });\n }\n\n // 删除\n configs.push({\n key: 'delete',\n label: i18nt('designer.hint.remove'),\n icon: DeleteOutlined,\n onClick: () => handleAction(removeWidget)\n });\n\n return configs.filter(item => !item.hidden);\n });\n\n return {\n menuConfigs,\n moveUpWidget,\n moveDownWidget,\n cloneWidget,\n removeWidget,\n selectParentWidget\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useWidgetContextMenu.js","sources":["../../../../../../core/src/components/contextMenu/useWidgetContextMenu.ts"],"sourcesContent":["import { Component, computed, Ref } from 'vue';\nimport { Widget } from '@kp-ui/lowcode-core/src/types/schema';\nimport {\n DeleteOutlined,\n LockOutlined,\n UnlockOutlined,\n VerticalAlignTopOutlined,\n VerticalAlignBottomOutlined,\n ArrowUpOutlined,\n ArrowDownOutlined,\n AppstoreOutlined,\n CopyOutlined,\n RollbackOutlined\n} from '@ant-design/icons-vue';\nimport { useDesigner } from '@kp-ui/lowcode-core';\nimport { useI18n } from '@kp-ui/lowcode-core';\n\nexport interface MenuItem {\n key: string;\n label?: string;\n icon?: Component;\n onClick?: () => void;\n divider?: boolean;\n children?: MenuItem[];\n hidden?: boolean;\n}\n\nexport function useWidgetContextMenu(props: {\n widget: Widget;\n index: number;\n parentWidget?: Widget;\n onClose: () => void;\n list: Ref<Widget[]>;\n}) {\n const { designer, isBI } = useDesigner();\n const { i18nt } = useI18n();\n\n // 上移组件\n const moveUpWidget = () => {\n designer.value.moveUpWidget(props.list.value, props.index);\n designer.value.emitHistoryChange();\n };\n\n // 下移组件\n const moveDownWidget = () => {\n designer.value.moveDownWidget(props.list.value, props.index);\n designer.value.emitHistoryChange();\n };\n\n // 复制组件\n const cloneWidget = () => {\n const list = props.list.value;\n if (!list) return;\n const cloned = designer.value.copyWidget(props.widget);\n list.splice(props.index + 1, 0, cloned);\n designer.value.setSelected(cloned);\n designer.value.emitHistoryChange();\n };\n\n // 删除组件\n const removeWidget = () => {\n designer.value.removeWidget(props.list.value, props.index, props.parentWidget);\n };\n\n // 选择父组件\n const selectParentWidget = () => {\n if (props.parentWidget?.id) {\n designer.value.setSelected(props.parentWidget);\n } else {\n designer.value.clearSelected();\n }\n };\n\n const handleAction = (action: () => void) => {\n action();\n props.onClose();\n };\n\n const handleLock = () => {\n props.widget.options.locked = !props.widget.options.locked;\n props.onClose();\n };\n\n const handleLayer = (type: 'top' | 'bottom' | 'up' | 'down') => {\n const widget = props.widget;\n const zIndex = widget.options.zIndex || 0;\n const list = designer.value.widgetList;\n switch (type) {\n case 'top':\n const maxZ = Math.max(...list.map(w => w.options.zIndex || 0));\n widget.options.zIndex = maxZ + 1;\n break;\n case 'bottom':\n const minZ = Math.min(...list.map(w => w.options.zIndex || 0));\n widget.options.zIndex = minZ - 1;\n break;\n case 'up':\n widget.options.zIndex = zIndex + 1;\n break;\n case 'down':\n widget.options.zIndex = zIndex - 1;\n break;\n }\n props.onClose();\n };\n\n const menuConfigs = computed<MenuItem[]>(() => {\n const configs: MenuItem[] = [];\n\n // 选择父组件\n if (props.parentWidget?.id) {\n configs.push({\n key: 'selectParent',\n label: i18nt('designer.hint.selectParentWidget'),\n icon: RollbackOutlined,\n onClick: () => handleAction(selectParentWidget)\n });\n configs.push({ key: 'd1', divider: true });\n }\n\n if (isBI.value) {\n // BI 模式特有:锁定\n configs.push({\n key: 'lock',\n label: props.widget.options.locked\n ? i18nt('designer.hint.unlock')\n : i18nt('designer.hint.lock'),\n icon: props.widget.options.locked ? UnlockOutlined : LockOutlined,\n onClick: handleLock\n });\n\n // BI 模式特有:图层\n configs.push({\n key: 'layer',\n label: i18nt('designer.hint.layer'),\n icon: AppstoreOutlined,\n children: [\n {\n key: 'bringToFront',\n label: i18nt('designer.hint.bringToFront'),\n icon: VerticalAlignTopOutlined,\n onClick: () => handleLayer('top')\n },\n {\n key: 'sendToBack',\n label: i18nt('designer.hint.sendToBack'),\n icon: VerticalAlignBottomOutlined,\n onClick: () => handleLayer('bottom')\n },\n {\n key: 'bringForward',\n label: i18nt('designer.hint.bringForward'),\n icon: ArrowUpOutlined,\n onClick: () => handleLayer('up')\n },\n {\n key: 'sendBackward',\n label: i18nt('designer.hint.sendBackward'),\n icon: ArrowDownOutlined,\n onClick: () => handleLayer('down')\n }\n ]\n });\n\n configs.push({\n key: 'clone',\n label: i18nt('designer.hint.cloneWidget'),\n icon: CopyOutlined,\n onClick: () => handleAction(cloneWidget)\n });\n\n configs.push({ key: 'd2', divider: true });\n } else {\n // 非 BI 模式:上移/下移/复制\n configs.push({\n key: 'moveUp',\n label: i18nt('designer.hint.moveUpWidget'),\n icon: ArrowUpOutlined,\n onClick: () => handleAction(moveUpWidget),\n hidden: props.index <= 0\n });\n configs.push({\n key: 'moveDown',\n label: i18nt('designer.hint.moveDownWidget'),\n icon: ArrowDownOutlined,\n onClick: () => handleAction(moveDownWidget),\n hidden: props.index >= props.list.value.length - 1\n });\n\n configs.push({\n key: 'clone',\n label: i18nt('designer.hint.cloneWidget'),\n icon: CopyOutlined,\n onClick: () => handleAction(cloneWidget)\n });\n\n configs.push({ key: 'd3', divider: true });\n }\n\n // 删除\n configs.push({\n key: 'delete',\n label: i18nt('designer.hint.remove'),\n icon: DeleteOutlined,\n onClick: () => handleAction(removeWidget)\n });\n\n return configs.filter(item => !item.hidden);\n });\n\n return {\n menuConfigs,\n moveUpWidget,\n moveDownWidget,\n cloneWidget,\n removeWidget,\n selectParentWidget\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /* empty css */
2
1
  import { message } from "ant-design-vue";
3
2
  import { inject, ref, getCurrentInstance, computed } from "vue";
4
3
  import { useI18n } from "../utils/i18n.js";
@@ -1 +1 @@
1
- {"version":3,"file":"useAppRef.js","sources":["../../../../../core/src/hooks/useAppRef.ts"],"sourcesContent":["import { useI18n } from '@kp-ui/lowcode-core';\nimport { message } from 'ant-design-vue';\nimport { computed, getCurrentInstance, inject, ref, Ref } from 'vue';\n\nexport function useAppRef(widgetRefList?: Ref<Map<string, any>>, formWidgetId?: any) {\n const { i18nt } = useI18n();\n const isRoot = formWidgetId !== undefined;\n\n if (!isRoot) {\n formWidgetId = inject('formWidgetId', '');\n }\n\n const refList = inject<Ref<Map<string, any>>>('refList', widgetRefList || ref(new Map()));\n\n const instance = getCurrentInstance();\n\n const widgetId = computed(() => instance?.exposed?.field?.options?.name as string);\n\n const initRefList = () => {\n registerToRefList();\n };\n\n const getWidgetRef = (widgetName, showError?: boolean) => {\n const list = isRoot ? (widgetRefList?.value as Map<any, any>) : refList.value;\n const foundRef = list.get(widgetName);\n if (!foundRef && !!showError) {\n message.error(i18nt('render.hint.refNotFound') + widgetName);\n }\n return foundRef;\n };\n\n /* 该方法用于组件重名检查!! */\n const registerToRefList = (widgetName?: symbol | string) => {\n const list = isRoot ? (widgetRefList?.value as Map<any, any>) : refList.value;\n list.set(widgetName || widgetId.value, {\n instance,\n proxy: instance?.proxy,\n ...instance?.appContext.config.globalProperties,\n ...instance?.exposed\n });\n };\n\n /**\n * 从引用列表中注销\n */\n const unregisterFromRefList = () => {\n const widgetId = instance?.exposed?.field?.options?.name;\n refList?.value?.delete(widgetId);\n };\n\n const getFormRef = () => {\n return getWidgetRef(formWidgetId);\n };\n\n return {\n refList,\n getFormRef,\n registerToRefList,\n unregisterFromRefList,\n initRefList,\n getWidgetRef\n };\n}\n"],"names":["widgetId"],"mappings":";;;;AAIO,SAAS,UAAU,eAAuC,cAAoB;AACjF,QAAM,EAAE,MAAA,IAAU,QAAA;AAClB,QAAM,SAAS,iBAAiB;AAEhC,MAAI,CAAC,QAAQ;AACT,mBAAe,OAAO,gBAAgB,EAAE;AAAA,EAC5C;AAEA,QAAM,UAAU,OAA8B,WAAW,iBAAiB,IAAI,oBAAI,IAAA,CAAK,CAAC;AAExF,QAAM,WAAW,mBAAA;AAEjB,QAAM,WAAW,SAAS,MAAA;;AAAM,kEAAU,YAAV,mBAAmB,UAAnB,mBAA0B,YAA1B,mBAAmC;AAAA,GAAc;AAEjF,QAAM,cAAc,MAAM;AACtB,sBAAA;AAAA,EACJ;AAEA,QAAM,eAAe,CAAC,YAAY,cAAwB;AACtD,UAAM,OAAO,SAAU,+CAAe,QAA0B,QAAQ;AACxE,UAAM,WAAW,KAAK,IAAI,UAAU;AACpC,QAAI,CAAC,YAAY,CAAC,CAAC,WAAW;AAC1B,cAAQ,MAAM,MAAM,yBAAyB,IAAI,UAAU;AAAA,IAC/D;AACA,WAAO;AAAA,EACX;AAGA,QAAM,oBAAoB,CAAC,eAAiC;AACxD,UAAM,OAAO,SAAU,+CAAe,QAA0B,QAAQ;AACxE,SAAK,IAAI,cAAc,SAAS,OAAO;AAAA,MACnC;AAAA,MACA,OAAO,qCAAU;AAAA,MACjB,GAAG,qCAAU,WAAW,OAAO;AAAA,MAC/B,GAAG,qCAAU;AAAA,IAAA,CAChB;AAAA,EACL;AAKA,QAAM,wBAAwB,MAAM;;AAChC,UAAMA,aAAW,sDAAU,YAAV,mBAAmB,UAAnB,mBAA0B,YAA1B,mBAAmC;AACpD,6CAAS,UAAT,mBAAgB,OAAOA;AAAAA,EAC3B;AAEA,QAAM,aAAa,MAAM;AACrB,WAAO,aAAa,YAAY;AAAA,EACpC;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useAppRef.js","sources":["../../../../../core/src/hooks/useAppRef.ts"],"sourcesContent":["import { useI18n } from '@kp-ui/lowcode-core';\nimport { message } from 'ant-design-vue';\nimport { computed, getCurrentInstance, inject, ref, Ref } from 'vue';\n\nexport function useAppRef(widgetRefList?: Ref<Map<string, any>>, formWidgetId?: any) {\n const { i18nt } = useI18n();\n const isRoot = formWidgetId !== undefined;\n\n if (!isRoot) {\n formWidgetId = inject('formWidgetId', '');\n }\n\n const refList = inject<Ref<Map<string, any>>>('refList', widgetRefList || ref(new Map()));\n\n const instance = getCurrentInstance();\n\n const widgetId = computed(() => instance?.exposed?.field?.options?.name as string);\n\n const initRefList = () => {\n registerToRefList();\n };\n\n const getWidgetRef = (widgetName, showError?: boolean) => {\n const list = isRoot ? (widgetRefList?.value as Map<any, any>) : refList.value;\n const foundRef = list.get(widgetName);\n if (!foundRef && !!showError) {\n message.error(i18nt('render.hint.refNotFound') + widgetName);\n }\n return foundRef;\n };\n\n /* 该方法用于组件重名检查!! */\n const registerToRefList = (widgetName?: symbol | string) => {\n const list = isRoot ? (widgetRefList?.value as Map<any, any>) : refList.value;\n list.set(widgetName || widgetId.value, {\n instance,\n proxy: instance?.proxy,\n ...instance?.appContext.config.globalProperties,\n ...instance?.exposed\n });\n };\n\n /**\n * 从引用列表中注销\n */\n const unregisterFromRefList = () => {\n const widgetId = instance?.exposed?.field?.options?.name;\n refList?.value?.delete(widgetId);\n };\n\n const getFormRef = () => {\n return getWidgetRef(formWidgetId);\n };\n\n return {\n refList,\n getFormRef,\n registerToRefList,\n unregisterFromRefList,\n initRefList,\n getWidgetRef\n };\n}\n"],"names":["widgetId"],"mappings":";;;AAIO,SAAS,UAAU,eAAuC,cAAoB;AACjF,QAAM,EAAE,MAAA,IAAU,QAAA;AAClB,QAAM,SAAS,iBAAiB;AAEhC,MAAI,CAAC,QAAQ;AACT,mBAAe,OAAO,gBAAgB,EAAE;AAAA,EAC5C;AAEA,QAAM,UAAU,OAA8B,WAAW,iBAAiB,IAAI,oBAAI,IAAA,CAAK,CAAC;AAExF,QAAM,WAAW,mBAAA;AAEjB,QAAM,WAAW,SAAS,MAAA;;AAAM,kEAAU,YAAV,mBAAmB,UAAnB,mBAA0B,YAA1B,mBAAmC;AAAA,GAAc;AAEjF,QAAM,cAAc,MAAM;AACtB,sBAAA;AAAA,EACJ;AAEA,QAAM,eAAe,CAAC,YAAY,cAAwB;AACtD,UAAM,OAAO,SAAU,+CAAe,QAA0B,QAAQ;AACxE,UAAM,WAAW,KAAK,IAAI,UAAU;AACpC,QAAI,CAAC,YAAY,CAAC,CAAC,WAAW;AAC1B,cAAQ,MAAM,MAAM,yBAAyB,IAAI,UAAU;AAAA,IAC/D;AACA,WAAO;AAAA,EACX;AAGA,QAAM,oBAAoB,CAAC,eAAiC;AACxD,UAAM,OAAO,SAAU,+CAAe,QAA0B,QAAQ;AACxE,SAAK,IAAI,cAAc,SAAS,OAAO;AAAA,MACnC;AAAA,MACA,OAAO,qCAAU;AAAA,MACjB,GAAG,qCAAU,WAAW,OAAO;AAAA,MAC/B,GAAG,qCAAU;AAAA,IAAA,CAChB;AAAA,EACL;AAKA,QAAM,wBAAwB,MAAM;;AAChC,UAAMA,aAAW,sDAAU,YAAV,mBAAmB,UAAnB,mBAA0B,YAA1B,mBAAmC;AACpD,6CAAS,UAAT,mBAAgB,OAAOA;AAAAA,EAC3B;AAEA,QAAM,aAAa,MAAM;AACrB,WAAO,aAAa,YAAY;AAAA,EACpC;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
@@ -1,5 +1,4 @@
1
1
  import { ref } from "vue";
2
- /* empty css */
3
2
  import { useExecFunction } from "tmgc2-share";
4
3
  import { useI18n } from "../utils/i18n.js";
5
4
  function useDataHttp({ props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"useDataHttp.js","sources":["../../../../../core/src/hooks/useDataHttp.ts"],"sourcesContent":["import { ref } from 'vue';\nimport { PaginationProps } from 'ant-design-vue';\nimport { useI18n, WidgetProps } from '@kp-ui/lowcode-core';\nimport { useExecFunction } from 'tmgc2-share';\n\nexport function useDataHttp({ props }: { props: WidgetProps<any> }) {\n const { http, dataHandlerCode, dataReqHandlerCode } = props.field.options;\n\n const { i18nt } = useI18n();\n const isLoading = ref(false);\n\n const { execHttpFunction } = useExecFunction();\n const pagintion = ref<PaginationProps>({\n ...(props.widget.options.pagination as any),\n onShowSizeChange: (current, pageSize) => {\n props.field.options.pagination.pageSize = pageSize;\n props.field.options.pagination.current = 1;\n pagintion.value.current = 1;\n },\n showTotal: total => i18nt('designer.showTotal', { total })\n });\n\n const loadataSource = async (): Promise<any> => {\n try {\n isLoading.value = true;\n const data = await execHttpFunction(\n {\n http,\n dataHandlerCode,\n dataReqHandlerCode\n },\n {}\n );\n return data;\n } catch (error) {\n console.error(error);\n return {};\n } finally {\n isLoading.value = false;\n }\n };\n\n const getPagination = () => {\n return pagintion.value;\n };\n\n /**\n * 设置表格分页\n * @param pagination\n */\n const setPagination = pagination => {\n if (pagination.current !== undefined) {\n pagintion.value.current = pagination.current;\n props.field.options.pagination.current = pagination.current;\n }\n\n if (pagination.page !== undefined) {\n pagintion.value.current = pagination.page;\n props.field.options.pagination.current = pagination.page;\n }\n\n if (pagination.total !== undefined) {\n pagintion.value.total = pagination.total;\n props.field.options.pagination.total = pagination.total;\n }\n };\n\n return {\n pagintion,\n setPagination,\n getPagination,\n loadataSource,\n isLoading\n };\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,YAAY,EAAE,SAAsC;AAChE,QAAM,EAAE,MAAM,iBAAiB,mBAAA,IAAuB,MAAM,MAAM;AAElE,QAAM,EAAE,MAAA,IAAU,QAAA;AAClB,QAAM,YAAY,IAAI,KAAK;AAE3B,QAAM,EAAE,iBAAA,IAAqB,gBAAA;AAC7B,QAAM,YAAY,IAAqB;AAAA,IACnC,GAAI,MAAM,OAAO,QAAQ;AAAA,IACzB,kBAAkB,CAAC,SAAS,aAAa;AACrC,YAAM,MAAM,QAAQ,WAAW,WAAW;AAC1C,YAAM,MAAM,QAAQ,WAAW,UAAU;AACzC,gBAAU,MAAM,UAAU;AAAA,IAC9B;AAAA,IACA,WAAW,CAAA,UAAS,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAAA,CAC5D;AAED,QAAM,gBAAgB,YAA0B;AAC5C,QAAI;AACA,gBAAU,QAAQ;AAClB,YAAM,OAAO,MAAM;AAAA,QACf;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEJ,CAAA;AAAA,MAAC;AAEL,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,cAAQ,MAAM,KAAK;AACnB,aAAO,CAAA;AAAA,IACX,UAAA;AACI,gBAAU,QAAQ;AAAA,IACtB;AAAA,EACJ;AAEA,QAAM,gBAAgB,MAAM;AACxB,WAAO,UAAU;AAAA,EACrB;AAMA,QAAM,gBAAgB,CAAA,eAAc;AAChC,QAAI,WAAW,YAAY,QAAW;AAClC,gBAAU,MAAM,UAAU,WAAW;AACrC,YAAM,MAAM,QAAQ,WAAW,UAAU,WAAW;AAAA,IACxD;AAEA,QAAI,WAAW,SAAS,QAAW;AAC/B,gBAAU,MAAM,UAAU,WAAW;AACrC,YAAM,MAAM,QAAQ,WAAW,UAAU,WAAW;AAAA,IACxD;AAEA,QAAI,WAAW,UAAU,QAAW;AAChC,gBAAU,MAAM,QAAQ,WAAW;AACnC,YAAM,MAAM,QAAQ,WAAW,QAAQ,WAAW;AAAA,IACtD;AAAA,EACJ;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useDataHttp.js","sources":["../../../../../core/src/hooks/useDataHttp.ts"],"sourcesContent":["import { ref } from 'vue';\nimport { PaginationProps } from 'ant-design-vue';\nimport { useI18n, WidgetProps } from '@kp-ui/lowcode-core';\nimport { useExecFunction } from 'tmgc2-share';\n\nexport function useDataHttp({ props }: { props: WidgetProps<any> }) {\n const { http, dataHandlerCode, dataReqHandlerCode } = props.field.options;\n\n const { i18nt } = useI18n();\n const isLoading = ref(false);\n\n const { execHttpFunction } = useExecFunction();\n const pagintion = ref<PaginationProps>({\n ...(props.widget.options.pagination as any),\n onShowSizeChange: (current, pageSize) => {\n props.field.options.pagination.pageSize = pageSize;\n props.field.options.pagination.current = 1;\n pagintion.value.current = 1;\n },\n showTotal: total => i18nt('designer.showTotal', { total })\n });\n\n const loadataSource = async (): Promise<any> => {\n try {\n isLoading.value = true;\n const data = await execHttpFunction(\n {\n http,\n dataHandlerCode,\n dataReqHandlerCode\n },\n {}\n );\n return data;\n } catch (error) {\n console.error(error);\n return {};\n } finally {\n isLoading.value = false;\n }\n };\n\n const getPagination = () => {\n return pagintion.value;\n };\n\n /**\n * 设置表格分页\n * @param pagination\n */\n const setPagination = pagination => {\n if (pagination.current !== undefined) {\n pagintion.value.current = pagination.current;\n props.field.options.pagination.current = pagination.current;\n }\n\n if (pagination.page !== undefined) {\n pagintion.value.current = pagination.page;\n props.field.options.pagination.current = pagination.page;\n }\n\n if (pagination.total !== undefined) {\n pagintion.value.total = pagination.total;\n props.field.options.pagination.total = pagination.total;\n }\n };\n\n return {\n pagintion,\n setPagination,\n getPagination,\n loadataSource,\n isLoading\n };\n}\n"],"names":[],"mappings":";;;AAKO,SAAS,YAAY,EAAE,SAAsC;AAChE,QAAM,EAAE,MAAM,iBAAiB,mBAAA,IAAuB,MAAM,MAAM;AAElE,QAAM,EAAE,MAAA,IAAU,QAAA;AAClB,QAAM,YAAY,IAAI,KAAK;AAE3B,QAAM,EAAE,iBAAA,IAAqB,gBAAA;AAC7B,QAAM,YAAY,IAAqB;AAAA,IACnC,GAAI,MAAM,OAAO,QAAQ;AAAA,IACzB,kBAAkB,CAAC,SAAS,aAAa;AACrC,YAAM,MAAM,QAAQ,WAAW,WAAW;AAC1C,YAAM,MAAM,QAAQ,WAAW,UAAU;AACzC,gBAAU,MAAM,UAAU;AAAA,IAC9B;AAAA,IACA,WAAW,CAAA,UAAS,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAAA,CAC5D;AAED,QAAM,gBAAgB,YAA0B;AAC5C,QAAI;AACA,gBAAU,QAAQ;AAClB,YAAM,OAAO,MAAM;AAAA,QACf;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEJ,CAAA;AAAA,MAAC;AAEL,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,cAAQ,MAAM,KAAK;AACnB,aAAO,CAAA;AAAA,IACX,UAAA;AACI,gBAAU,QAAQ;AAAA,IACtB;AAAA,EACJ;AAEA,QAAM,gBAAgB,MAAM;AACxB,WAAO,UAAU;AAAA,EACrB;AAMA,QAAM,gBAAgB,CAAA,eAAc;AAChC,QAAI,WAAW,YAAY,QAAW;AAClC,gBAAU,MAAM,UAAU,WAAW;AACrC,YAAM,MAAM,QAAQ,WAAW,UAAU,WAAW;AAAA,IACxD;AAEA,QAAI,WAAW,SAAS,QAAW;AAC/B,gBAAU,MAAM,UAAU,WAAW;AACrC,YAAM,MAAM,QAAQ,WAAW,UAAU,WAAW;AAAA,IACxD;AAEA,QAAI,WAAW,UAAU,QAAW;AAChC,gBAAU,MAAM,QAAQ,WAAW;AACnC,YAAM,MAAM,QAAQ,WAAW,QAAQ,WAAW;AAAA,IACtD;AAAA,EACJ;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
@@ -1,4 +1,3 @@
1
- /* empty css */
2
1
  import { inject, ref, computed } from "vue";
3
2
  import { LayoutTypeEnum } from "../constants/LayoutTypeEnum.js";
4
3
  function useDesigner() {
@@ -1 +1 @@
1
- {"version":3,"file":"useDesigner.js","sources":["../../../../../core/src/hooks/useDesigner.ts"],"sourcesContent":["import { FormConfig, Widget } from '@kp-ui/lowcode-core/src/types/schema';\nimport { FormDesigner } from '@kp-ui/lowcode-core/src/types/designer';\nimport { LayoutTypeEnum } from '@kp-ui/lowcode-core';\nimport { computed, inject, nextTick, ref, Ref } from 'vue';\n\nexport function useDesigner() {\n const designer = inject<Ref<FormDesigner>>('designer', ref({} as FormDesigner));\n const designState = inject('designState', false);\n const getWidget = inject('getWidget', (widget: Widget) => {});\n const formConfig = inject<Ref<FormConfig>>('formConfig', ref({} as FormConfig));\n const formData = inject('formData', ref({}));\n\n const layoutType = inject('layoutType', ref(LayoutTypeEnum.PC));\n const isPc = computed(\n () => layoutType.value === LayoutTypeEnum.PC || layoutType.value === LayoutTypeEnum.H5\n );\n const isH5 = computed(() => layoutType.value === LayoutTypeEnum.H5);\n\n const isBI = computed(() => layoutType.value === LayoutTypeEnum.BI);\n\n const onDragAdd = ({ newIndex }, widgetList: Widget[]) => {\n const newWidget = widgetList[newIndex];\n if (newWidget) {\n designer.value.setSelected(newWidget);\n } else {\n designer.value.setSelected(widgetList[newIndex - 1]);\n }\n };\n\n const onDragUpdate = () => {\n designer.value.emitHistoryChange();\n };\n\n /**\n * 选择子组件\n * @param widget 组件配置\n */\n const selectWidget = widget => {\n designer.value.setSelected(widget);\n };\n\n const selectedWidget = computed(() => designer.value.selectedWidget);\n\n const selected = (widgetId: string) => {\n return designer.value.selectedId === widgetId;\n };\n\n const onWidgetClick = (widget: Widget) => {\n designer.value.setSelected(widget);\n };\n\n return {\n selectedWidget,\n getWidget,\n selected,\n isPc,\n isH5,\n isBI,\n designState,\n formData,\n formConfig,\n designer,\n layoutType,\n onWidgetClick,\n selectWidget,\n onDragAdd,\n onDragUpdate\n };\n}\n"],"names":[],"mappings":";;;AAKO,SAAS,cAAc;AAC1B,QAAM,WAAW,OAA0B,YAAY,IAAI,CAAA,CAAkB,CAAC;AAC9E,QAAM,cAAc,OAAO,eAAe,KAAK;AAC/C,QAAM,YAAY,OAAO,aAAa,CAAC,WAAmB;AAAA,EAAC,CAAC;AAC5D,QAAM,aAAa,OAAwB,cAAc,IAAI,CAAA,CAAgB,CAAC;AAC9E,QAAM,WAAW,OAAO,YAAY,IAAI,CAAA,CAAE,CAAC;AAE3C,QAAM,aAAa,OAAO,cAAc,IAAI,eAAe,EAAE,CAAC;AAC9D,QAAM,OAAO;AAAA,IACT,MAAM,WAAW,UAAU,eAAe,MAAM,WAAW,UAAU,eAAe;AAAA,EAAA;AAExF,QAAM,OAAO,SAAS,MAAM,WAAW,UAAU,eAAe,EAAE;AAElE,QAAM,OAAO,SAAS,MAAM,WAAW,UAAU,eAAe,EAAE;AAElE,QAAM,YAAY,CAAC,EAAE,SAAA,GAAY,eAAyB;AACtD,UAAM,YAAY,WAAW,QAAQ;AACrC,QAAI,WAAW;AACX,eAAS,MAAM,YAAY,SAAS;AAAA,IACxC,OAAO;AACH,eAAS,MAAM,YAAY,WAAW,WAAW,CAAC,CAAC;AAAA,IACvD;AAAA,EACJ;AAEA,QAAM,eAAe,MAAM;AACvB,aAAS,MAAM,kBAAA;AAAA,EACnB;AAMA,QAAM,eAAe,CAAA,WAAU;AAC3B,aAAS,MAAM,YAAY,MAAM;AAAA,EACrC;AAEA,QAAM,iBAAiB,SAAS,MAAM,SAAS,MAAM,cAAc;AAEnE,QAAM,WAAW,CAAC,aAAqB;AACnC,WAAO,SAAS,MAAM,eAAe;AAAA,EACzC;AAEA,QAAM,gBAAgB,CAAC,WAAmB;AACtC,aAAS,MAAM,YAAY,MAAM;AAAA,EACrC;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useDesigner.js","sources":["../../../../../core/src/hooks/useDesigner.ts"],"sourcesContent":["import { FormConfig, Widget } from '@kp-ui/lowcode-core/src/types/schema';\nimport { FormDesigner } from '@kp-ui/lowcode-core/src/types/designer';\nimport { LayoutTypeEnum } from '@kp-ui/lowcode-core';\nimport { computed, inject, nextTick, ref, Ref } from 'vue';\n\nexport function useDesigner() {\n const designer = inject<Ref<FormDesigner>>('designer', ref({} as FormDesigner));\n const designState = inject('designState', false);\n const getWidget = inject('getWidget', (widget: Widget) => {});\n const formConfig = inject<Ref<FormConfig>>('formConfig', ref({} as FormConfig));\n const formData = inject('formData', ref({}));\n\n const layoutType = inject('layoutType', ref(LayoutTypeEnum.PC));\n const isPc = computed(\n () => layoutType.value === LayoutTypeEnum.PC || layoutType.value === LayoutTypeEnum.H5\n );\n const isH5 = computed(() => layoutType.value === LayoutTypeEnum.H5);\n\n const isBI = computed(() => layoutType.value === LayoutTypeEnum.BI);\n\n const onDragAdd = ({ newIndex }, widgetList: Widget[]) => {\n const newWidget = widgetList[newIndex];\n if (newWidget) {\n designer.value.setSelected(newWidget);\n } else {\n designer.value.setSelected(widgetList[newIndex - 1]);\n }\n };\n\n const onDragUpdate = () => {\n designer.value.emitHistoryChange();\n };\n\n /**\n * 选择子组件\n * @param widget 组件配置\n */\n const selectWidget = widget => {\n designer.value.setSelected(widget);\n };\n\n const selectedWidget = computed(() => designer.value.selectedWidget);\n\n const selected = (widgetId: string) => {\n return designer.value.selectedId === widgetId;\n };\n\n const onWidgetClick = (widget: Widget) => {\n designer.value.setSelected(widget);\n };\n\n return {\n selectedWidget,\n getWidget,\n selected,\n isPc,\n isH5,\n isBI,\n designState,\n formData,\n formConfig,\n designer,\n layoutType,\n onWidgetClick,\n selectWidget,\n onDragAdd,\n onDragUpdate\n };\n}\n"],"names":[],"mappings":";;AAKO,SAAS,cAAc;AAC1B,QAAM,WAAW,OAA0B,YAAY,IAAI,CAAA,CAAkB,CAAC;AAC9E,QAAM,cAAc,OAAO,eAAe,KAAK;AAC/C,QAAM,YAAY,OAAO,aAAa,CAAC,WAAmB;AAAA,EAAC,CAAC;AAC5D,QAAM,aAAa,OAAwB,cAAc,IAAI,CAAA,CAAgB,CAAC;AAC9E,QAAM,WAAW,OAAO,YAAY,IAAI,CAAA,CAAE,CAAC;AAE3C,QAAM,aAAa,OAAO,cAAc,IAAI,eAAe,EAAE,CAAC;AAC9D,QAAM,OAAO;AAAA,IACT,MAAM,WAAW,UAAU,eAAe,MAAM,WAAW,UAAU,eAAe;AAAA,EAAA;AAExF,QAAM,OAAO,SAAS,MAAM,WAAW,UAAU,eAAe,EAAE;AAElE,QAAM,OAAO,SAAS,MAAM,WAAW,UAAU,eAAe,EAAE;AAElE,QAAM,YAAY,CAAC,EAAE,SAAA,GAAY,eAAyB;AACtD,UAAM,YAAY,WAAW,QAAQ;AACrC,QAAI,WAAW;AACX,eAAS,MAAM,YAAY,SAAS;AAAA,IACxC,OAAO;AACH,eAAS,MAAM,YAAY,WAAW,WAAW,CAAC,CAAC;AAAA,IACvD;AAAA,EACJ;AAEA,QAAM,eAAe,MAAM;AACvB,aAAS,MAAM,kBAAA;AAAA,EACnB;AAMA,QAAM,eAAe,CAAA,WAAU;AAC3B,aAAS,MAAM,YAAY,MAAM;AAAA,EACrC;AAEA,QAAM,iBAAiB,SAAS,MAAM,SAAS,MAAM,cAAc;AAEnE,QAAM,WAAW,CAAC,aAAqB;AACnC,WAAO,SAAS,MAAM,eAAe;AAAA,EACzC;AAEA,QAAM,gBAAgB,CAAC,WAAmB;AACtC,aAAS,MAAM,YAAY,MAAM;AAAA,EACrC;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
@@ -1,7 +1,6 @@
1
1
  import { inject, ref, getCurrentInstance, computed, toRaw, onMounted, onBeforeUnmount } from "vue";
2
2
  import FormValidators from "../utils/validators.js";
3
3
  import { get, eq, isArray, cloneDeep } from "lodash-es";
4
- /* empty css */
5
4
  import { useExecFunction } from "tmgc2-share";
6
5
  import { useAppRef } from "./useAppRef.js";
7
6
  import { useEmitter } from "../utils/useEmitter.js";
@@ -479,12 +478,13 @@ function useField(props, isInitModelValue = true) {
479
478
  onBeforeUnmount(() => {
480
479
  unregisterFromRefList();
481
480
  });
481
+ const widget = computed(() => props.field);
482
482
  const defineExposed = {
483
483
  i18nt,
484
484
  options,
485
485
  proxy: instance == null ? void 0 : instance.proxy,
486
486
  field,
487
- widget: computed(() => props.field),
487
+ widget: widget.value,
488
488
  fieldModel,
489
489
  fieldEditor,
490
490
  isReadMode,
@@ -1 +1 @@
1
- {"version":3,"file":"useField.js","sources":["../../../../../core/src/hooks/useField.ts"],"sourcesContent":["import {\n ref,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n getCurrentInstance,\n Ref,\n toRaw,\n toRefs\n} from 'vue';\nimport FormValidators from '@kp-ui/lowcode-core/src/utils/validators';\nimport { isArray, eq, get, cloneDeep } from 'lodash-es';\nimport { deepClone, FormConfig, Widget } from '@kp-ui/lowcode-core';\nimport { useI18n } from '@kp-ui/lowcode-core';\nimport { useEmitter, useAppRef } from '@kp-ui/lowcode-core';\nimport { useExecFunction } from 'tmgc2-share';\n\nexport type FieldProps<T = Widget> = {\n widget: T;\n field: T;\n designer?: any;\n parentWidget?: Widget | null;\n parentList?: T[] | null;\n indexOfParentList?: number;\n subFormRowIndex?: number;\n subFormRowId?: string;\n subFormColIndex?: number;\n};\n\n/**\n * 表单字段 Hook,提供表单字段的通用功能\n * @returns 表单字段相关的状态和方法\n */\nexport function useField<T extends Widget>(props: FieldProps<T>, isInitModelValue = true) {\n // 注入依赖\n const formConfig = inject<Ref<FormConfig>>('formConfig', ref({} as FormConfig));\n const formModel = inject<Ref<any>>('formData', ref({}));\n const getReadMode = inject('getReadMode', () => false);\n const isSubFormField = inject('isSubFormField', false);\n\n const getSubFormName = inject('getSubFormName', () => '');\n const designState = inject('designState', false);\n\n const { registerToRefList, getWidgetRef, getFormRef, unregisterFromRefList } = useAppRef();\n const { executeFunction, asyncExecuteFunction } = useExecFunction();\n\n const { i18nt, i18n2t } = useI18n();\n const field = props.field;\n\n const fieldEditor = ref<InstanceType<any>>(null);\n // 状态\n const oldFieldValue = ref<any>(null);\n const fieldReadonlyFlag = ref<boolean>(false);\n const loading = ref<boolean>(false);\n const rules = ref<any[]>([]);\n const uploadData = ref<Record<string, any>>({});\n const customToolbar = ref<any>(null);\n const instance = getCurrentInstance();\n const { dispatch } = useEmitter();\n\n const size = computed(() => {\n if (options.value?.size) {\n return options.value.size;\n }\n return formConfig.value.size || 'middle';\n });\n\n const subFormName = computed(() => {\n return getSubFormName ? getSubFormName() : '';\n });\n\n const fieldModel = computed({\n get() {\n return get(formModel?.value || {}, getPropName.value);\n },\n set(value) {\n syncUpdateFormModel(value);\n }\n });\n\n const subFormData = computed(() => formModel.value[subFormName.value]);\n\n const isReadMode = computed(() => {\n return getReadMode() ? true : fieldReadonlyFlag.value;\n });\n\n /**\n * 处理字段隐藏逻辑\n * @returns 是否隐藏\n */\n const handleHidden = computed(() => {\n if (designState) {\n return false;\n }\n const { onHidden, hidden } = options.value;\n\n if (hidden) return true;\n if (onHidden) {\n try {\n const result = executeFunction({\n functionBody: onHidden\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch {\n return false;\n }\n }\n return false;\n });\n\n /**\n * 处理字段禁用逻辑\n * @returns 是否禁用\n */\n const handleDisabled = computed(() => {\n const { onDisabled, disabled } = options.value;\n if (disabled) return true;\n if (onDisabled) {\n try {\n const result = executeFunction({\n functionBody: onDisabled\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch (error) {\n console.log({ error });\n return false;\n }\n }\n return false;\n });\n\n /**\n * 在数组中查找元素\n * @param arrayObject 数组对象\n * @param element 要查找的元素\n * @returns 找到的索引,未找到返回-1\n */\n const findInArray = (arrayObject: any[], element: any) => {\n if (!Array.isArray(arrayObject)) {\n return -1;\n }\n\n let foundIdx = -1;\n arrayObject.forEach((aItem, aIdx) => {\n if (aItem === element) {\n foundIdx = aIdx;\n }\n });\n\n return foundIdx;\n };\n\n /**\n * 获取属性名称\n * @returns 属性名称\n */\n const getPropName = computed(() => {\n if (isSubFormField && !designState) {\n return subFormName.value + '.' + props.subFormRowIndex + '.' + options.value.name + '';\n } else {\n return options.value.name;\n }\n });\n\n /**\n * 处理组件创建事件\n */\n async function handleOnCreated() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onCreated) {\n await asyncExecuteFunction({\n functionBody: options.value.onCreated\n });\n }\n }\n\n /**\n * 处理组件挂载事件\n */\n async function handleOnMounted() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n if (options.value.onMounted) {\n await asyncExecuteFunction({\n functionBody: options.value.onMounted\n });\n }\n }\n\n /**\n * 刷新默认值\n */\n const refreshDefaultValue = () => {\n fieldModel.value = options.value.defaultValue;\n };\n\n /**\n * 清除字段规则\n */\n const clearFieldRules = () => {\n if (!field.formItemFlag) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n };\n\n /**\n * 构建字段规则\n */\n const buildFieldRules = () => {\n if (!field.formItemFlag || options.value.hidden) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n if (options.value.required) {\n rules.value.push({\n required: true,\n // trigger: ['blur', 'change'],\n trigger: [\n 'blur'\n ] /* 去掉change事件触发校验,change事件触发时formModel数据尚未更新,导致radio/checkbox必填校验出错!! */,\n message: options.value.requiredHint || i18nt('render.hint.fieldRequired')\n });\n }\n\n if (options.value.validation) {\n const vldName = options.value.validation;\n if (FormValidators[vldName]) {\n rules.value.push({\n validator: FormValidators[vldName],\n trigger: ['blur', 'change'],\n label: options.value.label,\n errorMsg: options.value.validationHint\n });\n } else {\n rules.value.push({\n validator: FormValidators['regExp'],\n trigger: ['blur', 'change'],\n regExp: vldName,\n label: options.value.label,\n errorMsg: options.value.validationHint\n });\n }\n }\n\n if (options.value.onValidate) {\n const customFn = (rule: any, value: any) => {\n return executeFunction({\n functionBody: options.value.onValidate,\n params: { rule, value },\n keys: ['rule', 'value']\n });\n };\n rules.value.push({\n validator: customFn,\n trigger: ['blur'],\n label: options.value.label\n });\n }\n };\n\n /**\n * 禁用字段值变动触发表单校验\n */\n const disableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.splice(0, rule.trigger.length);\n }\n });\n };\n\n /**\n * 启用字段值变动触发表单校验\n */\n const enableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.push('blur');\n rule.trigger.push('change');\n }\n });\n };\n\n /**\n * 禁用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const disableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = true;\n }\n });\n }\n };\n\n /**\n * 启用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const enableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = false;\n }\n });\n }\n };\n\n /**\n * 发送字段数据变更事件\n * @param newValue 新值\n * @param oldValue 旧值\n */\n const emitFieldDataChange = (newValue: any, oldValue: any) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n\n if (!instance) return;\n\n /* 必须用dispatch向指定父组件派发消息!! */\n dispatch('VFormRender', 'fieldChange', [\n options.value.name,\n newValue,\n oldValue,\n subFormName.value,\n props.subFormRowIndex\n ]);\n };\n\n /**\n * 同步更新表单模型\n * @param value 值\n */\n\n const syncUpdateFormModel = value => {\n if (designState) {\n dispatch('VFormDesigner', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n field: field\n });\n //设计状态不触发事件\n return;\n }\n /* 主动触发表单的单个字段校验,用于清除字段可能存在的校验错误提示 */\n dispatch('VFormRender', 'fieldValidation', [getPropName.value]);\n const oldValue = toRaw(fieldModel.value);\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n oldValue: oldValue,\n field: field\n });\n handleOnChange(value, oldValue);\n };\n\n /**\n * 处理焦点自定义事件\n * @param event 事件对象\n */\n const handleFocusCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n oldFieldValue.value = cloneDeep(fieldModel.value); // 保存修改change之前的值\n\n if (options.value.onFocus) {\n executeFunction({\n functionBody: options.value.onFocus,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 处理失焦自定义事件\n * @param event 事件对象\n */\n const handleBlurCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onBlur) {\n executeFunction({\n functionBody: options.value.onBlur,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 发送附加按钮点击事件\n */\n const emitAppendButtonClick = () => {\n if (designState) {\n // 设计状态不触发点击事件\n return;\n }\n\n if (options.value.onAppendButtonClick) {\n executeFunction({\n functionBody: options.value.onAppendButtonClick\n });\n }\n };\n\n const executeWidgetEventFunction = async (eventName: string, params: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value[eventName]) {\n await asyncExecuteFunction({\n functionBody: options.value[eventName],\n params: { params },\n keys: ['params']\n });\n }\n };\n\n /**\n * 处理变更事件\n * @param val 新值\n * @param oldVal 旧值\n * @param ops 选项\n */\n const handleOnChange = (val: any, oldVal: any) => {\n // 自定义onChange事件\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onChange) {\n executeFunction({\n functionBody: options.value.onChange,\n params: {\n value: val,\n oldValue: oldVal,\n subFormData: subFormData.value,\n rowId: props.subFormRowId\n },\n keys: ['value', 'oldValue', 'subFormData', 'rowId']\n });\n }\n };\n\n /**\n * 处理图标点击事件\n */\n const handleClickIcon = async () => {\n // if (designState) {\n // // 设计状态不触发事件\n // return;\n // }\n // if (handleDisabled.value) {\n // return;\n // }\n // if (options.value.onClickIcon) {\n // await asyncExecuteFunction({\n // functionBody: options.value.onClickIcon\n // });\n // }\n await executeWidgetEventFunction('onClickIcon', {});\n };\n\n /**\n * 获取字段编辑器\n * @returns 字段编辑器\n */\n const getFieldEditor = () => {\n // 获取内置的el表单组件\n return fieldEditor.value;\n };\n\n /**\n * 显示文件列表\n * @param list 文件列表\n * @returns 格式化后的文件列表\n */\n const showFileList = (list: any) => {\n if (typeof list === 'string') {\n list = JSON.parse(list);\n }\n if (!isArray(list)) return [];\n const res = list.map((item: any, uid: number) => ({\n ...item,\n name: item.fileName,\n uid\n }));\n return res;\n };\n\n /**\n * 设置值\n * @param newValue 新值\n * @param disableChangeEvent 是否禁用变更事件\n */\n const setValue = (newValue: any, disableChangeEvent = false) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n if (eq(fieldModel.value, newValue)) return;\n\n const oldValue = deepClone(fieldModel.value);\n if (field.type === 'file-upload') {\n newValue = showFileList(newValue || []);\n // TODO\n } else if (field.type === 'code-editor') {\n const fieldEditor = getFieldEditor();\n if (fieldEditor) {\n fieldEditor.setValue(newValue);\n }\n }\n fieldModel.value = newValue;\n if (!disableChangeEvent) {\n emitFieldDataChange(newValue, oldValue);\n }\n };\n\n /**\n * 获取值\n * @returns 字段值\n */\n const getValue = () => {\n return fieldModel.value;\n };\n\n /**\n * 重置字段\n */\n const resetField = () => {\n const defaultValue = options.value.defaultValue;\n setValue(defaultValue);\n\n // 清空上传组件文件列表\n if (field.type === 'picture-upload' || field.type === 'file-upload') {\n fieldModel.value.splice(0, fieldModel.value.length);\n // handleChangeEvent(fieldModel.value);\n }\n };\n\n /**\n * 设置只读\n * @param flag 是否只读\n */\n const setReadonly = (flag: boolean) => {\n options.value.readonly = flag;\n };\n\n /**\n * 设置禁用\n * @param flag 是否禁用\n */\n const setDisabled = (flag: boolean) => {\n options.value.disabled = flag;\n };\n\n /**\n * 设置附加按钮可见性\n * @param flag 是否可见\n */\n const setAppendButtonVisible = (flag: boolean) => {\n options.value.appendButton = flag;\n };\n\n /**\n * 设置附加按钮禁用状态\n * @param flag 是否禁用\n */\n const setAppendButtonDisabled = (flag: boolean) => {\n options.value.appendButtonDisabled = flag;\n };\n\n /**\n * 设置隐藏\n * @param flag 是否隐藏\n */\n const setHidden = (flag: boolean) => {\n options.value.hidden = flag;\n\n if (flag) {\n // 清除组件校验规则\n clearFieldRules();\n } else {\n // 重建组件校验规则\n buildFieldRules();\n }\n };\n\n /**\n * 设置必填\n * @param flag 是否必填\n */\n const setRequired = (flag: boolean) => {\n options.value.required = flag;\n buildFieldRules();\n\n if (!designState && !flag) {\n // 清除必填校验提示\n clearValidate();\n }\n };\n\n /**\n * 清除字段校验提示\n */\n const clearValidate = () => {\n if (designState) {\n return;\n }\n\n getFormRef().clearValidate(getPropName.value);\n };\n\n /**\n * 获取VForm上下文\n * @returns VForm上下文\n */\n const getVfCtx = () => {\n return getFormRef().vfCtx;\n };\n\n /**\n * 设置标签\n * @param newLabel 新标签\n */\n const setLabel = (newLabel: string) => {\n options.value.label = newLabel;\n };\n\n /**\n * 聚焦\n */\n const focus = () => {\n const fieldEditor = getFieldEditor();\n if (fieldEditor && fieldEditor.focus) {\n fieldEditor.focus();\n }\n };\n\n /**\n * 设置上传数据\n * @param name 名称\n * @param value 值\n */\n const setUploadData = (name: string, value: any) => {\n uploadData.value[name] = value;\n };\n\n /**\n * 设置或取消设置字段只读查看模式\n * @param readonlyFlag 只读标志\n */\n const setReadMode = (readonlyFlag = true) => {\n fieldReadonlyFlag.value = readonlyFlag;\n };\n\n /**\n * 动态增加自定义css样式\n * @param className 类名\n */\n const addCssClass = (className: string) => {\n if (!options.value.customClass) {\n options.value.customClass = [className];\n } else {\n options.value.customClass.push(className);\n }\n };\n const customClass = computed(() => options.value.customClass);\n\n /**\n * 动态移除自定义css样式\n * @param className 类名\n */\n const removeCssClass = (className: string) => {\n if (!options.value.customClass) {\n return;\n }\n\n let foundIdx = -1;\n options.value.customClass.map((cc: string, idx: number) => {\n if (cc === className) {\n foundIdx = idx;\n }\n });\n if (foundIdx > -1) {\n options.value.customClass.splice(foundIdx, 1);\n }\n };\n\n const getEl = () => {\n return fieldEditor.value?.$el;\n };\n\n /**\n * 设置组件选项\n * @param optionName 选项名称\n * @param optionValue 选项值\n */\n const setWidgetOption = (optionName: string, optionValue: any) => {\n // 通用组件选项修改API\n options.value[optionName] = optionValue;\n };\n\n const options = computed({\n get() {\n return props.field.options;\n },\n set(value) {\n props.field.options = value;\n }\n });\n\n const initFieldModel = () => {\n const defaultValue =\n typeof options.value.defaultValue === 'undefined' ? '' : options.value.defaultValue;\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value: defaultValue,\n oldValue: toRaw(fieldModel.value),\n field: field\n });\n };\n\n // 生命周期钩子\n onMounted(async () => {\n if (isInitModelValue) {\n initFieldModel();\n }\n await registerToRefList();\n\n await handleOnCreated();\n\n await handleOnMounted();\n buildFieldRules();\n });\n\n onBeforeUnmount(() => {\n unregisterFromRefList();\n });\n\n const defineExposed = {\n i18nt,\n options,\n proxy: instance?.proxy,\n field,\n widget: computed(() => props.field),\n fieldModel,\n fieldEditor,\n isReadMode,\n setWidgetOption,\n setReadonly,\n setDisabled,\n getVfCtx,\n setLabel,\n getEl,\n setReadMode,\n resetField,\n setValue,\n getValue,\n getFieldEditor,\n getFormRef,\n getWidgetRef,\n setHidden,\n addCssClass,\n removeCssClass,\n setRequired,\n clearValidate,\n focus,\n executeWidgetEventFunction\n };\n\n return {\n asyncExecuteFunction,\n executeFunction,\n customClass,\n // 状态\n oldFieldValue,\n fieldReadonlyFlag,\n loading,\n rules,\n uploadData,\n designState,\n customToolbar,\n i18n2t,\n size,\n // 计算属性\n formConfig,\n subFormName,\n\n formModel,\n\n // 方法\n handleHidden,\n handleDisabled,\n findInArray,\n getPropName,\n refreshDefaultValue,\n clearFieldRules,\n buildFieldRules,\n disableChangeValidate,\n enableChangeValidate,\n disableOptionOfList,\n enableOptionOfList,\n emitFieldDataChange,\n syncUpdateFormModel,\n handleFocusCustomEvent,\n handleBlurCustomEvent,\n emitAppendButtonClick,\n handleOnChange,\n handleClickIcon,\n showFileList,\n\n setAppendButtonVisible,\n setAppendButtonDisabled,\n\n setUploadData,\n\n isSubFormField,\n ...defineExposed,\n defineExposed\n };\n}\n"],"names":["fieldEditor"],"mappings":"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"}
1
+ {"version":3,"file":"useField.js","sources":["../../../../../core/src/hooks/useField.ts"],"sourcesContent":["import {\n ref,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n getCurrentInstance,\n Ref,\n toRaw,\n toRefs\n} from 'vue';\nimport FormValidators from '@kp-ui/lowcode-core/src/utils/validators';\nimport { isArray, eq, get, cloneDeep } from 'lodash-es';\nimport { deepClone, FormConfig, Widget } from '@kp-ui/lowcode-core';\nimport { useI18n } from '@kp-ui/lowcode-core';\nimport { useEmitter, useAppRef } from '@kp-ui/lowcode-core';\nimport { useExecFunction } from 'tmgc2-share';\n\nexport type FieldProps<T = Widget> = {\n widget: T;\n field: T;\n designer?: any;\n parentWidget?: Widget | null;\n parentList?: T[] | null;\n indexOfParentList?: number;\n subFormRowIndex?: number;\n subFormRowId?: string;\n subFormColIndex?: number;\n};\n\n/**\n * 表单字段 Hook,提供表单字段的通用功能\n * @returns 表单字段相关的状态和方法\n */\nexport function useField<T extends Widget>(props: FieldProps<T>, isInitModelValue = true) {\n // 注入依赖\n const formConfig = inject<Ref<FormConfig>>('formConfig', ref({} as FormConfig));\n const formModel = inject<Ref<any>>('formData', ref({}));\n const getReadMode = inject('getReadMode', () => false);\n const isSubFormField = inject('isSubFormField', false);\n\n const getSubFormName = inject('getSubFormName', () => '');\n const designState = inject('designState', false);\n\n const { registerToRefList, getWidgetRef, getFormRef, unregisterFromRefList } = useAppRef();\n const { executeFunction, asyncExecuteFunction } = useExecFunction();\n\n const { i18nt, i18n2t } = useI18n();\n const field = props.field;\n\n const fieldEditor = ref<InstanceType<any>>(null);\n // 状态\n const oldFieldValue = ref<any>(null);\n const fieldReadonlyFlag = ref<boolean>(false);\n const loading = ref<boolean>(false);\n const rules = ref<any[]>([]);\n const uploadData = ref<Record<string, any>>({});\n const customToolbar = ref<any>(null);\n const instance = getCurrentInstance();\n const { dispatch } = useEmitter();\n\n const size = computed(() => {\n if (options.value?.size) {\n return options.value.size;\n }\n return formConfig.value.size || 'middle';\n });\n\n const subFormName = computed(() => {\n return getSubFormName ? getSubFormName() : '';\n });\n\n const fieldModel = computed({\n get() {\n return get(formModel?.value || {}, getPropName.value);\n },\n set(value) {\n syncUpdateFormModel(value);\n }\n });\n\n const subFormData = computed(() => formModel.value[subFormName.value]);\n\n const isReadMode = computed(() => {\n return getReadMode() ? true : fieldReadonlyFlag.value;\n });\n\n /**\n * 处理字段隐藏逻辑\n * @returns 是否隐藏\n */\n const handleHidden = computed(() => {\n if (designState) {\n return false;\n }\n const { onHidden, hidden } = options.value;\n\n if (hidden) return true;\n if (onHidden) {\n try {\n const result = executeFunction({\n functionBody: onHidden\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch {\n return false;\n }\n }\n return false;\n });\n\n /**\n * 处理字段禁用逻辑\n * @returns 是否禁用\n */\n const handleDisabled = computed(() => {\n const { onDisabled, disabled } = options.value;\n if (disabled) return true;\n if (onDisabled) {\n try {\n const result = executeFunction({\n functionBody: onDisabled\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch (error) {\n console.log({ error });\n return false;\n }\n }\n return false;\n });\n\n /**\n * 在数组中查找元素\n * @param arrayObject 数组对象\n * @param element 要查找的元素\n * @returns 找到的索引,未找到返回-1\n */\n const findInArray = (arrayObject: any[], element: any) => {\n if (!Array.isArray(arrayObject)) {\n return -1;\n }\n\n let foundIdx = -1;\n arrayObject.forEach((aItem, aIdx) => {\n if (aItem === element) {\n foundIdx = aIdx;\n }\n });\n\n return foundIdx;\n };\n\n /**\n * 获取属性名称\n * @returns 属性名称\n */\n const getPropName = computed(() => {\n if (isSubFormField && !designState) {\n return subFormName.value + '.' + props.subFormRowIndex + '.' + options.value.name + '';\n } else {\n return options.value.name;\n }\n });\n\n /**\n * 处理组件创建事件\n */\n async function handleOnCreated() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onCreated) {\n await asyncExecuteFunction({\n functionBody: options.value.onCreated\n });\n }\n }\n\n /**\n * 处理组件挂载事件\n */\n async function handleOnMounted() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n if (options.value.onMounted) {\n await asyncExecuteFunction({\n functionBody: options.value.onMounted\n });\n }\n }\n\n /**\n * 刷新默认值\n */\n const refreshDefaultValue = () => {\n fieldModel.value = options.value.defaultValue;\n };\n\n /**\n * 清除字段规则\n */\n const clearFieldRules = () => {\n if (!field.formItemFlag) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n };\n\n /**\n * 构建字段规则\n */\n const buildFieldRules = () => {\n if (!field.formItemFlag || options.value.hidden) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n if (options.value.required) {\n rules.value.push({\n required: true,\n // trigger: ['blur', 'change'],\n trigger: [\n 'blur'\n ] /* 去掉change事件触发校验,change事件触发时formModel数据尚未更新,导致radio/checkbox必填校验出错!! */,\n message: options.value.requiredHint || i18nt('render.hint.fieldRequired')\n });\n }\n\n if (options.value.validation) {\n const vldName = options.value.validation;\n if (FormValidators[vldName]) {\n rules.value.push({\n validator: FormValidators[vldName],\n trigger: ['blur', 'change'],\n label: options.value.label,\n errorMsg: options.value.validationHint\n });\n } else {\n rules.value.push({\n validator: FormValidators['regExp'],\n trigger: ['blur', 'change'],\n regExp: vldName,\n label: options.value.label,\n errorMsg: options.value.validationHint\n });\n }\n }\n\n if (options.value.onValidate) {\n const customFn = (rule: any, value: any) => {\n return executeFunction({\n functionBody: options.value.onValidate,\n params: { rule, value },\n keys: ['rule', 'value']\n });\n };\n rules.value.push({\n validator: customFn,\n trigger: ['blur'],\n label: options.value.label\n });\n }\n };\n\n /**\n * 禁用字段值变动触发表单校验\n */\n const disableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.splice(0, rule.trigger.length);\n }\n });\n };\n\n /**\n * 启用字段值变动触发表单校验\n */\n const enableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.push('blur');\n rule.trigger.push('change');\n }\n });\n };\n\n /**\n * 禁用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const disableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = true;\n }\n });\n }\n };\n\n /**\n * 启用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const enableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = false;\n }\n });\n }\n };\n\n /**\n * 发送字段数据变更事件\n * @param newValue 新值\n * @param oldValue 旧值\n */\n const emitFieldDataChange = (newValue: any, oldValue: any) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n\n if (!instance) return;\n\n /* 必须用dispatch向指定父组件派发消息!! */\n dispatch('VFormRender', 'fieldChange', [\n options.value.name,\n newValue,\n oldValue,\n subFormName.value,\n props.subFormRowIndex\n ]);\n };\n\n /**\n * 同步更新表单模型\n * @param value 值\n */\n\n const syncUpdateFormModel = value => {\n if (designState) {\n dispatch('VFormDesigner', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n field: field\n });\n //设计状态不触发事件\n return;\n }\n /* 主动触发表单的单个字段校验,用于清除字段可能存在的校验错误提示 */\n dispatch('VFormRender', 'fieldValidation', [getPropName.value]);\n const oldValue = toRaw(fieldModel.value);\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n oldValue: oldValue,\n field: field\n });\n handleOnChange(value, oldValue);\n };\n\n /**\n * 处理焦点自定义事件\n * @param event 事件对象\n */\n const handleFocusCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n oldFieldValue.value = cloneDeep(fieldModel.value); // 保存修改change之前的值\n\n if (options.value.onFocus) {\n executeFunction({\n functionBody: options.value.onFocus,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 处理失焦自定义事件\n * @param event 事件对象\n */\n const handleBlurCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onBlur) {\n executeFunction({\n functionBody: options.value.onBlur,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 发送附加按钮点击事件\n */\n const emitAppendButtonClick = () => {\n if (designState) {\n // 设计状态不触发点击事件\n return;\n }\n\n if (options.value.onAppendButtonClick) {\n executeFunction({\n functionBody: options.value.onAppendButtonClick\n });\n }\n };\n\n const executeWidgetEventFunction = async (eventName: string, params: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value[eventName]) {\n await asyncExecuteFunction({\n functionBody: options.value[eventName],\n params: { params },\n keys: ['params']\n });\n }\n };\n\n /**\n * 处理变更事件\n * @param val 新值\n * @param oldVal 旧值\n * @param ops 选项\n */\n const handleOnChange = (val: any, oldVal: any) => {\n // 自定义onChange事件\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onChange) {\n executeFunction({\n functionBody: options.value.onChange,\n params: {\n value: val,\n oldValue: oldVal,\n subFormData: subFormData.value,\n rowId: props.subFormRowId\n },\n keys: ['value', 'oldValue', 'subFormData', 'rowId']\n });\n }\n };\n\n /**\n * 处理图标点击事件\n */\n const handleClickIcon = async () => {\n // if (designState) {\n // // 设计状态不触发事件\n // return;\n // }\n // if (handleDisabled.value) {\n // return;\n // }\n // if (options.value.onClickIcon) {\n // await asyncExecuteFunction({\n // functionBody: options.value.onClickIcon\n // });\n // }\n await executeWidgetEventFunction('onClickIcon', {});\n };\n\n /**\n * 获取字段编辑器\n * @returns 字段编辑器\n */\n const getFieldEditor = () => {\n // 获取内置的el表单组件\n return fieldEditor.value;\n };\n\n /**\n * 显示文件列表\n * @param list 文件列表\n * @returns 格式化后的文件列表\n */\n const showFileList = (list: any) => {\n if (typeof list === 'string') {\n list = JSON.parse(list);\n }\n if (!isArray(list)) return [];\n const res = list.map((item: any, uid: number) => ({\n ...item,\n name: item.fileName,\n uid\n }));\n return res;\n };\n\n /**\n * 设置值\n * @param newValue 新值\n * @param disableChangeEvent 是否禁用变更事件\n */\n const setValue = (newValue: any, disableChangeEvent = false) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n if (eq(fieldModel.value, newValue)) return;\n\n const oldValue = deepClone(fieldModel.value);\n if (field.type === 'file-upload') {\n newValue = showFileList(newValue || []);\n // TODO\n } else if (field.type === 'code-editor') {\n const fieldEditor = getFieldEditor();\n if (fieldEditor) {\n fieldEditor.setValue(newValue);\n }\n }\n fieldModel.value = newValue;\n if (!disableChangeEvent) {\n emitFieldDataChange(newValue, oldValue);\n }\n };\n\n /**\n * 获取值\n * @returns 字段值\n */\n const getValue = () => {\n return fieldModel.value;\n };\n\n /**\n * 重置字段\n */\n const resetField = () => {\n const defaultValue = options.value.defaultValue;\n setValue(defaultValue);\n\n // 清空上传组件文件列表\n if (field.type === 'picture-upload' || field.type === 'file-upload') {\n fieldModel.value.splice(0, fieldModel.value.length);\n // handleChangeEvent(fieldModel.value);\n }\n };\n\n /**\n * 设置只读\n * @param flag 是否只读\n */\n const setReadonly = (flag: boolean) => {\n options.value.readonly = flag;\n };\n\n /**\n * 设置禁用\n * @param flag 是否禁用\n */\n const setDisabled = (flag: boolean) => {\n options.value.disabled = flag;\n };\n\n /**\n * 设置附加按钮可见性\n * @param flag 是否可见\n */\n const setAppendButtonVisible = (flag: boolean) => {\n options.value.appendButton = flag;\n };\n\n /**\n * 设置附加按钮禁用状态\n * @param flag 是否禁用\n */\n const setAppendButtonDisabled = (flag: boolean) => {\n options.value.appendButtonDisabled = flag;\n };\n\n /**\n * 设置隐藏\n * @param flag 是否隐藏\n */\n const setHidden = (flag: boolean) => {\n options.value.hidden = flag;\n\n if (flag) {\n // 清除组件校验规则\n clearFieldRules();\n } else {\n // 重建组件校验规则\n buildFieldRules();\n }\n };\n\n /**\n * 设置必填\n * @param flag 是否必填\n */\n const setRequired = (flag: boolean) => {\n options.value.required = flag;\n buildFieldRules();\n\n if (!designState && !flag) {\n // 清除必填校验提示\n clearValidate();\n }\n };\n\n /**\n * 清除字段校验提示\n */\n const clearValidate = () => {\n if (designState) {\n return;\n }\n\n getFormRef().clearValidate(getPropName.value);\n };\n\n /**\n * 获取VForm上下文\n * @returns VForm上下文\n */\n const getVfCtx = () => {\n return getFormRef().vfCtx;\n };\n\n /**\n * 设置标签\n * @param newLabel 新标签\n */\n const setLabel = (newLabel: string) => {\n options.value.label = newLabel;\n };\n\n /**\n * 聚焦\n */\n const focus = () => {\n const fieldEditor = getFieldEditor();\n if (fieldEditor && fieldEditor.focus) {\n fieldEditor.focus();\n }\n };\n\n /**\n * 设置上传数据\n * @param name 名称\n * @param value 值\n */\n const setUploadData = (name: string, value: any) => {\n uploadData.value[name] = value;\n };\n\n /**\n * 设置或取消设置字段只读查看模式\n * @param readonlyFlag 只读标志\n */\n const setReadMode = (readonlyFlag = true) => {\n fieldReadonlyFlag.value = readonlyFlag;\n };\n\n /**\n * 动态增加自定义css样式\n * @param className 类名\n */\n const addCssClass = (className: string) => {\n if (!options.value.customClass) {\n options.value.customClass = [className];\n } else {\n options.value.customClass.push(className);\n }\n };\n const customClass = computed(() => options.value.customClass);\n\n /**\n * 动态移除自定义css样式\n * @param className 类名\n */\n const removeCssClass = (className: string) => {\n if (!options.value.customClass) {\n return;\n }\n\n let foundIdx = -1;\n options.value.customClass.map((cc: string, idx: number) => {\n if (cc === className) {\n foundIdx = idx;\n }\n });\n if (foundIdx > -1) {\n options.value.customClass.splice(foundIdx, 1);\n }\n };\n\n const getEl = () => {\n return fieldEditor.value?.$el;\n };\n\n /**\n * 设置组件选项\n * @param optionName 选项名称\n * @param optionValue 选项值\n */\n const setWidgetOption = (optionName: string, optionValue: any) => {\n // 通用组件选项修改API\n options.value[optionName] = optionValue;\n };\n\n const options = computed({\n get() {\n return props.field.options;\n },\n set(value) {\n props.field.options = value;\n }\n });\n\n const initFieldModel = () => {\n const defaultValue =\n typeof options.value.defaultValue === 'undefined' ? '' : options.value.defaultValue;\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value: defaultValue,\n oldValue: toRaw(fieldModel.value),\n field: field\n });\n };\n\n // 生命周期钩子\n onMounted(async () => {\n if (isInitModelValue) {\n initFieldModel();\n }\n await registerToRefList();\n\n await handleOnCreated();\n\n await handleOnMounted();\n buildFieldRules();\n });\n\n onBeforeUnmount(() => {\n unregisterFromRefList();\n });\n\n const widget = computed(() => props.field);\n\n const defineExposed = {\n i18nt,\n options,\n proxy: instance?.proxy,\n field,\n widget: widget.value,\n fieldModel,\n fieldEditor,\n isReadMode,\n setWidgetOption,\n setReadonly,\n setDisabled,\n getVfCtx,\n setLabel,\n getEl,\n setReadMode,\n resetField,\n setValue,\n getValue,\n getFieldEditor,\n getFormRef,\n getWidgetRef,\n setHidden,\n addCssClass,\n removeCssClass,\n setRequired,\n clearValidate,\n focus,\n executeWidgetEventFunction\n };\n\n return {\n asyncExecuteFunction,\n executeFunction,\n customClass,\n // 状态\n oldFieldValue,\n fieldReadonlyFlag,\n loading,\n rules,\n uploadData,\n designState,\n customToolbar,\n i18n2t,\n size,\n // 计算属性\n formConfig,\n subFormName,\n\n formModel,\n\n // 方法\n handleHidden,\n handleDisabled,\n findInArray,\n getPropName,\n refreshDefaultValue,\n clearFieldRules,\n buildFieldRules,\n disableChangeValidate,\n enableChangeValidate,\n disableOptionOfList,\n enableOptionOfList,\n emitFieldDataChange,\n syncUpdateFormModel,\n handleFocusCustomEvent,\n handleBlurCustomEvent,\n emitAppendButtonClick,\n handleOnChange,\n handleClickIcon,\n showFileList,\n\n setAppendButtonVisible,\n setAppendButtonDisabled,\n\n setUploadData,\n\n isSubFormField,\n ...defineExposed,\n defineExposed\n };\n}\n"],"names":["fieldEditor"],"mappings":"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"}
@@ -41,6 +41,7 @@ const zhCN = {
41
41
  signature: "手写签名",
42
42
  stepper: "步进器",
43
43
  "count-down": "倒计时",
44
+ "text-ellipsis": "文本省略",
44
45
  image: "图片",
45
46
  input: "单行文本",
46
47
  textarea: "多行文本",