@gct-paas/excel 0.1.39-beta.9 → 0.1.39

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 (136) hide show
  1. package/dist/{BaseComponent-Dri2NRAY.js → BaseComponent-vcQYIdIV.js} +2 -2
  2. package/dist/{VueVideoPlayer-DPJyefX-.js → VueVideoPlayer-i-e8JA1p.js} +2 -2
  3. package/dist/{align-editor-BvGUsoz3.js → align-editor-BHe6RawU.js} +1 -1
  4. package/dist/{barcode-design-j7wyssrW.js → barcode-design-B2QebWCm.js} +2 -2
  5. package/dist/base/index.es.js +624 -264
  6. package/dist/{diagonal-design-BSZWkw3m.js → diagonal-design-Di8yoq2q.js} +2 -2
  7. package/dist/{dynamic-table-action-BQfJFJ4j.js → dynamic-table-action-ixEHBudI.js} +1041 -368
  8. package/dist/{dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js → dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js} +1039 -1409
  9. package/dist/{edit.utils-CXmmCnxE-CvJGxh2v.js → edit.utils-CXmmCnxE-Dq-jFR6z.js} +1 -1
  10. package/dist/excel.css +568 -369
  11. package/dist/{exceljs.min-S4WRZ454.js → exceljs.min-Biokosoj.js} +2 -2
  12. package/dist/{font-editor-DH2EtSpD.js → font-editor-B8l8oZMc.js} +3 -3
  13. package/dist/{image-design-A8_t4F3t.js → image-design-BI6ld3iT.js} +2 -2
  14. package/dist/{index-DFNVqlgA.js → index-0QNiqIDD.js} +1 -1
  15. package/dist/{index-Caygbi4F.js → index-4DBBFAz2.js} +2 -2
  16. package/dist/{index-DERot0lx.js → index-5-uaHPu2.js} +2 -2
  17. package/dist/{index-H2nF4SP8.js → index-849t15XD.js} +2 -2
  18. package/dist/{index-C3k8QiLF.js → index-ACzLWeSq.js} +2 -2
  19. package/dist/{index-DkwkBWEP.js → index-B-2uV1do.js} +2 -2
  20. package/dist/{index-bH6ERrWd.js → index-B-in7hrx.js} +2 -2
  21. package/dist/{index-B-Kwr44d.js → index-B1qdPPcT.js} +1 -1
  22. package/dist/{index-B_GyS-E2.js → index-B2-4fQY4.js} +1 -1
  23. package/dist/{index-BMgsVWb2.js → index-BC-WTGht.js} +6 -3
  24. package/dist/{index-CJdwj04Z.js → index-BWibgLgR.js} +1 -1
  25. package/dist/{index-DWVhXPb-.js → index-BY-gcezU.js} +2 -2
  26. package/dist/{index-BLmR9aiG.js → index-B_8k4BAM.js} +1 -1
  27. package/dist/{index-CTASuQPn.js → index-BaiFrPHF.js} +1 -1
  28. package/dist/{index-BULBrHtQ.js → index-BgCtUVN4.js} +2 -2
  29. package/dist/{index-CxQSyBZw.js → index-Boq5CJjh.js} +3 -3
  30. package/dist/{index-CfGLFrkj.js → index-BwN8dOzz.js} +1 -1
  31. package/dist/{index-DPNbUuwP.js → index-Bz-WrsTI.js} +6 -5
  32. package/dist/{index-DnykuPHF.js → index-C4P86Gyr.js} +2 -2
  33. package/dist/{index-CRloZ0HP.js → index-C68Ddx67.js} +2 -2
  34. package/dist/{index-afC-rHNa.js → index-CDYkiSAG.js} +2 -2
  35. package/dist/{index-DN9Y7054.js → index-CKQht60B.js} +6 -5
  36. package/dist/{index-BUK-p31i.js → index-CM549sqd.js} +3 -2
  37. package/dist/{index-DmBx27M9.js → index-CNNAdkvj.js} +2 -2
  38. package/dist/{index-Bs8Xs0bo.js → index-CTmqu_l0.js} +1 -1
  39. package/dist/{index-DY7Xkd8n.js → index-CbwfhoZc.js} +2 -2
  40. package/dist/{index-D9444n1O.js → index-CbzO_9_B.js} +2 -2
  41. package/dist/{index-BE-3UQG0.js → index-CqJMdCBq.js} +50 -3
  42. package/dist/{index-Bo_31wZD.js → index-DJWuge8D.js} +5 -7
  43. package/dist/{index-D9OUmbBs.js → index-DdeccRDL.js} +1 -1
  44. package/dist/{index-Cc6r9LJx.js → index-T4KiEmZK.js} +3 -3
  45. package/dist/{index-DsLZqLga.js → index-aGBVmmIs.js} +2 -2
  46. package/dist/{index-DrA9ZgS7.js → index-bLaVMu7L.js} +2442 -1956
  47. package/dist/{index-DPHGDezJ.js → index-n8fyvJSm.js} +1 -1
  48. package/dist/{index-D1jXU0ka.js → index-rMox9ntl.js} +2 -2
  49. package/dist/index.es.js +2 -2
  50. package/dist/{mb-render-DybPk-KF.js → mb-render-BhZlu6KQ.js} +8 -2
  51. package/dist/{online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-BEX02BrW.js → online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-1sgb8Alq.js} +8 -1
  52. package/dist/{pagination-design-0W-jGAyr.js → pagination-design-DvqAcQIp.js} +2 -2
  53. package/dist/paper-widget-design-D_kqGHiq.js +4 -0
  54. package/dist/{print-runtime-instance-DcjvavYI.js → print-runtime-instance-CmWFXzPQ.js} +1 -1
  55. package/dist/{print-snapshot-renderer-CsCyscta.js → print-snapshot-renderer-DsksM5OJ.js} +3 -3
  56. package/dist/{qrcode-design-bZWGrJtf.js → qrcode-design-CuDgywl1.js} +1 -1
  57. package/dist/{revo-grid.entry-EvEm_y2W.js → revo-grid.entry-BqAGRHgf.js} +1 -1
  58. package/dist/{revogr-attribution_7.entry-DgE6PR1L.js → revogr-attribution_7.entry-Dl-LcgkK.js} +3 -3
  59. package/dist/{revogr-clipboard_3.entry-CNDxeVhF.js → revogr-clipboard_3.entry-CT01IdhF.js} +2 -2
  60. package/dist/{revogr-data_4.entry-DKwV9DMF.js → revogr-data_4.entry-fH5V7Zgk.js} +2 -2
  61. package/dist/{revogr-filter-panel.entry-1SAhHHfl.js → revogr-filter-panel.entry-DiC81RU-.js} +1 -1
  62. package/dist/seal-design-CZ8RLM62.js +4 -0
  63. package/dist/{serialnumber-design-Cs3B0ZNE.js → serialnumber-design-CVO53aOV.js} +1 -1
  64. package/dist/shared/index.es.js +23 -21
  65. package/dist/{single-field-drop-p4d5y85m.js → single-field-drop-B51_f5z6.js} +2 -2
  66. package/dist/{size-editor-B2TfX4_r.js → size-editor-BeSNExEt.js} +1 -1
  67. package/dist/src/domain/table/business/material/material-balance/profile/fields.d.ts +2 -0
  68. package/dist/src/domain/table/business/preprocess/pretreatment-list/profile/field-keys.d.ts +1 -7
  69. package/dist/src/domain/table/business/sterilize/entrust-steril-batch-list/profile/fields.d.ts +2 -0
  70. package/dist/src/nocode-base/src/core/factory/sub-table-factory.d.ts +2 -0
  71. package/dist/src/nocode-base/src/core/sub-table/allocate-table-core.d.ts +2 -1
  72. package/dist/src/nocode-base/src/core/sub-table/sub-table-core.d.ts +2 -1
  73. package/dist/src/nocode-base/src/hooks/form-model/form-model-controller.d.ts +2 -0
  74. package/dist/src/nocode-base/src/hooks/material-consume/bom-validator.d.ts +9 -7
  75. package/dist/src/nocode-base/src/hooks/material-consume/material-consume-table-controller.d.ts +18 -14
  76. package/dist/src/nocode-base/src/hooks/material-consume/tmpl-bom-controller.d.ts +20 -7
  77. package/dist/src/nocode-base/src/hooks/material-consume/types.d.ts +6 -0
  78. package/dist/src/nocode-base/src/hooks/material-consume-object/bom-validator.d.ts +4 -3
  79. package/dist/src/nocode-base/src/hooks/material-consume-object/initialize-autofill.d.ts +19 -0
  80. package/dist/src/nocode-base/src/hooks/material-consume-object/object-validation-controller.d.ts +24 -0
  81. package/dist/src/nocode-base/src/interface/render.d.ts +3 -1
  82. package/dist/src/nocode-base/src/interface/transform.d.ts +14 -1
  83. package/dist/src/nocode-base/src/runtime/formula-utils.d.ts +2 -0
  84. package/dist/src/nocode-base/src/runtime/multi-sheet-runtime.d.ts +3 -1
  85. package/dist/src/nocode-base/src/runtime/runtime-context.d.ts +4 -0
  86. package/dist/src/nocode-base/src/runtime/runtime-form-state-store.d.ts +6 -2
  87. package/dist/src/nocode-base/src/runtime/table-row-identity.d.ts +2 -0
  88. package/dist/src/nocode-base/src/types/render/sub-table-render.d.ts +5 -1
  89. package/dist/src/nocode-web-render/src/render/sub-table/common/inventory-scan-columns.d.ts +6 -0
  90. package/dist/src/online-form/src/views/__cell_widgets__/cell-widget-design.vue.d.ts +2 -0
  91. package/dist/src/online-form/src/views/__cell_widgets__/common/display-fields-editor/display-fields.util.d.ts +2 -2
  92. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search.util.d.ts +8 -0
  93. package/dist/src/online-form/src/views/__cell_widgets__/fake-field/fake-option-select.vue.d.ts +1 -0
  94. package/dist/src/online-form/src/views/designer/conversions/normalize-paper-grid.d.ts +3 -0
  95. package/dist/src/online-form/src/views/designer/hooks/useAllSpreadSheets.d.ts +35 -0
  96. package/dist/src/online-form/src/views/designer/hooks/useSpreadSheet.d.ts +16 -1
  97. package/dist/src/online-form/src/views/designer/modules/base/designer-wrapper.vue.d.ts +1 -0
  98. package/dist/src/online-form/src/views/designer/modules/duplicate-field-notice.vue.d.ts +2 -0
  99. package/dist/src/online-form/src/views/designer/modules/panel/panel-data-init-config/object-init/hooks/useObjectInit.d.ts +2 -0
  100. package/dist/src/online-form/src/views/designer/modules/panel/sub-table/comps/use-dynamic-sub-table-panel.d.ts +12 -0
  101. package/dist/src/online-form/src/views/designer/modules/xlsx-import-summary.vue.d.ts +11 -0
  102. package/dist/src/online-form/src/views/designer/types/index.d.ts +2 -0
  103. package/dist/src/online-form/src/views/designer/types/sheets.d.ts +2 -0
  104. package/dist/src/online-form/src/views/designer/utils/cell-field-placements.d.ts +12 -0
  105. package/dist/src/online-form/src/views/designer/utils/xlsx-parser.d.ts +9 -3
  106. package/dist/src/online-form/src/views/render/__components__/_field_/trace/composables/useReferenceLabel.d.ts +4 -0
  107. package/dist/src/online-form/src/views/render/__components__/_field_/trace/utils/use-rule-props.d.ts +0 -3
  108. package/dist/src/shared/enum/field-type.d.ts +2 -0
  109. package/dist/src/shared/enum/index.d.ts +2 -0
  110. package/dist/src/shared/enum/product-type.d.ts +9 -0
  111. package/dist/src/shared/enum/production-identification.d.ts +19 -0
  112. package/dist/src/shared/utils/cell-wrap.d.ts +9 -0
  113. package/dist/src/shared/utils/grid-size.d.ts +2 -0
  114. package/dist/src/shared/utils/lot2sn.d.ts +14 -1
  115. package/dist/src/shared/utils/query-filter.d.ts +24 -0
  116. package/dist/{sub-table-factory-CNkIUJTC.js → sub-table-factory-sC8iCJWs.js} +38 -18
  117. package/dist/{text-design-CQh0wCUf.js → text-design-DK_QWoro.js} +5 -4
  118. package/dist/{throttle-Cpk1LoGk-Ch-cqj2G.js → throttle-Cpk1LoGk-BreMfOwP.js} +1 -1
  119. package/dist/{timediff-design-DASqeRcJ.js → timediff-design-Iwg0BNOb.js} +1 -1
  120. package/dist/{trace-like-wrapper-WHxVTEDg.js → trace-like-wrapper-D0pPaeII.js} +5 -2
  121. package/dist/{value-editor.vue_vue_type_style_index_0_lang-DpD-eicm.js → value-editor.vue_vue_type_style_index_0_lang-B4gIt1fw.js} +2 -2
  122. package/dist/web-render/index.es.js +3 -3
  123. package/dist/{widget-barcode-Bbxna1MX.js → widget-barcode-DSBywfHB.js} +4 -4
  124. package/dist/{widget-diagonal-Zm6RJ-dJ.js → widget-diagonal-DiBbiuEA.js} +3 -3
  125. package/dist/{widget-image-CnSS8iu3.js → widget-image-DUtfyekO.js} +5 -5
  126. package/dist/{widget-line-DLOrL-Ko.js → widget-line-6Ngl_4mJ.js} +2 -2
  127. package/dist/{widget-pagination-m6JH4QqC.js → widget-pagination-DXmnbvtx.js} +5 -5
  128. package/dist/{widget-power-Bavhllni.js → widget-power-DbsY-uwC.js} +3 -3
  129. package/dist/{widget-qrcode-DLXRIwk7.js → widget-qrcode-LsBgDKds.js} +3 -3
  130. package/dist/{widget-rangelimit-Cd-qdFTp.js → widget-rangelimit-DJ_5u-vA.js} +3 -3
  131. package/dist/{widget-serialnumber-CL8cIWsV.js → widget-serialnumber-TEVkPcgx.js} +1 -1
  132. package/dist/{widget-text-B-IJP4xb.js → widget-text-DD-xuVwh.js} +5 -5
  133. package/dist/{widget-timediff-CSd24naC.js → widget-timediff-DQV78xgH.js} +2 -2
  134. package/package.json +2 -2
  135. package/dist/paper-widget-design-DFXzTgYk.js +0 -4
  136. package/dist/seal-design-RaHNhk4V.js +0 -4
