weaver-e10-builder 1.6.0 → 1.6.5

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 (183) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +2 -0
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/check.d.ts.map +1 -1
  5. package/dist/commands/check.js +109 -51
  6. package/dist/commands/check.js.map +1 -1
  7. package/dist/commands/form-add-detail-table.js +3 -3
  8. package/dist/commands/form-add-detail-table.js.map +1 -1
  9. package/dist/commands/form-attachment-setting.d.ts +3 -0
  10. package/dist/commands/form-attachment-setting.d.ts.map +1 -0
  11. package/dist/commands/form-attachment-setting.js +422 -0
  12. package/dist/commands/form-attachment-setting.js.map +1 -0
  13. package/dist/commands/form-browser-definition.js +8 -8
  14. package/dist/commands/form-browser-definition.js.map +1 -1
  15. package/dist/commands/form-code.js +7 -7
  16. package/dist/commands/form-code.js.map +1 -1
  17. package/dist/commands/form-data.d.ts.map +1 -1
  18. package/dist/commands/form-data.js +50 -2
  19. package/dist/commands/form-data.js.map +1 -1
  20. package/dist/commands/form-ebuilder-scope.js +8 -8
  21. package/dist/commands/form-ebuilder-scope.js.map +1 -1
  22. package/dist/commands/form-engine-linkage.js +12 -12
  23. package/dist/commands/form-engine-linkage.js.map +1 -1
  24. package/dist/commands/form-field-linkage.d.ts +6 -1
  25. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  26. package/dist/commands/form-field-linkage.js +138 -31
  27. package/dist/commands/form-field-linkage.js.map +1 -1
  28. package/dist/commands/form-layout-diff.js +1 -1
  29. package/dist/commands/form-layout-diff.js.map +1 -1
  30. package/dist/commands/form-layout-edit.js +1 -1
  31. package/dist/commands/form-layout-edit.js.map +1 -1
  32. package/dist/commands/form-layout-init-reviewed.js +1 -1
  33. package/dist/commands/form-layout-init-reviewed.js.map +1 -1
  34. package/dist/commands/form-layout-init.js +2 -2
  35. package/dist/commands/form-layout-init.js.map +1 -1
  36. package/dist/commands/form-layout-template-easy.js +1 -1
  37. package/dist/commands/form-layout-template-easy.js.map +1 -1
  38. package/dist/commands/form-layout.js +4 -4
  39. package/dist/commands/form-layout.js.map +1 -1
  40. package/dist/commands/form-view.d.ts.map +1 -1
  41. package/dist/commands/form-view.js +1 -2
  42. package/dist/commands/form-view.js.map +1 -1
  43. package/dist/commands/form.d.ts.map +1 -1
  44. package/dist/commands/form.js +50 -5
  45. package/dist/commands/form.js.map +1 -1
  46. package/dist/commands/project.d.ts.map +1 -1
  47. package/dist/commands/project.js +39 -6
  48. package/dist/commands/project.js.map +1 -1
  49. package/dist/commands/report-admin.js +1 -1
  50. package/dist/commands/report-admin.js.map +1 -1
  51. package/dist/commands/report-query.js +1 -1
  52. package/dist/commands/report-query.js.map +1 -1
  53. package/dist/commands/report.js +1 -1
  54. package/dist/commands/report.js.map +1 -1
  55. package/dist/commands/wf-form-layout-init-reviewed.d.ts +3 -0
  56. package/dist/commands/wf-form-layout-init-reviewed.d.ts.map +1 -0
  57. package/dist/commands/wf-form-layout-init-reviewed.js +71 -0
  58. package/dist/commands/wf-form-layout-init-reviewed.js.map +1 -0
  59. package/dist/commands/wf-form.d.ts +1 -0
  60. package/dist/commands/wf-form.d.ts.map +1 -1
  61. package/dist/commands/wf-form.js +16 -16
  62. package/dist/commands/wf-form.js.map +1 -1
  63. package/dist/commands/workflow-advanced.js +1 -1
  64. package/dist/commands/workflow-advanced.js.map +1 -1
  65. package/dist/commands/workflow-basic-info.js +4 -4
  66. package/dist/commands/workflow-basic-info.js.map +1 -1
  67. package/dist/commands/workflow.js +6 -6
  68. package/dist/commands/workflow.js.map +1 -1
  69. package/dist/index.js +22 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/services/actionflow/classified_protection_source.d.ts +10 -0
  72. package/dist/services/actionflow/classified_protection_source.d.ts.map +1 -0
  73. package/dist/services/actionflow/classified_protection_source.js +27 -0
  74. package/dist/services/actionflow/classified_protection_source.js.map +1 -0
  75. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  76. package/dist/services/actionflow/components/action_eb_add.js +4 -5
  77. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  78. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  79. package/dist/services/actionflow/components/action_eb_update.js +13 -1
  80. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  81. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts +12 -0
  82. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  83. package/dist/services/actionflow/components/action_eb_update_compiler.js +88 -3
  84. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  85. package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
  86. package/dist/services/actionflow/components/approve_create.js +6 -10
  87. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  88. package/dist/services/actionflow/components/condition.d.ts.map +1 -1
  89. package/dist/services/actionflow/components/condition.js +3 -2
  90. package/dist/services/actionflow/components/condition.js.map +1 -1
  91. package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
  92. package/dist/services/actionflow/components/eb_get_data_by_id.js +9 -1
  93. package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
  94. package/dist/services/actionflow/components/send_message.js +1 -1
  95. package/dist/services/actionflow/components/send_message.js.map +1 -1
  96. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  97. package/dist/services/actionflow/components/workflow_actions.js +20 -11
  98. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  99. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  100. package/dist/services/actionflow/context_preflight.js +9 -1
  101. package/dist/services/actionflow/context_preflight.js.map +1 -1
  102. package/dist/services/actionflow/design_client.d.ts +4 -0
  103. package/dist/services/actionflow/design_client.d.ts.map +1 -1
  104. package/dist/services/actionflow/design_client.js +65 -0
  105. package/dist/services/actionflow/design_client.js.map +1 -1
  106. package/dist/services/actionflow/form_source.d.ts +9 -2
  107. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  108. package/dist/services/actionflow/form_source.js +21 -6
  109. package/dist/services/actionflow/form_source.js.map +1 -1
  110. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  111. package/dist/services/actionflow/formula_service.js +153 -37
  112. package/dist/services/actionflow/formula_service.js.map +1 -1
  113. package/dist/services/actionflow/preflight_service.d.ts +14 -3
  114. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  115. package/dist/services/actionflow/preflight_service.js +276 -42
  116. package/dist/services/actionflow/preflight_service.js.map +1 -1
  117. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  118. package/dist/services/actionflow/workflow_compiler.js +154 -23
  119. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  120. package/dist/services/form-attachment-settings.d.ts +110 -0
  121. package/dist/services/form-attachment-settings.d.ts.map +1 -0
  122. package/dist/services/form-attachment-settings.js +332 -0
  123. package/dist/services/form-attachment-settings.js.map +1 -0
  124. package/dist/services/form-attachment-upload.d.ts +30 -0
  125. package/dist/services/form-attachment-upload.d.ts.map +1 -0
  126. package/dist/services/form-attachment-upload.js +76 -0
  127. package/dist/services/form-attachment-upload.js.map +1 -0
  128. package/dist/services/form-data-openapi.d.ts +2 -0
  129. package/dist/services/form-data-openapi.d.ts.map +1 -1
  130. package/dist/services/form-data-openapi.js +1 -0
  131. package/dist/services/form-data-openapi.js.map +1 -1
  132. package/dist/services/workflow-layout-init-reviewed.d.ts +35 -0
  133. package/dist/services/workflow-layout-init-reviewed.d.ts.map +1 -0
  134. package/dist/services/workflow-layout-init-reviewed.js +120 -0
  135. package/dist/services/workflow-layout-init-reviewed.js.map +1 -0
  136. package/package.json +1 -1
  137. package/skill-docs/SKILL.md +163 -160
  138. package/skill-docs/_catalog.md +6 -4
  139. package/skill-docs/actionflows/SKILL.md +2 -0
  140. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +2 -0
  141. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +1 -1
  142. package/skill-docs/actionflows/references/components/logic/Condition.md +2 -0
  143. package/skill-docs/actionflows/references/components/message/SendMessage.md +2 -2
  144. package/skill-docs/actionflows/references/components/workflow/ApproveCommit.md +17 -17
  145. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
  146. package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +1 -1
  147. package/skill-docs/actionflows/references/components/workflow/ApproveSendBack.md +17 -17
  148. package/skill-docs/assets/sample/api/formApi.js +689 -510
  149. package/skill-docs/assets/sample/app/config.js +4 -0
  150. package/skill-docs/assets/sample/app/fields.js +25 -0
  151. package/skill-docs/assets/sample/entry.js +24 -22
  152. package/skill-docs/assets/sample/eslint.config.cjs +1 -0
  153. package/skill-docs/assets/sample/pages/Items.js +247 -0
  154. package/skill-docs/assets/sample/styles/prototypeStyles.js +137 -0
  155. package/skill-docs/references/coding/guide-edit-backfill.md +102 -150
  156. package/skill-docs/references/coding/guide-form-crud.md +195 -172
  157. package/skill-docs/references/coding/guide-html-to-react.md +250 -0
  158. package/skill-docs/references/coding/guide-page-code.md +194 -167
  159. package/skill-docs/references/coding/guide-page-export.md +27 -18
  160. package/skill-docs/references/coding/ref-compile-rules.md +7 -7
  161. package/skill-docs/references/common/map.md +2 -1
  162. package/skill-docs/references/common/ref-cli-commands.md +14 -6
  163. package/skill-docs/references/components/display-FilePreview.md +5 -4
  164. package/skill-docs/references/form/guide-browser-definition.md +73 -40
  165. package/skill-docs/references/form/guide-field-linkage.md +4 -1
  166. package/skill-docs/references/form/guide-form-attachment-setting.md +95 -0
  167. package/skill-docs/references/form/guide-form-data.md +22 -1
  168. package/skill-docs/references/form/layout/code-block/layout-css.md +41 -0
  169. package/skill-docs/references/form/layout/initialization.md +2 -0
  170. package/skill-docs/references/form/layout/layout-overview.md +8 -0
  171. package/skill-docs/references/form/layout/template/advanced.md +21 -0
  172. package/skill-docs/references/form/layout/template/easy.md +2 -0
  173. package/skill-docs/references/form/layout/template/flow.md +2 -0
  174. package/skill-docs/references/form/layout/template/template-guide.md +3 -1
  175. package/skill-docs/references/form/layout/workflow-layout.md +13 -1
  176. package/skill-docs/references/form/ref-form-fields.md +18 -4
  177. package/skill-docs/references/workflow/guide-workflow-odoc.md +1 -1
  178. package/skill-docs/assets/sample/config/config.js +0 -0
  179. package/skill-docs/assets/sample/config/configLoad.js +0 -0
  180. package/skill-docs/assets/sample/config/configLoad_default.js +0 -0
  181. package/skill-docs/assets/sample/config/config_default.js +0 -0
  182. package/skill-docs/assets/sample/memo.md +0 -0
  183. package/skill-docs/assets/sample/readme.js +0 -8
