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

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 (170) hide show
  1. package/dist/{BaseComponent-DKaXUiq4.js → BaseComponent-CD_dAL9D.js} +3 -4
  2. package/dist/{VueVideoPlayer-BeylL5J6.js → VueVideoPlayer-DQQlv_cp.js} +2 -2
  3. package/dist/{align-editor-r0dHXFka.js → align-editor-DchzBHaC.js} +1 -1
  4. package/dist/{barcode-design-BTNQYLEC.js → barcode-design-BBW5cG3v.js} +2 -3
  5. package/dist/base/index.es.js +306 -465
  6. package/dist/{diagonal-design-ByuNrPs-.js → diagonal-design-CawGqmc7.js} +2 -3
  7. package/dist/{dynamic-table-action-CHY5xNLE.js → dynamic-table-action-Dw7AIthU.js} +941 -315
  8. package/dist/{dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-8yB6zly8.js → dynamic-table-action.vue_vue_type_style_index_0_scoped_53d7e66c_lang-DEjLEs33.js} +1190 -1809
  9. package/dist/{edit.utils-CXmmCnxE-Cu6obgSA.js → edit.utils-CXmmCnxE-B7lpVZjb.js} +1 -1
  10. package/dist/excel.css +4664 -3585
  11. package/dist/{exceljs.min-BAX9-ZsR.js → exceljs.min-DDPQIUli.js} +2 -2
  12. package/dist/{font-editor-DiFflAdU.js → font-editor-n8zk8Vt2.js} +3 -3
  13. package/dist/{image-design-FDLY6DFg.js → image-design-D4mIDz9K.js} +2 -2
  14. package/dist/{index-ChINVccu.js → index--MetH_r4.js} +3 -4
  15. package/dist/{index-dXOMuxrp.js → index-1klMDz7G.js} +2 -3
  16. package/dist/{index-Go0PUrqy.js → index-4p1VXlOx.js} +1 -2
  17. package/dist/{index-hllsJVUF.js → index-B0u6FHDq.js} +4 -5
  18. package/dist/{index-AGp5c3cl.js → index-BMsHMGap.js} +2 -3
  19. package/dist/{index-rZVFumSM.js → index-BW95iBc7.js} +2 -3
  20. package/dist/{index-B8pwnxas.js → index-BWoOPv6-.js} +2 -3
  21. package/dist/{index-CRIhEnfm.js → index-BZ7bC20P.js} +1 -2
  22. package/dist/{index-DsQp4UCs.js → index-BcHwRIXW.js} +3 -4
  23. package/dist/{index-DJiuJgNx.js → index-Bm8wYtHB.js} +1 -2
  24. package/dist/{index-B-hfUWEs.js → index-Boy8--Ns.js} +2 -3
  25. package/dist/{index-De6oWEZJ.js → index-C-NpFAft.js} +3 -3
  26. package/dist/{index-DgLLlaiF.js → index-C4t8sSlN.js} +1 -2
  27. package/dist/{index-7u6Pmaax.js → index-CAc9drK5.js} +1 -2
  28. package/dist/{index-BCsDTwbK.js → index-CI6Hl1Ns.js} +1 -2
  29. package/dist/{index-DDvfW5-d.js → index-CXnuud67.js} +2 -3
  30. package/dist/{index-D3s4H_1P.js → index-CYSJt1Zc.js} +3 -7
  31. package/dist/{index-BIeu5JwZ.js → index-Ch88zDje.js} +2 -3
  32. package/dist/{index-gGYvWSjX.js → index-CmjTSiUa.js} +2 -3
  33. package/dist/{index-2WkF904L.js → index-DPf5_q0T.js} +3 -4
  34. package/dist/{index-BTfYHAPC.js → index-DUztXGMj.js} +2 -3
  35. package/dist/{index-C6jVSwAq.js → index-DfFakGrF.js} +2 -3
  36. package/dist/{index-C3SyXJii.js → index-DgybKcgI.js} +2 -3
  37. package/dist/{index-DGODLCja.js → index-Dh0_kanw.js} +1 -2
  38. package/dist/{index-Dlihqay0.js → index-DiPWQwMU.js} +29517 -27220
  39. package/dist/{index-C8LoodYv.js → index-DiWzNeZJ.js} +6 -4
  40. package/dist/{index-CbmHekMw.js → index-Do-QyvWW.js} +2 -3
  41. package/dist/{index-DEHsGK91.js → index-DvMu7-8y.js} +1 -2
  42. package/dist/{index-Dl_ZgCRB.js → index-H4f-e99t.js} +2 -3
  43. package/dist/{index-DXNSTk5n.js → index-S8Dj5ycu.js} +2 -3
  44. package/dist/{index-jkltWTT1.js → index-TZy8JxSW.js} +5 -8
  45. package/dist/{index-CFVecFFb.js → index-_Ec5LAW9.js} +2 -2
  46. package/dist/{index-KxrgWfEL.js → index-gHOlYnAA.js} +1 -2
  47. package/dist/{index-DkYlfWLa.js → index-r0yHBje3.js} +2 -3
  48. package/dist/{index-BdFPuj12.js → index-r9t3crs-.js} +1 -2
  49. package/dist/index.es.js +10 -14
  50. package/dist/{mb-render-_IUbyYCY.js → mb-render-sgVmAe6_.js} +1 -1
  51. package/dist/{online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-CnQiVFDN.js → online-form-model-select.vue_vue_type_script_setup_true_name_online-form-model-select_lang-DDJetWQU.js} +1 -2
  52. package/dist/{pagination-design-BPbb9CiE.js → pagination-design-lckCQWcK.js} +2 -3
  53. package/dist/paper-widget-design-Nd5VjI7n.js +4 -0
  54. package/dist/{print-runtime-instance-BmJ9GNr2.js → print-runtime-instance-Dckul2Bk.js} +1 -1
  55. package/dist/{print-snapshot-renderer-NCND8gig.js → print-snapshot-renderer-lub7u9sp.js} +3 -3
  56. package/dist/{qrcode-design-00WrOrbQ.js → qrcode-design-M0HzGVjM.js} +1 -1
  57. package/dist/{revo-grid.entry-BZADj2ve.js → revo-grid.entry-Dr4S1tgO.js} +1 -1
  58. package/dist/{revogr-attribution_7.entry-DbQASE7d.js → revogr-attribution_7.entry-27u9hxgM.js} +3 -3
  59. package/dist/{revogr-clipboard_3.entry-BUDhUelS.js → revogr-clipboard_3.entry-DxjljgJl.js} +2 -2
  60. package/dist/{revogr-data_4.entry-0V57Lz9p.js → revogr-data_4.entry-CnSalg4D.js} +2 -2
  61. package/dist/{revogr-filter-panel.entry-BJEYteeW.js → revogr-filter-panel.entry-CSsekbYc.js} +1 -1
  62. package/dist/seal-design-kuAsmNq1.js +4 -0
  63. package/dist/{serialnumber-design-BbjW4gnZ.js → serialnumber-design-DUiLiTSj.js} +1 -1
  64. package/dist/shared/index.es.js +25 -25
  65. package/dist/{single-field-drop-CZmE1hGc.js → single-field-drop-CF_r0dCX.js} +2 -2
  66. package/dist/{size-editor-CcYZKUn5.js → size-editor-DNMqRicI.js} +1 -1
  67. package/dist/src/domain/table/business/material/material-substitution/profile/field-keys.d.ts +1 -37
  68. package/dist/src/domain/table/business/material/material-substitution/runtime/row-change-handlers.d.ts +0 -3
  69. package/dist/src/domain/table/design/autofill-expander.d.ts +0 -2
  70. package/dist/src/domain/table/design/hooks/on-field-attach.d.ts +0 -6
  71. package/dist/src/domain/table/index.d.ts +1 -1
  72. package/dist/src/domain/table/types.d.ts +0 -2
  73. package/dist/src/index.d.ts +0 -8
  74. package/dist/src/nocode-base/src/core/factory/sub-table-factory.d.ts +2 -0
  75. package/dist/src/nocode-base/src/core/sub-table/profile-driven-sub-table-core.d.ts +3 -3
  76. package/dist/src/nocode-base/src/core/sub-table/sub-table-core.d.ts +0 -1
  77. package/dist/src/nocode-base/src/core/sub-table/utils/sterilize/field-keys.d.ts +2 -1
  78. package/dist/src/nocode-base/src/hooks/material-consume/bom-validator.d.ts +9 -7
  79. package/dist/src/nocode-base/src/hooks/material-consume/material-consume-table-controller.d.ts +17 -14
  80. package/dist/src/nocode-base/src/hooks/material-consume/tmpl-bom-controller.d.ts +8 -0
  81. package/dist/src/nocode-base/src/hooks/material-consume/types.d.ts +6 -0
  82. package/dist/src/nocode-base/src/hooks/material-consume-object/initialize-autofill.d.ts +3 -1
  83. package/dist/src/nocode-base/src/hooks/render-page/initialize-runtime.d.ts +7 -3
  84. package/dist/src/nocode-base/src/hooks/render-page/types.d.ts +1 -7
  85. package/dist/src/nocode-base/src/hooks/useCalcFunction.d.ts +2 -8
  86. package/dist/src/nocode-base/src/hooks/useRenderPageFactory.d.ts +6 -46
  87. package/dist/src/nocode-base/src/hooks/useRuntimeInstanceServices.d.ts +0 -21
  88. package/dist/src/nocode-base/src/interface/ref-loader.d.ts +1 -12
  89. package/dist/src/nocode-base/src/interface/transform.d.ts +5 -0
  90. package/dist/src/nocode-base/src/runtime/conversions/v1-runtime.d.ts +1 -1
  91. package/dist/src/nocode-base/src/runtime/formula-utils.d.ts +2 -0
  92. package/dist/src/nocode-base/src/runtime/multi-sheet-runtime.d.ts +3 -1
  93. package/dist/src/nocode-base/src/runtime/runtime-context.d.ts +4 -0
  94. package/dist/src/nocode-base/src/runtime/runtime-field-initializer.d.ts +0 -1
  95. package/dist/src/nocode-base/src/runtime/runtime-field-state.d.ts +2 -5
  96. package/dist/src/nocode-base/src/runtime/runtime-form-state-store.d.ts +6 -2
  97. package/dist/src/nocode-base/src/runtime/runtime-instance-registry.d.ts +5 -5
  98. package/dist/src/nocode-base/src/runtime/table-row-identity.d.ts +2 -0
  99. package/dist/src/nocode-base/src/types/common/base.d.ts +0 -4
  100. package/dist/src/online-form/src/components/device/device-select.vue.d.ts +1 -1
  101. package/dist/src/online-form/src/views/__cell_widgets__/cell-widget-design.vue.d.ts +1 -0
  102. package/dist/src/online-form/src/views/__cell_widgets__/common/quick-search-editor/quick-search.util.d.ts +8 -0
  103. package/dist/src/online-form/src/views/designer/constants/index.d.ts +0 -1
  104. package/dist/src/online-form/src/views/designer/conversions/normalize-paper-grid.d.ts +1 -1
  105. package/dist/src/online-form/src/views/designer/hooks/useAllSpreadSheets.d.ts +35 -124
  106. package/dist/src/online-form/src/views/designer/hooks/useSpreadSheet.d.ts +16 -63
  107. package/dist/src/online-form/src/views/designer/modules/base/designer-wrapper.vue.d.ts +1 -0
  108. package/dist/src/online-form/src/views/designer/modules/duplicate-field-notice.vue.d.ts +2 -0
  109. package/dist/src/online-form/src/views/designer/modules/panel/panel-data-init-config/object-init/hooks/useObjectInit.d.ts +2 -0
  110. package/dist/src/online-form/src/views/designer/modules/panel/sub-table/comps/use-dynamic-sub-table-panel.d.ts +12 -6
  111. package/dist/src/online-form/src/views/designer/modules/xlsx-import-summary.vue.d.ts +11 -0
  112. package/dist/src/online-form/src/views/designer/types/index.d.ts +2 -5
  113. package/dist/src/online-form/src/views/designer/types/sheets.d.ts +2 -0
  114. package/dist/src/online-form/src/views/designer/utils/cell-field-placements.d.ts +12 -0
  115. package/dist/src/online-form/src/views/designer/utils/xlsx-parser.d.ts +9 -3
  116. package/dist/src/online-form/src/views/render/__components__/_field_/_base_/cell/cell-media.vue.d.ts +1 -1
  117. package/dist/src/online-form/src/views/render/__components__/_field_/seal/component/seal-floating-field.vue.d.ts +1 -0
  118. package/dist/src/online-form/src/views/render/__components__/_field_/seal/component/seal-runtime-layer.vue.d.ts +1 -0
  119. package/dist/src/online-form/src/views/render/__components__/_field_/seal/component/use-seal-stamp.d.ts +4 -1
  120. package/dist/src/online-form/src/views/render/__components__/_field_/seal/index.d.ts +0 -1
  121. package/dist/src/online-form/src/views/render/__components__/_field_/trace/composables/useReferenceLabel.d.ts +4 -0
  122. package/dist/src/shared/components/DoubleInput/double-input.vue.d.ts +2 -162
  123. package/dist/src/shared/components/Signature/logic/index.d.ts +0 -14
  124. package/dist/src/shared/enum/field-type.d.ts +2 -7
  125. package/dist/src/shared/utils/cell-wrap.d.ts +9 -0
  126. package/dist/src/shared/utils/field-size.d.ts +2 -0
  127. package/dist/src/shared/utils/grid-size.d.ts +2 -0
  128. package/dist/src/shared/utils/lot2sn.d.ts +14 -1
  129. package/dist/src/shared/utils/query-filter.d.ts +24 -0
  130. package/dist/{sub-table-factory-B0YWwWSA.js → sub-table-factory-D-GcNTOB.js} +106 -209
  131. package/dist/{text-design-BjtdVSoz.js → text-design-BfZf4B27.js} +5 -5
  132. package/dist/{throttle-Cpk1LoGk-BVommE6v.js → throttle-Cpk1LoGk-B4SDzSMU.js} +1 -1
  133. package/dist/{timediff-design-DLlIUaqv.js → timediff-design-BeO94tLR.js} +1 -2
  134. package/dist/{trace-like-wrapper-D91DvdFd.js → trace-like-wrapper-Xc4cr21n.js} +5 -3
  135. package/dist/{value-editor.vue_vue_type_style_index_0_lang-CoD8ISWI.js → value-editor.vue_vue_type_style_index_0_lang-CMpVHBLK.js} +2 -3
  136. package/dist/web-render/index.es.js +3 -4
  137. package/dist/{widget-barcode-BYiE3tsx.js → widget-barcode-CrfBj8iv.js} +4 -5
  138. package/dist/{widget-diagonal-DHQFi6CR.js → widget-diagonal-C3Nho_Um.js} +3 -4
  139. package/dist/{widget-image-id71BcU3.js → widget-image-CjsL9QW8.js} +5 -5
  140. package/dist/{widget-line-Cp0b7r3U.js → widget-line-BtvpVv_s.js} +2 -3
  141. package/dist/{widget-pagination-BtlUxqBg.js → widget-pagination-DAUQo2nI.js} +5 -6
  142. package/dist/{widget-power-DHRfJ48L.js → widget-power-yUHZ4Hoc.js} +3 -4
  143. package/dist/{widget-qrcode-DNCRxnIr.js → widget-qrcode-DJtT9NaM.js} +3 -4
  144. package/dist/{widget-rangelimit-BSSBKq1C.js → widget-rangelimit-BhadVdCu.js} +3 -3
  145. package/dist/{widget-serialnumber-CUluNTQw.js → widget-serialnumber-WMHB8nl6.js} +1 -1
  146. package/dist/{widget-text-BdzPeniw.js → widget-text-C4dD9JF3.js} +5 -5
  147. package/dist/{widget-timediff-DerdwjRU.js → widget-timediff-C9d8_3hY.js} +2 -3
  148. package/package.json +2 -2
  149. package/dist/paper-widget-design-BBuWfCac.js +0 -4
  150. package/dist/seal-design-CJuuDF64.js +0 -4
  151. package/dist/src/domain/document-business/business/product-release/profile.d.ts +0 -2
  152. package/dist/src/domain/document-business/business/product-release/service.d.ts +0 -2
  153. package/dist/src/domain/document-business/index.d.ts +0 -2
  154. package/dist/src/domain/document-business/registry.d.ts +0 -2
  155. package/dist/src/domain/document-business/runtime/field-query-runtime.d.ts +0 -4
  156. package/dist/src/domain/document-business/types.d.ts +0 -24
  157. package/dist/src/domain/field/number/product-release-qty-manifest.d.ts +0 -2
  158. package/dist/src/domain/field/query-filter.d.ts +0 -15
  159. package/dist/src/domain/table/business/material/material-substitution/runtime/select-loaders.d.ts +0 -8
  160. package/dist/src/domain/table/business/sterilize/entrust-steril-batch-list/profile/field-keys.d.ts +0 -2
  161. package/dist/src/domain/table/business/warehouse/shared/autofill-source-labels.d.ts +0 -19
  162. package/dist/src/nocode-base/src/hooks/formula-params-cache.d.ts +0 -15
  163. package/dist/src/nocode-base/src/hooks/inspection-module-qty.d.ts +0 -4
  164. package/dist/src/nocode-base/src/hooks/render-page/runtime-data-sources.d.ts +0 -45
  165. package/dist/src/nocode-base/src/hooks/render-page/sterilization-date.d.ts +0 -3
  166. package/dist/src/online-form/src/views/designer/utils/placed-fields.d.ts +0 -9
  167. package/dist/src/online-form/src/views/designer/utils/template-placed-fields.d.ts +0 -7
  168. package/dist/src/shared/components/LimitedNumberInput/limited-number-input.vue.d.ts +0 -41
  169. package/dist/src/shared/components/LimitedNumberInput/number-input-rules.d.ts +0 -16
  170. package/dist/src/shared/utils/withRequestCache.d.ts +0 -27
