@gct-paas/excel 0.1.17 → 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 (216) hide show
  1. package/dist/{BaseComponent-DJNL1tGs.js → BaseComponent-xTm5lvAr.js} +1 -0
  2. package/dist/{VueVideoPlayer-Db7qcsRE.js → VueVideoPlayer-Bt1Le9qP.js} +2 -2
  3. package/dist/{agg-design-BjqRVeg1.js → agg-design-B_5evAJ0.js} +1 -1
  4. package/dist/{agg-props-CrdosdGr.js → agg-props-C62Ecenu.js} +1 -1
  5. package/dist/{agg-style-CfZoOE-b.js → agg-style-Q0xSL8Ye.js} +1 -1
  6. package/dist/{align-editor-BaNT0jhx.js → align-editor-D_LtYlh3.js} +1 -1
  7. package/dist/{attach-fields-editor-CThobu8X.js → attach-fields-editor-3v3VNOfe.js} +2 -2
  8. package/dist/{barcode-design-CHjIeaiJ.js → barcode-design-lusKmMnv.js} +3 -2
  9. package/dist/base/index.es.js +370 -151
  10. package/dist/base-font-editor-DmasOst9.js +119 -0
  11. package/dist/{boolean-design-BYAdX-h5.js → boolean-design-BqGJVhKn.js} +3 -2
  12. package/dist/{boolean-props-jKvjhdlG.js → boolean-props-DS7J4GHS.js} +3 -3
  13. package/dist/{boolean-style-RsMRzVBL.js → boolean-style-C9FslVV7.js} +5 -4
  14. package/dist/cell-upload-BFw5Yg_j.js +33 -0
  15. package/dist/date-range-editor-PmJBHc8i.js +471 -0
  16. package/dist/{date-time-design-Du8pmDo-.js → date-time-design-DQ_Z-xUx.js} +1 -1
  17. package/dist/date-time-props-DfZoJukN.js +105 -0
  18. package/dist/{date-time-style-DSEnmxAE.js → date-time-style-Doye-MHk.js} +1 -1
  19. package/dist/{decimal-design-C2GbzP9k.js → decimal-design-Bg-tdrtL.js} +7 -3
  20. package/dist/{decimal-display-mode-CagizhJW.js → decimal-display-mode-D_K6_XX1.js} +3 -2
  21. package/dist/{decimal-props-CGLqWy8I.js → decimal-props-4QveEdf3.js} +5 -4
  22. package/dist/{decimal-style-6j22QKYO.js → decimal-style-B-n8SfAy.js} +1 -1
  23. package/dist/{default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-C5K6qhB-.js → default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-B3GvGAje.js} +110 -39
  24. package/dist/{diagonal-design-Cq3oxdHe.js → diagonal-design-B_l3lV5s.js} +2 -2
  25. package/dist/{double-design-CyXEqcV7.js → double-design-BaWZXLjK.js} +6 -3
  26. package/dist/{double-props-DaJoio1W.js → double-props-sDsBpAER.js} +4 -4
  27. package/dist/{double-style-B4lIth-J.js → double-style--oSjQw07.js} +1 -1
  28. package/dist/{document-sub-table-action-rz6gyez5.js → dynamic-table-action-zLjamAaN.js} +1124 -654
  29. package/dist/{document-quick-fillin.vue_vue_type_style_index_0_scoped_a18386ab_lang-Bbu6cwRC.js → dynamic-table-action.vue_vue_type_style_index_0_scoped_94e9d614_lang-UooIxEeL.js} +2312 -1402
  30. package/dist/{edit.utils-CXmmCnxE-DW8ClKe9.js → edit.utils-CXmmCnxE-BrwRVXLT.js} +1 -1
  31. package/dist/{enum-design-DSx09tOO.js → enum-design-BgVuHvvu.js} +13 -7
  32. package/dist/{enum-props-CJNuQLJ_.js → enum-props-DYN6LsLg.js} +4 -4
  33. package/dist/{enum-style-5N5xmgRJ.js → enum-style-D56_-gMw.js} +37 -9
  34. package/dist/excel.css +1480 -664
  35. package/dist/{exceljs.min-D9gV8q6H.js → exceljs.min-DQkwXbni.js} +2 -2
  36. package/dist/{expression-design-BJDbafot.js → expression-design-CIMwIArR.js} +1 -1
  37. package/dist/{expression-props-BpHbrsle.js → expression-props--l3LwKAM.js} +1 -1
  38. package/dist/{expression-style-qPh81w7Q.js → expression-style-CjM5oro9.js} +1 -1
  39. package/dist/{file-design-B7si04Bi.js → file-design-BYcXA55B.js} +1 -1
  40. package/dist/{file-props-DTtOnHQy.js → file-props-DvsQZUcL.js} +2 -2
  41. package/dist/{file-style-C6KW_szu.js → file-style-BiWmCsMZ.js} +1 -1
  42. package/dist/{font-editor-DgGgvmB2.js → font-editor-BaRVmXey.js} +3 -3
  43. package/dist/{form-annotation-controller-CoABDD4X.js → form-annotation-controller-Zw6OoPLe.js} +80 -23
  44. package/dist/{image-design-B92Xkcf-.js → image-design-Bad-BXel.js} +3 -2
  45. package/dist/{image-design-CCfpT4Rp.js → image-design-Dr_w89Hq.js} +2 -2
  46. package/dist/{image-props-DZgfzMta.js → image-props-4lKEAwDq.js} +1 -1
  47. package/dist/{image-style-DX6Q_gF4.js → image-style-LoHD1zvr.js} +1 -1
  48. package/dist/{index-Bnbl3VER.js → index--Bxx_VqV.js} +3 -2
  49. package/dist/{index-DsASTvC2.js → index-3qfB5NN-.js} +2 -1
  50. package/dist/{index-CtTSTTkq.js → index-B-2N8GeG.js} +3 -2
  51. package/dist/{index-Bg-x1hF6.js → index-B3YoA1vo.js} +3 -2
  52. package/dist/{index-BzhFcvnJ.js → index-B9IMST50.js} +3 -2
  53. package/dist/{index-Doxcf2Zs.js → index-BSfbsA-W.js} +3 -2
  54. package/dist/{index-DJISlRXi.js → index-BZYuG4zS.js} +5 -2
  55. package/dist/{index-DzIKEtWw.js → index-B_VejD7m.js} +4 -1
  56. package/dist/{index-BXMOCfWv.js → index-Bki98NXv.js} +3 -2
  57. package/dist/{index-DFgGQBCZ.js → index-Bm6Hdoud.js} +53 -110
  58. package/dist/{index-CmaPtyCh.js → index-BsUkUBZV.js} +5 -2
  59. package/dist/{index-BB5uSbo3.js → index-Bsjegt_0.js} +2 -1
  60. package/dist/{index-rn6aiccW.js → index-ByXwQO9g.js} +6 -3
  61. package/dist/{index-DOFSbVSN.js → index-C6mtZJIQ.js} +2 -1
  62. package/dist/{index-DRKvAxuA.js → index-C7KdVTwU.js} +2 -1
  63. package/dist/{index-tbaOl7Nd.js → index-CEufXc_2.js} +2 -1
  64. package/dist/{index-D6diRqWG.js → index-CH--dgZ4.js} +3 -2
  65. package/dist/{index-BEBKoAOg.js → index-COiTpNXf.js} +3 -2
  66. package/dist/{index-BYl8cK0A.js → index-CP099vf_.js} +2 -1
  67. package/dist/{index-BhzF0Rp3.js → index-CQ7Hcly4.js} +5 -3
  68. package/dist/{index-Be7TFwwX.js → index-CcLTIQGc.js} +5 -2
  69. package/dist/{index-C8qPy1oW.js → index-Ce0SltjH.js} +3 -2
  70. package/dist/{index-bvhV6lsn.js → index-CqjhgxKH.js} +15 -7
  71. package/dist/{index-B2iip4UC.js → index-D-mFMP7t.js} +3 -2
  72. package/dist/{index-IUYnmIJe.js → index-D4Yb4Urx.js} +2 -1
  73. package/dist/{index-Da7W9uBC.js → index-D9CHdykS.js} +3 -2
  74. package/dist/{index-DRd2oRK1.js → index-DDnUeBCP.js} +3 -2
  75. package/dist/{index-XbgrTOMF.js → index-DRYxbbtG.js} +2 -1
  76. package/dist/{index-Cw_YFCZT.js → index-Dk-CUvB9.js} +3876 -3389
  77. package/dist/{index-Dsj3FuVs.js → index-DpPrrfLV.js} +3 -2
  78. package/dist/{index-DgHRTRH5.js → index-Dq72GFzs.js} +3 -2
  79. package/dist/{index-p-Q3DQmv.js → index-Vx5npC-J.js} +4 -3
  80. package/dist/{index-CIoB2iny.js → index-pPTh0-mL.js} +2 -1
  81. package/dist/index.es.js +6 -5
  82. package/dist/{integer-design-CPzJPZon.js → integer-design-C2EkL0hc.js} +6 -3
  83. package/dist/{integer-props-deCDvNET.js → integer-props-Cs-CvjQS.js} +5 -4
  84. package/dist/{integer-style-DwZIRXEW.js → integer-style-BtAfQCAn.js} +1 -1
  85. package/dist/{mb-render-Bejyn-ep.js → mb-render-CsWNoQnS.js} +1 -1
  86. package/dist/{number-input-ex-CgwOH18n.js → number-input-ex-eza87s5O.js} +12 -4
  87. package/dist/{org-props-BeFVQ-QY.js → org-props-BJ6FKaVj.js} +3 -2
  88. package/dist/{org-style-CLVWLtyd.js → org-style-LRy5QsV5.js} +1 -1
  89. package/dist/{pagination-design-CT0EQmxW.js → pagination-design-sA-kbILI.js} +3 -2
  90. package/dist/paper-widget-design-BGY5qu-K.js +4 -0
  91. package/dist/{qrcode-design-CjOkp2xa.js → qrcode-design-BsWJrsvD.js} +1 -1
  92. package/dist/{ref-autofill-editor-B2KcQvyt.js → ref-autofill-editor-BbozAOcm.js} +2 -2
  93. package/dist/{ref-props-DPnt_pys.js → ref-props-BInJu7PN.js} +3 -3
  94. package/dist/{ref-style-D0XKTtP1.js → ref-style-Dgc_9tko.js} +1 -1
  95. package/dist/regex-editor-C09XpMhm.js +796 -0
  96. package/dist/{revo-grid.entry-ztDhASK3.js → revo-grid.entry-BIm5A5wM.js} +1 -1
  97. package/dist/{revogr-attribution_7.entry-BtXV91vv.js → revogr-attribution_7.entry-B06XF5B_.js} +3 -3
  98. package/dist/{revogr-clipboard_3.entry-DXpq4oNb.js → revogr-clipboard_3.entry-C8dVJYtR.js} +2 -2
  99. package/dist/{revogr-data_4.entry-WA1PNcGb.js → revogr-data_4.entry-Dgp6vYqe.js} +2 -2
  100. package/dist/{revogr-filter-panel.entry-unpVAD7l.js → revogr-filter-panel.entry-xo_juIUc.js} +1 -1
  101. package/dist/{select-render-type-editor.vue_vue_type_script_setup_true_lang-CqaEwsvS.js → select-render-type-editor.vue_vue_type_script_setup_true_lang-vIUGBOWr.js} +3 -2
  102. package/dist/{serialnumber-design-ClArHZWU.js → serialnumber-design-mWcys6hI.js} +1 -1
  103. package/dist/shared/index.es.js +18 -18
  104. package/dist/{signature-design-Cg2Ejj3g.js → signature-design-Dl-Lv5Z5.js} +5 -2
  105. package/dist/{signature-props-CNuLBWtc.js → signature-props-DSzpO-_r.js} +3 -3
  106. package/dist/{signature-style-DtlZdeFB.js → signature-style-Bk34vOsk.js} +1 -1
  107. package/dist/{single-field-drop-COLR9RIu.js → single-field-drop-CiPUMT9B.js} +2 -2
  108. package/dist/{size-editor-DyGGEX3s.js → size-editor-B5aunbUM.js} +1 -1
  109. package/dist/src/adapter/index.d.ts +1 -0
  110. package/dist/src/adapter/setup.d.ts +1 -1
  111. package/dist/src/nocode-base/src/_utils_/uuid.d.ts +6 -1
  112. package/dist/src/nocode-base/src/components/border-td.vue.d.ts +1 -0
  113. 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
  114. 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
  115. package/dist/src/nocode-base/src/components/document-quick-fill/quick-fill.util.d.ts +17 -0
  116. package/dist/src/nocode-base/src/components/document-sub-table-action/fixed-table-action.vue.d.ts +13 -0
  117. package/dist/src/nocode-base/src/components/index.d.ts +4 -3
  118. package/dist/src/nocode-base/src/constant/index.d.ts +11 -0
  119. package/dist/src/nocode-base/src/hooks/annotation/collect-annotation-items.d.ts +15 -0
  120. package/dist/src/nocode-base/src/hooks/annotation/form-annotation-controller.d.ts +5 -2
  121. package/dist/src/nocode-base/src/hooks/annotation/form-change-row.d.ts +60 -0
  122. package/dist/src/nocode-base/src/hooks/annotation/index.d.ts +2 -0
  123. package/dist/src/nocode-base/src/hooks/app-info/index.d.ts +2 -2
  124. package/dist/src/nocode-base/src/hooks/index.d.ts +2 -1
  125. package/dist/src/nocode-base/src/hooks/material-consume/mc-render.d.ts +3 -1
  126. package/dist/src/nocode-base/src/hooks/model-relation/index.d.ts +1 -1
  127. package/dist/src/nocode-base/src/hooks/service-util/sn-rule.d.ts +1 -1
  128. package/dist/src/nocode-base/src/hooks/useFormHook.d.ts +1 -1
  129. package/dist/src/nocode-base/src/hooks/useRenderData.d.ts +4 -2
  130. package/dist/src/nocode-base/src/hooks/useRenderPageFactory.d.ts +39 -4
  131. package/dist/src/nocode-base/src/hooks/useValidator.d.ts +6 -6
  132. package/dist/src/nocode-base/src/hooks/validation/admission.d.ts +19 -0
  133. package/dist/src/nocode-base/src/hooks/validation/attach.d.ts +24 -0
  134. package/dist/src/nocode-base/src/hooks/validation/createValidateFactory.d.ts +35 -0
  135. package/dist/src/nocode-base/src/hooks/validation/formRulesStore.d.ts +15 -0
  136. package/dist/src/nocode-base/src/hooks/validation/merge.d.ts +24 -0
  137. package/dist/src/nocode-base/src/hooks/validation/runValidation.d.ts +17 -0
  138. package/dist/src/nocode-base/src/hooks/validation/scheduler.d.ts +12 -0
  139. package/dist/src/nocode-base/src/hooks/validation/types.d.ts +44 -0
  140. package/dist/src/nocode-base/src/hooks/validation/useFormValidator.d.ts +39 -0
  141. package/dist/src/nocode-base/src/hooks/validation/utils.d.ts +24 -0
  142. package/dist/src/nocode-base/src/hooks/validation/waitForSettle.d.ts +17 -0
  143. package/dist/src/nocode-base/src/interface/render.d.ts +1 -1
  144. package/dist/src/nocode-base/src/types/common/base.d.ts +16 -2
  145. package/dist/src/nocode-base/src/types/fields/i-datepicker.d.ts +5 -1
  146. package/dist/src/nocode-base/src/types/fields/i-datetimepicker.d.ts +5 -1
  147. package/dist/src/nocode-base/src/types/fields/i-enum-select.d.ts +2 -0
  148. package/dist/src/nocode-base/src/types/fields/i-inputdouble.d.ts +5 -1
  149. package/dist/src/nocode-base/src/types/fields/i-inputnumber.d.ts +5 -1
  150. package/dist/src/nocode-base/src/types/fields/i-trace.d.ts +27 -1
  151. package/dist/src/nocode-base/src/types/render/mc-render.d.ts +3 -1
  152. package/dist/src/nocode-base/src/types/render/sub-table-render.d.ts +3 -1
  153. package/dist/src/nocode-base/src/types/widgets/i-paper.d.ts +2 -0
  154. package/dist/src/nocode-base/src/types/widgets/i-sub-table.d.ts +4 -0
  155. package/dist/src/nocode-web-render/src/hooks/userFormPrint.d.ts +2 -0
  156. package/dist/src/nocode-web-render/src/render/index.d.ts +2 -2
  157. package/dist/src/nocode-web-render/src/render/sub-table/common/scan-modal.vue.d.ts +3 -1
  158. package/dist/src/nocode-web-render/src/render/sub-table/common/sub-table-render.d.ts +3 -1
  159. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/index.d.ts +1 -2
  160. package/dist/src/nocode-web-render/src/render/sub-table/material-consume/mc-web-render.d.ts +3 -1
  161. package/dist/src/online-form/src/components/version-diff/index/types.d.ts +2 -0
  162. package/dist/src/online-form/src/utils/field.enum.d.ts +3 -2
  163. package/dist/src/online-form/src/views/__cell_widgets__/common/keep-exception-highlight-editor/keep-exception-highlight-editor.vue.d.ts +10 -0
  164. package/dist/src/online-form/src/views/__cell_widgets__/common/regex-editor/common-regex-api.d.ts +11 -0
  165. package/dist/src/online-form/src/views/__cell_widgets__/common/regex-editor/editor.d.ts +8 -0
  166. package/dist/src/online-form/src/views/designer/hooks/useAllSpreadSheets.d.ts +28 -0
  167. package/dist/src/online-form/src/views/designer/hooks/useModelFields.d.ts +1 -1
  168. package/dist/src/online-form/src/views/designer/hooks/useSpreadSheet.d.ts +43 -2
  169. 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
  170. package/dist/src/online-form/src/views/designer/modules/panel/comps/quick-fill-config.vue.d.ts +8 -0
  171. package/dist/src/online-form/src/views/designer/modules/panel/comps/signature-config/field-tree-select.vue.d.ts +2 -2
  172. package/dist/src/online-form/src/views/designer/modules/panel/panel-data-init-config/common/add-builtin-param/add-builtin-param-select.vue.d.ts +2 -2
  173. package/dist/src/online-form/src/views/designer/modules/panel/panel-rule-config/form-field-tree-select.vue.d.ts +2 -2
  174. package/dist/src/online-form/src/views/designer/modules/panel/panel-rule-config/material-rdo-select.vue.d.ts +2 -2
  175. package/dist/src/online-form/src/views/designer/modules/sheet/sheet-cell.vue.d.ts +1 -0
  176. package/dist/src/online-form/src/views/designer/types/index.d.ts +4 -0
  177. package/dist/src/online-form/src/views/designer/utils/xlsx-parser.d.ts +3 -0
  178. package/dist/src/online-form/src/views/render/__components__/_common_/widget-component.vue.d.ts +3 -1
  179. package/dist/src/shared/components/DoubleInput/double-input.vue.d.ts +5 -0
  180. package/dist/src/shared/components/rdo-tree-select/rdo-tree-select.vue.d.ts +2 -2
  181. package/dist/src/shared/utils/host-api.d.ts +3 -11
  182. package/dist/{text-design-DjJS6aM4.js → text-design-BIFz5gw1.js} +3 -2
  183. package/dist/{text-design-490okDpw.js → text-design-C0dORvkP.js} +10 -6
  184. package/dist/{text-props-Dh4S3iN0.js → text-props-ClHI-4aM.js} +21 -252
  185. package/dist/{text-style-BGeNrOMv.js → text-style-DANM5fvy.js} +1 -1
  186. package/dist/{throttle-Cpk1LoGk-BWXeZXFZ.js → throttle-Cpk1LoGk-Da5HSLWc.js} +1 -1
  187. package/dist/{timediff-design-DEh9xNVa.js → timediff-design-BDCsQIal.js} +2 -1
  188. package/dist/{trace-design-Dk0irY70.js → trace-design-CKqq1WH_.js} +2 -2
  189. package/dist/{trace-props-DRBrPqIq.js → trace-props-BI24XFMc.js} +53 -16
  190. package/dist/{trace-style-6lXlaJ2o.js → trace-style-CX1f7oZH.js} +1 -1
  191. package/dist/{user-props-yasRJPzM.js → user-props-gF7KPnP8.js} +3 -2
  192. package/dist/{user-style-dkDUDf63.js → user-style-DIouAMWa.js} +1 -1
  193. package/dist/{value-editor.vue_vue_type_style_index_0_lang-8rhhfLv7.js → value-editor.vue_vue_type_style_index_0_lang-DHj-zNxm.js} +3 -2
  194. package/dist/{version-select-dvsx-Ifv.js → version-select-CL3QQGND.js} +2 -2
  195. package/dist/web-render/index.es.js +9 -9
  196. package/dist/{widget-barcode-BfzXe5MQ.js → widget-barcode-DZiCyrQW.js} +5 -4
  197. package/dist/{widget-diagonal-R5qdvCvE.js → widget-diagonal-D_Oz8te1.js} +3 -3
  198. package/dist/{widget-image-C0zAtiuf.js → widget-image-TL_SLOap.js} +5 -5
  199. package/dist/{widget-line-z4TTPDkL.js → widget-line-BQ-qcBUA.js} +3 -2
  200. package/dist/{widget-pagination-CeO9pmmu.js → widget-pagination-DciJE9qC.js} +6 -5
  201. package/dist/{widget-power-CP1DLxkZ.js → widget-power-B9KTIpwA.js} +3 -3
  202. package/dist/{widget-qrcode-Boz_t9l9.js → widget-qrcode-DRoj5rSy.js} +4 -3
  203. package/dist/{widget-rangelimit-B9kRG_Fa.js → widget-rangelimit-Ckgx3i4r.js} +3 -3
  204. package/dist/{widget-serialnumber-BBUxx4nB.js → widget-serialnumber-aUkR-0yC.js} +1 -1
  205. package/dist/{widget-text-qvLZssGe.js → widget-text-CJIT-hY3.js} +5 -5
  206. package/dist/{widget-timediff-BBmssjfJ.js → widget-timediff-x-RQMdNg.js} +3 -2
  207. package/package.json +1 -1
  208. package/dist/base-font-editor-BiSPxwVH.js +0 -83
  209. package/dist/cell-upload-JxFLM1bV.js +0 -25
  210. package/dist/date-format-editor-BZ89hVjL.js +0 -240
  211. package/dist/date-time-props-BWvuzNXX.js +0 -265
  212. package/dist/paper-widget-design-DKBVqvH3.js +0 -4
  213. package/dist/src/nocode-base/src/hooks/form-model/fetcher.d.ts +0 -40
  214. package/dist/src/nocode-base/src/interface/data.d.ts +0 -47
  215. package/dist/src/nocode-base/src/interface/util.d.ts +0 -108
  216. /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, markRaw, ref, onUnmounted, watch, toRef, reactive, inject, provide, defineComponent, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, renderSlot, createVNode, toDisplayString, createCommentVNode, onMounted, onBeforeMount, resolveComponent, createBlock, withCtx, Fragment, renderList, createTextVNode, toRaw } from "vue";