@@ -0,0 +1,422 @@
1
+ import { AuthSession } from '../core/auth.js';
2
+ import { ApiClient } from '../core/client.js';
3
+ import { resolveFormId } from '../services/form-id.js';
4
+ import { readAttachmentCommon, readAttachmentField, listAttachmentFields, listFormFields, findFormField, readDocumentCreateMenus, resolveDocumentFolder, resolveDocumentFolderByName, listDocumentFolders, applyCommonChanges, applyFieldChanges, saveAttachmentCommon, saveAttachmentFields, findAttachmentEntity, normalizeFormats, parseFormatLimit, uploadFolderIdOf, } from '../services/form-attachment-settings.js';
5
+ async function context(program, appId, objId) {
6
+ const opts = program.opts();
7
+ const auth = await AuthSession.fromOptions(opts);
8
+ if (!auth)
9
+ throw new Error('无法加载认证');
10
+ const client = new ApiClient(auth);
11
+ const baseUrl = auth.getBaseUrl();
12
+ const formId = await resolveFormId(client, baseUrl, appId, objId);
13
+ if (!formId)
14
+ throw new Error(`无法获取表单 formId(objId=${objId})`);
15
+ return { opts, client, baseUrl, target: { appId, objId, formId } };
16
+ }
17
+ function folderLabelFromBrowser(list, fallbackId) {
18
+ const node = Array.isArray(list) && list.length ? list[0] : null;
19
+ if (node)
20
+ return `${node.title || node.content || node.id} (${node.id})`;
21
+ return fallbackId ? `目录 ${fallbackId}` : '未设置';
22
+ }
23
+ function fixedFolderLabel(config) {
24
+ const node = config?.folderValue?.[0];
25
+ return node ? `${node.content || node.id} (${node.id})` : '';
26
+ }
27
+ function typesLabel(types) {
28
+ return Array.isArray(types) && types.length ? types.join(', ') : '';
29
+ }
30
+ function formatsLabel(value) {
31
+ const formats = parseFormatLimit(value);
32
+ return formats.length ? `${formats.join(', ')}(${formats.length} 项)` : '';
33
+ }
34
+ function commonSummary(common) {
35
+ const uploadId = uploadFolderIdOf(common);
36
+ return [
37
+ `上传目录 ${uploadId ? folderLabelFromBrowser(common.folderIdBrowserValue, uploadId) : '未设置'}`,
38
+ `文档存储位置 ${fixedFolderLabel(common.fixedDirectory) || '未设置'}`,
39
+ `新建方式 ${typesLabel(common.addTypeConfig?.types) || '未设置'}`,
40
+ `上传格式 ${formatsLabel(common.customLimitFormat) || '未限制'}`,
41
+ `大小限制 ${common.attmentSizeLimit ? `${common.attmentSizeLimit} MB` : '未设置'}`,
42
+ `启用 ${common.enableState ? '是' : '否'}`,
43
+ `提示语 ${common.displayTip ? '显示' : '隐藏'}`,
44
+ ];
45
+ }
46
+ function fieldSummary(entity, formFields) {
47
+ const mode = String(entity?.folderSelectType);
48
+ let upload = '继承通用设置';
49
+ if (mode === '1') {
50
+ const option = entity.optionId
51
+ ? formFields.find((field) => String(field.fieldId) === String(entity.optionId))
52
+ : null;
53
+ upload = option ? `选项关联 → ${option.title}` : `选项关联(字段 ${entity.optionId || '?'})`;
54
+ }
55
+ else if (mode === '0') {
56
+ const folderId = uploadFolderIdOf(entity);
57
+ upload = folderId
58
+ ? folderLabelFromBrowser(entity.folderIdBrowserValue, folderId)
59
+ : '固定目录(未选目录)';
60
+ }
61
+ return [
62
+ `上传目录 ${upload}`,
63
+ `新建方式 ${typesLabel(entity?.docAddTypeConfig?.types) || '继承通用'}`,
64
+ `存储位置 ${fixedFolderLabel(entity?.docFixedDirectoryConfig) || '继承通用'}`,
65
+ `上传格式 ${formatsLabel(entity?.customLimitFormat) || '继承通用'}`,
66
+ `大小限制 ${entity?.attmentSizeLimit ? `${entity.attmentSizeLimit} MB` : '继承通用'}`,
67
+ ];
68
+ }
69
+ function parseOnOff(value, option) {
70
+ const normalized = String(value).trim().toLowerCase();
71
+ if (['on', 'true', '1', 'yes'].includes(normalized))
72
+ return true;
73
+ if (['off', 'false', '0', 'no'].includes(normalized))
74
+ return false;
75
+ throw new Error(`${option} 仅支持 on / off(或 true / false)`);
76
+ }
77
+ async function parseFolderOption(client, baseUrl, value) {
78
+ if (value === undefined)
79
+ return undefined;
80
+ const input = String(value).trim();
81
+ if (input.toLowerCase() === 'none')
82
+ return null;
83
+ return /^\d+$/.test(input)
84
+ ? resolveDocumentFolder(client, baseUrl, input)
85
+ : resolveDocumentFolderByName(client, baseUrl, input);
86
+ }
87
+ async function parseDocTypes(client, baseUrl, value) {
88
+ if (value === undefined)
89
+ return undefined;
90
+ if (String(value).trim().toLowerCase() === 'none')
91
+ return [];
92
+ const menus = await readDocumentCreateMenus(client, baseUrl);
93
+ const valid = menus.map((menu) => String(menu.id));
94
+ const requested = String(value).split(',').map((item) => item.trim()).filter(Boolean);
95
+ if (!requested.length)
96
+ throw new Error('--doc-types 需要至少一个类型,或写 none 清空');
97
+ const invalid = requested.filter((item) => !valid.includes(item));
98
+ if (invalid.length) {
99
+ throw new Error(`未知的新建方式:${invalid.join(', ')}。可选:${menus.map((menu) => `${menu.id}(${menu.content})`).join(', ')}`);
100
+ }
101
+ return requested;
102
+ }
103
+ function parseFormatsOption(value) {
104
+ if (value === undefined)
105
+ return undefined;
106
+ if (String(value).trim().toLowerCase() === 'none')
107
+ return [];
108
+ const formats = normalizeFormats(value);
109
+ if (!formats.length)
110
+ throw new Error('--formats 需要至少一个扩展名,或写 none 清空');
111
+ return formats;
112
+ }
113
+ function assertCommonApplied(actual, changes) {
114
+ if (changes.uploadFolder !== undefined) {
115
+ const expected = changes.uploadFolder ? String(changes.uploadFolder.id) : '';
116
+ const got = uploadFolderIdOf(actual);
117
+ if (got !== expected) {
118
+ throw new Error(`回读不一致:上传目录期望 ${expected || '空'},实际 ${got || '空'}`);
119
+ }
120
+ }
121
+ if (changes.docFolder !== undefined) {
122
+ const expected = changes.docFolder ? String(changes.docFolder.id) : '';
123
+ const got = String(actual?.fixedDirectory?.folderValue?.[0]?.id ?? '');
124
+ if (got !== expected) {
125
+ throw new Error(`回读不一致:文档存储位置期望 ${expected || '空'},实际 ${got || '空'}`);
126
+ }
127
+ }
128
+ if (changes.docTypes !== undefined) {
129
+ const expected = [...(changes.docTypes ?? [])].sort();
130
+ const got = [...(actual?.addTypeConfig?.types ?? [])].sort();
131
+ if (JSON.stringify(expected) !== JSON.stringify(got)) {
132
+ throw new Error(`回读不一致:新建方式期望 ${expected.join(', ') || '空'},实际 ${got.join(', ') || '空'}`);
133
+ }
134
+ }
135
+ if (changes.formats !== undefined) {
136
+ const expected = [...(changes.formats ?? [])].sort();
137
+ const got = parseFormatLimit(actual?.customLimitFormat).sort();
138
+ if (JSON.stringify(expected) !== JSON.stringify(got)) {
139
+ throw new Error('回读不一致:上传格式未按提交值保存');
140
+ }
141
+ }
142
+ if (changes.maxSizeMb !== undefined && String(actual?.attmentSizeLimit ?? '') !== String(changes.maxSizeMb)) {
143
+ throw new Error(`回读不一致:大小限制期望 ${changes.maxSizeMb},实际 ${actual?.attmentSizeLimit ?? '空'}`);
144
+ }
145
+ if (changes.enable !== undefined && Boolean(actual?.enableState) !== changes.enable) {
146
+ throw new Error('回读不一致:启用状态未按提交值保存');
147
+ }
148
+ if (changes.displayTip !== undefined && Boolean(actual?.displayTip) !== changes.displayTip) {
149
+ throw new Error('回读不一致:提示语开关未按提交值保存');
150
+ }
151
+ }
152
+ function assertFieldApplied(actual, changes) {
153
+ if (!actual)
154
+ throw new Error('回读失败:保存后找不到该字段的配置');
155
+ if (changes.uploadMode === 'fixed' && String(actual.folderSelectType) !== '0') {
156
+ throw new Error('回读不一致:上传目录模式未保存为固定目录');
157
+ }
158
+ if (changes.uploadMode === 'option' && String(actual.folderSelectType) !== '1') {
159
+ throw new Error('回读不一致:上传目录模式未保存为选项关联');
160
+ }
161
+ if (changes.uploadMode === 'option' && changes.optionFieldId
162
+ && String(actual.optionId ?? '') !== String(changes.optionFieldId)) {
163
+ throw new Error('回读不一致:关联字段未按提交值保存');
164
+ }
165
+ if (changes.uploadFolder && (String(actual.folderId ?? '') || uploadFolderIdOf(actual)) !== String(changes.uploadFolder.id)) {
166
+ throw new Error('回读不一致:字段上传目录未按提交值保存');
167
+ }
168
+ if (changes.docFolder !== undefined) {
169
+ const expected = changes.docFolder ? String(changes.docFolder.id) : '';
170
+ const got = String(actual.docFixedDirectoryConfig?.folderValue?.[0]?.id ?? '');
171
+ if (got !== expected)
172
+ throw new Error('回读不一致:字段文档存储位置未按提交值保存');
173
+ }
174
+ if (changes.docTypes !== undefined) {
175
+ const expected = [...(changes.docTypes ?? [])].sort();
176
+ const got = [...(actual.docAddTypeConfig?.types ?? [])].sort();
177
+ if (JSON.stringify(expected) !== JSON.stringify(got)) {
178
+ throw new Error('回读不一致:字段新建方式未按提交值保存');
179
+ }
180
+ }
181
+ if (changes.formats !== undefined) {
182
+ const expected = [...(changes.formats ?? [])].sort();
183
+ const got = parseFormatLimit(actual.customLimitFormat).sort();
184
+ if (JSON.stringify(expected) !== JSON.stringify(got)) {
185
+ throw new Error('回读不一致:字段上传格式未按提交值保存');
186
+ }
187
+ }
188
+ }
189
+ export function registerFormAttachmentSettingCommands(form, program) {
190
+ const group = form.command('attachment-setting')
191
+ .description('附件上传与关联文档设置:通用配置 / 字段级覆盖');
192
+ group.command('get')
193
+ .description('读取附件设置(不传 --field 看通用配置,传了看字段级覆盖)')
194
+ .argument('<appId>', '应用 ID')
195
+ .argument('<objId>', '表单 objId')
196
+ .option('--field <field>', '附件字段名称或 fieldId')
197
+ .action(async (appId, objId, cmdOpts) => {
198
+ const { opts, client, baseUrl, target } = await context(program, appId, objId);
199
+ const common = await readAttachmentCommon(client, baseUrl, target);
200
+ const entities = await listAttachmentFields(client, baseUrl, target);
201
+ const formFields = await listFormFields(client, baseUrl, target);
202
+ if (cmdOpts.field) {
203
+ const field = findFormField(formFields, cmdOpts.field);
204
+ const entity = findAttachmentEntity(entities, String(field.fieldId));
205
+ const effective = await readAttachmentField(client, baseUrl, target, String(field.fieldId));
206
+ if (opts.json) {
207
+ console.log(JSON.stringify({ common, field: entity ?? null, effective }, null, 2));
208
+ return;
209
+ }
210
+ console.log(`附件字段:${field.title} (${field.fieldId})`);
211
+ if (entity)
212
+ fieldSummary(entity, formFields).forEach((line) => console.log(` ${line}`));
213
+ else
214
+ console.log(' 字段级配置:继承通用设置');
215
+ return;
216
+ }
217
+ if (opts.json) {
218
+ console.log(JSON.stringify({ common, fields: entities }, null, 2));
219
+ return;
220
+ }
221
+ console.log(`附件通用设置(formId ${target.formId})`);
222
+ commonSummary(common).forEach((line) => console.log(` ${line}`));
223
+ console.log(`\n附件字段(${entities.length})`);
224
+ if (!entities.length) {
225
+ console.log(' 无字段级覆盖,全部继承通用设置');
226
+ return;
227
+ }
228
+ for (const entity of entities) {
229
+ const field = formFields.find((item) => String(item.fieldId) === String(entity.fieldId));
230
+ console.log(` ${field?.title || entity.fieldName || entity.fieldId} (${entity.fieldId})`);
231
+ fieldSummary(entity, formFields).forEach((line) => console.log(` ${line}`));
232
+ }
233
+ });
234
+ group.command('set')
235
+ .description('修改附件设置;不给 --field 改通用配置,给 --field 改字段级覆盖')
236
+ .argument('<appId>', '应用 ID')
237
+ .argument('<objId>', '表单 objId')
238
+ .option('--field <field>', '附件字段名称或 fieldId;给了就是字段级覆盖')
239
+ .option('--upload-mode <mode>', '上传目录模式:fixed(固定目录)/ option(选项关联)')
240
+ .option('--upload-dir <folder>', '上传目录:ID 或唯一名称/路径;none 清空')
241
+ .option('--option-field <field>', '选项关联使用的字段名称或 fieldId')
242
+ .option('--doc-dir <folder>', '新建文档存储位置:ID 或唯一名称/路径;none 清空')
243
+ .option('--doc-types <types>', '新建方式,逗号分隔;none 清空;用 doc-types 子命令查可选值')
244
+ .option('--formats <exts>', '上传格式:扩展名逗号串、预设 @doc/@image/@video/@audio/@archive,或 none 清空')
245
+ .option('--max-size <mb>', '单文件大小限制(MB)')
246
+ .option('--enable <onoff>', '启用状态:on / off')
247
+ .option('--display-tip <onoff>', '提示语:on / off')
248
+ .action(async (appId, objId, cmdOpts) => {
249
+ const { opts, client, baseUrl, target } = await context(program, appId, objId);
250
+ const isField = Boolean(cmdOpts.field);
251
+ const commonOnly = cmdOpts.maxSize !== undefined || cmdOpts.enable !== undefined || cmdOpts.displayTip !== undefined;
252
+ if (!isField && (cmdOpts.uploadMode !== undefined || cmdOpts.optionField !== undefined)) {
253
+ throw new Error('--upload-mode / --option-field 只用于字段级覆盖,请同时提供 --field');
254
+ }
255
+ if (isField && commonOnly) {
256
+ throw new Error('--max-size / --enable / --display-tip 当前只支持通用配置,请去掉 --field');
257
+ }
258
+ if (isField) {
259
+ const formFields = await listFormFields(client, baseUrl, target);
260
+ const field = findFormField(formFields, cmdOpts.field);
261
+ const entities = await listAttachmentFields(client, baseUrl, target);
262
+ const existing = findAttachmentEntity(entities, String(field.fieldId));
263
+ const common = await readAttachmentCommon(client, baseUrl, target);
264
+ const changes = {};
265
+ if (cmdOpts.uploadMode !== undefined) {
266
+ const mode = String(cmdOpts.uploadMode).trim().toLowerCase();
267
+ if (mode !== 'fixed' && mode !== 'option')
268
+ throw new Error('--upload-mode 仅支持 fixed / option');
269
+ changes.uploadMode = mode;
270
+ }
271
+ const uploadFolder = await parseFolderOption(client, baseUrl, cmdOpts.uploadDir);
272
+ if (uploadFolder !== undefined)
273
+ changes.uploadFolder = uploadFolder;
274
+ if (cmdOpts.optionField !== undefined) {
275
+ const optionField = findFormField(formFields, cmdOpts.optionField);
276
+ changes.optionFieldId = String(optionField.fieldId);
277
+ }
278
+ const docFolder = await parseFolderOption(client, baseUrl, cmdOpts.docDir);
279
+ if (docFolder !== undefined)
280
+ changes.docFolder = docFolder;
281
+ const docTypes = await parseDocTypes(client, baseUrl, cmdOpts.docTypes);
282
+ if (docTypes !== undefined)
283
+ changes.docTypes = docTypes;
284
+ const formats = parseFormatsOption(cmdOpts.formats);
285
+ if (formats !== undefined)
286
+ changes.formats = formats;
287
+ if (!Object.keys(changes).length)
288
+ throw new Error('没有要修改的项,请查看 --help');
289
+ const baseEntity = existing ?? {
290
+ deleteType: 0,
291
+ folderSelectType: '0',
292
+ customLimitFormat: '',
293
+ attmentSizeLimit: String(common?.attmentSizeLimit ?? ''),
294
+ forbinBatchDownload: false,
295
+ showFormat: '0',
296
+ attachUploadUser: false,
297
+ attachUploadTime: false,
298
+ attachFileSize: true,
299
+ displayTip: true,
300
+ configType: '1',
301
+ formId: target.formId,
302
+ fieldId: String(field.fieldId),
303
+ folderType: '0',
304
+ limitType: '0',
305
+ sizeType: '0',
306
+ otherType: '0',
307
+ fieldName: field.title,
308
+ fieldType: 'FileComponent',
309
+ enableState: '1',
310
+ fileMenuValue: '',
311
+ docAddTypeConfig: {},
312
+ docFixedDirectoryConfig: {},
313
+ };
314
+ const nextEntity = applyFieldChanges(baseEntity, changes);
315
+ if (String(nextEntity.folderSelectType) === '1' && !nextEntity.optionId) {
316
+ throw new Error('选项关联模式需要 --option-field(或该字段已有 optionId)');
317
+ }
318
+ const nextEntities = existing
319
+ ? entities.map((entity) => (entity === existing ? nextEntity : entity))
320
+ : [...entities, nextEntity];
321
+ await saveAttachmentFields(client, baseUrl, target, nextEntities);
322
+ const readback = await listAttachmentFields(client, baseUrl, target);
323
+ const after = findAttachmentEntity(readback, String(field.fieldId));
324
+ assertFieldApplied(after, changes);
325
+ if (opts.json) {
326
+ console.log(JSON.stringify({ field: after, changes }, null, 2));
327
+ return;
328
+ }
329
+ console.log(`已保存并回读确认:${field.title} (${field.fieldId})`);
330
+ fieldSummary(after, formFields).forEach((line) => console.log(` ${line}`));
331
+ return;
332
+ }
333
+ const common = await readAttachmentCommon(client, baseUrl, target);
334
+ const changes = {};
335
+ const uploadFolder = await parseFolderOption(client, baseUrl, cmdOpts.uploadDir);
336
+ if (uploadFolder !== undefined)
337
+ changes.uploadFolder = uploadFolder;
338
+ const docFolder = await parseFolderOption(client, baseUrl, cmdOpts.docDir);
339
+ if (docFolder !== undefined)
340
+ changes.docFolder = docFolder;
341
+ const docTypes = await parseDocTypes(client, baseUrl, cmdOpts.docTypes);
342
+ if (docTypes !== undefined)
343
+ changes.docTypes = docTypes;
344
+ const formats = parseFormatsOption(cmdOpts.formats);
345
+ if (formats !== undefined)
346
+ changes.formats = formats;
347
+ if (cmdOpts.maxSize !== undefined) {
348
+ const value = Number(cmdOpts.maxSize);
349
+ if (!Number.isFinite(value) || value <= 0)
350
+ throw new Error('--max-size 需要大于 0 的数字');
351
+ const systemMax = Number(common?.formatLimitHelpTitle?.sysMaxSingleUploadSize || 1024);
352
+ if (value > systemMax)
353
+ throw new Error(`--max-size 超过系统上限 ${systemMax} MB`);
354
+ changes.maxSizeMb = value;
355
+ }
356
+ if (cmdOpts.enable !== undefined)
357
+ changes.enable = parseOnOff(cmdOpts.enable, '--enable');
358
+ if (cmdOpts.displayTip !== undefined)
359
+ changes.displayTip = parseOnOff(cmdOpts.displayTip, '--display-tip');
360
+ if (!Object.keys(changes).length)
361
+ throw new Error('没有要修改的项,请查看 --help');
362
+ const next = applyCommonChanges(common, changes);
363
+ await saveAttachmentCommon(client, baseUrl, target, next);
364
+ const readback = await readAttachmentCommon(client, baseUrl, target);
365
+ assertCommonApplied(readback, changes);
366
+ if (opts.json) {
367
+ console.log(JSON.stringify({ common: readback, changes }, null, 2));
368
+ return;
369
+ }
370
+ console.log('已保存并回读确认:附件通用设置');
371
+ commonSummary(readback).forEach((line) => console.log(` ${line}`));
372
+ });
373
+ group.command('folders')
374
+ .description('列出可用的文档目录(上传目录 / 新建文档存储位置)')
375
+ .option('--search <keyword>', '按名称过滤')
376
+ .action(async (cmdOpts) => {
377
+ const opts = program.opts();
378
+ const auth = await AuthSession.fromOptions(opts);
379
+ if (!auth)
380
+ throw new Error('无法加载认证');
381
+ const client = new ApiClient(auth);
382
+ const folders = await listDocumentFolders(client, auth.getBaseUrl());
383
+ const keyword = String(cmdOpts.search ?? '').trim();
384
+ const rows = keyword
385
+ ? folders.filter((folder) => String(folder.title ?? folder.content ?? '').includes(keyword))
386
+ : folders;
387
+ if (opts.json) {
388
+ console.log(JSON.stringify(rows, null, 2));
389
+ return;
390
+ }
391
+ if (!rows.length) {
392
+ console.log('没有匹配的文档目录');
393
+ return;
394
+ }
395
+ for (const folder of rows) {
396
+ console.log(` ${String(folder.id).padEnd(20)} ${folder.title || folder.content || ''}${folder.type ? ` [${folder.type}]` : ''}`);
397
+ }
398
+ });
399
+ group.command('doc-types')
400
+ .description('列出“新建方式设置”可选的文档类型')
401
+ .option('--folder <folderId>', '按文档目录查询可选类型', '-1')
402
+ .action(async (cmdOpts) => {
403
+ const opts = program.opts();
404
+ const auth = await AuthSession.fromOptions(opts);
405
+ if (!auth)
406
+ throw new Error('无法加载认证');
407
+ const client = new ApiClient(auth);
408
+ const menus = await readDocumentCreateMenus(client, auth.getBaseUrl(), cmdOpts.folder);
409
+ if (opts.json) {
410
+ console.log(JSON.stringify(menus, null, 2));
411
+ return;
412
+ }
413
+ if (!menus.length) {
414
+ console.log('没有可用的新建方式');
415
+ return;
416
+ }
417
+ for (const menu of menus) {
418
+ console.log(` ${String(menu.id).padEnd(10)} ${menu.content || ''}`);
419
+ }
420
+ });
421
+ }
422
+ //# sourceMappingURL=form-attachment-setting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-attachment-setting.js","sourceRoot":"","sources":["../../src/commands/form-attachment-setting.ts"],"names":[],"mappings":"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"}
@@ -364,9 +364,9 @@ export function registerFormBrowserDefinitionCommands(program) {
364
364
  output(result);
365
365
  }));
