@gct-paas/excel 0.1.18 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/{VueVideoPlayer-D3u-ZHom.js → VueVideoPlayer-DePpm38H.js} +2 -2
  2. package/dist/{agg-design-D7CkIPCA.js → agg-design-hreKYp5a.js} +1 -1
  3. package/dist/{agg-props-DNNO9ucx.js → agg-props-CCDh2o6E.js} +1 -1
  4. package/dist/{agg-style-v_94dzX8.js → agg-style-Bh8vdJvs.js} +1 -1
  5. package/dist/{align-editor-COpCDpFf.js → align-editor-DpDuDOMr.js} +1 -1
  6. package/dist/{attach-fields-editor-o_7W-2sr.js → attach-fields-editor-BeGxW6de.js} +2 -2
  7. package/dist/{barcode-design-CvsGGAio.js → barcode-design-CFVTZNAy.js} +3 -2
  8. package/dist/base/index.es.js +63 -138
  9. package/dist/base-font-editor-laOkjBe1.js +119 -0
  10. package/dist/{boolean-design-Hc8Es5l1.js → boolean-design-DIlM9Nrt.js} +3 -2
  11. package/dist/{boolean-props-CGamLGXA.js → boolean-props-CGuFs72-.js} +3 -3
  12. package/dist/{boolean-style-m-WuSO6S.js → boolean-style-BUz6sBUN.js} +5 -4
  13. package/dist/cell-upload-Dw3t7ZKJ.js +33 -0
  14. package/dist/{date-range-editor-BZkhUU-x.js → date-range-editor-rXaru-8n.js} +3 -2
  15. package/dist/{date-time-design-B_oFOcft.js → date-time-design-HfjWK3SA.js} +1 -1
  16. package/dist/{date-time-props-hGnSGQKc.js → date-time-props-C_cG-6wI.js} +3 -3
  17. package/dist/{date-time-style-CGKG8i3K.js → date-time-style-BeCDP5TE.js} +1 -1
  18. package/dist/{decimal-design-B5Artgk6.js → decimal-design-DzLpjX9N.js} +7 -3
  19. package/dist/{decimal-display-mode-C4XUezoP.js → decimal-display-mode-BhD1cOOe.js} +3 -2
  20. package/dist/{decimal-props-Q37uOcWl.js → decimal-props-C6f22071.js} +5 -4
  21. package/dist/{decimal-style-C2CnGPVG.js → decimal-style-XN3rLM2j.js} +1 -1
  22. package/dist/{default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-DTnbLBVW.js → default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-CJC4kBNh.js} +3 -2
  23. package/dist/{diagonal-design-CyUvkcvp.js → diagonal-design-Dh0qhgSq.js} +2 -2
  24. package/dist/{double-design-D_ipWcRm.js → double-design-XHHlqmEp.js} +6 -3
  25. package/dist/{double-props-D4FGbfe2.js → double-props-Cvi36aBN.js} +4 -4
  26. package/dist/{double-style-BbD_6_Os.js → double-style-Dkoth54S.js} +1 -1
  27. package/dist/{document-sub-table-action-Cy6Rd8OS.js → dynamic-table-action-mGrBO_bn.js} +661 -553
  28. package/dist/{document-quick-fillin.vue_vue_type_style_index_0_scoped_a18386ab_lang-DKTGEH4Q.js → dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-OPdk2I5p.js} +366 -147
  29. package/dist/{edit.utils-CXmmCnxE-BK4QnSP-.js → edit.utils-CXmmCnxE-DeDBtyJd.js} +1 -1
  30. package/dist/{enum-design-lOufLU6Z.js → enum-design-CAOAFdI6.js} +13 -7
  31. package/dist/{enum-props-brKRP5Uz.js → enum-props-CBN-AvBS.js} +4 -4
  32. package/dist/{enum-style-BQQHkDUD.js → enum-style-cOiK44Ae.js} +37 -9
  33. package/dist/excel.css +1049 -407
  34. package/dist/{exceljs.min-CUwGyNAf.js → exceljs.min-pnja99MZ.js} +2 -2
  35. package/dist/{expression-design-BPEci3dg.js → expression-design-CqgcK8eO.js} +1 -1
  36. package/dist/{expression-props-Cvg-9V-B.js → expression-props-wXQOIrMY.js} +1 -1
  37. package/dist/{expression-style-Dv3Hl8lm.js → expression-style-BzavnOux.js} +1 -1
  38. package/dist/{file-design-BIzi6cpq.js → file-design-BSQknhnY.js} +1 -1
  39. package/dist/{file-props-oV2U7bpO.js → file-props-CwiuBVHW.js} +2 -2
  40. package/dist/{file-style-CZrxokgP.js → file-style-CG4a3THb.js} +1 -1
  41. package/dist/{font-editor-B41KgpWJ.js → font-editor--CgwL-wF.js} +3 -3
  42. package/dist/{form-annotation-controller-CdNmJKv-.js → form-annotation-controller-DDDyHAwe.js} +3 -2
  43. package/dist/{image-design-DMfBfSkD.js → image-design-CwPjfDxf.js} +2 -2
  44. package/dist/{image-design-C3FEtW6i.js → image-design-D1D0SN5W.js} +3 -2
  45. package/dist/{image-props-DPibJk7n.js → image-props-C4E9gMsG.js} +1 -1
  46. package/dist/{image-style-DLudd5Vt.js → image-style-CIb1mi13.js} +1 -1
  47. package/dist/{index-B1r6-Uxf.js → index-0mxMA4vZ.js} +2 -1
  48. package/dist/{index-B7lz2J6V.js → index-A2MbCZtS.js} +10 -3
  49. package/dist/{index-DJIzgsog.js → index-B2ZNkbGm.js} +2 -1
  50. package/dist/{index-rXMzwu77.js → index-B2tFXR--.js} +5 -2
  51. package/dist/{index-Cp7mC3Qt.js → index-B7DDYlzm.js} +2 -1
  52. package/dist/{index-BiNVmD5v.js → index-BAlLZmfu.js} +2 -1
  53. package/dist/{index-yih5hGsL.js → index-BG_CEaW0.js} +3537 -2743
  54. package/dist/{index-B8ey1U_N.js → index-BJYSmTeW.js} +2 -1
  55. package/dist/{index-D7fFpHaN.js → index-BKoXo3Ha.js} +2 -1
  56. package/dist/{index-oSIIidoF.js → index-BSHUFede.js} +2 -1
  57. package/dist/{index-C5bYd42n.js → index-Bi4hE4Ye.js} +3 -2
  58. package/dist/{index-vZZ5q2xJ.js → index-BneV2tbp.js} +2 -1
  59. package/dist/{index-D0YZX_c7.js → index-ByTKu8n6.js} +2 -1
  60. package/dist/{index-DHVK-P9J.js → index-CGSTq7zN.js} +2 -1
  61. package/dist/{index-DFoELlwd.js → index-CIl6oWcB.js} +2 -1
  62. package/dist/{index-I_FRG0Ho.js → index-CKqLoN9r.js} +2 -1
  63. package/dist/{index-CtiiIgjs.js → index-CWpratsK.js} +50 -106
  64. package/dist/{index-B1CG-75q.js → index-CcmNFTia.js} +3 -2
  65. package/dist/{index-BgZkpQKh.js → index-CeMBvNee.js} +2 -1
  66. package/dist/{index-BOis3jsA.js → index-Cgka0WmQ.js} +4 -1
  67. package/dist/{index-CUIGN7Rt.js → index-D0XkCn_x.js} +2 -1
  68. package/dist/{index-DsNRjyQD.js → index-D0n65ya-.js} +2 -1
  69. package/dist/{index-DAqYc474.js → index-D9tUJAeF.js} +2 -1
  70. package/dist/{index-Cjz0GLDq.js → index-DLoQlQk6.js} +3 -2
  71. package/dist/{index-DDpNgyvD.js → index-DOj318_B.js} +3 -2
  72. package/dist/{index-DPQkm6_v.js → index-Dl2FIifp.js} +2 -1
  73. package/dist/{index-Bppcm2iQ.js → index-Drf0Arr4.js} +2 -1
  74. package/dist/{index-Bvjplnz_.js → index-HHF5iK-6.js} +6 -1
  75. package/dist/{index-B8wKNUsK.js → index-Hg59RKKE.js} +2 -1
  76. package/dist/{index-BZ1jj7Nu.js → index-PMDIMwwL.js} +2 -1
  77. package/dist/{index-DH_EZe8p.js → index-PWmkKVZV.js} +2 -1
  78. package/dist/{index-CkYbgRrH.js → index-UUDS4nmS.js} +2 -1
  79. package/dist/{index-Cn_c3-eW.js → index-ZrNXSw4w.js} +2 -1
  80. package/dist/index.es.js +44 -44
  81. package/dist/{integer-design-DhkNa9IA.js → integer-design-Cy9c0fzI.js} +6 -3
  82. package/dist/{integer-props-c_aQpjaT.js → integer-props-DFDOIb2a.js} +5 -4
  83. package/dist/{integer-style-CS5v7Bhq.js → integer-style-CfIX5ReH.js} +1 -1
  84. package/dist/{mb-render-Cs7LUxzk.js → mb-render-D_uumPQr.js} +1 -1
  85. package/dist/{number-input-ex-CwKIHfk1.js → number-input-ex-CWci0pCj.js} +12 -4
  86. package/dist/{org-props-BcbW62Jg.js → org-props-B5dk289u.js} +3 -2
  87. package/dist/{org-style-Bk7mgML3.js → org-style-BoSDPuw9.js} +1 -1
  88. package/dist/{pagination-design-B1KyJUAG.js → pagination-design-Ci4wxUIk.js} +3 -2
  89. package/dist/paper-widget-design-BilYU9rh.js +4 -0
  90. package/dist/{qrcode-design-EafZURDZ.js → qrcode-design-CJ9R5DIn.js} +1 -1
  91. package/dist/ref-autofill-editor-B4KDvHhR.js +2334 -0
  92. package/dist/{ref-props-C95McyZp.js → ref-props-CwDGepT3.js} +17 -9
  93. package/dist/{ref-style-BxdvOF-4.js → ref-style-B35CsOQO.js} +1 -1
  94. package/dist/{regex-editor-BGukvOEI.js → regex-editor-CIVvr_Lx.js} +2 -2
  95. package/dist/{revo-grid.entry-BeRVTVKO.js → revo-grid.entry-DeWzC35s.js} +1 -1
  96. package/dist/{revogr-attribution_7.entry-CHtbU2lV.js → revogr-attribution_7.entry-BJZ-twfj.js} +3 -3
  97. package/dist/{revogr-clipboard_3.entry-DnvQ-Rl7.js → revogr-clipboard_3.entry-DkgRA8qw.js} +2 -2
  98. package/dist/{revogr-data_4.entry-DLRSuaN8.js → revogr-data_4.entry-BZLzvcbo.js} +2 -2
  99. package/dist/{revogr-filter-panel.entry-BDkhY-74.js → revogr-filter-panel.entry-zGvhshno.js} +1 -1
  100. package/dist/{select-render-type-editor.vue_vue_type_script_setup_true_lang-ChESg_eM.js → select-render-type-editor.vue_vue_type_script_setup_true_lang-Asn5-ZRz.js} +3 -2
  101. package/dist/{serialnumber-design-CRaym9J-.js → serialnumber-design-CYFU5TVt.js} +1 -1
  102. package/dist/shared/index.es.js +16 -16
  103. package/dist/{signature-design-BJHfLDNV.js → signature-design-Cwi0cZOI.js} +5 -2
  104. package/dist/{signature-props-B9hfppHh.js → signature-props-cQRB8U8x.js} +3 -3
  105. package/dist/{signature-style-DM4rqHnN.js → signature-style-C90NsLxg.js} +1 -1
  106. package/dist/{single-field-drop-eClQhTSv.js → single-field-drop-BFhQs-3z.js} +2 -2
  107. package/dist/{size-editor-BjlCmEWf.js → size-editor-Dx3y_otg.js} +1 -1
  108. package/dist/src/nocode-base/src/components/border-td.vue.d.ts +1 -0
  109. package/dist/src/nocode-base/src/components/{document-quick-fill-modal.vue.d.ts → document-quick-fill/dynamic-quick-fill-modal.vue.d.ts} +1 -1
  110. package/dist/src/nocode-base/src/components/{document-quick-fillin.vue.d.ts → document-quick-fill/fixed-quick-fill-modal.vue.d.ts} +10 -4
  111. package/dist/src/nocode-base/src/components/document-quick-fill/quick-fill.util.d.ts +22 -0
  112. package/dist/src/nocode-base/src/components/document-sub-table-action/fixed-table-action.vue.d.ts +17 -0
  113. package/dist/src/nocode-base/src/components/index.d.ts +4 -3
  114. package/dist/src/nocode-base/src/hooks/material-consume/mc-render.d.ts +3 -1
  115. package/dist/src/nocode-base/src/hooks/useRenderPageFactory.d.ts +3 -0
  116. package/dist/src/nocode-base/src/types/common/base.d.ts +2 -0
  117. package/dist/src/nocode-base/src/types/fields/i-enum-select.d.ts +2 -0
  118. package/dist/src/nocode-base/src/types/fields/i-select.d.ts +4 -0
  119. package/dist/src/nocode-base/src/types/fields/i-trace.d.ts +7 -0
  120. package/dist/src/nocode-base/src/types/render/mc-render.d.ts +3 -1
  121. package/dist/src/nocode-base/src/types/render/sub-table-render.d.ts +3 -1
  122. package/dist/src/nocode-base/src/types/widgets/i-sub-table.d.ts +4 -0
  123. package/dist/src/nocode-web-render/src/hooks/userFormPrint.d.ts +2 -0
  124. package/dist/src/nocode-web-render/src/render/index.d.ts +2 -2
  125. package/dist/src/nocode-web-render/src/render/sub-table/common/scan-modal.vue.d.ts +3 -1
  126. package/dist/src/nocode-web-render/src/render/sub-table/common/sub-table-render.d.ts +3 -1
  127. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/index.d.ts +1 -2
  128. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/mc-web-render.d.ts +3 -1
  129. package/dist/src/online-form/src/utils/field.enum.d.ts +3 -2
  130. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/display-fields-editor.vue.d.ts +15 -0
  131. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/display-fields.util.d.ts +11 -0
  132. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/index.d.ts +3 -0
  133. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/index.d.ts +3 -0
  134. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search-editor.vue.d.ts +15 -0
  135. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search.util.d.ts +14 -0
  136. package/dist/src/online-form/src/views/designer/hooks/useAllSpreadSheets.d.ts +16 -0
  137. package/dist/src/online-form/src/views/designer/hooks/useSpreadSheet.d.ts +27 -2
  138. package/dist/src/{nocode-web-render/src/render/sub-table/material-consume/scan-modal.vue.d.ts → online-form/src/views/designer/modules/panel/comps/confirm-before-delete-config.vue.d.ts} +2 -4
  139. package/dist/src/online-form/src/views/designer/modules/panel/comps/quick-fill-config.vue.d.ts +9 -0
  140. package/dist/src/online-form/src/views/designer/modules/sheet/sheet-cell.vue.d.ts +1 -0
  141. package/dist/src/online-form/src/views/designer/types/index.d.ts +2 -0
  142. package/dist/src/online-form/src/views/render/__components__/_field_/_base_/common-select.util.d.ts +47 -0
  143. package/dist/src/shared/components/field-transfer/components/field-transfer-modal.vue.d.ts +30 -0
  144. package/dist/src/shared/components/field-transfer/components/modal-wrapper.vue.d.ts +65 -0
  145. package/dist/src/shared/components/field-transfer/hooks/useModelField.d.ts +169 -0
  146. package/dist/src/shared/components/field-transfer/hooks/useTreeData.d.ts +139 -0
  147. package/dist/src/shared/components/field-transfer/index.d.ts +21 -0
  148. package/dist/src/shared/components/field-transfer/useFieldTransfer.d.ts +47 -0
  149. package/dist/src/shared/components/field-transfer/utils/enum.d.ts +6 -0
  150. package/dist/src/shared/components/field-transfer/utils/i18n.d.ts +1 -0
  151. package/dist/src/shared/components/field-transfer/utils/tree-tool.d.ts +6 -0
  152. package/dist/{text-design-BGxM7gzI.js → text-design-TEheiKQx.js} +3 -2
  153. package/dist/{text-design-C3RhersV.js → text-design-jMPxIgZW.js} +10 -6
  154. package/dist/{text-props-CIpXslMv.js → text-props-CrkSvg6D.js} +5 -5
  155. package/dist/{text-style-BPjaT5Ic.js → text-style-DmwTt8KQ.js} +1 -1
  156. package/dist/{throttle-Cpk1LoGk-LNQ7rPwu.js → throttle-Cpk1LoGk-DTkhEkFR.js} +1 -1
  157. package/dist/{timediff-design-DqVuVrmx.js → timediff-design-D_if-K1S.js} +2 -1
  158. package/dist/{trace-design-IbjVLAhv.js → trace-design-oN7pgtab.js} +2 -2
  159. package/dist/{trace-props-C-F_eDG2.js → trace-props-BFnUk6kv.js} +24 -16
  160. package/dist/{trace-style-DRenZ1n1.js → trace-style-TNnFcvfw.js} +1 -1
  161. package/dist/{user-props-qQx7HZ7T.js → user-props-Ce-ilCmU.js} +3 -2
  162. package/dist/{user-style-BPFOx0xn.js → user-style-4rp0jKYP.js} +1 -1
  163. package/dist/{value-editor.vue_vue_type_style_index_0_lang-Crnt5d7x.js → value-editor.vue_vue_type_style_index_0_lang-DMuR0u4j.js} +3 -2
  164. package/dist/{version-select-BkZzH36D.js → version-select-DSFIlYgX.js} +2 -2
  165. package/dist/web-render/index.es.js +9 -9
  166. package/dist/{widget-barcode-CPZjarSa.js → widget-barcode-Du7LOaiy.js} +5 -4
  167. package/dist/{widget-diagonal-DebN3u9t.js → widget-diagonal-D-q7WK6T.js} +3 -3
  168. package/dist/{widget-image-BSMWxm9c.js → widget-image-Da5mvgMm.js} +5 -5
  169. package/dist/{widget-line-CyavTHOV.js → widget-line-oIFH8P04.js} +3 -2
  170. package/dist/{widget-pagination-ZCBdy6HQ.js → widget-pagination-CSonelt_.js} +6 -5
  171. package/dist/{widget-power-B1NFysHT.js → widget-power-CWczWA7K.js} +3 -3
  172. package/dist/{widget-qrcode-B0TTSoSK.js → widget-qrcode-MQ-cSphb.js} +4 -3
  173. package/dist/{widget-rangelimit-C_ureKDr.js → widget-rangelimit-CFDeRJIf.js} +3 -3
  174. package/dist/{widget-serialnumber-Dq15dHnk.js → widget-serialnumber-DlE2-jvp.js} +1 -1
  175. package/dist/{widget-text-B9EXKFiM.js → widget-text-B1SnpOGN.js} +5 -5
  176. package/dist/{widget-timediff-BhLrQuGb.js → widget-timediff-DeyJbqRE.js} +3 -2
  177. package/package.json +1 -1
  178. package/dist/base-font-editor-BmC423aB.js +0 -83
  179. package/dist/cell-upload-CiXVE0Ii.js +0 -25
  180. package/dist/paper-widget-design-Cp0ioo8c.js +0 -4
  181. package/dist/ref-autofill-editor-OtclaSqy.js +0 -673
  182. /package/dist/src/nocode-base/src/components/document-sub-table-action/{document-sub-table-action.vue.d.ts → dynamic-table-action.vue.d.ts} +0 -0
