@gct-paas/excel 0.1.18 → 0.1.19

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 (163) hide show
  1. package/dist/{VueVideoPlayer-D3u-ZHom.js → VueVideoPlayer-Bt1Le9qP.js} +2 -2
  2. package/dist/{agg-design-D7CkIPCA.js → agg-design-B_5evAJ0.js} +1 -1
  3. package/dist/{agg-props-DNNO9ucx.js → agg-props-C62Ecenu.js} +1 -1
  4. package/dist/{agg-style-v_94dzX8.js → agg-style-Q0xSL8Ye.js} +1 -1
  5. package/dist/{align-editor-COpCDpFf.js → align-editor-D_LtYlh3.js} +1 -1
  6. package/dist/{attach-fields-editor-o_7W-2sr.js → attach-fields-editor-3v3VNOfe.js} +2 -2
  7. package/dist/{barcode-design-CvsGGAio.js → barcode-design-lusKmMnv.js} +3 -2
  8. package/dist/base/index.es.js +63 -138
  9. package/dist/base-font-editor-DmasOst9.js +119 -0
  10. package/dist/{boolean-design-Hc8Es5l1.js → boolean-design-BqGJVhKn.js} +3 -2
  11. package/dist/{boolean-props-CGamLGXA.js → boolean-props-DS7J4GHS.js} +3 -3
  12. package/dist/{boolean-style-m-WuSO6S.js → boolean-style-C9FslVV7.js} +5 -4
  13. package/dist/cell-upload-BFw5Yg_j.js +33 -0
  14. package/dist/{date-range-editor-BZkhUU-x.js → date-range-editor-PmJBHc8i.js} +3 -2
  15. package/dist/{date-time-design-B_oFOcft.js → date-time-design-DQ_Z-xUx.js} +1 -1
  16. package/dist/{date-time-props-hGnSGQKc.js → date-time-props-DfZoJukN.js} +3 -3
  17. package/dist/{date-time-style-CGKG8i3K.js → date-time-style-Doye-MHk.js} +1 -1
  18. package/dist/{decimal-design-B5Artgk6.js → decimal-design-Bg-tdrtL.js} +7 -3
  19. package/dist/{decimal-display-mode-C4XUezoP.js → decimal-display-mode-D_K6_XX1.js} +3 -2
  20. package/dist/{decimal-props-Q37uOcWl.js → decimal-props-4QveEdf3.js} +5 -4
  21. package/dist/{decimal-style-C2CnGPVG.js → decimal-style-B-n8SfAy.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-B3GvGAje.js} +3 -2
  23. package/dist/{diagonal-design-CyUvkcvp.js → diagonal-design-B_l3lV5s.js} +2 -2
  24. package/dist/{double-design-D_ipWcRm.js → double-design-BaWZXLjK.js} +6 -3
  25. package/dist/{double-props-D4FGbfe2.js → double-props-sDsBpAER.js} +4 -4
  26. package/dist/{double-style-BbD_6_Os.js → double-style--oSjQw07.js} +1 -1
  27. package/dist/{document-sub-table-action-Cy6Rd8OS.js → dynamic-table-action-zLjamAaN.js} +746 -467
  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_94e9d614_lang-UooIxEeL.js} +50 -47
  29. package/dist/{edit.utils-CXmmCnxE-BK4QnSP-.js → edit.utils-CXmmCnxE-BrwRVXLT.js} +1 -1
  30. package/dist/{enum-design-lOufLU6Z.js → enum-design-BgVuHvvu.js} +13 -7
  31. package/dist/{enum-props-brKRP5Uz.js → enum-props-DYN6LsLg.js} +4 -4
  32. package/dist/{enum-style-BQQHkDUD.js → enum-style-D56_-gMw.js} +37 -9
  33. package/dist/excel.css +565 -252
  34. package/dist/{exceljs.min-CUwGyNAf.js → exceljs.min-DQkwXbni.js} +2 -2
  35. package/dist/{expression-design-BPEci3dg.js → expression-design-CIMwIArR.js} +1 -1
  36. package/dist/{expression-props-Cvg-9V-B.js → expression-props--l3LwKAM.js} +1 -1
  37. package/dist/{expression-style-Dv3Hl8lm.js → expression-style-CjM5oro9.js} +1 -1
  38. package/dist/{file-design-BIzi6cpq.js → file-design-BYcXA55B.js} +1 -1
  39. package/dist/{file-props-oV2U7bpO.js → file-props-DvsQZUcL.js} +2 -2
  40. package/dist/{file-style-CZrxokgP.js → file-style-BiWmCsMZ.js} +1 -1
  41. package/dist/{font-editor-B41KgpWJ.js → font-editor-BaRVmXey.js} +3 -3
  42. package/dist/{form-annotation-controller-CdNmJKv-.js → form-annotation-controller-Zw6OoPLe.js} +3 -2
  43. package/dist/{image-design-C3FEtW6i.js → image-design-Bad-BXel.js} +3 -2
  44. package/dist/{image-design-DMfBfSkD.js → image-design-Dr_w89Hq.js} +2 -2
  45. package/dist/{image-props-DPibJk7n.js → image-props-4lKEAwDq.js} +1 -1
  46. package/dist/{image-style-DLudd5Vt.js → image-style-LoHD1zvr.js} +1 -1
  47. package/dist/{index-B1CG-75q.js → index--Bxx_VqV.js} +3 -2
  48. package/dist/{index-BgZkpQKh.js → index-3qfB5NN-.js} +2 -1
  49. package/dist/{index-DsNRjyQD.js → index-B-2N8GeG.js} +2 -1
  50. package/dist/{index-BiNVmD5v.js → index-B3YoA1vo.js} +2 -1
  51. package/dist/{index-CUIGN7Rt.js → index-B9IMST50.js} +2 -1
  52. package/dist/{index-DPQkm6_v.js → index-BSfbsA-W.js} +2 -1
  53. package/dist/{index-DHVK-P9J.js → index-BZYuG4zS.js} +2 -1
  54. package/dist/{index-BOis3jsA.js → index-B_VejD7m.js} +4 -1
  55. package/dist/{index-B8wKNUsK.js → index-Bki98NXv.js} +2 -1
  56. package/dist/{index-CtiiIgjs.js → index-Bm6Hdoud.js} +53 -110
  57. package/dist/{index-oSIIidoF.js → index-BsUkUBZV.js} +2 -1
  58. package/dist/{index-Cn_c3-eW.js → index-Bsjegt_0.js} +2 -1
  59. package/dist/{index-rXMzwu77.js → index-ByXwQO9g.js} +5 -2
  60. package/dist/{index-CkYbgRrH.js → index-C6mtZJIQ.js} +2 -1
  61. package/dist/{index-D7fFpHaN.js → index-C7KdVTwU.js} +2 -1
  62. package/dist/{index-B1r6-Uxf.js → index-CEufXc_2.js} +2 -1
  63. package/dist/{index-D0YZX_c7.js → index-CH--dgZ4.js} +2 -1
  64. package/dist/{index-Bppcm2iQ.js → index-COiTpNXf.js} +2 -1
  65. package/dist/{index-BZ1jj7Nu.js → index-CP099vf_.js} +2 -1
  66. package/dist/{index-DH_EZe8p.js → index-CQ7Hcly4.js} +2 -1
  67. package/dist/{index-Cp7mC3Qt.js → index-CcLTIQGc.js} +2 -1
  68. package/dist/{index-DAqYc474.js → index-Ce0SltjH.js} +2 -1
  69. package/dist/{index-B7lz2J6V.js → index-CqjhgxKH.js} +2 -1
  70. package/dist/{index-Cjz0GLDq.js → index-D-mFMP7t.js} +3 -2
  71. package/dist/{index-DFoELlwd.js → index-D4Yb4Urx.js} +2 -1
  72. package/dist/{index-I_FRG0Ho.js → index-D9CHdykS.js} +2 -1
  73. package/dist/{index-B8ey1U_N.js → index-DDnUeBCP.js} +2 -1
  74. package/dist/{index-vZZ5q2xJ.js → index-DRYxbbtG.js} +2 -1
  75. package/dist/{index-yih5hGsL.js → index-Dk-CUvB9.js} +2910 -2545
  76. package/dist/{index-Bvjplnz_.js → index-DpPrrfLV.js} +2 -1
  77. package/dist/{index-C5bYd42n.js → index-Dq72GFzs.js} +3 -2
  78. package/dist/{index-DDpNgyvD.js → index-Vx5npC-J.js} +3 -2
  79. package/dist/{index-DJIzgsog.js → index-pPTh0-mL.js} +2 -1
  80. package/dist/index.es.js +2 -2
  81. package/dist/{integer-design-DhkNa9IA.js → integer-design-C2EkL0hc.js} +6 -3
  82. package/dist/{integer-props-c_aQpjaT.js → integer-props-Cs-CvjQS.js} +5 -4
  83. package/dist/{integer-style-CS5v7Bhq.js → integer-style-BtAfQCAn.js} +1 -1
  84. package/dist/{mb-render-Cs7LUxzk.js → mb-render-CsWNoQnS.js} +1 -1
  85. package/dist/{number-input-ex-CwKIHfk1.js → number-input-ex-eza87s5O.js} +12 -4
  86. package/dist/{org-props-BcbW62Jg.js → org-props-BJ6FKaVj.js} +3 -2
  87. package/dist/{org-style-Bk7mgML3.js → org-style-LRy5QsV5.js} +1 -1
  88. package/dist/{pagination-design-B1KyJUAG.js → pagination-design-sA-kbILI.js} +3 -2
  89. package/dist/paper-widget-design-BGY5qu-K.js +4 -0
  90. package/dist/{qrcode-design-EafZURDZ.js → qrcode-design-BsWJrsvD.js} +1 -1
  91. package/dist/{ref-autofill-editor-OtclaSqy.js → ref-autofill-editor-BbozAOcm.js} +2 -2
  92. package/dist/{ref-props-C95McyZp.js → ref-props-BInJu7PN.js} +3 -3
  93. package/dist/{ref-style-BxdvOF-4.js → ref-style-Dgc_9tko.js} +1 -1
  94. package/dist/{regex-editor-BGukvOEI.js → regex-editor-C09XpMhm.js} +2 -2
  95. package/dist/{revo-grid.entry-BeRVTVKO.js → revo-grid.entry-BIm5A5wM.js} +1 -1
  96. package/dist/{revogr-attribution_7.entry-CHtbU2lV.js → revogr-attribution_7.entry-B06XF5B_.js} +3 -3
  97. package/dist/{revogr-clipboard_3.entry-DnvQ-Rl7.js → revogr-clipboard_3.entry-C8dVJYtR.js} +2 -2
  98. package/dist/{revogr-data_4.entry-DLRSuaN8.js → revogr-data_4.entry-Dgp6vYqe.js} +2 -2
  99. package/dist/{revogr-filter-panel.entry-BDkhY-74.js → revogr-filter-panel.entry-xo_juIUc.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-vIUGBOWr.js} +3 -2
  101. package/dist/{serialnumber-design-CRaym9J-.js → serialnumber-design-mWcys6hI.js} +1 -1
  102. package/dist/shared/index.es.js +4 -4
  103. package/dist/{signature-design-BJHfLDNV.js → signature-design-Dl-Lv5Z5.js} +5 -2
  104. package/dist/{signature-props-B9hfppHh.js → signature-props-DSzpO-_r.js} +3 -3
  105. package/dist/{signature-style-DM4rqHnN.js → signature-style-Bk34vOsk.js} +1 -1
  106. package/dist/{single-field-drop-eClQhTSv.js → single-field-drop-CiPUMT9B.js} +2 -2
  107. package/dist/{size-editor-BjlCmEWf.js → size-editor-B5aunbUM.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} +6 -4
  111. package/dist/src/nocode-base/src/components/document-quick-fill/quick-fill.util.d.ts +17 -0
  112. package/dist/src/nocode-base/src/components/document-sub-table-action/fixed-table-action.vue.d.ts +13 -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/render/mc-render.d.ts +3 -1
  119. package/dist/src/nocode-base/src/types/render/sub-table-render.d.ts +3 -1
  120. package/dist/src/nocode-base/src/types/widgets/i-sub-table.d.ts +4 -0
  121. package/dist/src/nocode-web-render/src/hooks/userFormPrint.d.ts +2 -0
  122. package/dist/src/nocode-web-render/src/render/index.d.ts +2 -2
  123. package/dist/src/nocode-web-render/src/render/sub-table/common/scan-modal.vue.d.ts +3 -1
  124. package/dist/src/nocode-web-render/src/render/sub-table/common/sub-table-render.d.ts +3 -1
  125. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/index.d.ts +1 -2
  126. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/mc-web-render.d.ts +3 -1
  127. package/dist/src/online-form/src/utils/field.enum.d.ts +3 -2
  128. package/dist/src/online-form/src/views/designer/hooks/useAllSpreadSheets.d.ts +16 -0
  129. package/dist/src/online-form/src/views/designer/hooks/useSpreadSheet.d.ts +27 -2
  130. 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
  131. package/dist/src/online-form/src/views/designer/modules/panel/comps/quick-fill-config.vue.d.ts +8 -0
  132. package/dist/src/online-form/src/views/designer/modules/sheet/sheet-cell.vue.d.ts +1 -0
  133. package/dist/src/online-form/src/views/designer/types/index.d.ts +2 -0
  134. package/dist/{text-design-BGxM7gzI.js → text-design-BIFz5gw1.js} +3 -2
  135. package/dist/{text-design-C3RhersV.js → text-design-C0dORvkP.js} +10 -6
  136. package/dist/{text-props-CIpXslMv.js → text-props-ClHI-4aM.js} +5 -5
  137. package/dist/{text-style-BPjaT5Ic.js → text-style-DANM5fvy.js} +1 -1
  138. package/dist/{throttle-Cpk1LoGk-LNQ7rPwu.js → throttle-Cpk1LoGk-Da5HSLWc.js} +1 -1
  139. package/dist/{timediff-design-DqVuVrmx.js → timediff-design-BDCsQIal.js} +2 -1
  140. package/dist/{trace-design-IbjVLAhv.js → trace-design-CKqq1WH_.js} +2 -2
  141. package/dist/{trace-props-C-F_eDG2.js → trace-props-BI24XFMc.js} +6 -6
  142. package/dist/{trace-style-DRenZ1n1.js → trace-style-CX1f7oZH.js} +1 -1
  143. package/dist/{user-props-qQx7HZ7T.js → user-props-gF7KPnP8.js} +3 -2
  144. package/dist/{user-style-BPFOx0xn.js → user-style-DIouAMWa.js} +1 -1
  145. package/dist/{value-editor.vue_vue_type_style_index_0_lang-Crnt5d7x.js → value-editor.vue_vue_type_style_index_0_lang-DHj-zNxm.js} +3 -2
  146. package/dist/{version-select-BkZzH36D.js → version-select-CL3QQGND.js} +2 -2
  147. package/dist/web-render/index.es.js +9 -9
  148. package/dist/{widget-barcode-CPZjarSa.js → widget-barcode-DZiCyrQW.js} +5 -4
  149. package/dist/{widget-diagonal-DebN3u9t.js → widget-diagonal-D_Oz8te1.js} +3 -3
  150. package/dist/{widget-image-BSMWxm9c.js → widget-image-TL_SLOap.js} +5 -5
  151. package/dist/{widget-line-CyavTHOV.js → widget-line-BQ-qcBUA.js} +3 -2
  152. package/dist/{widget-pagination-ZCBdy6HQ.js → widget-pagination-DciJE9qC.js} +6 -5
  153. package/dist/{widget-power-B1NFysHT.js → widget-power-B9KTIpwA.js} +3 -3
  154. package/dist/{widget-qrcode-B0TTSoSK.js → widget-qrcode-DRoj5rSy.js} +4 -3
  155. package/dist/{widget-rangelimit-C_ureKDr.js → widget-rangelimit-Ckgx3i4r.js} +3 -3
  156. package/dist/{widget-serialnumber-Dq15dHnk.js → widget-serialnumber-aUkR-0yC.js} +1 -1
  157. package/dist/{widget-text-B9EXKFiM.js → widget-text-CJIT-hY3.js} +5 -5
  158. package/dist/{widget-timediff-BhLrQuGb.js → widget-timediff-x-RQMdNg.js} +3 -2
  159. package/package.json +1 -1
  160. package/dist/base-font-editor-BmC423aB.js +0 -83
  161. package/dist/cell-upload-CiXVE0Ii.js +0 -25
  162. package/dist/paper-widget-design-Cp0ioo8c.js +0 -4
  163. /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, bh as getSubTableQuickFillInfo } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_94e9d614_lang-UooIxEeL.js";
