weaver-e10-builder 1.5.1 → 1.5.2

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 (48) hide show
  1. package/dist/commands/form-add-physical-field.d.ts +3 -0
  2. package/dist/commands/form-add-physical-field.d.ts.map +1 -0
  3. package/dist/commands/form-add-physical-field.js +125 -0
  4. package/dist/commands/form-add-physical-field.js.map +1 -0
  5. package/dist/commands/form-list-permission.js +1 -1
  6. package/dist/commands/form-list-permission.js.map +1 -1
  7. package/dist/commands/form-physical-table.d.ts +3 -0
  8. package/dist/commands/form-physical-table.d.ts.map +1 -0
  9. package/dist/commands/form-physical-table.js +195 -0
  10. package/dist/commands/form-physical-table.js.map +1 -0
  11. package/dist/commands/form.d.ts.map +1 -1
  12. package/dist/commands/form.js +35 -412
  13. package/dist/commands/form.js.map +1 -1
  14. package/dist/commands/org.d.ts.map +1 -1
  15. package/dist/commands/org.js +131 -7
  16. package/dist/commands/org.js.map +1 -1
  17. package/dist/commands/workflow-operator-sign.js +1 -1
  18. package/dist/commands/workflow-operator-sign.js.map +1 -1
  19. package/dist/index.js +4 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/services/form-field-build.d.ts +71 -0
  22. package/dist/services/form-field-build.d.ts.map +1 -0
  23. package/dist/services/form-field-build.js +436 -0
  24. package/dist/services/form-field-build.js.map +1 -0
  25. package/dist/services/form-physical-table.d.ts +115 -0
  26. package/dist/services/form-physical-table.d.ts.map +1 -0
  27. package/dist/services/form-physical-table.js +153 -0
  28. package/dist/services/form-physical-table.js.map +1 -0
  29. package/dist/services/org-employee.d.ts +105 -1
  30. package/dist/services/org-employee.d.ts.map +1 -1
  31. package/dist/services/org-employee.js +186 -5
  32. package/dist/services/org-employee.js.map +1 -1
  33. package/package.json +1 -1
  34. package/skill-docs/SKILL.md +5 -5
  35. package/skill-docs/_catalog.md +1 -0
  36. package/skill-docs/references/common/ref-cli-commands.md +8 -2
  37. package/skill-docs/references/form/guide-form-association.md +1 -1
  38. package/skill-docs/references/form/guide-form-linkage.md +2 -2
  39. package/skill-docs/references/form/guide-form-physical-table.md +146 -0
  40. package/skill-docs/references/hrm/guide-org-employee.md +71 -3
  41. package/skill-docs/references/report/cell-config-echo-guide.md +1 -1
  42. package/skill-docs/references/report/dataset-query-filter-guide.md +3 -3
  43. package/skill-docs/references/report/date-range-query-reference.md +2 -2
  44. package/skill-docs/references/report/query-condition-api-guide.md +11 -11
  45. package/skill-docs/references/report/report-designer-feature-map.md +1 -1
  46. package/skill-docs/references/report/report-permission-guide.md +2 -2
  47. package/skill-docs/references/workflow/guide-workflow-odoc-setting.md +6 -6
  48. package/skill-docs/references/workflow/guide-workflow.md +1 -1