@@ -1,8 +1,9 @@
1
- import { computed, watch, toRaw, onUnmounted, markRaw, ref, toRef, reactive, inject, provide, defineComponent, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, renderSlot, createVNode, toDisplayString, isVNode, createCommentVNode, onMounted, onBeforeMount, resolveComponent, createBlock, withCtx, Fragment, renderList, createTextVNode } from "vue";
1
+ import { computed, watch, toRaw, onUnmounted, markRaw, ref, toRef, reactive, inject, provide, defineComponent, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, renderSlot, createCommentVNode, createVNode, toDisplayString, isVNode, h, onBeforeMount, resolveComponent, createBlock, withCtx, Fragment, renderList, createTextVNode, onMounted } from "vue";
2
2
  import { cloneDeep, has, isNil, merge, defaults, pickBy, mergeWith, omit, last, pick } from "lodash-es";
3
- import { e as ComponentTypeEnum, F as FIELD_TYPE, i as api, aU as ButtonTypeEnum, t as FormTypeEnum, aO as safeParseArray, aq as RenderModeEnum, aQ as mergeByMultiKey, aT as BpmnSignatureTypeEnum, aP as BpmnNodeTypeEnum, ab as useWidgetStaticAttrs, by as assembleRules, bz as deleteFormRule, bA as setFormRule, aF as requestDisplayValidation, bB as isReferenceOptionActive, bC as validateAllFields, bD as runValidation, bE as stockCheck, am as getParseRuleInfo, an as getParseRuleValue, bF as materialCheck, ax as calcFillData, as as FormulaRuleFieldKeyEnum, bG as judgeUnique, g as SubTableType, ao as useCurrentPageFormState, R as Dependency_ENUM, Q as ASSIGNMENTSTRATEGY_ENUM, aM as uuid2, a3 as DeviceLink, E as useNamespace, _ as _export_sfc, aj as NCB_PROVIDE, b6 as buildFormChangeDisplayRows, aR as getRowId, bw as resolveRowFormChangeMark, bv as resolveFormChangeRowUi, bk as isAnnLocationSelected, bx as setSelectMobileTdId, bl as isFormChangeGhostRow, h as CellType, ad as setSelectAnnotationId, br as recordSubtableRowDelete, b9 as deleteSubtableRow, bs as relocateDeletedRowsToEnd, bH as FRONT_ROW_KEY, az as transformUtils, bj as insertSubtableRows, bq as recordSubtableRowAdd, D as useModal, bI as q, aS as getSubTableQuickFillInfo } from "./document-quick-fillin.vue_vue_type_style_index_0_scoped_a18386ab_lang-DKTGEH4Q.js";
4
- import { u as useFormModel, w as watchDebounced } from "./mb-render-Cs7LUxzk.js";
3
+ import { e as ComponentTypeEnum, F as FIELD_TYPE, i as api, aT as ButtonTypeEnum, v as FormTypeEnum, aO as safeParseArray, aq as RenderModeEnum, aQ as mergeByMultiKey, aS as BpmnSignatureTypeEnum, aP as BpmnNodeTypeEnum, ab as useWidgetStaticAttrs, by as assembleRules, bz as deleteFormRule, bA as setFormRule, aF as requestDisplayValidation, bB as isReferenceOptionActive, bC as validateAllFields, bD as runValidation, bE as stockCheck, am as getParseRuleInfo, an as getParseRuleValue, bF as materialCheck, ax as calcFillData, as as FormulaRuleFieldKeyEnum, bG as judgeUnique, g as SubTableType, ao as useCurrentPageFormState, R as Dependency_ENUM, Q as ASSIGNMENTSTRATEGY_ENUM, aM as uuid2, a3 as DeviceLink, G as useNamespace, _ as _export_sfc, aj as NCB_PROVIDE, b5 as buildFormChangeDisplayRows, aR as getRowId, bw as resolveRowFormChangeMark, bv as resolveFormChangeRowUi, bk as isAnnLocationSelected, bx as setSelectMobileTdId, bl as isFormChangeGhostRow, h as CellType, ad as setSelectAnnotationId, br as recordSubtableRowDelete, b8 as deleteSubtableRow, bs as relocateDeletedRowsToEnd, bH as FRONT_ROW_KEY, az as transformUtils, bj as insertSubtableRows, bq as recordSubtableRowAdd, u as useModal, bI as q, bJ as groupFixedTableRows, bK as QUICK_FILL_ALLOWED_FIELDS, bL as processQuickFillRows, bM as getIsGroupEmpty, bh as getSubTableQuickFillInfo } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-OPdk2I5p.js";
4
+ import { u as useFormModel, w as watchDebounced } from "./mb-render-D_uumPQr.js";
5
5
  import dayjs from "dayjs";