@@ -1,13 +1,13 @@
1
- import { E as api, $ as PlatformEnum, F as FIELD_TYPE, bi as getRowId, bj as findRuntimeTableRow, b8 as RenderModeEnum, C as ComponentTypeEnum, bv as assembleRules, bw as isAttachFieldActive, aI as Dependency_ENUM, bk as calculateFormula, aH as ASSIGNMENTSTRATEGY_ENUM, R as getParseFormulaVarInfos, bx as fetchHistoryConsume, by as isBomGranted, aW as renderUtils, bu as uuid2, bz as parseFrontConfig, aL as CheckDsTypeEnum, aF as transformUtils, bA as baseDataUtils, bB as initializeSealFields, Y as FormTypeEnum, bC as normalizeToArray, bD as safeParseArray, bE as BpmnNodeTypeEnum, bF as mergeByMultiKey, a8 as _export_sfc, bG as evaluateInspectionDecisionRule, bH as areValidationCommentsEqual, bI as useNocodeEmitter, bJ as commonUtils, aJ as EntityModelCategoryEnum } from "../dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
- import { aO, aQ, a$, a1, bK, bL, B, bM, y, ai, bN, bO, bP, bh, bQ, aT, ay, aP, aM, aN, bR, aj, an, bS, bT, aG, a3, ah, az, aR, a0, al, L, bU, bV, bW, O, p, P, aa, o, Q, A, bX, bY, ax, aw, a6, a2, a4, a5, a7, f, bZ, am, aq, ak, b_, b$, c0, c1, bg, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, bl, cc, cd, aZ, ce, b0, b1, cf, cg, ch, ci, cj, ck, cl, cm, cn, co, aY, cp, b2, be, cq, cr, cs, ao, t, aS, ct, cu, bm, a_ } from "../dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
3
- import { P as getRuntimeDataFieldId, z as parseRuntimeFieldPath, Q as buildRuntimeFieldPath, T as resolveRuntimeFieldProps, U as resolveRuntimeFieldState, V as getRuntimeDependencyOutputKey, W as isRowAddedInCurrentFormChange, o as MaterialConsumptionPatternEnum, X as MaterialConsumeTableController, Y as setFormulaParamsConfig, Z as normalizeRuntime, H as createRuntimeInstanceContext, R as RuntimeFormStateStore, $ as RuntimeSheetService, g as getBusinessFieldKey, a0 as validateObjectBomQtyOnSubmit, a1 as closeValidatorPopovers, a2 as enrichFormChangeRowDetails, N as NCB_PROVIDE, I as RuntimeInstanceRegistry, a3 as useMaterialBalance, a4 as collectFormChangeFieldLocations, a5 as nextFormChangeRowViewHistoryId } from "../dynamic-table-action-BQfJFJ4j.js";
4
- import { B as B2, a6 as a62, e, _, a7 as a72, L as L2, a8, O as O2, E, a9, aa as aa2, ab, ac, ad, M, a, ae, b, af, ag, ah as ah2, ai as ai2, aj as aj2, ak as ak2, al as al2, am as am2, w, an as an2, m, ao as ao2, c, ap, aq as aq2, ar, as, l, x, at, au, av, aw as aw2, f as f2, y as y2, d, ax as ax2, ay as ay2, az as az2, aA, aB, aC, p as p2, r, aD, q, j, aE, s, aF, C, F, u, t as t2, G, i, k, A as A2, h, v } from "../dynamic-table-action-BQfJFJ4j.js";
1
+ import { E as api, _ as PlatformEnum, F as FIELD_TYPE, bc as getRowId, bd as findRuntimeTableRow, b5 as RenderModeEnum, C as ComponentTypeEnum, aF as Dependency_ENUM, aE as ASSIGNMENTSTRATEGY_ENUM, bn as fetchHistoryConsume, bo as isBomGranted, aT as renderUtils, bm as uuid2, bp as parseFrontConfig, aI as CheckDsTypeEnum, aC as transformUtils, bq as baseDataUtils, X as FormTypeEnum, br as normalizeToArray, bs as safeParseArray, bt as BpmnNodeTypeEnum, bu as mergeByMultiKey, a7 as _export_sfc, bv as evaluateInspectionDecisionRule, bw as useNocodeEmitter, bx as commonUtils, aG as EntityModelCategoryEnum } from "../dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
2
+ import { aL, aN, a_, a0, by, bz, B, bA, y, af, bB, bC, bD, bb, bE, aQ, av, aM, aJ, aK, bF, ag, ak, bG, bH, aD, a2, ae, aw, aO, $, ai, L, bI, bJ, bK, O, p, P, a9, o, Q, A, bL, bM, au, at, a5, a1, a3, a4, a6, f, bN, aj, an, ah, bO, bP, bQ, bR, ba, bS, bT, bU, bV, bW, bX, bY, bZ, b_, b$, be, c0, c1, aW, c2, a$, b0, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, aV, cd, b1, b8, ce, cf, al, t, cg, aP, ch, ci, bf, aX } from "../dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
3
+ import { a2 as getRuntimeDataFieldId, O as parseRuntimeFieldPath, a3 as buildRuntimeFieldPath, a4 as resolveRuntimeFieldProps, a5 as resolveRuntimeFieldState, a6 as assembleRules, a7 as isAttachFieldActive, P as calculateFormula, a8 as getRuntimeDependencyOutputKey, a9 as isRowAddedInCurrentFormChange, aa as resolveFormulaData, c as getParseFormulaVarInfos, w as MaterialConsumptionPatternEnum, ab as MaterialConsumeTableController, ac as setFormulaParamsConfig, ad as normalizeRuntime, V as createRuntimeInstanceContext, ae as initializeSealFields, U as RuntimeFormStateStore, af as RuntimeSheetService, g as getBusinessFieldKey, ag as validateObjectBomQtyOnSubmit, ah as areValidationCommentsEqual, ai as closeValidatorPopovers, aj as enrichFormChangeRowDetails, N as NCB_PROVIDE, W as RuntimeInstanceRegistry, ak as useMaterialBalance, al as collectFormChangeFieldLocations, am as nextFormChangeRowViewHistoryId } from "../dynamic-table-action-ixEHBudI.js";
4
+ import { B as B2, an as an2, k, a1 as a12, ao, $ as $2, ap, a0 as a02, F, aq, ar, as, at as at2, au as au2, M, a, av as av2, b, aw as aw2, ax, ay, az, aA, aB, aC, aD as aD2, C, aE, t as t2, aF, d, aG, aH, aI, aJ as aJ2, r, E, aK as aK2, aL as aL2, aM as aM2, aN as aN2, l, G, j, aO as aO2, aP as aP2, aQ as aQ2, aR, aS, aT, aU, y as y2, v, aV as aV2, z, p as p2, aW as aW2, s, aX as aX2, R, S, u, A as A2, T, o as o2, q, Q as Q2, m, x } from "../dynamic-table-action-ixEHBudI.js";
5
5
  import { toRaw, watch, toRef, computed, defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, ref, provide, onUnmounted, markRaw, reactive, onBeforeUnmount } from "vue";
