@gct-paas/excel 0.1.18 → 0.1.20

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 (182) hide show
  1. package/dist/{VueVideoPlayer-D3u-ZHom.js → VueVideoPlayer-DePpm38H.js} +2 -2
  2. package/dist/{agg-design-D7CkIPCA.js → agg-design-hreKYp5a.js} +1 -1
  3. package/dist/{agg-props-DNNO9ucx.js → agg-props-CCDh2o6E.js} +1 -1
  4. package/dist/{agg-style-v_94dzX8.js → agg-style-Bh8vdJvs.js} +1 -1
  5. package/dist/{align-editor-COpCDpFf.js → align-editor-DpDuDOMr.js} +1 -1
  6. package/dist/{attach-fields-editor-o_7W-2sr.js → attach-fields-editor-BeGxW6de.js} +2 -2
  7. package/dist/{barcode-design-CvsGGAio.js → barcode-design-CFVTZNAy.js} +3 -2
  8. package/dist/base/index.es.js +63 -138
  9. package/dist/base-font-editor-laOkjBe1.js +119 -0
  10. package/dist/{boolean-design-Hc8Es5l1.js → boolean-design-DIlM9Nrt.js} +3 -2
  11. package/dist/{boolean-props-CGamLGXA.js → boolean-props-CGuFs72-.js} +3 -3
  12. package/dist/{boolean-style-m-WuSO6S.js → boolean-style-BUz6sBUN.js} +5 -4
  13. package/dist/cell-upload-Dw3t7ZKJ.js +33 -0
  14. package/dist/{date-range-editor-BZkhUU-x.js → date-range-editor-rXaru-8n.js} +3 -2
  15. package/dist/{date-time-design-B_oFOcft.js → date-time-design-HfjWK3SA.js} +1 -1
  16. package/dist/{date-time-props-hGnSGQKc.js → date-time-props-C_cG-6wI.js} +3 -3
  17. package/dist/{date-time-style-CGKG8i3K.js → date-time-style-BeCDP5TE.js} +1 -1
  18. package/dist/{decimal-design-B5Artgk6.js → decimal-design-DzLpjX9N.js} +7 -3
  19. package/dist/{decimal-display-mode-C4XUezoP.js → decimal-display-mode-BhD1cOOe.js} +3 -2
  20. package/dist/{decimal-props-Q37uOcWl.js → decimal-props-C6f22071.js} +5 -4
  21. package/dist/{decimal-style-C2CnGPVG.js → decimal-style-XN3rLM2j.js} +1 -1
  22. package/dist/{default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-DTnbLBVW.js → default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-CJC4kBNh.js} +3 -2
  23. package/dist/{diagonal-design-CyUvkcvp.js → diagonal-design-Dh0qhgSq.js} +2 -2
  24. package/dist/{double-design-D_ipWcRm.js → double-design-XHHlqmEp.js} +6 -3
  25. package/dist/{double-props-D4FGbfe2.js → double-props-Cvi36aBN.js} +4 -4
  26. package/dist/{double-style-BbD_6_Os.js → double-style-Dkoth54S.js} +1 -1
  27. package/dist/{document-sub-table-action-Cy6Rd8OS.js → dynamic-table-action-mGrBO_bn.js} +661 -553
  28. package/dist/{document-quick-fillin.vue_vue_type_style_index_0_scoped_a18386ab_lang-DKTGEH4Q.js → dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-OPdk2I5p.js} +366 -147
  29. package/dist/{edit.utils-CXmmCnxE-BK4QnSP-.js → edit.utils-CXmmCnxE-DeDBtyJd.js} +1 -1
  30. package/dist/{enum-design-lOufLU6Z.js → enum-design-CAOAFdI6.js} +13 -7
  31. package/dist/{enum-props-brKRP5Uz.js → enum-props-CBN-AvBS.js} +4 -4
  32. package/dist/{enum-style-BQQHkDUD.js → enum-style-cOiK44Ae.js} +37 -9
  33. package/dist/excel.css +1049 -407
  34. package/dist/{exceljs.min-CUwGyNAf.js → exceljs.min-pnja99MZ.js} +2 -2
  35. package/dist/{expression-design-BPEci3dg.js → expression-design-CqgcK8eO.js} +1 -1
  36. package/dist/{expression-props-Cvg-9V-B.js → expression-props-wXQOIrMY.js} +1 -1
  37. package/dist/{expression-style-Dv3Hl8lm.js → expression-style-BzavnOux.js} +1 -1
  38. package/dist/{file-design-BIzi6cpq.js → file-design-BSQknhnY.js} +1 -1
  39. package/dist/{file-props-oV2U7bpO.js → file-props-CwiuBVHW.js} +2 -2
  40. package/dist/{file-style-CZrxokgP.js → file-style-CG4a3THb.js} +1 -1
  41. package/dist/{font-editor-B41KgpWJ.js → font-editor--CgwL-wF.js} +3 -3
  42. package/dist/{form-annotation-controller-CdNmJKv-.js → form-annotation-controller-DDDyHAwe.js} +3 -2
  43. package/dist/{image-design-DMfBfSkD.js → image-design-CwPjfDxf.js} +2 -2
  44. package/dist/{image-design-C3FEtW6i.js → image-design-D1D0SN5W.js} +3 -2
  45. package/dist/{image-props-DPibJk7n.js → image-props-C4E9gMsG.js} +1 -1
  46. package/dist/{image-style-DLudd5Vt.js → image-style-CIb1mi13.js} +1 -1
  47. package/dist/{index-B1r6-Uxf.js → index-0mxMA4vZ.js} +2 -1
  48. package/dist/{index-B7lz2J6V.js → index-A2MbCZtS.js} +10 -3
  49. package/dist/{index-DJIzgsog.js → index-B2ZNkbGm.js} +2 -1
  50. package/dist/{index-rXMzwu77.js → index-B2tFXR--.js} +5 -2
  51. package/dist/{index-Cp7mC3Qt.js → index-B7DDYlzm.js} +2 -1
  52. package/dist/{index-BiNVmD5v.js → index-BAlLZmfu.js} +2 -1
  53. package/dist/{index-yih5hGsL.js → index-BG_CEaW0.js} +3537 -2743
  54. package/dist/{index-B8ey1U_N.js → index-BJYSmTeW.js} +2 -1
  55. package/dist/{index-D7fFpHaN.js → index-BKoXo3Ha.js} +2 -1
  56. package/dist/{index-oSIIidoF.js → index-BSHUFede.js} +2 -1
  57. package/dist/{index-C5bYd42n.js → index-Bi4hE4Ye.js} +3 -2
  58. package/dist/{index-vZZ5q2xJ.js → index-BneV2tbp.js} +2 -1
  59. package/dist/{index-D0YZX_c7.js → index-ByTKu8n6.js} +2 -1
  60. package/dist/{index-DHVK-P9J.js → index-CGSTq7zN.js} +2 -1
  61. package/dist/{index-DFoELlwd.js → index-CIl6oWcB.js} +2 -1
  62. package/dist/{index-I_FRG0Ho.js → index-CKqLoN9r.js} +2 -1
  63. package/dist/{index-CtiiIgjs.js → index-CWpratsK.js} +50 -106
  64. package/dist/{index-B1CG-75q.js → index-CcmNFTia.js} +3 -2
  65. package/dist/{index-BgZkpQKh.js → index-CeMBvNee.js} +2 -1
  66. package/dist/{index-BOis3jsA.js → index-Cgka0WmQ.js} +4 -1
  67. package/dist/{index-CUIGN7Rt.js → index-D0XkCn_x.js} +2 -1
  68. package/dist/{index-DsNRjyQD.js → index-D0n65ya-.js} +2 -1
  69. package/dist/{index-DAqYc474.js → index-D9tUJAeF.js} +2 -1
  70. package/dist/{index-Cjz0GLDq.js → index-DLoQlQk6.js} +3 -2
  71. package/dist/{index-DDpNgyvD.js → index-DOj318_B.js} +3 -2
  72. package/dist/{index-DPQkm6_v.js → index-Dl2FIifp.js} +2 -1
  73. package/dist/{index-Bppcm2iQ.js → index-Drf0Arr4.js} +2 -1
  74. package/dist/{index-Bvjplnz_.js → index-HHF5iK-6.js} +6 -1
  75. package/dist/{index-B8wKNUsK.js → index-Hg59RKKE.js} +2 -1
  76. package/dist/{index-BZ1jj7Nu.js → index-PMDIMwwL.js} +2 -1
  77. package/dist/{index-DH_EZe8p.js → index-PWmkKVZV.js} +2 -1
  78. package/dist/{index-CkYbgRrH.js → index-UUDS4nmS.js} +2 -1
  79. package/dist/{index-Cn_c3-eW.js → index-ZrNXSw4w.js} +2 -1
  80. package/dist/index.es.js +44 -44
  81. package/dist/{integer-design-DhkNa9IA.js → integer-design-Cy9c0fzI.js} +6 -3
  82. package/dist/{integer-props-c_aQpjaT.js → integer-props-DFDOIb2a.js} +5 -4
  83. package/dist/{integer-style-CS5v7Bhq.js → integer-style-CfIX5ReH.js} +1 -1
  84. package/dist/{mb-render-Cs7LUxzk.js → mb-render-D_uumPQr.js} +1 -1
  85. package/dist/{number-input-ex-CwKIHfk1.js → number-input-ex-CWci0pCj.js} +12 -4
  86. package/dist/{org-props-BcbW62Jg.js → org-props-B5dk289u.js} +3 -2
  87. package/dist/{org-style-Bk7mgML3.js → org-style-BoSDPuw9.js} +1 -1
  88. package/dist/{pagination-design-B1KyJUAG.js → pagination-design-Ci4wxUIk.js} +3 -2
  89. package/dist/paper-widget-design-BilYU9rh.js +4 -0
  90. package/dist/{qrcode-design-EafZURDZ.js → qrcode-design-CJ9R5DIn.js} +1 -1
  91. package/dist/ref-autofill-editor-B4KDvHhR.js +2334 -0
  92. package/dist/{ref-props-C95McyZp.js → ref-props-CwDGepT3.js} +17 -9
  93. package/dist/{ref-style-BxdvOF-4.js → ref-style-B35CsOQO.js} +1 -1
  94. package/dist/{regex-editor-BGukvOEI.js → regex-editor-CIVvr_Lx.js} +2 -2
  95. package/dist/{revo-grid.entry-BeRVTVKO.js → revo-grid.entry-DeWzC35s.js} +1 -1
  96. package/dist/{revogr-attribution_7.entry-CHtbU2lV.js → revogr-attribution_7.entry-BJZ-twfj.js} +3 -3
  97. package/dist/{revogr-clipboard_3.entry-DnvQ-Rl7.js → revogr-clipboard_3.entry-DkgRA8qw.js} +2 -2
  98. package/dist/{revogr-data_4.entry-DLRSuaN8.js → revogr-data_4.entry-BZLzvcbo.js} +2 -2
  99. package/dist/{revogr-filter-panel.entry-BDkhY-74.js → revogr-filter-panel.entry-zGvhshno.js} +1 -1
  100. package/dist/{select-render-type-editor.vue_vue_type_script_setup_true_lang-ChESg_eM.js → select-render-type-editor.vue_vue_type_script_setup_true_lang-Asn5-ZRz.js} +3 -2
  101. package/dist/{serialnumber-design-CRaym9J-.js → serialnumber-design-CYFU5TVt.js} +1 -1
  102. package/dist/shared/index.es.js +16 -16
  103. package/dist/{signature-design-BJHfLDNV.js → signature-design-Cwi0cZOI.js} +5 -2
  104. package/dist/{signature-props-B9hfppHh.js → signature-props-cQRB8U8x.js} +3 -3
  105. package/dist/{signature-style-DM4rqHnN.js → signature-style-C90NsLxg.js} +1 -1
  106. package/dist/{single-field-drop-eClQhTSv.js → single-field-drop-BFhQs-3z.js} +2 -2
  107. package/dist/{size-editor-BjlCmEWf.js → size-editor-Dx3y_otg.js} +1 -1
  108. package/dist/src/nocode-base/src/components/border-td.vue.d.ts +1 -0
  109. package/dist/src/nocode-base/src/components/{document-quick-fill-modal.vue.d.ts → document-quick-fill/dynamic-quick-fill-modal.vue.d.ts} +1 -1
  110. package/dist/src/nocode-base/src/components/{document-quick-fillin.vue.d.ts → document-quick-fill/fixed-quick-fill-modal.vue.d.ts} +10 -4
  111. package/dist/src/nocode-base/src/components/document-quick-fill/quick-fill.util.d.ts +22 -0
  112. package/dist/src/nocode-base/src/components/document-sub-table-action/fixed-table-action.vue.d.ts +17 -0
  113. package/dist/src/nocode-base/src/components/index.d.ts +4 -3
  114. package/dist/src/nocode-base/src/hooks/material-consume/mc-render.d.ts +3 -1
  115. package/dist/src/nocode-base/src/hooks/useRenderPageFactory.d.ts +3 -0
  116. package/dist/src/nocode-base/src/types/common/base.d.ts +2 -0
  117. package/dist/src/nocode-base/src/types/fields/i-enum-select.d.ts +2 -0
  118. package/dist/src/nocode-base/src/types/fields/i-select.d.ts +4 -0
  119. package/dist/src/nocode-base/src/types/fields/i-trace.d.ts +7 -0
  120. package/dist/src/nocode-base/src/types/render/mc-render.d.ts +3 -1
  121. package/dist/src/nocode-base/src/types/render/sub-table-render.d.ts +3 -1
  122. package/dist/src/nocode-base/src/types/widgets/i-sub-table.d.ts +4 -0
  123. package/dist/src/nocode-web-render/src/hooks/userFormPrint.d.ts +2 -0
  124. package/dist/src/nocode-web-render/src/render/index.d.ts +2 -2
  125. package/dist/src/nocode-web-render/src/render/sub-table/common/scan-modal.vue.d.ts +3 -1
  126. package/dist/src/nocode-web-render/src/render/sub-table/common/sub-table-render.d.ts +3 -1
  127. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/index.d.ts +1 -2
  128. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/mc-web-render.d.ts +3 -1
  129. package/dist/src/online-form/src/utils/field.enum.d.ts +3 -2
  130. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/display-fields-editor.vue.d.ts +15 -0
  131. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/display-fields.util.d.ts +11 -0
  132. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/index.d.ts +3 -0
  133. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/index.d.ts +3 -0
  134. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search-editor.vue.d.ts +15 -0
  135. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search.util.d.ts +14 -0
  136. package/dist/src/online-form/src/views/designer/hooks/useAllSpreadSheets.d.ts +16 -0
  137. package/dist/src/online-form/src/views/designer/hooks/useSpreadSheet.d.ts +27 -2
  138. package/dist/src/{nocode-web-render/src/render/sub-table/material-consume/scan-modal.vue.d.ts → online-form/src/views/designer/modules/panel/comps/confirm-before-delete-config.vue.d.ts} +2 -4
  139. package/dist/src/online-form/src/views/designer/modules/panel/comps/quick-fill-config.vue.d.ts +9 -0
  140. package/dist/src/online-form/src/views/designer/modules/sheet/sheet-cell.vue.d.ts +1 -0
  141. package/dist/src/online-form/src/views/designer/types/index.d.ts +2 -0
  142. package/dist/src/online-form/src/views/render/__components__/_field_/_base_/common-select.util.d.ts +47 -0
  143. package/dist/src/shared/components/field-transfer/components/field-transfer-modal.vue.d.ts +30 -0
  144. package/dist/src/shared/components/field-transfer/components/modal-wrapper.vue.d.ts +65 -0
  145. package/dist/src/shared/components/field-transfer/hooks/useModelField.d.ts +169 -0
  146. package/dist/src/shared/components/field-transfer/hooks/useTreeData.d.ts +139 -0
  147. package/dist/src/shared/components/field-transfer/index.d.ts +21 -0
  148. package/dist/src/shared/components/field-transfer/useFieldTransfer.d.ts +47 -0
  149. package/dist/src/shared/components/field-transfer/utils/enum.d.ts +6 -0
  150. package/dist/src/shared/components/field-transfer/utils/i18n.d.ts +1 -0
  151. package/dist/src/shared/components/field-transfer/utils/tree-tool.d.ts +6 -0
  152. package/dist/{text-design-BGxM7gzI.js → text-design-TEheiKQx.js} +3 -2
  153. package/dist/{text-design-C3RhersV.js → text-design-jMPxIgZW.js} +10 -6
  154. package/dist/{text-props-CIpXslMv.js → text-props-CrkSvg6D.js} +5 -5
  155. package/dist/{text-style-BPjaT5Ic.js → text-style-DmwTt8KQ.js} +1 -1
  156. package/dist/{throttle-Cpk1LoGk-LNQ7rPwu.js → throttle-Cpk1LoGk-DTkhEkFR.js} +1 -1
  157. package/dist/{timediff-design-DqVuVrmx.js → timediff-design-D_if-K1S.js} +2 -1
  158. package/dist/{trace-design-IbjVLAhv.js → trace-design-oN7pgtab.js} +2 -2
  159. package/dist/{trace-props-C-F_eDG2.js → trace-props-BFnUk6kv.js} +24 -16
  160. package/dist/{trace-style-DRenZ1n1.js → trace-style-TNnFcvfw.js} +1 -1
  161. package/dist/{user-props-qQx7HZ7T.js → user-props-Ce-ilCmU.js} +3 -2
  162. package/dist/{user-style-BPFOx0xn.js → user-style-4rp0jKYP.js} +1 -1
  163. package/dist/{value-editor.vue_vue_type_style_index_0_lang-Crnt5d7x.js → value-editor.vue_vue_type_style_index_0_lang-DMuR0u4j.js} +3 -2
  164. package/dist/{version-select-BkZzH36D.js → version-select-DSFIlYgX.js} +2 -2
  165. package/dist/web-render/index.es.js +9 -9
  166. package/dist/{widget-barcode-CPZjarSa.js → widget-barcode-Du7LOaiy.js} +5 -4
  167. package/dist/{widget-diagonal-DebN3u9t.js → widget-diagonal-D-q7WK6T.js} +3 -3
  168. package/dist/{widget-image-BSMWxm9c.js → widget-image-Da5mvgMm.js} +5 -5
  169. package/dist/{widget-line-CyavTHOV.js → widget-line-oIFH8P04.js} +3 -2
  170. package/dist/{widget-pagination-ZCBdy6HQ.js → widget-pagination-CSonelt_.js} +6 -5
  171. package/dist/{widget-power-B1NFysHT.js → widget-power-CWczWA7K.js} +3 -3
  172. package/dist/{widget-qrcode-B0TTSoSK.js → widget-qrcode-MQ-cSphb.js} +4 -3
  173. package/dist/{widget-rangelimit-C_ureKDr.js → widget-rangelimit-CFDeRJIf.js} +3 -3
  174. package/dist/{widget-serialnumber-Dq15dHnk.js → widget-serialnumber-DlE2-jvp.js} +1 -1
  175. package/dist/{widget-text-B9EXKFiM.js → widget-text-B1SnpOGN.js} +5 -5
  176. package/dist/{widget-timediff-BhLrQuGb.js → widget-timediff-DeyJbqRE.js} +3 -2
  177. package/package.json +1 -1
  178. package/dist/base-font-editor-BmC423aB.js +0 -83
  179. package/dist/cell-upload-CiXVE0Ii.js +0 -25
  180. package/dist/paper-widget-design-Cp0ioo8c.js +0 -4
  181. package/dist/ref-autofill-editor-OtclaSqy.js +0 -673
  182. /package/dist/src/nocode-base/src/components/document-sub-table-action/{document-sub-table-action.vue.d.ts → dynamic-table-action.vue.d.ts} +0 -0