2
- import { cloneDeep, has, merge, defaults, pickBy, isNil, mergeWith, debounce, omit, last, pick } from "lodash-es";
3
- import { e as ComponentTypeEnum, F as FIELD_TYPE, i as api, aM as ButtonTypeEnum, t as FormTypeEnum, aH as safeParseArray, aq as RenderModeEnum, aJ as mergeByMultiKey, aL as BpmnSignatureTypeEnum, aI as BpmnNodeTypeEnum, b7 as stockCheck, ao as getParseRuleInfo, ap as getParseRuleValue, b8 as materialCheck, ay as calcFillData, at as FormulaRuleFieldKeyEnum, b9 as judgeUnique, g as SubTableType, ba as getRowId, ae as useCurrentPageFormState, R as Dependency_ENUM, Q as ASSIGNMENTSTRATEGY_ENUM, aF as uuid2, a3 as DeviceLink, E as useNamespace, _ as _export_sfc, al as NCB_PROVIDE, ab as useWidgetStaticAttrs, b6 as setSelectMobileTdId, h as CellType, aZ as deleteSubtableRow, aA as transformUtils, D as useModal, bb as q, aK as getSubTableQuickFillInfo } from "./document-quick-fillin.vue_vue_type_style_index_0_scoped_a18386ab_lang-Bbu6cwRC.js";
4
- import { u as useFormModel, w as watchDebounced } from "./mb-render-Bejyn-ep.js";
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
+ 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, 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";
@@ -625,6 +626,254 @@ const useOnlineFormTransformField2Component = (fieldType) => {
625
626
  }