6
- import { cloneDeep, defaults, isEmpty, merge } from "lodash-es";
6
+ import { isEqual, cloneDeep, defaults, isEmpty, merge } from "lodash-es";
7
7
  import "dayjs";
8
- import { S as SubTableCoreFactory, R as RuntimeInstanceController } from "../sub-table-factory-CNkIUJTC.js";
9
- import { A as A3, D, M as M2, a as a10, P as P2, b as b3, c as c10, d as d2, e as e2, W, f as f3, g, h as h2 } from "../sub-table-factory-CNkIUJTC.js";
10
- import { B as B3, F as F2, M as M3, a as a11, u as u2 } from "../mb-render-DybPk-KF.js";
8
+ import { S as SubTableCoreFactory, R as RuntimeInstanceController } from "../sub-table-factory-sC8iCJWs.js";
9
+ import { A as A3, D, M as M2, a as a7, P as P2, b as b2, c, d as d2, e, W, f as f2, g, h } from "../sub-table-factory-sC8iCJWs.js";
10
+ import { B as B3, F as F2, M as M3, a as a8, u as u2 } from "../mb-render-BhZlu6KQ.js";
11
11
  const InstanceStatusValues = {
12
12
  /** 作废状态 */
13
13
  ABANDON: "ABANDON",
@@ -385,7 +385,7 @@ function getSourceFields(record, expression, currentSubtable) {
385
385
  });
386
386
  }
387
387
  function isEmptyValue(value) {
388
- return value === void 0 || value === null || value === "";
388
+ return value === void 0 || value === null || typeof value === "string" && value.trim() === "" || Array.isArray(value) && value.length === 0;
389
389
  }