4
+ import { u as useFormModel, w as watchDebounced } from "./mb-render-CsWNoQnS.js";
5
5
  import dayjs from "dayjs";
6
+ import { Modal } from "ant-design-vue";
6
7
  var MaterialConsumptionPatternEnum = /* @__PURE__ */ ((MaterialConsumptionPatternEnum2) => {
7
8
  MaterialConsumptionPatternEnum2["RECORD"] = "record";
8
9
  MaterialConsumptionPatternEnum2["BOM"] = "bom";
@@ -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
  });
@@ -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-0 right-0 w-0 h-0"
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-913cb126"]]);
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,448 +4152,243 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
4123
4152
  })])])]);
4124
4153
  }
4125
4154
  });
4126
- const DocumentPaper = /* @__PURE__ */ defineComponent({
4127
- name: "NocodeDocumentPaper",
4128
- 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
+ function processRows(rows = [], columns = []) {
4156
+ const isBlank = (v) => v === null || v === void 0 || typeof v === "string" && v.trim() === "" || Array.isArray(v) && v.length === 0;
4157
+ const roundToScale = (num, scale) => {
4158
+ if (scale == null) return num;
4159
+ const factor = Math.pow(10, scale);
4160
+ return Math.round(num * factor) / factor;
4161
+ };
4162
+ const parseNumber = (v, { integer = false, scale = null } = {}) => {
4163
+ if (v === null || v === void 0) return null;
4164
+ if (typeof v === "number") {
4165
+ if (!Number.isFinite(v)) return null;
4166
+ if (integer && !Number.isInteger(v)) return null;
4167
+ const n2 = scale != null ? roundToScale(v, scale) : v;
4168
+ return Number.isFinite(n2) ? n2 : null;
4155
4169
  }
4156
- },
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`
4170
+ let s = String(v).trim();
4171
+ if (s === "") return null;
4172
+ s = s.replace(/,/g, "");
4173
+ if (/^[\(\(].+[\)\)]$/.test(s)) {
4174
+ s = "-" + s.replace(/^[\(\(]|[\)\)]$/g, "");
4175
+ }
4176
+ const n = Number(s);
4177
+ if (!Number.isFinite(n)) return null;
4178
+ if (integer) {
4179
+ if (!Number.isInteger(n)) return null;
4180
+ return n;
4181
+ } else {
4182
+ return scale != null ? roundToScale(n, scale) : n;
4183
+ }
4184
+ };
4185
+ const parseToDate = (v) => {
4186
+ if (v === null || v === void 0 || v === "") return null;
4187
+ if (typeof v === "string") {
4188
+ let s = v.trim();
4189
+ if (s === "") return null;
4190
+ s = s.replace(/-/g, "/");
4191
+ if (/^\d{1,2}:\d{2}(:\d{2})?$/.test(s)) {
4192
+ const today = /* @__PURE__ */ new Date();
4193
+ const datePart = `${today.getFullYear()}/${today.getMonth() + 1}/${today.getDate()}`;
4194
+ s = `${datePart} ${s}`;
4191
4195
  }
4192
- };
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
4218
- });
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
4231
- };
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;
4196
+ const d = new Date(s);
4197
+ return isNaN(d) ? null : d;
4198
+ }
4199
+ return null;
4200
+ };
4201
+ const buildOptionLookup = (opts = []) => {
4202
+ const map = /* @__PURE__ */ new Map();
4203
+ for (const o of opts) {
4204
+ const val = o.value != null ? String(o.value) : void 0;
4205
+ const text = o.text != null ? String(o.text) : void 0;
4206
+ const label = o.label != null ? String(o.label) : void 0;
4207
+ if (val !== void 0) map.set(val, val);
4208
+ if (text !== void 0) map.set(text, val || text);
4209
+ if (label !== void 0) map.set(label, val || label);
4210
+ }
4211
+ return map;
4212
+ };
4213
+ const pad2 = (n) => String(n).padStart(2, "0");
4214
+ const formatDate = (d) => `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
4215
+ const formatTime = (d) => `${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`;
4216
+ const formatDateTime = (d) => `${formatDate(d)} ${formatTime(d)}`;
4217
+ const out = rows.map((row) => {
4218
+ const newRow = { ...row };
4219
+ for (const f of columns) {
4220
+ const val = row[f.prop];
4221
+ switch (f.fieldType) {
4222
+ case FIELD_TYPE.INTEGER:
4223
+ case FIELD_TYPE.LONG:
4224
+ {
4225
+ const n = parseNumber(val, { integer: true });
4226
+ newRow[f.prop] = isBlank(n) ? void 0 : n;
4227
+ }
4228
+ break;
4229
+ case FIELD_TYPE.DOUBLE:
4230
+ case FIELD_TYPE.DECIMAL:
4231
+ {
4232
+ const n = parseNumber(val, { integer: false, scale: null });
4233
+ newRow[f.prop] = isBlank(n) ? void 0 : n;
4234
+ }
4235
+ break;
4236
+ case FIELD_TYPE.DATE:
4237
+ {
4238
+ const d = parseToDate(val);
4239
+ newRow[f.prop] = d ? formatDate(d) : isBlank(val) ? void 0 : val;
4240
+ }
4241
+ break;
4242
+ case FIELD_TYPE.TIME:
4243
+ {
4244
+ const d = parseToDate(val);
4245
+ newRow[f.prop] = d ? formatTime(d) : isBlank(val) ? void 0 : val;
4246
+ }
4247
+ break;
4248
+ case FIELD_TYPE.DATE_TIME:
4249
+ {
4250
+ const d = parseToDate(val);
4251
+ newRow[f.prop] = d ? formatDateTime(d) : isBlank(val) ? void 0 : val;
4252
+ }
4253
+ break;
4254
+ case FIELD_TYPE.OPTION_MULTI:
4255
+ {
4256
+ const lookup = buildOptionLookup(f.newOptions);
4257
+ if (typeof val === "string") {
4258
+ const tokens = val.split(/[;,]/).map((s) => s.trim()).filter((s) => s !== "");
4259
+ const arr = tokens.map((t) => lookup.get(t)).filter((v) => v !== void 0);
4260
+ newRow[f.prop] = arr.length ? arr.join(",") : void 0;
4261
+ } else {
4262
+ newRow[f.prop] = isBlank(val) ? void 0 : val;
4263
+ }
4264
+ }
4265
+ break;
4266
+ case FIELD_TYPE.OPTION:
4267
+ {
4268
+ const lookup = buildOptionLookup(f.newOptions);
4269
+ if (isBlank(val)) {
4270
+ newRow[f.prop] = void 0;
4271
+ } else {
4272
+ const tokens = val.split(/[;,]/).map((s) => s.trim()).filter((s) => s !== "");
4273
+ const normalized = lookup.get(tokens?.[0]);
4274
+ newRow[f.prop] = normalized !== void 0 ? normalized : void 0;
4275
+ }
4276
+ }
4277
+ break;
4278
+ default:
4279
+ newRow[f.prop] = isBlank(val) ? void 0 : val;
4280
+ }
4281
+ }
4282
+ return newRow;
4283
+ }).filter((row) => {
4284
+ return columns.some((f) => {
4285
+ const v = row[f.prop];
4286
+ if (v === 0 || v === false) return true;
4287
+ return !isBlank(v);
4288
+ });
4289
+ });
4290
+ return out;
4291
+ }
4292
+ function groupFixedTableRows(rows, options) {
4293
+ const { rowCount, colCount, direction, z = "row" } = options;
4294
+ const n = rows.length;
4295
+ if (!n) return [];
4296
+ const keys = Object.keys(rows[0]);
4297
+ const m = keys.length;
4298
+ const matrix = rows.map((row) => keys.map((k) => row[k]));
4299
+ const result = [];
4300
+ function createBlock2(startRow, startCol, height, width) {
4301
+ const values = [];
4302
+ if (z === "row") {
4303
+ for (let r = 0; r < height; r++) {
4304
+ const rowValues = [];
4305
+ for (let c = 0; c < width; c++) {
4306
+ rowValues.push(matrix[startRow + r][startCol + c]);
4245
4307
  }
4246
- Object.assign(attrInfo, baseInfo);
4308
+ if (r % 2 === 1) {
4309
+ rowValues.reverse();
4310
+ }
4311
+ values.push(...rowValues);
4247
4312
  }
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();
4313
+ } else {
4314
+ for (let c = 0; c < width; c++) {
4315
+ const colValues = [];
4316
+ for (let r = 0; r < height; r++) {
4317
+ colValues.push(matrix[startRow + r][startCol + c]);
4318
+ }
4319
+ if (c % 2 === 1) {
4320
+ colValues.reverse();
4321
+ }
4322
+ values.push(...colValues);
4254
4323
  }
4324
+ }
4325
+ const row = {};
4326
+ values.forEach((v, i) => {
4327
+ row[`K${i}`] = v;
4255
4328
  });
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
- })])])])])]);
4329
+ result.push(row);
4403
4330
  }