626
627
  }[fieldType];
627
628
  };
629
+ const constantRequiredStyles = {
630
+ "--required-border-color": "rgb(255, 31, 31, 0.36)",
631
+ "--required-border-hover-color": "rgb(255, 31, 31, 0.86)",
632
+ "--required-background-color": "rgb(255, 31, 31, 0.04)"
633
+ };
634
+ const resetRequiredStyles = {
635
+ "--required-border-color": "#e9e9e9",
636
+ "--required-border-hover-color": "var(--ant-primary-color)",
637
+ "--required-background-color": "transparent"
638
+ };
639
+ const reliableVerticalTextStyles = {
640
+ "writing-mode": "horizontal-tb",
641
+ display: "inline-block",
642
+ width: "1em",
643
+ "line-height": "1.2",
644
+ "white-space": "normal",
645
+ "word-break": "break-all",
646
+ "letter-spacing": "0",
647
+ "text-align": "center"
648
+ };
649
+ const isVerticalLrText = (style) => {
650
+ const mode = style?.writingMode ?? style?.["writing-mode"];
651
+ return mode === "vertical-lr";
652
+ };
653
+ function useValidator(props) {
654
+ const widget = props.widget;
655
+ const {
656
+ showModelName,
657
+ showFieldName,
658
+ modelKey,
659
+ fieldType,
660
+ targetFieldId,
661
+ isFieldModel,
662
+ showRequired,
663
+ showDisabled,
664
+ showDisplayStatus,
665
+ dataRelationShip
666
+ } = useWidgetStaticAttrs(widget);
667
+ const sizeStyles = {
668
+ "--size": `${widget.props.size ?? 12}px`,
669
+ "--cmp-width": `${widget.props.cmpWidth ?? 0}px`,
670
+ "--cmp-height": `${widget.props.cmpHeight ?? 0}px`
671
+ };
672
+ const skipFormItem = computed(() => {
673
+ if (widget.component === ComponentTypeEnum.DynValue) {
674
+ return true;
675
+ }
676
+ return !widget.formItem;
677
+ });
678
+ const blocked = computed(() => {
679
+ return !!showDisabled.value || ["readonly-text", "readonly-component"].includes(showDisplayStatus.value);
680
+ });
681
+ const rules = computed(() => {
682
+ if (skipFormItem.value || !targetFieldId) {
683
+ return [];
684
+ }
685
+ return assembleRules({
686
+ showRequired: !!showRequired.value,
687
+ fieldType,
688
+ validatorInfo: {
689
+ showModelName,
690
+ showModelKey: modelKey,
691
+ showFieldName,
692
+ subFieldKey: widget.props.subFieldKey,
693
+ targetFieldId
694
+ },
695
+ props: widget.props
696
+ });
697
+ });
698
+ const getRules = (ruleList, options) => ruleList.map((item) => ({
699
+ ...item,
700
+ ...options
701
+ }));
702
+ const resolveSubtableColIndex = () => {
703
+ if (!isNil(props.childSubTableDataIndex)) {
704
+ return props.childSubTableDataIndex;
705
+ }
706
+ if (targetFieldId === "value_") {
707
+ if (!isNil(props.realColIndex)) return props.realColIndex;
708
+ if (!isNil(props.realRowIndex)) return 0;
709
+ }
710
+ return void 0;
711
+ };
712
+ const resolveAttachMeta = () => {
713
+ const belongFieldId = props.referenceInfo?.belongFieldId;
714
+ const optionValue = props.referenceInfo?.optionValue;
715
+ if (!belongFieldId || isNil(optionValue)) return null;
716
+ return {
717
+ belongFieldId,
718
+ optionValue,
719
+ multiple: props.referenceInfo?.multiple,
720
+ subtableFieldId: props.subtableFieldId,
721
+ realRowIndex: props.realRowIndex,
722
+ childSubTableDataIndex: resolveSubtableColIndex()
723
+ };
724
+ };
725
+ const resolveRuleEntry = () => {
726
+ const attach = resolveAttachMeta();
727
+ const attachOpts = attach ? {
728
+ _belongFieldId: attach.belongFieldId,
729
+ _optionValue: attach.optionValue,
730
+ _multiple: attach.multiple
731
+ } : {};
732
+ if (props.subtableFieldId) {
733
+ if (!isNil(props.realRowIndex)) {
734
+ const colIdx = resolveSubtableColIndex();
735
+ if (colIdx !== void 0) {
736
+ return {
737
+ key: `${props.subtableFieldId}_${props.realRowIndex}_${targetFieldId}_${colIdx}`,
738
+ options: {
739
+ _subtableFieldId: props.subtableFieldId,
740
+ _realRowIndex: props.realRowIndex,
741
+ _targetFieldId: targetFieldId,
742
+ _childSubTableDataIndex: colIdx,
743
+ ...attachOpts
744
+ },
745
+ attach
746
+ };
747
+ }
748
+ return {
749
+ key: `${props.subtableFieldId}_${props.realRowIndex}_${targetFieldId}`,
750
+ options: {
751
+ _subtableFieldId: props.subtableFieldId,
752
+ _realRowIndex: props.realRowIndex,
753
+ _targetFieldId: targetFieldId,
754
+ ...attachOpts
755
+ },
756
+ attach
757
+ };
758
+ }
759
+ return null;
760
+ }
761
+ return {
762
+ key: targetFieldId,
763
+ options: {
764
+ _targetFieldId: targetFieldId,
765
+ ...attachOpts
766
+ },
767
+ attach
768
+ };
769
+ };
770
+ const instanceId = /* @__PURE__ */ Symbol("validatorInstance");
771
+ let prevRuleKey;
772
+ let prevRuleSignature;
773
+ watch(
774
+ () => [
775
+ rules.value,
776
+ blocked.value,
777
+ widget.props?.keepExceptionHighlight,
778
+ props.realRowIndex,
779
+ props.childSubTableDataIndex,
780
+ props.referenceInfo?.belongFieldId,
781
+ props.referenceInfo?.optionValue,
782
+ props.referenceInfo?.multiple
783
+ ],
784
+ () => {
785
+ if (!targetFieldId || !rules.value) return;
786
+ const entry = resolveRuleEntry();
787
+ if (prevRuleKey && (!entry || entry.key !== prevRuleKey)) {
788
+ deleteFormRule(prevRuleKey, instanceId);
789
+ prevRuleSignature = void 0;
790
+ }
791
+ if (!entry) {
792
+ prevRuleKey = void 0;
793
+ return;
794
+ }
795
+ if (rules.value.length === 0) {
796
+ deleteFormRule(entry.key, instanceId);
797
+ prevRuleKey = void 0;
798
+ prevRuleSignature = void 0;
799
+ return;
800
+ }
801
+ const signature = JSON.stringify({
802
+ key: entry.key,
803
+ blocked: blocked.value,
804
+ keep: widget.props?.keepExceptionHighlight,
805
+ attach: entry.attach,
806
+ // 规则条数 / trigger 变化才重写,避免 deep 无关抖动
807
+ ruleFingerprints: rules.value.map((r) => [r.trigger, r.message])
808
+ });
809
+ if (signature === prevRuleSignature) {
810
+ return;
811
+ }
812
+ setFormRule(
813
+ entry.key,
814
+ getRules(toRaw(rules.value), entry.options),
815
+ {
816
+ blocked: blocked.value,
817
+ keepExceptionHighlight: typeof widget.props?.keepExceptionHighlight === "boolean" ? widget.props.keepExceptionHighlight : void 0,
818
+ attach: entry.attach ?? null
819
+ },
820
+ instanceId
821
+ );
822
+ prevRuleKey = entry.key;
823
+ prevRuleSignature = signature;
824
+ const uniqueId = dataRelationShip?.uniqueId;
825
+ if (uniqueId) {
826
+ requestDisplayValidation(uniqueId);
827
+ }
828
+ },
829
+ {
830
+ immediate: true
831
+ }
832
+ );
833
+ onUnmounted(() => {
834
+ if (prevRuleKey) {
835
+ deleteFormRule(prevRuleKey, instanceId);
836
+ prevRuleKey = void 0;
837
+ }
838
+ });
839
+ const referenceActive = computed(
840
+ () => isReferenceOptionActive(props.referenceInfo, props.formData)
841
+ );
842
+ const widgetStyles = computed(() => {
843
+ if (widget.component === ComponentTypeEnum.DynValue) return {};
844
+ const requiredActive = showRequired.value && !blocked.value && referenceActive.value;
845
+ const isAttachField = !!props.referenceInfo?.belongFieldId;
846
+ return {
847
+ ...sizeStyles,
848
+ ...requiredActive ? constantRequiredStyles : isAttachField ? resetRequiredStyles : {},
849
+ ...isVerticalLrText(widget.style) ? reliableVerticalTextStyles : {}
850
+ };
851
+ });
852
+ return {
853
+ widgetStyles,
854
+ targetFieldId,
855
+ isFieldModel
856
+ };
857
+ }
858
+ const validate = async (formData, paper, uniqueId) => {
859
+ if (uniqueId) {
860
+ const res2 = await validateAllFields(uniqueId);
861
+ if (res2) {
862
+ return {
863
+ isValid: res2.isValid,
864
+ fields: res2.fields,
865
+ uiApplied: true
866
+ };
867
+ }
868
+ }
869
+ const res = await runValidation(formData, paper, { mode: "all" });
870
+ if (!res) return;
871
+ return {
872
+ isValid: res.isValid,
873
+ fields: res.fields,
874
+ uiApplied: false
875
+ };
876
+ };
628
877
  class BomEntryValidator {
629
878
  constructor(bomEntry, enableSequenceLoading, materialNoNum, historyData, mainMaterialNo, mcPattern) {
630
879
  this.bomEntry = bomEntry;
@@ -1422,8 +1671,11 @@ class MaterialConsumeTableController {
1422
1671
  this.isScanOpen = true;
1423
1672
  await MaterialConsumeTableController.render.openScanModal({
1424
1673
  title,
1425
- onScan: async (str) => {
1674
+ onScan: async ({ str }) => {
1426
1675
  console.log("onScan", str);
1676
+ if (!str) {
1677
+ return;
1678
+ }
1427
1679
  await this.parseScanStr(str);
1428
1680
  }
1429
1681
  });
@@ -2240,142 +2492,6 @@ class SubTableCore {
2240
2492
  console.log(this.ctx.widget.props.tableTitle, "处理表单按钮点击事件", params);
2241
2493
  }
2242
2494
  }
2243
- function useFormulaExpWatcher(options) {
2244
- const {
2245
- props,
2246
- currentPageFormState,
2247
- needMinValidateCalc,
2248
- needMaxValidateCalc,
2249
- onCalculateFormula,
2250
- onMinComputed,
2251
- onMaxComputed,
2252
- debounceMs = 200,
2253
- returnType = "string"
2254
- } = options;
2255
- let calcReqId = 0;
2256
- async function computeMinMaxOnce() {
2257
- const myId = ++calcReqId;
2258
- const getValue = (v) => {
2259
- if (returnType === "number") {
2260
- const parsed = v == null ? null : parseFloat(String(v));
2261
- return Number.isFinite(parsed) ? parsed : null;
2262
- }
2263
- return v;
2264
- };
2265
- if (needMinValidateCalc) {
2266
- try {
2267
- const v = await onCalculateFormula("min");
2268
- if (myId !== calcReqId) return;
2269
- onMinComputed?.(getValue(v));
2270
- } catch (e) {
2271
- }
2272
- }
2273
- if (needMaxValidateCalc) {
2274
- try {
2275
- const v = await onCalculateFormula("max");
2276
- if (myId !== calcReqId) return;
2277
- onMaxComputed?.(getValue(v));
2278
- } catch (e) {
2279
- }
2280
- }
2281
- }
2282
- const debouncedCompute = debounce(computeMinMaxOnce, debounceMs);
2283
- const topStops = [];
2284
- const hashRowStops = /* @__PURE__ */ new Map();
2285
- const clearAllStops = () => {
2286
- while (topStops.length) {
2287
- const s = topStops.shift();
2288
- try {
2289
- s && s();
2290
- } catch (e) {
2291
- }
2292
- }
2293
- for (const [, rowMap] of hashRowStops) {
2294
- for (const stop2 of rowMap.values()) {
2295
- try {
2296
- stop2 && stop2();
2297
- } catch (e) {
2298
- }
2299
- }
2300
- }
2301
- hashRowStops.clear();
2302
- debouncedCompute.cancel?.();
2303
- calcReqId++;
2304
- };
2305
- const setupWatchesFromMerged = (parseInfos = []) => {
2306
- if (!needMinValidateCalc && !needMaxValidateCalc) return;
2307
- if (!Array.isArray(parseInfos) || parseInfos.length === 0) {
2308
- debouncedCompute();
2309
- return;
2310
- }
2311
- for (const p of parseInfos) {
2312
- const { type, processed, hashValue } = p;
2313
- if (type === "plain") {
2314
- const stop2 = watch(
2315
- () => currentPageFormState.value?.[processed],
2316
- () => {
2317
- console.log("plain");
2318
- debouncedCompute();
2319
- },
2320
- { immediate: true }
2321
- );
2322
- topStops.push(stop2);
2323
- } else if (type === "underscore") {
2324
- const stop2 = watch(
2325
- () => props.formData?.[processed],
2326
- () => {
2327
- console.log("underscore");
2328
- debouncedCompute();
2329
- },
2330
- { immediate: true }
2331
- );
2332
- topStops.push(stop2);
2333
- } else if (type === "hash") {
2334
- if (!hashRowStops.has(hashValue)) hashRowStops.set(hashValue, /* @__PURE__ */ new Map());
2335
- const rowMap = hashRowStops.get(hashValue);
2336
- const stopLen = watch(
2337
- () => currentPageFormState.value?.[hashValue]?.length ?? 0,
2338
- () => {
2339
- const arr = currentPageFormState.value?.[hashValue];
2340
- for (const row of arr) {
2341
- const rid = `${getRowId(row)}_${processed}`;
2342
- if (!rowMap.has(rid)) {
2343
- const stopPerRow = watch(
2344
- () => [row?.[processed], row?.deleted_],
2345
- () => {
2346
- debouncedCompute();
2347
- },
2348
- { immediate: true }
2349
- );
2350
- rowMap.set(rid, stopPerRow);
2351
- }
2352
- }
2353
- const existingIds = new Set(arr.map(getRowId));
2354
- for (const r of Array.from(rowMap.keys())) {
2355
- if (!existingIds.has(r)) {
2356
- const rid = `${r}_${processed}`;
2357
- const s = rowMap.get(rid);
2358
- s && s();
2359
- rowMap.delete(rid);
2360
- }
2361
- }
2362
- debouncedCompute();
2363
- },
2364
- { immediate: true }
2365
- );
2366
- topStops.push(stopLen);
2367
- }
2368
- }
2369
- debouncedCompute();
2370
- };
2371
- const stop = () => {
2372
- clearAllStops();
2373
- };
2374
- return {
2375
- setupWatchesFromMerged,
2376
- stop
2377
- };
2378
- }
2379
2495
  const identify = (...args) => window.NocodeAdapter.utils?.formulaIdentify?.(...args) ?? [];
2380
2496
  const calculate = (...args) => window.NocodeAdapter.utils?.formulaCalculate?.(...args);
2381
2497
  function useDependency(widget, props) {
@@ -2851,8 +2967,12 @@ function useFormTmplConfig() {
2851
2967
  injectController
2852
2968
  };
2853
2969
  }
2854
- const _hoisted_1$5 = ["data-merge", "data-fill-direction"];
2855
- 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({
2856
2976
  __name: "border-td",
2857
2977
  props: {
2858
2978
  border: {},
@@ -2914,25 +3034,28 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2914
3034
  class: normalizeClass([unref(ns).b("content")])
2915
3035
  }, [
2916
3036
  renderSlot(_ctx.$slots, "default", {}, void 0, true)
2917
- ], 2)
2918
- ], 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);
2919
3042
  };
2920
3043
  }
