weaver-e10-builder 1.5.11 → 1.5.12

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 (172) hide show
  1. package/README.md +212 -189
  2. package/assets/image-style-observation.schema.json +1355 -0
  3. package/assets/layout-spec.schema.json +52 -0
  4. package/dist/commands/form-field-linkage.d.ts +55 -0
  5. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  6. package/dist/commands/form-field-linkage.js +1026 -12
  7. package/dist/commands/form-field-linkage.js.map +1 -1
  8. package/dist/commands/form-formula-linkage.d.ts +36 -0
  9. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  10. package/dist/commands/form-formula-linkage.js +107 -7
  11. package/dist/commands/form-formula-linkage.js.map +1 -1
  12. package/dist/commands/form-layout-restore.d.ts +3 -0
  13. package/dist/commands/form-layout-restore.d.ts.map +1 -0
  14. package/dist/commands/form-layout-restore.js +217 -0
  15. package/dist/commands/form-layout-restore.js.map +1 -0
  16. package/dist/commands/form-layout.d.ts.map +1 -1
  17. package/dist/commands/form-layout.js +11 -1
  18. package/dist/commands/form-layout.js.map +1 -1
  19. package/dist/commands/form-obj-meta.d.ts +12 -0
  20. package/dist/commands/form-obj-meta.d.ts.map +1 -0
  21. package/dist/commands/form-obj-meta.js +116 -0
  22. package/dist/commands/form-obj-meta.js.map +1 -0
  23. package/dist/commands/form-validate.d.ts.map +1 -1
  24. package/dist/commands/form-validate.js +167 -35
  25. package/dist/commands/form-validate.js.map +1 -1
  26. package/dist/commands/form.d.ts.map +1 -1
  27. package/dist/commands/form.js +26 -2
  28. package/dist/commands/form.js.map +1 -1
  29. package/dist/commands/menu.d.ts.map +1 -1
  30. package/dist/commands/menu.js +5 -3
  31. package/dist/commands/menu.js.map +1 -1
  32. package/dist/commands/wf-form.d.ts.map +1 -1
  33. package/dist/commands/wf-form.js +215 -13
  34. package/dist/commands/wf-form.js.map +1 -1
  35. package/dist/core/client.d.ts +2 -1
  36. package/dist/core/client.d.ts.map +1 -1
  37. package/dist/core/client.js +4 -2
  38. package/dist/core/client.js.map +1 -1
  39. package/dist/index.js +2 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
  42. package/dist/services/actionflow/calendar_mapper.js +34 -14
  43. package/dist/services/actionflow/calendar_mapper.js.map +1 -1
  44. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  45. package/dist/services/actionflow/components/document_actions.js +113 -4
  46. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  47. package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
  48. package/dist/services/actionflow/components/eb_get_data_by_id.js +18 -1
  49. package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
  50. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  51. package/dist/services/actionflow/components/index.js +2 -1
  52. package/dist/services/actionflow/components/index.js.map +1 -1
  53. package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
  54. package/dist/services/actionflow/components/schedule_create.js +22 -6
  55. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  56. package/dist/services/actionflow/components/workflow_actions.d.ts +1 -0
  57. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  58. package/dist/services/actionflow/components/workflow_actions.js +31 -6
  59. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  60. package/dist/services/actionflow/document_source.d.ts +5 -0
  61. package/dist/services/actionflow/document_source.d.ts.map +1 -1
  62. package/dist/services/actionflow/document_source.js +16 -0
  63. package/dist/services/actionflow/document_source.js.map +1 -1
  64. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  65. package/dist/services/actionflow/formula_service.js +19 -8
  66. package/dist/services/actionflow/formula_service.js.map +1 -1
  67. package/dist/services/actionflow/preflight_service.d.ts +5 -0
  68. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  69. package/dist/services/actionflow/preflight_service.js +127 -2
  70. package/dist/services/actionflow/preflight_service.js.map +1 -1
  71. package/dist/services/actionflow/save_workflow_draft.d.ts +7 -0
  72. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  73. package/dist/services/actionflow/save_workflow_draft.js +1 -1
  74. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  75. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  76. package/dist/services/actionflow/workflow_compiler.js +26 -0
  77. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  78. package/dist/services/form-formula-linkage.d.ts +4 -0
  79. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  80. package/dist/services/form-formula-linkage.js +3 -1
  81. package/dist/services/form-formula-linkage.js.map +1 -1
  82. package/dist/services/form-layout-io.d.ts +18 -0
  83. package/dist/services/form-layout-io.d.ts.map +1 -0
  84. package/dist/services/form-layout-io.js +89 -0
  85. package/dist/services/form-layout-io.js.map +1 -0
  86. package/dist/services/form-layout-source/artifact.d.ts +8 -0
  87. package/dist/services/form-layout-source/artifact.d.ts.map +1 -0
  88. package/dist/services/form-layout-source/artifact.js +52 -0
  89. package/dist/services/form-layout-source/artifact.js.map +1 -0
  90. package/dist/services/form-layout-source/binding.d.ts +10 -0
  91. package/dist/services/form-layout-source/binding.d.ts.map +1 -0
  92. package/dist/services/form-layout-source/binding.js +43 -0
  93. package/dist/services/form-layout-source/binding.js.map +1 -0
  94. package/dist/services/form-layout-source/compile.d.ts +7 -0
  95. package/dist/services/form-layout-source/compile.d.ts.map +1 -0
  96. package/dist/services/form-layout-source/compile.js +262 -0
  97. package/dist/services/form-layout-source/compile.js.map +1 -0
  98. package/dist/services/form-layout-source/creation.d.ts +18 -0
  99. package/dist/services/form-layout-source/creation.d.ts.map +1 -0
  100. package/dist/services/form-layout-source/creation.js +42 -0
  101. package/dist/services/form-layout-source/creation.js.map +1 -0
  102. package/dist/services/form-layout-source/excel-extractor.d.ts +7 -0
  103. package/dist/services/form-layout-source/excel-extractor.d.ts.map +1 -0
  104. package/dist/services/form-layout-source/excel-extractor.js +342 -0
  105. package/dist/services/form-layout-source/excel-extractor.js.map +1 -0
  106. package/dist/services/form-layout-source/image-border.d.ts +9 -0
  107. package/dist/services/form-layout-source/image-border.d.ts.map +1 -0
  108. package/dist/services/form-layout-source/image-border.js +128 -0
  109. package/dist/services/form-layout-source/image-border.js.map +1 -0
  110. package/dist/services/form-layout-source/image-observation.d.ts +14 -0
  111. package/dist/services/form-layout-source/image-observation.d.ts.map +1 -0
  112. package/dist/services/form-layout-source/image-observation.js +90 -0
  113. package/dist/services/form-layout-source/image-observation.js.map +1 -0
  114. package/dist/services/form-layout-source/image-review.d.ts +32 -0
  115. package/dist/services/form-layout-source/image-review.d.ts.map +1 -0
  116. package/dist/services/form-layout-source/image-review.js +266 -0
  117. package/dist/services/form-layout-source/image-review.js.map +1 -0
  118. package/dist/services/form-layout-source/image-style.d.ts +16 -0
  119. package/dist/services/form-layout-source/image-style.d.ts.map +1 -0
  120. package/dist/services/form-layout-source/image-style.js +539 -0
  121. package/dist/services/form-layout-source/image-style.js.map +1 -0
  122. package/dist/services/form-layout-source/json.d.ts +3 -0
  123. package/dist/services/form-layout-source/json.d.ts.map +1 -0
  124. package/dist/services/form-layout-source/json.js +33 -0
  125. package/dist/services/form-layout-source/json.js.map +1 -0
  126. package/dist/services/form-layout-source/presentation.d.ts +23 -0
  127. package/dist/services/form-layout-source/presentation.d.ts.map +1 -0
  128. package/dist/services/form-layout-source/presentation.js +174 -0
  129. package/dist/services/form-layout-source/presentation.js.map +1 -0
  130. package/dist/services/form-layout-source/preview.d.ts +4 -0
  131. package/dist/services/form-layout-source/preview.d.ts.map +1 -0
  132. package/dist/services/form-layout-source/preview.js +49 -0
  133. package/dist/services/form-layout-source/preview.js.map +1 -0
  134. package/dist/services/form-layout-source/schema.d.ts +20 -0
  135. package/dist/services/form-layout-source/schema.d.ts.map +1 -0
  136. package/dist/services/form-layout-source/schema.js +149 -0
  137. package/dist/services/form-layout-source/schema.js.map +1 -0
  138. package/dist/services/form-layout-source/source-grid.d.ts +8 -0
  139. package/dist/services/form-layout-source/source-grid.d.ts.map +1 -0
  140. package/dist/services/form-layout-source/source-grid.js +61 -0
  141. package/dist/services/form-layout-source/source-grid.js.map +1 -0
  142. package/dist/services/form-layout-source/types.d.ts +242 -0
  143. package/dist/services/form-layout-source/types.d.ts.map +1 -0
  144. package/dist/services/form-layout-source/types.js +2 -0
  145. package/dist/services/form-layout-source/types.js.map +1 -0
  146. package/dist/services/form-layout-source/verify.d.ts +14 -0
  147. package/dist/services/form-layout-source/verify.d.ts.map +1 -0
  148. package/dist/services/form-layout-source/verify.js +226 -0
  149. package/dist/services/form-layout-source/verify.js.map +1 -0
  150. package/dist/services/form-obj-meta.d.ts +72 -0
  151. package/dist/services/form-obj-meta.d.ts.map +1 -0
  152. package/dist/services/form-obj-meta.js +103 -0
  153. package/dist/services/form-obj-meta.js.map +1 -0
  154. package/dist/services/validate-help.d.ts +25 -0
  155. package/dist/services/validate-help.d.ts.map +1 -0
  156. package/dist/services/validate-help.js +29 -0
  157. package/dist/services/validate-help.js.map +1 -0
  158. package/package.json +3 -1
  159. package/skill-docs/SKILL.md +15 -6
  160. package/skill-docs/_catalog.md +1 -0
  161. package/skill-docs/actionflows/references/components/document/DocumentSave.md +17 -17
  162. package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +29 -0
  163. package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +1 -1
  164. package/skill-docs/assets/schemas/image-style-observation.schema.json +1355 -0
  165. package/skill-docs/references/common/guide-plan-template.md +3 -0
  166. package/skill-docs/references/common/ref-cli-commands.md +17 -4
  167. package/skill-docs/references/form/guide-create-form.md +2 -0
  168. package/skill-docs/references/form/guide-field-linkage.md +140 -55
  169. package/skill-docs/references/form/guide-form-layout-planning.md +6 -0
  170. package/skill-docs/references/form/guide-form-layout-source.md +366 -0
  171. package/skill-docs/references/form/guide-form-view.md +1 -1
  172. package/skill-docs/references/form/guide-formula-linkage.md +44 -1