4404
- });
4405
- const _hoisted_1$1 = { class: "document-quick-fill-container" };
4406
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4407
- __name: "document-quick-fill-modal",
4331
+ if (direction === "x") {
4332
+ for (let r = 0; r < n; r += rowCount) {
4333
+ for (let c = 0; c < m; c += colCount) {
4334
+ createBlock2(r, c, Math.min(rowCount, n - r), Math.min(colCount, m - c));
4335
+ }
4336
+ }
4337
+ } else {
4338
+ for (let c = 0; c < m; c += colCount) {
4339
+ for (let r = 0; r < n; r += rowCount) {
4340
+ createBlock2(r, c, Math.min(rowCount, n - r), Math.min(colCount, m - c));
4341
+ }
4342
+ }
4343
+ }
4344
+ return result;
4345
+ }
4346
+ const _hoisted_1$2 = { class: "document-quick-fill-container" };
4347
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4348
+ __name: "fixed-quick-fill-modal",
4408
4349
  props: {
4409
- columns: {},
4410
- modal: {},
4411
- callback: {}
4350
+ rowCount: {},
4351
+ colCount: {},
4352
+ dgRowCount: {},
4353
+ dgColCount: {},
4354
+ dgDirection: {},
4355
+ columns: {}
4412
4356
  },