@@ -80,9 +80,9 @@ export declare class MaterialRequisitionTableCore extends ProfileDrivenSubTableC
80
80
  }
81
81
  /**
82
82
  * 物料替换表 Core
83
- * - 被替换物料从当前行生产 SN 的历史消耗中选择,可按行内工序过滤
84
- * - 替换物料从 LOT/SN 中选择,回填批次和物料信息,保留替换数量
85
- * - 替换物料批号回填替换物料及其信息
83
+ * - 被替换物料从历史消耗中选择,并按当前 SN / 工序过滤
84
+ * - 选择后回填批号、物料信息和原上料数量
85
+ * - 替换物料批号回填替换物料信息
86
86
  * - 条码映射结果优先填充空行,否则追加新行
87
87
  */
88
88
  export declare class MaterialSubstitutionTableCore extends ProfileDrivenSubTableCore {
@@ -110,7 +110,6 @@ export declare class SubTableCore {
110
110
  calcFieldStatus(params: {
111
111
  rowData: any;
112
112
  field: string;
113
- formChangeStatus?: boolean;
114
113
  }): IFieldStatus;
115
114
  /**
116
115
  * 计算字段的查询条件,如果返回值有值则修改到td的newQueryData里
@@ -28,7 +28,8 @@ export declare const F: {
28
28
  /** 生产日期 */
29
29
  readonly productionDate: "production_date_";
30
30
  };
31
- export { LOCKED_INPUT_FIELDS as STERILIZE_ALWAYS_DISABLED_FIELDS } from '../../../../../../domain/table/business/sterilize/entrust-steril-batch-list/profile/field-keys';
31
+ /** 业务部灭菌表:必然禁用字段(由生产批次号回填,禁止手填) */
32
+ export declare const STERILIZE_ALWAYS_DISABLED_FIELDS: readonly ["product_id_", "product_id_code_", "product_id_spec_", "product_id_name_", "mfg_order_code_", "mfg_order_id_"];
32
33
  /** 行变更 handler:生产批次号清空时的字段集 */
33
34
  export declare const CLEAR_ON_PROD_CONTAINER_EMPTY: readonly ["product_id_", "product_id__lb_", "product_id_name_", "product_id_code_", "product_id_spec_", "qty_", "mfg_order_code_", "mfg_order_id_", "mfg_order_id__lb_", "production_date_"];
34
35
  export declare const fillFromOption: ({
@@ -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
  /** 表单是否已暂存或提交(已处理过则不再跑初始化) */
@@ -172,21 +174,20 @@ export declare class MaterialConsumeTableController {
172
174
  openScanModal(opts: {
173
175
  title: string;
174
176
  }): Promise<void>;
175
- /**
176
- * 打开扫描弹窗
177
- * @param opts
178
- */
179
- openBomModal(): Promise<void>;
180
- /**
181
- * 表单加载时由 factory 调用:绑定稳定数据源并初始化行数据。
182
- * 不在分页组件 setup 中调用,避免跨页挂载重复 init。
183
- */
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,不重新生成行或修改行内容。 */
184
187
  bindRuntime(opts: {
185
- ownerId: string;
186
188
  tableDataRef: Ref<any>;
187
189
  mainFormState?: Ref<any>;
188
190
  dataStatus?: string;
189
- defaultRowData?: Record<string, any>;
190
191
  }): void;
191
192
  /**
192
193
  * 消耗表组件挂载时调用:只同步视图依赖,不初始化数据、不注册 watch。
@@ -266,8 +267,10 @@ export declare class MaterialConsumeTableController {
266
267
  * qty 相关派生字段统一入口(改 qty_ / 扫码 / 删行 等都走这里)
267
268
  */
268
269
  updateDerivedQtyFields(): void;
270
+ /** 同步 BOM 主物料的需求数量单位,未关联 BOM 的行保留原单位。 */
271
+ private syncRequiredUomFromBom;
269
272
  /**
270
- * 设置默认值,如工序,需求数量/已消耗数量
273
+ * 设置默认值,如工序,需求数量/需求数量单位/已消耗数量
271
274
  * @param row
272
275
  */
273
276
  setDefaultValue(row: IMaterialConsumeData): void;
@@ -89,6 +89,14 @@ export declare class FormTmplBomController {
89
89
  * @param defaultMap
90
90
  */
91
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;
92
100
  submitValidate(): Promise<{
93
101
  isValid: boolean;
94
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
  /** 本次上料汇总数量 */
@@ -9,9 +9,11 @@ interface Options {
9
9
  fields: readonly unknown[];
10
10
  objectInitialValues?: readonly {
11
11
  objectField: string;
12
+ objectFieldName?: string;
12
13
  values?: Record<string, any>;
13
14
  }[];
15
+ onWarning?: (message: string) => void;
14
16
  }
15
17
  /** 只解析对象物料默认值、查询对应详情;赋值和填充统一由默认值入口执行。 */
16
- export declare function prepareObjectProductDefaults({ enabled, fields, objectInitialValues, }: Options): Promise<ObjectProductDefaultMap>;
18
+ export declare function prepareObjectProductDefaults({ enabled, fields, objectInitialValues, onWarning, }: Options): Promise<ObjectProductDefaultMap>;
17
19
  export {};
@@ -1,6 +1,6 @@
1
1
  import { RenderModeEnum, FormTypeEnum, PlatformEnum } from '../../constant';
2
2
  import { RuntimeFormStateStore, RuntimeInstanceRegistry, RuntimeInstanceRecord } from '../../runtime';
3
- import { IProps, IPayload, RuntimeInstanceSource, RuntimeSelfInfo } from './types';
3
+ import { IProps, IPayload, RuntimeInstanceSource } from './types';
4
4
  import { useMaterialBalance } from '../material-balance/useMaterialBalance';
5
5
  export declare function createRuntimeInstanceInitializer(props: IProps, payload: IPayload, getConsumeData: ReturnType<typeof useMaterialBalance>['getConsumeData']): (id: string, result: RuntimeInstanceSource) => Promise<{
6
6
  runtimeContext: import('../..').RuntimeInstanceContext;
@@ -41,10 +41,14 @@ export declare function createRuntimeInstanceInitializer(props: IProps, payload:
41
41
  productSearchFields: string;
42
42
  showPrintFieldBg: any;
43
43
  paramsConfig: Record<string, any> | undefined;
44
- businessType: any;
45
44
  instanceStatus: any;
46
45
  };
47
- selfInfo: RuntimeSelfInfo;
46
+ selfInfo: {
47
+ formType: FormTypeEnum;
48
+ viewType: import('../..').ViewTypeEnum;
49
+ modelKey: string;
50
+ bindKey?: string;
51
+ } & Record<string, any>;
48
52
  } | undefined>;
49
53
  export type PreparedRuntimeInstance = NonNullable<Awaited<ReturnType<ReturnType<typeof createRuntimeInstanceInitializer>>>>;
50
54
  /** 过期请求和批量初始化失败的结果未注册,资源在此释放,不影响当前页面的实例。 */
@@ -1,7 +1,6 @@
1
1
  import { RenderModeEnum, PlatformEnum, BpmnNodeTypeEnum } from '../../constant';
2
2
  import { baseDataUtils } from '../../interface';
3
3
  import { RuntimeFormStateStore } from '../../runtime';
4
- import { DataSourceManagerOptions } from '@gct-paas/form-base';
5
4
  export interface IProps {
6
5
  /** 模板实例id或者模板id */
7
6
  selfId: string | string[] | undefined;
@@ -33,8 +32,6 @@ interface IDeviceConfig {
33
32
  export interface IPayload extends ITemplatePayload, IInstancePayload {
34
33
  /** 工厂类型 */
35
34
  factoryType: 'template' | 'instance' | 'batchInstance' | 'batchTemplate';
36
- /** 表单、实体和业务数源的宿主查询适配器。 */
37
- dataSourceAdapters?: DataSourceManagerOptions['adapters'];
38
35
  /** 请求接口函数 */
39
36
  requestCallback: (...args: any[]) => any;
40
37
  /** 平台参数类型 */
@@ -51,10 +48,7 @@ export interface IPayload extends ITemplatePayload, IInstancePayload {
51
48
  onFormStateReady?: (store: RuntimeFormStateStore) => unknown;
52
49
  }
53
50
  /** 不同平台接口的开放业务元信息;不是运行时索引或提交数据的副本。 */
54
- export type RuntimeSelfInfo = Parameters<typeof baseDataUtils.requestRenderData>[0]['info'] & {
55
- /** detail 返回的交易实例 id,供检验数量查询使用。 */
56
- txnInstId?: string;
57
- };
51
+ export type RuntimeSelfInfo = Parameters<typeof baseDataUtils.requestRenderData>[0]['info'];
58
52
  /** 请求适配后的内部初始化输入,单个/批量入口使用同一约定。 */
59
53
  export interface RuntimeInstanceSource {
60
54
  id?: string;
@@ -1,9 +1,3 @@
1
- export { setFormulaParamsConfig } from './formula-params-cache';
2
- interface DeviceParamConfig {
3
- customFieldKey: string;
4
- lowerLimit?: number | string | null;
5
- upperLimit?: number | string | null;
6
- }
7
- type FetchDeviceParamLimits = (id: any) => Promise<DeviceParamConfig[] | null>;
8
- export declare function configureDeviceParamCheck(fetcher: FetchDeviceParamLimits): void;
1
+ /** 更新当前表单的参数配置;未传入配置时清空上次的数据。 */
2
+ export declare function setFormulaParamsConfig(paramsConfig?: Record<string, any> | null): void;
9
3
  export declare function registerFormulaFuncs(): void;
@@ -3,45 +3,6 @@ import { RuntimeInstanceRegistry } from '../runtime';
3
3
  import { IProps, IPayload } from './render-page/types';
4
4
  export type { IProps, IPayload } from './render-page/types';
5
5
  export declare function useRenderPageFactory(props: IProps, payload: IPayload): {
6
- dataSourceManagerMap: import('vue').ShallowRef<Record<string, {
7
- getSources: () => import('@gct-paas/form-base').DataSourceConfig[];
8
- getContext: () => Record<string, unknown>;
9
- canExecute: () => boolean;
10
- reload: (key: string) => Promise<unknown>;
11
- reloadAll: () => Promise<PromiseSettledResult<unknown>[]>;
12
- states: {
13
- readonly [x: string]: {
14
- readonly status: import('@gct-paas/form-base').DataSourceQueryStatus;
15
- readonly data?: Readonly<unknown> | undefined;
16
- readonly error?: string | undefined;
17
- };
18
- };
19
- query: (key: string, parameters?: import('@gct-paas/form-base').DataSourceParameters) => Promise<unknown>;
20
- cancel: (key: string) => boolean;
21
- getResult(key: string): unknown;
22
- initialize: () => Promise<PromiseSettledResult<unknown>[]>;
23
- queryOnValueChange(keys: readonly string[]): Promise<PromiseSettledResult<unknown>[]>;
24
- dispose(): void;
25
- }>, Record<string, {
26
- getSources: () => import('@gct-paas/form-base').DataSourceConfig[];
27
- getContext: () => Record<string, unknown>;
28
- canExecute: () => boolean;
29
- reload: (key: string) => Promise<unknown>;
30
- reloadAll: () => Promise<PromiseSettledResult<unknown>[]>;
31
- states: {
32
- readonly [x: string]: {
33
- readonly status: import('@gct-paas/form-base').DataSourceQueryStatus;
34
- readonly data?: Readonly<unknown> | undefined;
35
- readonly error?: string | undefined;
36
- };
37
- };
38
- query: (key: string, parameters?: import('@gct-paas/form-base').DataSourceParameters) => Promise<unknown>;
39
- cancel: (key: string) => boolean;
40
- getResult(key: string): unknown;
41
- initialize: () => Promise<PromiseSettledResult<unknown>[]>;
42
- queryOnValueChange(keys: readonly string[]): Promise<PromiseSettledResult<unknown>[]>;
43
- dispose(): void;
44
- }>>;
45
6
  counter: import('vue').Ref<number, number>;
46
7
  finisher: import('vue').Ref<number, number>;
47
8
  loading: import('vue').ComputedRef<boolean>;
@@ -87,7 +48,6 @@ export declare function useRenderPageFactory(props: IProps, payload: IPayload):
87
48
  renderPurpose?: "print" | "pdf" | undefined;
88
49
  showPrintFieldBg?: boolean | undefined;
89
50
  paramsConfig?: Record<string, any> | undefined;
90
- businessType?: string | undefined;
91
51
  instanceStatus?: string | undefined;
92
52
  }[], IBasicInfoItem[] | {
93
53
  key: string;
@@ -130,7 +90,6 @@ export declare function useRenderPageFactory(props: IProps, payload: IPayload):
130
90
  renderPurpose?: "print" | "pdf" | undefined;
131
91
  showPrintFieldBg?: boolean | undefined;
132
92
  paramsConfig?: Record<string, any> | undefined;
133
- businessType?: string | undefined;
134
93
  instanceStatus?: string | undefined;
135
94
  }[]>;
136
95
  selfInfoList: import('vue').Ref<{
@@ -139,14 +98,17 @@ export declare function useRenderPageFactory(props: IProps, payload: IPayload):
139
98
  viewType: import('..').ViewTypeEnum;
140
99
  modelKey: string;
141
100
  bindKey?: string | undefined;
142
- txnInstId?: string | undefined;
143
- }[], import('./render-page/types').RuntimeSelfInfo[] | {
101
+ }[], ({
102
+ formType: import('..').FormTypeEnum;
103
+ viewType: import('..').ViewTypeEnum;
104
+ modelKey: string;
105
+ bindKey?: string;
106
+ } & Record<string, any>)[] | {
144
107
  [x: string]: any;
145
108
  formType: import('..').FormTypeEnum;
146
109
  viewType: import('..').ViewTypeEnum;
147
110
  modelKey: string;
148
111
  bindKey?: string | undefined;
149
- txnInstId?: string | undefined;
150
112
  }[]>;
151
113
  hasData: import('vue').ComputedRef<boolean>;
152
114
  findFormInsInfo: (id: string) => {
@@ -155,7 +117,6 @@ export declare function useRenderPageFactory(props: IProps, payload: IPayload):
155
117
  viewType: import('..').ViewTypeEnum;
156
118
  modelKey: string;
157
119
  bindKey?: string | undefined;
158
- txnInstId?: string | undefined;
159
120
  } | undefined;
160
121
  findBasicInsInfo: (id: string) => {
161
122
  key: string;
@@ -198,7 +159,6 @@ export declare function useRenderPageFactory(props: IProps, payload: IPayload):
198
159
  renderPurpose?: "print" | "pdf" | undefined;
199
160
  showPrintFieldBg?: boolean | undefined;
200
161
  paramsConfig?: Record<string, any> | undefined;
201
- businessType?: string | undefined;
202
162
  instanceStatus?: string | undefined;
203
163
  } | undefined;
204
164
  updateRenderModeType: (uniqueId: string, mode: import('..').RenderModeEnum, updateButton?: boolean) => Promise<void>;
@@ -9,27 +9,6 @@ export declare function useRuntimeInstanceServices(uniqueIdSource?: RuntimeInsta
9
9
  instance: import('vue').ComputedRef<import('..').RuntimeInstanceRecord | undefined>;
10
10
  /** 控制器负责 Sheet 切换、编辑器收口和提交;尚未挂载时为空。 */
11
11
  controller: import('vue').ComputedRef<import('..').RuntimeInstanceController | undefined>;
12
- /** 全部 Sheet 共享的数源管理器,随实例注册与销毁。 */
13
- dataSourceManager: import('vue').ComputedRef<{
14
- getSources: () => import('@gct-paas/form-base').DataSourceConfig[];
15
- getContext: () => Record<string, unknown>;
16
- canExecute: () => boolean;
17
- reload: (key: string) => Promise<unknown>;
18
- reloadAll: () => Promise<PromiseSettledResult<unknown>[]>;
19
- states: {
20
- readonly [x: string]: {
21
- readonly status: import('@gct-paas/form-base').DataSourceQueryStatus;
22
- readonly data?: Readonly<unknown> | undefined;
23
- readonly error?: string | undefined;
24
- };
25
- };
26
- query: (key: string, parameters?: import('@gct-paas/form-base').DataSourceParameters) => Promise<unknown>;
27
- cancel: (key: string) => boolean;
28
- getResult(key: string): unknown;
29
- initialize: () => Promise<PromiseSettledResult<unknown>[]>;
30
- queryOnValueChange(keys: readonly string[]): Promise<PromiseSettledResult<unknown>[]>;
31
- dispose(): void;
32
- } | undefined>;
33
12
  /** 表单级配置独立于 Sheet 的 paper;实例未注册时提供空配置。 */
34
13
  formConfig: import('vue').ComputedRef<Record<string, any>>;
35
14
  /** 实例切换时重新取对应 Store;读取数据使用 .value.state,写入使用 Store 方法。 */
@@ -34,18 +34,7 @@ export type RefCustomLoaderRawResult = RefLoaderNormalizedResult | {
34
34
  dict?: any;
35
35
  pageSize?: number;
36
36
  } | any[];
37
- export type RefCustomLoader = ((params: RefCustomLoaderParams) => Promise<RefCustomLoaderRawResult>) & {
38
- /** 下拉展开前校验;未通过时由字段组件弹出 message 并阻止展开。 */
39
- beforeOpen?: () => Promise<{
40
- allowed: boolean;
41
- message?: string;
42
- }>;
43
- /** 选项关联同一物料时,仍按批次等独立身份高亮。 */
44
- getSelectedKey?: () => string | undefined;
45
- getOptionKey?: (option: RefLoaderNormalizedResult['options'][number]) => string;
46
- /** 选中后立即与主字段一起回填的关联数据。 */
47
- getSelectionPatch?: (record: Record<string, any>) => Record<string, unknown>;
48
- };
37
+ export type RefCustomLoader = (params: RefCustomLoaderParams) => Promise<RefCustomLoaderRawResult>;
49
38
  /** 从 queryData 中提取快捷搜索关键字 */
50
39
  export declare function extractKeywordFromQueryData(queryData?: Record<string, any>): any;
51
40
  /** 将自定义数据源返回值标准化为 ref 组件消费结构 */
@@ -147,6 +147,11 @@ export declare const transformUtils: {
147
147
  };
148
148
  /** 数据转成真实提交数据(二维表要平铺);layout 是所有 Sheet 的业务表汇总索引。 */
149
149
  getSubmitFormData: (formData: any, layout: {
150
+ subTableInfo?: {
151
+ field: string;
152
+ key?: string;
153
+ }[];
154
+ businessTableFields?: readonly string[];
150
155
  subTable2DList?: any[];
151
156
  checkTable2DList?: any[];
152
157
  materialConsumeTableList?: any[];
@@ -3,7 +3,7 @@ import { NormalizedRuntimeDocument, RuntimeNodeMap } from '../multi-sheet-runtim
3
3
  export declare const LEGACY_RUNTIME_SHEET_ID = "__legacy_sheet__";
4
4
  export declare const LEGACY_RUNTIME_SHEET_TITLE = "\u5DE5\u4F5C\u8868 1";
5
5
  /** 历史 runtimeJson 中存放在 paper.props、实际属于整份实例的配置。 */
6
- export declare const LEGACY_RUNTIME_FORM_CONFIG_KEYS: readonly ["globalParams", "paramsMapList", "unitConversionRules", "inspectionDecisionRule", "customDataSource", "dataSources", "fieldFills", "objectInitialValues", "javascript", "checkSignatureConfig", "keepExceptionHighlight", "objectFieldList", "dateObjects"];
6
+ export declare const LEGACY_RUNTIME_FORM_CONFIG_KEYS: readonly ["globalParams", "paramsMapList", "unitConversionRules", "inspectionDecisionRule", "customDataSource", "objectInitialValues", "javascript", "checkSignatureConfig", "keepExceptionHighlight", "objectFieldList", "dateObjects"];
7
7
  /** 历史运行时:paper 和所有节点都直接放在文档顶层。 */
8
8
  export interface RuntimeDocumentV1 extends RuntimeNodeMap {
9
9
  schemaVersion?: 1;
@@ -3,5 +3,7 @@ export declare const getParseFormulaVarInfos: (expr?: string) => {
3
3
  rowArgs: string[];
4
4
  parseInfos: IParseFormulaVar[];
5
5
  };
6
+ /** 计算与变更比较共用同一份输入解析,避免关联字段、空值及聚合的取值语义分叉。 */
7
+ export declare const resolveFormulaData: (expr: string, formData: any, instanceFormState: any) => Record<string, any>;
6
8
  /** 当前行变量从 formData 解析;主表及子表汇总变量从完整实例解析,可跨 Sheet 引用。 */
7
9
  export declare const calculateFormula: (expr: string, formData: any, instanceFormState: any) => Promise<any>;
@@ -1,3 +1,4 @@
1
+ import { FormTypeEnum } from '../constant';
1
2
  /** 当前真实多 Sheet 运行时格式版本。缺少版本号的历史数据按 v1 解析。 */
2
3
  export declare const MULTI_SHEET_SCHEMA_VERSION: 2;
3
4
  export declare const MAX_RUNTIME_SHEETS = 100;
@@ -30,10 +31,11 @@ export interface NormalizedRuntimeDocument {
30
31
  * 将历史 v1 和真实多 Sheet v2 统一为同一种读取结构。
31
32
  *
32
33
  * - v1:顶层 paper + nodes,包装成一个固定标识的虚拟 Sheet。
34
+ * - 文件表单:历史空模板补一个内存中的空根节点,以复用实例 Store 和提交服务。
33
35
  * - v2:读取有序 sheets,并为现有单 Sheet 渲染器组装 dataCenter。
34
36
  * - 未知版本:直接报错,避免旧客户端误写更高版本数据。
35
37
  */
36
- export declare function normalizeRuntime(runtime: unknown): NormalizedRuntimeDocument;
38
+ export declare function normalizeRuntime(runtime: unknown, formType?: FormTypeEnum): NormalizedRuntimeDocument;
37
39
  /**
38
40
  * 将各 Sheet 独立编译得到的旧式 dataCenter 封装为 v2 文档。
39
41
  * 保存前复用统一解析器,保证整份模板的节点唯一性和引用完整性。
@@ -1,4 +1,5 @@
1
1
  import { IPageData } from '../types';
2
+ import { FormTypeEnum } from '../constant';
2
3
  import { NormalizedRuntimeDocument, RuntimeNodeMap } from './multi-sheet-runtime';
3
4
  import { SubTableCoreFactory } from '../core/factory/sub-table-factory';
4
5
  import { FormTmplBomController } from '../hooks/material-consume/tmpl-bom-controller';
@@ -100,6 +101,8 @@ export interface RuntimeInstanceContext {
100
101
  uniqueId: string;
101
102
  instanceId: string;
102
103
  templateId: string;
104
+ /** 文件表单由 PDF 组件分页,不参与工作表布局计算。 */
105
+ formType?: FormTypeEnum;
103
106
  schemaVersion: NormalizedRuntimeDocument['schemaVersion'];
104
107
  formConfig: Record<string, any>;
105
108
  defaultData: Record<string, any>;
@@ -116,6 +119,7 @@ export interface CreateRuntimeInstanceContextOptions {
116
119
  uniqueId: string;
117
120
  instanceId: string;
118
121
  templateId: string;
122
+ formType?: FormTypeEnum;
119
123
  runtime: NormalizedRuntimeDocument;
120
124
  defaultData: Record<string, any>;
121
125
  activeSheetId?: string;
@@ -4,7 +4,6 @@ type InitializerMetadata = {
4
4
  materialNo?: string;
5
5
  params?: string;
6
6
  instanceStatus?: string;
7
- txnInstId?: string;
8
7
  };
9
8
  export declare class RuntimeFieldInitializer {
10
9
  private readonly record;
@@ -1,11 +1,8 @@
1
1
  import { IBasicInfoItem } from '../types';
2
2
  import { RuntimeInstanceRecord } from './runtime-instance-registry';
3
3
  export type RuntimeFieldStateInfo = Pick<IBasicInfoItem, 'renderModeType' | 'modelKey' | 'formType' | 'bpmnType' | 'bpmnFieldAuthMap'> & Partial<Pick<IBasicInfoItem, 'annSwitchStatus' | 'renderPurpose'>>;
4
- /**
5
- * Core 提供业务规则,这里统一合并到静态配置;二维交叉字段使用所属父行的业务状态。
6
- * 表单变更跳过签名锁定,保留字段本身、业务 Profile 和组件依赖施加的限制。
7
- */
8
- export declare function resolveRuntimeFieldProps(record: RuntimeInstanceRecord, props: Record<string, any>, widgetId: string, row?: Record<string, any>, parentRow?: Record<string, any>, formChangeStatus?: boolean): {
4
+ /** Core 提供业务规则,这里统一合并到静态配置;二维交叉字段使用所属父行的业务状态。 */
5
+ export declare function resolveRuntimeFieldProps(record: RuntimeInstanceRecord, props: Record<string, any>, widgetId: string, row?: Record<string, any>, parentRow?: Record<string, any>): {
9
6
  [x: string]: any;
10
7
  };
11
8
  /** 只读展示方式、禁用和校验 blocked 由同一结果派生,UI 与未挂载字段使用相同权限语义。 */
@@ -8,6 +8,8 @@ export interface FormStateChange {
8
8
  paths: string[];
9
9
  /** 整个事务的变更来源。 */
10
10
  source: FormStateMutationSource;
11
+ /** 局部恢复只触发实际变更字段的联动;缺省仍按整份数据恢复处理。 */
12
+ restoreScope?: 'fields';
11
13
  }
12
14
  export type FormStateSubscriber = (change: FormStateChange) => void;
13
15
  /**
@@ -35,7 +37,7 @@ export declare class RuntimeFormStateStore {
35
37
  private readonly reactiveState;
36
38
  /** 每次成功提交一批变更递增一次,保存和提交用它判断快照是否过期。 */
37
39
  revision: number;
38
- /** 是否存在尚未保存的变更;restore 来源不会把实例标记为脏。 */
40
+ /** 是否存在尚未保存的变更;数据恢复及保存回填不会把实例标记为脏。 */
39
41
  dirty: boolean;
40
42
  /** 当前嵌套事务深度;只有最外层事务结束时才递增 revision 并通知订阅方。 */
41
43
  private mutationDepth;
@@ -43,6 +45,7 @@ export declare class RuntimeFormStateStore {
43
45
  private pendingPaths;
44
46
  /** 最外层事务的变更来源,嵌套写入沿用该来源。 */
45
47
  private pendingSource;
48
+ private pendingRestoreScope?;
46
49
  /** 联动、分页失效、自动保存等实例服务登记的变更监听器。 */
47
50
  private readonly subscribers;
48
51
  /** 用户主动修改过的业务路径,供公式和自动填充执行“不覆盖用户输入”策略。 */
@@ -89,6 +92,7 @@ export declare class RuntimeFormStateStore {
89
92
  /**
90
93
  * 保存后只回填后端身份元数据,不能用仅含 id_/front_row_key_ 的数组覆盖当前业务行。
91
94
  * 二维内置复合键可通过原始子行键匹配保存前的本地行。
95
+ * 保存回填只通知实际变化的字段,不作为整份数据恢复触发全部赋值规则。
92
96
  */
93
97
  patchSavedMetadata(values: Record<string, any>): void;
94
98
  /**
@@ -100,7 +104,7 @@ export declare class RuntimeFormStateStore {
100
104
  * 将多次深层写入合并成一次变更提交。
101
105
  * 嵌套事务只累计路径,最外层 finally 统一递增 revision 并通知订阅方。
102
106
  */
103
- transaction<T>(source: FormStateMutationSource, callback: (state: Record<string, any>) => T): T;
107
+ transaction<T>(source: FormStateMutationSource, callback: (state: Record<string, any>) => T, options?: Pick<FormStateChange, 'restoreScope'>): T;
104
108
  /** 登记路径和来源后执行底层修改,是所有显式 Store 写方法的统一入口。 */
105
109
  mutate<T>(paths: string[], source: FormStateMutationSource, callback: () => T): T;
106
110
  /** 查询某业务路径是否曾由用户主动修改。 */
@@ -11,7 +11,6 @@ import { RuntimeFieldRegistry, RuntimeFieldMetadata } from './runtime-field-regi
11
11
  import { RuntimeSheetService } from './runtime-sheet-service';
12
12
  import { RuntimePersistenceCoordinator } from './runtime-persistence-coordinator';
13
13
  import { RuntimeInstanceEventBus } from './runtime-instance-event-bus';
14
- import { DataSourceManager } from '@gct-paas/form-base';
15
14
  export interface RuntimeInstanceRecord {
16
15
  /** 实例配置、业务索引和各 Sheet 的响应式状态;数据只由下方 Store 持有 */
17
16
  context: RuntimeInstanceContext;
@@ -24,8 +23,6 @@ export interface RuntimeInstanceRecord {
24
23
  ruleCompiler?: RuntimeRuleCompiler;
25
24
  /** 业务默认值随实例及动态行初始化,不依赖控件挂载。 */
26
25
  fieldInitializer?: RuntimeFieldInitializer;
27
- /** 整份表单共享的数源管理器;字段事件通过当前实例取用。 */
28
- dataSourceManager?: DataSourceManager;
29
26
  /** 实例唯一的数据写入口,生成 revision、dirty 和字段变更路径 */
30
27
  formState: RuntimeFormStateStore;
31
28
  /** 整份表单共享的脚本执行器,字段通过运行时记录调用,销毁由注册表负责。 */
@@ -74,7 +71,10 @@ export declare class RuntimeInstanceRegistry {
74
71
  loading: boolean;
75
72
  error: Error | undefined;
76
73
  }>;
77
- /** 顶层容器和记录都只做浅响应式;服务类仍保持原始引用。 */
74
+ /**
75
+ * 顶层对象使用浅响应式:实例新增、删除需要驱动 Vue 更新;record 内的服务类
76
+ * 不需要被 Vue 深度代理,各自内部负责自己的响应式状态和生命周期
77
+ */
78
78
  private readonly records;
79
79
  /**
80
80
  * 统一托管订阅、watch 和编译结果的取消函数
@@ -87,7 +87,7 @@ export declare class RuntimeInstanceRegistry {
87
87
  * 此方法只创建实例级基础设施,不负责请求模板和业务数据。相同 uniqueId
88
88
  * 再次注册时会先完整销毁旧记录,确保不会残留订阅或异步任务
89
89
  */
90
- register(context: RuntimeInstanceContext, options: RegisterRuntimeInstanceOptions): import('vue').ShallowReactive<RuntimeInstanceRecord>;
90
+ register(context: RuntimeInstanceContext, options: RegisterRuntimeInstanceOptions): RuntimeInstanceRecord;
91
91
  /**
92
92
  * 在页面回调准备完成后挂载实例控制器
93
93
  * Sheet 服务的导航入口依赖控制器切换 Sheet,所以两者必须在这里建立连接
@@ -9,6 +9,8 @@ export declare function decodeTableCellRowKey(rowKey: unknown): PersistedTableCe
9
9
  /** 未配置业务引用或引用值为空时,将子行与列行身份共同持久化到已有字段。 */
10
10
  export declare function encodeTableCellRowKey(cellRowKey: unknown, columnRowKey: unknown): string;
11
11
  export declare function isTableRowKeyMatch(rowKey: unknown, expected: unknown): boolean;
12
+ /** 内置二维行键自带点号,路径匹配时仍须作为一个完整行身份处理。 */
13
+ export declare function splitRuntimeDataPath(path: string): string[];
12
14
  export interface RuntimeTableRelation {
13
15
  rowSubFieldKey: string;
14
16
  colSubFieldKey?: string;
@@ -106,8 +106,6 @@ export declare namespace BaseCoreComponent {
106
106
  * 组件依赖
107
107
  */
108
108
  componentDependency?: DisplayProps;
109
- /** 字段值变化时查询的数源 KEY。 */
110
- valueChangeDataSourceKeys?: string[];
111
109
  /** 是否是物料消耗表的字段 */
112
110
  isMaterialConsumeField?: boolean;
113
111
  /** 自定义组件的绘制标记 */
@@ -377,8 +375,6 @@ export interface IBasicInfoItem {
377
375
  showPrintFieldBg?: boolean;
378
376
  /** 填报入参(selfInfo.params + paramExtraProps) */
379
377
  paramsConfig?: Record<string, any>;
380
- /** detail 返回的单据业务类型,供业务字段查询匹配场景。 */
381
- businessType?: string;
382
378
  /** 实例状态 */
383
379
  instanceStatus?: string;
384
380
  }
@@ -13,8 +13,8 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {
13
13
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
14
14
  "onSelected-change"?: ((value: DeviceInterconnectionResponse) => any) | undefined;
15
15
  }>, {
16
- trigger: Array<"click" | "hover" | "contextmenu">;
17
16
  modelValue: string;
17
+ trigger: Array<"click" | "hover" | "contextmenu">;
18
18
  showColumns: Array<keyof DeviceLink.IDeviceLinkParams>;
19
19
  styleMode: "button" | "link";
20
20
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;