2921
3044
  });
2922
- const BorderTD = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-d6e21476"]]);
2923
- const _sfc_main$5 = {};
2924
- 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" };
2925
3048
  function _sfc_render(_ctx, _cache) {
2926
- return openBlock(), createElementBlock("div", _hoisted_1$4, [..._cache[0] || (_cache[0] = [
3049
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [..._cache[0] || (_cache[0] = [
2927
3050
  createElementVNode("div", { class: "nocode-shape shape-1" }, null, -1),
2928
3051
  createElementVNode("div", { class: "nocode-shape shape-2" }, null, -1),
2929
3052
  createElementVNode("div", { class: "nocode-shape shape-3" }, null, -1),
2930
3053
  createElementVNode("div", { class: "nocode-shape shape-4" }, null, -1)
2931
3054
  ])]);
2932
3055
  }
2933
- 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"]]);
2934
3057
  const _imports_0 = "data:image/png;base64,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";
2935
- const _hoisted_1$3 = { class: "nocode-document-layout-wrapper" };
3058
+ const _hoisted_1$4 = { class: "nocode-document-layout-wrapper" };
2936
3059
  const _hoisted_2 = {
2937
3060
  key: 0,
2938
3061
  class: "nocode-common-loading-warp"
@@ -2946,7 +3069,7 @@ const _hoisted_4 = {
2946
3069
  class: "nocode-common-loading-warp"
2947
3070
  };
2948
3071
  const _hoisted_5 = { class: "w200px text-center color-[#666]" };
2949
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3072
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2950
3073
  __name: "document-layout",
2951
3074
  props: {
2952
3075
  loading: { type: Boolean },
@@ -2954,7 +3077,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2954
3077
  },
2955
3078
  setup(__props) {
2956
3079
  return (_ctx, _cache) => {
2957
- return openBlock(), createElementBlock("div", _hoisted_1$3, [
3080
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [
2958
3081
  __props.loading ? (openBlock(), createElementBlock("div", _hoisted_2, [
2959
3082
  createVNode(DocumentLoading)
2960
3083
  ])) : __props.hasData ? (openBlock(), createElementBlock("div", _hoisted_3, [
@@ -2973,6 +3096,9 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2973
3096
  };
2974
3097
  }
2975
3098
  });
3099
+ function _isSlot(s) {
3100
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
3101
+ }
2976
3102
  const DocumentSubTable = /* @__PURE__ */ defineComponent({
2977
3103
  name: "NocodeDocumentSubTable",
2978
3104
  props: {
@@ -3014,8 +3140,6 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3014
3140
  }
3015
3141
  },
3016
3142
  setup(props, {
3017
- emit,
3018
- expose,
3019
3143
  slots
3020
3144
  }) {
3021
3145
  const defaultDataMap = inject(NCB_PROVIDE.DEFAULT_FIELD_DATA);
@@ -3034,6 +3158,8 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3034
3158
  isRowSubTable2d,
3035
3159
  childInitRowLen,
3036
3160
  quickFill,
3161
+ confirmBeforeDelete,
3162
+ confirmBeforeDeleteTip,
3037
3163
  subModelType
3038
3164
  } = reactive(props.widget.props);
3039
3165
  const {
@@ -3059,19 +3185,32 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3059
3185
  });
3060
3186
  const dataInfo = computed(() => {
3061
3187
  const visibleToRealIndexMap = {};
3188
+ const displayToLiveRowIndexMap = {};
3062
3189
  const filterValue = [];
3063
- modelValue.value.forEach((item, realIndex) => {
3190
+ const annRowDetails = dataRelationShip?.annRowDetails;
3191
+ const showRowAnn = !!annRowDetails?.length;
3192
+ const sourceRows = showRowAnn ? buildFormChangeDisplayRows(field, modelValue.value, annRowDetails) : modelValue.value;
3193
+ let liveRowCounter = -1;
3194
+ sourceRows.forEach((item, realIndex) => {
3195
+ if (!showRowAnn && item.deleted_) return;
3196
+ const visibleIndex = filterValue.length;
3197
+ visibleToRealIndexMap[visibleIndex] = realIndex;
3064
3198
  if (!item.deleted_) {
3065
- const visibleIndex = filterValue.length;
3066
- visibleToRealIndexMap[visibleIndex] = realIndex;
3067
- filterValue.push(item);
3199
+ liveRowCounter += 1;
3200
+ displayToLiveRowIndexMap[visibleIndex] = liveRowCounter;
3201
+ } else {
3202
+ displayToLiveRowIndexMap[visibleIndex] = -1;
3068
3203
  }
3204
+ filterValue.push(item);
3069
3205
  });
3206
+ const tableData = showRowAnn && !(props.start > 0) ? filterValue : filterValue.slice(props.start, props.end);
3070
3207
  return {
3071
- tableData: filterValue.slice(props.start, props.end),
3072
- hasSubData: filterValue.length > 1,
3073
- isEndRow: props.end === filterValue.length,
3074
- visibleToRealIndexMap
3208
+ tableData,
3209
+ hasSubData: filterValue.filter((d) => !d.deleted_).length > 1,
3210
+ isEndRow: showRowAnn ? true : props.end === filterValue.length,
3211
+ visibleToRealIndexMap,
3212
+ displayToLiveRowIndexMap,
3213
+ showRowAnn
3075
3214
  };
3076
3215
  });
3077
3216
  const currentFieldDefaultData = computed(() => {
@@ -3081,16 +3220,14 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3081
3220
  if (props.isMobile) {
3082
3221
  return false;
3083
3222
  }
3084
- if (dataRelationShip?.formChangeStatus) {
3085
- return false;
3086
- }
3087
3223
  return showDisplayStatus.value === "edit-component";
3088
3224
  });
3089
- computed(() => showAction.value && quickFill);
3090
3225
  const handleDeleteRow = (rowData, dataIdx) => {
3226
+ recordSubtableRowDelete(dataRelationShip, field, rowData);
3091
3227
  deleteSubtableRow(field, props.start + dataIdx);
3092
- if (rowData.id_ || rowData.group_ && rowData._2DTABLE_.some((item) => item.id_)) {
3228
+ if (rowData.id_ || rowData.group_ && rowData._2DTABLE_?.some((item) => item.id_)) {
3093
3229
  rowData.deleted_ = true;
3230
+ modelValue.value = relocateDeletedRowsToEnd(modelValue.value);
3094
3231
  } else {
3095
3232
  rowData.tempDeleted = true;
3096
3233
  modelValue.value = modelValue.value.filter((d) => !d.tempDeleted);
@@ -3106,7 +3243,7 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3106
3243
  rowData,
3107
3244
  quickFillDatas
3108
3245
  }) => {
3109
- const newRowsData = actionType === "copyRow" ? [cloneDeep(omit(rowData, "id_"))] : Array.from({
3246
+ const newRowsData = actionType === "copyRow" ? [cloneDeep(omit(rowData, ["id_", FRONT_ROW_KEY]))] : Array.from({
3110
3247
  length: rowNum
3111
3248
  }, (_, index2) => transformUtils.addSubTableRowItem({
3112
3249
  defaultData: currentFieldDefaultData.value,
@@ -3127,17 +3264,22 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3127
3264
  insertIndex = realIndex + 1;
3128
3265
  break;
3129
3266
  case "last":
3130
- insertIndex = modelValue.value.length;
3267
+ insertIndex = modelValue.value.reduce((last2, row, i) => !row?.deleted_ ? i : last2, -1) + 1;
3131
3268
  break;
3132
3269
  }
3133
3270
  if (actionType === "currentRow") {
3134
3271
  const firstData = newRowsData.shift();
3135
- merge(rowData, firstData);
3272
+ merge(rowData, omit(firstData, ["id_", FRONT_ROW_KEY]));
3273
+ }
3274
+ if (newRowsData.length > 0) {
3275
+ insertSubtableRows(field, insertIndex, newRowsData.length);
3276
+ modelValue.value.splice(insertIndex, 0, ...newRowsData);
3277
+ modelValue.value = relocateDeletedRowsToEnd(modelValue.value);
3278
+ recordSubtableRowAdd(dataRelationShip, field, newRowsData);
3136
3279
  }
3137
- modelValue.value.splice(insertIndex, 0, ...newRowsData);
3138
3280
  updateCalcCallback?.(dataRelationShip?.uniqueId);
3139
3281
  };
3140
- const handleDefaultClick = (rowData, dataIdx) => {
3282
+ const handleDefaultClick = () => {
3141
3283
  const {
3142
3284
  fieldId
3143
3285
  } = props.subInfo;
@@ -3203,7 +3345,23 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3203
3345
  });
3204
3346
  break;
3205
3347
  case "deleteRowCurrent":
3206
- 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
+ }
3207
3365
  break;
3208
3366
  case "default":
3209
3367
  handleDefaultClick();
@@ -3220,16 +3378,68 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3220
3378
  showDelBtn,
3221
3379
  showActionMenu,
3222
3380
  dataIdx,
3223
- dynHeight
3381
+ dynHeight,
3382
+ showRowWatermark,
3383
+ rowGroupKey
3224
3384
  }) => {
3225
3385
  const menus = subTableCore?.calcSubTableActionMenu({
3226
3386
  rowData,
3227
3387
  showDelBtn
3228
3388
  });
3389
+ const annRowDetails = dataRelationShip?.annRowDetails;
3390
+ const rowMark = dataIdx !== -1 && annRowDetails?.length ? resolveRowFormChangeMark(field, rowData, annRowDetails) : null;
3391
+ const rowUi = resolveFormChangeRowUi(rowData, rowMark);
3392
+ const isRowSelected = isAnnLocationSelected(dataRelationShip?.annSelectId, rowMark?.cellLocation);
3393
+ const trClass = [rowUi.trClass, isRowSelected ? "form-change-row-selected" : ""].filter(Boolean).join(" ");
3394
+ const handleRowAnnClick = (e) => {
3395
+ if (!rowMark) return;
3396
+ if (e.target?.closest?.(".sub-table-action-bar")) return;
3397
+ setSelectAnnotationId(rowMark.cellLocation, dataRelationShip);
3398
+ };
3399
+ const wmHostTdId = rowMark && showRowWatermark ? trData.nextIds.find((tdId) => {
3400
+ let tdInfo = props.widgetCenter[tdId];
3401
+ if (subTableCore) {
3402
+ tdInfo = subTableCore.calcNewTdInfo({
3403
+ oldTdInfo: tdInfo,
3404
+ rowData
3405
+ });
3406
+ }
3407
+ const mergeInfo = props.subInfo.mergeBlock?.[tdId];
3408
+ if (mergeInfo) return true;
3409
+ if (tdInfo.cellHidden) return false;
3410
+ return !!tdInfo.cellValueType;
3411
+ }) : null;
3412
+ const layoutRowWatermark = (el) => {
3413
+ if (!(el instanceof HTMLElement) || !rowGroupKey) return;
3414
+ requestAnimationFrame(() => {
3415
+ const table = el.closest("table");
3416
+ const host = el.offsetParent;
3417
+ if (!table || !host) return;
3418
+ const group = Array.from(table.querySelectorAll("tr[data-fc-row-key]")).filter((tr) => tr.getAttribute("data-fc-row-key") === rowGroupKey);
3419
+ if (!group.length) return;
3420
+ const firstRect = group[0].getBoundingClientRect();
3421
+ const lastRect = group[group.length - 1].getBoundingClientRect();
3422
+ const hostRect = host.getBoundingClientRect();
3423
+ el.style.left = `${firstRect.left - hostRect.left}px`;
3424
+ el.style.top = `${firstRect.top - hostRect.top}px`;
3425
+ el.style.width = `${firstRect.width}px`;
3426
+ el.style.height = `${Math.max(lastRect.bottom - firstRect.top, firstRect.height)}px`;
3427
+ });
3428
+ };
3429
+ const rowWatermark = rowMark && wmHostTdId && rowUi.wmKind ? createVNode("span", {
3430
+ "class": ["form-change-row-wm", rowUi.wmClass],
3431
+ "data-row-key": rowGroupKey,
3432
+ "ref": layoutRowWatermark
3433
+ }, [rowUi.wmText]) : null;
3229
3434
  return createVNode("tr", {
3230
3435
  "key": trKey,
3231
- "height": dynHeight || trData.props.height
3232
- }, [trData.nextIds.map((tdId, tdIdx) => {
3436
+ "height": dynHeight || trData.props.height,
3437
+ "class": trClass || void 0,
3438
+ "data-fc-row-op": rowMark?.op || void 0,
3439
+ "data-fc-row-key": rowMark && rowGroupKey ? rowGroupKey : void 0,
3440
+ "data-fc-wm": rowMark && showRowWatermark ? rowUi.wmKind || void 0 : void 0,
3441
+ "onClick": rowMark ? handleRowAnnClick : void 0
3442
+ }, [trData.nextIds.map((tdId) => {
3233
3443
  let tdInfo = props.widgetCenter[tdId];
3234
3444
  if (subTableCore) {
3235
3445
  tdInfo = subTableCore.calcNewTdInfo({
@@ -3253,6 +3463,7 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3253
3463
  hidden: false
3254
3464
  });
3255
3465
  }
3466
+ const cellWm = tdId === wmHostTdId ? rowWatermark : null;
3256
3467
  if (tdInfo.cellValueType) {
3257
3468
  if (props.isMobile) {
3258
3469
  Object.assign(tdAttrs, {
@@ -3263,10 +3474,13 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3263
3474
  formData: rowData
3264
3475
  };
3265
3476
  if (dataIdx !== -1) {
3477
+ const displayIndex = Number(props.start ?? 0) + dataIdx;
3478
+ const ghost = dataInfo.value.showRowAnn && isFormChangeGhostRow(rowData);
3266
3479
  Object.assign(subWidgetAttrs, {
3267
3480
  subtableFieldId: field,
3268
- realRowIndex: Number(props.start ?? 0) + dataIdx,
3269
- pageRowIndex: dataIdx
3481
+ realRowIndex: ghost ? void 0 : dataInfo.value.showRowAnn ? dataInfo.value.displayToLiveRowIndexMap?.[displayIndex] : displayIndex,
3482
+ pageRowIndex: dataIdx,
3483
+ rowKey: getRowId(rowData)
3270
3484
  });
3271
3485
  }
3272
3486
  if (tdInfo.props.isNewFixedTableInDyn) {
@@ -3281,7 +3495,7 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3281
3495
  }, tdAttrs, {
3282
3496
  "isEmpty": true
3283
3497
  }), {
3284
- default: () => [tdInfo.cellValueType !== CellType.Default || tdInfo.cellWidget.props.value ? slots.widget?.({
3498
+ default: () => [cellWm, tdInfo.cellValueType !== CellType.Default || tdInfo.cellWidget.props.value ? slots.widget?.({
3285
3499
  tdInfo,
3286
3500
  ...subWidgetAttrs
3287
3501
  }) : null]
@@ -3292,7 +3506,9 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3292
3506
  "style": tdInfo.style
3293
3507
  }, tdAttrs, {
3294
3508
  "isEmpty": true
3295
- }), null);
3509
+ }), _isSlot(cellWm) ? cellWm : {
3510
+ default: () => [cellWm]
3511
+ });
3296
3512
  }
3297
3513
  }), showAction.value && showActionMenu ? createVNode("div", {
3298
3514
  "class": "sub-table-action-bar"
@@ -3319,7 +3535,7 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3319
3535
  }, [createVNode("colgroup", null, [colsWidth.map((cw, cwIdx) => createVNode("col", {
3320
3536
  "key": cwIdx,
3321
3537
  "width": cw
3322
- }, null))]), createVNode("tbody", null, [props.subInfo.containerIds.map((trId, trIdx) => {
3538
+ }, null))]), createVNode("tbody", null, [props.subInfo.containerIds.map((trId) => {
3323
3539
  const trInfo = props.widgetCenter[trId];
3324
3540
  if (trInfo.props.identifier !== "dynamicTr") {
3325
3541
  const dynHeight = props.subInfo.dynamicRowHeights?.[trId];
@@ -3331,20 +3547,20 @@ const DocumentSubTable = /* @__PURE__ */ defineComponent({
3331
3547
  });
3332
3548
  }
3333
3549
  if (trId === lastDynamicId) {
3334
- const lastDataIdx = dataInfo.value.tableData.length - 1;
3335
3550
  return dataInfo.value.tableData.map((data, dataIdx) => {
3551
+ const stableRowKey = getRowId(data);
3336
3552
  return dynamicIds.map((rowId, rowIdx) => {
3337
- const isLast = dataIdx === lastDataIdx && rowIdx === lastDynRowIdx;
3338
3553
  const showDelBtn = dataInfo.value.hasSubData && rowIdx === lastDynRowIdx;
3339
- dataInfo.value.isEndRow && isLast;
3340
3554
  const showActionMenu = rowIdx === lastDynRowIdx;
3341
3555
  const row = props.widgetCenter[rowId];
3342
3556
  const dynHeight = props.subInfo.dynamicRowHeights?.[rowId]?.[dataIdx];
3343
- return renderTr2Td(`${dataIdx}_${rowIdx}`, row, data, {
3557
+ return renderTr2Td(`${stableRowKey}_${rowIdx}`, row, data, {
3344
3558
  showDelBtn,
3345
3559
  showActionMenu,
3346
3560
  dataIdx,
3347
- dynHeight
3561
+ dynHeight,
3562
+ showRowWatermark: rowIdx === 0,
3563
+ rowGroupKey: stableRowKey
3348
3564
  });
3349
3565
  });
3350
3566
  });
@@ -3452,11 +3668,11 @@ var MaterialConsumeActionType = /* @__PURE__ */ ((MaterialConsumeActionType2) =>
3452
3668
  MaterialConsumeActionType2["CHANGE_PARSE_RULE"] = "CHANGE_PARSE_RULE";
3453
3669
  return MaterialConsumeActionType2;
3454
3670
  })(MaterialConsumeActionType || {});
3455
- const _hoisted_1$2 = {
3671
+ const _hoisted_1$3 = {
3456
3672
  key: 0,
3457
3673
  class: "material-consume-action-bar"
3458
3674
  };
3459
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3675
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3460
3676
  __name: "material-consume-action",
3461
3677
  props: {
3462
3678
  showBom: { type: Boolean, default: false },
@@ -3487,7 +3703,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3487
3703
  emit("doAction", MaterialConsumeActionType.CONFIRM, props.rowData);
3488
3704
  };
3489
3705
  return (_ctx, _cache) => {
3490
- return __props.showConfirmBtn && isEditing.value ? (openBlock(), createElementBlock("div", _hoisted_1$2, [
3706
+ return __props.showConfirmBtn && isEditing.value ? (openBlock(), createElementBlock("div", _hoisted_1$3, [
3491
3707
  createElementVNode("div", {
3492
3708
  class: "sub-table-btn btn-confirm",
3493
3709
  onClick: handleConfirm
@@ -3498,7 +3714,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3498
3714
  };
3499
3715
  }
3500
3716
  });
3501
- 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"]]);
3502
3718
  const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3503
3719
  name: "NocodeMaterialConsumeTable",
3504
3720
  props: {
@@ -3536,8 +3752,6 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3536
3752
  }
3537
3753
  },
3538
3754
  setup(props, {
3539
- emit,
3540
- expose,
3541
3755
  slots
3542
3756
  }) {
3543
3757
  const defaultDataMap = inject(NCB_PROVIDE.DEFAULT_FIELD_DATA);
@@ -3560,8 +3774,7 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3560
3774
  colsWidth,
3561
3775
  dynamicIds,
3562
3776
  isRowSubTable2d,
3563
- childInitRowLen,
3564
- quickFill
3777
+ childInitRowLen
3565
3778
  } = reactive(props.widget.props);
3566
3779
  const lastDynRowIdx = dynamicIds.length - 1;
3567
3780
  const lastDynamicId = last(dynamicIds);
@@ -3611,11 +3824,12 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3611
3824
  }
3612
3825
  return showDisplayStatus.value === "edit-component";
3613
3826
  });
3614
- computed(() => showAction.value && quickFill);
3615
3827
  const handleDeleteRow = (rowData, dataIdx) => {
3828
+ recordSubtableRowDelete(dataRelationShip, field, rowData);
3616
3829
  deleteSubtableRow(field, props.start + dataIdx);
3617
- if (rowData.id_ || rowData.group_ && rowData._2DTABLE_.some((item) => item.id_)) {
3830
+ if (rowData.id_ || rowData.group_ && rowData._2DTABLE_?.some((item) => item.id_)) {
3618
3831
  rowData.deleted_ = true;
3832
+ modelValue.value = relocateDeletedRowsToEnd(modelValue.value);
3619
3833
  } else {
3620
3834
  rowData.tempDeleted = true;
3621
3835
  modelValue.value = modelValue.value.filter((d) => !d.tempDeleted);
@@ -3633,7 +3847,7 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3633
3847
  if (!isFormChange.value && tableController.hasEditingRow()) {
3634
3848
  return;
3635
3849
  }
3636
- const newRowsData = actionType === "copyRow" ? [cloneDeep(omit(rowData, "id_"))] : Array.from({
3850
+ const newRowsData = actionType === "copyRow" ? [cloneDeep(omit(rowData, ["id_", FRONT_ROW_KEY]))] : Array.from({
3637
3851
  length: rowNum
3638
3852
  }, (_, index2) => transformUtils.addSubTableRowItem({
3639
3853
  defaultData: currentFieldDefaultData.value,
@@ -3661,13 +3875,17 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3661
3875
  }
3662
3876
  if (actionType === "currentRow") {
3663
3877
  const firstData = newRowsData.shift();
3664
- merge(rowData, firstData);
3878
+ merge(rowData, omit(firstData, ["id_", FRONT_ROW_KEY]));
3879
+ }
3880
+ if (newRowsData.length > 0) {
3881
+ insertSubtableRows(field, insertIndex, newRowsData.length);
3882
+ modelValue.value.splice(insertIndex, 0, ...newRowsData);
3883
+ modelValue.value = relocateDeletedRowsToEnd(modelValue.value);
3884
+ recordSubtableRowAdd(dataRelationShip, field, newRowsData);
3665
3885
  }
3666
- modelValue.value.splice(insertIndex, 0, ...newRowsData);
3667
3886
  updateCalcCallback?.(dataRelationShip?.uniqueId);
3668
3887
  };
3669
3888
  const handleAction = (action, rowData) => {
3670
- console.log("action", action);
3671
3889
  switch (action) {
3672
3890
  case MaterialConsumeActionType.CONFIRM:
3673
3891
  tableController.confirm(rowData);
@@ -3812,7 +4030,7 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3812
4030
  return createVNode("tr", {
3813
4031
  "key": trKey,
3814
4032
  "height": dynHeight || trData.props.height
3815
- }, [trData.nextIds.map((tdId, tdIdx) => {
4033
+ }, [trData.nextIds.map((tdId) => {
3816
4034
  const tdInfo = getNewTdInfo(props.widgetCenter[tdId], rowData);
3817
4035
  const tdAttrs = {
3818
4036
  key: tdId,
@@ -3843,7 +4061,8 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3843
4061
  Object.assign(subWidgetAttrs, {
3844
4062
  subtableFieldId: field,
3845
4063
  realRowIndex: Number(props.start ?? 0) + dataIdx,
3846
- pageRowIndex: dataIdx
4064
+ pageRowIndex: dataIdx,
4065
+ rowKey: getRowId(rowData)
3847
4066
  });
3848
4067
  }
3849
4068
  if (tdInfo.props.isNewFixedTableInDyn) {
@@ -3893,7 +4112,7 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3893
4112
  }, [createVNode("colgroup", null, [colsWidth.map((cw, cwIdx) => createVNode("col", {
3894
4113
  "key": cwIdx,
3895
4114
  "width": cw
3896
- }, null))]), createVNode("tbody", null, [props.subInfo.containerIds.map((trId, trIdx) => {
4115
+ }, null))]), createVNode("tbody", null, [props.subInfo.containerIds.map((trId) => {
3897
4116
  const trInfo = props.widgetCenter[trId];
3898
4117
  console.log("trInfo", trInfo);
3899
4118
  if (trInfo.props.identifier !== "dynamicTr") {
@@ -3908,18 +4127,18 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3908
4127
  if (trId === lastDynamicId) {
3909
4128
  const lastDataIdx = dataInfo.value.tableData.length - 1;
3910
4129
  return dataInfo.value.tableData.map((data, dataIdx) => {
4130
+ const stableRowKey = getRowId(data);
3911
4131
  return dynamicIds.map((rowId, rowIdx) => {
3912
4132
  const isLastDynRow = rowIdx === lastDynRowIdx;
3913
4133
  const isLast = dataIdx === lastDataIdx && isLastDynRow;
3914
4134
  const showDelBtn = dataInfo.value.hasSubData && isLastDynRow && // 开启了顺序投料时,只有最后一行可以删除
3915
4135
  (tableController.enableSequenceLoading ? isLast : true);
3916
4136
  const showScanBtn = isLast;
3917
- dataInfo.value.isEndRow && isLast;
3918
4137
  const showActionMenu = isLastDynRow;
3919
4138
  const showEditBtn = !isFormChange.value && (tableController.enableSequenceLoading ? isLast : true) && data.is_confirmed_;
3920
4139
  const row = props.widgetCenter[rowId];
3921
4140
  const dynHeight = props.subInfo.dynamicRowHeights?.[rowId]?.[dataIdx];
3922
- return renderTr2Td(`${dataIdx}_${rowIdx}`, row, data, {
4141
+ return renderTr2Td(`${stableRowKey}_${rowIdx}`, row, data, {
3923
4142
  showDelBtn,
3924
4143
  showActionMenu,
3925
4144
  showScanBtn,
@@ -3933,448 +4152,243 @@ const MaterialConsumeTable = /* @__PURE__ */ defineComponent({
3933
4152
  })])])]);
3934
4153
  }
3935
4154
  });
3936
- const DocumentPaper = /* @__PURE__ */ defineComponent({
3937
- name: "NocodeDocumentPaper",
3938
- props: {
3939
- /** 页面内容信息 */
3940
- page: {
3941
- type: Object,
3942
- required: true
3943
- },
3944
- /** 映射信息 */
3945
- basicInfo: {
3946
- type: Object,
3947
- required: true
3948
- },
3949
- /** 表单数据 */
3950
- formState: {
3951
- type: Object,
3952
- required: true
3953
- },
3954
- /** 模板数据中心 */
3955
- widgetCenter: {
3956
- type: Object,
3957
- required: true
3958
- },
3959
- /** 是否是移动端渲染 */
3960
- isMobile: {
3961
- type: Boolean
3962
- },
3963
- selfInfoList: {
3964
- 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;
3965
4169
  }
3966
- },
3967
- setup(props, {
3968
- expose,
3969
- slots
3970
- }) {
3971
- provide(NCB_PROVIDE.DATA_RELATION_SHIP, props.basicInfo);
3972
- provide(NCB_PROVIDE.FORM_INST_LIST, props.selfInfoList);
3973
- const tmplBomCMap = inject(NCB_PROVIDE.TMPL_BOM_CONTROLLER_MAP);
3974
- const tmplBomController = computed(() => tmplBomCMap.value?.[props.basicInfo?.uniqueId]);
3975
- const subTableCoreFactoryMap = inject(NCB_PROVIDE.SUB_TABLE_CORE_FACTORY_MAP);
3976
- const subTableCoreFactory = computed(() => subTableCoreFactoryMap.value?.[props.basicInfo?.uniqueId]);
3977
- const mainTableRef = ref();
3978
- const isPdfMode = inject(NCB_PROVIDE.IS_PDF, false);
3979
- const openFillFieldsModal = inject(NCB_PROVIDE.MOBILE_FILL_FIELDS_POPUP);
3980
- const widget = props.widgetCenter?.[ComponentTypeEnum.PAPER];
3981
- const {
3982
- pageMargins,
3983
- pageSize,
3984
- pageWidth,
3985
- pageHeight,
3986
- colsWidth,
3987
- subTable2DList
3988
- } = widget.props;
3989
- provide(NCB_PROVIDE.PAGER, widget);
3990
- const size = [pageWidth, pageHeight];
3991
- const sortSize = size.slice().sort();
3992
- const isLandscape = JSON.stringify(size) !== JSON.stringify(sortSize);
3993
- const orientation = isLandscape ? "landscape" : "portrait";
3994
- const resultSize = isLandscape && isPdfMode ? sortSize : size;
3995
- const paddings = pageMargins?.split(" ");
3996
- const config = {
3997
- cls: orientation,
3998
- style: {
3999
- width: `${resultSize[0]}mm`,
4000
- 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}`;
4001
4195
  }
4002
- };
4003
- const paperStyles = {
4004
- width: `${pageWidth}mm`,
4005
- minWidth: `${pageWidth}mm`,
4006
- height: `${pageHeight}mm`,
4007
- padding: pageMargins,
4008
- "--pageWidth": `-${pageWidth}mm`
4009
- };
4010
- const overlayStyle = {
4011
- ["--offset-top"]: paddings?.[0] || "0px",
4012
- ["--offset-right"]: paddings?.[1] || "0px",
4013
- ["--offset-bottom"]: paddings?.[2] || "0px",
4014
- ["--offset-left"]: paddings?.[3] || "0px"
4015
- };
4016
- const getWidgetAttrs = (tdInfo) => {
4017
- const attrInfo = {
4018
- formData: props.formState
4019
- };
4020
- const field = tdInfo.props.fixedTableFieldId ?? "";
4021
- if (tdInfo.props.isNewFixedTableTd) {
4022
- const cellFixedTableDataIdx = tdInfo.cellFixedTableDataIdx ?? 0;
4023
- Object.assign(attrInfo, {
4024
- formData: props.formState?.[field]?.[cellFixedTableDataIdx] ?? {},
4025
- subtableFieldId: field,
4026
- realRowIndex: cellFixedTableDataIdx,
4027
- pageRowIndex: cellFixedTableDataIdx
4028
- });
4029
- } else if (tdInfo.props.isNewCheckTable2D) {
4030
- const {
4031
- checkTableType
4032
- } = tdInfo.props;
4033
- const rowIdx = tdInfo.cellCheckTableDataRowIdx ?? 0;
4034
- const colIdx = tdInfo.cellCheckTableDataColIdx ?? 0;
4035
- const baseInfo = {
4036
- subtableFieldId: field,
4037
- realRowIndex: rowIdx,
4038
- pageRowIndex: rowIdx,
4039
- /** 检验表列坐标,与 realRowIndex 解耦,不改变原有 formData 绑定逻辑 */
4040
- realColIndex: colIdx
4041
- };
4042
- switch (checkTableType) {
4043
- case "col":
4044
- baseInfo.formData = props.formState?.[field]?.[colIdx] ?? {};
4045
- baseInfo.realRowIndex = colIdx;
4046
- baseInfo.pageRowIndex = colIdx;
4047
- break;
4048
- case "row":
4049
- baseInfo.formData = props.formState?.[field]?.[rowIdx] ?? {};
4050
- break;
4051
- case "child":
4052
- baseInfo.formData = props.formState?.[field]?.[rowIdx]?.["_2DTABLE_"]?.[colIdx] ?? {};
4053
- baseInfo.childSubTableDataIndex = colIdx;
4054
- break;
4055
- }
4056
- Object.assign(attrInfo, baseInfo);
4057
- }
4058
- return attrInfo;
4059
- };
4060
- onMounted(async () => {
4061
- if (props.basicInfo.renderModeType === RenderModeEnum.ViewMode) {
4062
- await waitDomStable(mainTableRef.value, void 0, void 0, props.basicInfo.__isPrintRender);
4063
- mergeMarkedTd();
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;
4064
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);
4065
4288
  });
4066
- return () => createVNode("div", {
4067
- "class": ["cmp-paper-wrapper", pageSize, config.cls, {
4068
- "print-view": isPdfMode
4069
- }],
4070
- "style": {
4071
- ...config.style,
4072
- ...overlayStyle
4073
- },
4074
- "data-nocode-orientation": config.cls,
4075
- "data-nocode-width": pageWidth,
4076
- "data-nocode-height": pageHeight
4077
- }, [createVNode("div", {
4078
- "class": "cmp-paper",
4079
- "style": paperStyles
4080
- }, [createVNode("div", {
4081
- "class": "cmp-paper-overlay"
4082
- }, [slots.annotation?.(), widget.headerWidgets && createVNode("div", {
4083
- "class": "paper-header"
4084
- }, [slots.overlay?.({
4085
- widgets: widget.headerWidgets
4086
- })]), widget.footerWidgets && createVNode("div", {
4087
- "class": "paper-footer"
4088
- }, [slots.overlay?.({
4089
- widgets: widget.footerWidgets
4090
- })]), widget.watermarks && createVNode("div", {
4091
- "class": "paper-watermark"
4092
- }, [slots.overlay?.({
4093
- widgets: widget.watermarks
4094
- })])]), createVNode("div", {
4095
- "class": "cmp-paper-container"
4096
- }, [createVNode("table", {
4097
- "ref": mainTableRef,
4098
- "class": "main-table-wrapper",
4099
- "cellpadding": "0",
4100
- "cellspacing": "0"
4101
- }, [createVNode("colgroup", null, [colsWidth.map((cw, cwIdx) => createVNode("col", {
4102
- "key": cwIdx,
4103
- "width": cw
4104
- }, null))]), createVNode("tbody", null, [props.page.containerIds.map((trId, trIdx) => {
4105
- const trInfo = props.widgetCenter[trId];
4106
- const tdIds = trInfo.nextIds;
4107
- const height = props.page.dynamicRowHeights?.[trId] || trInfo.props.height;
4108
- return createVNode("tr", {
4109
- "key": `${trId}_${trIdx}`,
4110
- "height": height
4111
- }, [tdIds.map((tdId, tdIdx) => {
4112
- const tdInfo = props.widgetCenter[tdId];
4113
- const tdAttrs = {
4114
- key: tdId,
4115
- id: tdId,
4116
- hidden: tdInfo.cellHidden,
4117
- borderAttrs: tdInfo.props.sourceBorderAttrs,
4118
- autoMerge: tdInfo.fillDirection === "x" ? tdInfo.xAutoMerge : tdInfo.autoMerge,
4119
- fillDirection: tdInfo.fillDirection,
4120
- ...pick(tdInfo.props, ["rowspan", "colspan", "class"])
4121
- };
4122
- const realTdAttrInfo = props.page.mergeBlock?.[tdId];
4123
- const dynamicConfig = {};
4124
- if (realTdAttrInfo) {
4125
- Object.assign(tdAttrs, {
4126
- ...pick(realTdAttrInfo, ["rowspan", "colspan", "borderAttrs"]),
4127
- hidden: false
4128
- });
4129
- Object.assign(dynamicConfig, {
4130
- ...pick(realTdAttrInfo, ["visibleText", "sourceTdId", "isDynRo"])
4131
- });
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]);
4132
4307
  }
4133
- const subInfo = props.page.subTableMap?.[tdId];
4134
- if (subInfo && subInfo.wrapperTdId === tdId) {
4135
- const subWidget = props.widgetCenter[subInfo.widgetId];
4136
- const field = subWidget.props.field ?? "";
4137
- const relationObj = props.page.relation[field] ?? {};
4138
- const subTable2dItem = subTable2DList.find((item) => item.subTable2d && item.rowSubFieldKey === field);
4139
- if (subWidget.props.isMaterialConsumeTable) {
4140
- const tableController = tmplBomController.value?.tableControllers[subWidget.props.materialConsumeTableId];
4141
- if (tableController) {
4142
- return createVNode("td", mergeProps({
4143
- "style": tdInfo.style
4144
- }, tdAttrs), [createVNode(MaterialConsumeTable, {
4145
- "subInfo": subInfo,
4146
- "widget": subWidget,
4147
- "formData": props.formState,
4148
- "widgetCenter": props.widgetCenter,
4149
- "start": relationObj?.start,
4150
- "end": relationObj.end,
4151
- "isMobile": props.isMobile,
4152
- "tableController": tableController
4153
- }, {
4154
- widget: (subProps) => slots.widget?.(subProps),
4155
- subAction: (subProps) => slots.subAction?.(subProps)
4156
- })]);
4157
- }
4158
- }
4159
- const subTableCore = subTableCoreFactory.value?.getSubCoreByTid(subInfo.widgetId);
4160
- return createVNode("td", mergeProps({
4161
- "style": tdInfo.style
4162
- }, tdAttrs), [createVNode(DocumentSubTable, {
4163
- "subInfo": subInfo,
4164
- "widget": subWidget,
4165
- "subTable2dItem": subTable2dItem,
4166
- "formData": props.formState,
4167
- "widgetCenter": props.widgetCenter,
4168
- "start": relationObj?.start,
4169
- "end": relationObj.end,
4170
- "isMobile": props.isMobile,
4171
- "subTableCore": subTableCore
4172
- }, {
4173
- widget: (subProps) => slots.widget?.(subProps),
4174
- subAction: (subProps) => slots.subAction?.(subProps)
4175
- })]);
4308
+ if (r % 2 === 1) {
4309
+ rowValues.reverse();
4176
4310
  }
4177
- if (tdInfo.cellValueType) {
4178
- const widgetAttrs = getWidgetAttrs(tdInfo);
4179
- if (props.isMobile) {
4180
- Object.assign(tdAttrs, {
4181
- onClick: setSelectMobileTdId.bind(null, tdInfo, props.basicInfo, props.widgetCenter, openFillFieldsModal, -1)
4182
- });
4183
- }
4184
- return createVNode(BorderTD, mergeProps({
4185
- "style": tdInfo.style
4186
- }, tdAttrs, {
4187
- "isEmpty": true
4188
- }), {
4189
- default: () => [tdInfo.cellValueType !== CellType.Default || tdInfo.cellWidget.props.value ? slots.widget?.({
4190
- tdInfo,
4191
- ...widgetAttrs,
4192
- dynamicConfig
4193
- }) : null]
4194
- });
4311
+ values.push(...rowValues);
4312
+ }
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]);
4195
4318
  }
4196
- if (realTdAttrInfo && tdInfo.cellHidden) {
4197
- const sourceTdInfo = props.widgetCenter[dynamicConfig?.sourceTdId];
4198
- const widgetAttrs = getWidgetAttrs(tdInfo);
4199
- return createVNode(BorderTD, mergeProps({
4200
- "style": tdInfo.style
4201
- }, tdAttrs, {
4202
- "isEmpty": true
4203
- }), {
4204
- default: () => [dynamicConfig?.isDynRo ? slots.widget?.({
4205
- tdInfo: sourceTdInfo,
4206
- ...widgetAttrs,
4207
- dynamicConfig
4208
- }) : null]
4209
- });
4319
+ if (c % 2 === 1) {
4320
+ colValues.reverse();
4210
4321
  }
4211
- })]);
4212
- })])])])])]);
4322
+ values.push(...colValues);
4323
+ }
4324
+ }
4325
+ const row = {};
4326
+ values.forEach((v, i) => {
4327
+ row[`K${i}`] = v;
4328
+ });
4329
+ result.push(row);
4213
4330
  }
4214
- });
4215
- const _hoisted_1$1 = { class: "document-quick-fill-container" };
4216
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4217
- __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",
4218
4349
  props: {
4219
- columns: {},
4220
- modal: {},
4221
- callback: {}
4350
+ rowCount: {},
4351
+ colCount: {},
4352
+ dgRowCount: {},
4353
+ dgColCount: {},
4354
+ dgDirection: {},
4355
+ columns: {}
4222
4356
  },
4223
4357
  setup(__props) {
4224
4358
  const props = __props;
4225
4359
  const rows = ref([]);
4226
- function makeEmptyRow() {
4227
- return Object.fromEntries(props.columns.map((c) => [c.prop, ""]));
4228
- }
4229
- function initRows(count = 10) {
4230
- rows.value = Array.from({ length: count }, () => makeEmptyRow());
4231
- }
4360
+ const cols = ref([]);
4232
4361
  onBeforeMount(() => {
4233
- initRows(200);
4234
- });
4235
- function processRows(rows2 = []) {
4236
- const isBlank = (v) => v === null || v === void 0 || typeof v === "string" && v.trim() === "" || Array.isArray(v) && v.length === 0;
4237
- const roundToScale = (num, scale) => {
4238
- if (scale == null) return num;
4239
- const factor = Math.pow(10, scale);
4240
- return Math.round(num * factor) / factor;
4241
- };
4242
- const parseNumber = (v, { integer = false, scale = null } = {}) => {
4243
- if (v === null || v === void 0) return null;
4244
- if (typeof v === "number") {
4245
- if (!Number.isFinite(v)) return null;
4246
- if (integer && !Number.isInteger(v)) return null;
4247
- const n2 = scale != null ? roundToScale(v, scale) : v;
4248
- return Number.isFinite(n2) ? n2 : null;
4249
- }
4250
- let s = String(v).trim();
4251
- if (s === "") return null;
4252
- s = s.replace(/,/g, "");
4253
- if (/^[\(\(].+[\)\)]$/.test(s)) {
4254
- s = "-" + s.replace(/^[\(\(]|[\)\)]$/g, "");
4255
- }
4256
- const n = Number(s);
4257
- if (!Number.isFinite(n)) return null;
4258
- if (integer) {
4259
- if (!Number.isInteger(n)) return null;
4260
- return n;
4261
- } else {
4262
- return scale != null ? roundToScale(n, scale) : n;
4263
- }
4264
- };
4265
- const parseToDate = (v) => {
4266
- if (v === null || v === void 0 || v === "") return null;
4267
- if (typeof v === "string") {
4268
- let s = v.trim();
4269
- if (s === "") return null;
4270
- s = s.replace(/-/g, "/");
4271
- if (/^\d{1,2}:\d{2}(:\d{2})?$/.test(s)) {
4272
- const today = /* @__PURE__ */ new Date();
4273
- const datePart = `${today.getFullYear()}/${today.getMonth() + 1}/${today.getDate()}`;
4274
- s = `${datePart} ${s}`;
4275
- }
4276
- const d = new Date(s);
4277
- return isNaN(d) ? null : d;
4278
- }
4279
- return null;
4280
- };
4281
- const buildOptionLookup = (opts = []) => {
4282
- const map = /* @__PURE__ */ new Map();
4283
- for (const o of opts) {
4284
- const val = o.value != null ? String(o.value) : void 0;
4285
- const text = o.text != null ? String(o.text) : void 0;
4286
- const label = o.label != null ? String(o.label) : void 0;
4287
- if (val !== void 0) map.set(val, val);
4288
- if (text !== void 0) map.set(text, val || text);
4289
- if (label !== void 0) map.set(label, val || label);
4290
- }
4362
+ const { rowCount, colCount } = props;
4363
+ const newRow = () => Array.from({ length: colCount }).reduce((map, v, i) => {
4364
+ map[`KEY${i}`] = "";
4291
4365
  return map;
4292
- };
4293
- const pad2 = (n) => String(n).padStart(2, "0");
4294
- const formatDate = (d) => `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
4295
- const formatTime = (d) => `${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`;
4296
- const formatDateTime = (d) => `${formatDate(d)} ${formatTime(d)}`;
4297
- const out = rows2.map((row) => {
4298
- const newRow = { ...row };
4299
- for (const f of props.columns) {
4300
- const val = row[f.prop];
4301
- switch (f.fieldType) {
4302
- case FIELD_TYPE.INTEGER:
4303
- case FIELD_TYPE.LONG:
4304
- {
4305
- const n = parseNumber(val, { integer: true });
4306
- newRow[f.prop] = isBlank(n) ? void 0 : n;
4307
- }
4308
- break;
4309
- case FIELD_TYPE.DOUBLE:
4310
- case FIELD_TYPE.DECIMAL:
4311
- {
4312
- const n = parseNumber(val, { integer: false, scale: null });
4313
- newRow[f.prop] = isBlank(n) ? void 0 : n;
4314
- }
4315
- break;
4316
- case FIELD_TYPE.DATE:
4317
- {
4318
- const d = parseToDate(val);
4319
- newRow[f.prop] = d ? formatDate(d) : isBlank(val) ? void 0 : val;
4320
- }
4321
- break;
4322
- case FIELD_TYPE.TIME:
4323
- {
4324
- const d = parseToDate(val);
4325
- newRow[f.prop] = d ? formatTime(d) : isBlank(val) ? void 0 : val;
4326
- }
4327
- break;
4328
- case FIELD_TYPE.DATE_TIME:
4329
- {
4330
- const d = parseToDate(val);
4331
- newRow[f.prop] = d ? formatDateTime(d) : isBlank(val) ? void 0 : val;
4332
- }
4333
- break;
4334
- case FIELD_TYPE.OPTION_MULTI:
4335
- {
4336
- const lookup = buildOptionLookup(f.newOptions);
4337
- if (typeof val === "string") {
4338
- const tokens = val.split(/[;,]/).map((s) => s.trim()).filter((s) => s !== "");
4339
- const arr = tokens.map((t) => lookup.get(t)).filter((v) => v !== void 0);
4340
- newRow[f.prop] = arr.length ? arr.join(",") : void 0;
4341
- } else {
4342
- newRow[f.prop] = isBlank(val) ? void 0 : val;
4343
- }
4344
- }
4345
- break;
4346
- case FIELD_TYPE.OPTION:
4347
- {
4348
- const lookup = buildOptionLookup(f.newOptions);
4349
- if (isBlank(val)) {
4350
- newRow[f.prop] = void 0;
4351
- } else {
4352
- const tokens = val.split(/[;,]/).map((s) => s.trim()).filter((s) => s !== "");
4353
- const normalized = lookup.get(tokens?.[0]);
4354
- newRow[f.prop] = normalized !== void 0 ? normalized : void 0;
4355
- }
4356
- }
4357
- break;
4358
- default:
4359
- newRow[f.prop] = isBlank(val) ? void 0 : val;
4360
- }
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;
4361
4380
  }
4362
- return newRow;
4363
- }).filter((row) => {
4364
- return props.columns.some((f) => {
4365
- const v = row[f.prop];
4366
- if (v === 0 || v === false) return true;
4367
- return !isBlank(v);
4381
+ const _row = {};
4382
+ columns.forEach((col, i) => {
4383
+ _row[col.prop] = values[i];
4368
4384
  });
4369
- });
4370
- return out;
4371
- }
4372
- async function onSave() {
4385
+ return _row;
4386
+ }).filter(Boolean);
4373
4387
  try {
4374
4388
  return {
4375
4389
  ok: true,
4376
4390
  params: {
4377
- data: processRows(unref(rows.value))
4391
+ data: processRows(groupedRows, columns)
4378
4392
  }
4379
4393
  };
4380
4394
  } catch (err) {
@@ -4386,13 +4400,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4386
4400
  }
4387
4401
  useModal(onSave);
4388
4402
  return (_ctx, _cache) => {
4389
- return openBlock(), createElementBlock("div", _hoisted_1$1, [
4403
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
4390
4404
  _cache[0] || (_cache[0] = createElementVNode("div", { class: "quick-fill-tips" }, [
4391
4405
  createElementVNode("i", { class: "iconfont icon-zhuyi" }),
4392
4406
  createElementVNode("ul", { class: "tips-list" }, [
4393
4407
  createElementVNode("li", null, "可将Excel内容粘贴到表格中,支持使用复制、粘贴、删除快捷键"),
4394
- createElementVNode("li", null, "表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割)"),
4395
- createElementVNode("li", null, "当前快速填报最多支持200行")
4408
+ createElementVNode("li", null, " 表单中支持快速填报的字段类型:文本、长文本、整数、长整数、小数、精度小数、日期、时间、日期时间、LOT/SN、报废物料批次、枚举单选、枚举多选(选项间以“,”分割) ")
4396
4409
  ])
4397
4410
  ], -1)),
4398
4411
  createVNode(unref(q), {
@@ -4401,22 +4414,21 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4401
4414
  resize: "",
4402
4415
  colSize: 200,
4403
4416
  source: rows.value,
4404
- columns: __props.columns,
4417
+ columns: cols.value,
4405
4418
  theme: "material",
4406
4419
  "hide-attribution": "",
4407
- "apply-on-close": true,
4408
- "row-headers": { prop: "rowIndex", name: "序号", size: 60 }
4420
+ "apply-on-close": true
4409
4421
  }, null, 8, ["source", "columns"])
4410
4422
  ]);
4411
4423
  };
4412
4424
  }
4413
4425
  });
4414
- const DocumentQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-b95f66b0"]]);
4415
- const _hoisted_1 = {
4426
+ const FixedQuickFillModal = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-9770bafc"]]);
4427
+ const _hoisted_1$1 = {
4416
4428
  key: 1,
4417
4429
  class: "sub-table-action__subtitle"
4418
4430
  };
4419
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4431
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
4420
4432
  __name: "sub-table-action",
4421
4433
  props: {
4422
4434
  showDelBtn: { type: Boolean, default: false },
@@ -4434,7 +4446,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4434
4446
  setup(__props, { emit: __emit }) {
4435
4447
  const props = __props;
4436
4448
  const emit = __emit;
4437
- computed(() => {
4449
+ const showMenus = computed(() => {
4438
4450
  const menus = [
4439
4451
  ...props.isMaterialConsume ? [
4440
4452
  {
@@ -4544,6 +4556,9 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4544
4556
  ];
4545
4557
  return menus.filter((i) => i.show !== false);
4546
4558
  });
4559
+ const displayMenus = computed(
4560
+ () => props.menus?.length ? props.menus : showMenus.value
4561
+ );
4547
4562
  const stopRefPropagation = (vm) => {
4548
4563
  if (!vm?.$el) {
4549
4564
  return;
@@ -4594,11 +4609,11 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4594
4609
  selectedKeys: []
4595
4610
  }, {
4596
4611
  default: withCtx(() => [
4597
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.menus, (menu) => {
4612
+ (openBlock(true), createElementBlock(Fragment, null, renderList(displayMenus.value, (menu) => {
4598
4613
  return openBlock(), createElementBlock(Fragment, {
4599
4614
  key: menu.key
4600
4615
  }, [
4601
- 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, {
4602
4617
  popupClassName: "sub-table-action__submenu-popup",
4603
4618
  key: menu.key
4604
4619
  }, {
@@ -4682,9 +4697,462 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4682
4697
  };
4683
4698
  }
4684
4699
  });
4685
- 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"]]);
4686
5154
  const _sfc_main = /* @__PURE__ */ defineComponent({
4687
- __name: "document-sub-table-action",
5155
+ __name: "dynamic-table-action",
4688
5156
  props: {
4689
5157
  subTableFieldId: {},
4690
5158
  mobileTdIdGroups: {},
@@ -4746,7 +5214,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4746
5214
  const onMenuClick = async ({ key, actionValue }) => {
4747
5215
  if (key === "quickFillRowCurrent") {
4748
5216
  const res = await window.NocodeAdapter.utils.overlay.modal(
4749
- DocumentQuickFillModal,
5217
+ DynamicQuickFillModal,
4750
5218
  { columns: fieldColumn.value },
4751
5219
  { title: "快速填报", width: "1060px" }
4752
5220
  );
@@ -4782,20 +5250,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4782
5250
  };
4783
5251
  }
4784
5252
  });
4785
- const DocumentSubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1a0e170d"]]);
5253
+ const DynamicTableAction = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-94e9d614"]]);
4786
5254
  export {
4787
5255
  BorderTD as B,
4788
5256
  DeviceLinkTmplUtil as D,
4789
- FormTmplConfigController as F,
5257
+ FixedQuickFillModal as F,
4790
5258
  MaterialConsumptionPatternEnum as M,
4791
5259
  SubTableCore as S,
4792
- _sfc_main$4 as _,
5260
+ _sfc_main$6 as _,
4793
5261
  useFormTmplConfig as a,
4794
- useFormulaExpWatcher as b,
4795
- useStyles as c,
4796
- useDependency as d,
5262
+ useStyles as b,
5263
+ useDependency as c,
5264
+ useValidator as d,
4797
5265
  DocumentPaper as e,
4798
- DocumentSubTableAction as f,
5266
+ DynamicTableAction as f,
4799
5267
  MaterialConsumeTableController as g,
4800
5268
  SubTableActionMenuTypeEnum as h,
4801
5269
  getMenuByAction as i,
@@ -4804,10 +5272,12 @@ export {
4804
5272
  getInsertSubMenu as l,
4805
5273
  useMaterialBalance as m,
4806
5274
  commonUtils as n,
4807
- DocumentQuickFillModal as o,
4808
- DeviceConnector as p,
4809
- DocumentLoading as q,
4810
- MCDataUtil as r,
4811
- useOnlineFormActionButton as s,
4812
- useOnlineFormTransformField2Component as u
5275
+ DeviceConnector as o,
5276
+ DocumentLoading as p,
5277
+ DynamicQuickFillModal as q,
5278
+ FormTmplConfigController as r,
5279
+ MCDataUtil as s,
5280
+ useOnlineFormActionButton as t,
5281
+ useOnlineFormTransformField2Component as u,
5282
+ validate as v
4813
5283
  };