4413
4357
  setup(__props) {
4414
4358
  const props = __props;
4415
4359
  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
- }
4360
+ const cols = ref([]);
4422
4361
  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
- }
4362
+ const { rowCount, colCount } = props;
4363
+ const newRow = () => Array.from({ length: colCount }).reduce((map, v, i) => {
4364
+ map[`KEY${i}`] = "";
4481
4365
  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
- }
4366
+ }, {});
4367
+ rows.value = Array.from({ length: rowCount }, newRow);
4368
+ cols.value = Object.keys(rows.value?.[0] || {}).map((k) => ({ prop: k, name: k }));
4369
+ });
4370
+ async function onSave() {
4371
+ const { dgRowCount, dgColCount, dgDirection, columns } = props;
4372
+ const groupedRows = groupFixedTableRows(unref(rows), {
4373
+ rowCount: dgRowCount,
4374
+ colCount: dgColCount,
4375
+ direction: dgDirection
4376
+ }).map((row) => {
4377
+ const values = Object.values(row);
4378
+ if (values.every((v) => v === "")) {
4379
+ return null;
4551
4380
  }
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);
4381
+ const _row = {};
4382
+ columns.forEach((col, i) => {
4383
+ _row[col.prop] = values[i];
4558
4384
  });
4559
- });
4560
- return out;
4561
- }
4562
- async function onSave() {
4385
+ return _row;
4386
+ }).filter(Boolean);
4563
4387
  try {
4564
4388
  return {
4565
4389
  ok: true,
4566
4390
  params: {
4567
- data: processRows(unref(rows.value))
4391
+ data: processRows(groupedRows, columns)
4568
4392
  }
4569
4393
  };
4570
4394
  } catch (err) {
@@ -4576,13 +4400,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4576
4400
  }
