@gct-paas/excel 0.1.19 → 0.1.21

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 (173) hide show
  1. package/dist/{VueVideoPlayer-Bt1Le9qP.js → VueVideoPlayer-Bf0x69CJ.js} +2 -2
  2. package/dist/{agg-design-B_5evAJ0.js → agg-design-CLSOm6QJ.js} +1 -1
  3. package/dist/{agg-props-C62Ecenu.js → agg-props-4nnDqWtf.js} +1 -1
  4. package/dist/{agg-style-Q0xSL8Ye.js → agg-style-FHSkeH5u.js} +1 -1
  5. package/dist/{align-editor-D_LtYlh3.js → align-editor-Bf391dfO.js} +1 -1
  6. package/dist/{attach-fields-editor-3v3VNOfe.js → attach-fields-editor-U0Vg4ar8.js} +3 -2
  7. package/dist/{barcode-design-lusKmMnv.js → barcode-design-XLuURxqD.js} +2 -2
  8. package/dist/base/index.es.js +352 -177
  9. package/dist/{base-font-editor-DmasOst9.js → base-font-editor-adnb7ShQ.js} +3 -2
  10. package/dist/{boolean-design-BqGJVhKn.js → boolean-design-Bk3jIc2m.js} +2 -2
  11. package/dist/{boolean-props-DS7J4GHS.js → boolean-props-D1C7P7oX.js} +3 -3
  12. package/dist/{boolean-style-C9FslVV7.js → boolean-style-CWmep9-Y.js} +4 -4
  13. package/dist/{cell-upload-BFw5Yg_j.js → cell-upload-wzPF8ovv.js} +3 -2
  14. package/dist/{date-range-editor-PmJBHc8i.js → date-range-editor-CGCLkDFp.js} +3 -2
  15. package/dist/{date-time-design-DQ_Z-xUx.js → date-time-design-CG6fhsBd.js} +1 -1
  16. package/dist/{date-time-props-DfZoJukN.js → date-time-props-DGa4XIFD.js} +3 -3
  17. package/dist/{date-time-style-Doye-MHk.js → date-time-style-C5xs_HQX.js} +1 -1
  18. package/dist/{decimal-design-Bg-tdrtL.js → decimal-design-Dg2PWB7J.js} +1 -1
  19. package/dist/{decimal-display-mode-D_K6_XX1.js → decimal-display-mode-B5nxWZnK.js} +2 -2
  20. package/dist/{decimal-props-4QveEdf3.js → decimal-props-BUduwEu5.js} +4 -4
  21. package/dist/{decimal-style-B-n8SfAy.js → decimal-style-CW6QyMh0.js} +1 -1
  22. package/dist/{default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-B3GvGAje.js → default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-BlQSjkvP.js} +3 -2
  23. package/dist/{diagonal-design-B_l3lV5s.js → diagonal-design-xlveiCza.js} +2 -2
  24. package/dist/{double-design-BaWZXLjK.js → double-design-Dkzgoo0g.js} +1 -1
  25. package/dist/{double-props-sDsBpAER.js → double-props-DwI5z-Mz.js} +4 -4
  26. package/dist/{double-style--oSjQw07.js → double-style-B09n2Oup.js} +1 -1
  27. package/dist/{dynamic-table-action-zLjamAaN.js → dynamic-table-action-KwzaoPBC.js} +130 -271
  28. package/dist/{dynamic-table-action.vue_vue_type_style_index_0_scoped_94e9d614_lang-UooIxEeL.js → dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-ByU7Owiw.js} +436 -306
  29. package/dist/{edit.utils-CXmmCnxE-BrwRVXLT.js → edit.utils-CXmmCnxE-Do4weQUL.js} +1 -1
  30. package/dist/{enum-design-BgVuHvvu.js → enum-design-D_hYB8q2.js} +2 -2
  31. package/dist/{enum-props-DYN6LsLg.js → enum-props-SHpVl7is.js} +4 -4
  32. package/dist/{enum-style-D56_-gMw.js → enum-style-zTZKj6Li.js} +3 -3
  33. package/dist/excel.css +10119 -10237
  34. package/dist/{exceljs.min-DQkwXbni.js → exceljs.min-Dy4OavkS.js} +2 -2
  35. package/dist/{expression-design-CIMwIArR.js → expression-design-DH37JCnd.js} +1 -1
  36. package/dist/{expression-props--l3LwKAM.js → expression-props-D4aZ2FzY.js} +1 -1
  37. package/dist/{expression-style-CjM5oro9.js → expression-style-Bj0tEmqJ.js} +1 -1
  38. package/dist/{file-design-BYcXA55B.js → file-design-hV82bwcT.js} +1 -1
  39. package/dist/{file-props-DvsQZUcL.js → file-props-BR0xOn8f.js} +2 -2
  40. package/dist/{file-style-BiWmCsMZ.js → file-style-CPXRGFCR.js} +1 -1
  41. package/dist/{font-editor-BaRVmXey.js → font-editor-QrOFLcNA.js} +3 -3
  42. package/dist/{image-design-Bad-BXel.js → image-design-B3FASJvR.js} +2 -2
  43. package/dist/{image-design-Dr_w89Hq.js → image-design-WqYFe8Hz.js} +2 -2
  44. package/dist/{image-props-4lKEAwDq.js → image-props-DZ0lHvNN.js} +1 -1
  45. package/dist/{image-style-LoHD1zvr.js → image-style-D3jSU46p.js} +1 -1
  46. package/dist/{index--Bxx_VqV.js → index-4aWfyi4S.js} +2 -2
  47. package/dist/{index-pPTh0-mL.js → index-B2JfWmQ5.js} +1 -1
  48. package/dist/{index-D4Yb4Urx.js → index-BCRANZ6N.js} +1 -1
  49. package/dist/index-BYFfjfXo.js +4198 -0
  50. package/dist/{index-Bsjegt_0.js → index-BYnhPyxm.js} +1 -1
  51. package/dist/{index-Vx5npC-J.js → index-B_bGf5j3.js} +2 -2
  52. package/dist/{index-DRYxbbtG.js → index-BgJenclY.js} +1 -1
  53. package/dist/{index-CH--dgZ4.js → index-BocrGDq2.js} +1 -1
  54. package/dist/{index-3qfB5NN-.js → index-BpacgAuY.js} +1 -1
  55. package/dist/{index-DDnUeBCP.js → index-C9uva5U9.js} +1 -1
  56. package/dist/{index-D-mFMP7t.js → index-CAp9OIUg.js} +2 -2
  57. package/dist/{index-COiTpNXf.js → index-CVsM5Bam.js} +1 -1
  58. package/dist/{index-Ce0SltjH.js → index-Cblyq6yH.js} +1 -1
  59. package/dist/{index-ByXwQO9g.js → index-ChFaMPeg.js} +2 -2
  60. package/dist/{index-CqjhgxKH.js → index-Cqh9EW_d.js} +9 -3
  61. package/dist/{index-B-2N8GeG.js → index-CquVE9ii.js} +1 -1
  62. package/dist/{index-Dk-CUvB9.js → index-CsLZerBY.js} +42714 -4640
  63. package/dist/{index-CQ7Hcly4.js → index-D8uy8whi.js} +1 -1
  64. package/dist/{index-CEufXc_2.js → index-DKR79OBc.js} +1 -1
  65. package/dist/{index-C7KdVTwU.js → index-DNHA-joo.js} +1 -1
  66. package/dist/{index-Bki98NXv.js → index-DU3SF4eg.js} +1 -1
  67. package/dist/{index-CcLTIQGc.js → index-DVaUctcz.js} +1 -1
  68. package/dist/{index-B9IMST50.js → index-DegtNz07.js} +1 -1
  69. package/dist/{index-B_VejD7m.js → index-DpFPYL8b.js} +1 -1
  70. package/dist/{index-BSfbsA-W.js → index-Dvp79b5b.js} +1 -1
  71. package/dist/{index-CP099vf_.js → index-DxgKf-wy.js} +1 -1
  72. package/dist/{index-BZYuG4zS.js → index-Jz0_ApK0.js} +1 -1
  73. package/dist/{index-C6mtZJIQ.js → index-Ol6_R1tg.js} +1 -1
  74. package/dist/{index-B3YoA1vo.js → index-RY064UmV.js} +1 -1
  75. package/dist/{index-BsUkUBZV.js → index-dECIkP6q.js} +1 -1
  76. package/dist/{index-DpPrrfLV.js → index-iGA3l7nd.js} +5 -1
  77. package/dist/{index-D9CHdykS.js → index-pMF19I7H.js} +1 -1
  78. package/dist/{index-Dq72GFzs.js → index-wmbtcxzT.js} +2 -2
  79. package/dist/index.es.js +45 -45
  80. package/dist/{integer-design-C2EkL0hc.js → integer-design-_-oIGMZi.js} +1 -1
  81. package/dist/{integer-props-Cs-CvjQS.js → integer-props-CbhqGTWT.js} +5 -4
  82. package/dist/{integer-style-BtAfQCAn.js → integer-style-CRDDq2e1.js} +1 -1
  83. package/dist/{mb-render-CsWNoQnS.js → mb-render-Bh6EegbE.js} +1 -30
  84. package/dist/{number-input-ex-eza87s5O.js → number-input-ex-n0MRaA8Z.js} +2 -1
  85. package/dist/{org-props-BJ6FKaVj.js → org-props-B_ED1XJd.js} +2 -2
  86. package/dist/{org-style-LRy5QsV5.js → org-style-P7mL2u1-.js} +1 -1
  87. package/dist/{pagination-design-sA-kbILI.js → pagination-design-CC2ZvE5K.js} +2 -2
  88. package/dist/paper-widget-design-CvvM0OZ2.js +4 -0
  89. package/dist/{qrcode-design-BsWJrsvD.js → qrcode-design-C_G8R7Lo.js} +1 -1
  90. package/dist/ref-autofill-editor-DdUMjliQ.js +2333 -0
  91. package/dist/{ref-props-BInJu7PN.js → ref-props-CCwA0E2w.js} +17 -9
  92. package/dist/{ref-style-Dgc_9tko.js → ref-style-C3Qy3L2V.js} +1 -1
  93. package/dist/{regex-editor-C09XpMhm.js → regex-editor-CswiNY9l.js} +3 -2
  94. package/dist/{revo-grid.entry-BIm5A5wM.js → revo-grid.entry-fhJrZlXs.js} +1 -1
  95. package/dist/{revogr-attribution_7.entry-B06XF5B_.js → revogr-attribution_7.entry-BxX5Aax7.js} +3 -3
  96. package/dist/{revogr-clipboard_3.entry-C8dVJYtR.js → revogr-clipboard_3.entry-B84Mg6_S.js} +2 -2
  97. package/dist/{revogr-data_4.entry-Dgp6vYqe.js → revogr-data_4.entry-BSSMKH9X.js} +2 -2
  98. package/dist/{revogr-filter-panel.entry-xo_juIUc.js → revogr-filter-panel.entry-xjYp1Z8c.js} +1 -1
  99. package/dist/{select-render-type-editor.vue_vue_type_script_setup_true_lang-vIUGBOWr.js → select-render-type-editor.vue_vue_type_script_setup_true_lang-JwULnnUe.js} +2 -2
  100. package/dist/{serialnumber-design-mWcys6hI.js → serialnumber-design-qdEzFAi4.js} +1 -1
  101. package/dist/shared/index.es.js +26 -27
  102. package/dist/{signature-design-Dl-Lv5Z5.js → signature-design-DyLTKEwS.js} +1 -1
  103. package/dist/{signature-props-DSzpO-_r.js → signature-props-CXwqrh0H.js} +3 -3
  104. package/dist/{signature-style-Bk34vOsk.js → signature-style-ibNQSAPQ.js} +1 -1
  105. package/dist/{single-field-drop-CiPUMT9B.js → single-field-drop-BSdWy-C4.js} +3 -2
  106. package/dist/{size-editor-B5aunbUM.js → size-editor-8C1AxONY.js} +1 -1
  107. package/dist/src/nocode-base/src/components/document-quick-fill/fixed-quick-fill-modal.vue.d.ts +5 -1
  108. package/dist/src/nocode-base/src/components/document-quick-fill/quick-fill.util.d.ts +11 -6
  109. package/dist/src/nocode-base/src/components/document-sub-table-action/fixed-table-action.vue.d.ts +4 -0
  110. package/dist/src/nocode-base/src/hooks/annotation/form-annotation-controller.d.ts +14 -148
  111. package/dist/src/nocode-base/src/hooks/annotation/index.d.ts +0 -1
  112. package/dist/src/nocode-base/src/types/fields/i-select.d.ts +4 -0
  113. package/dist/src/nocode-base/src/types/fields/i-trace.d.ts +7 -0
  114. package/dist/src/nocode-web-render/src/index.d.ts +0 -1
  115. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/display-fields-editor.vue.d.ts +15 -0
  116. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/display-fields.util.d.ts +11 -0
  117. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/index.d.ts +3 -0
  118. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/index.d.ts +3 -0
  119. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search-editor.vue.d.ts +15 -0
  120. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search.util.d.ts +14 -0
  121. package/dist/src/online-form/src/views/designer/modules/panel/comps/quick-fill-config.vue.d.ts +1 -0
  122. package/dist/src/online-form/src/views/designer/modules/panel/panel-data-init-config/common/data-source-title.vue.d.ts +2 -2
  123. package/dist/src/online-form/src/views/render/__components__/_field_/_base_/common-select.util.d.ts +47 -0
  124. package/dist/src/shared/components/Signature/ui/sign-editor.vue.d.ts +2 -2
  125. package/dist/src/shared/components/field-transfer/components/field-transfer-modal.vue.d.ts +30 -0
  126. package/dist/src/shared/components/field-transfer/components/modal-wrapper.vue.d.ts +65 -0
  127. package/dist/src/shared/components/field-transfer/hooks/useModelField.d.ts +169 -0
  128. package/dist/src/shared/components/field-transfer/hooks/useTreeData.d.ts +139 -0
  129. package/dist/src/shared/components/field-transfer/index.d.ts +21 -0
  130. package/dist/src/shared/components/field-transfer/useFieldTransfer.d.ts +47 -0
  131. package/dist/src/shared/components/field-transfer/utils/enum.d.ts +6 -0
  132. package/dist/src/shared/components/field-transfer/utils/i18n.d.ts +1 -0
  133. package/dist/src/shared/components/field-transfer/utils/tree-tool.d.ts +6 -0
  134. package/dist/src/shared/components/version-select/version-select.vue.d.ts +2 -2
  135. package/dist/{text-design-BIFz5gw1.js → text-design-BzDtceUO.js} +2 -2
  136. package/dist/{text-design-C0dORvkP.js → text-design-Di-2lpQC.js} +2 -2
  137. package/dist/{text-props-ClHI-4aM.js → text-props-YXtd9DCt.js} +5 -5
  138. package/dist/{text-style-DANM5fvy.js → text-style-BtclwHUQ.js} +1 -1
  139. package/dist/{throttle-Cpk1LoGk-Da5HSLWc.js → throttle-Cpk1LoGk-BFMM5iqm.js} +1 -1
  140. package/dist/{timediff-design-BDCsQIal.js → timediff-design-DPDNHC4C.js} +1 -1
  141. package/dist/{trace-design-CKqq1WH_.js → trace-design-B2tffMF2.js} +2 -2
  142. package/dist/{trace-props-BI24XFMc.js → trace-props-CWTXFYZ9.js} +24 -16
  143. package/dist/{trace-style-CX1f7oZH.js → trace-style-AmSVnHXF.js} +1 -1
  144. package/dist/use-namespace-qtLS8nEh.js +88 -0
  145. package/dist/{user-props-gF7KPnP8.js → user-props-hR1saiG7.js} +2 -2
  146. package/dist/{user-style-DIouAMWa.js → user-style-BsMfhFHo.js} +1 -1
  147. package/dist/{value-editor.vue_vue_type_style_index_0_lang-DHj-zNxm.js → value-editor.vue_vue_type_style_index_0_lang-zAPZ-2E_.js} +2 -2
  148. package/dist/{version-select-CL3QQGND.js → version-select-CeQP0Bne.js} +1041 -4
  149. package/dist/web-render/index.es.js +12 -955
  150. package/dist/{widget-barcode-DZiCyrQW.js → widget-barcode-DPdsvAF5.js} +4 -4
  151. package/dist/{widget-diagonal-D_Oz8te1.js → widget-diagonal-BfjZGony.js} +4 -3
  152. package/dist/{widget-image-TL_SLOap.js → widget-image-D_E_0ZEd.js} +5 -5
  153. package/dist/{widget-line-BQ-qcBUA.js → widget-line-SDiSxrzr.js} +2 -2
  154. package/dist/{widget-pagination-DciJE9qC.js → widget-pagination-DdIoe9Yy.js} +5 -5
  155. package/dist/{widget-power-B9KTIpwA.js → widget-power-hifeC3T0.js} +4 -3
  156. package/dist/{widget-qrcode-DRoj5rSy.js → widget-qrcode-DBEsM1iE.js} +3 -3
  157. package/dist/{widget-rangelimit-Ckgx3i4r.js → widget-rangelimit-clQ84tvq.js} +4 -3
  158. package/dist/{widget-serialnumber-aUkR-0yC.js → widget-serialnumber-BXvzHCYR.js} +1 -1
  159. package/dist/{widget-text-CJIT-hY3.js → widget-text-CPojsb_9.js} +5 -5
  160. package/dist/{widget-timediff-x-RQMdNg.js → widget-timediff-DGBZsme_.js} +2 -2
  161. package/package.json +1 -1
  162. package/dist/AntdIcon-C3RMq2zm.js +0 -1040
  163. package/dist/form-annotation-controller-Zw6OoPLe.js +0 -707
  164. package/dist/index-Bm6Hdoud.js +0 -41849
  165. package/dist/paper-widget-design-BGY5qu-K.js +0 -4
  166. package/dist/ref-autofill-editor-BbozAOcm.js +0 -673
  167. package/dist/src/nocode-base/src/hooks/annotation/types.d.ts +0 -16
  168. package/dist/src/nocode-web-render/src/annotation/form-abandon-medpro-modal.vue.d.ts +0 -15
  169. package/dist/src/nocode-web-render/src/annotation/form-abandon-modal.vue.d.ts +0 -15
  170. package/dist/src/nocode-web-render/src/annotation/form-abandon-v2-modal.vue.d.ts +0 -11
  171. package/dist/src/nocode-web-render/src/annotation/index.d.ts +0 -2
  172. package/dist/src/nocode-web-render/src/annotation/submit-form-change-modal.vue.d.ts +0 -104
  173. package/dist/src/nocode-web-render/src/annotation/use-annotation.d.ts +0 -37