@@ -0,0 +1,153 @@
1
+ /**
2
+ * 多物理表 —— 一个表单的字段分散在多张物理表上(字段数过多时的容量兜底)。
3
+ *
4
+ * 设计器里的落点是「字段管理 → **其他**」页签,与「主表」「明细表」并列。
5
+ *
6
+ * ## 与「明细表」是两根轴,别混
7
+ *
8
+ * | | 明细表(`form add-detail-table`) | **物理表(本文件)** |
9
+ * |---|---|---|
10
+ * | 建表端点 | `saveSubForm` | **`saveFormTable`** |
11
+ * | 标志 | `isSubForm: true` | **`isSubForm: false`** |
12
+ * | `tableType` | `MAIN` | **`SUBSIDIARY`** |
13
+ * | 语义 | 一对多业务建模 | 一个表单自己的字段拆到多张表 |
14
+ *
15
+ * ## ⚠ `id` 这个键在 `saveFormTable` 里是**表 id**
16
+ *
17
+ * 改名时传 `formTable.id` = 表记录 id;建档时不传,由平台分配。
18
+ * (对比:`batch/save/formField` 的 `formTableList[].id` 是 **formId**、`.formTableId` 才是表 id ——
19
+ * 那条路本 CLI 不再走,见下。)
20
+ *
21
+ * ## 往表里加字段**不在本文件**
22
+ *
23
+ * 加字段走 `form add-physical-field` → `services/form-field-build.ts`,机制是
24
+ * `saveFormFieldNew` + jsonObj 里的 `formTableId`。
25
+ *
26
+ * 曾经这里还有一条「建表时用 `batch/save/formField` + `formTableList` 连字段一起建、并靠改
27
+ * `formTableId` 搬字段」的路,**两个原因废弃**:
28
+ * 1. 改已有字段的 formTableId 被平台明确拒绝:`此字段不属于当前物理表,不能更改位置`
29
+ * 2. 那条路对形状不全的字段会**回 200 却静默不落库**(实测 DateTime / Attachment 等就中招)
30
+ *
31
+ * ## 抓包来源
32
+ *
33
+ * 2026-10-08,mulinquan app `1320953875231211521` / 表单 objId `1320953905305272320`,
34
+ * 以及自建临时表单上的实机验证(建表/改名/删表/加字段全通)。
35
+ */
36
+ export const FIELD_MANAGE = '/api/ebuilder/form/form/field/manage';
37
+ /** 附属物理表的 `tableType`。主物理表是 `MAIN`。 */
38
+ export const SUB_TABLE_TYPE = 'SUBSIDIARY';
39
+ /** 建表 / 改名共用的报文。**带 `formTableId` 就是改名,不带就是新建。** */
40
+ export function buildSaveFormTablePayload(scope, table) {
41
+ return {
42
+ module: 'ebuilderform',
43
+ formTable: {
44
+ // ⚠ 有 id = 改名(指向已有表),没有 id = 新建。同一个键两种语义。
45
+ ...(table.formTableId ? { id: table.formTableId } : {}),
46
+ name: table.name,
47
+ tableName: table.tableName,
48
+ tableType: SUB_TABLE_TYPE,
49
+ form: { id: scope.formId },
50
+ otherProperties: '{}',
51
+ },
52
+ customParam: { appId: scope.appId, objId: scope.objId },
53
+ };
54
+ }
55
+ /** 删表报文。`ids` 是**表 id** 的数组,不是 formId。 */
56
+ export function buildDeleteFormTablePayload(scope, formTableIds) {
57
+ return {
58
+ module: 'ebuilderform',
59
+ formId: scope.formId,
60
+ ids: formTableIds,
61
+ customParam: { appId: scope.appId, objId: scope.objId },
62
+ };
63
+ }
64
+ /**
65
+ * 从 `saveFormTable` 的响应里取新建/改名后的表 id。
66
+ *
67
+ * ⚠ **故意不认 `data.id` / `data.formTable.id`** —— 那个 `id` 在这个子系统里另有含义
68
+ * (在 `formTableList` 里它是 **formId**)。猜错不是报错,而是把字段**静默绑到别的表上**,
69
+ * 属于本项目明令避免的失败模式。只认键名明确叫 formTableId 的。
70
+ *
71
+ * 实机验证(2026-10-08,mulinquan 临时表单):建表/改名都返回
72
+ * `{"code":200,"msg":"接口返回成功","status":true,"data":{"formTableId":"..."},"fail":false}`
73
+ * 认不出来就返回空串,由调用方把原始响应打出来给人看。
74
+ */
75
+ export function extractFormTableId(response) {
76
+ const candidates = [
77
+ response?.data?.formTableId,
78
+ response?.data?.formTable?.formTableId,
79
+ response?.formTableId,
80
+ ];
81
+ for (const c of candidates) {
82
+ if (c !== undefined && c !== null && String(c).trim())
83
+ return String(c);
84
+ }
85
+ return '';
86
+ }
87
+ /** 读全量字段(扁平记录,含 `formTableId`)—— 用来回读确认字段到底落在哪张表上。 */
88
+ export async function readFieldRecords(client, baseUrl, appId, scope) {
89
+ const r = await client.post(`${baseUrl}${FIELD_MANAGE}/getFormFieldPage?apid=${encodeURIComponent(appId)}`, {
90
+ pageNo: 1,
91
+ pageSize: 500,
92
+ module: 'ebuilderform',
93
+ customParam: { appId: scope.appId, objId: scope.objId },
94
+ formFieldSearchEntity: { isDelete: 0, status: 'enable', formId: scope.formId },
95
+ }, { ebbusinessid: scope.formId });
96
+ return r?.data?.pageDatas?.result || r?.data?.data?.records || r?.data?.data || [];
97
+ }
98
+ /**
99
+ * 列出一个表单的**全部物理表**(含主表)—— 就是设计器「字段管理」那排 chip 的数据源。
100
+ *
101
+ * ⚠ 响应里每条记录的 `id` 键是 **formId**、`formTableId` 才是表 id(本子系统里 `id` 反复是这个陷阱,
102
+ * 建表响应也一样)。只读 `formTableId`。
103
+ *
104
+ * 实机验证(2026-10-08,mulinquan 表单 `1323898521989193728`)返回三条:主表(MAIN) + 表1/表2(SUBSIDIARY),
105
+ * 显示名与建表时给的一致 —— 这条接口是「formTableId 建完只能靠记」那个缺口的补法。
106
+ */
107
+ export async function listFormTables(client, baseUrl, appId, scope) {
108
+ const r = await client.post(`${baseUrl}${FIELD_MANAGE}/getFormAGroupList?apid=${encodeURIComponent(appId)}`, { module: 'ebuilderform', formId: scope.formId, customParam: { appId: scope.appId, objId: scope.objId } }, { ebbusinessid: scope.formId });
109
+ const list = r?.data?.formList || [];
110
+ return list
111
+ .filter((t) => t?.formTableId)
112
+ .map((t) => ({
113
+ formTableId: String(t.formTableId),
114
+ name: String(t.name ?? ''),
115
+ tableName: String(t.tableName ?? ''),
116
+ tableType: String(t.tableType ?? ''),
117
+ systemTable: !!t.systemTable,
118
+ dataCount: Number(t.dataCount ?? 0),
119
+ }));
120
+ }
121
+ /**
122
+ * `fieldId → 所在物理表`。`records` 来自 {@link readFieldRecords}(扁平记录,带 `formTableId`)。
123
+ *
124
+ * ⚠ 实测:**主表字段的记录里 `formTableId` 可能整个键都不在**(同一张主表上,走 `form create` 建的
125
+ * 字段没这个键、走 `saveFormFieldNew` 建的有)。附属表的字段则都带自己的表 id。
126
+ * 所以取不到 / 对不上任何一张已知表时**一律归主表** —— 平台不写就是「默认那张」,
127
+ * 比留空或编一个表名诚实。
128
+ */
129
+ export function mapFieldsToTables(records, tables) {
130
+ const byTableId = new Map(tables.map((t) => [t.formTableId, t]));
131
+ const main = tables.find((t) => t.tableType === 'MAIN');
132
+ const out = {};
133
+ for (const r of records) {
134
+ const fieldId = r?.fieldId;
135
+ if (!fieldId)
136
+ continue;
137
+ const hit = byTableId.get(String(r.formTableId));
138
+ if (hit)
139
+ out[String(fieldId)] = hit;
140
+ else if (main)
141
+ out[String(fieldId)] = main;
142
+ }
143
+ return out;
144
+ }
145
+ /** 建表(不传 formTableId)或改名(传 formTableId)。 */
146
+ export async function saveFormTable(client, baseUrl, appId, scope, table) {
147
+ return client.post(`${baseUrl}${FIELD_MANAGE}/saveFormTable?apid=${encodeURIComponent(appId)}`, buildSaveFormTablePayload(scope, table), { ebbusinessid: scope.formId });
148
+ }
149
+ /** 删表。 */
150
+ export async function deleteFormTables(client, baseUrl, appId, scope, formTableIds) {
151
+ return client.post(`${baseUrl}${FIELD_MANAGE}/deleteFormTable?apid=${encodeURIComponent(appId)}`, buildDeleteFormTablePayload(scope, formTableIds), { ebbusinessid: scope.formId });
152
+ }
153
+ //# sourceMappingURL=form-physical-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-physical-table.js","sourceRoot":"","sources":["../../src/services/form-physical-table.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { ApiClient } from '../core/client.js';
1
2
  export interface ImportParam {
2
3
  bizId: string;
3
4
  moduleName: string;
@@ -28,7 +29,14 @@ export declare function readFileMeta(filePath: string): FileMeta;
28
29
  export declare function buildPreUploadForm(meta: FileMeta, employeeId: string, fileBytes: Buffer<ArrayBuffer>): FormData;
29
30
  /** ② 的报文 = ① + `preUploadId` + `uploadType`。 */
30
31
  export declare function buildUploadForm(meta: FileMeta, employeeId: string, preUploadId: string, fileBytes: Buffer<ArrayBuffer>): FormData;
31
- /** ① 的返回:预上传 id 藏在 `data.uploadModuleDto.fileid`(**小写 d**)。 */
32
+ /**
33
+ * ① 的返回:预上传 id。
34
+ *
35
+ * **同一个端点在不同环境返回的形状不一样** —— 实测 mulinquan 只给 `data.preUploadId`
36
+ * (`data` 下就三个键:`preUploadId` / `uploadType` / `permissionType`,**没有** `uploadModuleDto`、
37
+ * 也**没有** `fileid`),而 `data.uploadModuleDto.fileid` 是另一套环境/版本的写法。
38
+ * 两者语义相同(都是给 ② 当 `preUploadId` 用),所以都认;一个都没有才报错。
39
+ */
32
40
  export declare function extractPreUploadId(resp: any): string;
33
41
  /**
34
42
  * ② 的返回:`data.fileid`(**小写 d**)。
@@ -84,4 +92,100 @@ export interface ImportPreview {
84
92
  * 而且 `rerviewNum` 限了条数,**这里看到的只是前 N 行,不是全部**。
85
93
  */
86
94
  export declare function extractPreview(resp: any): ImportPreview;
95
+ /**
96
+ * 导入任务的结果。
97
+ *
98
+ * ⚠ **⑥ `importExcelData` 的响应体只有一个 `true`**,条数、失败原因、错误文件全都不在里面。
99
+ * 要知道「到底导进去没有」必须再问一次 `getByTaskId`。
100
+ * 只看 ⑥ 就报成功,会让**整批失败**也显示成「导入已提交」。
101
+ */
102
+ export interface ImportTaskResult {
103
+ /**
104
+ * 平台自己的状态码。**`0` 不是「成功」的意思,只是一个中途值** —— 同一个任务先读到
105
+ * `status: 0` + `msg: 成功`、几秒后变成 `-1` + 失败 1 条,**只有 `callbackData` 才是结论**。
106
+ * `-1` = 存在错误数据。仅用于展示,**不要拿它判完成**(用 {@link isTaskSettled})。
107
+ */
108
+ status: number;
109
+ msg: string;
110
+ successCount: number;
111
+ errorCount: number;
112
+ /** 失败数据的下载文件 id(状态为 -1 时才有)。 */
113
+ errorFileId: string;
114
+ /** `callbackData` 解析不出条数时为 true —— 此时数字一概不可信,别拿去判断成功。 */
115
+ countsUnknown: boolean;
116
+ }
117
+ /** ⑥ 之后的进度查询。 */
118
+ export declare function buildGetByTaskIdPath(taskId: string): string;
119
+ /**
120
+ * 解析任务状态。
121
+ *
122
+ * ⚠ `callbackData` 是**一个 JSON 字符串**,要二次解析;里面 `successCount` 是**数字**
123
+ * (`1`)、`errorCount` 却是**字符串**(`"0"`)—— 同一段 JSON 里类型不一致,两边都过一遍 `Number`。
124
+ */
125
+ export declare function parseTaskResult(resp: any): ImportTaskResult;
126
+ /**
127
+ * 任务是否已到终态。
128
+ *
129
+ * **判据是 `callbackData` 能不能解出来,不是 `status`。** 踩过的坑:按 `status === 0` 判完成,
130
+ * 会在任务刚开始那一刻就停 —— 那时 `status: 0`、`msg: 成功`、`callbackData` 还没有,
131
+ * 几秒后才落成 `-1` + 失败 1 条。**中途值长得像成功,这是最坏的一种**。
132
+ *
133
+ * `status === -1` 也直接算终态(明确失败,没必要再等);此时若条数还取不到,调用方会照实提示。
134
+ */
135
+ export declare function isTaskSettled(r: ImportTaskResult): boolean;
136
+ export declare function fetchTaskResult(client: ApiClient, baseUrl: string, taskId: string): Promise<ImportTaskResult>;
137
+ /**
138
+ * 轮询到终态。超时返回 `null`(**不编一个成功出来**)—— 调用方据此如实报「还在处理」。
139
+ */
140
+ export declare function waitTaskResult(client: ApiClient, baseUrl: string, taskId: string, opts?: {
141
+ timeoutMs?: number;
142
+ intervalMs?: number;
143
+ }): Promise<ImportTaskResult | null>;
144
+ /**
145
+ * 失败数据的下载地址。
146
+ *
147
+ * 这是个**跳转**:平台 302 到对象存储的签名地址,文件真身在那一步。
148
+ */
149
+ export declare function buildErrorFileDownloadPath(fileId: string): string;
150
+ /** 文件名:优先取对象存储那步 `response-content-disposition` 里的,取不到就用兜底名。 */
151
+ export declare function fileNameFromDisposition(location: string, fallback: string): string;
152
+ /**
153
+ * 下载失败数据。
154
+ *
155
+ * 两步走是**故意的**:先带鉴权拿 302,再**不带任何鉴权头**去对象存储取文件。
156
+ * 直接把 `eteamsid` 跟着跳转发到腾讯云域名上,等于把会话凭证递给第三方主机 —— 哪怕那是租户自己的桶,
157
+ * 也没有理由发。
158
+ *
159
+ * 这里不走 `ApiClient`:它把 302 一律当「会话过期」会去重新登录,而这个 302 是正常业务跳转。
160
+ */
161
+ export declare function downloadErrorFile(baseUrl: string, fileId: string, eteamsId: string): Promise<{
162
+ bytes: Buffer;
163
+ fileName: string;
164
+ }>;
165
+ /**
166
+ * 一条失败原因。
167
+ *
168
+ * ⚠ **原因不是文件里的某一列,是出错单元格上的「批注」**(Excel comment)。
169
+ * 所以光把 xlsx 存下来、用表格软件打开看值,**看不到为什么失败** —— 得读批注。
170
+ * 实测形态:出错的「姓名」单元格上挂批注「姓名 重复」。
171
+ */
172
+ export interface ImportErrorReason {
173
+ /** Excel 行号(含表头,第 1 行是表头)。 */
174
+ row: number;
175
+ /** 列号(从 1 开始)。 */
176
+ column: number;
177
+ /** 该列表头(去掉「(必填)」后缀),取不到用列字母。 */
178
+ header: string;
179
+ /** 该单元格的值。 */
180
+ value: string;
181
+ /** 批注文本 —— 这里才是原因。 */
182
+ reason: string;
183
+ }
184
+ /**
185
+ * 从一个错误 xlsx 的字节里把「哪一格、错在哪」抽出来。
186
+ *
187
+ * 批注是**默认就解析**的(挂在 `cell.c`),不用开任何选项 —— 这里刻意不传 `cellComments`,
188
+ * 那玩意儿在这版类型里没声明,传了编译不过,而它本来也不改变行为。
189
+ */
190
+ export declare function parseErrorFileReasons(bytes: Buffer | Uint8Array): ImportErrorReason[];
87
191
  //# sourceMappingURL=org-employee.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"org-employee.d.ts","sourceRoot":"","sources":["../../src/services/org-employee.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAiBzD;AAED,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAQvD;AAiBD,aAAa;AACb,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAK/G;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAOjI;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAIpD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAI/C;AAED,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,SAAS,CAMxH;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BzB;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAK/C;AAYD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAOjG;AAED,cAAc;AACd,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,iBAAiB;AACjB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAWvD"}
1
+ {"version":3,"file":"org-employee.d.ts","sourceRoot":"","sources":["../../src/services/org-employee.ts"],"names":[],"mappings":"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"}
@@ -18,18 +18,22 @@
18
18
  * ④ POST `/api/ebatch/uploadFileId` `bizId` + `fileId` + `uploadSet` → `taskId`
19
19
  * ⑤ POST `/api/ebatch/getExcelData` `?taskId&rerviewNum=N` → 预览(**不落库**)
20
20
  * ⑥ POST `/api/ebatch/importExcelData` `?taskId&...` → 真正执行
21
+ * ⑦ POST `/api/ebatch/getByTaskId` `?taskId` → **导入结果**(条数 / 失败原因 / 错误文件)
21
22
  *
22
- * ⚠ **返回的嵌套层级三步三样,别想当然**(都是实测出来的):
23
- * - ① 在 `data.uploadModuleDto.fileid`(藏在子对象里)
23
+ * ⚠ **返回的嵌套层级三步三样,别想当然**:
24
+ * - ① 在 `data.preUploadId`(有的环境是 `data.uploadModuleDto.fileid`,藏在子对象里)
24
25
  * - ② 在 `data.fileid`(**小写 d**,不是 `fileId`)
25
26
  * - ③④ 在 `data.data.*`(多一层;④ 的 `taskId` 就在这里)
26
27
  *
28
+ * ⚠ **⑥ 的响应体只有一个 `true`**,条数不在里面 —— 不补 ⑦ 的话,**整批失败也会显示成「导入已提交」**。
29
+ *
27
30
  * ⑤ 是**干跑**:走到这里什么都不会落库,所以 `--dry-run` 就停在 ⑤。
28
31
  * ⑤⑥ 的参数全在 query string,body 为空。
29
32
  */
30
33
  import { createHash } from 'node:crypto';
31
34
  import { readFileSync, statSync } from 'node:fs';
32
35
  import { basename } from 'node:path';
36
+ import XLSX from 'xlsx';
33
37
  /** 上传的 multipart 字段名 —— ①② 共用这份,② 再补两个。 */
34
38
  const MULTIPART_MODULE = 'ebatch';
35
39
  /**
@@ -100,11 +104,18 @@ export function buildUploadForm(meta, employeeId, preUploadId, fileBytes) {
100
104
  form.append('file', new Blob([fileBytes]), meta.name);
101
105
  return form;
102
106
  }
103
- /** ① 的返回:预上传 id 藏在 `data.uploadModuleDto.fileid`(**小写 d**)。 */
107
+ /**
108
+ * ① 的返回:预上传 id。
109
+ *
110
+ * **同一个端点在不同环境返回的形状不一样** —— 实测 mulinquan 只给 `data.preUploadId`
111
+ * (`data` 下就三个键:`preUploadId` / `uploadType` / `permissionType`,**没有** `uploadModuleDto`、
112
+ * 也**没有** `fileid`),而 `data.uploadModuleDto.fileid` 是另一套环境/版本的写法。
113
+ * 两者语义相同(都是给 ② 当 `preUploadId` 用),所以都认;一个都没有才报错。
114
+ */
104
115
  export function extractPreUploadId(resp) {
105
- const id = resp?.data?.uploadModuleDto?.fileid ?? resp?.data?.fileid;
116
+ const id = resp?.data?.preUploadId ?? resp?.data?.uploadModuleDto?.fileid ?? resp?.data?.fileid;
106
117
  if (!id)
107
- throw new Error('preUploadCheck 未返回文件 id(data.uploadModuleDto.fileid)');
118
+ throw new Error('preUploadCheck 未返回文件 id(data.preUploadId / data.uploadModuleDto.fileid)');
108
119
  return String(id);
109
120
  }
110
121
  /**
@@ -216,4 +227,174 @@ export function extractPreview(resp) {
216
227
  rows,
217
228
  };
218
229
  }
230
+ /** ⑥ 之后的进度查询。 */
231
+ export function buildGetByTaskIdPath(taskId) {
232
+ return `/api/ebatch/getByTaskId?taskId=${encodeURIComponent(taskId)}`;
233
+ }
234
+ /**
235
+ * 解析任务状态。
236
+ *
237
+ * ⚠ `callbackData` 是**一个 JSON 字符串**,要二次解析;里面 `successCount` 是**数字**
238
+ * (`1`)、`errorCount` 却是**字符串**(`"0"`)—— 同一段 JSON 里类型不一致,两边都过一遍 `Number`。
239
+ */
240
+ export function parseTaskResult(resp) {
241
+ const d = resp?.data ?? {};
242
+ let cb = {};
243
+ let countsUnknown = true;
244
+ const raw = d.callbackData;
245
+ if (typeof raw === 'string' && raw.trim()) {
246
+ try {
247
+ cb = JSON.parse(raw);
248
+ countsUnknown = false;
249
+ }
250
+ catch {
251
+ cb = {};
252
+ }
253
+ }
254
+ else if (raw && typeof raw === 'object') {
255
+ cb = raw;
256
+ countsUnknown = false;
257
+ }
258
+ return {
259
+ status: Number(d.status),
260
+ msg: String(d.msg ?? ''),
261
+ successCount: Number(cb.successCount ?? 0),
262
+ errorCount: Number(cb.errorCount ?? 0),
263
+ errorFileId: String(cb.errorFileId ?? ''),
264
+ countsUnknown,
265
+ };
266
+ }
267
+ /**
268
+ * 任务是否已到终态。
269
+ *
270
+ * **判据是 `callbackData` 能不能解出来,不是 `status`。** 踩过的坑:按 `status === 0` 判完成,
271
+ * 会在任务刚开始那一刻就停 —— 那时 `status: 0`、`msg: 成功`、`callbackData` 还没有,
272
+ * 几秒后才落成 `-1` + 失败 1 条。**中途值长得像成功,这是最坏的一种**。
273
+ *
274
+ * `status === -1` 也直接算终态(明确失败,没必要再等);此时若条数还取不到,调用方会照实提示。
275
+ */
276
+ export function isTaskSettled(r) {
277
+ return !r.countsUnknown || r.status === -1;
278
+ }
279
+ export async function fetchTaskResult(client, baseUrl, taskId) {
280
+ const r = await client.post(`${baseUrl}${buildGetByTaskIdPath(taskId)}`);
281
+ if (r?.code !== 200 || r?.status === false)
282
+ throw new Error(`查询导入任务失败: ${r?.msg || '未知错误'}`);
283
+ return parseTaskResult(r);
284
+ }
285
+ /**
286
+ * 轮询到终态。超时返回 `null`(**不编一个成功出来**)—— 调用方据此如实报「还在处理」。
287
+ */
288
+ export async function waitTaskResult(client, baseUrl, taskId, opts = {}) {
289
+ const timeoutMs = opts.timeoutMs ?? 60_000;
290
+ const intervalMs = opts.intervalMs ?? 1_000;
291
+ const deadline = Date.now() + timeoutMs;
292
+ let last = null;
293
+ for (;;) {
294
+ try {
295
+ last = await fetchTaskResult(client, baseUrl, taskId);
296
+ if (isTaskSettled(last))
297
+ return last;
298
+ }
299
+ catch {
300
+ // 单次查询失败不致命:任务在平台侧照跑,继续轮询到超时为止
301
+ }
302
+ if (Date.now() >= deadline)
303
+ return null;
304
+ await new Promise((r) => setTimeout(r, intervalMs));
305
+ }
306
+ }
307
+ // ─── 失败数据下载 ───────────────────────────────────────────
308
+ /**
309
+ * 失败数据的下载地址。
310
+ *
311
+ * 这是个**跳转**:平台 302 到对象存储的签名地址,文件真身在那一步。
312
+ */
313
+ export function buildErrorFileDownloadPath(fileId) {
314
+ return `/api/file/remotedownload/${encodeURIComponent(fileId)}/token/true?authModule=ebatch`;
315
+ }
316
+ /** 文件名:优先取对象存储那步 `response-content-disposition` 里的,取不到就用兜底名。 */
317
+ export function fileNameFromDisposition(location, fallback) {
318
+ try {
319
+ const q = new URL(location).searchParams.get('response-content-disposition') || '';
320
+ const m = /filename=([^;]+)/i.exec(q);
321
+ if (m)
322
+ return decodeURIComponent(m[1].trim());
323
+ }
324
+ catch { /* 不是合法 URL 就用兜底 */ }
325
+ return fallback;
326
+ }
327
+ /**
328
+ * 下载失败数据。
329
+ *
330
+ * 两步走是**故意的**:先带鉴权拿 302,再**不带任何鉴权头**去对象存储取文件。
331
+ * 直接把 `eteamsid` 跟着跳转发到腾讯云域名上,等于把会话凭证递给第三方主机 —— 哪怕那是租户自己的桶,
332
+ * 也没有理由发。
333
+ *
334
+ * 这里不走 `ApiClient`:它把 302 一律当「会话过期」会去重新登录,而这个 302 是正常业务跳转。
335
+ */
336
+ export async function downloadErrorFile(baseUrl, fileId, eteamsId) {
337
+ const first = await fetch(`${baseUrl}${buildErrorFileDownloadPath(fileId)}`, {
338
+ headers: { eteamsid: eteamsId, langtype: 'zh_CN' },
339
+ redirect: 'manual',
340
+ });
341
+ const fallback = `错误数据_${fileId}.xlsx`;
342
+ if (first.status >= 300 && first.status < 400) {
343
+ const location = first.headers.get('location') || '';
344
+ if (!location)
345
+ throw new Error(`下载跳转缺少 location(HTTP ${first.status})`);
346
+ const second = await fetch(location);
347
+ if (!second.ok)
348
+ throw new Error(`从对象存储下载失败: HTTP ${second.status}`);
349
+ return {
350
+ bytes: Buffer.from(await second.arrayBuffer()),
351
+ fileName: fileNameFromDisposition(location, fallback),
352
+ };
353
+ }
354
+ if (!first.ok)
355
+ throw new Error(`下载失败数据失败: HTTP ${first.status}`);
356
+ return { bytes: Buffer.from(await first.arrayBuffer()), fileName: fallback };
357
+ }
358
+ function stripHeaderSuffix(title) {
359
+ return title.replace(/[((]\s*必填\s*[))]\s*$/, '').trim();
360
+ }
361
+ /**
362
+ * 从一个错误 xlsx 的字节里把「哪一格、错在哪」抽出来。
363
+ *
364
+ * 批注是**默认就解析**的(挂在 `cell.c`),不用开任何选项 —— 这里刻意不传 `cellComments`,
365
+ * 那玩意儿在这版类型里没声明,传了编译不过,而它本来也不改变行为。
366
+ */
367
+ export function parseErrorFileReasons(bytes) {
368
+ const wb = XLSX.read(bytes);
369
+ const out = [];
370
+ for (const sheetName of wb.SheetNames) {
371
+ const ws = wb.Sheets[sheetName];
372
+ const ref = ws?.['!ref'];
373
+ if (!ref)
374
+ continue;
375
+ const range = XLSX.utils.decode_range(ref);
376
+ // 表头固定在第 1 行:批注挂在数据行上,得回头去表头取列名
377
+ const headers = [];
378
+ for (let c = range.s.c; c <= range.e.c; c++) {
379
+ const cell = ws[XLSX.utils.encode_cell({ r: range.s.r, c })];
380
+ headers[c] = stripHeaderSuffix(String(cell?.v ?? ''));
381
+ }
382
+ for (let r = range.s.r + 1; r <= range.e.r; r++) {
383
+ for (let c = range.s.c; c <= range.e.c; c++) {
384
+ const cell = ws[XLSX.utils.encode_cell({ r, c })];
385
+ const note = Array.isArray(cell?.c) ? cell.c.map((x) => String(x?.t ?? '')).filter(Boolean).join(' / ') : '';
386
+ if (!note)
387
+ continue;
388
+ out.push({
389
+ row: r + 1,
390
+ column: c + 1,
391
+ header: headers[c] || XLSX.utils.encode_col(c),
392
+ value: String(cell?.v ?? ''),
393
+ reason: note,
394
+ });
395
+ }
396
+ }
397
+ }
398
+ return out;
399
+ }
219
400
  //# sourceMappingURL=org-employee.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"org-employee.js","sourceRoot":"","sources":["../../src/services/org-employee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"org-employee.js","sourceRoot":"","sources":["../../src/services/org-employee.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weaver-e10-builder",
3
- "version": "1.5.1",
3
+ "version": "1.5.2",
4
4
  "description": "Eteams/Ebuilder CLI — 泛微 OA 命令行工具",
5
5
  "type": "module",
6
6
  "files": [
@@ -2,11 +2,11 @@
2
2
  name: weaver-e10-builder
3
3
  display_name: 泛微E10智能搭建Skill
4
4
  display_name_en: E10 Builder
5
- description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.5.1
6
- description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.5.1。
7
- description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.5.1.
5
+ description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.5.2
6
+ description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.5.2。
7
+ description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.5.2.
8
8
  category: coding
9
- version: 1.5.1
9
+ version: 1.5.2
10
10
  author: 泛微网络科技股份有限公司
11
11
  auto: true
12
12
  ---
@@ -15,7 +15,7 @@ auto: true
15
15
 
16
16
  ## 安装与升级
17
17
 
18
- 本 skill 需与 CLI **版本匹配**(当前对应 CLI `1.5.1`)。版本不一致时命令/文档/选项可能对不上——升级前先对齐:
18
+ 本 skill 需与 CLI **版本匹配**(当前对应 CLI `1.5.2`)。版本不一致时命令/文档/选项可能对不上——升级前先对齐:
19
19
 
20
20
  ```shell
21
21
  e10-cli --version # 查 CLI 版本,应与上方 description 标注一致
@@ -15,6 +15,7 @@
15
15
  | 字段联动、跨表带出、field-linkage、多跳带出、带出字段赋值、Text 字段取名称 | `references/form/guide-field-linkage.md` |
16
16
  | 新建表单、form create、EB 表单标准创建流程 | `references/form/guide-create-form.md` |
17
17
  | 二级明细、子明细、父级行标识、子级行标识、多级明细 | `references/form/guide-form-sub-detail.md` |
18
+ | 物理表、多物理表、附属物理表、saveFormTable、getFormAGroupList、字段管理其他页签、字段超过100、add-physical-table、add-physical-field | `references/form/guide-form-physical-table.md` |
18
19
  | 虚拟表、虚拟表单、数据源表单、业务表展示、数据加工结果 | `references/form/guide-virtual-form.md` |
19
20
  | 字段定义、字段类型、关联字段码表、DateRange、multiple | `references/form/ref-form-fields.md` |
20
21
  | FLOW/EXCEL、布局样表、布局蓝图、字段分组、singleRow | `references/form/guide-form-layout-planning.md` |