4577
4401
  useModal(onSave);
4578
4402
  return (_ctx, _cache) => {
4579
- return openBlock(), createElementBlock("div", _hoisted_1$1, [
4403
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
4580
4404
  _cache[0] || (_cache[0] = createElementVNode("div", { class: "quick-fill-tips" }, [
4581
4405
  createElementVNode("i", { class: "iconfont icon-zhuyi" }),
4582
4406
  createElementVNode("ul", { class: "tips-list" }, [
4583
4407
  createElementVNode("li", null, "可将Excel内容粘贴到表格中,支持使用复制、粘贴、删除快捷键"),
4584
- createElementVNode("li", null, "表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割)"),
4585
- createElementVNode("li", null, "当前快速填报最多支持200行")
4408
+ createElementVNode("li", null, " 表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割) ")
4586
4409
  ])
4587
4410
  ], -1)),
4588
4411
  createVNode(unref(q), {
@@ -4591,22 +4414,21 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4591
4414
  resize: "",
4592
4415
  colSize: 200,
4593
4416
  source: rows.value,
4594
- columns: __props.columns,
4417
+ columns: cols.value,
4595
4418
  theme: "material",
4596
4419
  "hide-attribution": "",
4597
- "apply-on-close": true,
4598
- "row-headers": { prop: "rowIndex", name: "序号", size: 60 }
4420
+ "apply-on-close": true
4599
4421
  }, null, 8, ["source", "columns"])
4600
4422
  ]);
4601
4423
  };
4602
4424
  }
4603
4425
  });