366
366
  const search = cmd.command('search').description('高级搜索默认条件');
367
- common(search.command('get').argument('<formId>').argument('<fieldId>'))
367
+ common(search.command('get').description('读取高级搜索默认条件').argument('<formId>').argument('<fieldId>'))
368
368
  .action((formId, fieldId, o) => run(async () => { const c = await ctx(o.module, o.appId, o.workflowId); const r = await resolved(c, formId, fieldId, 'search'); output(await searchRead(c, formId, r.controlId, r.source)); }));
369
- common(search.command('set').argument('<formId>').argument('<fieldId>').requiredOption('--config <json>', '完整搜索配置 JSON 或 @文件'))
369
+ common(search.command('set').description('设置高级搜索默认条件').argument('<formId>').argument('<fieldId>').requiredOption('--config <json>', '完整搜索配置 JSON 或 @文件'))
370
370
  .action((formId, fieldId, o) => run(async () => {
371
371
  const c = await ctx(o.module, o.appId, o.workflowId);
372
372
  const r = await resolved(c, formId, fieldId, 'search');
@@ -383,7 +383,7 @@ export function registerFormBrowserDefinitionCommands(program) {
383
383
  }));
384
384
  const scope = cmd.command('scope').description('浏览可选数据范围');
385
385
  common(scope.command('candidates').description('查询人员/部门/分部候选对象').argument('<formId>').argument('<fieldId>')
386
- .requiredOption('--kind <resource|department|subcompany>').option('--keyword <text>', '按名称搜索', ''))
386
+ .requiredOption('--kind <resource|department|subcompany>', '候选对象类型').option('--keyword <text>', '按名称搜索', ''))
387
387
  .action((formId, fieldId, o) => run(async () => {
388
388
  const c = await ctx(o.module, o.appId, o.workflowId);
389
389
  await resolved(c, formId, fieldId, 'scope');
@@ -395,7 +395,7 @@ export function registerFormBrowserDefinitionCommands(program) {
395
395
  output(data?.data || data);
396
396
  }));
397
397
  common(scope.command('matrix-options').description('读取已选矩阵的来源、结果字段与映射候选').argument('<formId>').argument('<fieldId>')
398
- .requiredOption('--matrix-id <id>').option('--matrix-type <code>', '矩阵类型码,默认 1', '1'))
398
+ .requiredOption('--matrix-id <id>', '要查询的矩阵 ID').option('--matrix-type <code>', '矩阵类型码,默认 1', '1'))
399
399
  .action((formId, fieldId, o) => run(async () => {
400
400
  const c = await ctx(o.module, o.appId, o.workflowId);
401
401
  const r = await resolved(c, formId, fieldId, 'scope');
@@ -406,9 +406,9 @@ export function registerFormBrowserDefinitionCommands(program) {
406
406
  matrixId: o.matrixId, matrixType: Number(o.matrixType),
407
407
  }), '查询矩阵映射候选'));