6
+ import { Modal, message } from "ant-design-vue";
6
7
  var MaterialConsumptionPatternEnum = /* @__PURE__ */ ((MaterialConsumptionPatternEnum2) => {
7
8
  MaterialConsumptionPatternEnum2["RECORD"] = "record";
8
9
  MaterialConsumptionPatternEnum2["BOM"] = "bom";
@@ -1050,14 +1051,14 @@ class BomEntryValidator {
1050
1051
  */
1051
1052
  async validateHasCompleted(arr) {
1052
1053
  const groupData = this.filterGroupData(arr);
1053
- const message = $t("sys.edhr.mcTable.sequenceLoadingError", {
1054
+ const message2 = $t("sys.edhr.mcTable.sequenceLoadingError", {
1054
1055
  product: this.bomEntry.product_code_
1055
1056
  });
1056
1057
  if (!groupData.length) {
1057
1058
  if (!this.bomEntry.force_loading_enabled_) {
1058
1059
  return;
1059
1060
  }
1060
- throw new Error(message);
1061
+ throw new Error(message2);
1061
1062
  }
1062
1063
  if (this.bomEntry.type_ === "view") {
1063
1064
  return;
@@ -1070,26 +1071,26 @@ class BomEntryValidator {
1070
1071
  // 等于的时候要相等才算填报完成,小于的时候报错,大于由修改的时候报错,这边不报错
1071
1072
  case "eq":
1072
1073
  if (consumeNum < this.remainingNum) {
1073
- throw new Error(message);
1074
+ throw new Error(message2);
1074
1075
  }
1075
1076
  break;
1076
1077
  // 大于等于的时候要大于等于才算完成
1077
1078
  case "gte":
1078
1079
  if (consumeNum < this.remainingNum) {
1079
- throw new Error(message);
1080
+ throw new Error(message2);
1080
1081
  }
1081
1082
  break;
1082
1083
  // 小于等于的时候要小于等于有值就算算完成
1083
1084
  case "lte":
1084
1085
  if (consumeNum <= 0) {
1085
- throw new Error(message);
1086
+ throw new Error(message2);
1086
1087
  }
1087
1088
  break;
1088
1089
  case "bounds":
1089
1090
  const consumeSum = consumeNum + this.hasConsumed;
1090
1091
  const { min } = await this.calcCustomNumberLimit(groupData[0]);
1091
1092
  if (consumeSum < min) {
1092
- throw new Error(message);
1093
+ throw new Error(message2);
1093
1094
  }
1094
1095
  break;
1095
1096
  }
@@ -1479,10 +1480,10 @@ class MaterialConsumeTableController {
1479
1480
  this.tableDataRef.value = [...value, ...deletedArr];
1480
1481
  }
1481
1482
  /** 错误信息 */
1482
- error(message) {
1483
+ error(message2) {
1483
1484
  MaterialConsumeTableController.render.message({
1484
1485
  type: "error",
1485
- content: message
1486
+ content: message2
1486
1487
  });
1487
1488
  }
1488
1489
  /**
@@ -1670,8 +1671,11 @@ class MaterialConsumeTableController {
1670
1671
  this.isScanOpen = true;
1671
1672
  await MaterialConsumeTableController.render.openScanModal({
1672
1673
  title,
1673
- onScan: async (str) => {
1674
+ onScan: async ({ str }) => {
1674
1675
  console.log("onScan", str);
1676
+ if (!str) {
1677
+ return;
1678
+ }
1675
1679
  await this.parseScanStr(str);
1676
1680
  }
1677
1681
  });
@@ -1801,11 +1805,11 @@ class MaterialConsumeTableController {
1801
1805
  * @param message
1802
1806
  * @return {*}
1803
1807
  */
1804
- calcErrorObj(message) {
1808
+ calcErrorObj(message2) {
1805
1809
  return {
1806
1810
  field: this.widget.props.field + "_0_product_id_",
1807
1811
  message: JSON.stringify({
1808
- message,
1812
+ message: message2,
1809
1813
  showFieldName: $t("sys.model.product"),
1810
1814
  showModelKey: this.widget.props.modelKey,
1811
1815
  showModelName: this.widget.props.tableTitle,
@@ -2963,8 +2967,12 @@ function useFormTmplConfig() {
2963
2967
  injectController
2964
2968
  };
2965
2969
  }
2966
- const _hoisted_1$5 = ["data-merge", "data-fill-direction"];
2967
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2970
+ const _hoisted_1$6 = ["data-merge", "data-fill-direction"];
2971
+ const _hoisted_2$1 = {
2972
+ key: 0,
2973
+ class: "absolute z-9 top-1/2 right-0 w-0 h-0 -translate-y-4"
2974
+ };
2975
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2968
2976
  __name: "border-td",
2969
2977
  props: {
2970
2978
  border: {},
@@ -3026,25 +3034,28 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3026
3034
  class: normalizeClass([unref(ns).b("content")])
3027
3035
  }, [
3028
3036
  renderSlot(_ctx.$slots, "default", {}, void 0, true)
3029
- ], 2)
3030
- ], 16, _hoisted_1$5);
3037
+ ], 2),
3038
+ _ctx.$slots.tableAction ? (openBlock(), createElementBlock("div", _hoisted_2$1, [
3039
+ renderSlot(_ctx.$slots, "tableAction", {}, void 0, true)
3040
+ ])) : createCommentVNode("", true)
3041
+ ], 16, _hoisted_1$6);
3031
3042
  };
3032
3043
  }
3033
3044
  });
3034
- const BorderTD = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-5c2388a6"]]);
3035
- const _sfc_main$5 = {};
3036
- const _hoisted_1$4 = { class: "nocode-loading" };
3045
+ const BorderTD = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-5f774f44"]]);
3046
+ const _sfc_main$7 = {};
3047
+ const _hoisted_1$5 = { class: "nocode-loading" };
3037
3048
  function _sfc_render(_ctx, _cache) {
3038
- return openBlock(), createElementBlock("div", _hoisted_1$4, [..._cache[0] || (_cache[0] = [
3049
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [..._cache[0] || (_cache[0] = [
3039
3050
  createElementVNode("div", { class: "nocode-shape shape-1" }, null, -1),
3040
3051
  createElementVNode("div", { class: "nocode-shape shape-2" }, null, -1),
3041
3052
  createElementVNode("div", { class: "nocode-shape shape-3" }, null, -1),
3042
3053
  createElementVNode("div", { class: "nocode-shape shape-4" }, null, -1)
3043
3054
  ])]);
3044
3055
  }
3045
- const DocumentLoading = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render], ["__scopeId", "data-v-d8b64b7b"]]);
3056
+ const DocumentLoading = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render], ["__scopeId", "data-v-d8b64b7b"]]);
3046
3057
  const _imports_0 = "data:image/png;base64,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";
