@gct-paas/excel 0.1.26 → 0.1.27
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.
- package/dist/{VueVideoPlayer-0DuOfiQX.js → VueVideoPlayer-D5r4RRnv.js} +2 -2
- package/dist/{agg-design-Bs7uvazc.js → agg-design-BVxNAUfK.js} +1 -1
- package/dist/{agg-props-Bp3BzB8p.js → agg-props-BM1V7-82.js} +1 -1
- package/dist/{agg-style-5rib-2BW.js → agg-style-bu1csor3.js} +1 -1
- package/dist/{align-editor-DQ8dFN7Z.js → align-editor-D2IrDyiX.js} +1 -1
- package/dist/{attach-fields-editor-C96vYS5i.js → attach-fields-editor-cbkBKnao.js} +2 -2
- package/dist/{barcode-design-GARKK2E6.js → barcode-design-BRx1bmVT.js} +2 -2
- package/dist/base/index.es.js +146 -139
- package/dist/{base-font-editor-D1Yhc2dM.js → base-font-editor-DvxGgHGz.js} +2 -2
- package/dist/{boolean-design-E8aTzvqE.js → boolean-design-bh0IRiJd.js} +2 -2
- package/dist/{boolean-props-DXxrp-m9.js → boolean-props-CblOGRwR.js} +3 -3
- package/dist/{boolean-style-CL0DlbC0.js → boolean-style-DwRYZG46.js} +4 -4
- package/dist/{cell-upload-Mt9EhaFR.js → cell-upload-C-xtn3eM.js} +1 -1
- package/dist/{date-range-editor-CWD3tYMA.js → date-range-editor-DgRj3qWq.js} +2 -2
- package/dist/{date-time-design-DxEvgEi8.js → date-time-design-CmzyZZ0f.js} +1 -1
- package/dist/{date-time-props-B5Xtc7-X.js → date-time-props-D2g7OYyD.js} +3 -3
- package/dist/{date-time-style-CH-mslF5.js → date-time-style-D1hsou32.js} +1 -1
- package/dist/{decimal-design-DvIA4NX0.js → decimal-design-mtrsEocu.js} +1 -1
- package/dist/{decimal-display-mode-DZwDd5fU.js → decimal-display-mode-DBBORdt8.js} +2 -2
- package/dist/{decimal-props-BKRzrJ-r.js → decimal-props-BAnCY6iG.js} +4 -4
- package/dist/{decimal-style-DMFs7IFs.js → decimal-style-B_3SjSrk.js} +1 -1
- package/dist/{default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-BLCWBDOv.js → default-value-editor.vue_vue_type_script_setup_true_name_default-value-editor_lang-CaXarLgm.js} +2 -2
- package/dist/{diagonal-design-COpzJE_o.js → diagonal-design-CcD7fvfW.js} +2 -2
- package/dist/{double-design-BTJtq1hk.js → double-design-7vcqNVyg.js} +1 -1
- package/dist/{double-props-Bq3vZziK.js → double-props-B-y0KH2n.js} +4 -4
- package/dist/{double-style-DiufxslF.js → double-style-CA5tNsrD.js} +1 -1
- package/dist/{dynamic-table-action-Dqp3OJDg.js → dynamic-table-action-C2GfKCbJ.js} +1354 -1070
- package/dist/{dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CvVlP70-.js → dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-Dti3Kjh8.js} +1522 -502
- package/dist/{edit.utils-CXmmCnxE-W27Whv1y.js → edit.utils-CXmmCnxE-Ca3Pb0IU.js} +1 -1
- package/dist/{enum-design-BcF4g87b.js → enum-design-QV-rTgR9.js} +2 -2
- package/dist/{enum-props-C7JjTMv4.js → enum-props-75ShzzCh.js} +3 -3
- package/dist/{enum-style-CyAkQvzE.js → enum-style-BMtWgRC6.js} +3 -3
- package/dist/excel.css +1047 -726
- package/dist/{exceljs.min-D-ILZl-Z.js → exceljs.min-0mQdhEhP.js} +2 -2
- package/dist/{expression-design-CjzPxio0.js → expression-design-E4gBR1RY.js} +1 -1
- package/dist/{expression-props-mAVBd5Lq.js → expression-props-BwPz0GJc.js} +1 -1
- package/dist/{expression-style-CrRd3CZN.js → expression-style-D7o1udLl.js} +1 -1
- package/dist/{file-design-BvSmEEHz.js → file-design-CY5qOoTr.js} +1 -1
- package/dist/{file-props-CmbLCylK.js → file-props-zXWQ1bVe.js} +2 -2
- package/dist/{file-style-ouUREdJB.js → file-style-BxiYD3KK.js} +1 -1
- package/dist/{font-editor-5O8-WS9U.js → font-editor-Dvzk8M-U.js} +3 -3
- package/dist/{image-design-D5Avl99X.js → image-design-BhK2hIpf.js} +1 -1
- package/dist/{image-design-DOdX4Ejf.js → image-design-lVRSbqr7.js} +2 -2
- package/dist/{image-props-DS7B2haQ.js → image-props-BzWQmFnm.js} +1 -1
- package/dist/{image-style-BdC16P3Z.js → image-style-COx37YQA.js} +1 -1
- package/dist/{index-B9bcnmUU.js → index--0Kpxacn.js} +1 -1
- package/dist/{index-B6YwjnNP.js → index-7I61fuwY.js} +1 -1
- package/dist/{index-COPdP22U.js → index-BKcbh7wy.js} +1 -1
- package/dist/{index-BA1e8Zw5.js → index-BKl3sdLV.js} +1 -1
- package/dist/{index-BqzGUi2w.js → index-BOJ1qa5y.js} +1 -1
- package/dist/{index-DZWPjTfD.js → index-BQkzdAys.js} +1 -1
- package/dist/{index-Ul5I5n2Y.js → index-BZUfZUe_.js} +1 -1
- package/dist/{index-B4uW2dJ0.js → index-BcFJ5NMo.js} +1 -1
- package/dist/{index-OD0V6QZx.js → index-BfFR4_sj.js} +4 -2
- package/dist/{index-mEVrSKb2.js → index-Bnw3rp6T.js} +2 -2
- package/dist/{index-DAVr0Puy.js → index-BxJDx07D.js} +1 -1
- package/dist/{index-DWlCnH_H.js → index-C3vFg5YC.js} +2 -2
- package/dist/{index-CO9M5kpu.js → index-C8YcRZdY.js} +1 -1
- package/dist/{index-BGwmxIrV.js → index-CLiI_jbj.js} +1 -1
- package/dist/{index-u0UnKD61.js → index-Cv8PAOND.js} +1 -1
- package/dist/{index--x-rjhUN.js → index-CvgNTIj3.js} +3398 -2814
- package/dist/{index-nDINH7fF.js → index-CvnUTiu5.js} +2 -2
- package/dist/{index-CF4GPHX_.js → index-D1eAo-Nu.js} +1 -1
- package/dist/{index-Bg7RbNAd.js → index-D4c8S3QX.js} +1 -1
- package/dist/{index-BP7lVop7.js → index-DJMQPKtC.js} +1 -1
- package/dist/{index-DeHhItHR.js → index-DQUYeRO2.js} +1 -1
- package/dist/{index-7Z0q-sUY.js → index-DX751NRk.js} +1 -1
- package/dist/{index-DjO3xXoL.js → index-D_EbV20_.js} +2 -2
- package/dist/{index-CMM4w3Dw.js → index-FsRMnSH6.js} +1 -1
- package/dist/{index-CqvvTfDm.js → index-JMdllXCQ.js} +1 -1
- package/dist/{index-CUDme4M_.js → index-LPi5gPDc.js} +2 -2
- package/dist/{index-tVnYGnyM.js → index-Xo3mSme0.js} +1 -1
- package/dist/{index-POh3kOtN.js → index-_sBfWkw5.js} +1 -1
- package/dist/{index-CZB6MFo2.js → index-gZDQm5ZQ.js} +1 -1
- package/dist/{index-Bs5CmUJ6.js → index-n08cOEu4.js} +1 -1
- package/dist/{index-DPFhljcW.js → index-sDAMzgHy.js} +2 -1
- package/dist/{index-upoyI1QX.js → index-uPWALfQF.js} +1 -1
- package/dist/{index-Bgz9h2Ur.js → index-xAiRicc_.js} +193 -79
- package/dist/index.es.js +44 -44
- package/dist/{integer-design-XoAOklHI.js → integer-design-B4_XsKZo.js} +1 -1
- package/dist/{integer-props-UG7rgL98.js → integer-props-C6PM1TRQ.js} +4 -4
- package/dist/{integer-style-BwF6P-1M.js → integer-style-BEQYgQr6.js} +1 -1
- package/dist/mb-render-Cuhqw431.js +252 -0
- package/dist/{number-input-ex-BUhgQIz_.js → number-input-ex-C-lDRF5x.js} +1 -1
- package/dist/{org-props-BYIR1Qja.js → org-props-COEjPBZu.js} +2 -2
- package/dist/{org-style-DXX3gSuh.js → org-style-BCAm4c-t.js} +1 -1
- package/dist/{pagination-design-BVFW-spw.js → pagination-design-BCbcTaoL.js} +2 -2
- package/dist/paper-widget-design-B1eAfVY6.js +4 -0
- package/dist/{qrcode-design-CoFoYXe2.js → qrcode-design-DsWOsTMb.js} +1 -1
- package/dist/{ref-autofill-editor-8-T3_HNa.js → ref-autofill-editor-M4SwZwAT.js} +2 -2
- package/dist/{ref-props-CkbU8Sr5.js → ref-props-z-4FJ63a.js} +3 -3
- package/dist/{ref-style-BUqCIl-S.js → ref-style-Cd4xxgki.js} +1 -1
- package/dist/{regex-editor-BAfv4Tt4.js → regex-editor-Clq3qEOM.js} +2 -2
- package/dist/{revo-grid.entry-RWcWTs8I.js → revo-grid.entry-mK396nD_.js} +1 -1
- package/dist/{revogr-attribution_7.entry-BCSuWj1U.js → revogr-attribution_7.entry-CVFYs2_S.js} +3 -3
- package/dist/{revogr-clipboard_3.entry-BTpzs_Rr.js → revogr-clipboard_3.entry-CXob_C6H.js} +2 -2
- package/dist/{revogr-data_4.entry-DYkSdHom.js → revogr-data_4.entry-DdIOstSg.js} +2 -2
- package/dist/{revogr-filter-panel.entry-DOqtLQay.js → revogr-filter-panel.entry-CbN2tKV5.js} +1 -1
- package/dist/{select-render-type-editor.vue_vue_type_script_setup_true_lang-D26X3WBX.js → select-render-type-editor.vue_vue_type_script_setup_true_lang-BRaJttUU.js} +2 -2
- package/dist/{serialnumber-design-Bx6oAxgA.js → serialnumber-design-lwuR-KrB.js} +1 -1
- package/dist/shared/index.es.js +26 -26
- package/dist/{signature-design-BYwB_lgz.js → signature-design-CWKOqjMe.js} +1 -1
- package/dist/{signature-props-SNM8PS89.js → signature-props-B4yndn4q.js} +3 -3
- package/dist/{signature-style-BqZ2DAS6.js → signature-style-5DImPCv-.js} +1 -1
- package/dist/{single-field-drop-BwCKh5bM.js → single-field-drop-C0IXAiGz.js} +2 -2
- package/dist/{size-editor-DUazmEj_.js → size-editor-DKIp_UFV.js} +1 -1
- package/dist/src/assets/svgs/table/index.d.ts +34 -0
- package/dist/src/domain/index.d.ts +1 -0
- package/dist/src/domain/table/business/check/check-table/index.d.ts +1 -0
- package/dist/src/domain/table/business/check/check-table/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/material/material-balance/index.d.ts +1 -0
- package/dist/src/domain/table/business/material/material-balance/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/material/material-consume/index.d.ts +1 -0
- package/dist/src/domain/table/business/material/material-consume/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/preprocess/pretreatment-list/index.d.ts +1 -0
- package/dist/src/domain/table/business/preprocess/pretreatment-list/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/sterilize/entrust-steril-batch-list/index.d.ts +1 -0
- package/dist/src/domain/table/business/sterilize/entrust-steril-batch-list/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/warehouse/warehouse-allocate/index.d.ts +1 -0
- package/dist/src/domain/table/business/warehouse/warehouse-allocate/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/warehouse/warehouse-in/index.d.ts +1 -0
- package/dist/src/domain/table/business/warehouse/warehouse-in/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/warehouse/warehouse-in-out/index.d.ts +1 -0
- package/dist/src/domain/table/business/warehouse/warehouse-in-out/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/warehouse/warehouse-inventory/index.d.ts +1 -0
- package/dist/src/domain/table/business/warehouse/warehouse-inventory/profile/index.d.ts +3 -0
- package/dist/src/domain/table/business/warehouse/warehouse-out/index.d.ts +1 -0
- package/dist/src/domain/table/business/warehouse/warehouse-out/profile/index.d.ts +3 -0
- package/dist/src/domain/table/data/dynamic-table/index.d.ts +1 -0
- package/dist/src/domain/table/data/dynamic-table/profile/index.d.ts +3 -0
- package/dist/src/domain/table/data/fixed-table/index.d.ts +1 -0
- package/dist/src/domain/table/data/fixed-table/profile/index.d.ts +3 -0
- package/dist/src/domain/table/data/two-d-table/index.d.ts +1 -0
- package/dist/src/domain/table/data/two-d-table/profile/index.d.ts +3 -0
- package/dist/src/domain/table/design/create-subtable.d.ts +14 -0
- package/dist/src/domain/table/design/index.d.ts +6 -0
- package/dist/src/domain/table/design/label.d.ts +3 -0
- package/dist/src/domain/table/design/panel-features.d.ts +16 -0
- package/dist/src/domain/table/design/panel-type.d.ts +6 -0
- package/dist/src/domain/table/design/ribbon-options.d.ts +38 -0
- package/dist/src/domain/table/design/sub-model-matcher.d.ts +10 -0
- package/dist/src/domain/table/index.d.ts +8 -0
- package/dist/src/domain/table/registry.d.ts +27 -0
- package/dist/src/domain/table/types.d.ts +78 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/nocode-base/src/components/document-quick-fill/quick-fill.util.d.ts +0 -1
- package/dist/src/nocode-base/src/components/document-sub-table-action/type.d.ts +3 -1
- package/dist/src/nocode-base/src/constant/index.d.ts +9 -1
- package/dist/src/nocode-base/src/hooks/device-link/controller.d.ts +6 -0
- package/dist/src/nocode-base/src/hooks/device-link/types.d.ts +10 -0
- package/dist/src/nocode-base/src/hooks/form-tmpl-config/form-tmpl-config-controller.d.ts +16 -0
- package/dist/src/nocode-base/src/hooks/material-consume/bom-validator.d.ts +140 -18
- package/dist/src/nocode-base/src/hooks/material-consume/index.d.ts +1 -0
- package/dist/src/nocode-base/src/hooks/material-consume/material-consume-group-merge.d.ts +20 -0
- package/dist/src/nocode-base/src/hooks/material-consume/material-consume-table-controller.d.ts +50 -8
- package/dist/src/nocode-base/src/hooks/material-consume/mc-render.d.ts +8 -0
- package/dist/src/nocode-base/src/hooks/material-consume/product-id-query.d.ts +31 -0
- package/dist/src/nocode-base/src/hooks/material-consume/scan-fill.d.ts +10 -0
- package/dist/src/nocode-base/src/hooks/material-consume/scan-validator.d.ts +192 -0
- package/dist/src/nocode-base/src/hooks/material-consume/service.d.ts +2 -0
- package/dist/src/nocode-base/src/hooks/material-consume/types.d.ts +9 -0
- package/dist/src/nocode-base/src/hooks/useDependency.d.ts +2 -3
- package/dist/src/nocode-base/src/interface/render.d.ts +2 -1
- package/dist/src/nocode-base/src/types/fields/i-trace.d.ts +4 -0
- package/dist/src/nocode-base/src/types/render/mc-render.d.ts +8 -0
- package/dist/src/nocode-base/src/types/widgets/i-paper.d.ts +2 -0
- package/dist/src/nocode-base/src/types/widgets/i-serialnumber.d.ts +4 -0
- package/dist/src/nocode-web-render/src/render/index.d.ts +2 -1
- package/dist/src/nocode-web-render/src/render/sub-table/common/multi-rows-modal.vue.d.ts +15 -0
- package/dist/src/nocode-web-render/src/render/sub-table/material-consume/mc-web-render.d.ts +4 -0
- package/dist/src/online-form/src/components/device/device-select.vue.d.ts +1 -1
- package/dist/src/online-form/src/views/__cell_widgets__/common/assoc-filter-editor/assoc-filter.util.d.ts +1 -1
- package/dist/src/online-form/src/views/designer/constants/index.d.ts +1 -0
- package/dist/src/online-form/src/views/designer/enums/index.d.ts +4 -1
- package/dist/src/online-form/src/views/designer/hooks/useAllSpreadSheets.d.ts +40 -0
- package/dist/src/online-form/src/views/designer/hooks/useSpreadSheet.d.ts +55 -0
- package/dist/src/online-form/src/views/designer/modules/panel/panel-data-init-config/common/add-ipaas/parameter-struct/json-expression-editor.vue.d.ts +1 -1
- package/dist/src/online-form/src/views/designer/modules/panel/panel-tmpl-config/ai-tmpl/ai-tmpl-card.vue.d.ts +12 -0
- package/dist/src/online-form/src/views/designer/modules/panel/panel-tmpl-config/ai-tmpl/ai-tmpl-editor.vue.d.ts +19 -2
- package/dist/src/online-form/src/views/designer/modules/panel/panel-tmpl-config/ai-tmpl/identify-param-card.vue.d.ts +10 -0
- package/dist/src/online-form/src/views/designer/modules/panel/sub-table/comps/repeating-sub-table-config.vue.d.ts +2 -0
- package/dist/src/online-form/src/views/designer/modules/panel/sub-table/comps/sub-table-panel-shell.vue.d.ts +24 -0
- package/dist/src/online-form/src/views/designer/modules/panel/sub-table/comps/use-dynamic-sub-table-panel.d.ts +1529 -0
- package/dist/src/online-form/src/views/designer/modules/panel/{material-consumption → sub-table/material-consumption}/bom-entry-editor.vue.d.ts +1 -1
- package/dist/src/online-form/src/views/designer/modules/panel/{material-consumption → sub-table/material-consumption}/bom-modal.vue.d.ts +1 -1
- package/dist/src/online-form/src/views/designer/modules/panel/{panel-check-table → sub-table/panel-check-table}/select-check-ds-modal.vue.d.ts +1 -1
- package/dist/src/online-form/src/views/designer/modules/toolkit/model-field/add-field-btn.vue.d.ts +2 -0
- package/dist/src/online-form/src/views/inline-cell/use-inline-icon-catalog.d.ts +5 -1
- package/dist/src/shared/components/Scrollbar/src/Scrollbar.vue.d.ts +1 -1
- package/dist/src/shared/components/Signature/logic/index.d.ts +4 -0
- package/dist/src/shared/enum/field-type.d.ts +7 -1
- package/dist/src/shared/enum/index.d.ts +4 -2
- package/dist/src/shared/enum/online-form.d.ts +5 -1
- package/dist/{text-design-Wz4yRq1g.js → text-design-Buv9yt9S.js} +2 -2
- package/dist/{text-design-DN3i2RFW.js → text-design-Cvkrx7Ay.js} +2 -2
- package/dist/{text-props-B00HIRMS.js → text-props-CkVBSTXP.js} +4 -5
- package/dist/{text-style-fu30umvT.js → text-style-ByQS_L5l.js} +1 -1
- package/dist/{throttle-Cpk1LoGk-Fx3LWSEd.js → throttle-Cpk1LoGk-G-XhI3O-.js} +1 -1
- package/dist/{timediff-design-B-4vNIoK.js → timediff-design-DDoTcrkV.js} +1 -1
- package/dist/{trace-design-DtHxTSsv.js → trace-design-BCzk8EyB.js} +2 -2
- package/dist/{trace-props-Rg7mqGt_.js → trace-props-BL3L-jup.js} +60 -48
- package/dist/{trace-style-mCgCCGMz.js → trace-style-BlpFFb55.js} +1 -1
- package/dist/{user-props-DonrdBsi.js → user-props-B-vYJaSq.js} +2 -2
- package/dist/{user-style-CumTeI-A.js → user-style-CbvEdi3Y.js} +1 -1
- package/dist/{value-editor.vue_vue_type_style_index_0_lang-DRQFluA7.js → value-editor.vue_vue_type_style_index_0_lang-s8AB671m.js} +2 -2
- package/dist/{version-select-DZOffw2U.js → version-select-CgXKULuu.js} +1 -1
- package/dist/web-render/index.es.js +6 -5
- package/dist/{widget-barcode-Djaec1i2.js → widget-barcode-DSSIOMEn.js} +4 -4
- package/dist/{widget-diagonal-Dw5Q9iRl.js → widget-diagonal-Ce7X4BVB.js} +3 -3
- package/dist/{widget-image-Dq6zxwLm.js → widget-image-B07sa8Hv.js} +5 -5
- package/dist/{widget-line-Csab5i9z.js → widget-line-gfOAwJ73.js} +2 -2
- package/dist/{widget-pagination-BmsUSsKm.js → widget-pagination-DQT0Hcnv.js} +5 -5
- package/dist/{widget-power-DtPCy7UV.js → widget-power-DB41Q7HC.js} +3 -3
- package/dist/{widget-qrcode-BAMbK-3b.js → widget-qrcode-DPMDGtjU.js} +3 -3
- package/dist/{widget-rangelimit-Bx9qfojs.js → widget-rangelimit-BpxO9qfT.js} +3 -3
- package/dist/{widget-serialnumber-Bz6EQZR_.js → widget-serialnumber-CM-Lm2mW.js} +1 -1
- package/dist/{widget-text-CkXtxU3r.js → widget-text-DnHhMcYh.js} +5 -5
- package/dist/{widget-timediff-wqTd7OZs.js → widget-timediff-CHA6cLPN.js} +2 -2
- package/package.json +8 -7
- package/dist/mb-render-CRA1gDau.js +0 -449
- package/dist/paper-widget-design-DFOElS47.js +0 -4
- package/dist/src/online-form/src/views/designer/modules/panel/panel-material-balance-table.vue.d.ts +0 -2
- package/dist/src/online-form/src/views/designer/modules/panel/panel-material-stocktake-table.vue.d.ts +0 -2
- package/dist/src/online-form/src/views/designer/modules/panel/panel-pretreatment-table.vue.d.ts +0 -2
- package/dist/src/online-form/src/views/designer/modules/panel/panel-sterilize-batch-table.vue.d.ts +0 -2
- package/dist/src/online-form/src/views/designer/modules/panel/panel-tmpl-config/common/add-tmpl-btn.vue.d.ts +0 -7
- /package/dist/src/online-form/src/views/designer/modules/panel/{material-consumption → sub-table/material-consumption}/edit-parse-rule.vue.d.ts +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{material-consumption → sub-table/material-consumption}/panel-material-consumption-table.vue.d.ts +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{material-consumption → sub-table/material-consumption}/translate-span.vue.d.ts +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{material-consumption → sub-table/material-consumption}/use-product-translate.d.ts +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{panel-check-table → sub-table/panel-check-table}/add-ds-btn.vue.d.ts +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{panel-check-table → sub-table/panel-check-table}/right-list.vue.d.ts +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{panel-check-table.vue.d.ts → sub-table/panel-check-table.vue.d.ts} +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{panel-data-group-2d.vue.d.ts → sub-table/panel-data-group-2d.vue.d.ts} +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{panel-data-group.vue.d.ts → sub-table/panel-data-group.vue.d.ts} +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{panel-fixed-table.vue.d.ts → sub-table/panel-fixed-table.vue.d.ts} +0 -0
- /package/dist/src/online-form/src/views/designer/modules/panel/{panel-dynamic-table.vue.d.ts → sub-table/panel-repeating-sub-table.vue.d.ts} +0 -0
|
@@ -1,38 +1,53 @@
|
|
|
1
1
|
import { IBomEntry, IMaterialConsumeData } from './types';
|
|
2
|
-
|
|
2
|
+
/** 扫码校验通过后抛给填充层的完整计划(下标相对入参 arr) */
|
|
3
|
+
export interface ScanFillPlan {
|
|
4
|
+
target: BomEntryValidator;
|
|
5
|
+
current: BomEntryValidator;
|
|
6
|
+
needSwitch: boolean;
|
|
7
|
+
needInsert: boolean;
|
|
8
|
+
/** 建组时空占位插入下标;无需建组时为 -1 */
|
|
9
|
+
groupInsertIndex: number;
|
|
10
|
+
memberIndexes: number[];
|
|
11
|
+
emptyProductIndexes: number[];
|
|
12
|
+
emptyLotIndexes: number[];
|
|
13
|
+
/** 组内再新增一行的下标 */
|
|
14
|
+
appendIndex: number;
|
|
15
|
+
}
|
|
3
16
|
export declare class BomEntryValidator {
|
|
4
17
|
bomEntry: IBomEntry;
|
|
5
18
|
/** 是否启用顺序投料 */
|
|
6
19
|
enableSequenceLoading: boolean;
|
|
7
|
-
/**
|
|
8
|
-
|
|
20
|
+
/** 批次/生产数量读取函数 */
|
|
21
|
+
private getMaterialNoNum;
|
|
9
22
|
/** 历史填报数据 */
|
|
10
23
|
historyData: IMaterialConsumeData[];
|
|
11
24
|
/** 表单实例的批次号 */
|
|
12
25
|
mainMaterialNo: string;
|
|
13
26
|
/** 物料消耗模式 */
|
|
14
|
-
|
|
27
|
+
noBomMode: boolean;
|
|
15
28
|
/** 该明细使用到的产品的id集合 */
|
|
16
29
|
productIds: string[];
|
|
17
30
|
/** 物料和code的映射 */
|
|
18
31
|
productCodes: Record<string, string>;
|
|
19
32
|
/** 历史数据中已经消耗的 */
|
|
20
33
|
hasConsumed: number;
|
|
21
|
-
/** 需求总量 */
|
|
22
|
-
total: number;
|
|
23
34
|
/** 剩于可消耗数量 */
|
|
24
35
|
get remainingNum(): number;
|
|
36
|
+
/** 批次/生产数量(用时读取,避免构造快照过期) */
|
|
37
|
+
get materialNoNum(): number;
|
|
38
|
+
/** 需求总量 = 数量倍数 × BOM 单位用量 */
|
|
39
|
+
get total(): number;
|
|
25
40
|
constructor(bomEntry: IBomEntry,
|
|
26
41
|
/** 是否启用顺序投料 */
|
|
27
42
|
enableSequenceLoading: boolean,
|
|
28
|
-
/**
|
|
29
|
-
|
|
43
|
+
/** 批次/生产数量读取函数 */
|
|
44
|
+
getMaterialNoNum: () => number,
|
|
30
45
|
/** 历史填报数据 */
|
|
31
46
|
historyData: IMaterialConsumeData[],
|
|
32
47
|
/** 表单实例的批次号 */
|
|
33
48
|
mainMaterialNo: string,
|
|
34
49
|
/** 物料消耗模式 */
|
|
35
|
-
|
|
50
|
+
noBomMode: boolean);
|
|
36
51
|
/**
|
|
37
52
|
* 翻译物料的code
|
|
38
53
|
* @param productId
|
|
@@ -45,8 +60,29 @@ export declare class BomEntryValidator {
|
|
|
45
60
|
* @return {*}
|
|
46
61
|
*/
|
|
47
62
|
filterGroupData(arr: IMaterialConsumeData[]): IMaterialConsumeData[];
|
|
63
|
+
/** 行是否属于本 BOM 组(优先 bom_entry_id_,避免跨组 product_id_ 误判) */
|
|
64
|
+
isRowInGroup(row: IMaterialConsumeData): boolean;
|
|
65
|
+
/** 组内已选中的物料(整批替代;不排除当前行) */
|
|
66
|
+
getGroupExistingProductId(tableData: IMaterialConsumeData[]): string | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* 本组 product_id_ 下拉可选范围
|
|
69
|
+
* - 未开替代料:仅主料
|
|
70
|
+
* - 整批替代:组内已有 → 锁定该物料;否则主料+替代料
|
|
71
|
+
* - 混用等:主料+替代料
|
|
72
|
+
*/
|
|
73
|
+
getSelectableProductIds(tableData: IMaterialConsumeData[]): string[];
|
|
48
74
|
validateSubstitute(arr: IMaterialConsumeData[]): void;
|
|
49
75
|
validateLotMixing(arr: IMaterialConsumeData[]): void;
|
|
76
|
+
/**
|
|
77
|
+
* 通用校验 3(带即将写入的行):组内已有行 + row 的批次去重后,是否超过混批次数。
|
|
78
|
+
* - 非按批次 / 未开混批校验 / row 不属于本组 → 直接通过
|
|
79
|
+
* - 排除空物料;空批次不计入
|
|
80
|
+
*/
|
|
81
|
+
validateLotMixingWithRow(row: IMaterialConsumeData, arr: IMaterialConsumeData[]): void;
|
|
82
|
+
/** 指定物料批次:material_no_ 须在 specified_material_entries_ 的 name_ 范围内 */
|
|
83
|
+
validateSpecifiedMaterialNo(row: IMaterialConsumeData): void;
|
|
84
|
+
/** 整组指定批次校验:组内每一行有批次值的都检查 */
|
|
85
|
+
validateSpecifiedMaterialNoForGroup(arr: IMaterialConsumeData[]): void;
|
|
50
86
|
/**
|
|
51
87
|
* 校验数量
|
|
52
88
|
* @param arr
|
|
@@ -73,6 +109,12 @@ export declare class BomEntryValidator {
|
|
|
73
109
|
max: any;
|
|
74
110
|
min: any;
|
|
75
111
|
}>;
|
|
112
|
+
/**
|
|
113
|
+
* 通用校验 5:本组上料数量是否满足 qty_validation_rule_。
|
|
114
|
+
* 前置假设:必填、替代料、混批等已由调用方完成。
|
|
115
|
+
* @param sequential 是否按顺序上料;eq 规则在非顺序模式下允许少上
|
|
116
|
+
*/
|
|
117
|
+
validateGroupQty(arr: IMaterialConsumeData[], sequential?: boolean, groupNo?: number): Promise<void>;
|
|
76
118
|
/**
|
|
77
119
|
* 按顺序投料用
|
|
78
120
|
* 检查数据中的当前明细的填报是否已经完成
|
|
@@ -84,26 +126,28 @@ export declare class BomEntriesValidator {
|
|
|
84
126
|
entries: IBomEntry[];
|
|
85
127
|
/** 是否启用顺序投料 */
|
|
86
128
|
enableSequenceLoading: boolean;
|
|
87
|
-
/**
|
|
88
|
-
|
|
129
|
+
/** 批次/生产数量读取函数 */
|
|
130
|
+
getMaterialNoNum: () => number;
|
|
89
131
|
/** 历史填报数据 */
|
|
90
132
|
historyData: IMaterialConsumeData[];
|
|
91
133
|
/** 表单实例的批次号 */
|
|
92
134
|
mainMaterialNo: string;
|
|
93
135
|
/** 物料消耗模式 */
|
|
94
|
-
|
|
136
|
+
noBomMode: boolean;
|
|
95
137
|
bomEntryValidators: BomEntryValidator[];
|
|
96
138
|
constructor(entries: IBomEntry[],
|
|
97
139
|
/** 是否启用顺序投料 */
|
|
98
140
|
enableSequenceLoading: boolean,
|
|
99
|
-
/**
|
|
100
|
-
|
|
141
|
+
/** 批次/生产数量读取函数 */
|
|
142
|
+
getMaterialNoNum: () => number,
|
|
101
143
|
/** 历史填报数据 */
|
|
102
144
|
historyData: IMaterialConsumeData[],
|
|
103
145
|
/** 表单实例的批次号 */
|
|
104
146
|
mainMaterialNo: string,
|
|
105
147
|
/** 物料消耗模式 */
|
|
106
|
-
|
|
148
|
+
noBomMode: boolean);
|
|
149
|
+
/** 当前批次/生产数量 */
|
|
150
|
+
get materialNoNum(): number;
|
|
107
151
|
/**
|
|
108
152
|
* 翻译物料的code
|
|
109
153
|
* @param productId
|
|
@@ -116,13 +160,70 @@ export declare class BomEntriesValidator {
|
|
|
116
160
|
* @return {*}
|
|
117
161
|
*/
|
|
118
162
|
findUtilByProductId(productId: string): BomEntryValidator | undefined;
|
|
163
|
+
/** 编辑行所属组 id;空物料且无 bom_entry_id_ 时返回 null */
|
|
164
|
+
private getRowGroupId;
|
|
165
|
+
/**
|
|
166
|
+
* 是否有正在编辑的组。
|
|
167
|
+
* 一组可多行同时 !is_confirmed_;正常应只有一组。
|
|
168
|
+
* @returns 有编辑行且只落在一组 → true;无编辑行 → false;跨多组编辑 → 抛错
|
|
169
|
+
*/
|
|
170
|
+
hasEditingGroup(arr: IMaterialConsumeData[]): boolean;
|
|
171
|
+
/** 取当前唯一编辑组的 BOM 明细 id;没有则 undefined */
|
|
172
|
+
getEditingGroupId(arr: IMaterialConsumeData[]): string | undefined;
|
|
173
|
+
/**
|
|
174
|
+
* 行 → BOM 明细在 bomEntryValidators 中的下标,找不到返回 -1
|
|
175
|
+
*/
|
|
176
|
+
resolveEntryIndex(row: IMaterialConsumeData): number;
|
|
177
|
+
/**
|
|
178
|
+
* 行所属组在序号列中的 groupOrderIndex(0-based;-1 未绑 BOM 组)
|
|
179
|
+
* 与 material-consume-table 序号列逻辑一致
|
|
180
|
+
*/
|
|
181
|
+
resolveGroupOrderIndex(row: IMaterialConsumeData, arr: IMaterialConsumeData[]): number;
|
|
182
|
+
/** 已知 BomEntryValidator 时算 groupOrderIndex */
|
|
183
|
+
resolveGroupOrderIndexByUtil(util: BomEntryValidator, arr: IMaterialConsumeData[]): number;
|
|
184
|
+
/** 非顺序上料:BOM 组在表中首次出现的顺序(0-based) */
|
|
185
|
+
private resolveEntryOrderInTable;
|
|
186
|
+
/**
|
|
187
|
+
* 定位顺序上料时的当前编辑组对应 BOM 明细。
|
|
188
|
+
* 编辑行无物料时,用前后组夹出范围,取 (prev, next) 开区间起点。
|
|
189
|
+
*/
|
|
190
|
+
findSequenceBomEntry(arr: IMaterialConsumeData[]): BomEntryValidator | undefined;
|
|
119
191
|
/**
|
|
120
192
|
* 检验是否符合顺序投料的顺序要求
|
|
121
193
|
* @param row 当前编辑的行
|
|
122
194
|
* @param arr 所有的数据
|
|
123
195
|
* @return {*}
|
|
124
196
|
*/
|
|
125
|
-
validateSequenceLoading(row
|
|
197
|
+
validateSequenceLoading(row: IMaterialConsumeData, arr: IMaterialConsumeData[]): Promise<void>;
|
|
198
|
+
/** 表中是否已有该 BOM 组(有物料行或带 bom_entry_id_ 的空行) */
|
|
199
|
+
private groupExistsInTable;
|
|
200
|
+
/**
|
|
201
|
+
* 按 BOM 顺序计算 target 组应插入的下标:
|
|
202
|
+
* 插到表中「第一个 BOM 下标更大的组」之前;没有则表末。
|
|
203
|
+
*/
|
|
204
|
+
private resolveBomOrderInsertIndex;
|
|
205
|
+
/**
|
|
206
|
+
* 组装扫码填充计划:切组/建组标记 + 相对 arr 的下标。
|
|
207
|
+
* needInsert 时优先填 groupInsertIndex 占位行,勿再直接用 member/append 下标(会错位)。
|
|
208
|
+
*/
|
|
209
|
+
private buildScanFillPlan;
|
|
210
|
+
/**
|
|
211
|
+
* 通用校验 2:物料是否允许写入目标组(不改动原 validateSubstitute)
|
|
212
|
+
*/
|
|
213
|
+
private assertGroupSubstitute;
|
|
214
|
+
/**
|
|
215
|
+
* 扫码定位目标组 + 通用校验 2,返回填充计划(切组/建组/下标)。
|
|
216
|
+
* 不改表数据。
|
|
217
|
+
*/
|
|
218
|
+
validateSequenceScan(row: IMaterialConsumeData, arr: IMaterialConsumeData[]): ScanFillPlan;
|
|
219
|
+
/**
|
|
220
|
+
* 单组整组校验(提交编辑态组 / 切组前复用)
|
|
221
|
+
*/
|
|
222
|
+
validateGroup(arr: IMaterialConsumeData[], util: BomEntryValidator): Promise<void>;
|
|
223
|
+
/**
|
|
224
|
+
* 切组前校验当前编辑组:BOM 内 + 必填、有效期、替代料、混批、数量校验
|
|
225
|
+
*/
|
|
226
|
+
validateCurrentGroupForSwitch(arr: IMaterialConsumeData[], current: BomEntryValidator): Promise<void>;
|
|
126
227
|
/**
|
|
127
228
|
* 校验物料是否在bom里被使用
|
|
128
229
|
* @param row 单行的数据
|
|
@@ -143,6 +244,10 @@ export declare class BomEntriesValidator {
|
|
|
143
244
|
* @param arr
|
|
144
245
|
*/
|
|
145
246
|
validateLotMixing(arr: IMaterialConsumeData[]): void;
|
|
247
|
+
/**
|
|
248
|
+
* 通用校验 3(扫码/写入前):用 row + 表内同行组数据对比混批次数,不改动原 validateLotMixing
|
|
249
|
+
*/
|
|
250
|
+
validateLotMixingWithRow(row: IMaterialConsumeData, arr: IMaterialConsumeData[]): void;
|
|
146
251
|
/**
|
|
147
252
|
* 校验数量
|
|
148
253
|
* @param arr
|
|
@@ -159,10 +264,23 @@ export declare class BomEntriesValidator {
|
|
|
159
264
|
*/
|
|
160
265
|
validate(arr: IMaterialConsumeData[]): Promise<void>;
|
|
161
266
|
/**
|
|
162
|
-
*
|
|
267
|
+
* 检查扫描数据是否可以插入,通过后返回填充计划(记录模式无 plan)
|
|
268
|
+
*/
|
|
269
|
+
validateScanCanInsert(row: IMaterialConsumeData, arr: IMaterialConsumeData[]): Promise<ScanFillPlan | undefined>;
|
|
270
|
+
/**
|
|
271
|
+
* 校验当前编辑行的数据
|
|
163
272
|
* @param arr
|
|
273
|
+
* @returns
|
|
274
|
+
*/
|
|
275
|
+
validateEditRow(arr: IMaterialConsumeData[]): Promise<void>;
|
|
276
|
+
/**
|
|
277
|
+
* 顺序上料提交:表中最后一组之前,必须上料组不能缺失(仅结构/顺序,不校验数量)
|
|
278
|
+
*/
|
|
279
|
+
private assertSubmitSequenceOrder;
|
|
280
|
+
/**
|
|
281
|
+
* 提交整表校验:必须上料组须存在;顺序上料校验组序;表中存在的组走整组校验(不含库存)
|
|
164
282
|
*/
|
|
165
|
-
|
|
283
|
+
validateAllRows(arr: IMaterialConsumeData[]): Promise<void>;
|
|
166
284
|
/**
|
|
167
285
|
* 把扫描数据按情况插入到数组的位置,返回新数组
|
|
168
286
|
* @param row
|
|
@@ -175,3 +293,7 @@ export declare class BomEntriesValidator {
|
|
|
175
293
|
*/
|
|
176
294
|
getAllMaterialIds(): (string | undefined)[];
|
|
177
295
|
}
|
|
296
|
+
/** 行是否属于指定 BOM 组(未 deleted_,且 product_id_ 或 bom_entry_id_ 匹配) */
|
|
297
|
+
export declare function isRowInBomGroup(row: IMaterialConsumeData, util: BomEntryValidator): boolean;
|
|
298
|
+
/** 设置整组编辑态:editing=true → is_confirmed_=false */
|
|
299
|
+
export declare function setGroupEditState(table: IMaterialConsumeData[], util: BomEntryValidator, editing: boolean): void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ITd } from '../../types';
|
|
2
|
+
import { BomEntriesValidator } from './bom-validator';
|
|
3
|
+
import { IMaterialConsumeData } from './types';
|
|
4
|
+
/** 按组合并的组级只读字段(不含 qty_) */
|
|
5
|
+
export declare const GROUP_MERGE_FIELDS: Set<keyof IMaterialConsumeData>;
|
|
6
|
+
/** 是否为按组合并列:序号组件 + 组级字段 */
|
|
7
|
+
export declare function isGroupMergeCell(tdInfo: ITd): boolean;
|
|
8
|
+
/** 连续相同 key 的行属于同一合并组 */
|
|
9
|
+
export declare function getGroupMergeKey(row: IMaterialConsumeData, validator: BomEntriesValidator): string;
|
|
10
|
+
/**
|
|
11
|
+
* 当前页可见行的组 rowspan 计划
|
|
12
|
+
* - spans[i] > 1:组首行,值为 rowspan
|
|
13
|
+
* - spans[i] === 1:单行组,正常渲染
|
|
14
|
+
* - spans[i] === 0:组内后续行,跳过该列 td
|
|
15
|
+
*/
|
|
16
|
+
export declare function calcGroupRowSpans(rows: IMaterialConsumeData[], validator: BomEntriesValidator): number[];
|
|
17
|
+
/** 计算某一 BOM 组的总上料数量 */
|
|
18
|
+
export declare function calcGroupQtyConsumedTotal(entryIdx: number, tableData: IMaterialConsumeData[], validator: BomEntriesValidator): number;
|
|
19
|
+
/** 回写全表 qty_consumed_total_(组内每行写相同值,便于提交) */
|
|
20
|
+
export declare function syncGroupQtyConsumedTotals(tableData: IMaterialConsumeData[], validator: BomEntriesValidator): void;
|
package/dist/src/nocode-base/src/hooks/material-consume/material-consume-table-controller.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { FormTmplBomController } from './tmpl-bom-controller';
|
|
|
3
3
|
import { Ref } from 'vue';
|
|
4
4
|
import { BomEntriesValidator } from './bom-validator';
|
|
5
5
|
import { ISubTable, ParseRuleProps } from '../../types';
|
|
6
|
-
import {
|
|
6
|
+
import { ScanParamType, IUnitConversionRule } from '../../types/common/base';
|
|
7
7
|
import { FormModelController } from '../form-model/form-model-controller';
|
|
8
8
|
import { MaterialConsumptionPatternEnum } from '../../constant';
|
|
9
9
|
export declare class MCDataUtil {
|
|
@@ -62,8 +62,12 @@ export declare class MaterialConsumeTableController {
|
|
|
62
62
|
unitConversionRules: IUnitConversionRule[];
|
|
63
63
|
/** 主表 formState(由组件 setup 注入),用于读取主表字段值 */
|
|
64
64
|
mainFormState: Ref<any>;
|
|
65
|
-
/**
|
|
66
|
-
|
|
65
|
+
/** 表单数据状态(由组件 setup 注入):未填报 / STASH / SUBMIT */
|
|
66
|
+
dataStatus?: string;
|
|
67
|
+
/** 表单是否已暂存或提交(已处理过则不再跑初始化) */
|
|
68
|
+
get isDataProcessed(): boolean;
|
|
69
|
+
/** 批次数量或生产数量 */
|
|
70
|
+
get materialNoNum(): any;
|
|
67
71
|
/** 物料消耗模式(自身没有配置的话取环境的默认值) */
|
|
68
72
|
get mcPattern(): MaterialConsumptionPatternEnum;
|
|
69
73
|
/**
|
|
@@ -122,6 +126,11 @@ export declare class MaterialConsumeTableController {
|
|
|
122
126
|
* 根据bom明细构造子表数据(初始化时)
|
|
123
127
|
*/
|
|
124
128
|
calcFormState(): IMaterialConsumeData[] | undefined;
|
|
129
|
+
/**
|
|
130
|
+
* 未填报时初始化消耗表行数据
|
|
131
|
+
* @param defaultData 子表行默认值(含工序等)
|
|
132
|
+
*/
|
|
133
|
+
initTableData(defaultData?: Record<string, any>): void;
|
|
125
134
|
/**
|
|
126
135
|
* 根据数据计算需要禁用的字段
|
|
127
136
|
* @param row
|
|
@@ -135,17 +144,34 @@ export declare class MaterialConsumeTableController {
|
|
|
135
144
|
getProductQuery(): {
|
|
136
145
|
'id_.in': (string | undefined)[];
|
|
137
146
|
} | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* 行级 product_id_ / material_no_ 查询共用入参
|
|
149
|
+
*/
|
|
150
|
+
private buildProductQueryOptions;
|
|
151
|
+
/**
|
|
152
|
+
* 行级 product_id_ 下拉过滤(覆盖全局 id_.in)
|
|
153
|
+
*/
|
|
154
|
+
getProductQueryForRow(row: IMaterialConsumeData, rowIndex?: number): import('./product-id-query').ProductIdQuery | undefined;
|
|
155
|
+
/**
|
|
156
|
+
* 行级 material_no_ 批次过滤:有物料按物料;无物料与 product_id_ 可选范围一致
|
|
157
|
+
*/
|
|
158
|
+
getMaterialNoQueryForRow(row: IMaterialConsumeData, rowIndex?: number): import('./product-id-query').MaterialNoQuery;
|
|
138
159
|
/**
|
|
139
160
|
* 是否是第一行且物料是空行
|
|
140
161
|
* @return {*}
|
|
141
162
|
*/
|
|
142
163
|
isFirstBlankRow(): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* 是否有正在编辑的组。
|
|
166
|
+
* 一组可多行同时为编辑态;同时只能有一组处于编辑态。
|
|
167
|
+
*/
|
|
168
|
+
hasEditingGroup(showMessage?: boolean): boolean;
|
|
143
169
|
/**
|
|
144
170
|
* 解析扫码的数据
|
|
145
171
|
* 并判断是否能存入表中,返回对象则表示可以存入
|
|
146
172
|
* @param str
|
|
147
173
|
*/
|
|
148
|
-
protected parseScanStr(
|
|
174
|
+
protected parseScanStr(data: any, transformedData: any): Promise<void>;
|
|
149
175
|
/** 扫描是否已经打开 */
|
|
150
176
|
isScanOpen: boolean;
|
|
151
177
|
/**
|
|
@@ -170,9 +196,17 @@ export declare class MaterialConsumeTableController {
|
|
|
170
196
|
formModelController: FormModelController;
|
|
171
197
|
unitConversionRules?: IUnitConversionRule[];
|
|
172
198
|
mainFormState?: Ref<any>;
|
|
199
|
+
/** 表单 dataStatus,未填报才允许初始化行数据 */
|
|
200
|
+
dataStatus?: string;
|
|
201
|
+
/** 子表行默认值 */
|
|
202
|
+
defaultRowData?: Record<string, any>;
|
|
173
203
|
}): Promise<void>;
|
|
204
|
+
/**
|
|
205
|
+
* 按当前 materialNoNum 回写各行 qty_required_(校验侧 total 已通过 getter 实时读取)
|
|
206
|
+
*/
|
|
207
|
+
syncQtyRequiredFromBom(): void;
|
|
174
208
|
/** 校验有效期 */
|
|
175
|
-
validateExpiration(row:
|
|
209
|
+
validateExpiration(row: any): void;
|
|
176
210
|
/**
|
|
177
211
|
* 单位转化规则钩子
|
|
178
212
|
* 触发时机:扫码插入自动确认、手动点确认按钮(均汇聚到 confirm)
|
|
@@ -212,15 +246,23 @@ export declare class MaterialConsumeTableController {
|
|
|
212
246
|
*/
|
|
213
247
|
hasEditingRow(showMessage?: boolean): boolean;
|
|
214
248
|
/**
|
|
215
|
-
*
|
|
249
|
+
* 选中行开启编辑(顺序上料:校验当前编辑组后整组切换;非顺序上料:始终编辑态,无需操作)
|
|
216
250
|
* @param row
|
|
217
251
|
*/
|
|
218
|
-
editRow(row: IMaterialConsumeData): void
|
|
252
|
+
editRow(row: IMaterialConsumeData): Promise<void>;
|
|
219
253
|
/**
|
|
220
254
|
* 更新整个数组的所有行的已消耗数量
|
|
221
255
|
* @param row
|
|
222
256
|
*/
|
|
223
257
|
updateRowConsumed(): void;
|
|
258
|
+
/**
|
|
259
|
+
* 组级:更新 qty_consumed_total_(同组 qty_ 之和)
|
|
260
|
+
*/
|
|
261
|
+
updateGroupQtyConsumedTotal(): void;
|
|
262
|
+
/**
|
|
263
|
+
* qty 相关派生字段统一入口(改 qty_ / 扫码 / 删行 等都走这里)
|
|
264
|
+
*/
|
|
265
|
+
updateDerivedQtyFields(): void;
|
|
224
266
|
/**
|
|
225
267
|
* 设置默认值,如工序,需求数量/已消耗数量
|
|
226
268
|
* @param row
|
|
@@ -235,5 +277,5 @@ export declare class MaterialConsumeTableController {
|
|
|
235
277
|
row: IMaterialConsumeData;
|
|
236
278
|
value: any;
|
|
237
279
|
option?: any;
|
|
238
|
-
}): void
|
|
280
|
+
}): Promise<void>;
|
|
239
281
|
}
|
|
@@ -56,6 +56,14 @@ export declare class MCRender implements IMcRender {
|
|
|
56
56
|
subModelKey?: string;
|
|
57
57
|
formModelController: FormModelController;
|
|
58
58
|
}): Promise<ParseRuleProps | undefined>;
|
|
59
|
+
/**
|
|
60
|
+
* 扫码返回多条候选时,弹窗选择其中一条
|
|
61
|
+
* 取消返回 undefined
|
|
62
|
+
*/
|
|
63
|
+
openMultiRowsModal(opts: {
|
|
64
|
+
rows: any[];
|
|
65
|
+
title?: string;
|
|
66
|
+
}): Promise<any | undefined>;
|
|
59
67
|
/**
|
|
60
68
|
* 销毁所有固定的模态
|
|
61
69
|
*/
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BomEntriesValidator } from './bom-validator';
|
|
2
|
+
import { IMaterialConsumeData } from './types';
|
|
3
|
+
/** RDO 将空 id_.in / versionIn 视为不筛选,无候选时用占位 version id 使下拉返回空列表 */
|
|
4
|
+
export declare const EMPTY_PRODUCT_VERSION_ID = "__mc_no_selectable_product__";
|
|
5
|
+
/** 指定批次开启但列表为空时,使批次下拉返回空列表 */
|
|
6
|
+
export declare const EMPTY_LOT_NAME = "__mc_no_selectable_lot__";
|
|
7
|
+
export type ProductIdQuery = {
|
|
8
|
+
'id_.in': (string | undefined)[];
|
|
9
|
+
};
|
|
10
|
+
export declare function isEmptyProductQuery(query?: ProductIdQuery): boolean;
|
|
11
|
+
export type MaterialNoQuery = {
|
|
12
|
+
'product_id_.versionIn': (string | undefined)[] | null;
|
|
13
|
+
'name_.in'?: string[];
|
|
14
|
+
};
|
|
15
|
+
export interface BuildProductIdQueryOptions {
|
|
16
|
+
validator: BomEntriesValidator;
|
|
17
|
+
tableData: IMaterialConsumeData[];
|
|
18
|
+
row: IMaterialConsumeData;
|
|
19
|
+
rowIndex?: number;
|
|
20
|
+
enableSequenceLoading: boolean;
|
|
21
|
+
/** 记录模式且未启 personal BOM 时为 true */
|
|
22
|
+
skipFilter: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** 构建 product_id_ 行级下拉查询条件 */
|
|
25
|
+
export declare function buildProductIdQuery(options: BuildProductIdQueryOptions): ProductIdQuery | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* 构建 material_no_ 行级批次过滤
|
|
28
|
+
* - 有 product_id_:仅该物料版本
|
|
29
|
+
* - 无 product_id_:与 product_id_ 下拉可选范围一致
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildMaterialNoQuery(options: BuildProductIdQueryOptions): MaterialNoQuery;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BomEntryValidator, ScanFillPlan } from './bom-validator';
|
|
2
|
+
import { IMaterialConsumeData } from './types';
|
|
3
|
+
export type ValidateCurrentGroupForSwitch = (table: IMaterialConsumeData[], current: BomEntryValidator) => void | Promise<void>;
|
|
4
|
+
/**
|
|
5
|
+
* 按 ScanFillPlan 切组 / 建组 / 填充,返回新表(不改入参 arr)。
|
|
6
|
+
* needSwitch 时通过 options.validateCurrentGroupForSwitch 先校验当前组。
|
|
7
|
+
*/
|
|
8
|
+
export declare function applyScanFillPlan(arr: IMaterialConsumeData[], scanRow: IMaterialConsumeData, plan?: ScanFillPlan, options?: {
|
|
9
|
+
validateCurrentGroupForSwitch?: ValidateCurrentGroupForSwitch;
|
|
10
|
+
}): Promise<IMaterialConsumeData[]>;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { IBomEntry, IMaterialConsumeData } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 扫码校验与填充
|
|
4
|
+
* 对应 scan-validation-logic.md
|
|
5
|
+
* 独立于 bom-validator.ts,只依赖 types 中的 IBomEntry / IMaterialConsumeData
|
|
6
|
+
*/
|
|
7
|
+
/** 横线下方三种扫码场景 */
|
|
8
|
+
export declare enum ScanBizScenario {
|
|
9
|
+
/** 有 BOM,按顺序上料,同时只有一组可编辑 */
|
|
10
|
+
HAS_BOM_SEQUENTIAL = "has_bom_sequential",
|
|
11
|
+
/** 有 BOM,不按顺序上料,所有行可编辑 */
|
|
12
|
+
HAS_BOM_FREE = "has_bom_free",
|
|
13
|
+
/** 没有 BOM,所有行可编辑 */
|
|
14
|
+
NO_BOM = "no_bom"
|
|
15
|
+
}
|
|
16
|
+
/** 填充动作:新增行 / 回填空物料 / 回填空批次 */
|
|
17
|
+
export type ScanFillAction = 'append' | 'fillEmptyProduct' | 'fillEmptyLot';
|
|
18
|
+
export interface ScanValidatorOptions {
|
|
19
|
+
/** 是否按顺序上料 */
|
|
20
|
+
enableSequenceLoading: boolean;
|
|
21
|
+
/** BOM 明细列表,场景三可传空数组 */
|
|
22
|
+
bomEntries?: IBomEntry[];
|
|
23
|
+
/** 场景三:无 BOM 时是否按批次上料。有 BOM 时以明细 type_ 为准 */
|
|
24
|
+
byLotEnabled?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** 填充成功后的表数据与动作 */
|
|
27
|
+
export interface ScanFillResult {
|
|
28
|
+
table: IMaterialConsumeData[];
|
|
29
|
+
groupSwitched: boolean;
|
|
30
|
+
fillAction: ScanFillAction;
|
|
31
|
+
}
|
|
32
|
+
/** 对齐 materialCheck 返回项 */
|
|
33
|
+
export interface ScanCheckItem {
|
|
34
|
+
materialId: string;
|
|
35
|
+
materialNo?: string;
|
|
36
|
+
productionIdentificationName: string;
|
|
37
|
+
}
|
|
38
|
+
export type ResolveScanCandidatesResult = {
|
|
39
|
+
status: 'single';
|
|
40
|
+
row: IMaterialConsumeData;
|
|
41
|
+
} | {
|
|
42
|
+
status: 'needSelect';
|
|
43
|
+
candidates: IMaterialConsumeData[];
|
|
44
|
+
};
|
|
45
|
+
/** handleScan 返回:多条待选,或已填充 */
|
|
46
|
+
export type HandleScanResult = {
|
|
47
|
+
status: 'needSelect';
|
|
48
|
+
candidates: IMaterialConsumeData[];
|
|
49
|
+
} | ({
|
|
50
|
+
status: 'filled';
|
|
51
|
+
} & ScanFillResult);
|
|
52
|
+
/**
|
|
53
|
+
* 把扫码接口一条结果转成表行。
|
|
54
|
+
* extra 可带数量、有效期等;物料/批次默认取接口字段,extra 可覆盖。
|
|
55
|
+
*/
|
|
56
|
+
export declare function toScanRow(item: ScanCheckItem, extra?: Partial<IMaterialConsumeData>): IMaterialConsumeData;
|
|
57
|
+
/**
|
|
58
|
+
* 取一组允许出现的物料 id:主料,以及开启替代料时的替代料。
|
|
59
|
+
* 用于判断某物料是否属于该 BOM 明细组。
|
|
60
|
+
*/
|
|
61
|
+
export declare function getGroupProductIds(entry: IBomEntry): string[];
|
|
62
|
+
/**
|
|
63
|
+
* 按物料 id 找到所属 BOM 明细(主料或替代料命中即返回)。
|
|
64
|
+
* 找不到说明物料不在当前 BOM 中。
|
|
65
|
+
*/
|
|
66
|
+
export declare function findEntryByProductId(entries: IBomEntry[], productId: string): IBomEntry | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* 三个场景共用的第一步:把接口返回列表收成单条 scanRow。
|
|
69
|
+
* - 0 条:抛错
|
|
70
|
+
* - 1 条:直接作为 scanRow
|
|
71
|
+
* - 多条:返回 needSelect,由调用方弹窗;本函数不改表、不跑后续校验
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveScanCandidates(rows: IMaterialConsumeData[]): ResolveScanCandidatesResult;
|
|
74
|
+
/**
|
|
75
|
+
* 按「有无 BOM 明细 + 是否按顺序上料」判定场景。
|
|
76
|
+
* 不使用人为指定 / BOM 模式 / 记录模式。
|
|
77
|
+
*/
|
|
78
|
+
export declare function resolveScanScenario(options: {
|
|
79
|
+
enableSequenceLoading: boolean;
|
|
80
|
+
bomEntries?: IBomEntry[];
|
|
81
|
+
}): ScanBizScenario;
|
|
82
|
+
/**
|
|
83
|
+
* 通用校验 1:扫码物料是否出现在 BOM 明细(主料或替代料)中。
|
|
84
|
+
* 场景三无 BOM,不调用本函数。找不到则抛错。
|
|
85
|
+
*/
|
|
86
|
+
export declare function validateInBom(row: IMaterialConsumeData, entries: IBomEntry[]): void;
|
|
87
|
+
/** 判断物料 id 是否属于该 BOM 组(主料或已启用的替代料) */
|
|
88
|
+
export declare function isMemberOfGroup(productId: string | undefined, entry: IBomEntry): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* 通用校验 2:物料是否允许写入目标组。
|
|
91
|
+
* 查看 / 未开替代料:必须是主料。
|
|
92
|
+
* 整批替代:组内已有物料时必须与之一致。
|
|
93
|
+
* 混用替代:必须是主料或替代料。
|
|
94
|
+
*/
|
|
95
|
+
export declare function assertMaterialInGroup(productId: string | undefined, entry: IBomEntry, groupRows?: IMaterialConsumeData[]): void;
|
|
96
|
+
/**
|
|
97
|
+
* 通用校验 3:按批次上料且开启混批时,同一组同一物料的不同批次数不能超过 lot_mixing_times_。
|
|
98
|
+
* includeIncomingLot 为 true 时,把即将写入的批次也算进去,避免先插入再超限。
|
|
99
|
+
*/
|
|
100
|
+
export declare function validateLotMixingForProduct(row: IMaterialConsumeData, groupRows: IMaterialConsumeData[], entry: IBomEntry, includeIncomingLot?: boolean): void;
|
|
101
|
+
/**
|
|
102
|
+
* 通用校验 4:有效期为空则跳过;有效期当天结束仍早于现在则视为过期并抛错。
|
|
103
|
+
*/
|
|
104
|
+
export declare function checkExpiration(row: IMaterialConsumeData): void;
|
|
105
|
+
/**
|
|
106
|
+
* 通用校验 5:开启数量校验时,同一组所有物料的上料之和 vs 组需求量。
|
|
107
|
+
* diff = 上料之和 - 需求量。eq:diff === 0;gte:diff >= 0;lte:diff <= 0;
|
|
108
|
+
* bounds:min <= diff <= max。
|
|
109
|
+
* 不按顺序上料且规则为 eq 时,允许 diff < 0(少上料),diff > 0 仍抛错。
|
|
110
|
+
*/
|
|
111
|
+
export declare function validateQtyForGroup(groupRows: IMaterialConsumeData[], entry: IBomEntry, sequential?: boolean): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* 整组校验:切组前先对每一行走必填 + 通用 2、3、4,再整组跑一次通用 5。
|
|
114
|
+
* 任一项失败则中断,不切组、不填充。
|
|
115
|
+
*/
|
|
116
|
+
export declare function validateGroupRows(groupRows: IMaterialConsumeData[], entry: IBomEntry, sequential?: boolean): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* 物料消耗表扫码校验与填充。
|
|
119
|
+
* 对应 scan-validation-logic.md;不依赖 bom-validator.ts。
|
|
120
|
+
*/
|
|
121
|
+
export declare class BomEntriesValidator {
|
|
122
|
+
private options;
|
|
123
|
+
constructor(options: ScanValidatorOptions);
|
|
124
|
+
/** 当前配置对应的扫码场景 */
|
|
125
|
+
get scenario(): ScanBizScenario;
|
|
126
|
+
/** BOM 明细,无 BOM 时为空数组 */
|
|
127
|
+
get entries(): IBomEntry[];
|
|
128
|
+
/** 按 sort_num_ 排序后的 BOM 明细,用于顺序上料定位当前组 / 下一组 */
|
|
129
|
+
get sortedEntries(): IBomEntry[];
|
|
130
|
+
/**
|
|
131
|
+
* 扫码总入口。
|
|
132
|
+
* 入参可为单条或接口返回的多条;不修改入参 table。
|
|
133
|
+
* 多条时返回 needSelect(调用方弹窗后再以选中的一条调用);
|
|
134
|
+
* 单条则按场景走校验和填充,返回 filled。
|
|
135
|
+
* TODO: 待处理 — 尚未接入 Controller / 选择弹窗
|
|
136
|
+
*/
|
|
137
|
+
handleScan(scanInput: IMaterialConsumeData | IMaterialConsumeData[], table: IMaterialConsumeData[]): Promise<HandleScanResult>;
|
|
138
|
+
/**
|
|
139
|
+
* 场景一:有 BOM 且按顺序上料。仅当前编辑组可写。
|
|
140
|
+
* 属于当前组:通用 2(含整批)→ 通用 3 → 填充。
|
|
141
|
+
* 不属于:前面组报错,否则切下一组。
|
|
142
|
+
*/
|
|
143
|
+
private runScenario1;
|
|
144
|
+
/** 扫码物料属于前面组:已在表中 → 请勿重复上料;非必须且不在表中 → 请按顺序上料 */
|
|
145
|
+
private assertNotPreviousGroup;
|
|
146
|
+
/**
|
|
147
|
+
* 顺序上料切组:非必须且表中没有时,物料属于该组则收下,否则继续往后。
|
|
148
|
+
* 目标组不在表中:在当前组下方插入空行再填充。
|
|
149
|
+
*/
|
|
150
|
+
private switchToNextGroup;
|
|
151
|
+
/** 在当前组最后一行下方插入目标组空占位行 */
|
|
152
|
+
private insertEmptyGroupBelow;
|
|
153
|
+
/**
|
|
154
|
+
* 场景二:有 BOM 但不按顺序。所有行可编辑,不切组。
|
|
155
|
+
* 表中没有该组:通用 2、3 后表末追加。有则通用 2、3 后走填充。
|
|
156
|
+
*/
|
|
157
|
+
private runScenario2;
|
|
158
|
+
/**
|
|
159
|
+
* 场景三:没有 BOM。只校验有效期,不跑通用 1/2/3。
|
|
160
|
+
* 优先填空物料行,其次按批次填「有物料无批次」行,否则表末新增。
|
|
161
|
+
*/
|
|
162
|
+
private runScenario3;
|
|
163
|
+
/**
|
|
164
|
+
* 顺序上料时定位「当前编辑组」在排序后 BOM 中的下标。
|
|
165
|
+
* 1. 编辑行有物料或 bom_entry_id_:按现逻辑匹配
|
|
166
|
+
* 2. 未初始化:取表中最后一组已出现(已确认)明细的序号,当前组 = BOM 下一条
|
|
167
|
+
* 3. 表里还没有任何组:第一组
|
|
168
|
+
*/
|
|
169
|
+
private resolveCurrentGroupIndex;
|
|
170
|
+
/**
|
|
171
|
+
* 从表尾往前找最后一组已出现的 BOM 明细(已确认且有物料或 bom_entry_id_)。
|
|
172
|
+
* 找不到返回 -1。
|
|
173
|
+
*/
|
|
174
|
+
private findLastAppearedGroupIndex;
|
|
175
|
+
/** 表中是否已有该 BOM 组(有物料行或带 bom_entry_id_ 的空行) */
|
|
176
|
+
private groupExistsInTable;
|
|
177
|
+
/**
|
|
178
|
+
* 收集空物料行下标。extra 可再限制范围(如仅当前编辑组、或匹配 bom_entry_id_)。
|
|
179
|
+
*/
|
|
180
|
+
private collectEmptyProductIndexes;
|
|
181
|
+
/**
|
|
182
|
+
* 收集某 BOM 组在表中的范围:组成员行、空物料行、空批次行,以及默认插入位置。
|
|
183
|
+
* editingGroup 为 true 时,未确认的空物料行也算进该组。
|
|
184
|
+
*/
|
|
185
|
+
private collectGroupScope;
|
|
186
|
+
/**
|
|
187
|
+
* 切组时改编辑态:当前组行确认(禁用),目标组行取消确认(可编辑)。
|
|
188
|
+
*/
|
|
189
|
+
private applyGroupEditState;
|
|
190
|
+
}
|
|
191
|
+
/** 创建扫码校验器实例 */
|
|
192
|
+
export declare function createBomValidator(options: ScanValidatorOptions): BomEntriesValidator;
|