4604
- const DocumentQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-b95f66b0"]]);
4605
- const _hoisted_1 = {
4426
+ const FixedQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-9770bafc"]]);
4427
+ const _hoisted_1$1 = {
4606
4428
  key: 1,
4607
4429
  class: "sub-table-action__subtitle"
4608
4430
  };
4609
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4431
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
4610
4432
  __name: "sub-table-action",
4611
4433
  props: {
4612
4434
  showDelBtn: { type: Boolean, default: false },
@@ -4624,7 +4446,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4624
4446
  setup(__props, { emit: __emit }) {
4625
4447
  const props = __props;
4626
4448
  const emit = __emit;
4627
- computed(() => {
4449
+ const showMenus = computed(() => {
4628
4450
  const menus = [
4629
4451
  ...props.isMaterialConsume ? [
4630
4452
  {
@@ -4734,6 +4556,9 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4734
4556
  ];
4735
4557
  return menus.filter((i) => i.show !== false);
4736
4558
  });
4559
+ const displayMenus = computed(
4560
+ () => props.menus?.length ? props.menus : showMenus.value
4561
+ );
4737
4562
  const stopRefPropagation = (vm) => {
4738
4563
  if (!vm?.$el) {
4739
4564
  return;
@@ -4784,11 +4609,11 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4784
4609
  selectedKeys: []
4785
4610
  }, {
4786
4611
  default: withCtx(() => [
4787
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.menus, (menu) => {
4612
+ (openBlock(true), createElementBlock(Fragment, null, renderList(displayMenus.value, (menu) => {
4788
4613
  return openBlock(), createElementBlock(Fragment, {
4789
4614
  key: menu.key
4790
4615
  }, [
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, {
4616
+ 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
4617
  popupClassName: "sub-table-action__submenu-popup",
4793
4618
  key: menu.key
4794
4619
  }, {
@@ -4872,9 +4697,462 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4872
4697
  };
4873
4698
  }
4874
4699
  });
4875
- const SubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-db4201e3"]]);
4700
+ const SubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-8a4cea28"]]);
4701
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4702
+ __name: "fixed-table-action",
4703
+ props: {
4704
+ formState: {},
4705
+ widgetCenter: {},
4706
+ fixedTableInfo: {}
4707
+ },
4708
+ setup(__props) {
4709
+ const menus = [
4710
+ {
4711
+ type: SubTableActionMenuTypeEnum.ACTION,
4712
+ key: SubTableActionEnum.QuickFillRowCurrent,
4713
+ label: "快速填报",
4714
+ icon: "icon-zhongxinbianjidangqianhang"
4715
+ }
4716
+ ];
4717
+ const props = __props;
4718
+ const onMenuClick = async ({ key }) => {
4719
+ if (key === "quickFillRowCurrent") {
4720
+ const { widgetCenter, fixedTableInfo } = props;
4721
+ const { range, dgRange, subFieldKey, fillDirection: dgDirection } = fixedTableInfo;
4722
+ const rowCount = range.b - range.t + 1;
4723
+ const colCount = range.r - range.l + 1;
4724
+ const dgRowCount = dgRange.b - dgRange.t + 1;
4725
+ const dgColCount = dgRange.r - dgRange.l + 1;
4726
+ const columns = Object.values(widgetCenter[ComponentTypeEnum.PAPER].props.fixedTableFieldMap).map((o) => o.fieldMeta).filter((m) => m?.subFieldKey === subFieldKey).map((m) => ({
4727
+ prop: m.field,
4728
+ fieldType: m.fieldType,
4729
+ newOptions: []
4730
+ // JSW TODO: 传递枚举单选、多选 选项
4731
+ }));
4732
+ const res = await window.NocodeAdapter.utils.overlay.modal(
4733
+ FixedQuickFillModal,
4734
+ {
4735
+ rowCount,
4736
+ colCount,
4737
+ dgRowCount,
4738
+ dgColCount,
4739
+ dgDirection,
4740
+ columns
4741
+ },
4742
+ { title: "快速填报", width: "1060px" }
4743
+ );
4744
+ if (res.ok && res.params?.data.length) {
4745
+ const validKeys = columns.map((c) => c.prop);
4746
+ const newGroupList = [...res.params.data];
4747
+ let activeIndex = 0;
4748
+ props.formState[subFieldKey].forEach((oldGroup) => {
4749
+ const isEmptyGroup = Object.values(pick(oldGroup, validKeys)).every(
4750
+ (v) => ["", null, void 0].includes(v)
4751
+ );
4752
+ if (isEmptyGroup) {
4753
+ const newGroup = newGroupList[activeIndex];
4754
+ if (newGroup) {
4755
+ Object.assign(oldGroup, newGroup);
4756
+ activeIndex++;
4757
+ }
4758
+ }
4759
+ });
4760
+ }
4761
+ }
4762
+ };
4763
+ return (_ctx, _cache) => {
4764
+ return openBlock(), createBlock(SubTableAction, {
4765
+ showQuickFillBtn: "",
4766
+ menus,
4767
+ onMenuClick
4768
+ });
4769
+ };
4770
+ }
4771
+ });
4772
+ const DocumentPaper = /* @__PURE__ */ defineComponent({
4773
+ name: "NocodeDocumentPaper",
4774
+ props: {
4775
+ /** 页面内容信息 */
4776
+ page: {
4777
+ type: Object,
4778
+ required: true
4779
+ },
4780
+ /** 映射信息 */
4781
+ basicInfo: {
4782
+ type: Object,
4783
+ required: true
4784
+ },
4785
+ /** 表单数据 */
4786
+ formState: {
4787
+ type: Object,
4788
+ required: true
4789
+ },
4790
+ /** 模板数据中心 */
4791
+ widgetCenter: {
4792
+ type: Object,
4793
+ required: true
4794
+ },
4795
+ /** 是否是移动端渲染 */
4796
+ isMobile: {
4797
+ type: Boolean
4798
+ },
4799
+ selfInfoList: {
4800
+ type: Array
4801
+ }
4802
+ },
4803
+ setup(props, {
4804
+ slots
4805
+ }) {
4806
+ provide(NCB_PROVIDE.DATA_RELATION_SHIP, props.basicInfo);
4807
+ provide(NCB_PROVIDE.FORM_INST_LIST, props.selfInfoList);
4808
+ const tmplBomCMap = inject(NCB_PROVIDE.TMPL_BOM_CONTROLLER_MAP);
4809
+ const tmplBomController = computed(() => tmplBomCMap.value?.[props.basicInfo?.uniqueId]);
4810
+ const subTableCoreFactoryMap = inject(NCB_PROVIDE.SUB_TABLE_CORE_FACTORY_MAP);
4811
+ const subTableCoreFactory = computed(() => subTableCoreFactoryMap.value?.[props.basicInfo?.uniqueId]);
4812
+ const fixedTableInfoMap = computed(() => {
4813
+ const info = props.selfInfoList?.[0];
4814
+ const map = {};
4815
+ if (!info) {
4816
+ return map;
4817
+ }
4818
+ const designer = JSON.parse(info.designerJson || "{}");
4819
+ const fixedTables = designer.sheets?.[0]?.paper?.fixedTables || designer.fixedTables || [];
4820
+ fixedTables.forEach((table) => {
4821
+ const {
4822
+ field,
4823
+ model,
4824
+ range,
4825
+ dgRange,
4826
+ fillDirection
4827
+ } = table;
4828
+ const {
4829
+ r: x,
4830
+ t: y
4831
+ } = range;
4832
+ map[[x, y].join()] = {
4833
+ subFieldKey: field,
4834
+ subModelKey: model,
4835
+ range,
4836
+ dgRange,
4837
+ fillDirection,
4838
+ quickFill: table.quickFill
4839
+ };
4840
+ });
4841
+ return map;
4842
+ });
4843
+ const mainTableRef = ref();
4844
+ const isPdfMode = inject(NCB_PROVIDE.IS_PDF, false);
4845
+ const openFillFieldsModal = inject(NCB_PROVIDE.MOBILE_FILL_FIELDS_POPUP);
4846
+ const widget = props.widgetCenter?.[ComponentTypeEnum.PAPER];
4847
+ const {
4848
+ pageMargins,
4849
+ pageSize,
4850
+ pageWidth,
4851
+ pageHeight,
4852
+ colsWidth,
4853
+ subTable2DList
4854
+ } = widget.props;
4855
+ provide(NCB_PROVIDE.PAGER, widget);
4856
+ const size = [pageWidth, pageHeight];
4857
+ const sortSize = size.slice().sort();
4858
+ const isLandscape = JSON.stringify(size) !== JSON.stringify(sortSize);
4859
+ const orientation = isLandscape ? "landscape" : "portrait";
4860
+ const resultSize = isLandscape && isPdfMode ? sortSize : size;
4861
+ const paddings = pageMargins?.split(" ");
4862
+ const config = {
4863
+ cls: orientation,
4864
+ style: {
4865
+ width: `${resultSize[0]}mm`,
4866
+ height: `${resultSize[1]}mm`
4867
+ }
4868
+ };
4869
+ const paperStyles = {
4870
+ width: `${pageWidth}mm`,
4871
+ minWidth: `${pageWidth}mm`,
4872
+ height: `${pageHeight}mm`,
4873
+ padding: pageMargins,
4874
+ "--pageWidth": `-${pageWidth}mm`
4875
+ };
4876
+ const overlayStyle = {
4877
+ ["--offset-top"]: paddings?.[0] || "0px",
4878
+ ["--offset-right"]: paddings?.[1] || "0px",
4879
+ ["--offset-bottom"]: paddings?.[2] || "0px",
4880
+ ["--offset-left"]: paddings?.[3] || "0px"
4881
+ };
4882
+ const getWidgetAttrs = (tdInfo) => {
4883
+ const attrInfo = {
4884
+ formData: props.formState
4885
+ };
4886
+ const field = tdInfo.props.fixedTableFieldId ?? "";
4887
+ if (tdInfo.props.isNewFixedTableTd) {
4888
+ const cellFixedTableDataIdx = tdInfo.cellFixedTableDataIdx ?? 0;
4889
+ Object.assign(attrInfo, {
4890
+ formData: props.formState?.[field]?.[cellFixedTableDataIdx] ?? {},
4891
+ subtableFieldId: field,
4892
+ realRowIndex: cellFixedTableDataIdx,
4893
+ pageRowIndex: cellFixedTableDataIdx
4894
+ });
4895
+ } else if (tdInfo.props.isNewCheckTable2D) {
4896
+ const {
4897
+ checkTableType
4898
+ } = tdInfo.props;
4899
+ const rowIdx = tdInfo.cellCheckTableDataRowIdx ?? 0;
4900
+ const colIdx = tdInfo.cellCheckTableDataColIdx ?? 0;
4901
+ const baseInfo = {
4902
+ subtableFieldId: field,
4903
+ realRowIndex: rowIdx,
4904
+ pageRowIndex: rowIdx,
4905
+ /** 检验表列坐标,与 realRowIndex 解耦,不改变原有 formData 绑定逻辑 */
4906
+ realColIndex: colIdx
4907
+ };
4908
+ switch (checkTableType) {
4909
+ case "col":
4910
+ baseInfo.formData = props.formState?.[field]?.[colIdx] ?? {};
4911
+ baseInfo.realRowIndex = colIdx;
4912
+ baseInfo.pageRowIndex = colIdx;
4913
+ break;
4914
+ case "row":
4915
+ baseInfo.formData = props.formState?.[field]?.[rowIdx] ?? {};
4916
+ break;
4917
+ case "child":
4918
+ baseInfo.formData = props.formState?.[field]?.[rowIdx]?.["_2DTABLE_"]?.[colIdx] ?? {};
4919
+ baseInfo.childSubTableDataIndex = colIdx;
4920
+ break;
4921
+ }
4922
+ Object.assign(attrInfo, baseInfo);
4923
+ }
4924
+ return attrInfo;
4925
+ };
4926
+ onMounted(async () => {
4927
+ if (props.basicInfo.renderModeType === RenderModeEnum.ViewMode) {
4928
+ await waitDomStable(mainTableRef.value, void 0, void 0, props.basicInfo.__isPrintRender);
4929
+ mergeMarkedTd();
4930
+ }
4931
+ });
4932
+ return () => createVNode("div", {
4933
+ "class": ["cmp-paper-wrapper", pageSize, config.cls, {
4934
+ "print-view": isPdfMode,
4935
+ // 单份打印可选隐藏字段控件底色;未显式传 false 时保持查看态底色。
4936
+ "hide-print-field-bg": props.basicInfo.showPrintFieldBg === false
4937
+ }],
4938
+ "style": {
4939
+ ...config.style,
4940
+ ...overlayStyle
4941
+ },
4942
+ "data-nocode-orientation": config.cls,
4943
+ "data-nocode-width": pageWidth,
4944
+ "data-nocode-height": pageHeight
4945
+ }, [createVNode("div", {
4946
+ "class": "cmp-paper",
4947
+ "style": paperStyles
4948
+ }, [createVNode("div", {
4949
+ "class": "cmp-paper-overlay"
4950
+ }, [slots.annotation?.(), widget.headerWidgets && createVNode("div", {
4951
+ "class": "paper-header"
4952
+ }, [slots.overlay?.({
4953
+ widgets: widget.headerWidgets
4954
+ })]), widget.footerWidgets && createVNode("div", {
4955
+ "class": "paper-footer"
4956
+ }, [slots.overlay?.({
4957
+ widgets: widget.footerWidgets
4958
+ })]), widget.watermarks && createVNode("div", {
4959
+ "class": "paper-watermark"
4960
+ }, [slots.overlay?.({
4961
+ widgets: widget.watermarks
4962
+ })])]), createVNode("div", {
4963
+ "class": "cmp-paper-container"
4964
+ }, [createVNode("table", {
4965
+ "ref": mainTableRef,
4966
+ "class": "main-table-wrapper",
4967
+ "cellpadding": "0",
4968
+ "cellspacing": "0"
4969
+ }, [createVNode("colgroup", null, [colsWidth.map((cw, cwIdx) => createVNode("col", {
4970
+ "key": cwIdx,
4971
+ "width": cw
4972
+ }, null))]), createVNode("tbody", null, [props.page.containerIds.map((trId, trIndex) => {
4973
+ const trInfo = props.widgetCenter[trId];
4974
+ const tdIds = trInfo.nextIds;
4975
+ const height = props.page.dynamicRowHeights?.[trId] || trInfo.props.height;
4976
+ return createVNode("tr", {
4977
+ "key": `${trId}_${trIndex}`,
4978
+ "height": height
4979
+ }, [tdIds.map((tdId, tdIndex) => {
4980
+ const tdInfo = props.widgetCenter[tdId];
4981
+ const tdAttrs = {
4982
+ key: tdId,
4983
+ id: tdId,
4984
+ hidden: tdInfo.cellHidden,
4985
+ borderAttrs: tdInfo.props.sourceBorderAttrs,
4986
+ autoMerge: tdInfo.fillDirection === "x" ? tdInfo.xAutoMerge : tdInfo.autoMerge,
4987
+ fillDirection: tdInfo.fillDirection,
4988
+ ...pick(tdInfo.props, ["rowspan", "colspan", "class"])
4989
+ };
4990
+ const realTdAttrInfo = props.page.mergeBlock?.[tdId];
4991
+ const dynamicConfig = {};
4992
+ if (realTdAttrInfo) {
4993
+ Object.assign(tdAttrs, {
4994
+ ...pick(realTdAttrInfo, ["rowspan", "colspan", "borderAttrs"]),
4995
+ hidden: false
4996
+ });
4997
+ Object.assign(dynamicConfig, {
4998
+ ...pick(realTdAttrInfo, ["visibleText", "sourceTdId", "isDynRo"])
4999
+ });
5000
+ }
5001
+ const subInfo = props.page.subTableMap?.[tdId];
5002
+ if (subInfo && subInfo.wrapperTdId === tdId) {
5003
+ const subWidget = props.widgetCenter[subInfo.widgetId];
5004
+ const field = subWidget.props.field ?? "";
5005
+ const relationObj = props.page.relation[field] ?? {};
5006
+ const subTable2dItem = subTable2DList.find((item) => item.subTable2d && item.rowSubFieldKey === field);
5007
+ if (subWidget.props.isMaterialConsumeTable) {
5008
+ const tableController = tmplBomController.value?.tableControllers[subWidget.props.materialConsumeTableId];
5009
+ if (tableController) {
5010
+ return createVNode("td", mergeProps({
5011
+ "style": tdInfo.style
5012
+ }, tdAttrs), [createVNode(MaterialConsumeTable, {
5013
+ "subInfo": subInfo,
5014
+ "widget": subWidget,
5015
+ "formData": props.formState,
5016
+ "widgetCenter": props.widgetCenter,
5017
+ "start": relationObj?.start,
5018
+ "end": relationObj.end,
5019
+ "isMobile": props.isMobile,
5020
+ "tableController": tableController
5021
+ }, {
5022
+ widget: (subProps) => slots.widget?.(subProps),
5023
+ subAction: (subProps) => slots.subAction?.(subProps)
5024
+ })]);
5025
+ }
5026
+ }
5027
+ const subTableCore = subTableCoreFactory.value?.getSubCoreByTid(subInfo.widgetId);
5028
+ return createVNode("td", mergeProps({
5029
+ "style": tdInfo.style
5030
+ }, tdAttrs), [createVNode(DocumentSubTable, {
5031
+ "subInfo": subInfo,
5032
+ "widget": subWidget,
5033
+ "subTable2dItem": subTable2dItem,
5034
+ "formData": props.formState,
5035
+ "widgetCenter": props.widgetCenter,
5036
+ "start": relationObj?.start,
5037
+ "end": relationObj.end,
5038
+ "isMobile": props.isMobile,
5039
+ "subTableCore": subTableCore
5040
+ }, {
5041
+ widget: (subProps) => slots.widget?.(subProps),
5042
+ subAction: (subProps) => slots.subAction?.(subProps)
5043
+ })]);
5044
+ }
5045
+ if (tdInfo.cellValueType) {
5046
+ const widgetAttrs = getWidgetAttrs(tdInfo);
5047
+ if (props.isMobile) {
5048
+ Object.assign(tdAttrs, {
5049
+ onClick: setSelectMobileTdId.bind(null, tdInfo, props.basicInfo, props.widgetCenter, openFillFieldsModal, -1)
5050
+ });
5051
+ }
5052
+ const coord = [tdIndex + 1, trIndex + 1].join();
5053
+ const fixedTableInfo = fixedTableInfoMap.value[coord];
5054
+ return createVNode(BorderTD, mergeProps({
5055
+ "style": tdInfo.style
5056
+ }, tdAttrs, {
5057
+ "isEmpty": true
5058
+ }), {
5059
+ default: () => tdInfo.cellValueType !== CellType.Default || tdInfo.cellWidget.props.value ? slots.widget?.({
5060
+ tdInfo,
5061
+ ...widgetAttrs,
5062
+ dynamicConfig
5063
+ }) : null,
5064
+ // [固定表]右上角 加装 操作按钮
5065
+ tableAction: fixedTableInfo?.quickFill ? () => createVNode(_sfc_main$2, {
5066
+ "formState": props.formState,
5067
+ "widgetCenter": props.widgetCenter,
5068
+ "fixedTableInfo": fixedTableInfo
5069
+ }, null) : null
5070
+ });
5071
+ }
5072
+ if (realTdAttrInfo && tdInfo.cellHidden) {
5073
+ const sourceTdInfo = props.widgetCenter[dynamicConfig?.sourceTdId];
5074
+ const widgetAttrs = getWidgetAttrs(tdInfo);
5075
+ return createVNode(BorderTD, mergeProps({
5076
+ "style": tdInfo.style
5077
+ }, tdAttrs, {
5078
+ "isEmpty": true
5079
+ }), {
5080
+ default: () => [dynamicConfig?.isDynRo ? slots.widget?.({
5081
+ tdInfo: sourceTdInfo,
5082
+ ...widgetAttrs,
5083
+ dynamicConfig
5084
+ }) : null]
5085
+ });
5086
+ }
5087
+ })]);
5088
+ })])])])])]);
5089
+ }
5090
+ });
5091
+ const _hoisted_1 = { class: "document-quick-fill-container" };
5092
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
5093
+ __name: "dynamic-quick-fill-modal",
5094
+ props: {
5095
+ columns: {},
5096
+ modal: {},
5097
+ callback: {}
5098
+ },
5099
+ setup(__props) {
5100
+ const props = __props;
5101
+ const rows = ref([]);
5102
+ function makeEmptyRow() {
5103
+ return Object.fromEntries(props.columns.map((c) => [c.prop, ""]));
5104
+ }
5105
+ function initRows(count = 10) {
5106
+ rows.value = Array.from({ length: count }, () => makeEmptyRow());
5107
+ }
5108
+ onBeforeMount(() => {
5109
+ initRows(200);
5110
+ });
5111
+ async function onSave() {
5112
+ try {
5113
+ return {
5114
+ ok: true,
5115
+ params: {
5116
+ data: processRows(unref(rows), props.columns)
5117
+ }
5118
+ };
5119
+ } catch (err) {
5120
+ console.warn(err);
5121
+ }
5122
+ return {
5123
+ ok: false
5124
+ };
5125
+ }
5126
+ useModal(onSave);
5127
+ return (_ctx, _cache) => {
5128
+ return openBlock(), createElementBlock("div", _hoisted_1, [
5129
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "quick-fill-tips" }, [
5130
+ createElementVNode("i", { class: "iconfont icon-zhuyi" }),
5131
+ createElementVNode("ul", { class: "tips-list" }, [
5132
+ createElementVNode("li", null, "可将Excel内容粘贴到表格中,支持使用复制、粘贴、删除快捷键"),
5133
+ createElementVNode("li", null, "表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割)"),
5134
+ createElementVNode("li", null, "当前快速填报最多支持200行")
5135
+ ])
5136
+ ], -1)),
5137
+ createVNode(unref(q), {
5138
+ class: "cell-border",
5139
+ range: "",
5140
+ resize: "",
5141
+ colSize: 200,
5142
+ source: rows.value,
5143
+ columns: __props.columns,
5144
+ theme: "material",
5145
+ "hide-attribution": "",
5146
+ "apply-on-close": true,
5147
+ "row-headers": { prop: "rowIndex", name: "序号", size: 60 }
5148
+ }, null, 8, ["source", "columns"])
5149
+ ]);
5150
+ };
5151
+ }
5152
+ });
5153
+ const DynamicQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-861cfdba"]]);
4876
5154
  const _sfc_main = /* @__PURE__ */ defineComponent({
4877
- __name: "document-sub-table-action",
5155
+ __name: "dynamic-table-action",
4878
5156
  props: {
4879
5157
  subTableFieldId: {},
4880
5158
  mobileTdIdGroups: {},
@@ -4936,7 +5214,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4936
5214
  const onMenuClick = async ({ key, actionValue }) => {
4937
5215
  if (key === "quickFillRowCurrent") {
4938
5216
  const res = await window.NocodeAdapter.utils.overlay.modal(
4939
- DocumentQuickFillModal,
5217
+ DynamicQuickFillModal,
4940
5218
  { columns: fieldColumn.value },
4941
5219
  { title: "快速填报", width: "1060px" }
4942
5220
  );
@@ -4972,20 +5250,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4972
5250
  };
4973
5251
  }
4974
5252
  });
4975
- const DocumentSubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1a0e170d"]]);
5253
+ const DynamicTableAction = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-94e9d614"]]);
4976
5254
  export {
4977
5255
  BorderTD as B,
4978
5256
  DeviceLinkTmplUtil as D,
4979
- FormTmplConfigController as F,
5257
+ FixedQuickFillModal as F,
4980
5258
  MaterialConsumptionPatternEnum as M,
4981
5259
  SubTableCore as S,
4982
- _sfc_main$4 as _,
5260
+ _sfc_main$6 as _,
4983
5261
  useFormTmplConfig as a,
4984
5262
  useStyles as b,
4985
5263
  useDependency as c,
4986
5264
  useValidator as d,
4987
5265
  DocumentPaper as e,
4988
- DocumentSubTableAction as f,
5266
+ DynamicTableAction as f,
4989
5267
  MaterialConsumeTableController as g,
4990
5268
  SubTableActionMenuTypeEnum as h,
4991
5269
  getMenuByAction as i,
@@ -4994,11 +5272,12 @@ export {
4994
5272
  getInsertSubMenu as l,
4995
5273
  useMaterialBalance as m,
4996
5274
  commonUtils as n,
4997
- DocumentQuickFillModal as o,
4998
- DeviceConnector as p,
4999
- DocumentLoading as q,
5000
- MCDataUtil as r,
5001
- useOnlineFormActionButton as s,
5275
+ DeviceConnector as o,
5276
+ DocumentLoading as p,
5277
+ DynamicQuickFillModal as q,
5278
+ FormTmplConfigController as r,
5279
+ MCDataUtil as s,
5280
+ useOnlineFormActionButton as t,
5002
5281
  useOnlineFormTransformField2Component as u,
5003
5282
  validate as v
5004
5283
  };