3047
- const _hoisted_1$3 = { class: "nocode-document-layout-wrapper" };
3058
+ const _hoisted_1$4 = { class: "nocode-document-layout-wrapper" };
3048
3059
  const _hoisted_2 = {
3049
3060
  key: 0,
3050
3061
  class: "nocode-common-loading-warp"
@@ -3058,7 +3069,7 @@ const _hoisted_4 = {
3058
3069
  class: "nocode-common-loading-warp"
3059
3070
  };
3060
3071
  const _hoisted_5 = { class: "w200px text-center color-[#666]" };
3061
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3072
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3062
3073
  __name: "document-layout",
3063
3074
  props: {
3064
3075
  loading: { type: Boolean },
@@ -3066,7 +3077,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3066
3077
  },
3067
3078
  setup(__props) {
3068
3079
  return (_ctx, _cache) => {
3069
- return openBlock(), createElementBlock("div", _hoisted_1$3, [
3080
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [
3070
3081
  __props.loading ? (openBlock(), createElementBlock("div", _hoisted_2, [
3071
3082
  createVNode(DocumentLoading)
3072
3083
  ])) : __props.hasData ? (openBlock(), createElementBlock("div", _hoisted_3, [
@@ -3147,6 +3158,8 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3147
3158
  isRowSubTable2d,
3148
3159
  childInitRowLen,
3149
3160
  quickFill,
3161
+ confirmBeforeDelete,
3162
+ confirmBeforeDeleteTip,
3150
3163
  subModelType
3151
3164
  } = reactive(props.widget.props);
3152
3165
  const {
@@ -3332,7 +3345,23 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3332
3345
  });
3333
3346
  break;
3334
3347
  case "deleteRowCurrent":
3335
- handleDeleteRow(rowData, dataIdx);
3348
+ if (confirmBeforeDelete) {
3349
+ const content = confirmBeforeDeleteTip || $t("sys.confirmExecution");
3350
+ Modal.confirm({
3351
+ width: 316,
3352
+ centered: true,
3353
+ class: "confirm-before-delete-modal",
3354
+ icon: h("i", {
3355
+ class: "iconfont icon-jinggao"
3356
+ }),
3357
+ content,
3358
+ onOk() {
3359
+ handleDeleteRow(rowData, dataIdx);
3360
+ }
3361
+ });
3362
+ } else {
3363
+ handleDeleteRow(rowData, dataIdx);
3364
+ }
3336
3365
  break;
3337
3366
  case "default":
3338
3367
  handleDefaultClick();
@@ -3639,11 +3668,11 @@ var MaterialConsumeActionType = /* @__PURE__ */ ((MaterialConsumeActionType2) =>
3639
3668
  MaterialConsumeActionType2["CHANGE_PARSE_RULE"] = "CHANGE_PARSE_RULE";
3640
3669
  return MaterialConsumeActionType2;
3641
3670
  })(MaterialConsumeActionType || {});
3642
- const _hoisted_1$2 = {
3671
+ const _hoisted_1$3 = {
3643
3672
  key: 0,
3644
3673
  class: "material-consume-action-bar"
3645
3674
  };
3646
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3675
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3647
3676
  __name: "material-consume-action",
3648
3677
  props: {
3649
3678
  showBom: { type: Boolean, default: false },
@@ -3674,7 +3703,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3674
3703
  emit("doAction", MaterialConsumeActionType.CONFIRM, props.rowData);
3675
3704
  };
3676
3705
  return (_ctx, _cache) => {
3677
- return __props.showConfirmBtn && isEditing.value ? (openBlock(), createElementBlock("div", _hoisted_1$2, [
3706
+ return __props.showConfirmBtn && isEditing.value ? (openBlock(), createElementBlock("div", _hoisted_1$3, [
3678
3707
  createElementVNode("div", {
3679
3708
  class: "sub-table-btn btn-confirm",
3680
3709
  onClick: handleConfirm
@@ -3685,7 +3714,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3685
3714
  };
3686
3715
  }
3687
3716
  });
3688
- const MaterialConsumeAction = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-18b5f02d"]]);
3717
+ const MaterialConsumeAction = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-18b5f02d"]]);
3689
3718
  const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3690
3719
  name: "NocodeMaterialConsumeTable",
3691
3720
  props: {
@@ -4123,490 +4152,101 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
4123
4152
  })])])]);
4124
4153
  }
4125
4154
  });
4126
- const DocumentPaper = /* @__PURE__ */ defineComponent({
4127
- name: "NocodeDocumentPaper",
4155
+ const _hoisted_1$2 = { class: "document-quick-fill-container" };
4156
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4157
+ __name: "fixed-quick-fill-modal",
4128
4158
  props: {
4129
- /** 页面内容信息 */
4130
- page: {
4131
- type: Object,
4132
- required: true
4133
- },
4134
- /** 映射信息 */
4135
- basicInfo: {
4136
- type: Object,
4137
- required: true
4138
- },
4139
- /** 表单数据 */
4140
- formState: {
4141
- type: Object,
4142
- required: true
4143
- },
4144
- /** 模板数据中心 */
4145
- widgetCenter: {
4146
- type: Object,
4147
- required: true
4148
- },
4149
- /** 是否是移动端渲染 */
4150
- isMobile: {
4151
- type: Boolean
4152
- },
4153
- selfInfoList: {
4154
- type: Array
4155
- }
4159
+ rowCount: {},
4160
+ colCount: {},
4161
+ dgRowCount: {},
4162
+ dgColCount: {},
4163
+ dgDirection: {},
4164
+ columns: {}
4156
4165
  },
4157
- setup(props, {
4158
- expose,
4159
- slots
4160
- }) {
4161
- provide(NCB_PROVIDE.DATA_RELATION_SHIP, props.basicInfo);
4162
- provide(NCB_PROVIDE.FORM_INST_LIST, props.selfInfoList);
4163
- const tmplBomCMap = inject(NCB_PROVIDE.TMPL_BOM_CONTROLLER_MAP);
4164
- const tmplBomController = computed(() => tmplBomCMap.value?.[props.basicInfo?.uniqueId]);
4165
- const subTableCoreFactoryMap = inject(NCB_PROVIDE.SUB_TABLE_CORE_FACTORY_MAP);
4166
- const subTableCoreFactory = computed(() => subTableCoreFactoryMap.value?.[props.basicInfo?.uniqueId]);
4167
- const mainTableRef = ref();
4168
- const isPdfMode = inject(NCB_PROVIDE.IS_PDF, false);
4169
- const openFillFieldsModal = inject(NCB_PROVIDE.MOBILE_FILL_FIELDS_POPUP);
4170
- const widget = props.widgetCenter?.[ComponentTypeEnum.PAPER];
4171
- const {
4172
- pageMargins,
4173
- pageSize,
4174
- pageWidth,
4175
- pageHeight,
4176
- colsWidth,
4177
- subTable2DList
4178
- } = widget.props;
4179
- provide(NCB_PROVIDE.PAGER, widget);
4180
- const size = [pageWidth, pageHeight];
4181
- const sortSize = size.slice().sort();
4182
- const isLandscape = JSON.stringify(size) !== JSON.stringify(sortSize);
4183
- const orientation = isLandscape ? "landscape" : "portrait";
4184
- const resultSize = isLandscape && isPdfMode ? sortSize : size;
4185
- const paddings = pageMargins?.split(" ");
4186
- const config = {
4187
- cls: orientation,
4188
- style: {
4189
- width: `${resultSize[0]}mm`,
4190
- height: `${resultSize[1]}mm`
4166
+ setup(__props) {
4167
+ const props = __props;
4168
+ const rows = ref([]);
4169
+ const cols = ref([]);
4170
+ onBeforeMount(() => {
4171
+ const { rowCount, colCount } = props;
4172
+ const newRow = () => Array.from({ length: colCount }).reduce((map, v, i) => {
4173
+ map[`KEY${i}`] = "";
4174
+ return map;
4175
+ }, {});
4176
+ rows.value = Array.from({ length: rowCount }, newRow);
4177
+ cols.value = Object.keys(rows.value?.[0] || {}).map((k) => ({ prop: k, name: k }));
4178
+ });
4179
+ const handleBeforePaste = (e) => {
4180
+ if (!props.columns.length) {
4181
+ e.preventDefault();
4182
+ message.warn($t("sys.quickFillingFixedNoFieldsTip"));
4191
4183
  }
4192
4184
  };
4193
- const paperStyles = {
4194
- width: `${pageWidth}mm`,
4195
- minWidth: `${pageWidth}mm`,
4196
- height: `${pageHeight}mm`,
4197
- padding: pageMargins,
4198
- "--pageWidth": `-${pageWidth}mm`
4199
- };
4200
- const overlayStyle = {
4201
- ["--offset-top"]: paddings?.[0] || "0px",
4202
- ["--offset-right"]: paddings?.[1] || "0px",
4203
- ["--offset-bottom"]: paddings?.[2] || "0px",
4204
- ["--offset-left"]: paddings?.[3] || "0px"
4205
- };
4206
- const getWidgetAttrs = (tdInfo) => {
4207
- const attrInfo = {
4208
- formData: props.formState
4209
- };
4210
- const field = tdInfo.props.fixedTableFieldId ?? "";
4211
- if (tdInfo.props.isNewFixedTableTd) {
4212
- const cellFixedTableDataIdx = tdInfo.cellFixedTableDataIdx ?? 0;
4213
- Object.assign(attrInfo, {
4214
- formData: props.formState?.[field]?.[cellFixedTableDataIdx] ?? {},
4215
- subtableFieldId: field,
4216
- realRowIndex: cellFixedTableDataIdx,
4217
- pageRowIndex: cellFixedTableDataIdx
4185
+ async function onSave() {
4186
+ const { dgRowCount, dgColCount, dgDirection, columns } = props;
4187
+ const groupedRows = groupFixedTableRows(unref(rows), {
4188
+ rowCount: dgRowCount,
4189
+ colCount: dgColCount,
4190
+ direction: dgDirection
4191
+ }).map((row) => {
4192
+ const values = Object.values(row);
4193
+ if (values.every((v) => v === "")) {
4194
+ return null;
4195
+ }
4196
+ const _row = {};
4197
+ columns.forEach((col, i) => {
4198
+ if (QUICK_FILL_ALLOWED_FIELDS.has(col.fieldType)) {
4199
+ _row[col.prop] = values[i];
4200
+ }
4218
4201
  });
4219
- } else if (tdInfo.props.isNewCheckTable2D) {
4220
- const {
4221
- checkTableType
4222
- } = tdInfo.props;
4223
- const rowIdx = tdInfo.cellCheckTableDataRowIdx ?? 0;
4224
- const colIdx = tdInfo.cellCheckTableDataColIdx ?? 0;
4225
- const baseInfo = {
4226
- subtableFieldId: field,
4227
- realRowIndex: rowIdx,
4228
- pageRowIndex: rowIdx,
4229
- /** 检验表列坐标,与 realRowIndex 解耦,不改变原有 formData 绑定逻辑 */
4230
- realColIndex: colIdx
4202
+ return _row;
4203
+ }).filter(Boolean);
4204
+ try {
4205
+ return {
4206
+ ok: true,
4207
+ params: {
4208
+ data: processQuickFillRows(groupedRows, columns)
4209
+ }
4231
4210
  };
4232
- switch (checkTableType) {
4233
- case "col":
4234
- baseInfo.formData = props.formState?.[field]?.[colIdx] ?? {};
4235
- baseInfo.realRowIndex = colIdx;
4236
- baseInfo.pageRowIndex = colIdx;
4237
- break;
4238
- case "row":
4239
- baseInfo.formData = props.formState?.[field]?.[rowIdx] ?? {};
4240
- break;
4241
- case "child":
4242
- baseInfo.formData = props.formState?.[field]?.[rowIdx]?.["_2DTABLE_"]?.[colIdx] ?? {};
4243
- baseInfo.childSubTableDataIndex = colIdx;
4244
- break;
4245
- }
4246
- Object.assign(attrInfo, baseInfo);
4211
+ } catch (err) {
4212
+ console.warn(err);
4247
4213
  }
4248
- return attrInfo;
4249
- };
4250
- onMounted(async () => {
4251
- if (props.basicInfo.renderModeType === RenderModeEnum.ViewMode) {
4252
- await waitDomStable(mainTableRef.value, void 0, void 0, props.basicInfo.__isPrintRender);
4253
- mergeMarkedTd();
4254
- }
4255
- });
4256
- return () => createVNode("div", {
4257
- "class": ["cmp-paper-wrapper", pageSize, config.cls, {
4258
- "print-view": isPdfMode
4259
- }],
4260
- "style": {
4261
- ...config.style,
4262
- ...overlayStyle
4263
- },
4264
- "data-nocode-orientation": config.cls,
4265
- "data-nocode-width": pageWidth,
4266
- "data-nocode-height": pageHeight
4267
- }, [createVNode("div", {
4268
- "class": "cmp-paper",
4269
- "style": paperStyles
4270
- }, [createVNode("div", {
4271
- "class": "cmp-paper-overlay"
4272
- }, [slots.annotation?.(), widget.headerWidgets && createVNode("div", {
4273
- "class": "paper-header"
4274
- }, [slots.overlay?.({
4275
- widgets: widget.headerWidgets
4276
- })]), widget.footerWidgets && createVNode("div", {
4277
- "class": "paper-footer"
4278
- }, [slots.overlay?.({
4279
- widgets: widget.footerWidgets
4280
- })]), widget.watermarks && createVNode("div", {
4281
- "class": "paper-watermark"
4282
- }, [slots.overlay?.({
4283
- widgets: widget.watermarks
4284
- })])]), createVNode("div", {
4285
- "class": "cmp-paper-container"
4286
- }, [createVNode("table", {
4287
- "ref": mainTableRef,
4288
- "class": "main-table-wrapper",
4289
- "cellpadding": "0",
4290
- "cellspacing": "0"
4291
- }, [createVNode("colgroup", null, [colsWidth.map((cw, cwIdx) => createVNode("col", {
4292
- "key": cwIdx,
4293
- "width": cw
4294
- }, null))]), createVNode("tbody", null, [props.page.containerIds.map((trId, trIdx) => {
4295
- const trInfo = props.widgetCenter[trId];
4296
- const tdIds = trInfo.nextIds;
4297
- const height = props.page.dynamicRowHeights?.[trId] || trInfo.props.height;
4298
- return createVNode("tr", {
4299
- "key": `${trId}_${trIdx}`,
4300
- "height": height
4301
- }, [tdIds.map((tdId, tdIdx) => {
4302
- const tdInfo = props.widgetCenter[tdId];
4303
- const tdAttrs = {
4304
- key: tdId,
4305
- id: tdId,
4306
- hidden: tdInfo.cellHidden,
4307
- borderAttrs: tdInfo.props.sourceBorderAttrs,
4308
- autoMerge: tdInfo.fillDirection === "x" ? tdInfo.xAutoMerge : tdInfo.autoMerge,
4309
- fillDirection: tdInfo.fillDirection,
4310
- ...pick(tdInfo.props, ["rowspan", "colspan", "class"])
4311
- };
4312
- const realTdAttrInfo = props.page.mergeBlock?.[tdId];
4313
- const dynamicConfig = {};
4314
- if (realTdAttrInfo) {
4315
- Object.assign(tdAttrs, {
4316
- ...pick(realTdAttrInfo, ["rowspan", "colspan", "borderAttrs"]),
4317
- hidden: false
4318
- });
4319
- Object.assign(dynamicConfig, {
4320
- ...pick(realTdAttrInfo, ["visibleText", "sourceTdId", "isDynRo"])
4321
- });
4322
- }
4323
- const subInfo = props.page.subTableMap?.[tdId];
4324
- if (subInfo && subInfo.wrapperTdId === tdId) {
4325
- const subWidget = props.widgetCenter[subInfo.widgetId];
4326
- const field = subWidget.props.field ?? "";
4327
- const relationObj = props.page.relation[field] ?? {};
4328
- const subTable2dItem = subTable2DList.find((item) => item.subTable2d && item.rowSubFieldKey === field);
4329
- if (subWidget.props.isMaterialConsumeTable) {
4330
- const tableController = tmplBomController.value?.tableControllers[subWidget.props.materialConsumeTableId];
4331
- if (tableController) {
4332
- return createVNode("td", mergeProps({
4333
- "style": tdInfo.style
4334
- }, tdAttrs), [createVNode(MaterialConsumeTable, {
4335
- "subInfo": subInfo,
4336
- "widget": subWidget,
4337
- "formData": props.formState,
4338
- "widgetCenter": props.widgetCenter,
4339
- "start": relationObj?.start,
4340
- "end": relationObj.end,
4341
- "isMobile": props.isMobile,
4342
- "tableController": tableController
4343
- }, {
4344
- widget: (subProps) => slots.widget?.(subProps),
4345
- subAction: (subProps) => slots.subAction?.(subProps)
4346
- })]);
4347
- }
4348
- }
4349
- const subTableCore = subTableCoreFactory.value?.getSubCoreByTid(subInfo.widgetId);
4350
- return createVNode("td", mergeProps({
4351
- "style": tdInfo.style
4352
- }, tdAttrs), [createVNode(DocumentSubTable, {
4353
- "subInfo": subInfo,
4354
- "widget": subWidget,
4355
- "subTable2dItem": subTable2dItem,
4356
- "formData": props.formState,
4357
- "widgetCenter": props.widgetCenter,
4358
- "start": relationObj?.start,
4359
- "end": relationObj.end,
4360
- "isMobile": props.isMobile,
4361
- "subTableCore": subTableCore
4362
- }, {
4363
- widget: (subProps) => slots.widget?.(subProps),
4364
- subAction: (subProps) => slots.subAction?.(subProps)
4365
- })]);
4366
- }
4367
- if (tdInfo.cellValueType) {
4368
- const widgetAttrs = getWidgetAttrs(tdInfo);
4369
- if (props.isMobile) {
4370
- Object.assign(tdAttrs, {
4371
- onClick: setSelectMobileTdId.bind(null, tdInfo, props.basicInfo, props.widgetCenter, openFillFieldsModal, -1)
4372
- });
4373
- }
4374
- return createVNode(BorderTD, mergeProps({
4375
- "style": tdInfo.style
4376
- }, tdAttrs, {
4377
- "isEmpty": true
4378
- }), {
4379
- default: () => [tdInfo.cellValueType !== CellType.Default || tdInfo.cellWidget.props.value ? slots.widget?.({
4380
- tdInfo,
4381
- ...widgetAttrs,
4382
- dynamicConfig
4383
- }) : null]
4384
- });
4385
- }
4386
- if (realTdAttrInfo && tdInfo.cellHidden) {
4387
- const sourceTdInfo = props.widgetCenter[dynamicConfig?.sourceTdId];
4388
- const widgetAttrs = getWidgetAttrs(tdInfo);
4389
- return createVNode(BorderTD, mergeProps({
4390
- "style": tdInfo.style
4391
- }, tdAttrs, {
4392
- "isEmpty": true
4393
- }), {
4394
- default: () => [dynamicConfig?.isDynRo ? slots.widget?.({
4395
- tdInfo: sourceTdInfo,
4396
- ...widgetAttrs,
4397
- dynamicConfig
4398
- }) : null]
4399
- });
4400
- }
4401
- })]);
4402
- })])])])])]);
4403
- }
4404
- });
4405
- const _hoisted_1$1 = { class: "document-quick-fill-container" };
4406
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4407
- __name: "document-quick-fill-modal",
4408
- props: {
4409
- columns: {},
4410
- modal: {},
4411
- callback: {}
4412
- },
4413
- setup(__props) {
4414
- const props = __props;
4415
- const rows = ref([]);
4416
- function makeEmptyRow() {
4417
- return Object.fromEntries(props.columns.map((c) => [c.prop, ""]));
4418
- }
4419
- function initRows(count = 10) {
4420
- rows.value = Array.from({ length: count }, () => makeEmptyRow());
4421
- }
4422
- onBeforeMount(() => {
4423
- initRows(200);
4424
- });
4425
- function processRows(rows2 = []) {
4426
- const isBlank = (v) => v === null || v === void 0 || typeof v === "string" && v.trim() === "" || Array.isArray(v) && v.length === 0;
4427
- const roundToScale = (num, scale) => {
4428
- if (scale == null) return num;
4429
- const factor = Math.pow(10, scale);
4430
- return Math.round(num * factor) / factor;
4431
- };
4432
- const parseNumber = (v, { integer = false, scale = null } = {}) => {
4433
- if (v === null || v === void 0) return null;
4434
- if (typeof v === "number") {
4435
- if (!Number.isFinite(v)) return null;
4436
- if (integer && !Number.isInteger(v)) return null;
4437
- const n2 = scale != null ? roundToScale(v, scale) : v;
4438
- return Number.isFinite(n2) ? n2 : null;
4439
- }
4440
- let s = String(v).trim();
4441
- if (s === "") return null;
4442
- s = s.replace(/,/g, "");
4443
- if (/^[\(\(].+[\)\)]$/.test(s)) {
4444
- s = "-" + s.replace(/^[\(\(]|[\)\)]$/g, "");
4445
- }
4446
- const n = Number(s);
4447
- if (!Number.isFinite(n)) return null;
4448
- if (integer) {
4449
- if (!Number.isInteger(n)) return null;
4450
- return n;
4451
- } else {
4452
- return scale != null ? roundToScale(n, scale) : n;
4453
- }
4454
- };
4455
- const parseToDate = (v) => {
4456
- if (v === null || v === void 0 || v === "") return null;
4457
- if (typeof v === "string") {
4458
- let s = v.trim();
4459
- if (s === "") return null;
4460
- s = s.replace(/-/g, "/");
4461
- if (/^\d{1,2}:\d{2}(:\d{2})?$/.test(s)) {
4462
- const today = /* @__PURE__ */ new Date();
4463
- const datePart = `${today.getFullYear()}/${today.getMonth() + 1}/${today.getDate()}`;
4464
- s = `${datePart} ${s}`;
4465
- }
4466
- const d = new Date(s);
4467
- return isNaN(d) ? null : d;
4468
- }
4469
- return null;
4470
- };
4471
- const buildOptionLookup = (opts = []) => {
4472
- const map = /* @__PURE__ */ new Map();
4473
- for (const o of opts) {
4474
- const val = o.value != null ? String(o.value) : void 0;
4475
- const text = o.text != null ? String(o.text) : void 0;
4476
- const label = o.label != null ? String(o.label) : void 0;
4477
- if (val !== void 0) map.set(val, val);
4478
- if (text !== void 0) map.set(text, val || text);
4479
- if (label !== void 0) map.set(label, val || label);
4480
- }
4481
- return map;
4482
- };
4483
- const pad2 = (n) => String(n).padStart(2, "0");
4484
- const formatDate = (d) => `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
4485
- const formatTime = (d) => `${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`;
4486
- const formatDateTime = (d) => `${formatDate(d)} ${formatTime(d)}`;
4487
- const out = rows2.map((row) => {
4488
- const newRow = { ...row };
4489
- for (const f of props.columns) {
4490
- const val = row[f.prop];
4491
- switch (f.fieldType) {
4492
- case FIELD_TYPE.INTEGER:
4493
- case FIELD_TYPE.LONG:
4494
- {
4495
- const n = parseNumber(val, { integer: true });
4496
- newRow[f.prop] = isBlank(n) ? void 0 : n;
4497
- }
4498
- break;
4499
- case FIELD_TYPE.DOUBLE:
4500
- case FIELD_TYPE.DECIMAL:
4501
- {
4502
- const n = parseNumber(val, { integer: false, scale: null });
4503
- newRow[f.prop] = isBlank(n) ? void 0 : n;
4504
- }
4505
- break;
4506
- case FIELD_TYPE.DATE:
4507
- {
4508
- const d = parseToDate(val);
4509
- newRow[f.prop] = d ? formatDate(d) : isBlank(val) ? void 0 : val;
4510
- }
4511
- break;
4512
- case FIELD_TYPE.TIME:
4513
- {
4514
- const d = parseToDate(val);
4515
- newRow[f.prop] = d ? formatTime(d) : isBlank(val) ? void 0 : val;
4516
- }
4517
- break;
4518
- case FIELD_TYPE.DATE_TIME:
4519
- {
4520
- const d = parseToDate(val);
4521
- newRow[f.prop] = d ? formatDateTime(d) : isBlank(val) ? void 0 : val;
4522
- }
4523
- break;
4524
- case FIELD_TYPE.OPTION_MULTI:
4525
- {
4526
- const lookup = buildOptionLookup(f.newOptions);
4527
- if (typeof val === "string") {
4528
- const tokens = val.split(/[;,]/).map((s) => s.trim()).filter((s) => s !== "");
4529
- const arr = tokens.map((t) => lookup.get(t)).filter((v) => v !== void 0);
4530
- newRow[f.prop] = arr.length ? arr.join(",") : void 0;
4531
- } else {
4532
- newRow[f.prop] = isBlank(val) ? void 0 : val;
4533
- }
4534
- }
4535
- break;
4536
- case FIELD_TYPE.OPTION:
4537
- {
4538
- const lookup = buildOptionLookup(f.newOptions);
4539
- if (isBlank(val)) {
4540
- newRow[f.prop] = void 0;
4541
- } else {
4542
- const tokens = val.split(/[;,]/).map((s) => s.trim()).filter((s) => s !== "");
4543
- const normalized = lookup.get(tokens?.[0]);
4544
- newRow[f.prop] = normalized !== void 0 ? normalized : void 0;
4545
- }
4546
- }
4547
- break;
4548
- default:
4549
- newRow[f.prop] = isBlank(val) ? void 0 : val;
4550
- }
4551
- }
4552
- return newRow;
4553
- }).filter((row) => {
4554
- return props.columns.some((f) => {
4555
- const v = row[f.prop];
4556
- if (v === 0 || v === false) return true;
4557
- return !isBlank(v);
4558
- });
4559
- });
4560
- return out;
4561
- }
4562
- async function onSave() {
4563
- try {
4564
- return {
4565
- ok: true,
4566
- params: {
4567
- data: processRows(unref(rows.value))
4568
- }
4569
- };
4570
- } catch (err) {
4571
- console.warn(err);
4572
- }
4573
- return {
4574
- ok: false
4575
- };
4576
- }
4577
- useModal(onSave);
4578
- return (_ctx, _cache) => {
4579
- return openBlock(), createElementBlock("div", _hoisted_1$1, [
4580
- _cache[0] || (_cache[0] = createElementVNode("div", { class: "quick-fill-tips" }, [
4581
- createElementVNode("i", { class: "iconfont icon-zhuyi" }),
4582
- createElementVNode("ul", { class: "tips-list" }, [
4583
- createElementVNode("li", null, "可将Excel内容粘贴到表格中,支持使用复制、粘贴、删除快捷键"),
4584
- createElementVNode("li", null, "表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割)"),
4585
- createElementVNode("li", null, "当前快速填报最多支持200行")
4586
- ])
4587
- ], -1)),
4588
- createVNode(unref(q), {
4589
- class: "cell-border",
4590
- range: "",
4591
- resize: "",
4592
- colSize: 200,
4593
- source: rows.value,
4594
- columns: __props.columns,
4595
- theme: "material",
4596
- "hide-attribution": "",
4597
- "apply-on-close": true,
4598
- "row-headers": { prop: "rowIndex", name: "序号", size: 60 }
4599
- }, null, 8, ["source", "columns"])
4600
- ]);
4214
+ return {
4215
+ ok: false
4216
+ };
4217
+ }
4218
+ useModal(onSave);
4219
+ return (_ctx, _cache) => {
4220
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
4221
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "quick-fill-tips" }, [
4222
+ createElementVNode("i", { class: "iconfont icon-zhuyi" }),
4223
+ createElementVNode("ul", { class: "tips-list" }, [
4224
+ createElementVNode("li", null, "可将Excel内容粘贴到表格中,支持使用复制、粘贴、删除快捷键"),
4225
+ createElementVNode("li", null, " 表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割) ")
4226
+ ])
4227
+ ], -1)),
4228
+ createVNode(unref(q), {
4229
+ class: "cell-border",
4230
+ range: "",
4231
+ resize: "",
4232
+ colSize: 200,
4233
+ source: rows.value,
4234
+ columns: cols.value,
4235
+ theme: "material",
4236
+ "hide-attribution": "",
4237
+ "apply-on-close": true,
4238
+ onBeforepaste: handleBeforePaste
4239
+ }, null, 8, ["source", "columns"])
4240
+ ]);
4601
4241
  };
4602
4242
  }
4603
4243
  });
4604
- const DocumentQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-b95f66b0"]]);
4605
- const _hoisted_1 = {
4244
+ const FixedQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-082f502b"]]);
4245
+ const _hoisted_1$1 = {
4606
4246
  key: 1,
4607
4247
  class: "sub-table-action__subtitle"
4608
4248
  };
4609
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4249
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
4610
4250
  __name: "sub-table-action",
4611
4251
  props: {
4612
4252
  showDelBtn: { type: Boolean, default: false },
@@ -4624,7 +4264,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4624
4264
  setup(__props, { emit: __emit }) {
4625
4265
  const props = __props;
4626
4266
  const emit = __emit;
4627
- computed(() => {
4267
+ const showMenus = computed(() => {
4628
4268
  const menus = [
4629
4269
  ...props.isMaterialConsume ? [
4630
4270
  {
@@ -4734,6 +4374,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4734
4374
  ];
4735
4375
  return menus.filter((i) => i.show !== false);
4736
4376
  });
4377
+ const displayMenus = computed(() => props.menus?.length ? props.menus : showMenus.value);
4737
4378
  const stopRefPropagation = (vm) => {
4738
4379
  if (!vm?.$el) {
4739
4380
  return;
@@ -4784,11 +4425,11 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4784
4425
  selectedKeys: []
4785
4426
  }, {
4786
4427
  default: withCtx(() => [
4787
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.menus, (menu) => {
4428
+ (openBlock(true), createElementBlock(Fragment, null, renderList(displayMenus.value, (menu) => {
4788
4429
  return openBlock(), createElementBlock(Fragment, {
4789
4430
  key: menu.key
4790
4431
  }, [
4791
- menu.type === "divider" ? (openBlock(), createBlock(_component_a_menu_divider, { key: 0 })) : menu.type === "subtitle" ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString(menu.label), 1)) : menu.type === "submenu" ? (openBlock(), createBlock(_component_a_sub_menu, {
4432
+ menu.type === "divider" ? (openBlock(), createBlock(_component_a_menu_divider, { key: 0 })) : menu.type === "subtitle" ? (openBlock(), createElementBlock("div", _hoisted_1$1, toDisplayString(menu.label), 1)) : menu.type === "submenu" ? (openBlock(), createBlock(_component_a_sub_menu, {
4792
4433
  popupClassName: "sub-table-action__submenu-popup",
4793
4434
  key: menu.key
4794
4435
  }, {
@@ -4872,48 +4513,514 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4872
4513
  };
4873
4514
  }
4874
4515
  });
4875
- const SubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-db4201e3"]]);
4876
- const _sfc_main = /* @__PURE__ */ defineComponent({
4877
- __name: "document-sub-table-action",
4516
+ const SubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-e0624e4c"]]);
4517
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4518
+ __name: "fixed-table-action",
4878
4519
  props: {
4879
- subTableFieldId: {},
4880
- mobileTdIdGroups: {},
4520
+ tdId: {},
4521
+ formState: {},
4881
4522
  widgetCenter: {},
4882
- handleMenuClick: {},
4883
- showDelBtn: { type: Boolean },
4884
- showQuickFillBtn: { type: Boolean },
4885
- showInsertMultiple: { type: Boolean, default: true },
4886
- showEditBtn: { type: Boolean },
4887
- isMaterialConsume: { type: Boolean },
4888
- showBom: { type: Boolean },
4889
- showScanBtn: { type: Boolean },
4890
- showConfirmBtn: { type: Boolean },
4891
- noPopover: { type: Boolean },
4892
- menus: {}
4523
+ fixedTableInfo: {}
4893
4524
  },
4894
4525
  setup(__props) {
4526
+ const menus = [
4527
+ {
4528
+ type: SubTableActionMenuTypeEnum.ACTION,
4529
+ key: SubTableActionEnum.QuickFillRowCurrent,
4530
+ label: "快速填报",
4531
+ icon: "icon-zhongxinbianjidangqianhang"
4532
+ }
4533
+ ];
4895
4534
  const props = __props;
4896
- const fieldColumn = computed(() => {
4897
- const info = getSubTableQuickFillInfo(props.subTableFieldId, props.mobileTdIdGroups);
4898
- if (!info?.mainWidgetIds?.length) return [];
4899
- const allowed = /* @__PURE__ */ new Set([
4900
- FIELD_TYPE.TEXT,
4901
- FIELD_TYPE.LONG_TEXT,
4902
- FIELD_TYPE.INTEGER,
4903
- FIELD_TYPE.LONG,
4904
- FIELD_TYPE.DOUBLE,
4905
- FIELD_TYPE.DECIMAL,
4906
- FIELD_TYPE.DATE,
4907
- FIELD_TYPE.TIME,
4908
- FIELD_TYPE.DATE_TIME,
4909
- FIELD_TYPE.OPTION,
4910
- FIELD_TYPE.OPTION_MULTI,
4911
- FIELD_TYPE.MATERIAL_NO,
4912
- FIELD_TYPE.STERILIZE_LOT,
4913
- FIELD_TYPE.MATERIAL_LOT,
4914
- FIELD_TYPE.RELATED_LOT_NO,
4915
- FIELD_TYPE.SCRAP_MATERIAL_NO
4916
- ]);
4535
+ const onMenuClick = async ({ key }) => {
4536
+ if (key === "quickFillRowCurrent") {
4537
+ const { fixedTableInfo } = props;
4538
+ const {
4539
+ range,
4540
+ dgRange,
4541
+ subFieldKey,
4542
+ fillDirection: dgDirection,
4543
+ columns,
4544
+ columnKeys
4545
+ } = fixedTableInfo;
4546
+ const rowCount = range.b - range.t + 1;
4547
+ const colCount = range.r - range.l + 1;
4548
+ const dgRowCount = dgRange.b - dgRange.t + 1;
4549
+ const dgColCount = dgRange.r - dgRange.l + 1;
4550
+ const res = await window.NocodeAdapter.utils.overlay.modal(
4551
+ FixedQuickFillModal,
4552
+ {
4553
+ rowCount,
4554
+ colCount,
4555
+ dgRowCount,
4556
+ dgColCount,
4557
+ dgDirection,
4558
+ columns
4559
+ },
4560
+ { title: "快速填报", width: "1060px" }
4561
+ );
4562
+ if (res.ok && res.params?.data.length) {
4563
+ const newGroupList = [...res.params.data];
4564
+ let activeIndex = 0;
4565
+ props.formState[subFieldKey].forEach((oldGroup) => {
4566
+ const isEmpty = getIsGroupEmpty(oldGroup, columnKeys);
4567
+ if (isEmpty) {
4568
+ const newGroup = newGroupList[activeIndex];
4569
+ if (newGroup) {
4570
+ Object.assign(oldGroup, newGroup);
4571
+ activeIndex++;
4572
+ }
4573
+ }
4574
+ });
4575
+ }
4576
+ }
4577
+ };
4578
+ return (_ctx, _cache) => {
4579
+ return openBlock(), createBlock(SubTableAction, {
4580
+ showQuickFillBtn: "",
4581
+ menus,
4582
+ onMenuClick
4583
+ });
4584
+ };
4585
+ }
4586
+ });
4587
+ const DocumentPaper = /* @__PURE__ */ defineComponent({
4588
+ name: "NocodeDocumentPaper",
4589
+ props: {
4590
+ /** 页面内容信息 */
4591
+ page: {
4592
+ type: Object,
4593
+ required: true
4594
+ },
4595
+ /** 映射信息 */
4596
+ basicInfo: {
4597
+ type: Object,
4598
+ required: true
4599
+ },
4600
+ /** 表单数据 */
4601
+ formState: {
4602
+ type: Object,
4603
+ required: true
4604
+ },
4605
+ /** 模板数据中心 */
4606
+ widgetCenter: {
4607
+ type: Object,
4608
+ required: true
4609
+ },
4610
+ /** 是否是移动端渲染 */
4611
+ isMobile: {
4612
+ type: Boolean
4613
+ },
4614
+ selfInfoList: {
4615
+ type: Array
4616
+ }
4617
+ },
4618
+ setup(props, {
4619
+ slots
4620
+ }) {
4621
+ provide(NCB_PROVIDE.DATA_RELATION_SHIP, props.basicInfo);
4622
+ provide(NCB_PROVIDE.FORM_INST_LIST, props.selfInfoList);
4623
+ const tmplBomCMap = inject(NCB_PROVIDE.TMPL_BOM_CONTROLLER_MAP);
4624
+ const tmplBomController = computed(() => tmplBomCMap.value?.[props.basicInfo?.uniqueId]);
4625
+ const subTableCoreFactoryMap = inject(NCB_PROVIDE.SUB_TABLE_CORE_FACTORY_MAP);
4626
+ const subTableCoreFactory = computed(() => subTableCoreFactoryMap.value?.[props.basicInfo?.uniqueId]);
4627
+ const filledFixedTableKeys = ref([]);
4628
+ const fixedTables = computed(() => {
4629
+ const info = props.selfInfoList?.[0];
4630
+ if (!info) {
4631
+ return [];
4632
+ }
4633
+ const designer = JSON.parse(info.designerJson || "{}");
4634
+ return designer.sheets?.[0]?.paper?.fixedTables || designer.fixedTables || [];
4635
+ });
4636
+ const fixedTableInfoMap = computed(() => {
4637
+ const {
4638
+ widgetCenter
4639
+ } = props;
4640
+ const map = {};
4641
+ fixedTables.value.forEach((table) => {
4642
+ const {
4643
+ field: subFieldKey,
4644
+ model: subModelKey,
4645
+ range,
4646
+ dgRange,
4647
+ fillDirection,
4648
+ quickFill
4649
+ } = table;
4650
+ const {
4651
+ r: colNo,
4652
+ t: rowNo
4653
+ } = range;
4654
+ const trId = widgetCenter[ComponentTypeEnum.PAPER].nextIds[rowNo - 1];
4655
+ const tdId = widgetCenter[trId].nextIds[colNo - 1];
4656
+ const newOptions = widgetCenter[tdId]?.cellWidget?.props?.newSpecificConfig?.newOptions || [];
4657
+ const columns = Object.values(widgetCenter[ComponentTypeEnum.PAPER].props.fixedTableFieldMap || {}).map((o) => o.fieldMeta).filter((m) => m?.subFieldKey === subFieldKey).map((m) => ({
4658
+ prop: m.field,
4659
+ fieldType: m.fieldType,
4660
+ newOptions
4661
+ }));
4662
+ const columnKeys = columns.map((c) => c.prop);
4663
+ map[tdId] = {
4664
+ subFieldKey,
4665
+ subModelKey,
4666
+ range,
4667
+ dgRange,
4668
+ fillDirection,
4669
+ columns,
4670
+ columnKeys,
4671
+ // 兼容历史数据,[固定表]默认开启 快速填报
4672
+ quickFillVisible: quickFill === void 0 ? true : quickFill
4673
+ };
4674
+ });
4675
+ return map;
4676
+ });
4677
+ watch(() => props.formState, (formState) => {
4678
+ filledFixedTableKeys.value = fixedTables.value.map((t) => t.field).filter((subTableField) => {
4679
+ const info = Object.values(fixedTableInfoMap.value).find((item) => item.subFieldKey === subTableField);
4680
+ const colKeys = info?.columnKeys || [];
4681
+ return formState[subTableField]?.every((g) => !getIsGroupEmpty(g, colKeys));
4682
+ });
4683
+ }, {
4684
+ deep: true,
4685
+ immediate: true
4686
+ });
4687
+ const mainTableRef = ref();
4688
+ const isPdfMode = inject(NCB_PROVIDE.IS_PDF, false);
4689
+ const openFillFieldsModal = inject(NCB_PROVIDE.MOBILE_FILL_FIELDS_POPUP);
4690
+ const widget = props.widgetCenter?.[ComponentTypeEnum.PAPER];
4691
+ const {
4692
+ pageMargins,
4693
+ pageSize,
4694
+ pageWidth,
4695
+ pageHeight,
4696
+ colsWidth,
4697
+ subTable2DList
4698
+ } = widget.props;
4699
+ provide(NCB_PROVIDE.PAGER, widget);
4700
+ const size = [pageWidth, pageHeight];
4701
+ const sortSize = size.slice().sort();
4702
+ const isLandscape = JSON.stringify(size) !== JSON.stringify(sortSize);
4703
+ const orientation = isLandscape ? "landscape" : "portrait";
4704
+ const resultSize = isLandscape && isPdfMode ? sortSize : size;
4705
+ const paddings = pageMargins?.split(" ");
4706
+ const config = {
4707
+ cls: orientation,
4708
+ style: {
4709
+ width: `${resultSize[0]}mm`,
4710
+ height: `${resultSize[1]}mm`
4711
+ }
4712
+ };
4713
+ const paperStyles = {
4714
+ width: `${pageWidth}mm`,
4715
+ minWidth: `${pageWidth}mm`,
4716
+ height: `${pageHeight}mm`,
4717
+ padding: pageMargins,
4718
+ "--pageWidth": `-${pageWidth}mm`
4719
+ };
4720
+ const overlayStyle = {
4721
+ ["--offset-top"]: paddings?.[0] || "0px",
4722
+ ["--offset-right"]: paddings?.[1] || "0px",
4723
+ ["--offset-bottom"]: paddings?.[2] || "0px",
4724
+ ["--offset-left"]: paddings?.[3] || "0px"
4725
+ };
4726
+ const getWidgetAttrs = (tdInfo) => {
4727
+ const attrInfo = {
4728
+ formData: props.formState
4729
+ };
4730
+ const field = tdInfo.props.fixedTableFieldId ?? "";
4731
+ if (tdInfo.props.isNewFixedTableTd) {
4732
+ const cellFixedTableDataIdx = tdInfo.cellFixedTableDataIdx ?? 0;
4733
+ Object.assign(attrInfo, {
4734
+ formData: props.formState?.[field]?.[cellFixedTableDataIdx] ?? {},
4735
+ subtableFieldId: field,
4736
+ realRowIndex: cellFixedTableDataIdx,
4737
+ pageRowIndex: cellFixedTableDataIdx
4738
+ });
4739
+ } else if (tdInfo.props.isNewCheckTable2D) {
4740
+ const {
4741
+ checkTableType
4742
+ } = tdInfo.props;
4743
+ const rowIdx = tdInfo.cellCheckTableDataRowIdx ?? 0;
4744
+ const colIdx = tdInfo.cellCheckTableDataColIdx ?? 0;
4745
+ const baseInfo = {
4746
+ subtableFieldId: field,
4747
+ realRowIndex: rowIdx,
4748
+ pageRowIndex: rowIdx,
4749
+ /** 检验表列坐标,与 realRowIndex 解耦,不改变原有 formData 绑定逻辑 */
4750
+ realColIndex: colIdx
4751
+ };
4752
+ switch (checkTableType) {
4753
+ case "col":
4754
+ baseInfo.formData = props.formState?.[field]?.[colIdx] ?? {};
4755
+ baseInfo.realRowIndex = colIdx;
4756
+ baseInfo.pageRowIndex = colIdx;
4757
+ break;
4758
+ case "row":
4759
+ baseInfo.formData = props.formState?.[field]?.[rowIdx] ?? {};
4760
+ break;
4761
+ case "child":
4762
+ baseInfo.formData = props.formState?.[field]?.[rowIdx]?.["_2DTABLE_"]?.[colIdx] ?? {};
4763
+ baseInfo.childSubTableDataIndex = colIdx;
4764
+ break;
4765
+ }
4766
+ Object.assign(attrInfo, baseInfo);
4767
+ }
4768
+ return attrInfo;
4769
+ };
4770
+ onMounted(async () => {
4771
+ if (props.basicInfo.renderModeType === RenderModeEnum.ViewMode) {
4772
+ await waitDomStable(mainTableRef.value, void 0, void 0, props.basicInfo.__isPrintRender);
4773
+ mergeMarkedTd();
4774
+ }
4775
+ });
4776
+ return () => createVNode("div", {
4777
+ "class": ["cmp-paper-wrapper", pageSize, config.cls, {
4778
+ "print-view": isPdfMode,
4779
+ // 单份打印可选隐藏字段控件底色;未显式传 false 时保持查看态底色。
4780
+ "hide-print-field-bg": props.basicInfo.showPrintFieldBg === false
4781
+ }],
4782
+ "style": {
4783
+ ...config.style,
4784
+ ...overlayStyle
4785
+ },
4786
+ "data-nocode-orientation": config.cls,
4787
+ "data-nocode-width": pageWidth,
4788
+ "data-nocode-height": pageHeight
4789
+ }, [createVNode("div", {
4790
+ "class": "cmp-paper",
4791
+ "style": paperStyles
4792
+ }, [createVNode("div", {
4793
+ "class": "cmp-paper-overlay"
4794
+ }, [slots.annotation?.(), widget.headerWidgets && createVNode("div", {
4795
+ "class": "paper-header"
4796
+ }, [slots.overlay?.({
4797
+ widgets: widget.headerWidgets
4798
+ })]), widget.footerWidgets && createVNode("div", {
4799
+ "class": "paper-footer"
4800
+ }, [slots.overlay?.({
4801
+ widgets: widget.footerWidgets
4802
+ })]), widget.watermarks && createVNode("div", {
4803
+ "class": "paper-watermark"
4804
+ }, [slots.overlay?.({
4805
+ widgets: widget.watermarks
4806
+ })])]), createVNode("div", {
4807
+ "class": "cmp-paper-container"
4808
+ }, [createVNode("table", {
4809
+ "ref": mainTableRef,
4810
+ "class": "main-table-wrapper",
4811
+ "cellpadding": "0",
4812
+ "cellspacing": "0"
4813
+ }, [createVNode("colgroup", null, [colsWidth.map((cw, cwIdx) => createVNode("col", {
4814
+ "key": cwIdx,
4815
+ "width": cw
4816
+ }, null))]), createVNode("tbody", null, [props.page.containerIds.map((trId, trIndex) => {
4817
+ const trInfo = props.widgetCenter[trId];
4818
+ const tdIds = trInfo.nextIds;
4819
+ const height = props.page.dynamicRowHeights?.[trId] || trInfo.props.height;
4820
+ return createVNode("tr", {
4821
+ "key": `${trId}_${trIndex}`,
4822
+ "height": height
4823
+ }, [tdIds.map((tdId) => {
4824
+ const tdInfo = props.widgetCenter[tdId];
4825
+ const tdAttrs = {
4826
+ key: tdId,
4827
+ id: tdId,
4828
+ hidden: tdInfo.cellHidden,
4829
+ borderAttrs: tdInfo.props.sourceBorderAttrs,
4830
+ autoMerge: tdInfo.fillDirection === "x" ? tdInfo.xAutoMerge : tdInfo.autoMerge,
4831
+ fillDirection: tdInfo.fillDirection,
4832
+ ...pick(tdInfo.props, ["rowspan", "colspan", "class"])
4833
+ };
4834
+ const realTdAttrInfo = props.page.mergeBlock?.[tdId];
4835
+ const dynamicConfig = {};
4836
+ if (realTdAttrInfo) {
4837
+ Object.assign(tdAttrs, {
4838
+ ...pick(realTdAttrInfo, ["rowspan", "colspan", "borderAttrs"]),
4839
+ hidden: false
4840
+ });
4841
+ Object.assign(dynamicConfig, {
4842
+ ...pick(realTdAttrInfo, ["visibleText", "sourceTdId", "isDynRo"])
4843
+ });
4844
+ }
4845
+ const subInfo = props.page.subTableMap?.[tdId];
4846
+ if (subInfo && subInfo.wrapperTdId === tdId) {
4847
+ const subWidget = props.widgetCenter[subInfo.widgetId];
4848
+ const field = subWidget.props.field ?? "";
4849
+ const relationObj = props.page.relation[field] ?? {};
4850
+ const subTable2dItem = subTable2DList.find((item) => item.subTable2d && item.rowSubFieldKey === field);
4851
+ if (subWidget.props.isMaterialConsumeTable) {
4852
+ const tableController = tmplBomController.value?.tableControllers[subWidget.props.materialConsumeTableId];
4853
+ if (tableController) {
4854
+ return createVNode("td", mergeProps({
4855
+ "style": tdInfo.style
4856
+ }, tdAttrs), [createVNode(MaterialConsumeTable, {
4857
+ "subInfo": subInfo,
4858
+ "widget": subWidget,
4859
+ "formData": props.formState,
4860
+ "widgetCenter": props.widgetCenter,
4861
+ "start": relationObj?.start,
4862
+ "end": relationObj.end,
4863
+ "isMobile": props.isMobile,
4864
+ "tableController": tableController
4865
+ }, {
4866
+ widget: (subProps) => slots.widget?.(subProps),
4867
+ subAction: (subProps) => slots.subAction?.(subProps)
4868
+ })]);
4869
+ }
4870
+ }
4871
+ const subTableCore = subTableCoreFactory.value?.getSubCoreByTid(subInfo.widgetId);
4872
+ return createVNode("td", mergeProps({
4873
+ "style": tdInfo.style
4874
+ }, tdAttrs), [createVNode(DocumentSubTable, {
4875
+ "subInfo": subInfo,
4876
+ "widget": subWidget,
4877
+ "subTable2dItem": subTable2dItem,
4878
+ "formData": props.formState,
4879
+ "widgetCenter": props.widgetCenter,
4880
+ "start": relationObj?.start,
4881
+ "end": relationObj.end,
4882
+ "isMobile": props.isMobile,
4883
+ "subTableCore": subTableCore
4884
+ }, {
4885
+ widget: (subProps) => slots.widget?.(subProps),
4886
+ subAction: (subProps) => slots.subAction?.(subProps)
4887
+ })]);
4888
+ }
4889
+ if (tdInfo.cellValueType) {
4890
+ const widgetAttrs = getWidgetAttrs(tdInfo);
4891
+ if (props.isMobile) {
4892
+ Object.assign(tdAttrs, {
4893
+ onClick: setSelectMobileTdId.bind(null, tdInfo, props.basicInfo, props.widgetCenter, openFillFieldsModal, -1)
4894
+ });
4895
+ }
4896
+ const fixedTableInfo = fixedTableInfoMap.value[tdId];
4897
+ return createVNode(BorderTD, mergeProps({
4898
+ "style": tdInfo.style
4899
+ }, tdAttrs, {
4900
+ "isEmpty": true
4901
+ }), {
4902
+ default: () => tdInfo.cellValueType !== CellType.Default || tdInfo.cellWidget.props.value ? slots.widget?.({
4903
+ tdInfo,
4904
+ ...widgetAttrs,
4905
+ dynamicConfig
4906
+ }) : null,
4907
+ // [固定表]右上角 加装 操作按钮
4908
+ tableAction: (() => {
4909
+ const fixedTableActionVisible = fixedTableInfo?.quickFillVisible && !filledFixedTableKeys.value.includes(fixedTableInfo.subFieldKey);
4910
+ return () => fixedTableActionVisible ? createVNode(_sfc_main$2, {
4911
+ "tdId": tdId,
4912
+ "formState": props.formState,
4913
+ "widgetCenter": props.widgetCenter,
4914
+ "fixedTableInfo": fixedTableInfo
4915
+ }, null) : null;
4916
+ })()
4917
+ });
4918
+ }
4919
+ if (realTdAttrInfo && tdInfo.cellHidden) {
4920
+ const sourceTdInfo = props.widgetCenter[dynamicConfig?.sourceTdId];
4921
+ const widgetAttrs = getWidgetAttrs(tdInfo);
4922
+ return createVNode(BorderTD, mergeProps({
4923
+ "style": tdInfo.style
4924
+ }, tdAttrs, {
4925
+ "isEmpty": true
4926
+ }), {
4927
+ default: () => [dynamicConfig?.isDynRo ? slots.widget?.({
4928
+ tdInfo: sourceTdInfo,
4929
+ ...widgetAttrs,
4930
+ dynamicConfig
4931
+ }) : null]
4932
+ });
4933
+ }
4934
+ })]);
4935
+ })])])])])]);
4936
+ }
4937
+ });
4938
+ const _hoisted_1 = { class: "document-quick-fill-container" };
4939
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4940
+ __name: "dynamic-quick-fill-modal",
4941
+ props: {
4942
+ columns: {},
4943
+ modal: {},
4944
+ callback: {}
4945
+ },
4946
+ setup(__props) {
4947
+ const props = __props;
4948
+ const rows = ref([]);
4949
+ function makeEmptyRow() {
4950
+ return Object.fromEntries(props.columns.map((c) => [c.prop, ""]));
4951
+ }
4952
+ function initRows(count = 10) {
4953
+ rows.value = Array.from({ length: count }, () => makeEmptyRow());
4954
+ }
4955
+ onBeforeMount(() => {
4956
+ initRows(200);
4957
+ });
4958
+ async function onSave() {
4959
+ try {
4960
+ return {
4961
+ ok: true,
4962
+ params: {
4963
+ data: processQuickFillRows(unref(rows), props.columns)
4964
+ }
4965
+ };
4966
+ } catch (err) {
4967
+ console.warn(err);
4968
+ }
4969
+ return {
4970
+ ok: false
4971
+ };
4972
+ }
4973
+ useModal(onSave);
4974
+ return (_ctx, _cache) => {
4975
+ return openBlock(), createElementBlock("div", _hoisted_1, [
4976
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "quick-fill-tips" }, [
4977
+ createElementVNode("i", { class: "iconfont icon-zhuyi" }),
4978
+ createElementVNode("ul", { class: "tips-list" }, [
4979
+ createElementVNode("li", null, "可将Excel内容粘贴到表格中,支持使用复制、粘贴、删除快捷键"),
4980
+ createElementVNode("li", null, "表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割)"),
4981
+ createElementVNode("li", null, "当前快速填报最多支持200行")
4982
+ ])
4983
+ ], -1)),
4984
+ createVNode(unref(q), {
4985
+ class: "cell-border",
4986
+ range: "",
4987
+ resize: "",
4988
+ colSize: 200,
4989
+ source: rows.value,
4990
+ columns: __props.columns,
4991
+ theme: "material",
4992
+ "hide-attribution": "",
4993
+ "apply-on-close": true,
4994
+ "row-headers": { prop: "rowIndex", name: "序号", size: 60 }
4995
+ }, null, 8, ["source", "columns"])
4996
+ ]);
4997
+ };
4998
+ }
4999
+ });
5000
+ const DynamicQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-ae9acd3f"]]);
5001
+ const _sfc_main = /* @__PURE__ */ defineComponent({
5002
+ __name: "dynamic-table-action",
5003
+ props: {
5004
+ subTableFieldId: {},
5005
+ mobileTdIdGroups: {},
5006
+ widgetCenter: {},
5007
+ handleMenuClick: {},
5008
+ showDelBtn: { type: Boolean },
5009
+ showQuickFillBtn: { type: Boolean },
5010
+ showInsertMultiple: { type: Boolean, default: true },
5011
+ showEditBtn: { type: Boolean },
5012
+ isMaterialConsume: { type: Boolean },
5013
+ showBom: { type: Boolean },
5014
+ showScanBtn: { type: Boolean },
5015
+ showConfirmBtn: { type: Boolean },
5016
+ noPopover: { type: Boolean },
5017
+ menus: {}
5018
+ },
5019
+ setup(__props) {
5020
+ const props = __props;
5021
+ const fieldColumn = computed(() => {
5022
+ const info = getSubTableQuickFillInfo(props.subTableFieldId, props.mobileTdIdGroups);
5023
+ if (!info?.mainWidgetIds?.length) return [];
4917
5024
  return info.mainWidgetIds.flatMap((tdId) => {
4918
5025
  const widget = props.widgetCenter?.[tdId];
4919
5026
  if (!widget) return [];
@@ -4923,7 +5030,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4923
5030
  const wProps = cellWidget.props || {};
4924
5031
  const { isFieldModel, field, fieldType, newSpecificConfig } = wProps;
4925
5032
  if (isFieldModel) return [];
4926
- if (!allowed.has(fieldType)) return [];
5033
+ if (!QUICK_FILL_ALLOWED_FIELDS.has(fieldType)) return [];
4927
5034
  return {
4928
5035
  fieldType,
4929
5036
  field,
@@ -4936,7 +5043,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4936
5043
  const onMenuClick = async ({ key, actionValue }) => {
4937
5044
  if (key === "quickFillRowCurrent") {
4938
5045
  const res = await window.NocodeAdapter.utils.overlay.modal(
4939
- DocumentQuickFillModal,
5046
+ DynamicQuickFillModal,
4940
5047
  { columns: fieldColumn.value },
4941
5048
  { title: "快速填报", width: "1060px" }
4942
5049
  );
@@ -4972,20 +5079,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4972
5079
  };
4973
5080
  }
4974
5081
  });
4975
- const DocumentSubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1a0e170d"]]);
5082
+ const DynamicTableAction = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-53d7e66c"]]);
4976
5083
  export {
4977
5084
  BorderTD as B,
4978
5085
  DeviceLinkTmplUtil as D,
4979
- FormTmplConfigController as F,
5086
+ FixedQuickFillModal as F,
4980
5087
  MaterialConsumptionPatternEnum as M,
4981
5088
  SubTableCore as S,
4982
- _sfc_main$4 as _,
5089
+ _sfc_main$6 as _,
4983
5090
  useFormTmplConfig as a,
4984
5091
  useStyles as b,
4985
5092
  useDependency as c,
4986
5093
  useValidator as d,
4987
5094
  DocumentPaper as e,
4988
- DocumentSubTableAction as f,
5095
+ DynamicTableAction as f,
4989
5096
  MaterialConsumeTableController as g,
4990
5097
  SubTableActionMenuTypeEnum as h,
4991
5098
  getMenuByAction as i,
@@ -4994,11 +5101,12 @@ export {
4994
5101
  getInsertSubMenu as l,
4995
5102
  useMaterialBalance as m,
4996
5103
  commonUtils as n,
4997
- DocumentQuickFillModal as o,
4998
- DeviceConnector as p,
4999
- DocumentLoading as q,
5000
- MCDataUtil as r,
5001
- useOnlineFormActionButton as s,
5104
+ DeviceConnector as o,
5105
+ DocumentLoading as p,
5106
+ DynamicQuickFillModal as q,
5107
+ FormTmplConfigController as r,
5108
+ MCDataUtil as s,
5109
+ useOnlineFormActionButton as t,
5002
5110
  useOnlineFormTransformField2Component as u,
5003
5111
  validate as v
5004
5112
  };