390
390
  function getRulePaths(record, props, targetFieldId, modelKey, scopeFieldId = targetFieldId) {
391
391
  const subtableField = props.subFieldKey;
@@ -691,13 +691,30 @@ class RuntimeRuleCompiler {
691
691
  const expression = assignment?.expression || props.formulaExpr;
692
692
  if (!expression || !targetFieldId) return;
693
693
  const strategy = assignment?.strategy ?? ASSIGNMENTSTRATEGY_ENUM.alwaysCover;
694
- if (!isLegacyFormula && strategy === ASSIGNMENTSTRATEGY_ENUM.notCoveredForever) {
695
- listRuntimeFieldRows(this.record, subFieldKey, scopeFieldId).forEach((target) => {
696
- const row = this.getWritableRow(target.row, props);
697
- if (isEmptyValue(row[targetFieldId])) return;
698
- const path = formState.getFieldPath(row, targetFieldId);
694
+ let assignmentStates = /* @__PURE__ */ new WeakMap();
695
+ const readInputs = (target) => cloneDeep(resolveFormulaData(expression, target.row, formState.state));
696
+ const rememberTarget = (target, inputs) => {
697
+ const row = props.isFieldModel ? target.row._OPCT : target.row;
698
+ const path = formState.getFieldPath(row ?? target.row, targetFieldId);
699
+ assignmentStates.set(toRaw(target.row), { inputs, path });
700
+ if (strategy === ASSIGNMENTSTRATEGY_ENUM.notCoveredForever && !isEmptyValue(row?.[targetFieldId]))
699
701
  formState.markUserModified(path);
700
- });
702
+ };
703
+ const resetAssignmentState = () => {
704
+ assignmentStates = /* @__PURE__ */ new WeakMap();
705
+ listRuntimeFieldRows(this.record, subFieldKey, scopeFieldId).forEach(
706
+ (target) => rememberTarget(target, readInputs(target))
707
+ );
708
+ };
709
+ if (!isLegacyFormula) {
710
+ resetAssignmentState();
711
+ this.unregisters.push(
712
+ formState.subscribe((change) => {
713
+ if (change.source !== "restore" || change.restoreScope === "fields" || change.paths.every((path) => path.endsWith("_lb_")))
714
+ return;
715
+ resetAssignmentState();
716
+ })
717
+ );
701
718
  }
702
719
  this.unregisters.push(
703
720
  dependencies.register({
@@ -706,20 +723,42 @@ class RuntimeRuleCompiler {
706
723
  sheetId,
707
724
  sourceFields: getSourceFields(this.record, expression, subFieldKey),
708
725
  structureFields,
709
- run: async (change, execution) => {
726
+ run: async (_change, execution) => {
710
727
  if (this.disposed) return;
711
- if (!isLegacyFormula && change.revision === 0 && change.source === "system") return;
712
728
  if (!this.canWriteFormulas()) return;
713
729
  const results = await Promise.all(
714
730
  listRuntimeFieldRows(this.record, subFieldKey, scopeFieldId).map(async (target) => {
715
731
  const row = this.getWritableRow(target.row, props);
716
732
  const path = formState.getFieldPath(row, targetFieldId);
717
- if (!isLegacyFormula && strategy !== ASSIGNMENTSTRATEGY_ENUM.alwaysCover && formState.isUserModified(path))
733
+ const inputs = isLegacyFormula ? void 0 : readInputs(target);
734
+ const previous = assignmentStates.get(toRaw(target.row));
735
+ if (!isLegacyFormula) {
736
+ if (!previous) rememberTarget(target);
737
+ else if (previous.path !== path && formState.isUserModified(previous.path)) {
738
+ formState.markUserModified(path);
739
+ formState.clearUserModified(previous.path);
740
+ }
741
+ }
742
+ if (!isLegacyFormula && strategy !== ASSIGNMENTSTRATEGY_ENUM.alwaysCover && formState.isUserModified(path)) {
743
+ assignmentStates.set(toRaw(target.row), { inputs, path });
718
744
  return;
719
- const result = await calculateFormula(expression, row, formState.state);
720
- const empty = isEmptyValue(result) || typeof result === "string" && result.trim() === "" || Array.isArray(result) && result.length === 0;
745
+ }
746
+ if (!isLegacyFormula && previous?.inputs && !previous.pending && isEqual(previous.inputs, inputs))
747
+ return;
748
+ if (!isLegacyFormula)
749
+ assignmentStates.set(toRaw(target.row), {
750
+ inputs: previous?.inputs,
751
+ path,
752
+ pending: true
753
+ });
754
+ const result = await calculateFormula(
755
+ expression,
756
+ isLegacyFormula ? row : target.row,
757
+ formState.state
758
+ );
759
+ const empty = isEmptyValue(result);
721
760
  const value = isLegacyFormula ? empty ? null : Number(result) : formatDateCompliance(result, props.newSpecificConfig?.mappingType);
722
- return { target, row, path, value };
761
+ return { target, row, path, value, inputs };
723
762
  })
724
763
  );
725
764
  if (!this.canWriteFormulas() || !execution.isCurrent()) return;
@@ -727,7 +766,9 @@ class RuntimeRuleCompiler {
727
766
  "formula",
728
767
  () => results.forEach((result) => {
729
768
  if (!result) return;
730
- const { target, row, path, value } = result;
769
+ const { target, row, path, value, inputs } = result;
770
+ if (!isLegacyFormula)
771
+ assignmentStates.set(toRaw(target.row), { inputs, path });
731
772
  if (!isLegacyFormula && strategy !== ASSIGNMENTSTRATEGY_ENUM.alwaysCover && formState.isUserModified(path))
732
773
  return;
733
774
  if (Object.is(row[targetFieldId], value)) return;
@@ -745,7 +786,12 @@ class RuntimeRuleCompiler {
745
786
  }
746
787
  getWritableRow(row, props) {
747
788
  if (!props.isFieldModel) return row;
748
- if (!row._OPCT) this.record.formState.setObjectField(row, "_OPCT", { _DICT: {} }, "restore");
789
+ if (!row._OPCT)
790
+ this.record.formState.transaction(
791
+ "restore",
792
+ () => this.record.formState.setObjectField(row, "_OPCT", { _DICT: {} }, "restore"),
793
+ { restoreScope: "fields" }
794
+ );
749
795
  return row._OPCT;
750
796
  }
751
797
  /** 公式变更记录也属于实例生命周期,未打开的 Sheet 不再漏记。 */
@@ -806,6 +852,10 @@ class FormTmplBomController {
806
852
  field2TableMap = {};
807
853
  /** 默认物料消耗模式 */
808
854
  defaultMCPattern = MaterialConsumptionPatternEnum.RECORD;
855
+ /** 表单实例身份与 BOM 数据是否存在无关,模板展示也会创建完整控制器。 */
856
+ hasFormInstance = false;
857
+ /** 按页面中的表解析后的配置,页面与打印共用。 */
858
+ resolvedTmplBomList = [];
809
859
  constructor() {
810
860
  }
811
861
  /**
@@ -823,7 +873,9 @@ class FormTmplBomController {
823
873
  productQty: this.productQty,
824
874
  historyData: this.historyData,
825
875
  field2TableMap: this.field2TableMap,
826
- defaultMCPattern: this.defaultMCPattern
876
+ defaultMCPattern: this.defaultMCPattern,
877
+ hasFormInstance: this.hasFormInstance,
878
+ resolvedTmplBomList: this.resolvedTmplBomList
827
879
  })
828
880
  );
829
881
  (view.tmplBomList ?? []).forEach((config) => {
@@ -875,11 +927,11 @@ class FormTmplBomController {
875
927
  * @readonly
876
928
  */
877
929
  get bomEntries() {
878
- return this.formInstBom?.bomEntries;
930
+ return this.formInstBom?.bomEntries ?? [];
879
931
  }
880
932
  /** 表单模板bom信息配置列表 */
881
933
  get tmplBomList() {
882
- return this.formInstBom?.formTmplBomList;
934
+ return this.resolvedTmplBomList;
883
935
  }
884
936
  /**
885
937
  * bom那边指定的当前工序的开关
@@ -888,30 +940,55 @@ class FormTmplBomController {
888
940
  get enableSequenceLoading() {
889
941
  return !!this.formInstBom?.sequenceEntries?.[0]?.enabled_;
890
942
  }
891
- /**
892
- * 初始化模板的物料消耗的配置
893
- */
943
+ createDefaultConfig(table) {
944
+ return {
945
+ table_key_: `${table.tableKey}:${table.masterSubField}`,
946
+ material_loading_model_enabled_: false,
947
+ material_consumption_pattern_: MaterialConsumptionPatternEnum.RECORD,
948
+ bom_init_enabled_: false,
949
+ personal_bom_enabled_: false,
950
+ sequence_loading_enabled_: false,
951
+ entries_: []
952
+ };
953
+ }
954
+ /** 有实例时读取实例配置,无实例时仅创建默认展示控制器。 */
894
955
  async init(data) {
895
- if (!data.formInstBom) {
896
- return;
956
+ this.hasFormInstance = data.hasFormInstance;
957
+ this.operationId = data.operationId ?? "";
958
+ this.materialNo = data.materialNo ?? "";
959
+ this.formInstBom = this.hasFormInstance ? data.formInstBom ?? null : null;
960
+ this.productQty = this.formInstBom ? data.productQty ?? 0 : data.productQty;
961
+ this.historyData = [];
962
+ this.defaultMCPattern = MaterialConsumptionPatternEnum.RECORD;
963
+ this.tableControllers = {};
964
+ this.field2TableMap = {};
965
+ const instanceConfigs = new Map(
966
+ (this.formInstBom?.formTmplBomList ?? []).filter((config) => !config.deleted_ && config.table_key_).map((config) => [config.table_key_, config])
967
+ );
968
+ this.resolvedTmplBomList = data.materialConsumeTableList.map((table) => {
969
+ const key = `${table.tableKey}:${table.masterSubField}`;
970
+ const source = instanceConfigs.get(key);
971
+ if (!source) return this.createDefaultConfig(table);
972
+ const config = cloneDeep(source);
973
+ config.entries_ ??= [];
974
+ return config;
975
+ });
976
+ if (this.formInstBom) {
977
+ if (this.formInstBom.productionIdentificationId && this.operationId) {
978
+ this.historyData = await fetchHistoryConsume({
979
+ production_identification_id_: this.formInstBom.productionIdentificationId,
980
+ routing_operation_id_: this.operationId
981
+ });
982
+ }
983
+ const isGranted = await isBomGranted();
984
+ this.defaultMCPattern = isGranted ? MaterialConsumptionPatternEnum.BOM : MaterialConsumptionPatternEnum.RECORD;
897
985
  }
898
- this.operationId = data.operationId;
899
- this.materialNo = data.materialNo;
900
- this.formInstBom = data.formInstBom;
901
- this.productQty = data.productQty ?? 0;
902
- this.historyData = await fetchHistoryConsume({
903
- production_identification_id_: this.formInstBom.productionIdentificationId,
904
- routing_operation_id_: this.operationId
986
+ data.materialConsumeTableList.forEach((table, index) => {
987
+ const config = this.resolvedTmplBomList[index];
988
+ const controller = new MaterialConsumeTableController(this, config);
989
+ this.tableControllers[table.tableKey] = controller;
990
+ this.field2TableMap[table.masterSubField] = table.tableKey;
905
991
  });
906
- const isGranted = await isBomGranted();
907
- this.defaultMCPattern = isGranted ? MaterialConsumptionPatternEnum.BOM : MaterialConsumptionPatternEnum.RECORD;
908
- this.tableControllers = {};
909
- this.tmplBomList.forEach((cur) => {
910
- const controller = new MaterialConsumeTableController(this, cur);
911
- const [tableKey, fieldKey] = cur.table_key_.split(":");
912
- this.tableControllers[tableKey] = controller;
913
- this.field2TableMap[fieldKey] = tableKey;
914
- }, {});
915
992
  }
916
993
  /**
917
994
  * 根据字段key获取子表控制器
@@ -956,9 +1033,31 @@ class FormTmplBomController {
956
1033
  });
957
1034
  });
958
1035
  }
1036
+ /** 全部 Sheet 的消耗表统一在 LOADED 前准备。 */
1037
+ initializeFormState(opts) {
1038
+ Object.entries(this.field2TableMap).forEach(([field, tableKey]) => {
1039
+ const controller = this.tableControllers[tableKey];
1040
+ if (!controller) return;
1041
+ controller.prepareInitialData({
1042
+ formState: opts.formState,
1043
+ field,
1044
+ dataStatus: opts.dataStatus,
1045
+ defaultRowData: renderUtils.getDefaultValueInfo({
1046
+ defaultDataMap: opts.defaultDataMap,
1047
+ key: field
1048
+ })
1049
+ });
1050
+ });
1051
+ }
1052
+ /** 钩子若修改数量依赖,在创建 Store 和分页前按原规则重算。 */
1053
+ finalizeInitialQuantities() {
1054
+ Object.values(this.tableControllers).forEach((controller) => {
1055
+ controller.syncQtyRequiredFromBomIfChanged();
1056
+ });
1057
+ }
959
1058
  async submitValidate() {
960
1059
  const results = await Promise.all(
961
- Object.values(this.tableControllers).map((c11) => c11.submitValidate())
1060
+ Object.values(this.tableControllers).map((c10) => c10.submitValidate())
962
1061
  );
963
1062
  const fields = {};
964
1063
  let isValid = true;
@@ -972,6 +1071,79 @@ class FormTmplBomController {
972
1071
  };
973
1072
  }
974
1073
  }
1074
+ async function prepareObjectProductDefaults({
1075
+ enabled,
1076
+ fields,
1077
+ objectInitialValues = [],
1078
+ onWarning
1079
+ }) {
1080
+ const defaults2 = /* @__PURE__ */ new WeakMap();
1081
+ if (!enabled) return defaults2;
1082
+ const requests = /* @__PURE__ */ new Map();
1083
+ const tasks = [];
1084
+ function fetchProduct(productId) {
1085
+ const existing = requests.get(productId);
1086
+ if (existing) return existing;
1087
+ const request = (async () => {
1088
+ const result = await api.apaas.modelComprehensive.getBizServiceModelCategoryModelKeyBsKey(
1089
+ {
1090
+ modelCategory: "entity",
1091
+ modelKey: "em_product",
1092
+ bsKey: "rdoGetVersionById"
1093
+ },
1094
+ // 沿用现有接口约定,传完整默认值,不拆分版本 ID。
1095
+ { id: productId }
1096
+ );
1097
+ const product = result?.data;
1098
+ if (!product || typeof product !== "object" || Array.isArray(product) || Object.keys(product).length === 0) {
1099
+ return void 0;
1100
+ }
1101
+ return { ...product, _DICT: result?.dict ?? product._DICT };
1102
+ })();
1103
+ requests.set(productId, request);
1104
+ return request;
1105
+ }
1106
+ for (const entry of fields) {
1107
+ if (!entry || typeof entry !== "object") continue;
1108
+ const field = entry;
1109
+ if (typeof field.fieldId !== "string" || !field.belongingObject || field.fieldType !== FIELD_TYPE.PRODUCT || field.isFieldModel || field.subFieldKey || field.subModelKey) {
1110
+ continue;
1111
+ }
1112
+ const configured = objectInitialValues.find(
1113
+ (item) => item.objectField === field.belongingObject
1114
+ );
1115
+ if (!configured?.values || !Object.prototype.hasOwnProperty.call(configured.values, field.fieldId)) {
1116
+ continue;
1117
+ }
1118
+ const productDefault = {
1119
+ value: configured.values[field.fieldId]
1120
+ };
1121
+ defaults2.set(entry, productDefault);
1122
+ const productId = productDefault.value;
1123
+ const needsAutofill = field.enableAutofill !== false && field.autofillRules?.some((rule) => !!rule.toField);
1124
+ if (!needsAutofill || typeof productId !== "string" || productId === "") continue;
1125
+ tasks.push(
1126
+ fetchProduct(productId).then(
1127
+ (sourceData) => {
1128
+ if (!sourceData) {
1129
+ const objectName = configured.objectFieldName || field.belongingObject;
1130
+ onWarning?.(
1131
+ `「数据 → 对象初始化 → ${objectName} → 配置」中的默认物料未查到详情(字段 ${field.fieldId},物料 ${productId}),已跳过自动填充。`
1132
+ );
1133
+ return;
1134
+ }
1135
+ productDefault.sourceData = sourceData;
1136
+ },
1137
+ (error) => {
1138
+ const reason = error instanceof Error ? error.message : String(error);
1139
+ throw new Error(`对象初始化数据填充失败,字段 ${field.fieldId}:${reason}`);
1140
+ }
1141
+ )
1142
+ );
1143
+ }
1144
+ await Promise.all(tasks);
1145
+ return defaults2;
1146
+ }
975
1147
  async function getModelQueries(opts) {
976
1148
  const isEdhr = await isEdhrSuite();
977
1149
  if (!isEdhr || !opts.mainMaterialNo) {
@@ -1116,13 +1288,14 @@ function createRuntimeInstanceInitializer(props, payload, getConsumeData) {
1116
1288
  let runtimeFormStateStore;
1117
1289
  let scriptRunner;
1118
1290
  try {
1119
- const normalizedRuntime = normalizeRuntime(selfInfo?.runtimeJson || "{}");
1291
+ const normalizedRuntime = normalizeRuntime(selfInfo?.runtimeJson || "{}", selfInfo.formType);
1120
1292
  const tid = result.tid;
1121
1293
  const uniqueId = `${tid}_${uuid2(8)}`;
1122
1294
  const runtimeContext = createRuntimeInstanceContext({
1123
1295
  uniqueId,
1124
1296
  instanceId: id,
1125
1297
  templateId: tid,
1298
+ formType: selfInfo.formType,
1126
1299
  runtime: normalizedRuntime,
1127
1300
  defaultData: {}
1128
1301
  });
@@ -1264,6 +1437,8 @@ function createRuntimeInstanceInitializer(props, payload, getConsumeData) {
1264
1437
  }
1265
1438
  await tmplBomC.init({
1266
1439
  formInstBom: selfInfo.formInstBom,
1440
+ materialConsumeTableList: businessIndex.materialConsumeTableList,
1441
+ hasFormInstance: isFormInstance,
1267
1442
  operationId: paramsConfig?.routingOperationId,
1268
1443
  materialNo,
1269
1444
  productQty: paramsConfig?.productQty
@@ -1335,7 +1510,16 @@ function createRuntimeInstanceInitializer(props, payload, getConsumeData) {
1335
1510
  params: { id: paramsConfig?.warehouseId }
1336
1511
  }
1337
1512
  ]);
1513
+ const objectProductDefaults = await prepareObjectProductDefaults({
1514
+ enabled: fillModeType === RenderModeEnum.FormMode && selfInfo.dataStatus !== "STASH" && selfInfo.dataStatus !== "SUBMIT",
1515
+ fields: fieldInfoMap.useDefaultValueFields,
1516
+ objectInitialValues: runtimeContext.formConfig.objectInitialValues,
1517
+ onWarning: (content) => {
1518
+ window.NocodeAdapter.openUtil?.message({ type: "warning", content, duration: 8 });
1519
+ }
1520
+ });
1338
1521
  const defaultDataMap = renderUtils.getDefaultValueMapByField({
1522
+ objectProductDefaults,
1339
1523
  defaultValueFields: fieldInfoMap.useDefaultValueFields,
1340
1524
  mainMaterialNo: paramsConfig?.materialNo || selfInfo.materialNo,
1341
1525
  mainRelatedLotNo: paramsConfig?.relatedLotNo,
@@ -1425,6 +1609,21 @@ function createRuntimeInstanceInitializer(props, payload, getConsumeData) {
1425
1609
  });
1426
1610
  initializeSealFields(floatingFields, formState);
1427
1611
  }
1612
+ tmplBomC.initializeFormState({
1613
+ formState,
1614
+ dataStatus: selfInfo.dataStatus,
1615
+ defaultDataMap
1616
+ });
1617
+ await transformUtils.getEventInitDataLoaded({
1618
+ formConfig: runtimeContext.formConfig,
1619
+ formState,
1620
+ viewMode: fillModeType,
1621
+ dataStatus: selfInfo.dataStatus,
1622
+ ofCtx: { formPrint: payload.formPrint, id: result.id }
1623
+ }).catch((error) => {
1624
+ console.error("Error in getEventInitDataLoaded:", error);
1625
+ });
1626
+ tmplBomC.finalizeInitialQuantities();
1428
1627
  runtimeFormStateStore = new RuntimeFormStateStore(
1429
1628
  formState,
1430
1629
  // 子表信息覆盖普通/固定/检验表、二维关联列以及各类业务表;不能只依赖已放置字段。
@@ -1572,18 +1771,13 @@ function bindRuntimeBusinessServices(runtimeRegistry, record, dataStatus) {
1572
1771
  }
1573
1772
  }),
1574
1773
  mainFormState: computed(() => record.formState.state),
1575
- dataStatus,
1576
- defaultRowData: renderUtils.getDefaultValueInfo({
1577
- defaultDataMap: record.context.defaultData,
1578
- key: field
1579
- })
1774
+ dataStatus
1580
1775
  });
1581
1776
  stops.push(
1582
1777
  watch(
1583
1778
  () => controller.materialNoNum,
1584
1779
  () => {
1585
- if (controller.dataStatus === "SUBMIT") return;
1586
- controller.syncQtyRequiredFromBom();
1780
+ controller.syncQtyRequiredFromBomIfChanged();
1587
1781
  },
1588
1782
  { immediate: true }
1589
1783
  )
@@ -1851,7 +2045,13 @@ function createRuntimePersistenceAccess(runtimeRegistry, props, payload) {
1851
2045
  const signatureKeys = (runtimeRecord.context.businessIndex.useSignatureFields || []).map(
1852
2046
  (item) => item.fieldId
1853
2047
  );
1854
- const idsFormState = transformUtils.getFormDataIdsMap(newFormState, signatureKeys);
2048
+ const idsFormState = transformUtils.getFormDataIdsMap(
2049
+ newFormState,
2050
+ signatureKeys,
2051
+ (path) => runtimeRecord.fields.findByPath(path).some(
2052
+ ({ widget, subFieldKey }) => subFieldKey !== path && [FIELD_TYPE.DATE, FIELD_TYPE.DATE_TIME].includes(widget?.props.fieldType)
2053
+ )
2054
+ );
1855
2055
  if (saveToken ? !runtimeRecord.persistence.completeSave(saveToken) : requestedRevision !== runtimeRecord.formState.revision) {
1856
2056
  return false;
1857
2057
  }
@@ -1928,6 +2128,139 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1928
2128
  }
1929
2129
  });
1930
2130
  const InspectionDecisionPromptModal = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9c14035f"]]);
2131
+ function createMaterialConsumeObjectValidation(options) {
2132
+ const { record, getInfo, isCurrent, shouldSkip, applyComments } = options;
2133
+ let enabled = false;
2134
+ let disposed = false;
2135
+ let submitting = 0;
2136
+ let generation = 0;
2137
+ let lastRevision = -1;
2138
+ let timer;
2139
+ let paths = /* @__PURE__ */ new Set();
2140
+ const unlocated = /* @__PURE__ */ new Set();
2141
+ const alive = () => !disposed && isCurrent();
2142
+ function cancelLive() {
2143
+ generation++;
2144
+ if (timer !== void 0) clearTimeout(timer);
2145
+ timer = void 0;
2146
+ }
2147
+ function calcObjectError(error) {
2148
+ const info = getInfo();
2149
+ const modelKey = info?.modelKey || record.context.businessIndex.modelDisplay.key;
2150
+ const descriptor = record.fields.findField({ modelKey, fieldId: error.field });
2151
+ const props = descriptor?.widget?.props;
2152
+ if (!props?.field || descriptor?.subFieldKey || props.subFieldKey) {
2153
+ const key = modelKey + "." + error.field;
2154
+ if (!unlocated.has(key)) {
2155
+ unlocated.add(key);
2156
+ console.warn("物料消耗对象错误未定位到主表控件,保留在校验清单:", key);
2157
+ }
2158
+ return { error, path: void 0 };
2159
+ }
2160
+ const path = buildRuntimeFieldPath({
2161
+ ...props,
2162
+ modelKey: props.modelKey ?? info?.modelKey,
2163
+ fieldId: props.field
2164
+ });
2165
+ return { error: { ...error, field: path }, path };
2166
+ }
2167
+ function replaceObjectFields(fields) {
2168
+ if (!alive()) return;
2169
+ const next = { ...getInfo()?.mcValidatorMessageMap ?? {} };
2170
+ paths.forEach((path) => delete next[path]);
2171
+ Object.assign(next, fields);
2172
+ paths = new Set(Object.keys(fields));
2173
+ applyComments(next);
2174
+ }
2175
+ function replaceTableFields(fields) {
2176
+ if (!alive()) return;
2177
+ const current = getInfo()?.mcValidatorMessageMap ?? {};
2178
+ const next = { ...fields ?? {} };
2179
+ paths.forEach((path) => {
2180
+ if (current[path]) {
2181
+ next[path] = [...next[path] ?? [], ...current[path]];
2182
+ }
2183
+ });
2184
+ applyComments(next);
2185
+ }
2186
+ function clear() {
2187
+ cancelLive();
2188
+ enabled = false;
2189
+ lastRevision = -1;
2190
+ replaceObjectFields({});
2191
+ }
2192
+ async function validate(live = false) {
2193
+ cancelLive();
2194
+ if (!alive()) return;
2195
+ if (shouldSkip()) {
2196
+ clear();
2197
+ return { isValid: true };
2198
+ }
2199
+ const ticket = generation;
2200
+ const revision = record.formState.revision;
2201
+ const info = getInfo();
2202
+ const display = record.context.businessIndex.modelDisplay;
2203
+ const errors = await validateObjectBomQtyOnSubmit({
2204
+ formState: record.formState.state,
2205
+ objectFieldList: record.context.formConfig.objectFieldList,
2206
+ formInstBom: record.context.services.tmplBomController?.formInstBom,
2207
+ showModelName: display.name,
2208
+ showModelKey: display.key || info?.modelKey || ""
2209
+ });
2210
+ if (!alive() || generation !== ticket || record.formState.revision !== revision || live && getInfo()?.renderModeType !== RenderModeEnum.FormMode)
2211
+ return;
2212
+ const fields = {};
2213
+ const comments = {};
2214
+ for (const source of errors) {
2215
+ const adapted = calcObjectError(source);
2216
+ (fields[adapted.error.field] ??= []).push(adapted.error);
2217
+ if (adapted.path) (comments[adapted.path] ??= []).push(adapted.error);
2218
+ }
2219
+ enabled = !!record.context.formConfig.objectFieldList?.length;
2220
+ lastRevision = revision;
2221
+ replaceObjectFields(comments);
2222
+ return { isValid: !errors.length, fields: Object.keys(fields).length ? fields : void 0 };
2223
+ }
2224
+ function requestLive() {
2225
+ cancelLive();
2226
+ if (!alive() || !enabled || submitting > 0 || getInfo()?.renderModeType !== RenderModeEnum.FormMode)
2227
+ return;
2228
+ const ticket = generation;
2229
+ timer = setTimeout(() => {
2230
+ timer = void 0;
2231
+ void (async () => {
2232
+ await record.controller?.waitUntilPrepared();
2233
+ await record.asyncTasks.waitForRequired();
2234
+ if (!alive() || generation !== ticket || submitting > 0 || getInfo()?.renderModeType !== RenderModeEnum.FormMode)
2235
+ return;
2236
+ await validate(true);
2237
+ })().catch((error) => {
2238
+ if (alive()) console.error("物料消耗对象实时校验失败", error);
2239
+ });
2240
+ }, 300);
2241
+ }
2242
+ return {
2243
+ validate,
2244
+ requestLive,
2245
+ replaceTableFields,
2246
+ clear,
2247
+ beginSubmit() {
2248
+ submitting++;
2249
+ cancelLive();
2250
+ },
2251
+ endSubmit() {
2252
+ submitting--;
2253
+ if (alive() && submitting === 0 && enabled && lastRevision !== record.formState.revision)
2254
+ requestLive();
2255
+ },
2256
+ dispose() {
2257
+ disposed = true;
2258
+ cancelLive();
2259
+ paths.clear();
2260
+ unlocated.clear();
2261
+ }
2262
+ };
2263
+ }
1931
2264
  function applyValidationComments(info, comments, kind) {
1932
2265
  if (!info) return;
1933
2266
  const locationKey = kind === "field" ? "validatorLocationList" : "mcValidatorLocationList";
@@ -1945,6 +2278,29 @@ function applyValidationComments(info, comments, kind) {
1945
2278
  info[messageKey] = map;
1946
2279
  }
1947
2280
  function createRuntimeValidationBinding(runtimeRegistry, getInfo, platformType) {
2281
+ const objectValidations = /* @__PURE__ */ new WeakMap();
2282
+ function getObjectValidation(record) {
2283
+ const existing = objectValidations.get(record);
2284
+ if (existing) return existing;
2285
+ const uniqueId = record.context.uniqueId;
2286
+ const validation = createMaterialConsumeObjectValidation({
2287
+ record,
2288
+ getInfo: () => getInfo(uniqueId),
2289
+ isCurrent: () => runtimeRegistry.get(uniqueId) === record,
2290
+ shouldSkip: () => {
2291
+ const skip = syncInspectionDecisionRule(uniqueId);
2292
+ if (skip) clearInspectionValidationState(uniqueId);
2293
+ return skip;
2294
+ },
2295
+ applyComments: (fields) => applyValidationComments(getInfo(uniqueId), fields, "material")
2296
+ });
2297
+ objectValidations.set(record, validation);
2298
+ runtimeRegistry.registerDisposable(uniqueId, () => {
2299
+ validation.dispose();
2300
+ objectValidations.delete(record);
2301
+ });
2302
+ return validation;
2303
+ }
1948
2304
  const inspectionDecisionMatched = /* @__PURE__ */ new WeakMap();
1949
2305
  const inspectionDecisionPrompting = /* @__PURE__ */ new WeakSet();
1950
2306
  function openInspectionDecisionPrompt(uniqueId, content) {
@@ -1985,11 +2341,14 @@ function createRuntimeValidationBinding(runtimeRegistry, getInfo, platformType)
1985
2341
  return matched;
1986
2342
  }
1987
2343
  function clearInspectionValidationState(uniqueId) {
2344
+ const record = runtimeRegistry.get(uniqueId);
2345
+ if (record) objectValidations.get(record)?.clear();
1988
2346
  applyValidationComments(getInfo(uniqueId), null, "field");
1989
2347
  applyValidationComments(getInfo(uniqueId), null, "material");
1990
2348
  }
1991
2349
  function bindFormValidationSync(uniqueId) {
1992
2350
  const record = runtimeRegistry.require(uniqueId);
2351
+ const objects = getObjectValidation(record);
1993
2352
  syncInspectionDecisionRule(uniqueId);
1994
2353
  const stop = record.formState.subscribe(() => {
1995
2354
  if (runtimeRegistry.get(uniqueId) !== record) return;
@@ -2000,6 +2359,7 @@ function createRuntimeValidationBinding(runtimeRegistry, getInfo, platformType)
2000
2359
  uniqueId,
2001
2360
  !suppressed && info.renderModeType === RenderModeEnum.FormMode
2002
2361
  );
2362
+ objects.requestLive();
2003
2363
  if (suppressed) return;
2004
2364
  if (info.renderModeType === RenderModeEnum.FormMode) {
2005
2365
  record.validation.requestLive("change");
@@ -2032,48 +2392,43 @@ function createRuntimeValidationBinding(runtimeRegistry, getInfo, platformType)
2032
2392
  }
2033
2393
  async function runSubmissionValidation(uniqueId) {
2034
2394
  const record = runtimeRegistry.require(uniqueId);
2035
- const formState = record.formState.state;
2036
- const bomC = record.context.services.tmplBomController;
2037
- if (syncInspectionDecisionRule(uniqueId)) {
2038
- clearInspectionValidationState(uniqueId);
2039
- return { isValid: true };
2040
- }
2041
- const res = await record.validation.validate();
2042
- if (!res || runtimeRegistry.get(uniqueId) !== record) return;
2043
- const revision = record.formState.revision;
2044
- if (bomC) {
2045
- const bomRes = await bomC.submitValidate();
2046
- if (runtimeRegistry.get(uniqueId) !== record || record.formState.revision !== revision)
2047
- return;
2048
- applyValidationComments(getInfo(uniqueId), bomRes.fields ?? null, "material");
2049
- if (!bomRes.isValid) {
2050
- merge(res, bomRes);
2051
- return res;
2395
+ const objects = getObjectValidation(record);
2396
+ objects.beginSubmit();
2397
+ try {
2398
+ if (syncInspectionDecisionRule(uniqueId)) {
2399
+ clearInspectionValidationState(uniqueId);
2400
+ return { isValid: true };
2052
2401
  }
2053
- const info = getInfo(uniqueId);
2054
- const display = record.context.businessIndex.modelDisplay;
2055
- display.name;
2056
- const showModelKey = display.key || info?.modelKey || "";
2057
- const objErrs = await validateObjectBomQtyOnSubmit({
2058
- formState: formState ?? {},
2059
- objectFieldList: record.context.formConfig.objectFieldList,
2060
- formInstBom: bomC.formInstBom,
2061
- showModelKey
2062
- });
2063
- if (runtimeRegistry.get(uniqueId) !== record || record.formState.revision !== revision)
2064
- return;
2065
- if (objErrs.length) {
2066
- const fields = {};
2067
- objErrs.forEach((e3) => {
2068
- (fields[e3.field] ??= []).push(e3);
2069
- });
2070
- const objectBomRes = { isValid: false, fields };
2071
- merge(res, objectBomRes);
2072
- applyValidationComments(info, { ...info?.validatorMessageMap ?? {}, ...fields }, "field");
2073
- return res;
2402
+ const res = await record.validation.validate();
2403
+ if (!res || runtimeRegistry.get(uniqueId) !== record) return;
2404
+ const revision = record.formState.revision;
2405
+ const bomC = record.context.services.tmplBomController;
2406
+ if (bomC) {
2407
+ const bomRes = await bomC.submitValidate();
2408
+ if (runtimeRegistry.get(uniqueId) !== record || record.formState.revision !== revision)
2409
+ return;
2410
+ objects.replaceTableFields(bomRes.fields);
2411
+ if (!bomRes.isValid) {
2412
+ merge(res, bomRes);
2413
+ return res;
2414
+ }
2415
+ const objectRes = await objects.validate();
2416
+ if (!objectRes || runtimeRegistry.get(uniqueId) !== record || record.formState.revision !== revision)
2417
+ return;
2418
+ if (!objectRes.isValid) {
2419
+ const fields = { ...res.fields ?? {} };
2420
+ for (const [path, errors] of Object.entries(objectRes.fields ?? {})) {
2421
+ fields[path] = [...fields[path] ?? [], ...errors];
2422
+ }
2423
+ return { ...res, isValid: false, fields };
2424
+ }
2425
+ } else {
2426
+ objects.clear();
2074
2427
  }
2428
+ return res;
2429
+ } finally {
2430
+ objects.endSubmit();
2075
2431
  }
2076
- return res;
2077
2432
  }
2078
2433
  function updateRenderModeType(uniqueId, mode, updateButton = false) {
2079
2434
  const record = runtimeRegistry.require(uniqueId);
@@ -2289,8 +2644,12 @@ function useRenderPageFactory(props, payload) {
2289
2644
  onValidate: () => runSubmissionValidation(uniqueId),
2290
2645
  onValidationFailed: (result) => record.sheetService.navigateFirstError(Object.keys(result.fields ?? {})),
2291
2646
  onGetSubmitData: (formState) => {
2292
- record.context.services.subTableCoreFactory?.prepareSubmitFormState(formState);
2293
- return transformUtils.getSubmitFormData(formState, record.context.businessIndex);
2647
+ const subTableFactory = record.context.services.subTableCoreFactory;
2648
+ subTableFactory?.prepareSubmitFormState(formState);
2649
+ return transformUtils.getSubmitFormData(formState, {
2650
+ ...record.context.businessIndex,
2651
+ businessTableFields: subTableFactory?.getBusinessTableFields() ?? []
2652
+ });
2294
2653
  }
2295
2654
  })
2296
2655
  );
@@ -2487,7 +2846,7 @@ function useEbrWikiFactoryV2(props, payload) {
2487
2846
  }
2488
2847
  watch(
2489
2848
  [() => props.materialNo, () => edhrCounter.value],
2490
- async ([newMaterialNo, _2]) => {
2849
+ async ([newMaterialNo, _]) => {
2491
2850
  if (isEmpty(newMaterialNo)) return;
2492
2851
  loading.value = true;
2493
2852
  clear();
@@ -2666,7 +3025,7 @@ function useEbrWikiFactoryV2(props, payload) {
2666
3025
  );
2667
3026
  watch(
2668
3027
  [() => selectSelfInfo.value, () => instanceCounter.value],
2669
- ([newSelectSelfInfo, _2]) => {
3028
+ ([newSelectSelfInfo, _]) => {
2670
3029
  if (newSelectSelfInfo && payload.pageType === "record-change") {
2671
3030
  emitter.emit(EmitterEnum.__on_select_ebr_doc_instance_id, {
2672
3031
  instanceId: newSelectSelfInfo.id
@@ -3022,9 +3381,9 @@ class FormAnnotationController {
3022
3381
  const items = this.normalizeAllResponse(res);
3023
3382
  this.applyAnnotationItems(items, () => true);
3024
3383
  return items;
3025
- } catch (e3) {
3026
- console.error("加载所有批注信息 error", e3);
3027
- throw e3;
3384
+ } catch (e2) {
3385
+ console.error("加载所有批注信息 error", e2);
3386
+ throw e2;
3028
3387
  }
3029
3388
  };
3030
3389
  handleOpenAnnotation = async () => {
@@ -3071,250 +3430,251 @@ function filterAnnotationItemsUpToCurrent(items) {
3071
3430
  });
3072
3431
  }
3073
3432
  export {
3074
- aO as AITooltips,
3433
+ aL as AITooltips,
3075
3434
  A3 as AllocateTableCore,
3076
3435
  B3 as BaseFormModelFetcher,
3077
- aQ as BinarizeMethodOptions,
3078
- a$ as BindCmpStyleEnum,
3079
- a1 as BooleanShowMode,
3436
+ aN as BinarizeMethodOptions,
3437
+ a_ as BindCmpStyleEnum,
3438
+ a0 as BooleanShowMode,
3080
3439
  B2 as BorderTD,
3081
3440
  BpmnNodeTypeEnum,
3082
- bK as BpmnSignatureTypeEnum,
3083
- bL as ButtonTypeEnum,
3441
+ by as BpmnSignatureTypeEnum,
3442
+ bz as ButtonTypeEnum,
3084
3443
  B as BwipCodeType,
3085
- bM as CHECK_TABLE_MEDPRO_PROTOCOL_KEY,
3444
+ bA as CHECK_TABLE_MEDPRO_PROTOCOL_KEY,
3086
3445
  y as CellType,
3087
- ai as CellWidgetViewState,
3446
+ af as CellWidgetViewState,
3088
3447
  CheckDsTypeEnum,
3089
- bN as CodeRunner,
3448
+ bB as CodeRunner,
3090
3449
  ComponentTypeEnum,
3091
- bO as Config_Fields,
3092
- bP as ControlStatusEnum,
3093
- bh as DEVICE_GROUP_QUERY_KEY,
3094
- bQ as DEVICE_SEARCH_API,
3095
- aT as DateFormat,
3096
- ay as DecimalDisplayMode,
3097
- aP as DenoiseMethodOptions,
3098
- a62 as DeviceConnector,
3099
- aM as DeviceLink,
3100
- e as DeviceLinkTmplUtil,
3101
- aN as DeviceParamsTypeTitle,
3450
+ bC as Config_Fields,
3451
+ bD as ControlStatusEnum,
3452
+ bb as DEVICE_GROUP_QUERY_KEY,
3453
+ bE as DEVICE_SEARCH_API,
3454
+ aQ as DateFormat,
3455
+ av as DecimalDisplayMode,
3456
+ aM as DenoiseMethodOptions,
3457
+ an2 as DeviceConnector,
3458
+ aJ as DeviceLink,
3459
+ k as DeviceLinkTmplUtil,
3460
+ aK as DeviceParamsTypeTitle,
3102
3461
  D as DevicePartConsumeTableCore,
3103
- bR as DeviceStatus,
3104
- aj as DiagonalDirection,
3105
- an as DiagonalVertex,
3106
- _ as DocumentLayout,
3107
- a72 as DocumentLoading,
3108
- L2 as DocumentPaper,
3109
- a8 as DynamicQuickFillModal,
3110
- O2 as DynamicTableAction,
3111
- bS as EBR_PROVIDE_ENUM,
3112
- bT as EFieldBizTypeEnum,
3113
- E as EMPTY_PRODUCT_VERSION_ID,
3114
- aG as EmptySymbol,
3115
- a3 as FallbackSignTypeEnum,
3116
- ah as FieldSysVarDefaultValueEnum,
3462
+ bF as DeviceStatus,
3463
+ ag as DiagonalDirection,
3464
+ ak as DiagonalVertex,
3465
+ a12 as DocumentLayout,
3466
+ ao as DocumentLoading,
3467
+ $2 as DocumentPaper,
3468
+ ap as DynamicQuickFillModal,
3469
+ a02 as DynamicTableAction,
3470
+ bG as EBR_PROVIDE_ENUM,
3471
+ bH as EFieldBizTypeEnum,
3472
+ F as EMPTY_PRODUCT_VERSION_ID,
3473
+ aD as EmptySymbol,
3474
+ a2 as FallbackSignTypeEnum,
3475
+ ae as FieldSysVarDefaultValueEnum,
3117
3476
  FillingTypeEnum,
3118
- a9 as FixedQuickFillModal,
3477
+ aq as FixedQuickFillModal,
3119
3478
  FormAnnotationController,
3120
3479
  F2 as FormModelController,
3121
3480
  FormTmplBomController,
3122
- aa2 as FormTmplConfigController,
3481
+ ar as FormTmplConfigController,
3123
3482
  FormTypeEnum,
3124
- az as ImageDisplayModeEnum,
3483
+ aw as ImageDisplayModeEnum,
3125
3484
  InstanceStatusValues,
3126
- aR as JoinModelTypeEum,
3127
- ab as LEGACY_RUNTIME_FORM_CONFIG_KEYS,
3128
- ac as LEGACY_RUNTIME_SHEET_ID,
3129
- ad as LEGACY_RUNTIME_SHEET_TITLE,
3130
- a0 as LabelPosition,
3131
- al as LineDirection,
3485
+ aO as JoinModelTypeEum,
3486
+ as as LEGACY_RUNTIME_FORM_CONFIG_KEYS,
3487
+ at2 as LEGACY_RUNTIME_SHEET_ID,
3488
+ au2 as LEGACY_RUNTIME_SHEET_TITLE,
3489
+ $ as LabelPosition,
3490
+ ai as LineDirection,
3132
3491
  L as LineType,
3133
- bU as MAX_FRONT_ROW_KEY_LENGTH,
3492
+ bI as MAX_FRONT_ROW_KEY_LENGTH,
3134
3493
  M as MAX_RUNTIME_SHEETS,
3135
3494
  a as MAX_RUNTIME_SHEET_TITLE_LENGTH,
3136
3495
  M3 as MBRender,
3137
- ae as MCDataUtil,
3138
- a11 as MCRender,
3496
+ av2 as MCDataUtil,
3497
+ a8 as MCRender,
3139
3498
  b as MULTI_SHEET_SCHEMA_VERSION,
3140
3499
  MaterialConsumeTableController,
3141
3500
  MaterialConsumptionPatternEnum,
3142
3501
  M2 as MaterialRequisitionTableCore,
3143
3502
  MaterialStatusEnum,
3144
- a10 as MaterialSubstitutionTableCore,
3145
- bV as MobileFillTypeEnum,
3503
+ a7 as MaterialSubstitutionTableCore,
3504
+ bJ as MobileFillTypeEnum,
3146
3505
  NCB_PROVIDE,
3147
- af as OCR_MODEL_PRECISION_ENUM_KEY,
3148
- bW as OfficeTypeEnum,
3506
+ aw2 as OCR_MODEL_PRECISION_ENUM_KEY,
3507
+ bK as OfficeTypeEnum,
3149
3508
  O as Orientation,
3150
3509
  p as PageSizeEnum,
3151
3510
  P as PaginationFormat,
3152
- aa as PaperSizeMap,
3511
+ a9 as PaperSizeMap,
3153
3512
  o as PaperWidgeType,
3154
3513
  Q as PaperWidgeValueType,
3155
3514
  A as ParamModelTypeEnum,
3156
3515
  P2 as PartStocktakeTableCore,
3157
3516
  PlatformEnum,
3158
- bX as PosEnum,
3159
- b3 as PretreatmentListTableCore,
3160
- c10 as ProfileDrivenSubTableCore,
3161
- bY as RUNTIME_COLUMN_ROW_KEY,
3162
- ax as RangeCompareOp,
3163
- aw as RangeValidateMode,
3517
+ bL as PosEnum,
3518
+ b2 as PretreatmentListTableCore,
3519
+ c as ProfileDrivenSubTableCore,
3520
+ bM as RUNTIME_COLUMN_ROW_KEY,
3521
+ au as RangeCompareOp,
3522
+ at as RangeValidateMode,
3164
3523
  RenderModeEnum,
3165
- ag as RuntimeAsyncTaskCoordinator,
3166
- ah2 as RuntimeDependencyService,
3167
- ai2 as RuntimeFieldRegistry,
3524
+ ax as RuntimeAsyncTaskCoordinator,
3525
+ ay as RuntimeDependencyService,
3526
+ az as RuntimeFieldRegistry,
3168
3527
  RuntimeFormStateStore,
3169
3528
  RuntimeInstanceController,
3170
- aj2 as RuntimeInstanceEventBus,
3529
+ aA as RuntimeInstanceEventBus,
3171
3530
  RuntimeInstanceRegistry,
3172
- ak2 as RuntimePersistenceCoordinator,
3531
+ aB as RuntimePersistenceCoordinator,
3173
3532
  RuntimeRuleCompiler,
3174
3533
  RuntimeSheetService,
3175
- al2 as RuntimeValidationService,
3176
- a6 as SignShowTypeEnum,
3177
- a2 as SignatureImageDirectionEnum,
3178
- a4 as SignatureNumberTypeEnum,
3179
- a5 as SignatureTimeTypeEnum,
3180
- a7 as SignatureTypeEnum,
3534
+ aC as RuntimeValidationService,
3535
+ a5 as SignShowTypeEnum,
3536
+ a1 as SignatureImageDirectionEnum,
3537
+ a3 as SignatureNumberTypeEnum,
3538
+ a4 as SignatureTimeTypeEnum,
3539
+ a6 as SignatureTypeEnum,
3181
3540
  d2 as SterilizeBatchTableCore,
3182
- e2 as StocktakeTableCore,
3183
- am2 as SubTableCore,
3541
+ e as StocktakeTableCore,
3542
+ aD2 as SubTableCore,
3184
3543
  SubTableCoreFactory,
3185
3544
  f as SubTableType,
3186
- bZ as SummaryApproveHisTypeEnum,
3187
- am as TimeDiffFormat,
3188
- aq as ViewTypeEnum,
3545
+ bN as SummaryApproveHisTypeEnum,
3546
+ aj as TimeDiffFormat,
3547
+ an as ViewTypeEnum,
3189
3548
  W as WarehouseInTableCore,
3190
- f3 as WarehouseInboundTableCore,
3549
+ f2 as WarehouseInboundTableCore,
3191
3550
  g as WarehouseOutTableCore,
3192
- h2 as WarehouseOutboundTableCore,
3193
- ak as WidgetImageSizeMode,
3194
- b_ as applyCheckDsDataToRuntime,
3195
- w as applyConsumeObjectTraceChange,
3196
- b$ as applyMedProCheckDsDataToRuntime,
3551
+ h as WarehouseOutboundTableCore,
3552
+ ah as WidgetImageSizeMode,
3553
+ bO as applyCheckDsDataToRuntime,
3554
+ C as applyConsumeObjectTraceChange,
3555
+ bP as applyMedProCheckDsDataToRuntime,
3197
3556
  baseDataUtils,
3198
- c0 as bindRuntimeTableColumns,
3199
- c1 as buildDeviceBaseQuery,
3200
- bg as buildDeviceFilterQuery,
3201
- an2 as buildFormChangeDisplayRows,
3202
- m as buildObjectLotExtraQuery,
3557
+ bQ as bindRuntimeTableColumns,
3558
+ bR as buildDeviceBaseQuery,
3559
+ ba as buildDeviceFilterQuery,
3560
+ aE as buildFormChangeDisplayRows,
3561
+ t2 as buildObjectLotExtraQuery,
3203
3562
  buildRuntimeFieldPath,
3204
- c2 as calcFillData,
3205
- c3 as calcUtils,
3563
+ bS as calcFillData,
3564
+ bT as calcUtils,
3206
3565
  calculateFormula,
3207
3566
  collectAnnotationItemsByLocation,
3208
3567
  collectFormChangeFieldLocations,
3209
3568
  commonUtils,
3210
3569
  convertHistoricalAnnotationLocation,
3211
- ao2 as convertV1Runtime,
3212
- c as createRuntimeDocumentV2,
3570
+ aF as convertV1Runtime,
3571
+ d as createRuntimeDocumentV2,
3213
3572
  createRuntimeInstanceContext,
3214
- c4 as decodeTableCellRowKey,
3215
- ap as detailsHaveFormChangeRowOps,
3216
- c5 as encodeTableCellRowKey,
3573
+ bU as decodeTableCellRowKey,
3574
+ aG as detailsHaveFormChangeRowOps,
3575
+ bV as encodeTableCellRowKey,
3217
3576
  enrichFormChangeRowDetails,
3218
- c6 as ensureFrontRowKey,
3219
- c7 as ensureTableRowKeys,
3220
- aq2 as extractFormChangeRowDetails,
3221
- c8 as extractKeywordFromQueryData,
3222
- c9 as fetchCheckDsDataForTable,
3223
- ca as fetchCustomCheckDsData,
3577
+ bW as ensureFrontRowKey,
3578
+ bX as ensureTableRowKeys,
3579
+ aH as extractFormChangeRowDetails,
3580
+ bY as extractKeywordFromQueryData,
3581
+ bZ as fetchCheckDsDataForTable,
3582
+ b_ as fetchCustomCheckDsData,
3224
3583
  fetchHistoryConsume,
3225
- cb as fetchMedProCheckDsData,
3584
+ b$ as fetchMedProCheckDsData,
3226
3585
  fetchOperationReceiveQty,
3227
3586
  fetchUdi,
3228
3587
  filterAnnotationItemsUpToCurrent,
3229
- bl as findRuntimeParentRow,
3230
- cc as findRuntimeTableCell,
3588
+ be as findRuntimeParentRow,
3589
+ c0 as findRuntimeTableCell,
3231
3590
  findRuntimeTableRow,
3232
3591
  getAppInfo,
3233
3592
  getBusinessFieldKey,
3234
- cd as getCheckTableSnapshotKey,
3235
- ar as getFormChangeRowKey,
3236
- as as getFormChangeRowOp,
3237
- aZ as getLotLockedReason,
3238
- l as getObjectBomMaterialLotQuery,
3239
- x as getObjectBomProductQuery,
3593
+ c1 as getCheckTableSnapshotKey,
3594
+ aI as getFormChangeRowKey,
3595
+ aJ2 as getFormChangeRowOp,
3596
+ aW as getLotLockedReason,
3597
+ r as getObjectBomMaterialLotQuery,
3598
+ E as getObjectBomProductQuery,
3240
3599
  getParseFormulaVarInfos,
3241
- ce as getParseRuleConfig,
3242
- b0 as getParseRuleInfo,
3243
- b1 as getParseRuleValue,
3244
- cf as getReinspectionDate,
3245
- cg as getRenderedRuntimeTableCell,
3600
+ c2 as getParseRuleConfig,
3601
+ a$ as getParseRuleInfo,
3602
+ b0 as getParseRuleValue,
3603
+ c3 as getReinspectionDate,
3604
+ c4 as getRenderedRuntimeTableCell,
3246
3605
  getRuntimeDataFieldId,
3247
3606
  getRuntimeDependencyOutputKey,
3248
- at as getSubTableQuickFillInfo,
3607
+ aK2 as getSubTableQuickFillInfo,
3249
3608
  getSuiteKey,
3250
- ch as handleOldConfig,
3251
- ci as hasAnyCheckTableSnapshot,
3252
- cj as hasByTableCheckTableSnapshot,
3253
- ck as hasSharedCheckTableSnapshot,
3254
- au as isAnnLocationSelected,
3255
- av as isBlank,
3609
+ c5 as handleOldConfig,
3610
+ c6 as hasAnyCheckTableSnapshot,
3611
+ c7 as hasByTableCheckTableSnapshot,
3612
+ c8 as hasSharedCheckTableSnapshot,
3613
+ aL2 as isAnnLocationSelected,
3614
+ aM2 as isBlank,
3256
3615
  isBomGranted,
3257
3616
  isEdhrSuite,
3258
3617
  isEqmSuite,
3259
- aw2 as isFormChangeGhostRow,
3260
- cl as isMedProSuite,
3618
+ aN2 as isFormChangeGhostRow,
3619
+ c9 as isMedProSuite,
3261
3620
  isRowAddedInCurrentFormChange,
3262
- cm as isTableRowKeyMatch,
3263
- cn as jsonSchemaUtils,
3264
- co as judgeUnique,
3265
- aY as materialCheck,
3266
- cp as migrateDiagonalDirectionToVertex,
3621
+ ca as isTableRowKeyMatch,
3622
+ cb as jsonSchemaUtils,
3623
+ cc as judgeUnique,
3624
+ aV as materialCheck,
3625
+ cd as migrateDiagonalDirectionToVertex,
3267
3626
  nextFormChangeRowViewHistoryId,
3268
- f2 as normalizeAIOcrTmpl,
3269
- y2 as normalizeHistoricalAutofillRow,
3270
- d as normalizeHistoricalBusinessRow,
3271
- ax2 as normalizeHistoricalFieldConfig,
3272
- b2 as normalizeRefLoaderResult,
3627
+ l as normalizeAIOcrTmpl,
3628
+ G as normalizeHistoricalAutofillRow,
3629
+ j as normalizeHistoricalBusinessRow,
3630
+ aO2 as normalizeHistoricalFieldConfig,
3631
+ b1 as normalizeRefLoaderResult,
3273
3632
  normalizeRuntime,
3274
3633
  parseFrontConfig,
3275
3634
  parseRuntimeFieldPath,
3276
3635
  parseUdi,
3277
- ay2 as pickObjectFieldKeys,
3278
- az2 as recordSubtableRowAdd,
3279
- aA as recordSubtableRowDelete,
3280
- be as refUtils,
3281
- cq as relocateDeletedRowsToEnd,
3636
+ aP2 as pickObjectFieldKeys,
3637
+ aQ2 as recordSubtableRowAdd,
3638
+ aR as recordSubtableRowDelete,
3639
+ b8 as refUtils,
3640
+ aS as relocateDeletedRowsToEnd,
3282
3641
  renderUtils,
3283
- cr as requestMedProCheckDsData,
3284
- cs as requestNonMedProCheckDsData,
3285
- aB as resolveAnnotationFieldLocation,
3286
- ao as resolveDiagonalVertex,
3642
+ ce as requestMedProCheckDsData,
3643
+ cf as requestNonMedProCheckDsData,
3644
+ aT as resolveAnnotationFieldLocation,
3645
+ al as resolveDiagonalVertex,
3287
3646
  t as resolveFieldRenderComponent,
3288
- aC as resolveFormChangeRowUi,
3289
- p2 as resolveObjectBomEntry,
3290
- r as resolveObjectFieldKeys,
3291
- aD as resolveRowFormChangeMark,
3647
+ aU as resolveFormChangeRowUi,
3648
+ y2 as resolveObjectBomEntry,
3649
+ v as resolveObjectFieldKeys,
3650
+ aV2 as resolveRowFormChangeMark,
3292
3651
  resolveUdiQuery,
3293
- q as runWithFillProduct,
3294
- j as setSelectAnnotationId,
3295
- aE as setSelectMobileTdId,
3652
+ z as runWithFillProduct,
3653
+ p2 as setSelectAnnotationId,
3654
+ aW2 as setSelectMobileTdId,
3296
3655
  s as setSelectValidatorId,
3297
- aS as sqlUtils,
3298
- ct as stockCheck,
3299
- aF as stripLegacyFormConfigFromPaper,
3656
+ cg as splitRuntimeDataPath,
3657
+ aP as sqlUtils,
3658
+ ch as stockCheck,
3659
+ aX2 as stripLegacyFormConfigFromPaper,
3300
3660
  transformUtils,
3301
- C as useDependency,
3661
+ R as useDependency,
3302
3662
  useEbrWikiFactoryV2,
3303
- F as useFieldPresentation,
3663
+ S as useFieldPresentation,
3304
3664
  u2 as useFormModel,
3305
3665
  u as useFormTmplConfig,
3306
3666
  useMaterialBalance,
3307
3667
  useNocodeEmitter,
3308
- t2 as useNocodeFormWidget,
3309
- cu as useOnlineFormActionButton,
3310
- bm as useOnlineFormTransformField2Component,
3668
+ A2 as useNocodeFormWidget,
3669
+ ci as useOnlineFormActionButton,
3670
+ bf as useOnlineFormTransformField2Component,
3311
3671
  useRenderPageFactory,
3312
- G as useRuntimeEditorFlusher,
3313
- i as useRuntimeInstanceServices,
3314
- k as useRuntimeRowState,
3315
- A2 as useStyles,
3316
- h as useWidgetStaticAttrs,
3317
- v as validateObjectBomForScan,
3672
+ T as useRuntimeEditorFlusher,
3673
+ o2 as useRuntimeInstanceServices,
3674
+ q as useRuntimeRowState,
3675
+ Q2 as useStyles,
3676
+ m as useWidgetStaticAttrs,
3677
+ x as validateObjectBomForScan,
3318
3678
  validateObjectBomQtyOnSubmit,
3319
- a_ as validateReinspectionDate
3679
+ aX as validateReinspectionDate
3320
3680
  };