408
408
  }));
409
- common(scope.command('get').argument('<formId>').argument('<fieldId>'))
409
+ common(scope.command('get').description('读取浏览字段的数据范围').argument('<formId>').argument('<fieldId>'))
410
410
  .action((formId, fieldId, o) => run(async () => { const c = await ctx(o.module, o.appId, o.workflowId); const r = await resolved(c, formId, fieldId, 'scope'); output(await scopeRead(c, formId, r.controlId, r.source)); }));
411
- common(scope.command('set').argument('<formId>').argument('<fieldId>').requiredOption('--config <json>', '数据范围配置 JSON 或 @文件;以 describe 返回的选项构造'))
411
+ common(scope.command('set').description('设置浏览字段的数据范围').argument('<formId>').argument('<fieldId>').requiredOption('--config <json>', '数据范围配置 JSON 或 @文件;以 describe 返回的选项构造'))
412
412
  .action((formId, fieldId, o) => run(async () => {
413
413
  const c = await ctx(o.module, o.appId, o.workflowId);
414
414
  const r = await resolved(c, formId, fieldId, 'scope');
@@ -464,9 +464,9 @@ export function registerFormBrowserDefinitionCommands(program) {
464
464
  output({ success: true, fieldId: r.controlId, saved: (await scopeRead(c, formId, r.controlId, r.source)).saved });
465
465
  }));
466
466
  const tabs = cmd.command('tabs').description('浏览弹窗 Tab');
467
- common(tabs.command('get').argument('<formId>').argument('<fieldId>'))
467
+ common(tabs.command('get').description('读取浏览弹窗的 Tab 配置').argument('<formId>').argument('<fieldId>'))
468
468
  .action((formId, fieldId, o) => run(async () => { const c = await ctx(o.module, o.appId, o.workflowId); const r = await resolved(c, formId, fieldId, 'tabs'); output(await tabsRead(c, formId, r.controlId, r.source)); }));
469
- common(tabs.command('set').argument('<formId>').argument('<fieldId>')
469
+ common(tabs.command('set').description('设置浏览弹窗的显示、默认及排序').argument('<formId>').argument('<fieldId>')
470
470
  .requiredOption('--show <ids>', '显示的 tabId,逗号分隔').option('--default <id|none>', '默认 tabId;none=不指定,未传则保留仍可见的原默认项')
471
471
  .option('--order <ids>', '全部 tabId 顺序,逗号分隔;未给则保持现有顺序'))
472
472
  .action((formId, fieldId, o) => run(async () => {