@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,5 +1,5 @@
1
1
  import { f as fontStyleAttrs } from "./config.enum-B8UZQTON.js";
2
- import { C as ComponentTypeEnum } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
+ import { C as ComponentTypeEnum } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
3
3
  import "vue";
4
4
  import { pick } from "lodash-es";
5
5
  import "dayjs";
@@ -1,9 +1,9 @@
1
1
  import { get, pick } from "lodash-es";
2
- import { C as ComponentTypeEnum, a$ as BindCmpStyleEnum } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
+ import { C as ComponentTypeEnum, a_ as BindCmpStyleEnum } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
3
3
  import "vue";
4
4
  import "dayjs";
5
5
  import "ant-design-vue";
6
- import { B as BaseComponent } from "./BaseComponent-Dri2NRAY.js";
6
+ import { B as BaseComponent } from "./BaseComponent-vcQYIdIV.js";
7
7
  class Textarea extends BaseComponent {
8
8
  component = ComponentTypeEnum.Textarea;
9
9
  wrapperCmpConfig({ data }) {
package/dist/index.es.js CHANGED
@@ -1,5 +1,5 @@
1
- import { G, H, J, K, M, N, O, Q, U, B, W, X, Y, Z, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, x, a9, aa, y, ab, P, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, h } from "./index-DrA9ZgS7.js";
2
- import { O as O2, _, V } from "./online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-BEX02BrW.js";
1
+ import { G, H, J, K, M, N, O, Q, U, B, W, X, Y, Z, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, x, a9, aa, y, ab, P, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, h } from "./index-bLaVMu7L.js";
2
+ import { O as O2, _, V } from "./online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-1sgb8Alq.js";
3
3
  export {
4
4
  G as AiTmplEditor,
5
5
  H as AiTmplModal,
@@ -1,5 +1,5 @@
1
1
  import { reactive, inject, provide } from "vue";
2
- import { E as api, F as FIELD_TYPE, H as CreateType } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
+ import { E as api, F as FIELD_TYPE, H as CreateType } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
3
3
  class MCRender {
4
4
  /**
5
5
  * 提示信息
@@ -162,7 +162,9 @@ class FormModelController {
162
162
  */
163
163
  getFormFieldOptions(subModelKey) {
164
164
  const fields = subModelKey ? this.getSubModelFields(subModelKey) : this.masterModel?.fields;
165
- return (fields ?? []).filter((field) => !this.isSystemField(field) && !this.isSubField(field)).map((field) => ({
165
+ return (fields ?? []).filter(
166
+ (field) => !this.isSystemField(field) && !this.isSubField(field) && !this.isObjectField(field)
167
+ ).map((field) => ({
166
168
  ...field,
167
169
  label: `${field.name}`,
168
170
  value: `${field.modelKey}.${field.key}`
@@ -215,6 +217,10 @@ class FormModelController {
215
217
  isSystemField(field) {
216
218
  return field.createType === CreateType.SYSTEM;
217
219
  }
220
+ /** 是否是对象字段类型 */
221
+ isObjectField(field) {
222
+ return field.type === FIELD_TYPE.OBJECT_TYPE;
223
+ }
218
224
  /**
219
225
  * 获取主模型里子表字段对应的子模型key
220
226
  *
@@ -1,10 +1,16 @@
1
1
  import { createVNode, defineComponent, computed, openBlock, createElementBlock, normalizeStyle, normalizeClass, unref, Fragment, createElementVNode, createTextVNode, toDisplayString, renderList, createBlock, createCommentVNode, ref, onMounted, resolveComponent, nextTick, watch, withCtx, withKeys, mergeProps, h, toRaw, withModifiers } from "vue";
2
2
  import { I as Icon, a as useNamespace } from "./AntdIcon-DCIaV352.js";
3
- import { Y as FormTypeEnum, a8 as _export_sfc, aA as FormDesignEnum, E as api, J as useModal, bP as ControlStatusEnum } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
3
+ import { X as FormTypeEnum, a7 as _export_sfc, ax as FormDesignEnum, E as api, J as useModal, bD as ControlStatusEnum } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
4
4
  import { isArray, cloneDeep, orderBy } from "lodash-es";
5
5
  import "dayjs";
6
6
  import { Form } from "ant-design-vue";
7
7
  import { VxeTable, VxeColumn } from "vxe-table";
8
+ var ProductTypeEnum = /* @__PURE__ */ ((ProductTypeEnum2) => {
9
+ ProductTypeEnum2["RAW_MATERIAL"] = "rawMaterial";
10
+ ProductTypeEnum2["SEMI_FINISHED_PRODUCT"] = "semiFinishedProduct";
11
+ ProductTypeEnum2["FINISHED_PRODUCT"] = "finishedProduct";
12
+ return ProductTypeEnum2;
13
+ })(ProductTypeEnum || {});
8
14
  var SEARCH_SEVICE = /* @__PURE__ */ ((SEARCH_SEVICE2) => {
9
15
  SEARCH_SEVICE2["EQ"] = "eq";
10
16
  SEARCH_SEVICE2["IEQ"] = "iEq";
@@ -1270,6 +1276,7 @@ export {
1270
1276
  CloseOutlined as C,
1271
1277
  EmptyImg as E,
1272
1278
  OnlineFormModelModal as O,
1279
+ ProductTypeEnum as P,
1273
1280
  SEARCH_SEVICE as S,
1274
1281
  VersionSelect as V,
1275
1282
  _sfc_main as _
@@ -1,9 +1,9 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, toDisplayString } from "vue";
2
- import { P as PaginationFormat } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
+ import { P as PaginationFormat } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
3
3
  import "lodash-es";
4
4
  import "dayjs";
5
5
  import "ant-design-vue";
6
- import { j as calcText } from "./index-DrA9ZgS7.js";
6
+ import { j as calcText } from "./index-bLaVMu7L.js";
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  __name: "pagination-design",
9
9
  props: {
@@ -0,0 +1,4 @@
1
+ import { k as _sfc_main } from "./index-bLaVMu7L.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -1,4 +1,4 @@
1
- import { d as captureRuntimePrintSnapshot, w as waitPrintFonts, e as waitPrintImages, p as printPagesInIframe } from "./index-DrA9ZgS7.js";
1
+ import { d as captureRuntimePrintSnapshot, w as waitPrintFonts, e as waitPrintImages, p as printPagesInIframe } from "./index-bLaVMu7L.js";
2
2
  async function printRuntimeInstance(record, basicInfo, renderSnapshot, signal, options = {}) {
3
3
  if (!record.controller) throw new Error("表单尚未完成初始化,暂时无法打印");
4
4
  const snapshot = await record.controller.preparePrintSnapshot(
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, provide, ref, onErrorCaptured, onBeforeUnmount, openBlock, createBlock, unref } from "vue";
2
- import { R as RuntimeFormStateStore, I as RuntimeInstanceRegistry, N as NCB_PROVIDE } from "./dynamic-table-action-BQfJFJ4j.js";
3
- import { S as SubTableCoreFactory, R as RuntimeInstanceController } from "./sub-table-factory-CNkIUJTC.js";
4
- import { _ as _sfc_main$1 } from "./index-DrA9ZgS7.js";
2
+ import { U as RuntimeFormStateStore, W as RuntimeInstanceRegistry, N as NCB_PROVIDE } from "./dynamic-table-action-ixEHBudI.js";
3
+ import { S as SubTableCoreFactory, R as RuntimeInstanceController } from "./sub-table-factory-sC8iCJWs.js";
4
+ import { _ as _sfc_main$1 } from "./index-bLaVMu7L.js";
5
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
6
  __name: "print-snapshot-renderer",
7
7
  props: {
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, ref, computed, watch, openBlock, createElementBlock, normalizeClass, createElementVNode } from "vue";
2
- import { B as BwipCodeTypeOptions, l as loadBwip } from "./index-DrA9ZgS7.js";
2
+ import { B as BwipCodeTypeOptions, l as loadBwip } from "./index-bLaVMu7L.js";
3
3
  const _hoisted_1 = ["src"];
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
5
5
  __name: "qrcode-design",
@@ -1,4 +1,4 @@
1
- import { dk as registerInstance, dl as createEvent, dm as getColumnByProp, dn as timeout, dp as getVisibleSourceItem, dq as getColumns, dr as rowTypes, ds as GroupingRowPlugin, dt as StretchColumn, du as isStretchPlugin, dv as AutoSizeColumnPlugin, dw as FilterPlugin, dx as ExportFilePlugin, dy as SortingPlugin, dz as ColumnMovePlugin, dA as ThemeService, dB as h, dC as Host, dD as getElement, dE as BasePlugin, dF as reduce, dG as columnTypes, dH as debounce, dI as RESIZE_INTERVAL, dJ as DimensionStore, dK as gatherTrimmedItems, dL as getColumnSizes, dM as getItemByIndex, dN as DataStore, dO as getSourceItem, dP as getSourceItemVirtualIndexByProp, dQ as getColumnType, dR as setSourceByPhysicalIndex, dS as setSourceByVirtualIndex, dT as SelectionStore, dU as cropCellToMax, dV as nextCell, dW as isRowType, dX as ViewportStore } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
1
+ import { d6 as registerInstance, d7 as createEvent, d8 as getColumnByProp, d9 as timeout, da as getVisibleSourceItem, db as getColumns, dc as rowTypes, dd as GroupingRowPlugin, de as StretchColumn, df as isStretchPlugin, dg as AutoSizeColumnPlugin, dh as FilterPlugin, di as ExportFilePlugin, dj as SortingPlugin, dk as ColumnMovePlugin, dl as ThemeService, dm as h, dn as Host, dp as getElement, dq as BasePlugin, dr as reduce, ds as columnTypes, dt as debounce, du as RESIZE_INTERVAL, dv as DimensionStore, dw as gatherTrimmedItems, dx as getColumnSizes, dy as getItemByIndex, dz as DataStore, dA as getSourceItem, dB as getSourceItemVirtualIndexByProp, dC as getColumnType, dD as setSourceByPhysicalIndex, dE as setSourceByVirtualIndex, dF as SelectionStore, dG as cropCellToMax, dH as nextCell, dI as isRowType, dJ as ViewportStore } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
2
2
  import { H as HEADER_SLOT, D as DATA_SLOT, g as getScrollDimension, v as viewportDataPartition, F as FOOTER_SLOT, C as CONTENT_SLOT } from "./viewport.helpers-CoCAvmZs-D_JddDC6.js";
3
3
  import { g as getPropertyFromEvent } from "./events-BvSmBueA-VK7djXcC.js";
4
4
  class ColumnDataProvider {
@@ -1,8 +1,8 @@
1
- import { dk as registerInstance, dB as h, dC as Host, dl as createEvent, dO as getSourceItem, dD as getElement, e0 as ColumnService, e1 as MOBILE_CLASS, e2 as SELECTION_BORDER_CLASS, e3 as getCellData, e4 as getCellEditor, e5 as getRange, e6 as isRangeSingleCell, e7 as codesLetter, dX as ViewportStore, dN as DataStore, e8 as calculateRowHeaderSize, e9 as ROW_HEADER_TYPE, ea as getScrollbarSize, eb as FOCUS_CLASS, dM as getItemByIndex, dn as timeout, ec as CELL_HANDLER_CLASS, dH as debounce, ed as TMP_SELECTION_BG_CLASS, dI as RESIZE_INTERVAL, ee as getItemByPosition } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
1
+ import { d6 as registerInstance, dm as h, dn as Host, d7 as createEvent, dA as getSourceItem, dp as getElement, dO as ColumnService, dP as MOBILE_CLASS, dQ as SELECTION_BORDER_CLASS, dR as getCellData, dS as getCellEditor, dT as getRange, dU as isRangeSingleCell, dV as codesLetter, dJ as ViewportStore, dz as DataStore, dW as calculateRowHeaderSize, dX as ROW_HEADER_TYPE, dY as getScrollbarSize, dZ as FOCUS_CLASS, dy as getItemByIndex, d9 as timeout, d_ as CELL_HANDLER_CLASS, dt as debounce, d$ as TMP_SELECTION_BG_CLASS, du as RESIZE_INTERVAL, e0 as getItemByPosition } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
2
2
  import { v as verifyTouchTarget, g as getPropertyFromEvent } from "./events-BvSmBueA-VK7djXcC.js";
3
- import { i as isEditInput, a as isShortcutModifier, b as isClear, c as isTab, d as isEnterKeyValue, e as isCopy, f as isCut, g as isPaste, h as isAll } from "./edit.utils-CXmmCnxE-CvJGxh2v.js";
3
+ import { i as isEditInput, a as isShortcutModifier, b as isClear, c as isTab, d as isEnterKeyValue, e as isCopy, f as isCut, g as isPaste, h as isAll } from "./edit.utils-CXmmCnxE-Dq-jFR6z.js";
4
4
  import { H as HEADER_SLOT } from "./viewport.helpers-CoCAvmZs-D_JddDC6.js";
5
- import { L as LocalScrollTimer, a as LocalScrollService, g as getContentSize, t as throttle } from "./throttle-Cpk1LoGk-Ch-cqj2G.js";
5
+ import { L as LocalScrollTimer, a as LocalScrollService, g as getContentSize, t as throttle } from "./throttle-Cpk1LoGk-BreMfOwP.js";
6
6
  const Attribution = class {
7
7
  constructor(hostRef) {
8
8
  registerInstance(this, hostRef);
@@ -1,5 +1,5 @@
1
- import { dn as timeout, dk as registerInstance, dl as createEvent, dB as h, ef as EDIT_INPUT_WR, dC as Host, dD as getElement, dH as debounce, ei as DRAGG_TEXT, dO as getSourceItem, ee as getItemByPosition } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
- import { d as isEnterKeyValue, c as isTab, j as isEditorCtrConstructible } from "./edit.utils-CXmmCnxE-CvJGxh2v.js";
1
+ import { d9 as timeout, d6 as registerInstance, d7 as createEvent, dm as h, e1 as EDIT_INPUT_WR, dn as Host, dp as getElement, dt as debounce, e4 as DRAGG_TEXT, dA as getSourceItem, e0 as getItemByPosition } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
2
+ import { d as isEnterKeyValue, c as isTab, j as isEditorCtrConstructible } from "./edit.utils-CXmmCnxE-Dq-jFR6z.js";
3
3
  class TextEditor {
4
4
  constructor(data, saveCallback) {
5
5
  this.data = data;
@@ -1,5 +1,5 @@
1
- import { ej as PSEUDO_GROUP_ITEM, ek as GROUP_EXPANDED, el as GROUP_DEPTH, dB as h, em as GROUP_EXPAND_BTN, en as DATA_ROW, dO as getSourceItem, eo as isGroupingColumn, ep as GROUP_COLUMN_PROP, eq as getCellRaw, er as DATA_COL, es as CELL_CLASS, et as Build, eu as isRowDragService, ev as DRAG_ICON_CLASS, ew as DRAGGABLE_CLASS, ex as getCellDataParsed, ey as GROUP_EXPAND_EVENT, dk as registerInstance, dl as createEvent, e0 as ColumnService, ez as isGrouping, dC as Host, dD as getElement, dM as getItemByIndex, eA as HEADER_ROW_CLASS, eB as HEADER_ACTUAL_ROW_CLASS, eC as ROW_FOCUSED_CLASS, eD as HEADER_SORTABLE_CLASS, eE as MIN_COL_SIZE, eb as FOCUS_CLASS, eF as FilterButton, eG as HeaderCellRenderer, eH as HEADER_CLASS } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
- import { L as LocalScrollTimer, a as LocalScrollService, g as getContentSize, t as throttle } from "./throttle-Cpk1LoGk-Ch-cqj2G.js";
1
+ import { e5 as PSEUDO_GROUP_ITEM, e6 as GROUP_EXPANDED, e7 as GROUP_DEPTH, dm as h, e8 as GROUP_EXPAND_BTN, e9 as DATA_ROW, dA as getSourceItem, ea as isGroupingColumn, eb as GROUP_COLUMN_PROP, ec as getCellRaw, ed as DATA_COL, ee as CELL_CLASS, ef as Build, eg as isRowDragService, eh as DRAG_ICON_CLASS, ei as DRAGGABLE_CLASS, ej as getCellDataParsed, ek as GROUP_EXPAND_EVENT, d6 as registerInstance, d7 as createEvent, dO as ColumnService, el as isGrouping, dn as Host, dp as getElement, dy as getItemByIndex, em as HEADER_ROW_CLASS, en as HEADER_ACTUAL_ROW_CLASS, eo as ROW_FOCUSED_CLASS, ep as HEADER_SORTABLE_CLASS, eq as MIN_COL_SIZE, dZ as FOCUS_CLASS, er as FilterButton, es as HeaderCellRenderer, et as HEADER_CLASS } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
2
+ import { L as LocalScrollTimer, a as LocalScrollService, g as getContentSize, t as throttle } from "./throttle-Cpk1LoGk-BreMfOwP.js";
3
3
  import { H as HEADER_SLOT, C as CONTENT_SLOT, F as FOOTER_SLOT } from "./viewport.helpers-CoCAvmZs-D_JddDC6.js";
4
4
  const SortingSign = ({ column }) => {
5
5
  var _a;
@@ -1,4 +1,4 @@
1
- import { dk as registerInstance, dl as createEvent, dH as debounce, dB as h, dY as AndOrButton, dZ as ReorderButton, d_ as TrashButton, d$ as isFilterBtn, dC as Host, dD as getElement } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
1
+ import { d6 as registerInstance, d7 as createEvent, dt as debounce, dm as h, dK as AndOrButton, dL as ReorderButton, dM as TrashButton, dN as isFilterBtn, dn as Host, dp as getElement } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
2
2
  (function closest() {
3
3
  if (!Element.prototype.matches) {
4
4
  Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
@@ -0,0 +1,4 @@
1
+ import { f as _sfc_main } from "./index-bLaVMu7L.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString } from "vue";
2
- import { a8 as _export_sfc } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
+ import { a7 as _export_sfc } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
3
3
  const _hoisted_1 = { class: "absolute top-0px left-0px h-full w-full serialnumber-area" };
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
5
5
  __name: "serialnumber-design",
@@ -1,5 +1,5 @@
1
- import { aH, aB, q, cI, H, aI, aJ, cJ, at, av, F, X, af, G, aA, bn, cK, au, T, cL, V, W, bo, a9, U } from "../dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
- import { O, _, S, V as V2 } from "../online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-BEX02BrW.js";
1
+ import { aE, ay, q, cs, H, aF, aG, ct, aq, as, F, V, ac, G, ax, bg, aZ, cu, ar, T, cv, U, W, bh, a8, R } from "../dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
2
+ import { O, _, P, S, V as V2 } from "../online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-1sgb8Alq.js";
3
3
  var Platform = /* @__PURE__ */ ((Platform2) => {
4
4
  Platform2["WEB"] = "web";
5
5
  Platform2["MOBILE"] = "mobile";
@@ -49,41 +49,43 @@ var GctMqttTopsEnum = /* @__PURE__ */ ((GctMqttTopsEnum2) => {
49
49
  return GctMqttTopsEnum2;
50
50
  })(GctMqttTopsEnum || {});
51
51
  export {
52
- aH as ASSIGNMENTSTRATEGY_ENUM,
53
- aB as BASIC_FIELD_TYPES,
52
+ aE as ASSIGNMENTSTRATEGY_ENUM,
53
+ ay as BASIC_FIELD_TYPES,
54
54
  q as BUSINESS_FIELD_TYPES,
55
55
  ButtonOpeEnum,
56
56
  ButtonSize,
57
57
  ButtonStyle,
58
58
  ButtonType,
59
59
  ButtonType_vant,
60
- cI as CardControlEnum,
60
+ cs as CardControlEnum,
61
61
  H as CreateType,
62
- aI as Dependency_ENUM,
63
- aJ as EntityModelCategoryEnum,
64
- cJ as EntityModelTypeEnum,
65
- at as ExpressionModeEnum,
66
- av as ExpressionTabEnum,
62
+ aF as Dependency_ENUM,
63
+ aG as EntityModelCategoryEnum,
64
+ ct as EntityModelTypeEnum,
65
+ aq as ExpressionModeEnum,
66
+ as as ExpressionTabEnum,
67
67
  F as FIELD_TYPE,
68
- X as FieldDefaultValueTypeEnum,
69
- af as FieldIconMap,
68
+ V as FieldDefaultValueTypeEnum,
69
+ ac as FieldIconMap,
70
70
  G as FieldTypeToJs,
71
- aA as FormDesignEnum,
72
- bn as FormulaRuleFieldKeyEnum,
71
+ ax as FormDesignEnum,
72
+ bg as FormulaRuleFieldKeyEnum,
73
73
  GctMqttTopsEnum,
74
74
  O as OnlineFormModelModal,
75
75
  _ as OnlineFormModelSelect,
76
76
  Platform,
77
- cK as RecordNoGenerateEnum,
78
- au as ReturnTypeEnum,
77
+ P as ProductTypeEnum,
78
+ aZ as ProductionIdentificationTypeEnum,
79
+ cu as RecordNoGenerateEnum,
80
+ ar as ReturnTypeEnum,
79
81
  S as SEARCH_SEVICE,
80
82
  SignatureTypeEnum,
81
83
  T as TRACE_FIELD_TYPES,
82
- cL as TagTypeEnum,
83
- V as UniqueConstraintType,
84
+ cv as TagTypeEnum,
85
+ U as UniqueConstraintType,
84
86
  V2 as VersionSelect,
85
87
  W as WAREHOUSE_FIELD_TYPES,
86
- bo as formulaRuleFieldDict,
87
- a9 as normalizeFieldType,
88
- U as onlineFormMasterModelTypeEnum
88
+ bh as formulaRuleFieldDict,
89
+ a8 as normalizeFieldType,
90
+ R as onlineFormMasterModelTypeEnum
89
91
  };
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, computed, openBlock, createBlock, unref, normalizeClass } from "vue";
2
2
  import { a as useNamespace } from "./AntdIcon-DCIaV352.js";
3
- import { m as useDrop, T as TransferType, h as useModelFields, o as getFieldIcon, S as SingleDrop } from "./index-DrA9ZgS7.js";
4
- import { a8 as _export_sfc } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
3
+ import { m as useDrop, T as TransferType, h as useModelFields, o as getFieldIcon, S as SingleDrop } from "./index-bLaVMu7L.js";
4
+ import { a7 as _export_sfc } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
5
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
6
  __name: "single-field-drop",
7
7
  props: {
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, computed, resolveComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, createVNode } from "vue";
2
- import { a8 as _export_sfc } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DZRtpBe8.js";
2
+ import { a7 as _export_sfc } from "./dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-CKf2tZG7.js";
3
3
  const _hoisted_1 = { class: "row" };
4
4
  const _hoisted_2 = { class: "row mt-6px" };
5
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -0,0 +1,2 @@
1
+ import { BusinessFieldProfile } from '../../../../types';
2
+ export declare const fields: BusinessFieldProfile[];
@@ -51,7 +51,7 @@ export declare const CLEAR_ON_MATERIAL_CONTAINER_SELECT: readonly ["production_c
51
51
  export declare const CLEAR_ON_PRODUCT_EMPTY: readonly ["product_id_name_", "product_id_code_", "product_id_spec_"];
52
52
  /** 相关字段变更时需重算物料禁用态 */
53
53
  export declare const PRODUCT_EDITABILITY_WATCH: readonly ["material_container_no_", "material_container_no__id_", "mfg_order_id_", "production_container_id_"];
54
- /** 生产批次 / 物料批 选项回填 */
54
+ /** 生产批次 / 物料批选项回填:仅带出工单号,工单选择项保持互斥 */
55
55
  export declare const FILL_FROM_CONTAINER_OPTION: readonly [{
56
56
  readonly optionField: "product_id_";
57
57
  readonly toField: "product_id_";
@@ -64,9 +64,6 @@ export declare const FILL_FROM_CONTAINER_OPTION: readonly [{
64
64
  }, {
65
65
  readonly optionField: "product_id_spec_";
66
66
  readonly toField: "product_id_spec_";
67
- }, {
68
- readonly optionField: "mfg_order_id_";
69
- readonly toField: "mfg_order_id_";
70
67
  }, {
71
68
  readonly optionField: "mfg_order_code_";
72
69
  readonly toField: "mfg_order_code_";
@@ -127,9 +124,6 @@ export declare const fillFromOption: readonly [{
127
124
  }, {
128
125
  readonly optionField: "product_id_spec_";
129
126
  readonly toField: "product_id_spec_";
130
- }, {
131
- readonly optionField: "mfg_order_id_";
132
- readonly toField: "mfg_order_id_";
133
127
  }, {
134
128
  readonly optionField: "mfg_order_code_";
135
129
  readonly toField: "mfg_order_code_";
@@ -0,0 +1,2 @@
1
+ import { BusinessFieldProfile } from '../../../../types';
2
+ export declare const fields: BusinessFieldProfile[];
@@ -35,6 +35,8 @@ export declare class SubTableCoreFactory {
35
35
  initSubTableCore(context: RuntimePageCtx): void;
36
36
  /** 通过tid获取子表核心 */
37
37
  getSubCoreByTid(tid: string): SubTableCore | undefined;
38
+ /** 只按已注册的业务类型识别,普通数据表及未知类型不参与空行过滤。 */
39
+ getBusinessTableFields(): string[];
38
40
  /**
39
41
  * 初始化表单数据
40
42
  * @param params
@@ -5,13 +5,14 @@ import { ScanModalInput } from './utils/scan';
5
5
  * 库存调拨表 Core
6
6
  * - Profile:禁用字段 / 行默认值 / 物料清空
7
7
  * - 物料走库存选择(allocateProduct)+ FILL_FROM_INVENTORY_OPTION
8
- * - 扫码:库存匹配,连续扫码每次新增一行
8
+ * - 扫码:库存匹配,优先填充物料和批次均为空的行,否则新增一行
9
9
  */
10
10
  export declare class AllocateTableCore extends ProfileDrivenSubTableCore {
11
11
  /** 绘制UI相关工具 */
12
12
  get render(): import('../..').ISubTableRender;
13
13
  /** 指定的仓库id */
14
14
  get warehouseId(): any;
15
+ protected isEmptyScanRow(row: Record<string, unknown>): boolean;
15
16
  handleFieldTd: SubTableCore['handleFieldTd'];
16
17
  calcFieldQuery: SubTableCore['calcFieldQuery'];
17
18
  calcSubTableActionMenu: SubTableCore['calcSubTableActionMenu'];
@@ -3,6 +3,7 @@ import { SubTableActionEnum } from '../../components/document-sub-table-action';
3
3
  import { IDefaultValueMap, IFieldStatus, IRuntimeSubTableCtx } from '../types';
4
4
  import { TdHandler } from '../utils/td-handler';
5
5
  import { SubTableCoreFactory } from '../factory/sub-table-factory';
6
+ import { ScanRecordPickerOptions } from '../../types/render/sub-table-render';
6
7
  import { FormModelController } from '../../hooks/form-model';
7
8
  import { RefCustomLoader } from '../../interface/ref-loader';
8
9
  /**
@@ -187,7 +188,7 @@ export declare class SubTableCore {
187
188
  /**
188
189
  * 扫码多条候选时选择一行(1 条自动选中)
189
190
  */
190
- protected pickScanRecord(records: Record<string, unknown>[]): Promise<Record<string, unknown> | undefined>;
191
+ protected pickScanRecord(records: Record<string, unknown>[], options?: ScanRecordPickerOptions): Promise<Record<string, unknown> | undefined>;
191
192
  /**
192
193
  * 处理扫码弹窗回调
193
194
  * 参数由扫码弹窗决定
@@ -53,6 +53,8 @@ export declare class FormModelController {
53
53
  isPresetField(field: FieldMetaDTO): boolean;
54
54
  /** 是否是系统字段 */
55
55
  isSystemField(field: FieldMetaDTO): boolean;
56
+ /** 是否是对象字段类型 */
57
+ isObjectField(field: FieldMetaDTO): boolean;
56
58
  /**
57
59
  * 获取主模型里子表字段对应的子模型key
58
60
  *
@@ -1,4 +1,5 @@
1
1
  import { IBomEntry, IMaterialConsumeData } from './types';
2
+ type ConsumeDataSource = 'current' | 'history';
2
3
  /** 行级校验错误:提交时挂到对应单元格,扫码/切组仍可读 message */
3
4
  export declare class McRowValidateError extends Error {
4
5
  readonly targetFieldId: 'product_id_' | 'material_no_' | 'qty_' | 'expiration_date_';
@@ -69,9 +70,9 @@ export declare class BomEntryValidator {
69
70
  * @param arr
70
71
  * @return {*}
71
72
  */
72
- filterGroupData(arr: IMaterialConsumeData[]): IMaterialConsumeData[];
73
- /** 行是否属于本 BOM 组(优先 bom_entry_id_,避免跨组 product_id_ 误判) */
74
- isRowInGroup(row: IMaterialConsumeData): boolean;
73
+ filterGroupData(arr: IMaterialConsumeData[], source?: ConsumeDataSource): IMaterialConsumeData[];
74
+ /** 按数据来源优先匹配关联标识,无关联标识时按物料判断。 */
75
+ isRowInGroup(row: IMaterialConsumeData, source?: ConsumeDataSource): boolean;
75
76
  /** 组内已选中的物料(整批替代;不排除当前行) */
76
77
  getGroupExistingProductId(tableData: IMaterialConsumeData[]): string | undefined;
77
78
  /**
@@ -98,17 +99,17 @@ export declare class BomEntryValidator {
98
99
  * @param arr
99
100
  * @return {*}
100
101
  */
101
- calcQtyConsumed(arr?: IMaterialConsumeData[]): number;
102
+ calcQtyConsumed(arr?: IMaterialConsumeData[], source?: ConsumeDataSource): number;
102
103
  /** 上下限校验统一按需求单位口径取转换数量,历史数据未转换时兼容原数量。 */
103
- calcQtyForBounds(arr: IMaterialConsumeData[]): number;
104
+ calcQtyForBounds(arr: IMaterialConsumeData[], source?: ConsumeDataSource): number;
104
105
  /**
105
106
  * 计算自定义的数量校验的最大值和最小值
106
107
  * @param data
107
108
  * @return {*}
108
109
  */
109
110
  calcCustomNumberLimit(data: IMaterialConsumeData): Promise<{
110
- max: any;
111
- min: any;
111
+ max: number | undefined;
112
+ min: number | undefined;
112
113
  }>;
113
114
  /**
114
115
  * 通用校验 5:本组上料数量是否满足 qty_validation_rule_。
@@ -249,3 +250,4 @@ export declare class BomEntriesValidator {
249
250
  export declare function isRowInBomGroup(row: IMaterialConsumeData, util: BomEntryValidator): boolean;
250
251
  /** 设置整组编辑态:editing=true → is_confirmed_=false */
251
252
  export declare function setGroupEditState(table: IMaterialConsumeData[], util: BomEntryValidator, editing: boolean): void;
253
+ export {};
@@ -42,8 +42,10 @@ export declare class MaterialConsumeTableController {
42
42
  mainFormState: Ref<any>;
43
43
  /** 表单数据状态(由 factory bindRuntime 注入):未填报 / STASH / SUBMIT */
44
44
  dataStatus?: string;
45
- /** factory 是否已绑定过运行时(避免重复 initTableData) */
46
- private runtimeBound;
45
+ /** 实例数据只在 LOADED 前准备一次,运行时绑定不再重新生成行。 */
46
+ private initialDataPrepared;
47
+ /** 最近一次同步需求数量时使用的数量依赖。 */
48
+ private syncedMaterialNoNum;
47
49
  /** 多 Sheet / 同屏多实例下,弹层和异步交互使用该键隔离。 */
48
50
  private runtimeOwnerId;
49
51
  /** 表单是否已暂存或提交(已处理过则不再跑初始化) */
@@ -52,6 +54,7 @@ export declare class MaterialConsumeTableController {
52
54
  get materialNoNum(): any;
53
55
  /** 物料消耗模式(自身没有配置的话取环境的默认值) */
54
56
  get mcPattern(): MaterialConsumptionPatternEnum;
57
+ get hasFormInstance(): boolean;
55
58
  /**
56
59
  * 解析规则数据对象
57
60
  */
@@ -171,21 +174,20 @@ export declare class MaterialConsumeTableController {
171
174
  openScanModal(opts: {
172
175
  title: string;
173
176
  }): Promise<void>;
174
- /**
175
- * 打开扫描弹窗
176
- * @param opts
177
- */
178
- openBomModal(): Promise<void>;
179
- /**
180
- * 表单加载时由 factory 调用:绑定稳定数据源并初始化行数据。
181
- * 不在分页组件 setup 中调用,避免跨页挂载重复 init。
182
- */
177
+ /** Store 创建前准备物料行和数量,全部 Sheet 的 LOADED 共用这份数据。 */
178
+ prepareInitialData(opts: {
179
+ formState: Record<string, any>;
180
+ field: string;
181
+ dataStatus?: string;
182
+ defaultRowData?: Record<string, any>;
183
+ }): void;
184
+ /** 数量依赖实际变化时才重算,避免首次绑定覆盖 LOADED 中的回填。 */
185
+ syncQtyRequiredFromBomIfChanged(): void;
186
+ /** 只绑定运行时 Store,不重新生成行或修改行内容。 */
183
187
  bindRuntime(opts: {
184
- ownerId: string;
185
188
  tableDataRef: Ref<any>;
186
189
  mainFormState?: Ref<any>;
187
190
  dataStatus?: string;
188
- defaultRowData?: Record<string, any>;
189
191
  }): void;
190
192
  /**
191
193
  * 消耗表组件挂载时调用:只同步视图依赖,不初始化数据、不注册 watch。
@@ -265,8 +267,10 @@ export declare class MaterialConsumeTableController {
265
267
  * qty 相关派生字段统一入口(改 qty_ / 扫码 / 删行 等都走这里)
266
268
  */
267
269
  updateDerivedQtyFields(): void;
270
+ /** 同步 BOM 主物料的需求数量单位,未关联 BOM 的行保留原单位。 */
271
+ private syncRequiredUomFromBom;
268
272
  /**
269
- * 设置默认值,如工序,需求数量/已消耗数量
273
+ * 设置默认值,如工序,需求数量/需求数量单位/已消耗数量
270
274
  * @param row
271
275
  */
272
276
  setDefaultValue(row: IMaterialConsumeData): void;
@@ -1,5 +1,5 @@
1
1
  import { IBomEntry, IFormTmplBom, IMaterialConsumeData } from './types';
2
- import { BaseCoreComponent } from '../../types';
2
+ import { BaseCoreComponent, IMaterialConsumeTableInfo } from '../../types';
3
3
  import { MaterialConsumeTableController } from './material-consume-table-controller';
4
4
  import { FormInstBomResponse } from '@gct-paas/api/apaas';
5
5
  import { MaterialConsumptionPatternEnum } from '../../constant';
@@ -25,6 +25,10 @@ export declare class FormTmplBomController {
25
25
  field2TableMap: Record<string, string>;
26
26
  /** 默认物料消耗模式 */
27
27
  defaultMCPattern: MaterialConsumptionPatternEnum;
28
+ /** 表单实例身份与 BOM 数据是否存在无关,模板展示也会创建完整控制器。 */
29
+ hasFormInstance: boolean;
30
+ /** 按页面中的表解析后的配置,页面与打印共用。 */
31
+ private resolvedTmplBomList;
28
32
  constructor();
29
33
  /**
30
34
  * 创建独立的打印展示控制器:不请求 BOM/历史消耗,不初始化或修正已填报行。
@@ -57,13 +61,14 @@ export declare class FormTmplBomController {
57
61
  * @readonly
58
62
  */
59
63
  get enableSequenceLoading(): boolean;
60
- /**
61
- * 初始化模板的物料消耗的配置
62
- */
64
+ private createDefaultConfig;
65
+ /** 有实例时读取实例配置,无实例时仅创建默认展示控制器。 */
63
66
  init(data: {
64
- formInstBom: FormInstBomResponse;
65
- operationId: string;
66
- materialNo: string;
67
+ formInstBom?: FormInstBomResponse | null;
68
+ materialConsumeTableList: IMaterialConsumeTableInfo[];
69
+ hasFormInstance: boolean;
70
+ operationId?: string;
71
+ materialNo?: string;
67
72
  productQty?: number;
68
73
  }): Promise<void>;
69
74
  /**
@@ -84,6 +89,14 @@ export declare class FormTmplBomController {
84
89
  * @param defaultMap
85
90
  */
86
91
  handleDefaultMap(defaultMap: Record<string, any>): void;
92
+ /** 全部 Sheet 的消耗表统一在 LOADED 前准备。 */
93
+ initializeFormState(opts: {
94
+ formState: Record<string, any>;
95
+ dataStatus?: string;
96
+ defaultDataMap: Record<string, any>;
97
+ }): void;
98
+ /** 钩子若修改数量依赖,在创建 Store 和分页前按原规则重算。 */
99
+ finalizeInitialQuantities(): void;
87
100
  submitValidate(): Promise<{
88
101
  isValid: boolean;
89
102
  fields: Record<string, any[]> | undefined;
@@ -4,6 +4,8 @@ import { RequiredQtyCalcRule, ScanParamType } from '../../types/common/base';
4
4
  export interface IBomEntry {
5
5
  /** 明细id */
6
6
  id_: string;
7
+ /** 父级关联 ID */
8
+ parent_id_?: string;
7
9
  /** 排序字段 */
8
10
  sort_num_: number;
9
11
  /** 物料id */
@@ -18,6 +20,8 @@ export interface IBomEntry {
18
20
  product_spec_: string;
19
21
  /** 单位用量 */
20
22
  qty_required_: number;
23
+ /** 主物料配置的需求数量单位 */
24
+ uom_id_?: string;
21
25
  /** 删除标记 */
22
26
  deleted_?: boolean;
23
27
  /** 上料方式 */
@@ -160,6 +164,8 @@ export interface IMaterialConsumeData {
160
164
  deleted_?: boolean;
161
165
  /** 后端需要的bom明细id */
162
166
  bom_entry_id_?: string;
167
+ /** 历史消耗的 BOM 父级关联标识,用于匹配 BOM 明细的 parent_id_ */
168
+ bom_entry_parent_id_?: string;
163
169
  /** 扫码未回填 product_id_ 的兜底行标记(记录模式内部瞬态,行生命周期内持久,不向后端提交) */
164
170
  _scanFallback?: boolean;
165
171
  /** 本次上料汇总数量 */
@@ -62,9 +62,10 @@ export declare function getObjectBomMaterialLotQuery(opts: {
62
62
  } | null;
63
63
  /**
64
64
  * 表单提交:校验所有物料消耗对象(失败打在对应单元格,收集全部错误)
65
- * - 记录模式 / 人为指定 / 无配置:不校 BOM
66
- * - 未开人为指定:有物料则必须在实例 BOM 中
67
- * - 数量为空留给字段必填;有值且开了数量校验才校数量 vs 需求数量
65
+ * - 物料范围:无配置 / 人为指定 / 记录模式,不校验物料是否属于 BOM
66
+ * - 记录模式:仅开启人为指定时,继续执行数量校验
67
+ * - BOM 模式未开人为指定:有物料则必须在实例 BOM 中
68
+ * - 数量与需求数量均有值、非查看类型且开启数量校验时,执行数量规则
68
69
  * - 人为指定:用 objectBom.entries_[0];否则用 bomEntries 中与对象物料匹配的明细
69
70
  */
70
71
  export declare function validateObjectBomQtyOnSubmit(opts: {
@@ -0,0 +1,19 @@
1
+ export interface ObjectProductDefault {
2
+ value: unknown;
3
+ sourceData?: Record<string, any>;
4
+ }
5
+ /** 准备数据和生成默认值使用同一份字段列表,按字段对象隔离不同对象的默认值。 */
6
+ export type ObjectProductDefaultMap = WeakMap<object, ObjectProductDefault>;
7
+ interface Options {
8
+ enabled: boolean;
9
+ fields: readonly unknown[];
10
+ objectInitialValues?: readonly {
11
+ objectField: string;
12
+ objectFieldName?: string;
13
+ values?: Record<string, any>;
14
+ }[];
15
+ onWarning?: (message: string) => void;
16
+ }
17
+ /** 只解析对象物料默认值、查询对应详情;赋值和填充统一由默认值入口执行。 */
18
+ export declare function prepareObjectProductDefaults({ enabled, fields, objectInitialValues, onWarning, }: Options): Promise<ObjectProductDefaultMap>;
19
+ export {};