@@ -0,0 +1,262 @@
1
+ import { layoutSaveBody, fieldsHash, snapshotHash } from '../form-layout-io.js';
2
+ import { assert, clone, digest, validateSpec } from './schema.js';
3
+ import { associatedField, bindField, detailIdentity, flattenComponents } from './binding.js';
4
+ import { bindCell, cellAt, extent, nativeSheet, valueCellAt, within } from './source-grid.js';
5
+ import { normalizeObservedStyle, prepareImageStyleSheet, projectImageField, projectImagePage } from './image-style.js';
6
+ import { presentSourceGrid } from './presentation.js';
7
+ import { projectImageBorders } from './image-border.js';
8
+ export function artifactDigest(artifact) {
9
+ const { artifactHash: _, ...body } = artifact;
10
+ return digest(body);
11
+ }
12
+ /** 纯编译:复用现有字段及组件,不接收 ApiClient,不分配业务 ID,不产生网络操作。 */
13
+ export function compileSourceLayout(context, source, spec, compilerVersion = 'e10.layout-compiler/v5') {
14
+ const borderFixes = compilerVersion === 'e10.layout-compiler/v5';
15
+ const fixes = ['e10.layout-compiler/v3', 'e10.layout-compiler/v4', 'e10.layout-compiler/v5'].includes(compilerVersion);
16
+ const effectiveText = compilerVersion === 'e10.layout-compiler/v4' || borderFixes;
17
+ assert(borderFixes || !source.imageStyles?.tableBorders?.length, '表格外框观察需要 v5 编译器,旧版本不能忽略新的边框证据');
18
+ const sheet = prepareImageStyleSheet(source, validateSpec(spec, source), fixes, borderFixes);
19
+ const snapshot = clone(context.snapshot);
20
+ const imageStyleProjection = { entries: [], issues: [...(source.imageStyles?.issues || [])] };
21
+ if (fixes && source.imageStyles?.notes)
22
+ imageStyleProjection.notes = clone(source.imageStyles.notes);
23
+ const usedStyleRules = new Set();
24
+ assert(String(snapshot.form?.id) === context.target.formId && snapshot.formLayout?.id, '布局与目标 Form 不匹配');
25
+ assert(snapshot.formLayout.updateTimeStamp !== undefined, '布局缺少当前时间戳');
26
+ const pages = snapshot.formLayout.pageLayouts;
27
+ assert(Array.isArray(pages) && pages.length === 1 && pages[0].layoutType === 'EXCEL' && pages[0].terminalType === 'PC', '当前源还原支持单个 PC EXCEL 页面;不转换布局类型');
28
+ const page = pages[0];
29
+ const comps = flattenComponents(page.comps || []);
30
+ page.pageId = String(snapshot.formLayout.id);
31
+ if (!page.module)
32
+ page.module = context.target.module;
33
+ if (!page.ecodeVersion)
34
+ page.ecodeVersion = 1;
35
+ assert(new Set(comps.map(c => String(c.id))).size === comps.length && comps.every(c => typeof c.id === 'string' && c.id), '原生组件 ID 缺失或重复');
36
+ assert(page.config?.workbook?.Sheet1 && Array.isArray(page.config.workbook.Sheet1.cells), '缺少完整原生主 workbook');
37
+ const bound = new Set();
38
+ const handled = new Set();
39
+ const claimed = new Set();
40
+ const removed = new Set();
41
+ const details = spec.details || [];
42
+ const ids = new Set();
43
+ for (const dt of details) {
44
+ assert(!ids.has(dt.subFormId), '同一明细重复放置');
45
+ ids.add(dt.subFormId);
46
+ for (let r = dt.sourceRegion.row; r < dt.sourceRegion.row + dt.sourceRegion.rowCount; r++) {
47
+ assert(!removed.has(r), '不同明细源区域共享迁移行');
48
+ removed.add(r);
49
+ }
50
+ assert(!within(dt.anchor, dt.sourceRegion), '明细锚点不能位于迁移区域');
51
+ }
52
+ const claim = (p, area) => {
53
+ const span = extent(sheet, p);
54
+ if (area)
55
+ assert(within(span, area) && within({ row: span.row + span.rowCount - 1, col: span.col + span.colCount - 1 }, area), '明细源字段超出区域');
56
+ else
57
+ assert(Array.from({ length: span.rowCount }, (_, r) => p.row + r).every(r => !removed.has(r)), '主表字段或明细标题与迁移行冲突');
58
+ for (let r = p.row; r < p.row + span.rowCount; r++)
59
+ for (let c = p.col; c < p.col + span.colCount; c++) {
60
+ const key = `${r},${c}`;
61
+ assert(!claimed.has(key), `TITLE、VALUE 或明细锚点相互重叠 (${key});独占整行需要分别设置标题和值区域的合并跨度,不能同坐标绑定或用 single-row 代替`);
62
+ claimed.add(key);
63
+ }
64
+ return span;
65
+ };
66
+ const shift = (p) => ({ row: p.row - [...removed].filter(r => r < p.row).length, col: p.col });
67
+ const main = { ...clone(page.config.workbook.Sheet1), ...nativeSheet(sheet, removed) };
68
+ const warnings = [...source.unsupported];
69
+ for (const [key, max] of [['frozenRowCount', main.rowCount], ['frozenColumnCount', main.columnCount + (compilerVersion === 'legacy' ? 0 : 2)]]) {
70
+ if (main[key] !== undefined)
71
+ assert(Number.isInteger(main[key]) && main[key] >= 0 && main[key] <= max, '原有冻结配置超出新网格范围,需要先调整配置');
72
+ }
73
+ const move = (comp, p, targetSheet, sourcePosition, sourceCell = cellAt(sheet, sourcePosition)) => {
74
+ const span = extent(sheet, sourcePosition);
75
+ comp.config.excel.row = p.row;
76
+ comp.config.excel.col = p.col;
77
+ // 原生组件的身份、父节点、业务配置及其他位置元数据保留;单元格跨度由 workbook 管理。
78
+ bindCell(targetSheet, comp, p, sourceCell);
79
+ handled.add(String(comp.id));
80
+ return span;
81
+ };
82
+ const checkTitle = (binding, p) => {
83
+ const text = String(cellAt(sheet, p).value ?? '').trim();
84
+ const raw = binding.title.config?.title;
85
+ const explicitAlias = source.imageStyles?.fields?.find(r => r.fieldId === binding.field.fieldId && r.displayTitle !== undefined && (r.subFormId ? r.subFormId === String(binding.field.subFormId) : ['', '0', '-1'].includes(String(binding.field.subFormId || ''))))?.displayTitle;
86
+ const actual = String(explicitAlias ?? (typeof raw === 'string' ? raw : raw?.nameAlias || binding.field.title || binding.field.fieldName || '')).trim();
87
+ const markedRequired = text.startsWith('*') || text.endsWith('*');
88
+ const normalized = text.replace(/^[*\s]+|[*\s::]+$/g, '').trim();
89
+ const literalMatch = text.replace(/[::]$/g, '').trim() === actual.replace(/[::]$/g, '').trim();
90
+ assert(literalMatch || normalized === actual.replace(/[::]$/g, '').trim(), `源 TITLE 与已有字段标题不一致:${text} / ${actual};不自动重命名字段。若仅需不同展示文案,请在 imageStyles.fields 中用真实 fieldId 设置 displayTitle,并让其与源 TITLE 一致;源 TITLE 为空时先补全观察`);
91
+ assert(literalMatch || !markedRequired || binding.value.config.required === true || binding.title.config.required === true || binding.field.required === true, '源必填标记与现有字段冲突,应先由 CLI 完成字段业务配置');
92
+ };
93
+ for (const field of spec.fields) {
94
+ claim(field.title);
95
+ claim(field.value);
96
+ const binding = bindField(field, context, comps);
97
+ assert(!bound.has(binding.field.fieldId), '字段重复放置');
98
+ bound.add(binding.field.fieldId);
99
+ checkTitle(binding, field.title);
100
+ const titleCell = cellAt(sheet, field.title), valueCell = source.imageStyles ? cellAt(sheet, field.value) : valueCellAt(sheet, field.value, field.title);
101
+ projectImageField(source, binding, titleCell, valueCell, imageStyleProjection, usedStyleRules, sheet.name, fixes, effectiveText);
102
+ move(binding.title, shift(field.title), main, field.title, titleCell);
103
+ move(binding.value, shift(field.value), main, field.value, valueCell);
104
+ }
105
+ for (const dt of details) {
106
+ claim(dt.anchor);
107
+ const containers = comps.filter(c => c.type === 'DetailTable' && detailIdentity(c) === dt.subFormId);
108
+ assert(containers.length === 1 && containers[0].config?.excel?.parent === 'ROOT', `明细 ${dt.subFormId} 缺少唯一顶层容器`);
109
+ const container = containers[0];
110
+ const childSheet = page.config.workbook[String(container.id)];
111
+ assert(childSheet && Array.isArray(childSheet.cells) && Array.isArray(childSheet.rows) && Array.isArray(childSheet.columns), '缺少原生明细子 workbook,不构造不完整明细');
112
+ assert(Number(childSheet.rowCount) >= 20 && childSheet.rows.length >= 5 && childSheet.columns.length >= 3, '原生明细缺少标准行列结构');
113
+ assert(Number.isInteger(childSheet.columnCount) && childSheet.columnCount === childSheet.columns.length, '原生明细列结构不完整');
114
+ const childPositions = new Set();
115
+ for (const cell of childSheet.cells) {
116
+ const row = Number(cell.row), col = Number(cell.col), key = `${row},${col}`;
117
+ assert(Number.isInteger(row) && Number.isInteger(col) && row >= 0 && row < childSheet.rowCount && col >= 0 && col < childSheet.columnCount && !childPositions.has(key), '原生明细单元格坐标无效或重复');
118
+ childPositions.add(key);
119
+ }
120
+ const controls = new Set(childSheet.cells.map((c) => c.style?.cellType?.type));
121
+ assert(['de_titletext', 'de_btn', 'de_checkall', 'de_serialtitle', 'de_title', 'de_checksingle', 'de_serialnum', 'de_tail'].every(type => controls.has(type)), '原生明细缺少完整系统控件,不补造空壳');
122
+ assert(!container.config.enableSubDetail, '二级明细不在源样式还原范围');
123
+ move(container, shift(dt.anchor), main, dt.anchor);
124
+ const detailSourceClaims = new Set();
125
+ for (const field of dt.fields) {
126
+ claim(field.title, dt.sourceRegion);
127
+ claim(field.value, dt.sourceRegion);
128
+ for (const p of [field.title, field.value]) {
129
+ const e = extent(sheet, p);
130
+ for (let r = e.row; r < e.row + e.rowCount; r++)
131
+ for (let c = e.col; c < e.col + e.colCount; c++)
132
+ detailSourceClaims.add(`${r},${c}`);
133
+ }
134
+ const binding = bindField(field, context, comps, dt.subFormId);
135
+ assert(!bound.has(binding.field.fieldId), '明细字段重复放置');
136
+ bound.add(binding.field.fieldId);
137
+ checkTitle(binding, field.title);
138
+ const titleCell = cellAt(sheet, field.title), valueCell = source.imageStyles ? cellAt(sheet, field.value) : valueCellAt(sheet, field.value, field.title);
139
+ projectImageField(source, binding, titleCell, valueCell, imageStyleProjection, usedStyleRules, sheet.name, fixes, effectiveText);
140
+ for (const [comp, sourcePoint] of [[binding.title, field.title], [binding.value, field.value]]) {
141
+ const excel = comp.config.excel;
142
+ const cells = childSheet.cells.filter((c) => String(c.style?.cellType?.comId || '') === String(comp.id));
143
+ assert(cells.length === 1 && Number(cells[0].row) === Number(excel.row) && Number(cells[0].col) === Number(excel.col), '明细组件与网格身份或位置不一致');
144
+ bindCell(childSheet, comp, { row: Number(excel.row), col: Number(excel.col) }, comp === binding.value ? valueCell : titleCell);
145
+ handled.add(String(comp.id));
146
+ }
147
+ // 原生明细保留完整系统行列,源列宽合并投影到对应业务列。
148
+ const col = Number(binding.value.config.excel.col);
149
+ assert(childSheet.columns[col], '明细业务列尺寸缺失');
150
+ const span = extent(sheet, field.value);
151
+ childSheet.columns[col].size = sheet.columns.slice(span.col, span.col + span.colCount).reduce((n, c) => n + c.size, 0);
152
+ for (const [comp, p] of [[binding.title, field.title], [binding.value, field.value]]) {
153
+ const row = Number(comp.config.excel.row);
154
+ if (childSheet.rows[row])
155
+ childSheet.rows[row].size = Math.max(childSheet.rows[row].size, sheet.rows[p.row].size);
156
+ }
157
+ }
158
+ for (const cell of sheet.cells)
159
+ if (within({ row: Number(cell.row), col: Number(cell.col) }, dt.sourceRegion) && (cell.value !== undefined && cell.value !== '' || cell.formula)) {
160
+ assert(detailSourceClaims.has(`${Number(cell.row)},${Number(cell.col)}`), '明细迁移区域包含未绑定的静态内容');
161
+ }
162
+ }
163
+ for (const cell of sheet.cells)
164
+ if (removed.has(Number(cell.row)) && (cell.value !== undefined && cell.value !== '' || cell.formula)) {
165
+ assert(details.some(dt => within({ row: Number(cell.row), col: Number(cell.col) }, dt.sourceRegion)), '明细整行迁移会删除区域外静态文字');
166
+ }
167
+ for (const cell of main.cells)
168
+ if (cell.formula) {
169
+ assert(spec.allowUnsupported === true && cell.value !== undefined, '未绑定的源公式需要缓存值和 allowUnsupported;计算规则仍需由 CLI 单独配置');
170
+ warnings.push(`${sheet.name}!${cell.row},${cell.col}: 公式仅保留缓存显示值,不创建计算规则`);
171
+ delete cell.formula;
172
+ }
173
+ for (const comp of comps) {
174
+ if (handled.has(String(comp.id)))
175
+ continue;
176
+ const field = context.fields.find(f => f.fieldId === associatedField(comp));
177
+ assert(!field || comp.config?.display === false || comp.config?.hidden === true, `源样表未覆盖现有字段 ${field?.title || field?.fieldName || field?.fieldId}`);
178
+ if (comp.type === 'DetailTable')
179
+ assert(ids.has(detailIdentity(comp)), '源样表未覆盖现有明细');
180
+ const parent = comp.config?.excel?.parent;
181
+ if (parent && parent !== 'ROOT') {
182
+ assert(comps.some(c => c.type === 'DetailTable' && c.config?.excel?.nodeId === parent), '保留组件位于未支持的嵌套容器');
183
+ continue;
184
+ }
185
+ const oldCells = page.config.workbook.Sheet1.cells.filter((c) => String(c.style?.cellType?.comId || '') === String(comp.id));
186
+ for (const cell of oldCells) {
187
+ const p = { row: Number(cell.row), col: Number(cell.col) };
188
+ assert(p.row < main.rowCount && p.col < main.columnCount && !main.cells.some((c) => Number(c.row) === p.row && Number(c.col) === p.col), '未修改组件与源网格冲突,需要明确完整布局映射');
189
+ main.cells.push(clone(cell));
190
+ }
191
+ }
192
+ page.config.workbook.Sheet1 = main;
193
+ const imageBorderProjection = borderFixes && source.sourceType === 'image' ? projectImageBorders(source, main, sheet.name, removed) : undefined;
194
+ if (imageBorderProjection) {
195
+ imageStyleProjection.issues.push(...imageBorderProjection.issues);
196
+ if (!imageBorderProjection.observed)
197
+ warnings.push('[IMAGE_BORDER_OBSERVATION_REQUIRED] 未记录表格外框,草稿可预览;保存前需补充 tableBorders 并经用户确认');
198
+ }
199
+ const presentation = compilerVersion === 'legacy' ? undefined : presentSourceGrid(main, comps, context.snapshot.formLayout.pageLayouts[0].config.workbook.Sheet1);
200
+ if (fixes)
201
+ for (const grid of Object.values(page.config.workbook))
202
+ for (const cell of grid.cells || []) {
203
+ assert(Number.isInteger(Number(cell.row)) && Number.isInteger(Number(cell.col)), '原生单元格坐标无效');
204
+ cell.row = String(Number(cell.row));
205
+ cell.col = String(Number(cell.col));
206
+ }
207
+ const columnOffset = presentation?.addedLeft ? 1 : 0;
208
+ if (imageBorderProjection) {
209
+ for (const entry of imageBorderProjection.entries)
210
+ entry.col += columnOffset;
211
+ for (const table of imageBorderProjection.tables)
212
+ table.col += columnOffset;
213
+ }
214
+ if (source.imageStyles) {
215
+ for (const rule of source.imageStyles.cells || []) {
216
+ const style = normalizeObservedStyle(rule.style);
217
+ const native = cellAt(sheet, rule);
218
+ const mapped = [...spec.fields, ...(spec.details || []).flatMap(d => d.fields)].some(f => [f.title, f.value].some(p => p.row === rule.row && p.col === rule.col));
219
+ if (!mapped && [style.fontWeight, style.fontStyle, style.fontFamily].some(v => v !== undefined) && !native.style?.font)
220
+ imageStyleProjection.issues.push(`静态单元格 ${rule.row},${rule.col} 的字体缺少可用字号,不能只凭 bold 推定字体`);
221
+ }
222
+ assert((source.imageStyles.fields || []).every(rule => usedStyleRules.has(rule)), '图片样式引用了未绑定字段,不修改布局范围外组件');
223
+ projectImagePage(source, snapshot.formLayout, imageStyleProjection);
224
+ const sourceMainPositions = new Set(sheet.cells.filter(c => !removed.has(Number(c.row))).map(c => {
225
+ const row = shift({ row: Number(c.row), col: Number(c.col) }).row;
226
+ const move = presentation?.staticCellMoves.find(m => m.row === row && m.fromCol === Number(c.col));
227
+ return `${row},${move?.toCol ?? Number(c.col) + columnOffset}`;
228
+ }));
229
+ for (const [key, grid] of Object.entries(page.config.workbook))
230
+ for (const cell of grid.cells || []) {
231
+ const fromSource = key === 'Sheet1' && sourceMainPositions.has(`${Number(cell.row)},${Number(cell.col)}`);
232
+ const boundCell = handled.has(String(cell.style?.cellType?.comId || ''));
233
+ if (!fromSource && !boundCell)
234
+ continue;
235
+ const { cellType: _, ...properties } = cell.style || {};
236
+ if (Object.keys(properties).length)
237
+ imageStyleProjection.entries.push({ layer: 'cell', sheet: key, row: Number(cell.row), col: Number(cell.col), source: `workbook:${key}!${cell.row},${cell.col}`, properties: clone(properties) });
238
+ }
239
+ if (!imageStyleProjection.entries.length)
240
+ imageStyleProjection.issues.push('未观察到可投影图片样式,布局结构通过不等于图片样式已还原');
241
+ assert(!imageStyleProjection.issues.length || spec.allowUnsupported === true, `图片样式投影未闭合:${imageStyleProjection.issues.join('; ')}`);
242
+ warnings.push(...imageStyleProjection.issues);
243
+ }
244
+ const request = layoutSaveBody(context.target, snapshot, true);
245
+ const artifact = {
246
+ schemaVersion: 'e10.layout-artifact/v1', context: clone(context), source: clone(source), spec: clone(spec), request,
247
+ ...(presentation ? { compilerVersion: compilerVersion, presentation } : {}),
248
+ fieldHash: fieldsHash(context.fields), snapshotHash: snapshotHash(context.snapshot), warnings, artifactHash: '',
249
+ ...(source.imageStyles ? { imageStyleProjection } : {}),
250
+ ...(imageBorderProjection ? { imageBorderProjection } : {}),
251
+ };
252
+ artifact.artifactHash = artifactDigest(artifact);
253
+ return artifact;
254
+ }
255
+ /** 不信任产物里任意保存请求,按原始输入重编译并逐项核对。 */
256
+ export function validateArtifact(artifact) {
257
+ assert(artifact?.schemaVersion === 'e10.layout-artifact/v1' && artifact.artifactHash === artifactDigest(artifact), '编译产物摘要不一致');
258
+ assert(artifact.compilerVersion === undefined || ['e10.layout-compiler/v2', 'e10.layout-compiler/v3', 'e10.layout-compiler/v4', 'e10.layout-compiler/v5'].includes(artifact.compilerVersion), '不支持的布局编译版本');
259
+ const recompiled = compileSourceLayout(artifact.context, artifact.source, artifact.spec, artifact.compilerVersion ?? 'legacy');
260
+ assert(recompiled.artifactHash === artifact.artifactHash, '产物与可复现编译结果不一致');
261
+ }
262
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../src/services/form-layout-source/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type LayoutClient } from '../form-layout-io.js';
2
+ import type { LayoutSource, LayoutSpec, LayoutTarget } from './types.js';
3
+ export interface SourceLayoutInputs {
4
+ source: LayoutSource;
5
+ spec: LayoutSpec;
6
+ artifactOut: string;
7
+ }
8
+ /** 创建前验证源文件及布局描述;不依赖尚未生成的字段 ID,不执行业务请求。 */
9
+ export declare function prepareSourceLayoutInputs(options: {
10
+ layoutSource?: string;
11
+ layoutSpec?: string;
12
+ layoutArtifactOut?: string;
13
+ fields?: string;
14
+ layout?: string;
15
+ }): Promise<SourceLayoutInputs | null>;
16
+ /** 字段补写和归组全部结束后调用;故障只保留部分状态,不删除已创建的表单。 */
17
+ export declare function restoreSourceLayoutAfterCreate(client: LayoutClient, baseUrl: string, target: LayoutTarget, inputs: SourceLayoutInputs): Promise<any>;
18
+ //# sourceMappingURL=creation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creation.d.ts","sourceRoot":"","sources":["../../../src/services/form-layout-source/creation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAK5E,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGzE,MAAM,WAAW,kBAAkB;IAAG,MAAM,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE;AACnG,2CAA2C;AAC3C,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAYzM;AACD,0CAA0C;AAC1C,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,CAU1J"}
@@ -0,0 +1,42 @@
1
+ import { readLayoutContext } from '../form-layout-io.js';
2
+ import { checkOutputPath, readJson, distinctOutput, verifySourceFile, writeJson } from './artifact.js';
3
+ import { assert, validateSpec } from './schema.js';
4
+ import { compileSourceLayout } from './compile.js';
5
+ import { applySourceLayout } from './verify.js';
6
+ import { assertBorderObservation } from './image-border.js';
7
+ /** 创建前验证源文件及布局描述;不依赖尚未生成的字段 ID,不执行业务请求。 */
8
+ export async function prepareSourceLayoutInputs(options) {
9
+ if (!options.layoutSource && !options.layoutSpec && !options.layoutArtifactOut)
10
+ return null;
11
+ assert(options.layoutSource && options.layoutSpec && options.layoutArtifactOut, '源布局创建需要同时提供 --layout-source、--layout-spec 和 --layout-artifact-out');
12
+ assert(String(options.layout || 'EXCEL').toUpperCase() === 'EXCEL', '源样式还原需要创建 EXCEL 表单,不转换 FLOW');
13
+ const source = readJson(options.layoutSource);
14
+ const spec = readJson(options.layoutSpec);
15
+ for (const out of [options.layoutArtifactOut, `${options.layoutArtifactOut}.report.json`]) {
16
+ distinctOutput(out, [options.layoutSource, options.layoutSpec, options.fields, source.sourceFile]);
17
+ checkOutputPath(out);
18
+ }
19
+ validateSpec(spec, source);
20
+ await verifySourceFile(source);
21
+ assert(source.sourceType !== 'image' || source.observations?.confirmed === true, '[IMAGE_STYLE_CONFIRMATION_REQUIRED] 图片布局创建前先向用户展示字体、字号、颜色及对齐;用户确认后 style-review --confirm,再使用确认后的源文件创建');
22
+ assertBorderObservation(source, spec.allowUnsupported === true);
23
+ return { source, spec, artifactOut: options.layoutArtifactOut };
24
+ }
25
+ /** 字段补写和归组全部结束后调用;故障只保留部分状态,不删除已创建的表单。 */
26
+ export async function restoreSourceLayoutAfterCreate(client, baseUrl, target, inputs) {
27
+ await verifySourceFile(inputs.source);
28
+ const context = await readLayoutContext(client, baseUrl, target);
29
+ const artifact = compileSourceLayout(context, inputs.source, inputs.spec);
30
+ writeJson(inputs.artifactOut, artifact);
31
+ const result = await applySourceLayout(client, baseUrl, artifact);
32
+ const reportOut = `${inputs.artifactOut}.report.json`;
33
+ let reportWriteError;
34
+ try {
35
+ writeJson(reportOut, result);
36
+ }
37
+ catch (error) {
38
+ reportWriteError = error.message;
39
+ }
40
+ return { ...result, artifactOut: inputs.artifactOut, reportOut, ...(reportWriteError ? { reportWriteError } : {}) };
41
+ }
42
+ //# sourceMappingURL=creation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creation.js","sourceRoot":"","sources":["../../../src/services/form-layout-source/creation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { LayoutSource } from './types.js';
2
+ export declare function cellPoint(ref: string): {
3
+ row: number;
4
+ col: number;
5
+ };
6
+ export declare function extractExcelSource(path: string): Promise<LayoutSource>;
7
+ //# sourceMappingURL=excel-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-extractor.d.ts","sourceRoot":"","sources":["../../../src/services/form-layout-source/excel-extractor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AAUlE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAInE;AAgFD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA8G5E"}