@@ -0,0 +1,2334 @@
1
+ import { watch, toRefs, reactive, toRaw, defineComponent, ref, computed, createVNode, createTextVNode, Fragment, resolveComponent, openBlock, createBlock, unref, withCtx, createElementVNode, createElementBlock, toDisplayString, createCommentVNode, mergeProps, createApp, onMounted, normalizeClass, withDirectives, vShow, h } from "vue";
2
+ import { D as DownOutlined, u as useModelFields, F as FormItem, l as SEARCH_TYPE, i as draggableComponent, t as transformMappingField4Auto } from "./index-BG_CEaW0.js";
3
+ import { Cascader, Tooltip, Input, Empty, Tree, Transfer, Select, Tag } from "ant-design-vue";
4
+ import { i as api, F as FIELD_TYPE, C as CreateType, I as FieldIconMap, _ as _export_sfc, c as FIELD_TYPE_TRACE, g as SubTableType } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-OPdk2I5p.js";
5
+ import { cloneDeep, has, isEmpty, pick, isBoolean } from "lodash-es";
6
+ import { r as registerDialogComp } from "./index-CWpratsK.js";
7
+ import { useModal } from "@gct-paas/core";
8
+ const DEFAULT_DISPLAY_FIELDS_MAP = {
9
+ // 设备:设备编码、设备名称
10
+ device: ["code_", "name_"],
11
+ // 库存物料:预留
12
+ materialNo: []
13
+ };
14
+ var SCOPEINFO = /* @__PURE__ */ ((SCOPEINFO2) => {
15
+ SCOPEINFO2["FIELD_LIST"] = "fieldList";
16
+ SCOPEINFO2["FIELD_FORM"] = "fieldForm";
17
+ return SCOPEINFO2;
18
+ })(SCOPEINFO || {});
19
+ const objInfo = {
20
+ modelKey: "",
21
+ fieldCodeChain: "",
22
+ bindFormId: "",
23
+ isFieldModel: false,
24
+ relateObjList: []
25
+ };
26
+ const modelInfoMap = {};
27
+ const modelFieldMap = {};
28
+ const selectObj = {
29
+ modelName: "",
30
+ fieldList: [],
31
+ modelKey: "",
32
+ currentFormId: "",
33
+ fieldCodeChain: "",
34
+ isFieldModel: false
35
+ };
36
+ const fieldCascaderSelectValue = [];
37
+ const fieldPathChainList = [];
38
+ const fieldMap = {
39
+ objInfo,
40
+ modelInfoMap,
41
+ modelFieldMap,
42
+ fieldCascaderSelectValue,
43
+ fieldPathChainList
44
+ };
45
+ const fieldCacheMap = {
46
+ [SCOPEINFO.FIELD_FORM]: {
47
+ selectObj: reactive(cloneDeep(selectObj)),
48
+ ...toRefs(reactive(cloneDeep(fieldMap)))
49
+ },
50
+ [SCOPEINFO.FIELD_LIST]: {
51
+ selectObj: reactive(cloneDeep(selectObj)),
52
+ ...toRefs(reactive(cloneDeep(fieldMap)))
53
+ }
54
+ };
55
+ function useModelField(scope = SCOPEINFO.FIELD_FORM) {
56
+ const {
57
+ objInfo: objInfo2,
58
+ modelInfoMap: modelInfoMap2,
59
+ modelFieldMap: modelFieldMap2,
60
+ selectObj: selectObj2,
61
+ fieldCascaderSelectValue: fieldCascaderSelectValue2,
62
+ fieldPathChainList: fieldPathChainList2
63
+ } = fieldCacheMap[scope];
64
+ async function getModelDetail2FieldList(modelKey) {
65
+ const res = await api.apaas.modelMeta.getDetail({
66
+ modelKey
67
+ });
68
+ return res;
69
+ }
70
+ function setModelFieldToMap(modelKey, fieldList = []) {
71
+ if (!modelFieldMap2.value[modelKey]) {
72
+ modelFieldMap2.value[modelKey] = fieldList?.reduce(
73
+ (prev, curr) => ({
74
+ ...prev,
75
+ [curr.key ?? ""]: curr
76
+ }),
77
+ {}
78
+ );
79
+ }
80
+ }
81
+ function setModelInfoToMap(modelList = []) {
82
+ modelList?.forEach((item) => {
83
+ if (!modelInfoMap2.value[item.key]) {
84
+ modelInfoMap2.value[item.key] = {
85
+ modelId: item.id,
86
+ modelKey: item.key,
87
+ modelName: item.name,
88
+ // NDO | RDO
89
+ modelType: item.type
90
+ };
91
+ }
92
+ });
93
+ }
94
+ function getModelFieldList(modelKey) {
95
+ if (!modelKey || !modelFieldMap2.value[modelKey]) {
96
+ return [];
97
+ }
98
+ return Object.values(toRaw(modelFieldMap2.value[modelKey]));
99
+ }
100
+ function getModelFieldInfo(modelKey, fieldKey) {
101
+ if (!modelKey || !fieldKey || !modelFieldMap2.value[modelKey]) {
102
+ return;
103
+ }
104
+ return modelFieldMap2.value[modelKey][fieldKey];
105
+ }
106
+ function getModelInfo(modelKey) {
107
+ if (!modelKey || !modelInfoMap2.value[modelKey]) {
108
+ return false;
109
+ }
110
+ return modelInfoMap2.value[modelKey];
111
+ }
112
+ function _checkRefModel(item, fieldTypes = []) {
113
+ return item.bindInfo && [FIELD_TYPE.REF, FIELD_TYPE.RDO_REF, ...fieldTypes].includes(item.type) && [CreateType.USER_DEFINED, CreateType.BUILTIN].includes(item.createType);
114
+ }
115
+ function getRefConfig({ item, formId }, { links, fieldLinks, fieldType }) {
116
+ const link = [...links, item.bindInfo];
117
+ return {
118
+ fieldKey: item.key,
119
+ fieldType: item.type,
120
+ belongModelKey: item.modelKey,
121
+ bindModelKey: item.bindInfo,
122
+ bindFormId: formId ?? "",
123
+ isFieldModel: true,
124
+ // ! 这边用对象的原因是模型 key 可能是特殊字符,所以如果直接用字符串拼接可能会有问题
125
+ fieldCodeChain: JSON.stringify({
126
+ // 关联模型的字段key
127
+ bindFieldKey: item.key,
128
+ // 字段所属模型的key
129
+ bindModelKey: item.bindInfo,
130
+ // 关联模型字段所属模型的key
131
+ belongModelKey: item.modelKey,
132
+ /**模型链路 */
133
+ modelLink: link,
134
+ /**字段链路 */
135
+ fieldLink: fieldLinks,
136
+ /**关联源模型的模型类型 */
137
+ refOriginFieldType: fieldType
138
+ }),
139
+ modelLink: link,
140
+ children: []
141
+ };
142
+ }
143
+ async function getRefInfo({ item, formId }, { modelKey, fieldType }) {
144
+ const oneLevelRefConfig = getRefConfig(
145
+ { item, formId },
146
+ { links: [modelKey], fieldLinks: [item.key], fieldType }
147
+ );
148
+ const twoLevelFieldData = await getModelDetail2FieldList(oneLevelRefConfig.bindModelKey);
149
+ const twoLevelRefConfigs = twoLevelFieldData?.fieldMetaList?.filter((a) => _checkRefModel(a)).map(
150
+ (i) => getRefConfig(
151
+ { item: i, formId },
152
+ { links: oneLevelRefConfig.modelLink, fieldLinks: [item.key, i.key], fieldType }
153
+ )
154
+ );
155
+ return { ...oneLevelRefConfig, children: twoLevelRefConfigs };
156
+ }
157
+ async function loadObjInfo(modelKey, {
158
+ formId,
159
+ childParentModelKey,
160
+ isShowCascader = true
161
+ } = {}) {
162
+ const info = await getModelDetail2FieldList(modelKey);
163
+ if (info) {
164
+ info.fieldMetaList?.forEach((item) => {
165
+ if (item.type === FIELD_TYPE.ASSOCIATED_PRIMARY_KEY && childParentModelKey) {
166
+ item.bindInfo = childParentModelKey;
167
+ }
168
+ });
169
+ const refList = await Promise.all(
170
+ info.fieldMetaList?.filter((a) => _checkRefModel(a, [FIELD_TYPE.ASSOCIATED_PRIMARY_KEY]))?.map((item) => getRefInfo({ item, formId }, { modelKey, fieldType: item.type })) ?? []
171
+ );
172
+ objInfo2.value = {
173
+ modelKey: info.key,
174
+ fieldCodeChain: JSON.stringify({ modelKey: info.key }),
175
+ bindFormId: formId ?? "",
176
+ isFieldModel: false,
177
+ relateObjList: refList
178
+ };
179
+ setModelFieldToMap(info.key ?? "", info.fieldMetaList);
180
+ let modelDetails = [info];
181
+ const allRefList = [
182
+ ...new Set(
183
+ objInfo2.value.relateObjList?.map((item) => [item, ...item.children || []]).flat().map((item) => item.bindModelKey)
184
+ )
185
+ ];
186
+ if (allRefList?.length !== 0) {
187
+ const res = await api.apaas.modelMeta.getByKeys({ modelKeys: allRefList.join(",") ?? "" });
188
+ modelDetails = modelDetails?.concat(res ?? []);
189
+ }
190
+ setModelInfoToMap(modelDetails);
191
+ if (allRefList?.length !== 0 && isShowCascader) {
192
+ await Promise.all(allRefList.map((k) => getModelDetail2FieldList(k))).then((res) => {
193
+ (res ?? []).forEach((info2) => {
194
+ if (info2) {
195
+ setModelFieldToMap(info2.key ?? "", info2.fieldMetaList);
196
+ }
197
+ });
198
+ });
199
+ }
200
+ }
201
+ return true;
202
+ }
203
+ async function fetchDetailList(modelKey) {
204
+ if (!modelFieldMap2.value[modelKey]) {
205
+ const info = await getModelDetail2FieldList(modelKey);
206
+ if (info) {
207
+ setModelFieldToMap(info.key ?? "", info.fieldMetaList);
208
+ }
209
+ }
210
+ }
211
+ function setSelectObjData(modelKey, info) {
212
+ const modelInfo = getModelInfo(modelKey);
213
+ if (modelInfo) {
214
+ selectObj2.modelKey = modelInfo.modelKey;
215
+ selectObj2.modelName = modelInfo.modelName;
216
+ selectObj2.currentFormId = info.bindFormId;
217
+ selectObj2.fieldCodeChain = info.fieldCodeChain;
218
+ selectObj2.isFieldModel = info.isFieldModel;
219
+ selectObj2.fieldList = getModelFieldList(modelInfo.modelKey);
220
+ }
221
+ }
222
+ watch(
223
+ [() => objInfo2.value, () => modelInfoMap2.value],
224
+ () => {
225
+ if (!selectObj2.modelKey && objInfo2.value.modelKey) {
226
+ setSelectObjData(objInfo2.value.modelKey, objInfo2.value);
227
+ }
228
+ },
229
+ {
230
+ immediate: true,
231
+ deep: true
232
+ }
233
+ );
234
+ function changeSelectInfo(modelKey, data) {
235
+ setSelectObjData(modelKey, data);
236
+ }
237
+ function clearSelectInfo() {
238
+ selectObj2.modelKey = "";
239
+ selectObj2.modelName = "";
240
+ selectObj2.currentFormId = "";
241
+ selectObj2.fieldCodeChain = "";
242
+ selectObj2.isFieldModel = false;
243
+ selectObj2.fieldList = [];
244
+ fieldCascaderSelectValue2.value = [];
245
+ }
246
+ function clearObjInfo() {
247
+ objInfo2.value = {
248
+ modelKey: "",
249
+ fieldCodeChain: "",
250
+ bindFormId: "",
251
+ isFieldModel: false,
252
+ relateObjList: []
253
+ };
254
+ }
255
+ function getFieldCodeChainStr(fieldCodeChain, currentFieldName) {
256
+ if (!fieldCodeChain) {
257
+ return "";
258
+ }
259
+ const fieldCodeChainObj = JSON.parse(fieldCodeChain);
260
+ if (has(fieldCodeChainObj, "bindFieldKey")) {
261
+ const fieldInfo = getModelFieldInfo(
262
+ fieldCodeChainObj.belongModelKey,
263
+ fieldCodeChainObj.bindFieldKey
264
+ );
265
+ const bindModelInfo = getModelInfo(fieldCodeChainObj.bindModelKey);
266
+ if (fieldInfo && bindModelInfo) {
267
+ return `${fieldInfo.name}(${bindModelInfo.modelName})${currentFieldName ? ` > ${currentFieldName}` : ""}`;
268
+ }
269
+ } else {
270
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
271
+ if (modelInfo) {
272
+ return `${modelInfo.modelName}${currentFieldName ? ` > ${currentFieldName}` : ""}`;
273
+ }
274
+ }
275
+ return "";
276
+ }
277
+ async function getFieldPathChainList(fieldCodeChain, fieldName) {
278
+ if (!fieldCodeChain) {
279
+ fieldPathChainList2.value = [];
280
+ } else {
281
+ const fieldCodeChainObj = JSON.parse(fieldCodeChain);
282
+ const isFieldModel = has(fieldCodeChainObj, "bindFieldKey");
283
+ const modelKeys = isFieldModel ? fieldCodeChainObj.modelLink || [
284
+ fieldCodeChainObj.belongModelKey,
285
+ fieldCodeChainObj.bindModelKey
286
+ ] : [fieldCodeChainObj.modelKey];
287
+ if (modelKeys.some((item) => !getModelInfo(item))) {
288
+ const res = await api.apaas.modelMeta.getByKeys({
289
+ modelKeys: modelKeys.join(",")
290
+ });
291
+ if (res) {
292
+ setModelInfoToMap(res);
293
+ }
294
+ }
295
+ if (isFieldModel) {
296
+ fieldPathChainList2.value = modelKeys.map((i) => getModelInfo(i).modelName).concat(fieldName);
297
+ } else {
298
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
299
+ if (modelInfo) {
300
+ fieldPathChainList2.value = [modelInfo.modelName, fieldName];
301
+ }
302
+ }
303
+ }
304
+ return fieldPathChainList2.value;
305
+ }
306
+ async function reloadFieldToolkit(modelKey, formId, childParentModelKey) {
307
+ if (selectObj2.currentFormId === formId) {
308
+ return;
309
+ }
310
+ clearSelectInfo();
311
+ clearObjInfo();
312
+ await loadObjInfo(modelKey, {
313
+ formId,
314
+ childParentModelKey
315
+ });
316
+ }
317
+ return {
318
+ objInfo: objInfo2,
319
+ loadObjInfo,
320
+ getModelInfo,
321
+ getModelFieldList,
322
+ getModelFieldInfo,
323
+ selectObj: selectObj2,
324
+ modelFieldMap: modelFieldMap2,
325
+ fetchDetailList,
326
+ changeSelectInfo,
327
+ getFieldCodeChainStr,
328
+ getFieldPathChainList,
329
+ clearSelectInfo,
330
+ clearObjInfo,
331
+ fieldCascaderSelectValue: fieldCascaderSelectValue2,
332
+ fieldPathChainList: fieldPathChainList2,
333
+ reloadFieldToolkit
334
+ };
335
+ }
336
+ const MESSAGES = {
337
+ "sys.component.fieldTransfer.defaultModalTitle": "选择字段",
338
+ "sys.component.fieldTransfer.move": "移动",
339
+ "sys.component.fieldTransfer.noSelect": "待选",
340
+ "sys.component.fieldTransfer.select": "已选",
341
+ "sys.component.fieldTransfer.noSearchData": "无搜索结果",
342
+ "sys.component.fieldTransfer.noData": "暂无数据",
343
+ "sys.component.fieldTransfer.term": "项",
344
+ "sys.component.fieldTransfer.pleaseSearch": "请搜索",
345
+ "sys.component.fieldTransfer.selectAllData": "全选所有",
346
+ "sys.component.fieldTransfer.invertCurrentPage": "反选当页",
347
+ "sys.component.fieldTransfer.linkModel": "关联模型",
348
+ "sys.component.fieldTransfer.subMainModel": "子主模型",
349
+ "sys.component.fieldTransfer.currentModel": "当前模型",
350
+ "sys.component.fieldTransfer.soModelTitle": "选择对象",
351
+ "sys.model.modelKey": "模型标识"
352
+ };
353
+ function t(key) {
354
+ if (MESSAGES[key]) return MESSAGES[key];
355
+ const globalT = window.$t;
356
+ if (typeof globalT === "function") {
357
+ const v = globalT(key);
358
+ if (v && v !== key) return v;
359
+ }
360
+ return key;
361
+ }
362
+ const FieldCascader = /* @__PURE__ */ defineComponent({
363
+ name: "FieldCascader",
364
+ props: {
365
+ scope: {
366
+ type: String,
367
+ default: SCOPEINFO.FIELD_FORM
368
+ },
369
+ isShowCascader: {
370
+ type: Boolean,
371
+ default: true
372
+ }
373
+ },
374
+ setup(props) {
375
+ const {
376
+ fieldCascaderSelectValue: fieldCascaderSelectValue2,
377
+ objInfo: objInfo2,
378
+ getModelInfo,
379
+ getModelFieldInfo,
380
+ fetchDetailList,
381
+ changeSelectInfo
382
+ } = useModelField(props.scope);
383
+ const visible = ref(false);
384
+ const isReadyonly = computed(() => {
385
+ return !props.isShowCascader || objInfo2.value.relateObjList.length === 0;
386
+ });
387
+ const handleClickItem = async (e, item) => {
388
+ visible.value = false;
389
+ const key = has(item, "fieldKey") ? item.bindModelKey : item.modelKey;
390
+ await fetchDetailList(key);
391
+ changeSelectInfo(key, item);
392
+ };
393
+ const renderOptions = () => {
394
+ const label = (item, showIcon = false) => {
395
+ const modelInfo = getModelInfo(item.bindModelKey || item.modelKey);
396
+ if (modelInfo) {
397
+ let name = createVNode("span", {
398
+ "class": "field-ops-name"
399
+ }, [modelInfo.modelName]);
400
+ if (item.belongModelKey && item.fieldKey !== "ref_master_id_") {
401
+ const fieldInfo = getModelFieldInfo(item.belongModelKey, item.fieldKey);
402
+ if (fieldInfo) {
403
+ name = createVNode("span", {
404
+ "class": "field-ops-name"
405
+ }, [fieldInfo.name, createVNode("span", {
406
+ "class": "field-ops-desc"
407
+ }, [createTextVNode("("), modelInfo.modelName, createTextVNode(")")])]);
408
+ }
409
+ }
410
+ return createVNode(Fragment, null, [createVNode("div", {
411
+ "class": "field-ops",
412
+ "onClick": (e) => handleClickItem(e, item)
413
+ }, [name]), showIcon && createVNode("i", {
414
+ "class": "iconfont icon-a-Rightarrow"
415
+ }, null)]);
416
+ }
417
+ return null;
418
+ };
419
+ const tipOptInfo = (label2, value) => {
420
+ return {
421
+ label: createVNode("div", {
422
+ "class": "field-ops"
423
+ }, [createVNode("span", {
424
+ "class": "field-ops-name"
425
+ }, [label2])]),
426
+ value,
427
+ isLeaf: true,
428
+ disabled: true
429
+ };
430
+ };
431
+ const options = [];
432
+ if (!isEmpty(objInfo2.value)) {
433
+ const recursive = (fieldItem) => {
434
+ if (!fieldItem.relateObjList) return [];
435
+ return [tipOptInfo(t("sys.component.fieldTransfer.linkModel"), "link")].concat(fieldItem.relateObjList.filter((item) => FIELD_TYPE.ASSOCIATED_PRIMARY_KEY !== item.fieldType).map((item) => {
436
+ const isShowIcon = item.children.length !== 0;
437
+ return {
438
+ label: label(item, isShowIcon),
439
+ value: item.fieldCodeChain,
440
+ isLeaf: false,
441
+ // ! 解决没有下级内容的时候hover上去需要关闭下级菜单 所以设置成即使当前节点没有 children,也会显示展开图标
442
+ children: isShowIcon ? [tipOptInfo(t("sys.component.fieldTransfer.linkModel"), "link")].concat(item.children.map((i) => {
443
+ return {
444
+ label: label(i),
445
+ value: i.fieldCodeChain
446
+ };
447
+ })) : []
448
+ };
449
+ }));
450
+ };
451
+ const mainModelList = objInfo2.value.relateObjList?.filter((item) => FIELD_TYPE.ASSOCIATED_PRIMARY_KEY === item.fieldType);
452
+ let subMainOpts = [];
453
+ if (mainModelList.length) {
454
+ subMainOpts = [tipOptInfo(t("sys.component.fieldTransfer.subMainModel"), "submain")].concat(mainModelList.map((item) => ({
455
+ label: label(item),
456
+ value: item.fieldCodeChain
457
+ })));
458
+ }
459
+ const children = recursive(objInfo2.value);
460
+ options.push(tipOptInfo(t("sys.component.fieldTransfer.currentModel"), "current"));
461
+ options.push({
462
+ label: label(objInfo2.value, children.length >= 2),
463
+ // 一条信息是标题
464
+ value: objInfo2.value.fieldCodeChain,
465
+ children: children.length >= 2 ? children : [],
466
+ isLeaf: false
467
+ });
468
+ options.push(...subMainOpts);
469
+ }
470
+ return options;
471
+ };
472
+ const renderSelectName = () => {
473
+ let fieldName = createVNode("span", null, null);
474
+ let name = "";
475
+ let lastName = "";
476
+ if (fieldCascaderSelectValue2.value && fieldCascaderSelectValue2.value.length > 0) {
477
+ fieldCascaderSelectValue2.value.forEach((pos) => {
478
+ const fieldCodeChainObj = JSON.parse(pos);
479
+ if (has(fieldCodeChainObj, "bindFieldKey")) {
480
+ const belongModelInfo = getModelInfo(fieldCodeChainObj.belongModelKey);
481
+ const fieldInfo = getModelFieldInfo(fieldCodeChainObj.belongModelKey, fieldCodeChainObj.bindFieldKey);
482
+ const bindModelInfo = getModelInfo(fieldCodeChainObj.bindModelKey);
483
+ if (belongModelInfo && fieldInfo && bindModelInfo) {
484
+ if (fieldInfo.key !== "ref_master_id_") {
485
+ name += `${belongModelInfo.modelName} / `;
486
+ }
487
+ if (fieldInfo.type === FIELD_TYPE.ASSOCIATED_PRIMARY_KEY) {
488
+ lastName = bindModelInfo.modelName;
489
+ } else {
490
+ lastName = `${fieldInfo.name}(${bindModelInfo.modelName})`;
491
+ }
492
+ }
493
+ } else {
494
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
495
+ if (modelInfo) {
496
+ lastName = modelInfo.modelName;
497
+ }
498
+ }
499
+ });
500
+ } else if (objInfo2.value.modelKey) {
501
+ const fieldCodeChainObj = JSON.parse(objInfo2.value.fieldCodeChain);
502
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
503
+ if (modelInfo) {
504
+ lastName = modelInfo.modelName;
505
+ }
506
+ }
507
+ fieldName = createVNode("span", null, [createVNode("span", {
508
+ "class": "bread"
509
+ }, [createVNode("span", {
510
+ "class": "field-cascader-title"
511
+ }, [t("sys.component.fieldTransfer.soModelTitle")]), name]), createVNode(Tooltip, {
512
+ "title": t("sys.model.modelKey") + ":" + objInfo2.value.modelKey
513
+ }, {
514
+ default: () => [createVNode("span", {
515
+ "class": "last-name"
516
+ }, [lastName])]
517
+ }), !isReadyonly.value && createVNode(DownOutlined, {
518
+ "class": "ml-4px down-icon"
519
+ }, null)]);
520
+ return fieldName;
521
+ };
522
+ return () => {
523
+ return createVNode("div", {
524
+ "class": "field-cascader",
525
+ "style": {
526
+ cursor: isReadyonly.value ? "default" : "pointer"
527
+ }
528
+ }, [createVNode(Cascader, {
529
+ "dropdownClassName": "field-popup-cascader",
530
+ "options": renderOptions(),
531
+ "value": fieldCascaderSelectValue2.value,
532
+ "onUpdate:value": ($event) => fieldCascaderSelectValue2.value = $event,
533
+ "expandTrigger": "hover",
534
+ "onDropdownVisibleChange": (v) => {
535
+ visible.value = v;
536
+ },
537
+ "open": isReadyonly.value ? false : visible.value,
538
+ "changeOnSelect": true
539
+ }, {
540
+ default: () => [createVNode("div", null, [renderSelectName(), createTextVNode(" ")])]
541
+ })]);
542
+ };
543
+ }
544
+ });
545
+ function isGroupNode(node) {
546
+ return node.type === "group";
547
+ }
548
+ function generateData(nodes) {
549
+ return nodes.map((node) => {
550
+ if (isGroupNode(node)) {
551
+ return {
552
+ width: node.width,
553
+ id: node.key,
554
+ title: node.title,
555
+ type: node.type,
556
+ children: generateData(node.children || [])
557
+ };
558
+ }
559
+ return {
560
+ width: node.width,
561
+ id: node.key,
562
+ title: node.title,
563
+ type: node.type,
564
+ modelKey: node.modelKey
565
+ };
566
+ });
567
+ }
568
+ function traverse(handler, items) {
569
+ items.forEach((node) => {
570
+ handler(node);
571
+ if (isGroupNode(node)) {
572
+ traverse(handler, node.children);
573
+ }
574
+ });
575
+ }
576
+ function findNode(key, root) {
577
+ let result;
578
+ const handler = (items) => {
579
+ return items.some((node) => {
580
+ if (node.key === key) {
581
+ result = node;
582
+ return true;
583
+ }
584
+ if (isGroupNode(node)) {
585
+ return handler(node.children);
586
+ }
587
+ return false;
588
+ });
589
+ };
590
+ if (root.key === key) {
591
+ return root;
592
+ }
593
+ handler(root.children);
594
+ return result;
595
+ }
596
+ function traverseFilter(handler, items) {
597
+ const result = [];
598
+ items.forEach((node) => {
599
+ if (isGroupNode(node)) {
600
+ const children = traverseFilter(handler, node.children);
601
+ if (children.length === 0 && !handler(node)) {
602
+ return;
603
+ }
604
+ result.push({
605
+ ...node,
606
+ children
607
+ });
608
+ return;
609
+ }
610
+ if (handler(node)) {
611
+ result.push(node);
612
+ }
613
+ });
614
+ return result;
615
+ }
616
+ const MAX_ENABLE_COUNT = 5e6;
617
+ const useTreeData = (useMultiLevelTHead, isResetData, draggable, maxEnableCount, onColumnsChange) => {
618
+ ref(0);
619
+ const leafKeys = ref([]);
620
+ const refOriginalLeafKeys = ref([]);
621
+ const refTotalFields = ref(0);
622
+ const multiple = computed(() => useMultiLevelTHead);
623
+ const root = reactive({
624
+ key: "0",
625
+ title: "root",
626
+ children: [],
627
+ level: 0,
628
+ type: "group",
629
+ parent: null
630
+ });
631
+ const onChangeTree = (columnsData, fields) => {
632
+ const keys = [];
633
+ function handle(items, parent) {
634
+ return items.map(({ id, ...restItem }) => {
635
+ const node = {
636
+ ...restItem,
637
+ key: id,
638
+ parent,
639
+ level: parent.level + 1,
640
+ isLeaf: restItem.type === "field"
641
+ };
642
+ if (!node.isLeaf) {
643
+ node.children = handle(node.children, node);
644
+ } else {
645
+ const fieldItem = fields.find((item) => item.id === id);
646
+ if (fieldItem) {
647
+ node.disabled = fieldItem.disabled;
648
+ if (fieldItem) {
649
+ node.disableCheckbox = fieldItem.disabled;
650
+ node.fieldType = fieldItem.type;
651
+ keys.push(id);
652
+ refTotalFields.value += 1;
653
+ }
654
+ }
655
+ }
656
+ return node;
657
+ });
658
+ }
659
+ root.children = handle(columnsData, root);
660
+ leafKeys.value = keys;
661
+ if (!isResetData) {
662
+ refOriginalLeafKeys.value = [...keys];
663
+ }
664
+ };
665
+ watch(
666
+ multiple,
667
+ (val) => {
668
+ if (!val) {
669
+ const result = [];
670
+ traverse((node) => {
671
+ if (!isGroupNode(node)) {
672
+ result.push({
673
+ ...node,
674
+ parent: root
675
+ });
676
+ }
677
+ }, root.children);
678
+ root.children = result;
679
+ }
680
+ },
681
+ {
682
+ immediate: true
683
+ }
684
+ );
685
+ const data = computed(() => root.children);
686
+ const refresh = () => {
687
+ root.children = [...root.children];
688
+ };
689
+ const handleColumnsChange = () => {
690
+ onColumnsChange?.(generateData(root.children));
691
+ };
692
+ const remainCount = computed(() => (maxEnableCount ?? MAX_ENABLE_COUNT) - leafKeys.value.length);
693
+ function getContainerNode(node) {
694
+ return root;
695
+ }
696
+ return {
697
+ data,
698
+ root,
699
+ leafKeys,
700
+ multiple,
701
+ draggable,
702
+ remainCount,
703
+ addTreeNodes(nodes, parent) {
704
+ const p = findNode(parent.key, root);
705
+ const newNodes = nodes.map(
706
+ (item) => ({
707
+ ...item,
708
+ level: p.level + 1,
709
+ parent: p
710
+ })
711
+ );
712
+ p.children.push(...newNodes);
713
+ const newLeafKeys = [...leafKeys.value];
714
+ nodes.forEach((item) => {
715
+ if (item.isLeaf) {
716
+ newLeafKeys.push(item.key);
717
+ }
718
+ });
719
+ leafKeys.value = newLeafKeys;
720
+ refresh();
721
+ setTimeout(() => {
722
+ newNodes.forEach((node) => {
723
+ if (node.isNew) {
724
+ node.isNew = false;
725
+ }
726
+ });
727
+ }, 500);
728
+ handleColumnsChange();
729
+ },
730
+ removeTreeNodesByKeys(keys) {
731
+ root.children = traverseFilter((node) => !keys.includes(node.key), root.children);
732
+ leafKeys.value = leafKeys.value.filter((key) => !keys.includes(key));
733
+ handleColumnsChange();
734
+ },
735
+ moveTreeNode(source, target, direction, asChildren = false) {
736
+ const sourceParent = findNode(source.parent.key, root);
737
+ let j = 0;
738
+ let targetParent = findNode(target.parent.key, root);
739
+ if (asChildren) {
740
+ if (isGroupNode(target)) {
741
+ targetParent = findNode(target.key, root);
742
+ } else {
743
+ j = targetParent.children.findIndex((item) => item.key === target.key);
744
+ j += 1;
745
+ }
746
+ } else {
747
+ j = targetParent.children.findIndex((item) => item.key === target.key);
748
+ j += direction === 1 ? 1 : -1;
749
+ j = Math.max(j, 0);
750
+ }
751
+ if (targetParent.level >= 3 && isGroupNode(source)) {
752
+ return;
753
+ }
754
+ const i = sourceParent.children.findIndex((item) => item.key === source.key);
755
+ sourceParent.children.splice(i, 1);
756
+ if (source.parent === targetParent) {
757
+ targetParent.children.splice(i < j ? j - 1 : j, 0, source);
758
+ } else {
759
+ source.parent = targetParent;
760
+ source.level = targetParent.level + 1;
761
+ targetParent.children.splice(j, 0, source);
762
+ }
763
+ refresh();
764
+ handleColumnsChange();
765
+ },
766
+ getContainerNode,
767
+ onChangeTree
768
+ };
769
+ };
770
+ const TreeItem = /* @__PURE__ */ defineComponent({
771
+ name: "TreeItem",
772
+ props: {
773
+ node: {
774
+ type: Object,
775
+ required: true
776
+ },
777
+ draggable: Boolean
778
+ },
779
+ setup(props) {
780
+ const editing = computed(() => {
781
+ console.log("props.node", props.node);
782
+ return props.node.isNew;
783
+ });
784
+ return () => {
785
+ return createVNode("div", {
786
+ "class": "tree-item-container"
787
+ }, [createVNode("div", {
788
+ "class": "tree-title"
789
+ }, [createVNode(Tooltip, {
790
+ "title": props.node.tooltip
791
+ }, {
792
+ default: () => [createVNode("span", null, [props.node.title || "-"])]
793
+ })]), !editing.value && props.draggable && !props.node?.disabled && !props.node?._preset && createVNode("div", {
794
+ "class": "operation-container"
795
+ }, [createVNode(Tooltip, {
796
+ "title": t("sys.component.fieldTransfer.move")
797
+ }, {
798
+ default: () => [createVNode("i", {
799
+ "class": ["iconfont", "icon-drag"]
800
+ }, null)]
801
+ })])]);
802
+ };
803
+ }
804
+ });
805
+ const noData = "data:image/svg+xml,%3csvg%20width='90'%20height='66'%20viewBox='0%200%2090%2066'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='pic_nodata'%20clip-path='url(%23clip0_129_180)'%3e%3cg%20id='&%23233;&%23161;&%23181;&%23233;&%23157;&%23162;-1'%3e%3cg%20id='pic_nowenjuan'%3e%3cg%20id='&%23231;&%23188;&%23150;&%23231;&%23187;&%23132;-11'%3e%3cpath%20id='&%23232;&%23183;&%23175;&%23229;&%23190;&%23132;-9'%20d='M42.6733%2020.3538C43.4673%2015.8467%2045.3793%2013.4462%2048.4095%2013.1524C52.9548%2012.7117%2047.4628%2018.0616%2046.6434%2016.1503C45.824%2014.2391%2049.337%209.47943%2051.6375%208.51257'%20stroke='%23DFE2E5'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20id='&%23232;&%23183;&%23175;&%23229;&%23190;&%23132;-10'%20opacity='0.5'%20d='M47.9468%207.17116C49.4703%205.01916%2051.1966%203.70564%2053.1258%203.23058'%20stroke='%23DFE2E5'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3c/g%3e%3cg%20id='&%23231;&%23188;&%23150;&%23231;&%23187;&%23132;'%3e%3cpath%20id='&%23231;&%23159;&%23169;&%23229;&%23189;&%23162;'%20d='M32.94%2025.3089H13.9185V62.5073H32.94V25.3089Z'%20fill='url(%23paint0_linear_129_180)'/%3e%3cpath%20id='&%23231;&%23159;&%23169;&%23229;&%23189;&%23162;_2'%20d='M74.5127%2025.3089H32.9399V62.5073H74.5127V25.3089Z'%20fill='url(%23paint1_linear_129_180)'/%3e%3cpath%20id='&%23231;&%23159;&%23169;&%23229;&%23189;&%23162;_3'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M52.9773%2053.5956H58.083C58.9474%2053.5956%2059.6482%2054.2908%2059.6482%2055.1485V61.9251H51.4121V55.1485C51.4121%2054.2908%2052.1129%2053.5956%2052.9773%2053.5956Z'%20fill='white'/%3e%3cpath%20id='&%23232;&%23183;&%23175;&%23229;&%23190;&%23132;'%20d='M10%2063L78%2063'%20stroke='%23E9EBED'%20stroke-width='2'%20stroke-linecap='square'%20stroke-linejoin='round'/%3e%3cpath%20id='&%23232;&%23183;&%23175;&%23229;&%23190;&%23132;_2'%20opacity='0.6'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M8.5598%2016.8379L13.9186%2025.3089H32.9401L27.6453%2016.6929C26.7929%2015.3058%2025.2736%2014.4594%2023.6361%2014.4594H9.88553C9.02108%2014.4594%208.32031%2015.1547%208.32031%2016.0123C8.32031%2016.3044%208.40332%2016.5905%208.5598%2016.8379Z'%20fill='%23C1C5CA'/%3e%3cpath%20id='&%23232;&%23183;&%23175;&%23229;&%23190;&%23132;_3'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M55.2952%2025.3089L60.7781%2016.6416C61.6371%2015.2837%2063.1395%2014.4594%2064.7553%2014.4594H78.3925C79.257%2014.4594%2079.9577%2015.1547%2079.9577%2016.0123C79.9577%2016.2975%2079.8786%2016.5772%2079.7289%2016.8207L74.5127%2025.3089H55.2952Z'%20fill='%23E3E6E9'/%3e%3cpath%20id='&%23230;&%23164;&%23173;&%23229;&%23156;&%23134;&%23229;&%23189;&%23162;'%20d='M66.6689%205.97765C67.5353%205.97765%2068.2377%205.28373%2068.2377%204.42772C68.2377%203.57172%2067.5353%202.87779%2066.6689%202.87779C65.8025%202.87779%2065.1001%203.57172%2065.1001%204.42772C65.1001%205.28373%2065.8025%205.97765%2066.6689%205.97765Z'%20fill='%23F5F6F7'/%3e%3cpath%20id='&%23230;&%23164;&%23173;&%23229;&%23156;&%23134;&%23229;&%23189;&%23162;_2'%20d='M17.3998%206.23917C18.0509%206.23917%2018.5787%205.71771%2018.5787%205.07447C18.5787%204.43122%2018.0509%203.90976%2017.3998%203.90976C16.7487%203.90976%2016.2209%204.43122%2016.2209%205.07447C16.2209%205.71771%2016.7487%206.23917%2017.3998%206.23917Z'%20fill='%23F5F6F7'/%3e%3cpath%20id='&%23230;&%23164;&%23173;&%23229;&%23156;&%23134;&%23229;&%23189;&%23162;_3'%20d='M34.0675%2012.5416C35.8037%2012.5416%2037.2111%2011.151%2037.2111%209.43569C37.2111%207.72035%2035.8037%206.3298%2034.0675%206.3298C32.3313%206.3298%2030.9238%207.72035%2030.9238%209.43569C30.9238%2011.151%2032.3313%2012.5416%2034.0675%2012.5416Z'%20fill='%23F3F5F6'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3crect%20id='Rectangle%204564'%20x='46'%20y='31'%20width='19'%20height='3'%20rx='1'%20fill='%23E3E6E9'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_129_180'%20x1='23.4292'%20y1='25.3089'%20x2='23.4292'%20y2='62.5073'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23E1E4E8'/%3e%3cstop%20offset='1'%20stop-color='%23E9EBED'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint1_linear_129_180'%20x1='53.7263'%20y1='25.3089'%20x2='53.7263'%20y2='62.5073'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23EEF0F3'/%3e%3cstop%20offset='1'%20stop-color='%23F2F3F5'/%3e%3c/linearGradient%3e%3cclipPath%20id='clip0_129_180'%3e%3crect%20width='90'%20height='66'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
806
+ const noSearchData = "data:image/svg+xml,%3csvg%20width='80'%20height='74'%20viewBox='0%200%2080%2074'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='pic_noresult'%3e%3cellipse%20id='Ellipse%201223'%20cx='40.6603'%20cy='64.1947'%20rx='39.3395'%20ry='9.80551'%20fill='url(%23paint0_linear_16_1173)'/%3e%3cellipse%20id='Ellipse%201242'%20cx='40.9678'%20cy='63.2886'%20rx='28.0644'%20ry='4.21971'%20fill='url(%23paint1_linear_16_1173)'/%3e%3cpath%20id='Rectangle%204936'%20d='M8.55176%2015.7417L43.8629%207.24713L57.9982%2063.0166L20.0439%2063.0166L8.55176%2015.7417Z'%20fill='url(%23paint2_linear_16_1173)'/%3e%3cpath%20id='&%23230;&%23164;&%23173;&%23229;&%23156;&%23134;&%23229;&%23189;&%23162;'%20d='M10.3431%2053.0817C11.7796%2053.0817%2012.9441%2051.911%2012.9441%2050.4669C12.9441%2049.0227%2011.7796%2047.8521%2010.3431%2047.8521C8.90668%2047.8521%207.74219%2049.0227%207.74219%2050.4669C7.74219%2051.911%208.90668%2053.0817%2010.3431%2053.0817Z'%20fill='%23F3F5F6'/%3e%3cpath%20id='&%23230;&%23164;&%23173;&%23229;&%23156;&%23134;&%23229;&%23189;&%23162;_2'%20d='M1.30048%2039.3538C2.01871%2039.3538%202.60096%2038.7685%202.60096%2038.0464C2.60096%2037.3244%202.01871%2036.739%201.30048%2036.739C0.582245%2036.739%200%2037.3244%200%2038.0464C0%2038.7685%200.582245%2039.3538%201.30048%2039.3538Z'%20fill='%23F5F6F7'/%3e%3cpath%20id='&%23230;&%23164;&%23173;&%23229;&%23156;&%23134;&%23229;&%23189;&%23162;_3'%20d='M75.1739%2044.1599C76.0717%2044.1599%2076.7995%2043.4282%2076.7995%2042.5256C76.7995%2041.623%2076.0717%2040.8914%2075.1739%2040.8914C74.2761%2040.8914%2073.5483%2041.623%2073.5483%2042.5256C73.5483%2043.4282%2074.2761%2044.1599%2075.1739%2044.1599Z'%20fill='%23F5F6F7'/%3e%3cpath%20id='Rectangle%204937'%20d='M39.3247%2014.2749L72.258%2020.431L62.7342%2062.9638H26.4517L39.3247%2014.2749Z'%20fill='url(%23paint3_linear_16_1173)'/%3e%3cg%20id='Group%20427319056'%3e%3crect%20id='Rectangle%204938'%20width='5.5933'%20height='5.04734'%20transform='matrix(0.864872%20-0.501992%200.498011%200.867171%2050.0679%2048.7026)'%20fill='%23D9DFE3'/%3e%3cpath%20id='Rectangle%204939'%20d='M52.6103%2055.3755C52.0602%2054.4176%2052.3887%2053.1916%2053.344%2052.6371L56.657%2050.7142C57.6123%2050.1597%2058.8327%2050.4867%2059.3828%2051.4445L64.3616%2060.1141C64.9117%2061.072%2064.5832%2062.2979%2063.6279%2062.8524L60.3149%2064.7754C59.3596%2065.3299%2058.1392%2065.0029%2057.5891%2064.045L52.6103%2055.3755Z'%20fill='url(%23paint4_linear_16_1173)'/%3e%3c/g%3e%3cg%20id='Group%20427319055'%3e%3cellipse%20id='Ellipse%201233'%20cx='42.7116'%20cy='31.5694'%20rx='20.1091'%20ry='20.2161'%20fill='%23BDC2C7'/%3e%3cg%20id='Ellipse%201236'%20filter='url(%23filter0_i_16_1173)'%3e%3cellipse%20cx='41.8737'%20cy='30.727'%20rx='19.2712'%20ry='19.3737'%20fill='%23D9DCDF'/%3e%3c/g%3e%3cellipse%20id='Ellipse%201235'%20cx='41.8738'%20cy='30.7268'%20rx='15.3611'%20ry='15.4428'%20fill='%23BDC2C7'/%3e%3cg%20id='Mask%20group'%3e%3cellipse%20id='Ellipse%201234'%20cx='42.4324'%20cy='31.2885'%20rx='14.8025'%20ry='14.8813'%20fill='url(%23paint5_linear_16_1173)'/%3e%3cmask%20id='mask0_16_1173'%20style='mask-type:alpha'%20maskUnits='userSpaceOnUse'%20x='27'%20y='16'%20width='31'%20height='31'%3e%3cellipse%20id='Ellipse%201235_2'%20cx='42.4324'%20cy='31.2885'%20rx='14.8025'%20ry='14.8813'%20fill='url(%23paint6_linear_16_1173)'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_16_1173)'%3e%3cpath%20id='Rectangle%204937_2'%20d='M39.3015%2014.1611L72.258%2020.3383L62.7274%2063.0167H26.4194L39.3015%2014.1611Z'%20fill='url(%23paint7_linear_16_1173)'/%3e%3c/g%3e%3c/g%3e%3cellipse%20id='Ellipse%201236_2'%20opacity='0.5'%20cx='42.4324'%20cy='31.2885'%20rx='14.8025'%20ry='14.8813'%20fill='white'/%3e%3cpath%20id='Subtract'%20d='M33.582%2025.7002C31.9708%2027.411%2030.9814%2029.7199%2030.9814%2032.2617C30.9815%2034.8806%2032.0309%2037.2528%2033.7295%2038.9775C30.7626%2037.3631%2028.7472%2034.2069%2028.7471%2030.5771C28.7471%2028.1592%2029.6431%2025.9527%2031.1172%2024.2705L33.582%2025.7002Z'%20fill='white'/%3e%3c/g%3e%3cellipse%20id='Ellipse%201239'%20cx='51.0895'%20cy='6.95969'%20rx='1.6256'%20ry='1.63425'%20fill='%23DFE2E5'/%3e%3cellipse%20id='Ellipse%201240'%20opacity='0.8'%20cx='56.2916'%20cy='6.95969'%20rx='1.6256'%20ry='1.63425'%20fill='%23DFE2E5'/%3e%3cellipse%20id='Ellipse%201241'%20opacity='0.5'%20cx='61.4938'%20cy='6.95969'%20rx='1.6256'%20ry='1.63425'%20fill='%23DFE2E5'/%3e%3c/g%3e%3cdefs%3e%3cfilter%20id='filter0_i_16_1173'%20x='22.6025'%20y='11.3533'%20width='38.5425'%20height='38.7476'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dx='1'%20dy='1'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='arithmetic'%20k2='-1'%20k3='1'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%201%200%200%200%200%201%200%200%200%200%201%200%200%200%200.7%200'/%3e%3cfeBlend%20mode='normal'%20in2='shape'%20result='effect1_innerShadow_16_1173'/%3e%3c/filter%3e%3clinearGradient%20id='paint0_linear_16_1173'%20x1='40.3989'%20y1='54.3892'%20x2='40.3989'%20y2='73.9398'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23EEF0F3'/%3e%3cstop%20offset='1'%20stop-color='%23F2F3F5'%20stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint1_linear_16_1173'%20x1='52.635'%20y1='61.0164'%20x2='48.8939'%20y2='75.2201'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23E7EAEE'/%3e%3cstop%20offset='1'%20stop-color='%23E5E7ED'%20stop-opacity='0'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint2_linear_16_1173'%20x1='27.055'%20y1='12.7441'%20x2='40.1799'%20y2='67.303'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23E1E4E8'/%3e%3cstop%20offset='1'%20stop-color='%23E9EBED'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint3_linear_16_1173'%20x1='49.3375'%20y1='18.1924'%20x2='49.3549'%20y2='62.9638'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23EEF0F3'/%3e%3cstop%20offset='1'%20stop-color='%23FBFBFB'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint4_linear_16_1173'%20x1='50.9973'%20y1='44.7663'%20x2='62.0589'%20y2='63.763'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23BDC2C7'/%3e%3cstop%20offset='1'%20stop-color='%23D9DCDF'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint5_linear_16_1173'%20x1='42.4324'%20y1='16.4072'%20x2='42.4324'%20y2='46.1698'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23E1E4E8'/%3e%3cstop%20offset='1'%20stop-color='%23E9EBED'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint6_linear_16_1173'%20x1='42.4324'%20y1='16.4072'%20x2='42.4324'%20y2='46.1698'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23E1E4E8'/%3e%3cstop%20offset='1'%20stop-color='%23E9EBED'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint7_linear_16_1173'%20x1='49.3387'%20y1='14.1611'%20x2='49.3387'%20y2='63.0167'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23EEF0F3'/%3e%3cstop%20offset='1'%20stop-color='%23F2F3F5'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e";
807
+ const TransferTree = /* @__PURE__ */ defineComponent({
808
+ name: "TransferTree",
809
+ props: {
810
+ /** useTreeData */
811
+ treeObj: {
812
+ type: Object,
813
+ required: true
814
+ },
815
+ checkedKeys: {
816
+ type: Array,
817
+ required: true
818
+ },
819
+ onCheckedKeysChange: {
820
+ type: Function,
821
+ required: true
822
+ }
823
+ },
824
+ setup(props) {
825
+ const {
826
+ data,
827
+ draggable
828
+ } = toRefs(props.treeObj);
829
+ const keyword = ref("");
830
+ const filteredTreeData = computed(() => {
831
+ if (!keyword.value) {
832
+ return data.value;
833
+ }
834
+ const nodes = traverseFilter((node) => node.title.toLowerCase().includes(keyword.value.toLowerCase()), data.value);
835
+ return nodes;
836
+ });
837
+ const handleCheckedKeys = (keys) => {
838
+ if (!keyword.value) {
839
+ props.onCheckedKeysChange(keys);
840
+ return;
841
+ }
842
+ const nextKeys = keys.concat(props.checkedKeys.filter((key) => !keys.includes(key) && !filteredTreeData.value.some((item) => item.key === key)));
843
+ props.onCheckedKeysChange(nextKeys);
844
+ };
845
+ const slots = {
846
+ title: (node) => {
847
+ return createVNode(TreeItem, {
848
+ "node": node,
849
+ "draggable": draggable.value
850
+ }, null);
851
+ }
852
+ };
853
+ return () => {
854
+ return createVNode("div", {
855
+ "class": "transfer-tree-container"
856
+ }, [createVNode("div", {
857
+ "class": "search-container"
858
+ }, [createVNode(Input, {
859
+ "placeholder": t("sys.component.fieldTransfer.pleaseSearch"),
860
+ "value": keyword.value,
861
+ "onChange": (e) => keyword.value = e.target.value,
862
+ "allowClear": true,
863
+ "prefix": createVNode("i", {
864
+ "class": ["search-icon iconfont", " icon-sousuo"]
865
+ }, null)
866
+ }, null)]), createVNode("div", {
867
+ "class": "tree-wrapper",
868
+ "style": {
869
+ overflow: "auto"
870
+ }
871
+ }, [filteredTreeData.value.length === 0 ? createVNode("div", {
872
+ "class": "empty-container"
873
+ }, [createVNode(Empty, {
874
+ "image": keyword.value ? noSearchData : noData,
875
+ "description": keyword.value ? t("sys.component.fieldTransfer.noSearchData") : t("sys.component.fieldTransfer.noData")
876
+ }, null)]) : createVNode(Tree, {
877
+ "showIcon": true,
878
+ "showLine": {
879
+ showLeafIcon: false
880
+ },
881
+ "blockNode": true,
882
+ "draggable": draggable.value ? {
883
+ icon: false
884
+ } : false,
885
+ "checkedKeys": props.checkedKeys,
886
+ "onCheck": handleCheckedKeys,
887
+ "multiple": true,
888
+ "checkable": true,
889
+ "icon": (node) => createVNode("i", {
890
+ "class": ["iconfont", node.isLeaf ? FieldIconMap[node.fieldType] || "icon-zidingyi" : "icon-file"]
891
+ }, null),
892
+ "onSelect": (_, {
893
+ selectedNodes
894
+ }) => {
895
+ handleCheckedKeys(selectedNodes.map((node) => node.key));
896
+ },
897
+ "treeData": filteredTreeData.value,
898
+ "onDrop": ({
899
+ node,
900
+ dragNode,
901
+ dropToGap,
902
+ dropPosition
903
+ }) => {
904
+ const dropPos = node.pos.split("-");
905
+ const dir = dropPosition - Number(dropPos[dropPos.length - 1]);
906
+ if (dropToGap) {
907
+ props.treeObj.moveTreeNode(dragNode.dataRef, node.dataRef, dir);
908
+ }
909
+ }
910
+ }, slots)])]);
911
+ };
912
+ }
913
+ });
914
+ const AdvancedTransfer = /* @__PURE__ */ defineComponent({
915
+ name: "AdvancedTransfer",
916
+ props: {
917
+ /** 数据源 */
918
+ dataSource: {
919
+ type: Array,
920
+ required: true
921
+ },
922
+ /** useTreeData */
923
+ treeObj: {
924
+ type: Object,
925
+ required: true
926
+ },
927
+ /** 穿梭框标题集合 */
928
+ titles: {
929
+ type: Array,
930
+ default() {
931
+ return [t("sys.component.fieldTransfer.noSelect"), t("sys.component.fieldTransfer.select")];
932
+ }
933
+ }
934
+ },
935
+ setup(props) {
936
+ const {
937
+ dataSource: propDataSource
938
+ } = toRefs(props);
939
+ const {
940
+ remainCount: propRemainCount,
941
+ leafKeys,
942
+ multiple
943
+ } = toRefs(props.treeObj);
944
+ const checkedKeys = ref([]);
945
+ const targetCheckedKeys = ref([]);
946
+ const keyword = ref();
947
+ const hasSearchData = ref(true);
948
+ const remainCount = computed(() => {
949
+ return propRemainCount.value - checkedKeys.value.length;
950
+ });
951
+ const dataSource = computed(() => {
952
+ return propDataSource.value.map((item) => {
953
+ return {
954
+ ...item,
955
+ disabled: item.disabled || remainCount.value === 0 && !checkedKeys.value.includes(item.id) && !leafKeys.value.includes(item.id)
956
+ };
957
+ });
958
+ });
959
+ watch(multiple, (val) => {
960
+ if (val) {
961
+ targetCheckedKeys.value = [];
962
+ }
963
+ }, {
964
+ immediate: true
965
+ });
966
+ const onSelectChange = (sourceSelectedKeys, targetSelectedKeys) => {
967
+ const actualSelectedKeys = sourceSelectedKeys.slice(0, propRemainCount.value);
968
+ checkedKeys.value = actualSelectedKeys;
969
+ targetCheckedKeys.value = targetSelectedKeys;
970
+ };
971
+ const onChange = (_, direction, moveKeys) => {
972
+ if (direction === "right") {
973
+ const nodes = moveKeys.map((key) => dataSource.value.find((item) => item.id === key)).map((item) => ({
974
+ key: item.id,
975
+ title: item.displayLabel,
976
+ type: "field",
977
+ fieldType: item.type,
978
+ isLeaf: true
979
+ }));
980
+ props.treeObj.addTreeNodes(nodes, props.treeObj.getContainerNode());
981
+ } else {
982
+ props.treeObj.removeTreeNodesByKeys(moveKeys);
983
+ }
984
+ };
985
+ const setTargetCheckedKeys = (keys) => {
986
+ targetCheckedKeys.value = keys;
987
+ };
988
+ const leftOption = computed(() => {
989
+ return dataSource.value.filter((item) => !leafKeys.value.includes(item.id));
990
+ });
991
+ const filteredLeftOption = computed(() => {
992
+ if (!keyword.value) {
993
+ return leftOption.value;
994
+ }
995
+ return leftOption.value.filter((item) => item.displayLabel.toLowerCase().includes(keyword.value.toLowerCase()));
996
+ });
997
+ const onSearch = (direction, value) => {
998
+ if (direction === "left") {
999
+ keyword.value = value;
1000
+ hasSearchData.value = filteredLeftOption.value.length > 0;
1001
+ }
1002
+ };
1003
+ const renderItem = ({
1004
+ type,
1005
+ displayLabel
1006
+ }) => {
1007
+ return createVNode("div", {
1008
+ "class": "field-title",
1009
+ "title": displayLabel
1010
+ }, [createVNode("i", {
1011
+ "class": ["field-icon iconfont", FieldIconMap[type] || "icon-zidingyi"]
1012
+ }, null), displayLabel]);
1013
+ };
1014
+ const slots = {
1015
+ children: ({
1016
+ direction
1017
+ }) => {
1018
+ if (direction === "right") {
1019
+ return createVNode(TransferTree, {
1020
+ "treeObj": props.treeObj,
1021
+ "checkedKeys": targetCheckedKeys.value,
1022
+ "onCheckedKeysChange": setTargetCheckedKeys
1023
+ }, null);
1024
+ }
1025
+ if (direction === "left" && (!leftOption.value.length || !filteredLeftOption.value.length)) {
1026
+ return createVNode("div", {
1027
+ "class": "empty-container"
1028
+ }, [createVNode(Empty, {
1029
+ "image": leftOption.value.length ? noSearchData : noData,
1030
+ "description": leftOption.value.length ? t("sys.component.fieldTransfer.noSearchData") : t("sys.component.fieldTransfer.noData")
1031
+ }, null)]);
1032
+ }
1033
+ }
1034
+ };
1035
+ return () => {
1036
+ return createVNode("div", {
1037
+ "class": "advanced-transfer-container"
1038
+ }, [createVNode(Transfer, {
1039
+ "dataSource": dataSource.value,
1040
+ "targetKeys": leafKeys.value,
1041
+ "selectedKeys": checkedKeys.value.concat(targetCheckedKeys.value),
1042
+ "showSearch": true,
1043
+ "filterOption": (text, item) => item.displayLabel.includes(text),
1044
+ "oneWay": multiple.value,
1045
+ "titles": props.titles,
1046
+ "locale": {
1047
+ itemUnit: t("sys.component.fieldTransfer.term"),
1048
+ itemsUnit: t("sys.component.fieldTransfer.term"),
1049
+ searchPlaceholder: t("sys.component.fieldTransfer.pleaseSearch"),
1050
+ selectAll: t("sys.component.fieldTransfer.selectAllData"),
1051
+ selectInvert: t("sys.component.fieldTransfer.invertCurrentPage")
1052
+ },
1053
+ "rowKey": (item) => item.id,
1054
+ "onChange": onChange,
1055
+ "onSearch": onSearch,
1056
+ "onSelectChange": onSelectChange,
1057
+ "render": renderItem
1058
+ }, slots)]);
1059
+ };
1060
+ }
1061
+ });
1062
+ const AdvancedColumnSetting = /* @__PURE__ */ defineComponent({
1063
+ name: "AdvancedColumnSetting",
1064
+ props: {
1065
+ /** 所有字段 */
1066
+ fields: {
1067
+ type: Array,
1068
+ required: true
1069
+ },
1070
+ /** 树形数据 */
1071
+ columns: Array,
1072
+ /** 是否启用多级表头 */
1073
+ useMultiLevelTHead: Boolean,
1074
+ /** 是否刷新数据 */
1075
+ isResetData: Boolean,
1076
+ /** 是否支持拖拽 */
1077
+ draggable: Boolean,
1078
+ /** 穿梭框标题集合 */
1079
+ titles: Array,
1080
+ maxEnableCount: Number,
1081
+ /** 回调方法 */
1082
+ onColumnsChange: Function
1083
+ },
1084
+ setup(props, {
1085
+ expose
1086
+ }) {
1087
+ const treeObj = useTreeData(props.useMultiLevelTHead, props.isResetData, props.draggable, props.maxEnableCount, props.onColumnsChange);
1088
+ watch([() => props.columns, () => props.fields], () => {
1089
+ treeObj.onChangeTree(props.columns ?? [], props.fields);
1090
+ }, {
1091
+ deep: true,
1092
+ immediate: true
1093
+ });
1094
+ const getResult = () => {
1095
+ return {
1096
+ useMultiLevelTHead: treeObj.multiple,
1097
+ headerTree: treeObj.data
1098
+ };
1099
+ };
1100
+ expose({
1101
+ getResult
1102
+ });
1103
+ return () => {
1104
+ return createVNode(AdvancedTransfer, {
1105
+ "dataSource": props.fields,
1106
+ "treeObj": treeObj,
1107
+ "titles": props.titles
1108
+ }, null);
1109
+ };
1110
+ }
1111
+ });
1112
+ const FieldTransfer = /* @__PURE__ */ defineComponent({
1113
+ name: "FieldTransfer",
1114
+ props: {
1115
+ objFields: Object,
1116
+ /** 选中的字段数组 */
1117
+ value: Array,
1118
+ /** 穿梭框标题集合 */
1119
+ titles: Array,
1120
+ maxEnableCount: Number,
1121
+ disabledFieldKey: Array,
1122
+ /** 包含的字段 */
1123
+ containFieldType: Array,
1124
+ /** 包含的字段Key */
1125
+ containFieldKey: Array,
1126
+ /**包含的字段创建类型 */
1127
+ containCreateType: Array,
1128
+ /** 排除的字段Key */
1129
+ excludeFieldKey: Array,
1130
+ /** 排除的字段 */
1131
+ excludeFieldType: Array,
1132
+ /**过滤函数 */
1133
+ filterFieldByFunction: Function,
1134
+ onChange: Function,
1135
+ /** 是否支持拖拽 */
1136
+ draggable: Boolean
1137
+ },
1138
+ setup(props) {
1139
+ const {
1140
+ getFieldCodeChainStr
1141
+ } = useModelField(SCOPEINFO.FIELD_LIST);
1142
+ const result = computed(() => {
1143
+ const fields = [];
1144
+ const _fieldMap = {};
1145
+ const processColumns = [];
1146
+ if (!props.objFields?.modelKey) {
1147
+ return {
1148
+ fields,
1149
+ fieldMap: _fieldMap,
1150
+ columns: processColumns,
1151
+ otherFieldCount: 0
1152
+ };
1153
+ }
1154
+ if (Array.isArray(props.value)) {
1155
+ props.value.forEach((item) => {
1156
+ const key = `${item.fieldCodeChain}!${item.key}`;
1157
+ _fieldMap[key] = item;
1158
+ if (item.fieldCodeChain !== (props.objFields?.fieldCodeChain ?? props.objFields?.modelKey)) {
1159
+ fields.push({
1160
+ id: key,
1161
+ modelKey: item.modelKey,
1162
+ displayLabel: item.name,
1163
+ type: item.type,
1164
+ disabled: item.disabled
1165
+ });
1166
+ }
1167
+ processColumns.push({
1168
+ id: key,
1169
+ title: item.name,
1170
+ tooltip: getFieldCodeChainStr(item.fieldCodeChain, item.name),
1171
+ fieldType: item.type,
1172
+ type: "field"
1173
+ // disableEditable: false,
1174
+ // 非当前对象的字段,需要把checkbox禁用掉,不能选择
1175
+ // disableCheckbox: false
1176
+ });
1177
+ });
1178
+ }
1179
+ props.objFields.fieldList.filter((flist) => {
1180
+ if (typeof props.filterFieldByFunction === "function" && !props.filterFieldByFunction(flist)) {
1181
+ return false;
1182
+ }
1183
+ if (props.containCreateType && flist.createType && !props.containCreateType.includes(flist.createType)) {
1184
+ return false;
1185
+ }
1186
+ if (props.containFieldType || props.containFieldKey) {
1187
+ const isContainFieldType = (props.containFieldType ?? []).includes(flist.type);
1188
+ const isContainFieldKey = (props.containFieldKey ?? []).includes(flist.key);
1189
+ return isContainFieldType || isContainFieldKey;
1190
+ }
1191
+ if (props.excludeFieldType || props.excludeFieldKey) {
1192
+ const isExcludeFieldType = (props.excludeFieldType ?? []).includes(flist.type);
1193
+ const isExcludeFieldKey = (props.excludeFieldKey ?? []).includes(flist.key);
1194
+ return !(isExcludeFieldType || isExcludeFieldKey);
1195
+ }
1196
+ return true;
1197
+ }).forEach((fl) => {
1198
+ const key = `${props.objFields?.fieldCodeChain}!${fl.key}`;
1199
+ if (isEmpty(_fieldMap[key])) {
1200
+ _fieldMap[key] = {
1201
+ ...toRaw(fl),
1202
+ isFieldModel: props.objFields?.isFieldModel,
1203
+ fieldCodeChain: props.objFields?.fieldCodeChain
1204
+ };
1205
+ }
1206
+ const isMainModel = props?.objFields?.fieldCodeChain && JSON.parse(props.objFields?.fieldCodeChain).modelKey && JSON.parse(props.objFields?.fieldCodeChain).modelKey === props.objFields?.modelKey;
1207
+ fields.push({
1208
+ id: key,
1209
+ modelKey: fl.modelKey,
1210
+ displayLabel: fl.name,
1211
+ type: fl.type,
1212
+ disabled: !!(isMainModel && props.disabledFieldKey?.includes(fl.key))
1213
+ });
1214
+ });
1215
+ const otherFieldCount = processColumns.reduce((pre, cur) => {
1216
+ return pre + (cur.disableCheckbox ? 1 : 0);
1217
+ }, 0);
1218
+ return {
1219
+ fields,
1220
+ fieldMap: _fieldMap,
1221
+ columns: processColumns,
1222
+ otherFieldCount
1223
+ };
1224
+ });
1225
+ const handleColumnsChange = (columns) => {
1226
+ if (typeof props?.onChange === "function") {
1227
+ props?.onChange(columns.map((column) => result.value.fieldMap[column.id]));
1228
+ }
1229
+ };
1230
+ return () => {
1231
+ return createVNode(AdvancedColumnSetting, {
1232
+ "key": props.objFields?.fieldCodeChain ?? props.objFields?.modelKey,
1233
+ "fields": result.value.fields,
1234
+ "columns": result.value.columns,
1235
+ "useMultiLevelTHead": false,
1236
+ "titles": props.titles,
1237
+ "maxEnableCount": props.maxEnableCount,
1238
+ "draggable": props.draggable,
1239
+ "onColumnsChange": handleColumnsChange
1240
+ }, null);
1241
+ };
1242
+ }
1243
+ });
1244
+ const _hoisted_1$4 = { class: "field-transfer-container" };
1245
+ const _hoisted_2$3 = {
1246
+ key: 0,
1247
+ class: "h26px leading-26px bg-[#3168EC]/[0.1] pl-10px mb-10px"
1248
+ };
1249
+ const _hoisted_3$2 = { class: "text-[#666] ml-6px" };
1250
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1251
+ __name: "field-transfer-modal",
1252
+ props: {
1253
+ modelKey: {},
1254
+ isShowCascader: { type: Boolean },
1255
+ modalTitle: {},
1256
+ data: { default: () => [] },
1257
+ titles: {},
1258
+ containFieldType: {},
1259
+ containFieldKey: {},
1260
+ disabledFieldKey: {},
1261
+ excludeFieldKey: {},
1262
+ excludeFieldType: {},
1263
+ containCreateType: {},
1264
+ filterFieldByFunction: {},
1265
+ maxEnableCount: {},
1266
+ modalKey: {},
1267
+ width: {},
1268
+ draggable: { type: Boolean, default: true },
1269
+ childParentModelKey: {},
1270
+ destroyCallback: {},
1271
+ saveCallback: {},
1272
+ promptMessage: {}
1273
+ },
1274
+ setup(__props, { expose: __expose }) {
1275
+ const props = __props;
1276
+ const visible = ref(false);
1277
+ const getContainer = () => props.modalKey && document.querySelector(`#${props.modalKey}`) || document.body;
1278
+ const {
1279
+ loadObjInfo,
1280
+ modelFieldMap: modelFieldMap2,
1281
+ getModelFieldInfo,
1282
+ clearSelectInfo,
1283
+ clearObjInfo,
1284
+ selectObj: selectObj2
1285
+ } = useModelField(SCOPEINFO.FIELD_LIST);
1286
+ const objFieldList = ref([]);
1287
+ const isLoad = ref(false);
1288
+ const init = async () => {
1289
+ objFieldList.value = [];
1290
+ clearSelectInfo();
1291
+ clearObjInfo();
1292
+ isLoad.value = false;
1293
+ if (props.modelKey) {
1294
+ isLoad.value = !!await loadObjInfo(props.modelKey, {
1295
+ isShowCascader: props.isShowCascader,
1296
+ childParentModelKey: props.childParentModelKey
1297
+ });
1298
+ }
1299
+ };
1300
+ watch(
1301
+ [() => props.data, () => modelFieldMap2.value, isLoad],
1302
+ () => {
1303
+ if (isEmpty(modelFieldMap2.value)) return;
1304
+ objFieldList.value = props.data?.map((item) => {
1305
+ const obj = pick(item, [
1306
+ "bindFieldKey",
1307
+ "isFieldModel",
1308
+ "modelKey",
1309
+ "fieldCodeChain",
1310
+ "key",
1311
+ "field",
1312
+ "disabled",
1313
+ "_dfValue",
1314
+ "id"
1315
+ ]);
1316
+ const fieldKey = obj.field || obj.key || obj._dfValue || obj.id;
1317
+ const fieldInfo = getModelFieldInfo(obj.modelKey || props.modelKey, fieldKey);
1318
+ if (!fieldInfo) return null;
1319
+ return {
1320
+ ...fieldInfo,
1321
+ bindFieldKey: obj.bindFieldKey,
1322
+ isFieldModel: obj.isFieldModel || false,
1323
+ disabled: obj.disabled || false,
1324
+ fieldCodeChain: obj.fieldCodeChain ?? JSON.stringify({ modelKey: fieldInfo.modelKey || props.modelKey })
1325
+ };
1326
+ }).filter(Boolean) ?? [];
1327
+ },
1328
+ { immediate: true, deep: true }
1329
+ );
1330
+ const setObjFieldList = (list) => {
1331
+ objFieldList.value = list;
1332
+ };
1333
+ const handleClose = () => {
1334
+ visible.value = false;
1335
+ objFieldList.value = [];
1336
+ clearSelectInfo();
1337
+ clearObjInfo();
1338
+ isLoad.value = false;
1339
+ props.destroyCallback?.();
1340
+ };
1341
+ const handleOk = () => {
1342
+ props.saveCallback?.({
1343
+ objFieldList: toRaw(objFieldList.value)
1344
+ });
1345
+ handleClose();
1346
+ };
1347
+ const open = async () => {
1348
+ visible.value = true;
1349
+ await init();
1350
+ };
1351
+ __expose({ open });
1352
+ return (_ctx, _cache) => {
1353
+ const _component_a_spin = resolveComponent("a-spin");
1354
+ const _component_a_modal = resolveComponent("a-modal");
1355
+ return openBlock(), createBlock(_component_a_modal, {
1356
+ visible: visible.value,
1357
+ "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => visible.value = $event),
1358
+ title: __props.modalTitle || unref(t)("sys.component.fieldTransfer.defaultModalTitle"),
1359
+ width: __props.width || 740,
1360
+ maskClosable: false,
1361
+ destroyOnClose: true,
1362
+ centered: "",
1363
+ getContainer,
1364
+ wrapClassName: "excel-field-transfer-modal",
1365
+ onOk: handleOk,
1366
+ onCancel: handleClose
1367
+ }, {
1368
+ default: withCtx(() => [
1369
+ createElementVNode("div", _hoisted_1$4, [
1370
+ createVNode(_component_a_spin, {
1371
+ spinning: !isLoad.value
1372
+ }, {
1373
+ default: withCtx(() => [
1374
+ __props.promptMessage ? (openBlock(), createElementBlock("div", _hoisted_2$3, [
1375
+ _cache[1] || (_cache[1] = createElementVNode("i", { class: "iconfont icon-guanyu text-[#3168EC]" }, null, -1)),
1376
+ createElementVNode("span", _hoisted_3$2, toDisplayString(__props.promptMessage), 1)
1377
+ ])) : createCommentVNode("", true),
1378
+ createVNode(unref(FieldCascader), {
1379
+ class: "mb-8px",
1380
+ isShowCascader: __props.isShowCascader,
1381
+ scope: unref(SCOPEINFO).FIELD_LIST
1382
+ }, null, 8, ["isShowCascader", "scope"]),
1383
+ createVNode(unref(FieldTransfer), {
1384
+ titles: __props.titles,
1385
+ maxEnableCount: __props.maxEnableCount,
1386
+ draggable: __props.draggable,
1387
+ disabledFieldKey: __props.disabledFieldKey,
1388
+ containFieldKey: __props.containFieldKey,
1389
+ containFieldType: __props.containFieldType,
1390
+ excludeFieldKey: __props.excludeFieldKey,
1391
+ containCreateType: __props.containCreateType,
1392
+ excludeFieldType: __props.excludeFieldType,
1393
+ filterFieldByFunction: __props.filterFieldByFunction,
1394
+ objFields: isLoad.value ? unref(selectObj2) : {},
1395
+ value: objFieldList.value,
1396
+ onChange: setObjFieldList
1397
+ }, null, 8, ["titles", "maxEnableCount", "draggable", "disabledFieldKey", "containFieldKey", "containFieldType", "excludeFieldKey", "containCreateType", "excludeFieldType", "filterFieldByFunction", "objFields", "value"])
1398
+ ]),
1399
+ _: 1
1400
+ }, 8, ["spinning"])
1401
+ ])
1402
+ ]),
1403
+ _: 1
1404
+ }, 8, ["visible", "title", "width"]);
1405
+ };
1406
+ }
1407
+ });
1408
+ const FieldTransferModal = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-46961d2f"]]);
1409
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1410
+ ...{ inheritAttrs: false },
1411
+ __name: "modal-wrapper",
1412
+ setup(__props, { expose: __expose }) {
1413
+ const modalRef = ref();
1414
+ const open = () => {
1415
+ modalRef.value?.open();
1416
+ };
1417
+ __expose({ open });
1418
+ return (_ctx, _cache) => {
1419
+ return openBlock(), createBlock(FieldTransferModal, mergeProps({
1420
+ ref_key: "modalRef",
1421
+ ref: modalRef
1422
+ }, _ctx.$attrs), null, 16);
1423
+ };
1424
+ }
1425
+ });
1426
+ function useFieldTransfer() {
1427
+ let app = null;
1428
+ let instance = null;
1429
+ const modalKey = ref("");
1430
+ function open(params) {
1431
+ let props;
1432
+ let target = document.body;
1433
+ if (has(params, "target") || has(params, "props")) {
1434
+ const options = params;
1435
+ props = options.props || {};
1436
+ target = options.target || document.body;
1437
+ } else {
1438
+ props = params;
1439
+ }
1440
+ modalKey.value = `field-transfer-modal-${Math.random().toString(16).substring(8)}`;
1441
+ const propsData = {
1442
+ width: 740,
1443
+ modalKey: unref(modalKey),
1444
+ destroyCallback: close,
1445
+ ...props
1446
+ };
1447
+ if (!app) {
1448
+ const container = document.createElement("div");
1449
+ container.id = unref(modalKey);
1450
+ const t2 = unref(target);
1451
+ t2?.appendChild(container);
1452
+ app = createApp(_sfc_main$4, propsData);
1453
+ registerDialogComp(app);
1454
+ app.config.globalProperties.$t = window.$t ?? ((key) => key);
1455
+ instance = app.mount(container);
1456
+ }
1457
+ instance.open();
1458
+ }
1459
+ function close() {
1460
+ document.querySelector(`#${unref(modalKey)}`).remove();
1461
+ if (app) {
1462
+ app.unmount();
1463
+ app = null;
1464
+ instance = null;
1465
+ }
1466
+ }
1467
+ return {
1468
+ open,
1469
+ close
1470
+ };
1471
+ }
1472
+ const _hoisted_1$3 = { class: "display-fields-editor" };
1473
+ const _hoisted_2$2 = { class: "editor-tip" };
1474
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1475
+ __name: "display-fields-editor",
1476
+ props: {
1477
+ displayFields: { default: () => [] },
1478
+ fieldMeta: {},
1479
+ disabled: { type: Boolean }
1480
+ },
1481
+ emits: ["update:displayFields"],
1482
+ setup(__props, { emit: __emit }) {
1483
+ const props = __props;
1484
+ const emit = __emit;
1485
+ const { open } = useFieldTransfer();
1486
+ const { modelMetaMap } = useModelFields();
1487
+ const selectorInfo = computed(() => {
1488
+ const options = [];
1489
+ const values = [];
1490
+ props.displayFields.forEach(({ _dfLabel: label, _dfValue: value }) => {
1491
+ options.push({ label, value });
1492
+ values.push(value);
1493
+ });
1494
+ return { options, values };
1495
+ });
1496
+ const unremovableKeys = computed(() => {
1497
+ return props.displayFields.filter((o) => o._dfUnremovable).map((o) => o._dfValue);
1498
+ });
1499
+ const handleOpenModal = () => {
1500
+ open({
1501
+ modelKey: props.fieldMeta.refModelKey,
1502
+ modalTitle: $t("sys.selectDisplayFields"),
1503
+ isShowCascader: true,
1504
+ draggable: true,
1505
+ data: props.displayFields,
1506
+ maxEnableCount: 99999,
1507
+ excludeFieldType: [],
1508
+ excludeFieldKey: [],
1509
+ filterFieldByFunction: () => true,
1510
+ saveCallback: ({ objFieldList }) => {
1511
+ const fields = (objFieldList || []).map((f) => ({
1512
+ ...f,
1513
+ _dfLabel: f.name,
1514
+ _dfValue: f.id
1515
+ }));
1516
+ emit("update:displayFields", fields);
1517
+ }
1518
+ });
1519
+ };
1520
+ const handleSelectChange = (remainingKeys) => {
1521
+ const options = props.displayFields.filter((o) => {
1522
+ return o._dfUnremovable ? true : remainingKeys.includes(o._dfValue);
1523
+ });
1524
+ emit("update:displayFields", options);
1525
+ };
1526
+ const handleTagClose = (val) => {
1527
+ const options = props.displayFields.filter((o) => o._dfValue !== val);
1528
+ emit("update:displayFields", options);
1529
+ };
1530
+ onMounted(() => {
1531
+ const { displayFields, fieldMeta } = props;
1532
+ if (displayFields?.length) return;
1533
+ const { fieldType, refModelKey } = fieldMeta;
1534
+ if (!refModelKey) return;
1535
+ const fields = modelMetaMap.value[refModelKey]?.fields || [];
1536
+ const mapKey = {
1537
+ [FIELD_TYPE.DEVICE]: "device",
1538
+ [FIELD_TYPE.MATERIAL_NO]: "materialNo"
1539
+ }[fieldType];
1540
+ const defaultKeys = mapKey ? DEFAULT_DISPLAY_FIELDS_MAP[mapKey] : void 0;
1541
+ if (!defaultKeys?.length) return;
1542
+ const options = fields.filter((f) => defaultKeys.includes(f.key)).map((f) => ({
1543
+ ...f,
1544
+ _dfLabel: f.name,
1545
+ _dfValue: f.id
1546
+ }));
1547
+ emit("update:displayFields", options);
1548
+ });
1549
+ return (_ctx, _cache) => {
1550
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [
1551
+ createVNode(FormItem, {
1552
+ label: `${_ctx.$t("sys.displayFields")}`,
1553
+ inline: false
1554
+ }, {
1555
+ default: withCtx(() => [
1556
+ createVNode(unref(Select), {
1557
+ allowClear: "",
1558
+ size: "small",
1559
+ mode: "multiple",
1560
+ "max-tag-count": "responsive",
1561
+ open: false,
1562
+ showSearch: false,
1563
+ options: selectorInfo.value.options,
1564
+ value: selectorInfo.value.values,
1565
+ placeholder: _ctx.$t("sys.chooseText"),
1566
+ disabled: __props.disabled,
1567
+ onFocus: handleOpenModal,
1568
+ onChange: handleSelectChange
1569
+ }, {
1570
+ tagRender: withCtx(({ label, value }) => [
1571
+ createVNode(unref(Tag), {
1572
+ disabled: __props.disabled,
1573
+ closable: !unremovableKeys.value.includes(value),
1574
+ onClose: ($event) => handleTagClose(value)
1575
+ }, {
1576
+ default: withCtx(() => [
1577
+ createTextVNode(toDisplayString(label), 1)
1578
+ ]),
1579
+ _: 2
1580
+ }, 1032, ["disabled", "closable", "onClose"])
1581
+ ]),
1582
+ _: 1
1583
+ }, 8, ["options", "value", "placeholder", "disabled"])
1584
+ ]),
1585
+ _: 1
1586
+ }, 8, ["label"]),
1587
+ createElementVNode("div", _hoisted_2$2, toDisplayString(_ctx.$t("sys.displayFieldsTip")), 1)
1588
+ ]);
1589
+ };
1590
+ }
1591
+ });
1592
+ const DisplayFieldsEditor = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-7f7e0eed"]]);
1593
+ const DEFAULT_SEARCHABLE_FIELDS = [
1594
+ FIELD_TYPE.PRODUCT,
1595
+ FIELD_TYPE.SCRAP_MATERIAL,
1596
+ FIELD_TYPE.DEVICE,
1597
+ FIELD_TYPE.MATERIAL_NO,
1598
+ FIELD_TYPE.RELATED_LOT_NO,
1599
+ FIELD_TYPE.SCRAP_MATERIAL_NO,
1600
+ FIELD_TYPE.MATERIAL_LOT
1601
+ ];
1602
+ const SEARCHABLE_FIELDS = [
1603
+ ...DEFAULT_SEARCHABLE_FIELDS,
1604
+ FIELD_TYPE.REF,
1605
+ FIELD_TYPE.MFG_ORDER,
1606
+ FIELD_TYPE.ROUTING_OPERATION,
1607
+ FIELD_TYPE.NOT_GOOD_GROUP,
1608
+ FIELD_TYPE.NOT_GOOD_REASON,
1609
+ FIELD_TYPE.SCRAP_GROUP,
1610
+ FIELD_TYPE.SCRAP_REASON,
1611
+ FIELD_TYPE.SHOPFLOOR,
1612
+ FIELD_TYPE.MODEL_RELATION,
1613
+ FIELD_TYPE.WAREHOUSE,
1614
+ FIELD_TYPE.STERILIZE_LOT,
1615
+ FIELD_TYPE.STERILIZE_BATCH
1616
+ ];
1617
+ const getRealFieldType = (fieldMeta) => {
1618
+ const { fieldType, bizType } = fieldMeta;
1619
+ if (bizType === FIELD_TYPE_TRACE.STERILIZE_LOT) {
1620
+ return FIELD_TYPE.STERILIZE_LOT;
1621
+ }
1622
+ return fieldType;
1623
+ };
1624
+ const getIsSearchableField = (fieldMeta) => {
1625
+ const type = getRealFieldType(fieldMeta);
1626
+ return SEARCHABLE_FIELDS.includes(type);
1627
+ };
1628
+ const getSearchableFieldIsDefaultOpen = (fieldMeta) => {
1629
+ const type = getRealFieldType(fieldMeta);
1630
+ return DEFAULT_SEARCHABLE_FIELDS.includes(type);
1631
+ };
1632
+ const _hoisted_1$2 = { class: "quick-search-editor" };
1633
+ const _hoisted_2$1 = { class: "flex justify-end" };
1634
+ const _hoisted_3$1 = {
1635
+ key: 1,
1636
+ class: "editor-tip"
1637
+ };
1638
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1639
+ __name: "quick-search-editor",
1640
+ props: {
1641
+ fieldMeta: {},
1642
+ searchable: { type: Boolean },
1643
+ searchField: {},
1644
+ disabled: { type: Boolean }
1645
+ },
1646
+ emits: ["update:searchable", "update:searchField"],
1647
+ setup(__props, { emit: __emit }) {
1648
+ const { modelMetaMap } = useModelFields();
1649
+ const filterFields = [
1650
+ FIELD_TYPE.LONG_TEXT,
1651
+ FIELD_TYPE.TEXT,
1652
+ FIELD_TYPE.DECIMAL,
1653
+ FIELD_TYPE.DOUBLE,
1654
+ FIELD_TYPE.LONG,
1655
+ FIELD_TYPE.INTEGER
1656
+ ];
1657
+ const filterTypes = [CreateType.USER_DEFINED, CreateType.BUILTIN];
1658
+ const props = __props;
1659
+ const emit = __emit;
1660
+ const currentModelMeta = computed(() => {
1661
+ return modelMetaMap.value[props.fieldMeta.refModelKey];
1662
+ });
1663
+ const fieldOptions = computed(() => {
1664
+ return currentModelMeta.value?.fields?.filter((i) => {
1665
+ return checkKeyByList(i.type, filterFields) && checkKeyByList(i.createType, filterTypes);
1666
+ }).map((i) => {
1667
+ const exp = SEARCH_TYPE[i.type]?.noRangDefaultExp;
1668
+ return {
1669
+ name: i.name,
1670
+ key: exp ? i.key + "." + exp : i.key
1671
+ };
1672
+ });
1673
+ });
1674
+ const checkKeyByList = (key, filters) => {
1675
+ return !filters || filters.indexOf(key) > -1;
1676
+ };
1677
+ const _searchable = computed({
1678
+ get() {
1679
+ return isBoolean(props.searchable) ? props.searchable : getSearchableFieldIsDefaultOpen(props.fieldMeta);
1680
+ },
1681
+ set(v) {
1682
+ emit("update:searchable", v);
1683
+ }
1684
+ });
1685
+ const _searchField = computed({
1686
+ get() {
1687
+ return props.searchField || [];
1688
+ },
1689
+ set(v) {
1690
+ emit("update:searchField", v);
1691
+ }
1692
+ });
1693
+ return (_ctx, _cache) => {
1694
+ const _component_a_switch = resolveComponent("a-switch");
1695
+ const _component_a_select = resolveComponent("a-select");
1696
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
1697
+ createVNode(FormItem, {
1698
+ label: _ctx.$t("sys.search")
1699
+ }, {
1700
+ default: withCtx(() => [
1701
+ createElementVNode("div", _hoisted_2$1, [
1702
+ createVNode(_component_a_switch, {
1703
+ size: "small",
1704
+ disabled: __props.disabled,
1705
+ checked: _searchable.value,
1706
+ "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => _searchable.value = $event)
1707
+ }, null, 8, ["disabled", "checked"])
1708
+ ])
1709
+ ]),
1710
+ _: 1
1711
+ }, 8, ["label"]),
1712
+ _searchable.value ? (openBlock(), createBlock(FormItem, {
1713
+ key: 0,
1714
+ inline: false,
1715
+ label: _ctx.$t("sys.pageDesigner.quickSearchFields")
1716
+ }, {
1717
+ default: withCtx(() => [
1718
+ createVNode(_component_a_select, {
1719
+ value: _searchField.value,
1720
+ "onUpdate:value": _cache[1] || (_cache[1] = ($event) => _searchField.value = $event),
1721
+ allowClear: "",
1722
+ mode: "multiple",
1723
+ maxTagCount: 5,
1724
+ maxTagTextLength: 6,
1725
+ fieldNames: { label: "name", value: "key" },
1726
+ optionFilterProp: "name",
1727
+ options: fieldOptions.value,
1728
+ size: "small",
1729
+ disabled: __props.disabled,
1730
+ placeholder: _ctx.$t("sys.inputText")
1731
+ }, null, 8, ["value", "options", "disabled", "placeholder"])
1732
+ ]),
1733
+ _: 1
1734
+ }, 8, ["label"])) : createCommentVNode("", true),
1735
+ _searchable.value ? (openBlock(), createElementBlock("div", _hoisted_3$1, toDisplayString(_ctx.$t("sys.quickSearchFieldsTip")), 1)) : createCommentVNode("", true)
1736
+ ]);
1737
+ };
1738
+ }
1739
+ });
1740
+ const QuickSearchEditor = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-c6f3fe45"]]);
1741
+ const _hoisted_1$1 = { class: "px-16px py-16px" };
1742
+ const _hoisted_2 = { class: "px24px mt20px" };
1743
+ const _hoisted_3 = { class: "text-[#8B8B8B]" };
1744
+ const _hoisted_4 = { class: "atuofill-field-icon" };
1745
+ const _hoisted_5 = { class: "form-table-label" };
1746
+ const _hoisted_6 = ["onClick"];
1747
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1748
+ __name: "autofill-rules-modal",
1749
+ props: {
1750
+ fieldMeta: {},
1751
+ rules: {}
1752
+ },
1753
+ emits: ["ok", "register"],
1754
+ setup(__props, { emit: __emit }) {
1755
+ const $t2 = window.$t;
1756
+ const { modelMetaMap, subTableFieldModel, getFieldMeta } = useModelFields();
1757
+ const props = __props;
1758
+ const {
1759
+ refModelKey,
1760
+ model: modelKey,
1761
+ fieldType,
1762
+ field: currentFieldKey
1763
+ } = toRefs(props.fieldMeta);
1764
+ const isSubTableTrigger = computed(
1765
+ () => !!(props.fieldMeta.subFieldKey || props.fieldMeta.subModelKey)
1766
+ );
1767
+ const refFieldName = computed(() => {
1768
+ return getFieldMeta(props.fieldMeta).name;
1769
+ });
1770
+ const autofillForm = ref();
1771
+ const formState = reactive({
1772
+ rules: [
1773
+ {
1774
+ fromField: void 0,
1775
+ toField: void 0
1776
+ }
1777
+ ]
1778
+ });
1779
+ const bindFiledList = ref([]);
1780
+ const allFieldInFormWithout = ref([]);
1781
+ const formModelName = ref("");
1782
+ ref($t2("sys.pageDesigner.addRule"));
1783
+ const excludeFieldType = [
1784
+ FIELD_TYPE.IMAGE,
1785
+ FIELD_TYPE.ATTACHMENT,
1786
+ FIELD_TYPE.SERIAL,
1787
+ FIELD_TYPE.MASTERSLAVE,
1788
+ FIELD_TYPE.ENUM,
1789
+ FIELD_TYPE.ENUM_MULTI,
1790
+ FIELD_TYPE.REF,
1791
+ FIELD_TYPE.REF_MULTI,
1792
+ FIELD_TYPE.RDO_REF,
1793
+ FIELD_TYPE.EXPRESSION,
1794
+ FIELD_TYPE.EXPRESSION_CONDITION,
1795
+ FIELD_TYPE.AGG,
1796
+ FIELD_TYPE.ESOP,
1797
+ FIELD_TYPE.TRANSACTION,
1798
+ FIELD_TYPE.LABEL_TEMPLATE,
1799
+ FIELD_TYPE.LABEL_TEMPLATE_REF,
1800
+ FIELD_TYPE.DOCUMENT_TEMPLATE,
1801
+ FIELD_TYPE.SERIALRULE,
1802
+ FIELD_TYPE.PRINTER,
1803
+ FIELD_TYPE.MESSAGE_TMPL,
1804
+ FIELD_TYPE.RANGE_USER,
1805
+ FIELD_TYPE.SIGNATURE,
1806
+ FIELD_TYPE.ONLINE_FORM_TEMPLATE,
1807
+ FIELD_TYPE.E_DHR_TEMPLATE,
1808
+ FIELD_TYPE.DATA_TABLE_FORMULA,
1809
+ FIELD_TYPE.READONLYCMP,
1810
+ FIELD_TYPE.BOOLEAN
1811
+ ];
1812
+ onMounted(async () => {
1813
+ const modelDetail = await api.apaas.modelMeta.getDetail({
1814
+ modelKey: modelKey.value
1815
+ });
1816
+ allFieldInFormWithout.value = modelDetail?.fieldMetaList?.filter((d) => d.createType !== "SYSTEM") || [];
1817
+ formModelName.value = modelDetail?.name || "";
1818
+ props.rules && onDataReceive({ rules: props.rules });
1819
+ });
1820
+ const fromFieldTreeData = computed(() => {
1821
+ const children = bindFiledList.value.filter((f) => f.key !== "id_").map((f) => ({
1822
+ ...f,
1823
+ value: f.key,
1824
+ label: f.name,
1825
+ type: f.type
1826
+ }));
1827
+ return [
1828
+ {
1829
+ value: "id_",
1830
+ label: refFieldName.value,
1831
+ type: fieldType.value,
1832
+ selectable: true,
1833
+ children
1834
+ }
1835
+ ];
1836
+ });
1837
+ const currentModelName = computed(() => {
1838
+ return modelMetaMap.value[modelKey.value]?.meta?.name || formModelName.value || "";
1839
+ });
1840
+ const filterCompatibleFields = (fromField, fieldList) => {
1841
+ if (!fromField) return [];
1842
+ if (fromField === "id_") {
1843
+ const sourceType = fieldType.value;
1844
+ const fieldConfig2 = transformMappingField4Auto(sourceType) ?? transformMappingField4Auto(FIELD_TYPE.REF);
1845
+ let list2 = fieldList.filter((v) => fieldConfig2?.filterArr?.includes(v.type));
1846
+ if (fieldConfig2?.equal !== void 0 && fieldConfig2?.equal) {
1847
+ list2 = list2.filter((i) => i.bindInfo === refModelKey.value);
1848
+ }
1849
+ return list2;
1850
+ }
1851
+ const record = bindFiledList.value.find((i) => i.key === fromField);
1852
+ if (record?.modelKey === "em_product" && record?.key === "uom_id_") {
1853
+ return fieldList.filter(
1854
+ (e) => [FIELD_TYPE.TEXT, FIELD_TYPE.LONG_TEXT, FIELD_TYPE.REF].includes(e.type)
1855
+ );
1856
+ }
1857
+ const fieldConfig = transformMappingField4Auto(record?.type);
1858
+ let list = fieldList.filter((v) => fieldConfig?.filterArr?.includes(v.type));
1859
+ if (fieldConfig?.equal !== void 0 && fieldConfig?.equal) {
1860
+ list = list.filter((i) => i.bindInfo === record?.bindInfo);
1861
+ }
1862
+ if ([FIELD_TYPE.TEXT, FIELD_TYPE.LONG_TEXT].includes(record?.type)) {
1863
+ list = list.filter((i) => !["ref_model_key_", "ref_field_key_"].includes(i.key));
1864
+ }
1865
+ return list;
1866
+ };
1867
+ const buildSubTableFieldValue = (fromSubTableField, fieldKey) => {
1868
+ return `${fromSubTableField}::${fieldKey}`;
1869
+ };
1870
+ const parseSubTableFieldValue = (value) => {
1871
+ const [fromSubTableField, fieldKey] = value.split("::");
1872
+ return { fromSubTableField, fieldKey };
1873
+ };
1874
+ const stripSubTableRuleFields = (rules) => {
1875
+ if (!isSubTableTrigger.value) return rules;
1876
+ return rules.map(({ fromSubTableField: _omit, ...rest }) => rest);
1877
+ };
1878
+ const selrender = (item) => {
1879
+ return () => h("span", { class: "atuofill-field-icon" }, [
1880
+ h("i", { class: ["iconfont", FieldIconMap[item.type] || "text"] }),
1881
+ item.name
1882
+ ]);
1883
+ };
1884
+ const filterOption = (input, option) => {
1885
+ return option.name?.includes(input?.trim());
1886
+ };
1887
+ const getTargetFieldOptions = (fromField) => {
1888
+ if (!fromField) return [];
1889
+ let fields = filterCompatibleFields(fromField, allFieldInFormWithout.value);
1890
+ if (fromField === "id_" && currentFieldKey.value) {
1891
+ fields = fields.filter((f) => f.key !== currentFieldKey.value);
1892
+ }
1893
+ return fields.map((f) => ({
1894
+ ...f,
1895
+ value: f.key,
1896
+ label: selrender(f)
1897
+ }));
1898
+ };
1899
+ const getTargetFieldValue = (element) => {
1900
+ if (!element.toField) return void 0;
1901
+ if (element.fromSubTableField) {
1902
+ return buildSubTableFieldValue(element.fromSubTableField, element.toField);
1903
+ }
1904
+ return element.toField;
1905
+ };
1906
+ const getTargetFieldTreeData = (fromField) => {
1907
+ if (!fromField) return [];
1908
+ let mainFields = filterCompatibleFields(fromField, allFieldInFormWithout.value);
1909
+ if (fromField === "id_" && currentFieldKey.value) {
1910
+ mainFields = mainFields.filter((f) => f.key !== currentFieldKey.value);
1911
+ }
1912
+ const treeData = [];
1913
+ if (mainFields.length) {
1914
+ treeData.push({
1915
+ value: `__main__${modelKey.value}`,
1916
+ label: currentModelName.value,
1917
+ selectable: false,
1918
+ children: mainFields.map((f) => ({
1919
+ ...f,
1920
+ value: f.key,
1921
+ label: f.name,
1922
+ type: f.type
1923
+ }))
1924
+ });
1925
+ }
1926
+ subTableFieldModel.value.forEach(({ field, model }) => {
1927
+ if (model.subModelType === SubTableType.STOCKTAKE || model.subModelType === SubTableType.ALLOCATE) {
1928
+ return;
1929
+ }
1930
+ const subModelFields = modelMetaMap.value[field.bindInfo]?.fields?.filter((d) => d.createType !== "SYSTEM") || [];
1931
+ const compatibleFields = filterCompatibleFields(fromField, subModelFields);
1932
+ if (!compatibleFields.length) return;
1933
+ treeData.push({
1934
+ value: `__sub__${field.key}`,
1935
+ label: `${model.name}(${getSubTableTypeLabel(model.subModelType)})`,
1936
+ selectable: false,
1937
+ children: compatibleFields.map((f) => ({
1938
+ ...f,
1939
+ value: buildSubTableFieldValue(field.key, f.key),
1940
+ label: f.name,
1941
+ type: f.type,
1942
+ fromSubTableField: field.key
1943
+ }))
1944
+ });
1945
+ });
1946
+ return treeData;
1947
+ };
1948
+ const getSubTableTypeLabel = (subModelType) => {
1949
+ const subTypeMap = {
1950
+ INSPECTION: "CHECK",
1951
+ MATERIAL_CONSUME: "MATERIAL_CONSUMPTION",
1952
+ PRODUCTION_CONTAINER_LIST_4_STERILIZATION: "STERILIZE_BATCH"
1953
+ };
1954
+ const subTableType = subTypeMap[subModelType || ""] || subModelType || "DEFAULT";
1955
+ return $t2(`sys.onlineForm.subTableType.${subTableType}`);
1956
+ };
1957
+ const onDataReceive = async ({ rules }) => {
1958
+ formState.rules = stripSubTableRuleFields(cloneDeep(rules));
1959
+ if (formState.rules?.length == 0) {
1960
+ formState.rules.push({
1961
+ fromField: void 0,
1962
+ toField: void 0
1963
+ });
1964
+ }
1965
+ const res = await api.apaas.modelMeta.getDetail({
1966
+ modelKey: refModelKey.value
1967
+ });
1968
+ bindFiledList.value = res?.fieldMetaList?.filter((d) => d.createType !== "SYSTEM")?.filter(
1969
+ (i) => i.modelKey === "em_product" && i.key === "uom_id_" || !excludeFieldType.includes(i.type)
1970
+ ) || [];
1971
+ };
1972
+ const removeRule = (index) => {
1973
+ formState.rules.splice(index, 1);
1974
+ };
1975
+ const addRule = () => {
1976
+ formState.rules.push({
1977
+ fromField: void 0,
1978
+ toField: void 0
1979
+ });
1980
+ };
1981
+ useModal(async () => {
1982
+ if (formState.rules.length > 1 || formState.rules[0].fromField || formState.rules[0].toField) {
1983
+ await autofillForm.value.validate();
1984
+ return {
1985
+ ok: true,
1986
+ data: stripSubTableRuleFields(formState.rules)
1987
+ };
1988
+ }
1989
+ });
1990
+ const handleFromChange = (element) => {
1991
+ element.toField = null;
1992
+ element.toFieldType = void 0;
1993
+ element.fromSubTableField = void 0;
1994
+ };
1995
+ const handleFlatTargetChange = (val, element) => {
1996
+ if (!val) {
1997
+ element.toField = void 0;
1998
+ element.toFieldType = void 0;
1999
+ element.fromSubTableField = void 0;
2000
+ return;
2001
+ }
2002
+ const record = allFieldInFormWithout.value.find((f) => f.key === val);
2003
+ element.toField = val;
2004
+ element.toFieldType = record?.type;
2005
+ element.fromSubTableField = void 0;
2006
+ };
2007
+ const handleTargetChange = (val, extra, element) => {
2008
+ if (!val) {
2009
+ element.toField = void 0;
2010
+ element.toFieldType = void 0;
2011
+ element.fromSubTableField = void 0;
2012
+ return;
2013
+ }
2014
+ if (String(val).includes("::")) {
2015
+ const { fromSubTableField, fieldKey } = parseSubTableFieldValue(String(val));
2016
+ const node2 = extra?.triggerNode?.props || extra?.triggerNode;
2017
+ const nodeProps2 = node2?.dataRef || node2;
2018
+ element.toField = fieldKey;
2019
+ element.fromSubTableField = fromSubTableField;
2020
+ element.toFieldType = nodeProps2?.type;
2021
+ return;
2022
+ }
2023
+ const node = extra?.triggerNode?.props || extra?.triggerNode;
2024
+ const nodeProps = node?.dataRef || node;
2025
+ element.toField = val;
2026
+ element.fromSubTableField = void 0;
2027
+ element.toFieldType = nodeProps?.type;
2028
+ };
2029
+ return (_ctx, _cache) => {
2030
+ const _component_a_button = resolveComponent("a-button");
2031
+ const _component_a_col = resolveComponent("a-col");
2032
+ const _component_a_row = resolveComponent("a-row");
2033
+ const _component_a_tree_select = resolveComponent("a-tree-select");
2034
+ const _component_a_form_item = resolveComponent("a-form-item");
2035
+ const _component_a_select = resolveComponent("a-select");
2036
+ const _component_a_form = resolveComponent("a-form");
2037
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
2038
+ createVNode(_component_a_button, {
2039
+ type: "link",
2040
+ onClick: addRule,
2041
+ class: "mv10px pl24px mt4px"
2042
+ }, {
2043
+ default: withCtx(() => [
2044
+ _cache[0] || (_cache[0] = createElementVNode("i", {
2045
+ class: "iconfont icon-chuangjian mr8px",
2046
+ style: { "vertical-align": "-1px" }
2047
+ }, null, -1)),
2048
+ createTextVNode(" " + toDisplayString(unref($t2)("sys.pageDesigner.fillRules")), 1)
2049
+ ]),
2050
+ _: 1
2051
+ }),
2052
+ createElementVNode("div", _hoisted_2, [
2053
+ createVNode(_component_a_row, {
2054
+ gutter: 4,
2055
+ style: { "margin-bottom": "4px", "padding": "0 10px" },
2056
+ class: "text-[#1A1D23]"
2057
+ }, {
2058
+ default: withCtx(() => [
2059
+ createVNode(_component_a_col, { span: 9 }, {
2060
+ default: withCtx(() => [
2061
+ createTextVNode(toDisplayString(unref($t2)("sys.pageDesigner.valueSource")), 1)
2062
+ ]),
2063
+ _: 1
2064
+ }),
2065
+ createVNode(_component_a_col, { span: 4 }),
2066
+ createVNode(_component_a_col, { span: 11 }, {
2067
+ default: withCtx(() => [
2068
+ createTextVNode(toDisplayString(unref($t2)("sys.pageDesigner.targetField")) + " ", 1),
2069
+ createElementVNode("span", _hoisted_3, " ( " + toDisplayString(unref($t2)("sys.pageDesigner.onlineFormFieldInForm")) + ") ", 1)
2070
+ ]),
2071
+ _: 1
2072
+ })
2073
+ ]),
2074
+ _: 1
2075
+ }),
2076
+ createVNode(_component_a_form, {
2077
+ ref_key: "autofillForm",
2078
+ ref: autofillForm,
2079
+ model: formState,
2080
+ "wrapper-col": { span: 24 },
2081
+ autocomplete: "off",
2082
+ "hide-required-mark": "",
2083
+ colon: false
2084
+ }, {
2085
+ default: withCtx(() => [
2086
+ createVNode(unref(draggableComponent), {
2087
+ list: formState.rules,
2088
+ handle: ".cursor-move",
2089
+ "drag-class": "drawing-drag",
2090
+ "item-key": "id"
2091
+ }, {
2092
+ item: withCtx(({ element, index }) => [
2093
+ (openBlock(), createBlock(_component_a_row, {
2094
+ gutter: 4,
2095
+ key: index,
2096
+ class: "rule-item"
2097
+ }, {
2098
+ default: withCtx(() => [
2099
+ createVNode(_component_a_col, { span: 9 }, {
2100
+ default: withCtx(() => [
2101
+ createVNode(_component_a_form_item, {
2102
+ label: "",
2103
+ name: ["rules", index, "fromField"],
2104
+ rules: [
2105
+ {
2106
+ required: true,
2107
+ message: unref($t2)("sys.chooseTextTip", {
2108
+ name: unref($t2)("sys.field")
2109
+ })
2110
+ }
2111
+ ]
2112
+ }, {
2113
+ default: withCtx(() => [
2114
+ createVNode(_component_a_tree_select, {
2115
+ value: element.fromField,
2116
+ "onUpdate:value": ($event) => element.fromField = $event,
2117
+ placeholder: unref($t2)("sys.chooseText") + unref($t2)("sys.field"),
2118
+ "show-search": "",
2119
+ "tree-default-expand-all": "",
2120
+ "allow-clear": "",
2121
+ "tree-node-filter-prop": "label",
2122
+ "dropdown-class-name": "gct-custom-select-dropdown autofill-from-field-tree",
2123
+ "tree-data": fromFieldTreeData.value,
2124
+ onChange: ($event) => handleFromChange(element)
2125
+ }, {
2126
+ title: withCtx((data) => [
2127
+ createElementVNode("span", _hoisted_4, [
2128
+ data.type ? (openBlock(), createElementBlock("i", {
2129
+ key: 0,
2130
+ class: normalizeClass(["iconfont", unref(FieldIconMap)[data.type] || "text"])
2131
+ }, null, 2)) : createCommentVNode("", true),
2132
+ createTextVNode(" " + toDisplayString(data.label), 1)
2133
+ ])
2134
+ ]),
2135
+ _: 1
2136
+ }, 8, ["value", "onUpdate:value", "placeholder", "tree-data", "onChange"])
2137
+ ]),
2138
+ _: 2
2139
+ }, 1032, ["name", "rules"])
2140
+ ]),
2141
+ _: 2
2142
+ }, 1024),
2143
+ createVNode(_component_a_col, { span: 4 }, {
2144
+ default: withCtx(() => [
2145
+ createElementVNode("span", _hoisted_5, toDisplayString(unref($t2)("sys.pageDesigner.valueFillTip")), 1)
2146
+ ]),
2147
+ _: 1
2148
+ }),
2149
+ createVNode(_component_a_col, { span: 10 }, {
2150
+ default: withCtx(() => [
2151
+ createVNode(_component_a_form_item, {
2152
+ label: "",
2153
+ name: ["rules", index, "toField"],
2154
+ rules: [
2155
+ {
2156
+ required: true,
2157
+ message: unref($t2)("sys.chooseTextTip", {
2158
+ name: unref($t2)("sys.field")
2159
+ })
2160
+ }
2161
+ ]
2162
+ }, {
2163
+ default: withCtx(() => [
2164
+ isSubTableTrigger.value ? (openBlock(), createBlock(_component_a_select, {
2165
+ key: 0,
2166
+ value: element.toField,
2167
+ "onUpdate:value": ($event) => element.toField = $event,
2168
+ placeholder: unref($t2)("sys.chooseText") + unref($t2)("sys.field"),
2169
+ "show-search": "",
2170
+ "allow-clear": "",
2171
+ "filter-option": filterOption,
2172
+ "option-label-prop": "label",
2173
+ "dropdown-class-name": "gct-custom-select-dropdown",
2174
+ options: getTargetFieldOptions(element.fromField),
2175
+ onChange: (val) => handleFlatTargetChange(val, element)
2176
+ }, null, 8, ["value", "onUpdate:value", "placeholder", "options", "onChange"])) : (openBlock(), createBlock(_component_a_tree_select, {
2177
+ key: 1,
2178
+ value: getTargetFieldValue(element),
2179
+ placeholder: unref($t2)("sys.chooseText") + unref($t2)("sys.field"),
2180
+ "show-search": "",
2181
+ "tree-default-expand-all": "",
2182
+ "allow-clear": "",
2183
+ "tree-node-filter-prop": "label",
2184
+ "dropdown-class-name": "gct-custom-select-dropdown autofill-to-field-tree",
2185
+ "tree-data": getTargetFieldTreeData(element.fromField),
2186
+ onChange: (val, _label, extra) => handleTargetChange(val, extra, element)
2187
+ }, {
2188
+ title: withCtx((data) => [
2189
+ createElementVNode("span", {
2190
+ class: normalizeClass([
2191
+ "atuofill-field-icon",
2192
+ { "text-[#8B8B8B]": data.selectable === false }
2193
+ ])
2194
+ }, [
2195
+ data.type ? (openBlock(), createElementBlock("i", {
2196
+ key: 0,
2197
+ class: normalizeClass(["iconfont", unref(FieldIconMap)[data.type] || "text"])
2198
+ }, null, 2)) : createCommentVNode("", true),
2199
+ createTextVNode(" " + toDisplayString(data.label), 1)
2200
+ ], 2)
2201
+ ]),
2202
+ _: 1
2203
+ }, 8, ["value", "placeholder", "tree-data", "onChange"]))
2204
+ ]),
2205
+ _: 2
2206
+ }, 1032, ["name", "rules"])
2207
+ ]),
2208
+ _: 2
2209
+ }, 1024),
2210
+ createVNode(_component_a_col, {
2211
+ span: 1,
2212
+ class: "rule-flex-col"
2213
+ }, {
2214
+ default: withCtx(() => [
2215
+ withDirectives(createElementVNode("i", {
2216
+ class: "iconfont icon-shanchu2 text-[#797A7D] error-gct-hover cursor-pointer",
2217
+ onClick: ($event) => removeRule(index)
2218
+ }, null, 8, _hoisted_6), [
2219
+ [vShow, formState.rules.length > 1]
2220
+ ])
2221
+ ]),
2222
+ _: 2
2223
+ }, 1024)
2224
+ ]),
2225
+ _: 2
2226
+ }, 1024))
2227
+ ]),
2228
+ _: 1
2229
+ }, 8, ["list"])
2230
+ ]),
2231
+ _: 1
2232
+ }, 8, ["model"])
2233
+ ])
2234
+ ]);
2235
+ };
2236
+ }
2237
+ });
2238
+ const AutofillRulesModal = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-ddb9f6cd"]]);
2239
+ const _hoisted_1 = { class: "inpt-box" };
2240
+ const _sfc_main = /* @__PURE__ */ defineComponent({
2241
+ __name: "ref-autofill-editor",
2242
+ props: {
2243
+ fieldMeta: {},
2244
+ autofillRules: {},
2245
+ enableAutofill: { type: Boolean },
2246
+ disabled: { type: Boolean }
2247
+ },
2248
+ emits: ["update:autofillRules", "update:enableAutofill"],
2249
+ setup(__props, { emit: __emit }) {
2250
+ const props = __props;
2251
+ const emit = __emit;
2252
+ const detail = computed({
2253
+ get() {
2254
+ return props.autofillRules;
2255
+ },
2256
+ set(v) {
2257
+ emit("update:autofillRules", v);
2258
+ }
2259
+ });
2260
+ const enabled = computed({
2261
+ get() {
2262
+ return props.enableAutofill ?? !!props.autofillRules?.length;
2263
+ },
2264
+ set(v) {
2265
+ emit("update:enableAutofill", v);
2266
+ }
2267
+ });
2268
+ const btnAttrs = computed(() => {
2269
+ return detail.value?.length ? { type: "primary", block: true } : { type: "primary", ghost: true, block: true };
2270
+ });
2271
+ const handleFilterClick = async () => {
2272
+ const result = await window.NocodeAdapter.utils.overlay.modal(
2273
+ AutofillRulesModal,
2274
+ {
2275
+ fieldMeta: props.fieldMeta,
2276
+ rules: detail.value
2277
+ },
2278
+ {
2279
+ title: !detail.value?.length ? $t("sys.pageDesigner.addRule") : $t("sys.pageDesigner.editRule"),
2280
+ centered: true,
2281
+ width: 640
2282
+ }
2283
+ );
2284
+ if (result.ok && result.data) {
2285
+ emit("update:autofillRules", cloneDeep(result.data));
2286
+ }
2287
+ };
2288
+ return (_ctx, _cache) => {
2289
+ const _component_a_switch = resolveComponent("a-switch");
2290
+ const _component_a_button = resolveComponent("a-button");
2291
+ return openBlock(), createElementBlock("div", {
2292
+ class: normalizeClass(["ref-autofill-editor", { "is-off": !enabled.value }])
2293
+ }, [
2294
+ createVNode(FormItem, {
2295
+ inline: false,
2296
+ label: _ctx.$t("sys.pageDesigner.dataFill")
2297
+ }, {
2298
+ extra: withCtx(() => [
2299
+ createVNode(_component_a_switch, {
2300
+ size: "small",
2301
+ checked: enabled.value,
2302
+ "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => enabled.value = $event),
2303
+ disabled: __props.disabled
2304
+ }, null, 8, ["checked", "disabled"])
2305
+ ]),
2306
+ default: withCtx(() => [
2307
+ enabled.value ? (openBlock(), createElementBlock("div", {
2308
+ key: 0,
2309
+ class: "data-filter-box",
2310
+ onClick: handleFilterClick
2311
+ }, [
2312
+ createElementVNode("div", _hoisted_1, [
2313
+ createVNode(_component_a_button, mergeProps(btnAttrs.value, { disabled: __props.disabled }), {
2314
+ default: withCtx(() => [
2315
+ createTextVNode(toDisplayString(detail.value?.length ? _ctx.$t("sys.pageDesigner.editRule") : _ctx.$t("sys.pageDesigner.addRule")), 1)
2316
+ ]),
2317
+ _: 1
2318
+ }, 16, ["disabled"])
2319
+ ])
2320
+ ])) : createCommentVNode("", true)
2321
+ ]),
2322
+ _: 1
2323
+ }, 8, ["label"])
2324
+ ], 2);
2325
+ };
2326
+ }
2327
+ });
2328
+ const RefAutofillEditor = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-63d8b3b0"]]);
2329
+ export {
2330
+ DisplayFieldsEditor as D,
2331
+ QuickSearchEditor as Q,
2332
+ RefAutofillEditor as R,
2333
+ getIsSearchableField as g
2334
+ };