@@ -0,0 +1,2333 @@
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, r as registerDialogComp, u as useModelFields, F as FormItem, n as SEARCH_TYPE, k as draggableComponent, t as transformMappingField4Auto } from "./index-CsLZerBY.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, G 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-ByU7Owiw.js";
5
+ import { cloneDeep, has, isEmpty, pick, isBoolean } from "lodash-es";
6
+ import { useModal } from "@gct-paas/core";
7
+ const DEFAULT_DISPLAY_FIELDS_MAP = {
8
+ // 设备:设备编码、设备名称
9
+ device: ["code_", "name_"],
10
+ // 库存物料:预留
11
+ materialNo: []
12
+ };
13
+ var SCOPEINFO = /* @__PURE__ */ ((SCOPEINFO2) => {
14
+ SCOPEINFO2["FIELD_LIST"] = "fieldList";
15
+ SCOPEINFO2["FIELD_FORM"] = "fieldForm";
16
+ return SCOPEINFO2;
17
+ })(SCOPEINFO || {});
18
+ const objInfo = {
19
+ modelKey: "",
20
+ fieldCodeChain: "",
21
+ bindFormId: "",
22
+ isFieldModel: false,
23
+ relateObjList: []
24
+ };
25
+ const modelInfoMap = {};
26
+ const modelFieldMap = {};
27
+ const selectObj = {
28
+ modelName: "",
29
+ fieldList: [],
30
+ modelKey: "",
31
+ currentFormId: "",
32
+ fieldCodeChain: "",
33
+ isFieldModel: false
34
+ };
35
+ const fieldCascaderSelectValue = [];
36
+ const fieldPathChainList = [];
37
+ const fieldMap = {
38
+ objInfo,
39
+ modelInfoMap,
40
+ modelFieldMap,
41
+ fieldCascaderSelectValue,
42
+ fieldPathChainList
43
+ };
44
+ const fieldCacheMap = {
45
+ [SCOPEINFO.FIELD_FORM]: {
46
+ selectObj: reactive(cloneDeep(selectObj)),
47
+ ...toRefs(reactive(cloneDeep(fieldMap)))
48
+ },
49
+ [SCOPEINFO.FIELD_LIST]: {
50
+ selectObj: reactive(cloneDeep(selectObj)),
51
+ ...toRefs(reactive(cloneDeep(fieldMap)))
52
+ }
53
+ };
54
+ function useModelField(scope = SCOPEINFO.FIELD_FORM) {
55
+ const {
56
+ objInfo: objInfo2,
57
+ modelInfoMap: modelInfoMap2,
58
+ modelFieldMap: modelFieldMap2,
59
+ selectObj: selectObj2,
60
+ fieldCascaderSelectValue: fieldCascaderSelectValue2,
61
+ fieldPathChainList: fieldPathChainList2
62
+ } = fieldCacheMap[scope];
63
+ async function getModelDetail2FieldList(modelKey) {
64
+ const res = await api.apaas.modelMeta.getDetail({
65
+ modelKey
66
+ });
67
+ return res;
68
+ }
69
+ function setModelFieldToMap(modelKey, fieldList = []) {
70
+ if (!modelFieldMap2.value[modelKey]) {
71
+ modelFieldMap2.value[modelKey] = fieldList?.reduce(
72
+ (prev, curr) => ({
73
+ ...prev,
74
+ [curr.key ?? ""]: curr
75
+ }),
76
+ {}
77
+ );
78
+ }
79
+ }
80
+ function setModelInfoToMap(modelList = []) {
81
+ modelList?.forEach((item) => {
82
+ if (!modelInfoMap2.value[item.key]) {
83
+ modelInfoMap2.value[item.key] = {
84
+ modelId: item.id,
85
+ modelKey: item.key,
86
+ modelName: item.name,
87
+ // NDO | RDO
88
+ modelType: item.type
89
+ };
90
+ }
91
+ });
92
+ }
93
+ function getModelFieldList(modelKey) {
94
+ if (!modelKey || !modelFieldMap2.value[modelKey]) {
95
+ return [];
96
+ }
97
+ return Object.values(toRaw(modelFieldMap2.value[modelKey]));
98
+ }
99
+ function getModelFieldInfo(modelKey, fieldKey) {
100
+ if (!modelKey || !fieldKey || !modelFieldMap2.value[modelKey]) {
101
+ return;
102
+ }
103
+ return modelFieldMap2.value[modelKey][fieldKey];
104
+ }
105
+ function getModelInfo(modelKey) {
106
+ if (!modelKey || !modelInfoMap2.value[modelKey]) {
107
+ return false;
108
+ }
109
+ return modelInfoMap2.value[modelKey];
110
+ }
111
+ function _checkRefModel(item, fieldTypes = []) {
112
+ return item.bindInfo && [FIELD_TYPE.REF, FIELD_TYPE.RDO_REF, ...fieldTypes].includes(item.type) && [CreateType.USER_DEFINED, CreateType.BUILTIN].includes(item.createType);
113
+ }
114
+ function getRefConfig({ item, formId }, { links, fieldLinks, fieldType }) {
115
+ const link = [...links, item.bindInfo];
116
+ return {
117
+ fieldKey: item.key,
118
+ fieldType: item.type,
119
+ belongModelKey: item.modelKey,
120
+ bindModelKey: item.bindInfo,
121
+ bindFormId: formId ?? "",
122
+ isFieldModel: true,
123
+ // ! 这边用对象的原因是模型 key 可能是特殊字符,所以如果直接用字符串拼接可能会有问题
124
+ fieldCodeChain: JSON.stringify({
125
+ // 关联模型的字段key
126
+ bindFieldKey: item.key,
127
+ // 字段所属模型的key
128
+ bindModelKey: item.bindInfo,
129
+ // 关联模型字段所属模型的key
130
+ belongModelKey: item.modelKey,
131
+ /**模型链路 */
132
+ modelLink: link,
133
+ /**字段链路 */
134
+ fieldLink: fieldLinks,
135
+ /**关联源模型的模型类型 */
136
+ refOriginFieldType: fieldType
137
+ }),
138
+ modelLink: link,
139
+ children: []
140
+ };
141
+ }
142
+ async function getRefInfo({ item, formId }, { modelKey, fieldType }) {
143
+ const oneLevelRefConfig = getRefConfig(
144
+ { item, formId },
145
+ { links: [modelKey], fieldLinks: [item.key], fieldType }
146
+ );
147
+ const twoLevelFieldData = await getModelDetail2FieldList(oneLevelRefConfig.bindModelKey);
148
+ const twoLevelRefConfigs = twoLevelFieldData?.fieldMetaList?.filter((a) => _checkRefModel(a)).map(
149
+ (i) => getRefConfig(
150
+ { item: i, formId },
151
+ { links: oneLevelRefConfig.modelLink, fieldLinks: [item.key, i.key], fieldType }
152
+ )
153
+ );
154
+ return { ...oneLevelRefConfig, children: twoLevelRefConfigs };
155
+ }
156
+ async function loadObjInfo(modelKey, {
157
+ formId,
158
+ childParentModelKey,
159
+ isShowCascader = true
160
+ } = {}) {
161
+ const info = await getModelDetail2FieldList(modelKey);
162
+ if (info) {
163
+ info.fieldMetaList?.forEach((item) => {
164
+ if (item.type === FIELD_TYPE.ASSOCIATED_PRIMARY_KEY && childParentModelKey) {
165
+ item.bindInfo = childParentModelKey;
166
+ }
167
+ });
168
+ const refList = await Promise.all(
169
+ info.fieldMetaList?.filter((a) => _checkRefModel(a, [FIELD_TYPE.ASSOCIATED_PRIMARY_KEY]))?.map((item) => getRefInfo({ item, formId }, { modelKey, fieldType: item.type })) ?? []
170
+ );
171
+ objInfo2.value = {
172
+ modelKey: info.key,
173
+ fieldCodeChain: JSON.stringify({ modelKey: info.key }),
174
+ bindFormId: formId ?? "",
175
+ isFieldModel: false,
176
+ relateObjList: refList
177
+ };
178
+ setModelFieldToMap(info.key ?? "", info.fieldMetaList);
179
+ let modelDetails = [info];
180
+ const allRefList = [
181
+ ...new Set(
182
+ objInfo2.value.relateObjList?.map((item) => [item, ...item.children || []]).flat().map((item) => item.bindModelKey)
183
+ )
184
+ ];
185
+ if (allRefList?.length !== 0) {
186
+ const res = await api.apaas.modelMeta.getByKeys({ modelKeys: allRefList.join(",") ?? "" });
187
+ modelDetails = modelDetails?.concat(res ?? []);
188
+ }
189
+ setModelInfoToMap(modelDetails);
190
+ if (allRefList?.length !== 0 && isShowCascader) {
191
+ await Promise.all(allRefList.map((k) => getModelDetail2FieldList(k))).then((res) => {
192
+ (res ?? []).forEach((info2) => {
193
+ if (info2) {
194
+ setModelFieldToMap(info2.key ?? "", info2.fieldMetaList);
195
+ }
196
+ });
197
+ });
198
+ }
199
+ }
200
+ return true;
201
+ }
202
+ async function fetchDetailList(modelKey) {
203
+ if (!modelFieldMap2.value[modelKey]) {
204
+ const info = await getModelDetail2FieldList(modelKey);
205
+ if (info) {
206
+ setModelFieldToMap(info.key ?? "", info.fieldMetaList);
207
+ }
208
+ }
209
+ }
210
+ function setSelectObjData(modelKey, info) {
211
+ const modelInfo = getModelInfo(modelKey);
212
+ if (modelInfo) {
213
+ selectObj2.modelKey = modelInfo.modelKey;
214
+ selectObj2.modelName = modelInfo.modelName;
215
+ selectObj2.currentFormId = info.bindFormId;
216
+ selectObj2.fieldCodeChain = info.fieldCodeChain;
217
+ selectObj2.isFieldModel = info.isFieldModel;
218
+ selectObj2.fieldList = getModelFieldList(modelInfo.modelKey);
219
+ }
220
+ }
221
+ watch(
222
+ [() => objInfo2.value, () => modelInfoMap2.value],
223
+ () => {
224
+ if (!selectObj2.modelKey && objInfo2.value.modelKey) {
225
+ setSelectObjData(objInfo2.value.modelKey, objInfo2.value);
226
+ }
227
+ },
228
+ {
229
+ immediate: true,
230
+ deep: true
231
+ }
232
+ );
233
+ function changeSelectInfo(modelKey, data) {
234
+ setSelectObjData(modelKey, data);
235
+ }
236
+ function clearSelectInfo() {
237
+ selectObj2.modelKey = "";
238
+ selectObj2.modelName = "";
239
+ selectObj2.currentFormId = "";
240
+ selectObj2.fieldCodeChain = "";
241
+ selectObj2.isFieldModel = false;
242
+ selectObj2.fieldList = [];
243
+ fieldCascaderSelectValue2.value = [];
244
+ }
245
+ function clearObjInfo() {
246
+ objInfo2.value = {
247
+ modelKey: "",
248
+ fieldCodeChain: "",
249
+ bindFormId: "",
250
+ isFieldModel: false,
251
+ relateObjList: []
252
+ };
253
+ }
254
+ function getFieldCodeChainStr(fieldCodeChain, currentFieldName) {
255
+ if (!fieldCodeChain) {
256
+ return "";
257
+ }
258
+ const fieldCodeChainObj = JSON.parse(fieldCodeChain);
259
+ if (has(fieldCodeChainObj, "bindFieldKey")) {
260
+ const fieldInfo = getModelFieldInfo(
261
+ fieldCodeChainObj.belongModelKey,
262
+ fieldCodeChainObj.bindFieldKey
263
+ );
264
+ const bindModelInfo = getModelInfo(fieldCodeChainObj.bindModelKey);
265
+ if (fieldInfo && bindModelInfo) {
266
+ return `${fieldInfo.name}(${bindModelInfo.modelName})${currentFieldName ? ` > ${currentFieldName}` : ""}`;
267
+ }
268
+ } else {
269
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
270
+ if (modelInfo) {
271
+ return `${modelInfo.modelName}${currentFieldName ? ` > ${currentFieldName}` : ""}`;
272
+ }
273
+ }
274
+ return "";
275
+ }
276
+ async function getFieldPathChainList(fieldCodeChain, fieldName) {
277
+ if (!fieldCodeChain) {
278
+ fieldPathChainList2.value = [];
279
+ } else {
280
+ const fieldCodeChainObj = JSON.parse(fieldCodeChain);
281
+ const isFieldModel = has(fieldCodeChainObj, "bindFieldKey");
282
+ const modelKeys = isFieldModel ? fieldCodeChainObj.modelLink || [
283
+ fieldCodeChainObj.belongModelKey,
284
+ fieldCodeChainObj.bindModelKey
285
+ ] : [fieldCodeChainObj.modelKey];
286
+ if (modelKeys.some((item) => !getModelInfo(item))) {
287
+ const res = await api.apaas.modelMeta.getByKeys({
288
+ modelKeys: modelKeys.join(",")
289
+ });
290
+ if (res) {
291
+ setModelInfoToMap(res);
292
+ }
293
+ }
294
+ if (isFieldModel) {
295
+ fieldPathChainList2.value = modelKeys.map((i) => getModelInfo(i).modelName).concat(fieldName);
296
+ } else {
297
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
298
+ if (modelInfo) {
299
+ fieldPathChainList2.value = [modelInfo.modelName, fieldName];
300
+ }
301
+ }
302
+ }
303
+ return fieldPathChainList2.value;
304
+ }
305
+ async function reloadFieldToolkit(modelKey, formId, childParentModelKey) {
306
+ if (selectObj2.currentFormId === formId) {
307
+ return;
308
+ }
309
+ clearSelectInfo();
310
+ clearObjInfo();
311
+ await loadObjInfo(modelKey, {
312
+ formId,
313
+ childParentModelKey
314
+ });
315
+ }
316
+ return {
317
+ objInfo: objInfo2,
318
+ loadObjInfo,
319
+ getModelInfo,
320
+ getModelFieldList,
321
+ getModelFieldInfo,
322
+ selectObj: selectObj2,
323
+ modelFieldMap: modelFieldMap2,
324
+ fetchDetailList,
325
+ changeSelectInfo,
326
+ getFieldCodeChainStr,
327
+ getFieldPathChainList,
328
+ clearSelectInfo,
329
+ clearObjInfo,
330
+ fieldCascaderSelectValue: fieldCascaderSelectValue2,
331
+ fieldPathChainList: fieldPathChainList2,
332
+ reloadFieldToolkit
333
+ };
334
+ }
335
+ const MESSAGES = {
336
+ "sys.component.fieldTransfer.defaultModalTitle": "选择字段",
337
+ "sys.component.fieldTransfer.move": "移动",
338
+ "sys.component.fieldTransfer.noSelect": "待选",
339
+ "sys.component.fieldTransfer.select": "已选",
340
+ "sys.component.fieldTransfer.noSearchData": "无搜索结果",
341
+ "sys.component.fieldTransfer.noData": "暂无数据",
342
+ "sys.component.fieldTransfer.term": "项",
343
+ "sys.component.fieldTransfer.pleaseSearch": "请搜索",
344
+ "sys.component.fieldTransfer.selectAllData": "全选所有",
345
+ "sys.component.fieldTransfer.invertCurrentPage": "反选当页",
346
+ "sys.component.fieldTransfer.linkModel": "关联模型",
347
+ "sys.component.fieldTransfer.subMainModel": "子主模型",
348
+ "sys.component.fieldTransfer.currentModel": "当前模型",
349
+ "sys.component.fieldTransfer.soModelTitle": "选择对象",
350
+ "sys.model.modelKey": "模型标识"
351
+ };
352
+ function t(key) {
353
+ if (MESSAGES[key]) return MESSAGES[key];
354
+ const globalT = window.$t;
355
+ if (typeof globalT === "function") {
356
+ const v = globalT(key);
357
+ if (v && v !== key) return v;
358
+ }
359
+ return key;
360
+ }
361
+ const FieldCascader = /* @__PURE__ */ defineComponent({
362
+ name: "FieldCascader",
363
+ props: {
364
+ scope: {
365
+ type: String,
366
+ default: SCOPEINFO.FIELD_FORM
367
+ },
368
+ isShowCascader: {
369
+ type: Boolean,
370
+ default: true
371
+ }
372
+ },
373
+ setup(props) {
374
+ const {
375
+ fieldCascaderSelectValue: fieldCascaderSelectValue2,
376
+ objInfo: objInfo2,
377
+ getModelInfo,
378
+ getModelFieldInfo,
379
+ fetchDetailList,
380
+ changeSelectInfo
381
+ } = useModelField(props.scope);
382
+ const visible = ref(false);
383
+ const isReadyonly = computed(() => {
384
+ return !props.isShowCascader || objInfo2.value.relateObjList.length === 0;
385
+ });
386
+ const handleClickItem = async (e, item) => {
387
+ visible.value = false;
388
+ const key = has(item, "fieldKey") ? item.bindModelKey : item.modelKey;
389
+ await fetchDetailList(key);
390
+ changeSelectInfo(key, item);
391
+ };
392
+ const renderOptions = () => {
393
+ const label = (item, showIcon = false) => {
394
+ const modelInfo = getModelInfo(item.bindModelKey || item.modelKey);
395
+ if (modelInfo) {
396
+ let name = createVNode("span", {
397
+ "class": "field-ops-name"
398
+ }, [modelInfo.modelName]);
399
+ if (item.belongModelKey && item.fieldKey !== "ref_master_id_") {
400
+ const fieldInfo = getModelFieldInfo(item.belongModelKey, item.fieldKey);
401
+ if (fieldInfo) {
402
+ name = createVNode("span", {
403
+ "class": "field-ops-name"
404
+ }, [fieldInfo.name, createVNode("span", {
405
+ "class": "field-ops-desc"
406
+ }, [createTextVNode("("), modelInfo.modelName, createTextVNode(")")])]);
407
+ }
408
+ }
409
+ return createVNode(Fragment, null, [createVNode("div", {
410
+ "class": "field-ops",
411
+ "onClick": (e) => handleClickItem(e, item)
412
+ }, [name]), showIcon && createVNode("i", {
413
+ "class": "iconfont icon-a-Rightarrow"
414
+ }, null)]);
415
+ }
416
+ return null;
417
+ };
418
+ const tipOptInfo = (label2, value) => {
419
+ return {
420
+ label: createVNode("div", {
421
+ "class": "field-ops"
422
+ }, [createVNode("span", {
423
+ "class": "field-ops-name"
424
+ }, [label2])]),
425
+ value,
426
+ isLeaf: true,
427
+ disabled: true
428
+ };
429
+ };
430
+ const options = [];
431
+ if (!isEmpty(objInfo2.value)) {
432
+ const recursive = (fieldItem) => {
433
+ if (!fieldItem.relateObjList) return [];
434
+ return [tipOptInfo(t("sys.component.fieldTransfer.linkModel"), "link")].concat(fieldItem.relateObjList.filter((item) => FIELD_TYPE.ASSOCIATED_PRIMARY_KEY !== item.fieldType).map((item) => {
435
+ const isShowIcon = item.children.length !== 0;
436
+ return {
437
+ label: label(item, isShowIcon),
438
+ value: item.fieldCodeChain,
439
+ isLeaf: false,
440
+ // ! 解决没有下级内容的时候hover上去需要关闭下级菜单 所以设置成即使当前节点没有 children,也会显示展开图标
441
+ children: isShowIcon ? [tipOptInfo(t("sys.component.fieldTransfer.linkModel"), "link")].concat(item.children.map((i) => {
442
+ return {
443
+ label: label(i),
444
+ value: i.fieldCodeChain
445
+ };
446
+ })) : []
447
+ };
448
+ }));
449
+ };
450
+ const mainModelList = objInfo2.value.relateObjList?.filter((item) => FIELD_TYPE.ASSOCIATED_PRIMARY_KEY === item.fieldType);
451
+ let subMainOpts = [];
452
+ if (mainModelList.length) {
453
+ subMainOpts = [tipOptInfo(t("sys.component.fieldTransfer.subMainModel"), "submain")].concat(mainModelList.map((item) => ({
454
+ label: label(item),
455
+ value: item.fieldCodeChain
456
+ })));
457
+ }
458
+ const children = recursive(objInfo2.value);
459
+ options.push(tipOptInfo(t("sys.component.fieldTransfer.currentModel"), "current"));
460
+ options.push({
461
+ label: label(objInfo2.value, children.length >= 2),
462
+ // 一条信息是标题
463
+ value: objInfo2.value.fieldCodeChain,
464
+ children: children.length >= 2 ? children : [],
465
+ isLeaf: false
466
+ });
467
+ options.push(...subMainOpts);
468
+ }
469
+ return options;
470
+ };
471
+ const renderSelectName = () => {
472
+ let fieldName = createVNode("span", null, null);
473
+ let name = "";
474
+ let lastName = "";
475
+ if (fieldCascaderSelectValue2.value && fieldCascaderSelectValue2.value.length > 0) {
476
+ fieldCascaderSelectValue2.value.forEach((pos) => {
477
+ const fieldCodeChainObj = JSON.parse(pos);
478
+ if (has(fieldCodeChainObj, "bindFieldKey")) {
479
+ const belongModelInfo = getModelInfo(fieldCodeChainObj.belongModelKey);
480
+ const fieldInfo = getModelFieldInfo(fieldCodeChainObj.belongModelKey, fieldCodeChainObj.bindFieldKey);
481
+ const bindModelInfo = getModelInfo(fieldCodeChainObj.bindModelKey);
482
+ if (belongModelInfo && fieldInfo && bindModelInfo) {
483
+ if (fieldInfo.key !== "ref_master_id_") {
484
+ name += `${belongModelInfo.modelName} / `;
485
+ }
486
+ if (fieldInfo.type === FIELD_TYPE.ASSOCIATED_PRIMARY_KEY) {
487
+ lastName = bindModelInfo.modelName;
488
+ } else {
489
+ lastName = `${fieldInfo.name}(${bindModelInfo.modelName})`;
490
+ }
491
+ }
492
+ } else {
493
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
494
+ if (modelInfo) {
495
+ lastName = modelInfo.modelName;
496
+ }
497
+ }
498
+ });
499
+ } else if (objInfo2.value.modelKey) {
500
+ const fieldCodeChainObj = JSON.parse(objInfo2.value.fieldCodeChain);
501
+ const modelInfo = getModelInfo(fieldCodeChainObj.modelKey);
502
+ if (modelInfo) {
503
+ lastName = modelInfo.modelName;
504
+ }
505
+ }
506
+ fieldName = createVNode("span", null, [createVNode("span", {
507
+ "class": "bread"
508
+ }, [createVNode("span", {
509
+ "class": "field-cascader-title"
510
+ }, [t("sys.component.fieldTransfer.soModelTitle")]), name]), createVNode(Tooltip, {
511
+ "title": t("sys.model.modelKey") + ":" + objInfo2.value.modelKey
512
+ }, {
513
+ default: () => [createVNode("span", {
514
+ "class": "last-name"
515
+ }, [lastName])]
516
+ }), !isReadyonly.value && createVNode(DownOutlined, {
517
+ "class": "ml-4px down-icon"
518
+ }, null)]);
519
+ return fieldName;
520
+ };
521
+ return () => {
522
+ return createVNode("div", {
523
+ "class": "field-cascader",
524
+ "style": {
525
+ cursor: isReadyonly.value ? "default" : "pointer"
526
+ }
527
+ }, [createVNode(Cascader, {
528
+ "dropdownClassName": "field-popup-cascader",
529
+ "options": renderOptions(),
530
+ "value": fieldCascaderSelectValue2.value,
531
+ "onUpdate:value": ($event) => fieldCascaderSelectValue2.value = $event,
532
+ "expandTrigger": "hover",
533
+ "onDropdownVisibleChange": (v) => {
534
+ visible.value = v;
535
+ },
536
+ "open": isReadyonly.value ? false : visible.value,
537
+ "changeOnSelect": true
538
+ }, {
539
+ default: () => [createVNode("div", null, [renderSelectName(), createTextVNode(" ")])]
540
+ })]);
541
+ };
542
+ }
543
+ });
544
+ function isGroupNode(node) {
545
+ return node.type === "group";
546
+ }
547
+ function generateData(nodes) {
548
+ return nodes.map((node) => {
549
+ if (isGroupNode(node)) {
550
+ return {
551
+ width: node.width,
552
+ id: node.key,
553
+ title: node.title,
554
+ type: node.type,
555
+ children: generateData(node.children || [])
556
+ };
557
+ }
558
+ return {
559
+ width: node.width,
560
+ id: node.key,
561
+ title: node.title,
562
+ type: node.type,
563
+ modelKey: node.modelKey
564
+ };
565
+ });
566
+ }
567
+ function traverse(handler, items) {
568
+ items.forEach((node) => {
569
+ handler(node);
570
+ if (isGroupNode(node)) {
571
+ traverse(handler, node.children);
572
+ }
573
+ });
574
+ }
575
+ function findNode(key, root) {
576
+ let result;
577
+ const handler = (items) => {
578
+ return items.some((node) => {
579
+ if (node.key === key) {
580
+ result = node;
581
+ return true;
582
+ }
583
+ if (isGroupNode(node)) {
584
+ return handler(node.children);
585
+ }
586
+ return false;
587
+ });
588
+ };
589
+ if (root.key === key) {
590
+ return root;
591
+ }
592
+ handler(root.children);
593
+ return result;
594
+ }
595
+ function traverseFilter(handler, items) {
596
+ const result = [];
597
+ items.forEach((node) => {
598
+ if (isGroupNode(node)) {
599
+ const children = traverseFilter(handler, node.children);
600
+ if (children.length === 0 && !handler(node)) {
601
+ return;
602
+ }
603
+ result.push({
604
+ ...node,
605
+ children
606
+ });
607
+ return;
608
+ }
609
+ if (handler(node)) {
610
+ result.push(node);
611
+ }
612
+ });
613
+ return result;
614
+ }
615
+ const MAX_ENABLE_COUNT = 5e6;
616
+ const useTreeData = (useMultiLevelTHead, isResetData, draggable, maxEnableCount, onColumnsChange) => {
617
+ ref(0);
618
+ const leafKeys = ref([]);
619
+ const refOriginalLeafKeys = ref([]);
620
+ const refTotalFields = ref(0);
621
+ const multiple = computed(() => useMultiLevelTHead);
622
+ const root = reactive({
623
+ key: "0",
624
+ title: "root",
625
+ children: [],
626
+ level: 0,
627
+ type: "group",
628
+ parent: null
629
+ });
630
+ const onChangeTree = (columnsData, fields) => {
631
+ const keys = [];
632
+ function handle(items, parent) {
633
+ return items.map(({ id, ...restItem }) => {
634
+ const node = {
635
+ ...restItem,
636
+ key: id,
637
+ parent,
638
+ level: parent.level + 1,
639
+ isLeaf: restItem.type === "field"
640
+ };
641
+ if (!node.isLeaf) {
642
+ node.children = handle(node.children, node);
643
+ } else {
644
+ const fieldItem = fields.find((item) => item.id === id);
645
+ if (fieldItem) {
646
+ node.disabled = fieldItem.disabled;
647
+ if (fieldItem) {
648
+ node.disableCheckbox = fieldItem.disabled;
649
+ node.fieldType = fieldItem.type;
650
+ keys.push(id);
651
+ refTotalFields.value += 1;
652
+ }
653
+ }
654
+ }
655
+ return node;
656
+ });
657
+ }
658
+ root.children = handle(columnsData, root);
659
+ leafKeys.value = keys;
660
+ if (!isResetData) {
661
+ refOriginalLeafKeys.value = [...keys];
662
+ }
663
+ };
664
+ watch(
665
+ multiple,
666
+ (val) => {
667
+ if (!val) {
668
+ const result = [];
669
+ traverse((node) => {
670
+ if (!isGroupNode(node)) {
671
+ result.push({
672
+ ...node,
673
+ parent: root
674
+ });
675
+ }
676
+ }, root.children);
677
+ root.children = result;
678
+ }
679
+ },
680
+ {
681
+ immediate: true
682
+ }
683
+ );
684
+ const data = computed(() => root.children);
685
+ const refresh = () => {
686
+ root.children = [...root.children];
687
+ };
688
+ const handleColumnsChange = () => {
689
+ onColumnsChange?.(generateData(root.children));
690
+ };
691
+ const remainCount = computed(() => (maxEnableCount ?? MAX_ENABLE_COUNT) - leafKeys.value.length);
692
+ function getContainerNode(node) {
693
+ return root;
694
+ }
695
+ return {
696
+ data,
697
+ root,
698
+ leafKeys,
699
+ multiple,
700
+ draggable,
701
+ remainCount,
702
+ addTreeNodes(nodes, parent) {
703
+ const p = findNode(parent.key, root);
704
+ const newNodes = nodes.map(
705
+ (item) => ({
706
+ ...item,
707
+ level: p.level + 1,
708
+ parent: p
709
+ })
710
+ );
711
+ p.children.push(...newNodes);
712
+ const newLeafKeys = [...leafKeys.value];
713
+ nodes.forEach((item) => {
714
+ if (item.isLeaf) {
715
+ newLeafKeys.push(item.key);
716
+ }
717
+ });
718
+ leafKeys.value = newLeafKeys;
719
+ refresh();
720
+ setTimeout(() => {
721
+ newNodes.forEach((node) => {
722
+ if (node.isNew) {
723
+ node.isNew = false;
724
+ }
725
+ });
726
+ }, 500);
727
+ handleColumnsChange();
728
+ },
729
+ removeTreeNodesByKeys(keys) {
730
+ root.children = traverseFilter((node) => !keys.includes(node.key), root.children);
731
+ leafKeys.value = leafKeys.value.filter((key) => !keys.includes(key));
732
+ handleColumnsChange();
733
+ },
734
+ moveTreeNode(source, target, direction, asChildren = false) {
735
+ const sourceParent = findNode(source.parent.key, root);
736
+ let j = 0;
737
+ let targetParent = findNode(target.parent.key, root);
738
+ if (asChildren) {
739
+ if (isGroupNode(target)) {
740
+ targetParent = findNode(target.key, root);
741
+ } else {
742
+ j = targetParent.children.findIndex((item) => item.key === target.key);
743
+ j += 1;
744
+ }
745
+ } else {
746
+ j = targetParent.children.findIndex((item) => item.key === target.key);
747
+ j += direction === 1 ? 1 : -1;
748
+ j = Math.max(j, 0);
749
+ }
750
+ if (targetParent.level >= 3 && isGroupNode(source)) {
751
+ return;
752
+ }
753
+ const i = sourceParent.children.findIndex((item) => item.key === source.key);
754
+ sourceParent.children.splice(i, 1);
755
+ if (source.parent === targetParent) {
756
+ targetParent.children.splice(i < j ? j - 1 : j, 0, source);
757
+ } else {
758
+ source.parent = targetParent;
759
+ source.level = targetParent.level + 1;
760
+ targetParent.children.splice(j, 0, source);
761
+ }
762
+ refresh();
763
+ handleColumnsChange();
764
+ },
765
+ getContainerNode,
766
+ onChangeTree
767
+ };
768
+ };
769
+ const TreeItem = /* @__PURE__ */ defineComponent({
770
+ name: "TreeItem",
771
+ props: {
772
+ node: {
773
+ type: Object,
774
+ required: true
775
+ },
776
+ draggable: Boolean
777
+ },
778
+ setup(props) {
779
+ const editing = computed(() => {
780
+ console.log("props.node", props.node);
781
+ return props.node.isNew;
782
+ });
783
+ return () => {
784
+ return createVNode("div", {
785
+ "class": "tree-item-container"
786
+ }, [createVNode("div", {
787
+ "class": "tree-title"
788
+ }, [createVNode(Tooltip, {
789
+ "title": props.node.tooltip
790
+ }, {
791
+ default: () => [createVNode("span", null, [props.node.title || "-"])]
792
+ })]), !editing.value && props.draggable && !props.node?.disabled && !props.node?._preset && createVNode("div", {
793
+ "class": "operation-container"
794
+ }, [createVNode(Tooltip, {
795
+ "title": t("sys.component.fieldTransfer.move")
796
+ }, {
797
+ default: () => [createVNode("i", {
798
+ "class": ["iconfont", "icon-drag"]
799
+ }, null)]
800
+ })])]);
801
+ };
802
+ }
803
+ });
804
+ 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";
805
+ 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";
806
+ const TransferTree = /* @__PURE__ */ defineComponent({
807
+ name: "TransferTree",
808
+ props: {
809
+ /** useTreeData */
810
+ treeObj: {
811
+ type: Object,
812
+ required: true
813
+ },
814
+ checkedKeys: {
815
+ type: Array,
816
+ required: true
817
+ },
818
+ onCheckedKeysChange: {
819
+ type: Function,
820
+ required: true
821
+ }
822
+ },
823
+ setup(props) {
824
+ const {
825
+ data,
826
+ draggable
827
+ } = toRefs(props.treeObj);
828
+ const keyword = ref("");
829
+ const filteredTreeData = computed(() => {
830
+ if (!keyword.value) {
831
+ return data.value;
832
+ }
833
+ const nodes = traverseFilter((node) => node.title.toLowerCase().includes(keyword.value.toLowerCase()), data.value);
834
+ return nodes;
835
+ });
836
+ const handleCheckedKeys = (keys) => {
837
+ if (!keyword.value) {
838
+ props.onCheckedKeysChange(keys);
839
+ return;
840
+ }
841
+ const nextKeys = keys.concat(props.checkedKeys.filter((key) => !keys.includes(key) && !filteredTreeData.value.some((item) => item.key === key)));
842
+ props.onCheckedKeysChange(nextKeys);
843
+ };
844
+ const slots = {
845
+ title: (node) => {
846
+ return createVNode(TreeItem, {
847
+ "node": node,
848
+ "draggable": draggable.value
849
+ }, null);
850
+ }
851
+ };
852
+ return () => {
853
+ return createVNode("div", {
854
+ "class": "transfer-tree-container"
855
+ }, [createVNode("div", {
856
+ "class": "search-container"
857
+ }, [createVNode(Input, {
858
+ "placeholder": t("sys.component.fieldTransfer.pleaseSearch"),
859
+ "value": keyword.value,
860
+ "onChange": (e) => keyword.value = e.target.value,
861
+ "allowClear": true,
862
+ "prefix": createVNode("i", {
863
+ "class": ["search-icon iconfont", " icon-sousuo"]
864
+ }, null)
865
+ }, null)]), createVNode("div", {
866
+ "class": "tree-wrapper",
867
+ "style": {
868
+ overflow: "auto"
869
+ }
870
+ }, [filteredTreeData.value.length === 0 ? createVNode("div", {
871
+ "class": "empty-container"
872
+ }, [createVNode(Empty, {
873
+ "image": keyword.value ? noSearchData : noData,
874
+ "description": keyword.value ? t("sys.component.fieldTransfer.noSearchData") : t("sys.component.fieldTransfer.noData")
875
+ }, null)]) : createVNode(Tree, {
876
+ "showIcon": true,
877
+ "showLine": {
878
+ showLeafIcon: false
879
+ },
880
+ "blockNode": true,
881
+ "draggable": draggable.value ? {
882
+ icon: false
883
+ } : false,
884
+ "checkedKeys": props.checkedKeys,
885
+ "onCheck": handleCheckedKeys,
886
+ "multiple": true,
887
+ "checkable": true,
888
+ "icon": (node) => createVNode("i", {
889
+ "class": ["iconfont", node.isLeaf ? FieldIconMap[node.fieldType] || "icon-zidingyi" : "icon-file"]
890
+ }, null),
891
+ "onSelect": (_, {
892
+ selectedNodes
893
+ }) => {
894
+ handleCheckedKeys(selectedNodes.map((node) => node.key));
895
+ },
896
+ "treeData": filteredTreeData.value,
897
+ "onDrop": ({
898
+ node,
899
+ dragNode,
900
+ dropToGap,
901
+ dropPosition
902
+ }) => {
903
+ const dropPos = node.pos.split("-");
904
+ const dir = dropPosition - Number(dropPos[dropPos.length - 1]);
905
+ if (dropToGap) {
906
+ props.treeObj.moveTreeNode(dragNode.dataRef, node.dataRef, dir);
907
+ }
908
+ }
909
+ }, slots)])]);
910
+ };
911
+ }
912
+ });
913
+ const AdvancedTransfer = /* @__PURE__ */ defineComponent({
914
+ name: "AdvancedTransfer",
915
+ props: {
916
+ /** 数据源 */
917
+ dataSource: {
918
+ type: Array,
919
+ required: true
920
+ },
921
+ /** useTreeData */
922
+ treeObj: {
923
+ type: Object,
924
+ required: true
925
+ },
926
+ /** 穿梭框标题集合 */
927
+ titles: {
928
+ type: Array,
929
+ default() {
930
+ return [t("sys.component.fieldTransfer.noSelect"), t("sys.component.fieldTransfer.select")];
931
+ }
932
+ }
933
+ },
934
+ setup(props) {
935
+ const {
936
+ dataSource: propDataSource
937
+ } = toRefs(props);
938
+ const {
939
+ remainCount: propRemainCount,
940
+ leafKeys,
941
+ multiple
942
+ } = toRefs(props.treeObj);
943
+ const checkedKeys = ref([]);
944
+ const targetCheckedKeys = ref([]);
945
+ const keyword = ref();
946
+ const hasSearchData = ref(true);
947
+ const remainCount = computed(() => {
948
+ return propRemainCount.value - checkedKeys.value.length;
949
+ });
950
+ const dataSource = computed(() => {
951
+ return propDataSource.value.map((item) => {
952
+ return {
953
+ ...item,
954
+ disabled: item.disabled || remainCount.value === 0 && !checkedKeys.value.includes(item.id) && !leafKeys.value.includes(item.id)
955
+ };
956
+ });
957
+ });
958
+ watch(multiple, (val) => {
959
+ if (val) {
960
+ targetCheckedKeys.value = [];
961
+ }
962
+ }, {
963
+ immediate: true
964
+ });
965
+ const onSelectChange = (sourceSelectedKeys, targetSelectedKeys) => {
966
+ const actualSelectedKeys = sourceSelectedKeys.slice(0, propRemainCount.value);
967
+ checkedKeys.value = actualSelectedKeys;
968
+ targetCheckedKeys.value = targetSelectedKeys;
969
+ };
970
+ const onChange = (_, direction, moveKeys) => {
971
+ if (direction === "right") {
972
+ const nodes = moveKeys.map((key) => dataSource.value.find((item) => item.id === key)).map((item) => ({
973
+ key: item.id,
974
+ title: item.displayLabel,
975
+ type: "field",
976
+ fieldType: item.type,
977
+ isLeaf: true
978
+ }));
979
+ props.treeObj.addTreeNodes(nodes, props.treeObj.getContainerNode());
980
+ } else {
981
+ props.treeObj.removeTreeNodesByKeys(moveKeys);
982
+ }
983
+ };
984
+ const setTargetCheckedKeys = (keys) => {
985
+ targetCheckedKeys.value = keys;
986
+ };
987
+ const leftOption = computed(() => {
988
+ return dataSource.value.filter((item) => !leafKeys.value.includes(item.id));
989
+ });
990
+ const filteredLeftOption = computed(() => {
991
+ if (!keyword.value) {
992
+ return leftOption.value;
993
+ }
994
+ return leftOption.value.filter((item) => item.displayLabel.toLowerCase().includes(keyword.value.toLowerCase()));
995
+ });
996
+ const onSearch = (direction, value) => {
997
+ if (direction === "left") {
998
+ keyword.value = value;
999
+ hasSearchData.value = filteredLeftOption.value.length > 0;
1000
+ }
1001
+ };
1002
+ const renderItem = ({
1003
+ type,
1004
+ displayLabel
1005
+ }) => {
1006
+ return createVNode("div", {
1007
+ "class": "field-title",
1008
+ "title": displayLabel
1009
+ }, [createVNode("i", {
1010
+ "class": ["field-icon iconfont", FieldIconMap[type] || "icon-zidingyi"]
1011
+ }, null), displayLabel]);
1012
+ };
1013
+ const slots = {
1014
+ children: ({
1015
+ direction
1016
+ }) => {
1017
+ if (direction === "right") {
1018
+ return createVNode(TransferTree, {
1019
+ "treeObj": props.treeObj,
1020
+ "checkedKeys": targetCheckedKeys.value,
1021
+ "onCheckedKeysChange": setTargetCheckedKeys
1022
+ }, null);
1023
+ }
1024
+ if (direction === "left" && (!leftOption.value.length || !filteredLeftOption.value.length)) {
1025
+ return createVNode("div", {
1026
+ "class": "empty-container"
1027
+ }, [createVNode(Empty, {
1028
+ "image": leftOption.value.length ? noSearchData : noData,
1029
+ "description": leftOption.value.length ? t("sys.component.fieldTransfer.noSearchData") : t("sys.component.fieldTransfer.noData")
1030
+ }, null)]);
1031
+ }
1032
+ }
1033
+ };
1034
+ return () => {
1035
+ return createVNode("div", {
1036
+ "class": "advanced-transfer-container"
1037
+ }, [createVNode(Transfer, {
1038
+ "dataSource": dataSource.value,
1039
+ "targetKeys": leafKeys.value,
1040
+ "selectedKeys": checkedKeys.value.concat(targetCheckedKeys.value),
1041
+ "showSearch": true,
1042
+ "filterOption": (text, item) => item.displayLabel.includes(text),
1043
+ "oneWay": multiple.value,
1044
+ "titles": props.titles,
1045
+ "locale": {
1046
+ itemUnit: t("sys.component.fieldTransfer.term"),
1047
+ itemsUnit: t("sys.component.fieldTransfer.term"),
1048
+ searchPlaceholder: t("sys.component.fieldTransfer.pleaseSearch"),
1049
+ selectAll: t("sys.component.fieldTransfer.selectAllData"),
1050
+ selectInvert: t("sys.component.fieldTransfer.invertCurrentPage")
1051
+ },
1052
+ "rowKey": (item) => item.id,
1053
+ "onChange": onChange,
1054
+ "onSearch": onSearch,
1055
+ "onSelectChange": onSelectChange,
1056
+ "render": renderItem
1057
+ }, slots)]);
1058
+ };
1059
+ }
1060
+ });
1061
+ const AdvancedColumnSetting = /* @__PURE__ */ defineComponent({
1062
+ name: "AdvancedColumnSetting",
1063
+ props: {
1064
+ /** 所有字段 */
1065
+ fields: {
1066
+ type: Array,
1067
+ required: true
1068
+ },
1069
+ /** 树形数据 */
1070
+ columns: Array,
1071
+ /** 是否启用多级表头 */
1072
+ useMultiLevelTHead: Boolean,
1073
+ /** 是否刷新数据 */
1074
+ isResetData: Boolean,
1075
+ /** 是否支持拖拽 */
1076
+ draggable: Boolean,
1077
+ /** 穿梭框标题集合 */
1078
+ titles: Array,
1079
+ maxEnableCount: Number,
1080
+ /** 回调方法 */
1081
+ onColumnsChange: Function
1082
+ },
1083
+ setup(props, {
1084
+ expose
1085
+ }) {
1086
+ const treeObj = useTreeData(props.useMultiLevelTHead, props.isResetData, props.draggable, props.maxEnableCount, props.onColumnsChange);
1087
+ watch([() => props.columns, () => props.fields], () => {
1088
+ treeObj.onChangeTree(props.columns ?? [], props.fields);
1089
+ }, {
1090
+ deep: true,
1091
+ immediate: true
1092
+ });
1093
+ const getResult = () => {
1094
+ return {
1095
+ useMultiLevelTHead: treeObj.multiple,
1096
+ headerTree: treeObj.data
1097
+ };
1098
+ };
1099
+ expose({
1100
+ getResult
1101
+ });
1102
+ return () => {
1103
+ return createVNode(AdvancedTransfer, {
1104
+ "dataSource": props.fields,
1105
+ "treeObj": treeObj,
1106
+ "titles": props.titles
1107
+ }, null);
1108
+ };
1109
+ }
1110
+ });
1111
+ const FieldTransfer = /* @__PURE__ */ defineComponent({
1112
+ name: "FieldTransfer",
1113
+ props: {
1114
+ objFields: Object,
1115
+ /** 选中的字段数组 */
1116
+ value: Array,
1117
+ /** 穿梭框标题集合 */
1118
+ titles: Array,
1119
+ maxEnableCount: Number,
1120
+ disabledFieldKey: Array,
1121
+ /** 包含的字段 */
1122
+ containFieldType: Array,
1123
+ /** 包含的字段Key */
1124
+ containFieldKey: Array,
1125
+ /**包含的字段创建类型 */
1126
+ containCreateType: Array,
1127
+ /** 排除的字段Key */
1128
+ excludeFieldKey: Array,
1129
+ /** 排除的字段 */
1130
+ excludeFieldType: Array,
1131
+ /**过滤函数 */
1132
+ filterFieldByFunction: Function,
1133
+ onChange: Function,
1134
+ /** 是否支持拖拽 */
1135
+ draggable: Boolean
1136
+ },
1137
+ setup(props) {
1138
+ const {
1139
+ getFieldCodeChainStr
1140
+ } = useModelField(SCOPEINFO.FIELD_LIST);
1141
+ const result = computed(() => {
1142
+ const fields = [];
1143
+ const _fieldMap = {};
1144
+ const processColumns = [];
1145
+ if (!props.objFields?.modelKey) {
1146
+ return {
1147
+ fields,
1148
+ fieldMap: _fieldMap,
1149
+ columns: processColumns,
1150
+ otherFieldCount: 0
1151
+ };
1152
+ }
1153
+ if (Array.isArray(props.value)) {
1154
+ props.value.forEach((item) => {
1155
+ const key = `${item.fieldCodeChain}!${item.key}`;
1156
+ _fieldMap[key] = item;
1157
+ if (item.fieldCodeChain !== (props.objFields?.fieldCodeChain ?? props.objFields?.modelKey)) {
1158
+ fields.push({
1159
+ id: key,
1160
+ modelKey: item.modelKey,
1161
+ displayLabel: item.name,
1162
+ type: item.type,
1163
+ disabled: item.disabled
1164
+ });
1165
+ }
1166
+ processColumns.push({
1167
+ id: key,
1168
+ title: item.name,
1169
+ tooltip: getFieldCodeChainStr(item.fieldCodeChain, item.name),
1170
+ fieldType: item.type,
1171
+ type: "field"
1172
+ // disableEditable: false,
1173
+ // 非当前对象的字段,需要把checkbox禁用掉,不能选择
1174
+ // disableCheckbox: false
1175
+ });
1176
+ });
1177
+ }
1178
+ props.objFields.fieldList.filter((flist) => {
1179
+ if (typeof props.filterFieldByFunction === "function" && !props.filterFieldByFunction(flist)) {
1180
+ return false;
1181
+ }
1182
+ if (props.containCreateType && flist.createType && !props.containCreateType.includes(flist.createType)) {
1183
+ return false;
1184
+ }
1185
+ if (props.containFieldType || props.containFieldKey) {
1186
+ const isContainFieldType = (props.containFieldType ?? []).includes(flist.type);
1187
+ const isContainFieldKey = (props.containFieldKey ?? []).includes(flist.key);
1188
+ return isContainFieldType || isContainFieldKey;
1189
+ }
1190
+ if (props.excludeFieldType || props.excludeFieldKey) {
1191
+ const isExcludeFieldType = (props.excludeFieldType ?? []).includes(flist.type);
1192
+ const isExcludeFieldKey = (props.excludeFieldKey ?? []).includes(flist.key);
1193
+ return !(isExcludeFieldType || isExcludeFieldKey);
1194
+ }
1195
+ return true;
1196
+ }).forEach((fl) => {
1197
+ const key = `${props.objFields?.fieldCodeChain}!${fl.key}`;
1198
+ if (isEmpty(_fieldMap[key])) {
1199
+ _fieldMap[key] = {
1200
+ ...toRaw(fl),
1201
+ isFieldModel: props.objFields?.isFieldModel,
1202
+ fieldCodeChain: props.objFields?.fieldCodeChain
1203
+ };
1204
+ }
1205
+ const isMainModel = props?.objFields?.fieldCodeChain && JSON.parse(props.objFields?.fieldCodeChain).modelKey && JSON.parse(props.objFields?.fieldCodeChain).modelKey === props.objFields?.modelKey;
1206
+ fields.push({
1207
+ id: key,
1208
+ modelKey: fl.modelKey,
1209
+ displayLabel: fl.name,
1210
+ type: fl.type,
1211
+ disabled: !!(isMainModel && props.disabledFieldKey?.includes(fl.key))
1212
+ });
1213
+ });
1214
+ const otherFieldCount = processColumns.reduce((pre, cur) => {
1215
+ return pre + (cur.disableCheckbox ? 1 : 0);
1216
+ }, 0);
1217
+ return {
1218
+ fields,
1219
+ fieldMap: _fieldMap,
1220
+ columns: processColumns,
1221
+ otherFieldCount
1222
+ };
1223
+ });
1224
+ const handleColumnsChange = (columns) => {
1225
+ if (typeof props?.onChange === "function") {
1226
+ props?.onChange(columns.map((column) => result.value.fieldMap[column.id]));
1227
+ }
1228
+ };
1229
+ return () => {
1230
+ return createVNode(AdvancedColumnSetting, {
1231
+ "key": props.objFields?.fieldCodeChain ?? props.objFields?.modelKey,
1232
+ "fields": result.value.fields,
1233
+ "columns": result.value.columns,
1234
+ "useMultiLevelTHead": false,
1235
+ "titles": props.titles,
1236
+ "maxEnableCount": props.maxEnableCount,
1237
+ "draggable": props.draggable,
1238
+ "onColumnsChange": handleColumnsChange
1239
+ }, null);
1240
+ };
1241
+ }
1242
+ });
1243
+ const _hoisted_1$4 = { class: "field-transfer-container" };
1244
+ const _hoisted_2$3 = {
1245
+ key: 0,
1246
+ class: "h26px leading-26px bg-[#3168EC]/[0.1] pl-10px mb-10px"
1247
+ };
1248
+ const _hoisted_3$2 = { class: "text-[#666] ml-6px" };
1249
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1250
+ __name: "field-transfer-modal",
1251
+ props: {
1252
+ modelKey: {},
1253
+ isShowCascader: { type: Boolean },
1254
+ modalTitle: {},
1255
+ data: { default: () => [] },
1256
+ titles: {},
1257
+ containFieldType: {},
1258
+ containFieldKey: {},
1259
+ disabledFieldKey: {},
1260
+ excludeFieldKey: {},
1261
+ excludeFieldType: {},
1262
+ containCreateType: {},
1263
+ filterFieldByFunction: {},
1264
+ maxEnableCount: {},
1265
+ modalKey: {},
1266
+ width: {},
1267
+ draggable: { type: Boolean, default: true },
1268
+ childParentModelKey: {},
1269
+ destroyCallback: {},
1270
+ saveCallback: {},
1271
+ promptMessage: {}
1272
+ },
1273
+ setup(__props, { expose: __expose }) {
1274
+ const props = __props;
1275
+ const visible = ref(false);
1276
+ const getContainer = () => props.modalKey && document.querySelector(`#${props.modalKey}`) || document.body;
1277
+ const {
1278
+ loadObjInfo,
1279
+ modelFieldMap: modelFieldMap2,
1280
+ getModelFieldInfo,
1281
+ clearSelectInfo,
1282
+ clearObjInfo,
1283
+ selectObj: selectObj2
1284
+ } = useModelField(SCOPEINFO.FIELD_LIST);
1285
+ const objFieldList = ref([]);
1286
+ const isLoad = ref(false);
1287
+ const init = async () => {
1288
+ objFieldList.value = [];
1289
+ clearSelectInfo();
1290
+ clearObjInfo();
1291
+ isLoad.value = false;
1292
+ if (props.modelKey) {
1293
+ isLoad.value = !!await loadObjInfo(props.modelKey, {
1294
+ isShowCascader: props.isShowCascader,
1295
+ childParentModelKey: props.childParentModelKey
1296
+ });
1297
+ }
1298
+ };
1299
+ watch(
1300
+ [() => props.data, () => modelFieldMap2.value, isLoad],
1301
+ () => {
1302
+ if (isEmpty(modelFieldMap2.value)) return;
1303
+ objFieldList.value = props.data?.map((item) => {
1304
+ const obj = pick(item, [
1305
+ "bindFieldKey",
1306
+ "isFieldModel",
1307
+ "modelKey",
1308
+ "fieldCodeChain",
1309
+ "key",
1310
+ "field",
1311
+ "disabled",
1312
+ "_dfValue",
1313
+ "id"
1314
+ ]);
1315
+ const fieldKey = obj.field || obj.key || obj._dfValue || obj.id;
1316
+ const fieldInfo = getModelFieldInfo(obj.modelKey || props.modelKey, fieldKey);
1317
+ if (!fieldInfo) return null;
1318
+ return {
1319
+ ...fieldInfo,
1320
+ bindFieldKey: obj.bindFieldKey,
1321
+ isFieldModel: obj.isFieldModel || false,
1322
+ disabled: obj.disabled || false,
1323
+ fieldCodeChain: obj.fieldCodeChain ?? JSON.stringify({ modelKey: fieldInfo.modelKey || props.modelKey })
1324
+ };
1325
+ }).filter(Boolean) ?? [];
1326
+ },
1327
+ { immediate: true, deep: true }
1328
+ );
1329
+ const setObjFieldList = (list) => {
1330
+ objFieldList.value = list;
1331
+ };
1332
+ const handleClose = () => {
1333
+ visible.value = false;
1334
+ objFieldList.value = [];
1335
+ clearSelectInfo();
1336
+ clearObjInfo();
1337
+ isLoad.value = false;
1338
+ props.destroyCallback?.();
1339
+ };
1340
+ const handleOk = () => {
1341
+ props.saveCallback?.({
1342
+ objFieldList: toRaw(objFieldList.value)
1343
+ });
1344
+ handleClose();
1345
+ };
1346
+ const open = async () => {
1347
+ visible.value = true;
1348
+ await init();
1349
+ };
1350
+ __expose({ open });
1351
+ return (_ctx, _cache) => {
1352
+ const _component_a_spin = resolveComponent("a-spin");
1353
+ const _component_a_modal = resolveComponent("a-modal");
1354
+ return openBlock(), createBlock(_component_a_modal, {
1355
+ visible: visible.value,
1356
+ "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => visible.value = $event),
1357
+ title: __props.modalTitle || unref(t)("sys.component.fieldTransfer.defaultModalTitle"),
1358
+ width: __props.width || 740,
1359
+ maskClosable: false,
1360
+ destroyOnClose: true,
1361
+ centered: "",
1362
+ getContainer,
1363
+ wrapClassName: "excel-field-transfer-modal",
1364
+ onOk: handleOk,
1365
+ onCancel: handleClose
1366
+ }, {
1367
+ default: withCtx(() => [
1368
+ createElementVNode("div", _hoisted_1$4, [
1369
+ createVNode(_component_a_spin, {
1370
+ spinning: !isLoad.value
1371
+ }, {
1372
+ default: withCtx(() => [
1373
+ __props.promptMessage ? (openBlock(), createElementBlock("div", _hoisted_2$3, [
1374
+ _cache[1] || (_cache[1] = createElementVNode("i", { class: "iconfont icon-guanyu text-[#3168EC]" }, null, -1)),
1375
+ createElementVNode("span", _hoisted_3$2, toDisplayString(__props.promptMessage), 1)
1376
+ ])) : createCommentVNode("", true),
1377
+ createVNode(unref(FieldCascader), {
1378
+ class: "mb-8px",
1379
+ isShowCascader: __props.isShowCascader,
1380
+ scope: unref(SCOPEINFO).FIELD_LIST
1381
+ }, null, 8, ["isShowCascader", "scope"]),
1382
+ createVNode(unref(FieldTransfer), {
1383
+ titles: __props.titles,
1384
+ maxEnableCount: __props.maxEnableCount,
1385
+ draggable: __props.draggable,
1386
+ disabledFieldKey: __props.disabledFieldKey,
1387
+ containFieldKey: __props.containFieldKey,
1388
+ containFieldType: __props.containFieldType,
1389
+ excludeFieldKey: __props.excludeFieldKey,
1390
+ containCreateType: __props.containCreateType,
1391
+ excludeFieldType: __props.excludeFieldType,
1392
+ filterFieldByFunction: __props.filterFieldByFunction,
1393
+ objFields: isLoad.value ? unref(selectObj2) : {},
1394
+ value: objFieldList.value,
1395
+ onChange: setObjFieldList
1396
+ }, null, 8, ["titles", "maxEnableCount", "draggable", "disabledFieldKey", "containFieldKey", "containFieldType", "excludeFieldKey", "containCreateType", "excludeFieldType", "filterFieldByFunction", "objFields", "value"])
1397
+ ]),
1398
+ _: 1
1399
+ }, 8, ["spinning"])
1400
+ ])
1401
+ ]),
1402
+ _: 1
1403
+ }, 8, ["visible", "title", "width"]);
1404
+ };
1405
+ }
1406
+ });
1407
+ const FieldTransferModal = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-46961d2f"]]);
1408
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1409
+ ...{ inheritAttrs: false },
1410
+ __name: "modal-wrapper",
1411
+ setup(__props, { expose: __expose }) {
1412
+ const modalRef = ref();
1413
+ const open = () => {
1414
+ modalRef.value?.open();
1415
+ };
1416
+ __expose({ open });
1417
+ return (_ctx, _cache) => {
1418
+ return openBlock(), createBlock(FieldTransferModal, mergeProps({
1419
+ ref_key: "modalRef",
1420
+ ref: modalRef
1421
+ }, _ctx.$attrs), null, 16);
1422
+ };
1423
+ }
1424
+ });
1425
+ function useFieldTransfer() {
1426
+ let app = null;
1427
+ let instance = null;
1428
+ const modalKey = ref("");
1429
+ function open(params) {
1430
+ let props;
1431
+ let target = document.body;
1432
+ if (has(params, "target") || has(params, "props")) {
1433
+ const options = params;
1434
+ props = options.props || {};
1435
+ target = options.target || document.body;
1436
+ } else {
1437
+ props = params;
1438
+ }
1439
+ modalKey.value = `field-transfer-modal-${Math.random().toString(16).substring(8)}`;
1440
+ const propsData = {
1441
+ width: 740,
1442
+ modalKey: unref(modalKey),
1443
+ destroyCallback: close,
1444
+ ...props
1445
+ };
1446
+ if (!app) {
1447
+ const container = document.createElement("div");
1448
+ container.id = unref(modalKey);
1449
+ const t2 = unref(target);
1450
+ t2?.appendChild(container);
1451
+ app = createApp(_sfc_main$4, propsData);
1452
+ registerDialogComp(app);
1453
+ app.config.globalProperties.$t = window.$t ?? ((key) => key);
1454
+ instance = app.mount(container);
1455
+ }
1456
+ instance.open();
1457
+ }
1458
+ function close() {
1459
+ document.querySelector(`#${unref(modalKey)}`).remove();
1460
+ if (app) {
1461
+ app.unmount();
1462
+ app = null;
1463
+ instance = null;
1464
+ }
1465
+ }
1466
+ return {
1467
+ open,
1468
+ close
1469
+ };
1470
+ }
1471
+ const _hoisted_1$3 = { class: "display-fields-editor" };
1472
+ const _hoisted_2$2 = { class: "editor-tip" };
1473
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1474
+ __name: "display-fields-editor",
1475
+ props: {
1476
+ displayFields: { default: () => [] },
1477
+ fieldMeta: {},
1478
+ disabled: { type: Boolean }
1479
+ },
1480
+ emits: ["update:displayFields"],
1481
+ setup(__props, { emit: __emit }) {
1482
+ const props = __props;
1483
+ const emit = __emit;
1484
+ const { open } = useFieldTransfer();
1485
+ const { modelMetaMap } = useModelFields();
1486
+ const selectorInfo = computed(() => {
1487
+ const options = [];
1488
+ const values = [];
1489
+ props.displayFields.forEach(({ _dfLabel: label, _dfValue: value }) => {
1490
+ options.push({ label, value });
1491
+ values.push(value);
1492
+ });
1493
+ return { options, values };
1494
+ });
1495
+ const unremovableKeys = computed(() => {
1496
+ return props.displayFields.filter((o) => o._dfUnremovable).map((o) => o._dfValue);
1497
+ });
1498
+ const handleOpenModal = () => {
1499
+ open({
1500
+ modelKey: props.fieldMeta.refModelKey,
1501
+ modalTitle: $t("sys.selectDisplayFields"),
1502
+ isShowCascader: true,
1503
+ draggable: true,
1504
+ data: props.displayFields,
1505
+ maxEnableCount: 99999,
1506
+ excludeFieldType: [],
1507
+ excludeFieldKey: [],
1508
+ filterFieldByFunction: () => true,
1509
+ saveCallback: ({ objFieldList }) => {
1510
+ const fields = (objFieldList || []).map((f) => ({
1511
+ ...f,
1512
+ _dfLabel: f.name,
1513
+ _dfValue: f.id
1514
+ }));
1515
+ emit("update:displayFields", fields);
1516
+ }
1517
+ });
1518
+ };
1519
+ const handleSelectChange = (remainingKeys) => {
1520
+ const options = props.displayFields.filter((o) => {
1521
+ return o._dfUnremovable ? true : remainingKeys.includes(o._dfValue);
1522
+ });
1523
+ emit("update:displayFields", options);
1524
+ };
1525
+ const handleTagClose = (val) => {
1526
+ const options = props.displayFields.filter((o) => o._dfValue !== val);
1527
+ emit("update:displayFields", options);
1528
+ };
1529
+ onMounted(() => {
1530
+ const { displayFields, fieldMeta } = props;
1531
+ if (displayFields?.length) return;
1532
+ const { fieldType, refModelKey } = fieldMeta;
1533
+ if (!refModelKey) return;
1534
+ const fields = modelMetaMap.value[refModelKey]?.fields || [];
1535
+ const mapKey = {
1536
+ [FIELD_TYPE.DEVICE]: "device",
1537
+ [FIELD_TYPE.MATERIAL_NO]: "materialNo"
1538
+ }[fieldType];
1539
+ const defaultKeys = mapKey ? DEFAULT_DISPLAY_FIELDS_MAP[mapKey] : void 0;
1540
+ if (!defaultKeys?.length) return;
1541
+ const options = fields.filter((f) => defaultKeys.includes(f.key)).map((f) => ({
1542
+ ...f,
1543
+ _dfLabel: f.name,
1544
+ _dfValue: f.id
1545
+ }));
1546
+ emit("update:displayFields", options);
1547
+ });
1548
+ return (_ctx, _cache) => {
1549
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [
1550
+ createVNode(FormItem, {
1551
+ label: `${_ctx.$t("sys.displayFields")}`,
1552
+ inline: false
1553
+ }, {
1554
+ default: withCtx(() => [
1555
+ createVNode(unref(Select), {
1556
+ allowClear: "",
1557
+ size: "small",
1558
+ mode: "multiple",
1559
+ "max-tag-count": "responsive",
1560
+ open: false,
1561
+ showSearch: false,
1562
+ options: selectorInfo.value.options,
1563
+ value: selectorInfo.value.values,
1564
+ placeholder: _ctx.$t("sys.chooseText"),
1565
+ disabled: __props.disabled,
1566
+ onFocus: handleOpenModal,
1567
+ onChange: handleSelectChange
1568
+ }, {
1569
+ tagRender: withCtx(({ label, value }) => [
1570
+ createVNode(unref(Tag), {
1571
+ disabled: __props.disabled,
1572
+ closable: !unremovableKeys.value.includes(value),
1573
+ onClose: ($event) => handleTagClose(value)
1574
+ }, {
1575
+ default: withCtx(() => [
1576
+ createTextVNode(toDisplayString(label), 1)
1577
+ ]),
1578
+ _: 2
1579
+ }, 1032, ["disabled", "closable", "onClose"])
1580
+ ]),
1581
+ _: 1
1582
+ }, 8, ["options", "value", "placeholder", "disabled"])
1583
+ ]),
1584
+ _: 1
1585
+ }, 8, ["label"]),
1586
+ createElementVNode("div", _hoisted_2$2, toDisplayString(_ctx.$t("sys.displayFieldsTip")), 1)
1587
+ ]);
1588
+ };
1589
+ }
1590
+ });
1591
+ const DisplayFieldsEditor = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-7f7e0eed"]]);
1592
+ const DEFAULT_SEARCHABLE_FIELDS = [
1593
+ FIELD_TYPE.PRODUCT,
1594
+ FIELD_TYPE.SCRAP_MATERIAL,
1595
+ FIELD_TYPE.DEVICE,
1596
+ FIELD_TYPE.MATERIAL_NO,
1597
+ FIELD_TYPE.RELATED_LOT_NO,
1598
+ FIELD_TYPE.SCRAP_MATERIAL_NO,
1599
+ FIELD_TYPE.MATERIAL_LOT
1600
+ ];
1601
+ const SEARCHABLE_FIELDS = [
1602
+ ...DEFAULT_SEARCHABLE_FIELDS,
1603
+ FIELD_TYPE.REF,
1604
+ FIELD_TYPE.MFG_ORDER,
1605
+ FIELD_TYPE.ROUTING_OPERATION,
1606
+ FIELD_TYPE.NOT_GOOD_GROUP,
1607
+ FIELD_TYPE.NOT_GOOD_REASON,
1608
+ FIELD_TYPE.SCRAP_GROUP,
1609
+ FIELD_TYPE.SCRAP_REASON,
1610
+ FIELD_TYPE.SHOPFLOOR,
1611
+ FIELD_TYPE.MODEL_RELATION,
1612
+ FIELD_TYPE.WAREHOUSE,
1613
+ FIELD_TYPE.STERILIZE_LOT,
1614
+ FIELD_TYPE.STERILIZE_BATCH
1615
+ ];
1616
+ const getRealFieldType = (fieldMeta) => {
1617
+ const { fieldType, bizType } = fieldMeta;
1618
+ if (bizType === FIELD_TYPE_TRACE.STERILIZE_LOT) {
1619
+ return FIELD_TYPE.STERILIZE_LOT;
1620
+ }
1621
+ return fieldType;
1622
+ };
1623
+ const getIsSearchableField = (fieldMeta) => {
1624
+ const type = getRealFieldType(fieldMeta);
1625
+ return SEARCHABLE_FIELDS.includes(type);
1626
+ };
1627
+ const getSearchableFieldIsDefaultOpen = (fieldMeta) => {
1628
+ const type = getRealFieldType(fieldMeta);
1629
+ return DEFAULT_SEARCHABLE_FIELDS.includes(type);
1630
+ };
1631
+ const _hoisted_1$2 = { class: "quick-search-editor" };
1632
+ const _hoisted_2$1 = { class: "flex justify-end" };
1633
+ const _hoisted_3$1 = {
1634
+ key: 1,
1635
+ class: "editor-tip"
1636
+ };
1637
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1638
+ __name: "quick-search-editor",
1639
+ props: {
1640
+ fieldMeta: {},
1641
+ searchable: { type: Boolean },
1642
+ searchField: {},
1643
+ disabled: { type: Boolean }
1644
+ },
1645
+ emits: ["update:searchable", "update:searchField"],
1646
+ setup(__props, { emit: __emit }) {
1647
+ const { modelMetaMap } = useModelFields();
1648
+ const filterFields = [
1649
+ FIELD_TYPE.LONG_TEXT,
1650
+ FIELD_TYPE.TEXT,
1651
+ FIELD_TYPE.DECIMAL,
1652
+ FIELD_TYPE.DOUBLE,
1653
+ FIELD_TYPE.LONG,
1654
+ FIELD_TYPE.INTEGER
1655
+ ];
1656
+ const filterTypes = [CreateType.USER_DEFINED, CreateType.BUILTIN];
1657
+ const props = __props;
1658
+ const emit = __emit;
1659
+ const currentModelMeta = computed(() => {
1660
+ return modelMetaMap.value[props.fieldMeta.refModelKey];
1661
+ });
1662
+ const fieldOptions = computed(() => {
1663
+ return currentModelMeta.value?.fields?.filter((i) => {
1664
+ return checkKeyByList(i.type, filterFields) && checkKeyByList(i.createType, filterTypes);
1665
+ }).map((i) => {
1666
+ const exp = SEARCH_TYPE[i.type]?.noRangDefaultExp;
1667
+ return {
1668
+ name: i.name,
1669
+ key: exp ? i.key + "." + exp : i.key
1670
+ };
1671
+ });
1672
+ });
1673
+ const checkKeyByList = (key, filters) => {
1674
+ return !filters || filters.indexOf(key) > -1;
1675
+ };
1676
+ const _searchable = computed({
1677
+ get() {
1678
+ return isBoolean(props.searchable) ? props.searchable : getSearchableFieldIsDefaultOpen(props.fieldMeta);
1679
+ },
1680
+ set(v) {
1681
+ emit("update:searchable", v);
1682
+ }
1683
+ });
1684
+ const _searchField = computed({
1685
+ get() {
1686
+ return props.searchField || [];
1687
+ },
1688
+ set(v) {
1689
+ emit("update:searchField", v);
1690
+ }
1691
+ });
1692
+ return (_ctx, _cache) => {
1693
+ const _component_a_switch = resolveComponent("a-switch");
1694
+ const _component_a_select = resolveComponent("a-select");
1695
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
1696
+ createVNode(FormItem, {
1697
+ label: _ctx.$t("sys.search")
1698
+ }, {
1699
+ default: withCtx(() => [
1700
+ createElementVNode("div", _hoisted_2$1, [
1701
+ createVNode(_component_a_switch, {
1702
+ size: "small",
1703
+ disabled: __props.disabled,
1704
+ checked: _searchable.value,
1705
+ "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => _searchable.value = $event)
1706
+ }, null, 8, ["disabled", "checked"])
1707
+ ])
1708
+ ]),
1709
+ _: 1
1710
+ }, 8, ["label"]),
1711
+ _searchable.value ? (openBlock(), createBlock(FormItem, {
1712
+ key: 0,
1713
+ inline: false,
1714
+ label: _ctx.$t("sys.pageDesigner.quickSearchFields")
1715
+ }, {
1716
+ default: withCtx(() => [
1717
+ createVNode(_component_a_select, {
1718
+ value: _searchField.value,
1719
+ "onUpdate:value": _cache[1] || (_cache[1] = ($event) => _searchField.value = $event),
1720
+ allowClear: "",
1721
+ mode: "multiple",
1722
+ maxTagCount: 5,
1723
+ maxTagTextLength: 6,
1724
+ fieldNames: { label: "name", value: "key" },
1725
+ optionFilterProp: "name",
1726
+ options: fieldOptions.value,
1727
+ size: "small",
1728
+ disabled: __props.disabled,
1729
+ placeholder: _ctx.$t("sys.inputText")
1730
+ }, null, 8, ["value", "options", "disabled", "placeholder"])
1731
+ ]),
1732
+ _: 1
1733
+ }, 8, ["label"])) : createCommentVNode("", true),
1734
+ _searchable.value ? (openBlock(), createElementBlock("div", _hoisted_3$1, toDisplayString(_ctx.$t("sys.quickSearchFieldsTip")), 1)) : createCommentVNode("", true)
1735
+ ]);
1736
+ };
1737
+ }
1738
+ });
1739
+ const QuickSearchEditor = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-c6f3fe45"]]);
1740
+ const _hoisted_1$1 = { class: "px-16px py-16px" };
1741
+ const _hoisted_2 = { class: "px24px mt20px" };
1742
+ const _hoisted_3 = { class: "text-[#8B8B8B]" };
1743
+ const _hoisted_4 = { class: "atuofill-field-icon" };
1744
+ const _hoisted_5 = { class: "form-table-label" };
1745
+ const _hoisted_6 = ["onClick"];
1746
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1747
+ __name: "autofill-rules-modal",
1748
+ props: {
1749
+ fieldMeta: {},
1750
+ rules: {}
1751
+ },
1752
+ emits: ["ok", "register"],
1753
+ setup(__props, { emit: __emit }) {
1754
+ const $t2 = window.$t;
1755
+ const { modelMetaMap, subTableFieldModel, getFieldMeta } = useModelFields();
1756
+ const props = __props;
1757
+ const {
1758
+ refModelKey,
1759
+ model: modelKey,
1760
+ fieldType,
1761
+ field: currentFieldKey
1762
+ } = toRefs(props.fieldMeta);
1763
+ const isSubTableTrigger = computed(
1764
+ () => !!(props.fieldMeta.subFieldKey || props.fieldMeta.subModelKey)
1765
+ );
1766
+ const refFieldName = computed(() => {
1767
+ return getFieldMeta(props.fieldMeta).name;
1768
+ });
1769
+ const autofillForm = ref();
1770
+ const formState = reactive({
1771
+ rules: [
1772
+ {
1773
+ fromField: void 0,
1774
+ toField: void 0
1775
+ }
1776
+ ]
1777
+ });
1778
+ const bindFiledList = ref([]);
1779
+ const allFieldInFormWithout = ref([]);
1780
+ const formModelName = ref("");
1781
+ ref($t2("sys.pageDesigner.addRule"));
1782
+ const excludeFieldType = [
1783
+ FIELD_TYPE.IMAGE,
1784
+ FIELD_TYPE.ATTACHMENT,
1785
+ FIELD_TYPE.SERIAL,
1786
+ FIELD_TYPE.MASTERSLAVE,
1787
+ FIELD_TYPE.ENUM,
1788
+ FIELD_TYPE.ENUM_MULTI,
1789
+ FIELD_TYPE.REF,
1790
+ FIELD_TYPE.REF_MULTI,
1791
+ FIELD_TYPE.RDO_REF,
1792
+ FIELD_TYPE.EXPRESSION,
1793
+ FIELD_TYPE.EXPRESSION_CONDITION,
1794
+ FIELD_TYPE.AGG,
1795
+ FIELD_TYPE.ESOP,
1796
+ FIELD_TYPE.TRANSACTION,
1797
+ FIELD_TYPE.LABEL_TEMPLATE,
1798
+ FIELD_TYPE.LABEL_TEMPLATE_REF,
1799
+ FIELD_TYPE.DOCUMENT_TEMPLATE,
1800
+ FIELD_TYPE.SERIALRULE,
1801
+ FIELD_TYPE.PRINTER,
1802
+ FIELD_TYPE.MESSAGE_TMPL,
1803
+ FIELD_TYPE.RANGE_USER,
1804
+ FIELD_TYPE.SIGNATURE,
1805
+ FIELD_TYPE.ONLINE_FORM_TEMPLATE,
1806
+ FIELD_TYPE.E_DHR_TEMPLATE,
1807
+ FIELD_TYPE.DATA_TABLE_FORMULA,
1808
+ FIELD_TYPE.READONLYCMP,
1809
+ FIELD_TYPE.BOOLEAN
1810
+ ];
1811
+ onMounted(async () => {
1812
+ const modelDetail = await api.apaas.modelMeta.getDetail({
1813
+ modelKey: modelKey.value
1814
+ });
1815
+ allFieldInFormWithout.value = modelDetail?.fieldMetaList?.filter((d) => d.createType !== "SYSTEM") || [];
1816
+ formModelName.value = modelDetail?.name || "";
1817
+ props.rules && onDataReceive({ rules: props.rules });
1818
+ });
1819
+ const fromFieldTreeData = computed(() => {
1820
+ const children = bindFiledList.value.filter((f) => f.key !== "id_").map((f) => ({
1821
+ ...f,
1822
+ value: f.key,
1823
+ label: f.name,
1824
+ type: f.type
1825
+ }));
1826
+ return [
1827
+ {
1828
+ value: "id_",
1829
+ label: refFieldName.value,
1830
+ type: fieldType.value,
1831
+ selectable: true,
1832
+ children
1833
+ }
1834
+ ];
1835
+ });
1836
+ const currentModelName = computed(() => {
1837
+ return modelMetaMap.value[modelKey.value]?.meta?.name || formModelName.value || "";
1838
+ });
1839
+ const filterCompatibleFields = (fromField, fieldList) => {
1840
+ if (!fromField) return [];
1841
+ if (fromField === "id_") {
1842
+ const sourceType = fieldType.value;
1843
+ const fieldConfig2 = transformMappingField4Auto(sourceType) ?? transformMappingField4Auto(FIELD_TYPE.REF);
1844
+ let list2 = fieldList.filter((v) => fieldConfig2?.filterArr?.includes(v.type));
1845
+ if (fieldConfig2?.equal !== void 0 && fieldConfig2?.equal) {
1846
+ list2 = list2.filter((i) => i.bindInfo === refModelKey.value);
1847
+ }
1848
+ return list2;
1849
+ }
1850
+ const record = bindFiledList.value.find((i) => i.key === fromField);
1851
+ if (record?.modelKey === "em_product" && record?.key === "uom_id_") {
1852
+ return fieldList.filter(
1853
+ (e) => [FIELD_TYPE.TEXT, FIELD_TYPE.LONG_TEXT, FIELD_TYPE.REF].includes(e.type)
1854
+ );
1855
+ }
1856
+ const fieldConfig = transformMappingField4Auto(record?.type);
1857
+ let list = fieldList.filter((v) => fieldConfig?.filterArr?.includes(v.type));
1858
+ if (fieldConfig?.equal !== void 0 && fieldConfig?.equal) {
1859
+ list = list.filter((i) => i.bindInfo === record?.bindInfo);
1860
+ }
1861
+ if ([FIELD_TYPE.TEXT, FIELD_TYPE.LONG_TEXT].includes(record?.type)) {
1862
+ list = list.filter((i) => !["ref_model_key_", "ref_field_key_"].includes(i.key));
1863
+ }
1864
+ return list;
1865
+ };
1866
+ const buildSubTableFieldValue = (fromSubTableField, fieldKey) => {
1867
+ return `${fromSubTableField}::${fieldKey}`;
1868
+ };
1869
+ const parseSubTableFieldValue = (value) => {
1870
+ const [fromSubTableField, fieldKey] = value.split("::");
1871
+ return { fromSubTableField, fieldKey };
1872
+ };
1873
+ const stripSubTableRuleFields = (rules) => {
1874
+ if (!isSubTableTrigger.value) return rules;
1875
+ return rules.map(({ fromSubTableField: _omit, ...rest }) => rest);
1876
+ };
1877
+ const selrender = (item) => {
1878
+ return () => h("span", { class: "atuofill-field-icon" }, [
1879
+ h("i", { class: ["iconfont", FieldIconMap[item.type] || "text"] }),
1880
+ item.name
1881
+ ]);
1882
+ };
1883
+ const filterOption = (input, option) => {
1884
+ return option.name?.includes(input?.trim());
1885
+ };
1886
+ const getTargetFieldOptions = (fromField) => {
1887
+ if (!fromField) return [];
1888
+ let fields = filterCompatibleFields(fromField, allFieldInFormWithout.value);
1889
+ if (fromField === "id_" && currentFieldKey.value) {
1890
+ fields = fields.filter((f) => f.key !== currentFieldKey.value);
1891
+ }
1892
+ return fields.map((f) => ({
1893
+ ...f,
1894
+ value: f.key,
1895
+ label: selrender(f)
1896
+ }));
1897
+ };
1898
+ const getTargetFieldValue = (element) => {
1899
+ if (!element.toField) return void 0;
1900
+ if (element.fromSubTableField) {
1901
+ return buildSubTableFieldValue(element.fromSubTableField, element.toField);
1902
+ }
1903
+ return element.toField;
1904
+ };
1905
+ const getTargetFieldTreeData = (fromField) => {
1906
+ if (!fromField) return [];
1907
+ let mainFields = filterCompatibleFields(fromField, allFieldInFormWithout.value);
1908
+ if (fromField === "id_" && currentFieldKey.value) {
1909
+ mainFields = mainFields.filter((f) => f.key !== currentFieldKey.value);
1910
+ }
1911
+ const treeData = [];
1912
+ if (mainFields.length) {
1913
+ treeData.push({
1914
+ value: `__main__${modelKey.value}`,
1915
+ label: currentModelName.value,
1916
+ selectable: false,
1917
+ children: mainFields.map((f) => ({
1918
+ ...f,
1919
+ value: f.key,
1920
+ label: f.name,
1921
+ type: f.type
1922
+ }))
1923
+ });
1924
+ }
1925
+ subTableFieldModel.value.forEach(({ field, model }) => {
1926
+ if (model.subModelType === SubTableType.STOCKTAKE || model.subModelType === SubTableType.ALLOCATE) {
1927
+ return;
1928
+ }
1929
+ const subModelFields = modelMetaMap.value[field.bindInfo]?.fields?.filter((d) => d.createType !== "SYSTEM") || [];
1930
+ const compatibleFields = filterCompatibleFields(fromField, subModelFields);
1931
+ if (!compatibleFields.length) return;
1932
+ treeData.push({
1933
+ value: `__sub__${field.key}`,
1934
+ label: `${model.name}(${getSubTableTypeLabel(model.subModelType)})`,
1935
+ selectable: false,
1936
+ children: compatibleFields.map((f) => ({
1937
+ ...f,
1938
+ value: buildSubTableFieldValue(field.key, f.key),
1939
+ label: f.name,
1940
+ type: f.type,
1941
+ fromSubTableField: field.key
1942
+ }))
1943
+ });
1944
+ });
1945
+ return treeData;
1946
+ };
1947
+ const getSubTableTypeLabel = (subModelType) => {
1948
+ const subTypeMap = {
1949
+ INSPECTION: "CHECK",
1950
+ MATERIAL_CONSUME: "MATERIAL_CONSUMPTION",
1951
+ PRODUCTION_CONTAINER_LIST_4_STERILIZATION: "STERILIZE_BATCH"
1952
+ };
1953
+ const subTableType = subTypeMap[subModelType || ""] || subModelType || "DEFAULT";
1954
+ return $t2(`sys.onlineForm.subTableType.${subTableType}`);
1955
+ };
1956
+ const onDataReceive = async ({ rules }) => {
1957
+ formState.rules = stripSubTableRuleFields(cloneDeep(rules));
1958
+ if (formState.rules?.length == 0) {
1959
+ formState.rules.push({
1960
+ fromField: void 0,
1961
+ toField: void 0
1962
+ });
1963
+ }
1964
+ const res = await api.apaas.modelMeta.getDetail({
1965
+ modelKey: refModelKey.value
1966
+ });
1967
+ bindFiledList.value = res?.fieldMetaList?.filter((d) => d.createType !== "SYSTEM")?.filter(
1968
+ (i) => i.modelKey === "em_product" && i.key === "uom_id_" || !excludeFieldType.includes(i.type)
1969
+ ) || [];
1970
+ };
1971
+ const removeRule = (index) => {
1972
+ formState.rules.splice(index, 1);
1973
+ };
1974
+ const addRule = () => {
1975
+ formState.rules.push({
1976
+ fromField: void 0,
1977
+ toField: void 0
1978
+ });
1979
+ };
1980
+ useModal(async () => {
1981
+ if (formState.rules.length > 1 || formState.rules[0].fromField || formState.rules[0].toField) {
1982
+ await autofillForm.value.validate();
1983
+ return {
1984
+ ok: true,
1985
+ data: stripSubTableRuleFields(formState.rules)
1986
+ };
1987
+ }
1988
+ });
1989
+ const handleFromChange = (element) => {
1990
+ element.toField = null;
1991
+ element.toFieldType = void 0;
1992
+ element.fromSubTableField = void 0;
1993
+ };
1994
+ const handleFlatTargetChange = (val, element) => {
1995
+ if (!val) {
1996
+ element.toField = void 0;
1997
+ element.toFieldType = void 0;
1998
+ element.fromSubTableField = void 0;
1999
+ return;
2000
+ }
2001
+ const record = allFieldInFormWithout.value.find((f) => f.key === val);
2002
+ element.toField = val;
2003
+ element.toFieldType = record?.type;
2004
+ element.fromSubTableField = void 0;
2005
+ };
2006
+ const handleTargetChange = (val, extra, element) => {
2007
+ if (!val) {
2008
+ element.toField = void 0;
2009
+ element.toFieldType = void 0;
2010
+ element.fromSubTableField = void 0;
2011
+ return;
2012
+ }
2013
+ if (String(val).includes("::")) {
2014
+ const { fromSubTableField, fieldKey } = parseSubTableFieldValue(String(val));
2015
+ const node2 = extra?.triggerNode?.props || extra?.triggerNode;
2016
+ const nodeProps2 = node2?.dataRef || node2;
2017
+ element.toField = fieldKey;
2018
+ element.fromSubTableField = fromSubTableField;
2019
+ element.toFieldType = nodeProps2?.type;
2020
+ return;
2021
+ }
2022
+ const node = extra?.triggerNode?.props || extra?.triggerNode;
2023
+ const nodeProps = node?.dataRef || node;
2024
+ element.toField = val;
2025
+ element.fromSubTableField = void 0;
2026
+ element.toFieldType = nodeProps?.type;
2027
+ };
2028
+ return (_ctx, _cache) => {
2029
+ const _component_a_button = resolveComponent("a-button");
2030
+ const _component_a_col = resolveComponent("a-col");
2031
+ const _component_a_row = resolveComponent("a-row");
2032
+ const _component_a_tree_select = resolveComponent("a-tree-select");
2033
+ const _component_a_form_item = resolveComponent("a-form-item");
2034
+ const _component_a_select = resolveComponent("a-select");
2035
+ const _component_a_form = resolveComponent("a-form");
2036
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
2037
+ createVNode(_component_a_button, {
2038
+ type: "link",
2039
+ onClick: addRule,
2040
+ class: "mv10px pl24px mt4px"
2041
+ }, {
2042
+ default: withCtx(() => [
2043
+ _cache[0] || (_cache[0] = createElementVNode("i", {
2044
+ class: "iconfont icon-chuangjian mr8px",
2045
+ style: { "vertical-align": "-1px" }
2046
+ }, null, -1)),
2047
+ createTextVNode(" " + toDisplayString(unref($t2)("sys.pageDesigner.fillRules")), 1)
2048
+ ]),
2049
+ _: 1
2050
+ }),
2051
+ createElementVNode("div", _hoisted_2, [
2052
+ createVNode(_component_a_row, {
2053
+ gutter: 4,
2054
+ style: { "margin-bottom": "4px", "padding": "0 10px" },
2055
+ class: "text-[#1A1D23]"
2056
+ }, {
2057
+ default: withCtx(() => [
2058
+ createVNode(_component_a_col, { span: 9 }, {
2059
+ default: withCtx(() => [
2060
+ createTextVNode(toDisplayString(unref($t2)("sys.pageDesigner.valueSource")), 1)
2061
+ ]),
2062
+ _: 1
2063
+ }),
2064
+ createVNode(_component_a_col, { span: 4 }),
2065
+ createVNode(_component_a_col, { span: 11 }, {
2066
+ default: withCtx(() => [
2067
+ createTextVNode(toDisplayString(unref($t2)("sys.pageDesigner.targetField")) + " ", 1),
2068
+ createElementVNode("span", _hoisted_3, " ( " + toDisplayString(unref($t2)("sys.pageDesigner.onlineFormFieldInForm")) + ") ", 1)
2069
+ ]),
2070
+ _: 1
2071
+ })
2072
+ ]),
2073
+ _: 1
2074
+ }),
2075
+ createVNode(_component_a_form, {
2076
+ ref_key: "autofillForm",
2077
+ ref: autofillForm,
2078
+ model: formState,
2079
+ "wrapper-col": { span: 24 },
2080
+ autocomplete: "off",
2081
+ "hide-required-mark": "",
2082
+ colon: false
2083
+ }, {
2084
+ default: withCtx(() => [
2085
+ createVNode(unref(draggableComponent), {
2086
+ list: formState.rules,
2087
+ handle: ".cursor-move",
2088
+ "drag-class": "drawing-drag",
2089
+ "item-key": "id"
2090
+ }, {
2091
+ item: withCtx(({ element, index }) => [
2092
+ (openBlock(), createBlock(_component_a_row, {
2093
+ gutter: 4,
2094
+ key: index,
2095
+ class: "rule-item"
2096
+ }, {
2097
+ default: withCtx(() => [
2098
+ createVNode(_component_a_col, { span: 9 }, {
2099
+ default: withCtx(() => [
2100
+ createVNode(_component_a_form_item, {
2101
+ label: "",
2102
+ name: ["rules", index, "fromField"],
2103
+ rules: [
2104
+ {
2105
+ required: true,
2106
+ message: unref($t2)("sys.chooseTextTip", {
2107
+ name: unref($t2)("sys.field")
2108
+ })
2109
+ }
2110
+ ]
2111
+ }, {
2112
+ default: withCtx(() => [
2113
+ createVNode(_component_a_tree_select, {
2114
+ value: element.fromField,
2115
+ "onUpdate:value": ($event) => element.fromField = $event,
2116
+ placeholder: unref($t2)("sys.chooseText") + unref($t2)("sys.field"),
2117
+ "show-search": "",
2118
+ "tree-default-expand-all": "",
2119
+ "allow-clear": "",
2120
+ "tree-node-filter-prop": "label",
2121
+ "dropdown-class-name": "gct-custom-select-dropdown autofill-from-field-tree",
2122
+ "tree-data": fromFieldTreeData.value,
2123
+ onChange: ($event) => handleFromChange(element)
2124
+ }, {
2125
+ title: withCtx((data) => [
2126
+ createElementVNode("span", _hoisted_4, [
2127
+ data.type ? (openBlock(), createElementBlock("i", {
2128
+ key: 0,
2129
+ class: normalizeClass(["iconfont", unref(FieldIconMap)[data.type] || "text"])
2130
+ }, null, 2)) : createCommentVNode("", true),
2131
+ createTextVNode(" " + toDisplayString(data.label), 1)
2132
+ ])
2133
+ ]),
2134
+ _: 1
2135
+ }, 8, ["value", "onUpdate:value", "placeholder", "tree-data", "onChange"])
2136
+ ]),
2137
+ _: 2
2138
+ }, 1032, ["name", "rules"])
2139
+ ]),
2140
+ _: 2
2141
+ }, 1024),
2142
+ createVNode(_component_a_col, { span: 4 }, {
2143
+ default: withCtx(() => [
2144
+ createElementVNode("span", _hoisted_5, toDisplayString(unref($t2)("sys.pageDesigner.valueFillTip")), 1)
2145
+ ]),
2146
+ _: 1
2147
+ }),
2148
+ createVNode(_component_a_col, { span: 10 }, {
2149
+ default: withCtx(() => [
2150
+ createVNode(_component_a_form_item, {
2151
+ label: "",
2152
+ name: ["rules", index, "toField"],
2153
+ rules: [
2154
+ {
2155
+ required: true,
2156
+ message: unref($t2)("sys.chooseTextTip", {
2157
+ name: unref($t2)("sys.field")
2158
+ })
2159
+ }
2160
+ ]
2161
+ }, {
2162
+ default: withCtx(() => [
2163
+ isSubTableTrigger.value ? (openBlock(), createBlock(_component_a_select, {
2164
+ key: 0,
2165
+ value: element.toField,
2166
+ "onUpdate:value": ($event) => element.toField = $event,
2167
+ placeholder: unref($t2)("sys.chooseText") + unref($t2)("sys.field"),
2168
+ "show-search": "",
2169
+ "allow-clear": "",
2170
+ "filter-option": filterOption,
2171
+ "option-label-prop": "label",
2172
+ "dropdown-class-name": "gct-custom-select-dropdown",
2173
+ options: getTargetFieldOptions(element.fromField),
2174
+ onChange: (val) => handleFlatTargetChange(val, element)
2175
+ }, null, 8, ["value", "onUpdate:value", "placeholder", "options", "onChange"])) : (openBlock(), createBlock(_component_a_tree_select, {
2176
+ key: 1,
2177
+ value: getTargetFieldValue(element),
2178
+ placeholder: unref($t2)("sys.chooseText") + unref($t2)("sys.field"),
2179
+ "show-search": "",
2180
+ "tree-default-expand-all": "",
2181
+ "allow-clear": "",
2182
+ "tree-node-filter-prop": "label",
2183
+ "dropdown-class-name": "gct-custom-select-dropdown autofill-to-field-tree",
2184
+ "tree-data": getTargetFieldTreeData(element.fromField),
2185
+ onChange: (val, _label, extra) => handleTargetChange(val, extra, element)
2186
+ }, {
2187
+ title: withCtx((data) => [
2188
+ createElementVNode("span", {
2189
+ class: normalizeClass([
2190
+ "atuofill-field-icon",
2191
+ { "text-[#8B8B8B]": data.selectable === false }
2192
+ ])
2193
+ }, [
2194
+ data.type ? (openBlock(), createElementBlock("i", {
2195
+ key: 0,
2196
+ class: normalizeClass(["iconfont", unref(FieldIconMap)[data.type] || "text"])
2197
+ }, null, 2)) : createCommentVNode("", true),
2198
+ createTextVNode(" " + toDisplayString(data.label), 1)
2199
+ ], 2)
2200
+ ]),
2201
+ _: 1
2202
+ }, 8, ["value", "placeholder", "tree-data", "onChange"]))
2203
+ ]),
2204
+ _: 2
2205
+ }, 1032, ["name", "rules"])
2206
+ ]),
2207
+ _: 2
2208
+ }, 1024),
2209
+ createVNode(_component_a_col, {
2210
+ span: 1,
2211
+ class: "rule-flex-col"
2212
+ }, {
2213
+ default: withCtx(() => [
2214
+ withDirectives(createElementVNode("i", {
2215
+ class: "iconfont icon-shanchu2 text-[#797A7D] error-gct-hover cursor-pointer",
2216
+ onClick: ($event) => removeRule(index)
2217
+ }, null, 8, _hoisted_6), [
2218
+ [vShow, formState.rules.length > 1]
2219
+ ])
2220
+ ]),
2221
+ _: 2
2222
+ }, 1024)
2223
+ ]),
2224
+ _: 2
2225
+ }, 1024))
2226
+ ]),
2227
+ _: 1
2228
+ }, 8, ["list"])
2229
+ ]),
2230
+ _: 1
2231
+ }, 8, ["model"])
2232
+ ])
2233
+ ]);
2234
+ };
2235
+ }
2236
+ });
2237
+ const AutofillRulesModal = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-ddb9f6cd"]]);
2238
+ const _hoisted_1 = { class: "inpt-box" };
2239
+ const _sfc_main = /* @__PURE__ */ defineComponent({
2240
+ __name: "ref-autofill-editor",
2241
+ props: {
2242
+ fieldMeta: {},
2243
+ autofillRules: {},
2244
+ enableAutofill: { type: Boolean },
2245
+ disabled: { type: Boolean }
2246
+ },
2247
+ emits: ["update:autofillRules", "update:enableAutofill"],
2248
+ setup(__props, { emit: __emit }) {
2249
+ const props = __props;
2250
+ const emit = __emit;
2251
+ const detail = computed({
2252
+ get() {
2253
+ return props.autofillRules;
2254
+ },
2255
+ set(v) {
2256
+ emit("update:autofillRules", v);
2257
+ }
2258
+ });
2259
+ const enabled = computed({
2260
+ get() {
2261
+ return props.enableAutofill ?? !!props.autofillRules?.length;
2262
+ },
2263
+ set(v) {
2264
+ emit("update:enableAutofill", v);
2265
+ }
2266
+ });
2267
+ const btnAttrs = computed(() => {
2268
+ return detail.value?.length ? { type: "primary", block: true } : { type: "primary", ghost: true, block: true };
2269
+ });
2270
+ const handleFilterClick = async () => {
2271
+ const result = await window.NocodeAdapter.utils.overlay.modal(
2272
+ AutofillRulesModal,
2273
+ {
2274
+ fieldMeta: props.fieldMeta,
2275
+ rules: detail.value
2276
+ },
2277
+ {
2278
+ title: !detail.value?.length ? $t("sys.pageDesigner.addRule") : $t("sys.pageDesigner.editRule"),
2279
+ centered: true,
2280
+ width: 640
2281
+ }
2282
+ );
2283
+ if (result.ok && result.data) {
2284
+ emit("update:autofillRules", cloneDeep(result.data));
2285
+ }
2286
+ };
2287
+ return (_ctx, _cache) => {
2288
+ const _component_a_switch = resolveComponent("a-switch");
2289
+ const _component_a_button = resolveComponent("a-button");
2290
+ return openBlock(), createElementBlock("div", {
2291
+ class: normalizeClass(["ref-autofill-editor", { "is-off": !enabled.value }])
2292
+ }, [
2293
+ createVNode(FormItem, {
2294
+ inline: false,
2295
+ label: _ctx.$t("sys.pageDesigner.dataFill")
2296
+ }, {
2297
+ extra: withCtx(() => [
2298
+ createVNode(_component_a_switch, {
2299
+ size: "small",
2300
+ checked: enabled.value,
2301
+ "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => enabled.value = $event),
2302
+ disabled: __props.disabled
2303
+ }, null, 8, ["checked", "disabled"])
2304
+ ]),
2305
+ default: withCtx(() => [
2306
+ enabled.value ? (openBlock(), createElementBlock("div", {
2307
+ key: 0,
2308
+ class: "data-filter-box",
2309
+ onClick: handleFilterClick
2310
+ }, [
2311
+ createElementVNode("div", _hoisted_1, [
2312
+ createVNode(_component_a_button, mergeProps(btnAttrs.value, { disabled: __props.disabled }), {
2313
+ default: withCtx(() => [
2314
+ createTextVNode(toDisplayString(detail.value?.length ? _ctx.$t("sys.pageDesigner.editRule") : _ctx.$t("sys.pageDesigner.addRule")), 1)
2315
+ ]),
2316
+ _: 1
2317
+ }, 16, ["disabled"])
2318
+ ])
2319
+ ])) : createCommentVNode("", true)
2320
+ ]),
2321
+ _: 1
2322
+ }, 8, ["label"])
2323
+ ], 2);
2324
+ };
2325
+ }
2326
+ });
2327
+ const RefAutofillEditor = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-63d8b3b0"]]);
2328
+ export {
2329
+ DisplayFieldsEditor as D,
2330
+ QuickSearchEditor as Q,
2331
+ RefAutofillEditor as R,
2332
+ getIsSearchableField as g
2333
+ };