weaver-e10-builder 1.2.5 → 1.5.1
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.
- package/assets/org-employee-template.xlsx +0 -0
- package/dist/commands/form-button.d.ts.map +1 -1
- package/dist/commands/form-button.js +28 -5
- package/dist/commands/form-button.js.map +1 -1
- package/dist/commands/form-field-linkage.d.ts.map +1 -1
- package/dist/commands/form-field-linkage.js +27 -6
- package/dist/commands/form-field-linkage.js.map +1 -1
- package/dist/commands/form-formula-linkage.d.ts +3 -0
- package/dist/commands/form-formula-linkage.d.ts.map +1 -0
- package/dist/commands/form-formula-linkage.js +434 -0
- package/dist/commands/form-formula-linkage.js.map +1 -0
- package/dist/commands/form-formula.d.ts.map +1 -1
- package/dist/commands/form-formula.js +22 -3
- package/dist/commands/form-formula.js.map +1 -1
- package/dist/commands/form-list-click.d.ts.map +1 -1
- package/dist/commands/form-list-click.js +2 -1
- package/dist/commands/form-list-click.js.map +1 -1
- package/dist/commands/form-native.d.ts.map +1 -1
- package/dist/commands/form-native.js +11 -3
- package/dist/commands/form-native.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +247 -173
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/matrix.d.ts.map +1 -1
- package/dist/commands/matrix.js +175 -36
- package/dist/commands/matrix.js.map +1 -1
- package/dist/commands/org.d.ts +10 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +278 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/role.d.ts.map +1 -1
- package/dist/commands/role.js +106 -62
- package/dist/commands/role.js.map +1 -1
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +501 -26
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-auth-resp.d.ts.map +1 -1
- package/dist/commands/workflow-auth-resp.js +53 -5
- package/dist/commands/workflow-auth-resp.js.map +1 -1
- package/dist/commands/workflow-create-auth-resp.d.ts.map +1 -1
- package/dist/commands/workflow-create-auth-resp.js +5 -1
- package/dist/commands/workflow-create-auth-resp.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +78 -9
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/services/action-detail.d.ts.map +1 -1
- package/dist/services/action-detail.js +5 -4
- package/dist/services/action-detail.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.js +22 -7
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
- package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/approve_create.js +6 -3
- package/dist/services/actionflow/components/approve_create.js.map +1 -1
- package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
- package/dist/services/actionflow/components/custom_set_form.js +35 -1
- package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
- package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/components/custom_trigger.js +4 -1
- package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
- package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
- package/dist/services/actionflow/components/dml_execute.js +7 -3
- package/dist/services/actionflow/components/dml_execute.js.map +1 -1
- package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/document_actions.js +7 -3
- package/dist/services/actionflow/components/document_actions.js.map +1 -1
- package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/hrm_actions.js +7 -3
- package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
- package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
- package/dist/services/actionflow/components/multiple_execution.js +14 -5
- package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
- package/dist/services/actionflow/components/output.js +1 -1
- package/dist/services/actionflow/components/output.js.map +1 -1
- package/dist/services/actionflow/components/send_message.js +2 -2
- package/dist/services/actionflow/components/send_message.js.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.js +7 -3
- package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +12 -2
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/context_provider.d.ts.map +1 -1
- package/dist/services/actionflow/context_provider.js +21 -2
- package/dist/services/actionflow/context_provider.js.map +1 -1
- package/dist/services/actionflow/custom_trigger_context.d.ts +10 -0
- package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -0
- package/dist/services/actionflow/custom_trigger_context.js +46 -0
- package/dist/services/actionflow/custom_trigger_context.js.map +1 -0
- package/dist/services/actionflow/filter_rules.js +2 -2
- package/dist/services/actionflow/filter_rules.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +9 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +59 -21
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/id_generator.d.ts +2 -0
- package/dist/services/actionflow/id_generator.d.ts.map +1 -1
- package/dist/services/actionflow/id_generator.js +13 -0
- package/dist/services/actionflow/id_generator.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +6 -1
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +89 -35
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/auth-resp-condition.d.ts +35 -0
- package/dist/services/auth-resp-condition.d.ts.map +1 -0
- package/dist/services/auth-resp-condition.js +111 -0
- package/dist/services/auth-resp-condition.js.map +1 -0
- package/dist/services/condition-rules.d.ts.map +1 -1
- package/dist/services/condition-rules.js +4 -1
- package/dist/services/condition-rules.js.map +1 -1
- package/dist/services/esb-interface/document-parser.d.ts.map +1 -1
- package/dist/services/esb-interface/document-parser.js +62 -5
- package/dist/services/esb-interface/document-parser.js.map +1 -1
- package/dist/services/form-association.d.ts +19 -0
- package/dist/services/form-association.d.ts.map +1 -1
- package/dist/services/form-association.js +64 -0
- package/dist/services/form-association.js.map +1 -1
- package/dist/services/form-button-action.d.ts +7 -0
- package/dist/services/form-button-action.d.ts.map +1 -1
- package/dist/services/form-button-action.js +11 -1
- package/dist/services/form-button-action.js.map +1 -1
- package/dist/services/form-create.d.ts +4 -0
- package/dist/services/form-create.d.ts.map +1 -1
- package/dist/services/form-create.js +18 -12
- package/dist/services/form-create.js.map +1 -1
- package/dist/services/form-field-patch.d.ts +3 -1
- package/dist/services/form-field-patch.d.ts.map +1 -1
- package/dist/services/form-field-patch.js +23 -9
- package/dist/services/form-field-patch.js.map +1 -1
- package/dist/services/form-formula-linkage.d.ts +349 -0
- package/dist/services/form-formula-linkage.d.ts.map +1 -0
- package/dist/services/form-formula-linkage.js +546 -0
- package/dist/services/form-formula-linkage.js.map +1 -0
- package/dist/services/form-layout-insert.d.ts +84 -0
- package/dist/services/form-layout-insert.d.ts.map +1 -0
- package/dist/services/form-layout-insert.js +244 -0
- package/dist/services/form-layout-insert.js.map +1 -0
- package/dist/services/form-linkage-condition.d.ts +159 -0
- package/dist/services/form-linkage-condition.d.ts.map +1 -0
- package/dist/services/form-linkage-condition.js +307 -0
- package/dist/services/form-linkage-condition.js.map +1 -0
- package/dist/services/formula-detail.d.ts +98 -6
- package/dist/services/formula-detail.d.ts.map +1 -1
- package/dist/services/formula-detail.js +208 -26
- package/dist/services/formula-detail.js.map +1 -1
- package/dist/services/matrix-rows.d.ts +43 -0
- package/dist/services/matrix-rows.d.ts.map +1 -0
- package/dist/services/matrix-rows.js +104 -0
- package/dist/services/matrix-rows.js.map +1 -0
- package/dist/services/org-department.d.ts +114 -0
- package/dist/services/org-department.d.ts.map +1 -0
- package/dist/services/org-department.js +209 -0
- package/dist/services/org-department.js.map +1 -0
- package/dist/services/org-employee.d.ts +87 -0
- package/dist/services/org-employee.d.ts.map +1 -0
- package/dist/services/org-employee.js +219 -0
- package/dist/services/org-employee.js.map +1 -0
- package/dist/services/role-member.d.ts +99 -0
- package/dist/services/role-member.d.ts.map +1 -0
- package/dist/services/role-member.js +206 -0
- package/dist/services/role-member.js.map +1 -0
- package/dist/services/workflow-info.d.ts +83 -0
- package/dist/services/workflow-info.d.ts.map +1 -0
- package/dist/services/workflow-info.js +97 -0
- package/dist/services/workflow-info.js.map +1 -0
- package/dist/services/workflow-odoc-setting.d.ts +1 -1
- package/dist/services/workflow-odoc-setting.d.ts.map +1 -1
- package/dist/services/workflow-odoc-setting.js +15 -6
- package/dist/services/workflow-odoc-setting.js.map +1 -1
- package/dist/utils/column-name.d.ts +24 -0
- package/dist/utils/column-name.d.ts.map +1 -1
- package/dist/utils/column-name.js +16 -0
- package/dist/utils/column-name.js.map +1 -1
- package/ecodecmd/package.json +1 -2
- package/ecodecmd/src/loaddep.js +19 -9
- package/package.json +4 -4
- package/skill-docs/SKILL.md +13 -9
- package/skill-docs/_catalog.md +85 -81
- package/skill-docs/actionflows/SKILL.md +173 -170
- package/skill-docs/actionflows/references/components/logic/Output.md +1 -1
- package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +32 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
- package/skill-docs/references/common/guide-plan-template.md +9 -3
- package/skill-docs/references/common/ref-cli-commands.md +47 -22
- package/skill-docs/references/esb-interface/guide-import.md +4 -1
- package/skill-docs/references/form/guide-create-form.md +13 -0
- package/skill-docs/references/form/guide-field-linkage.md +2 -0
- package/skill-docs/references/form/guide-form-formula-functions.md +36 -0
- package/skill-docs/references/form/guide-form-layout-incremental.md +75 -0
- package/skill-docs/references/form/guide-form-linkage.md +61 -3
- package/skill-docs/references/form/guide-formula-linkage.md +250 -0
- package/skill-docs/references/form/ref-form-fields.md +6 -0
- package/skill-docs/references/hrm/guide-matrix.md +79 -16
- package/skill-docs/references/hrm/guide-org-employee.md +56 -0
- package/skill-docs/references/workflow/guide-workflow-auth-resp.md +48 -22
- package/skill-docs/references/workflow/guide-workflow-odoc-setting.md +248 -0
- package/skill-docs/references/workflow/guide-workflow-odoc.md +23 -51
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 角色成员:人员 / 部门 / 分部。
|
|
3
|
+
*
|
|
4
|
+
* 三类走**同一个**保存端点 `/api/bs/auth/role/{roleId}/member/save-or-update`,
|
|
5
|
+
* 靠 `objType` 选各自的数组键:
|
|
6
|
+
*
|
|
7
|
+
* resource → obj_resource[] 人员
|
|
8
|
+
* department → obj_department[] 部门
|
|
9
|
+
* subcompany → obj_subcompany[] 分部
|
|
10
|
+
*
|
|
11
|
+
* 成员项**不是「只给 id」** —— 平台要的是「搜索接口返回的那个对象」按各自形状再加工:
|
|
12
|
+
* 人员带 avatar(来自 `hrmAvatarInfos`,不是搜索结果里那个只有 showName 的 avatar)、
|
|
13
|
+
* 工号(`jobNum` → `number`)、姓名首字母(`logogram` 首字母大写 → `indexType`);
|
|
14
|
+
* 部门/分部带 `icon`、`title`(部门是「部门名|上级路径」)。
|
|
15
|
+
*
|
|
16
|
+
* 搜索那一步不在这里 —— 人员走 `getEmployeeByKeyWords`、部门/分部走
|
|
17
|
+
* `browser/data/{department,subcompany}`,各自形状不同,由调用方负责。
|
|
18
|
+
*/
|
|
19
|
+
export const MEMBER_KINDS = [
|
|
20
|
+
'resource', 'department', 'subcompany', 'position', 'channel',
|
|
21
|
+
];
|
|
22
|
+
/** 类型的中文名(错误信息与命令输出用)。 */
|
|
23
|
+
export const MEMBER_KIND_LABEL = {
|
|
24
|
+
resource: '人员',
|
|
25
|
+
department: '部门',
|
|
26
|
+
subcompany: '分部',
|
|
27
|
+
position: '岗位',
|
|
28
|
+
channel: '渠道',
|
|
29
|
+
};
|
|
30
|
+
/** 判定用户输入的形状是不是合法成员类型(CLI 侧收窄,比平台报错早)。 */
|
|
31
|
+
export function isMemberKind(v) {
|
|
32
|
+
return MEMBER_KINDS.includes(v);
|
|
33
|
+
}
|
|
34
|
+
/** 成员类型 → 保存报文里的数组键(`resource` → `obj_resource`)。 */
|
|
35
|
+
export function memberArrayKey(kind) {
|
|
36
|
+
return `obj_${kind}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 组织类成员的缺省图标(搜索接口没给 icon 时兜底)。
|
|
40
|
+
*
|
|
41
|
+
* `department` / `subcompany` / `position` 三个是实测到的真实值;
|
|
42
|
+
* `channel` 一栏没数据可验(两个环境都是 total=0),按同类命名规律填,**未经真机确认**。
|
|
43
|
+
*/
|
|
44
|
+
const DEFAULT_ICON = {
|
|
45
|
+
department: 'Icon-department03',
|
|
46
|
+
subcompany: 'Icon-headquarters02',
|
|
47
|
+
position: 'Icon-post02',
|
|
48
|
+
channel: 'Icon-channel01',
|
|
49
|
+
};
|
|
50
|
+
/** 姓名首字母:`logogram`(如 `rly`)首字母大写 → `R`。取不到就留空,不编。 */
|
|
51
|
+
function indexTypeOf(emp) {
|
|
52
|
+
const logogram = String(emp?.logogram ?? '').trim();
|
|
53
|
+
return logogram ? logogram[0].toUpperCase() : '';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 人员:`getEmployeeByKeyWords` 的返回项 → `obj_resource[]` 的一项。
|
|
57
|
+
*
|
|
58
|
+
* 几处**不能想当然**的地方:
|
|
59
|
+
* - `avatar` 要用 `hrmAvatarInfos`;搜索结果里那个 `avatar` 只有 `{showName}`,结构不对。
|
|
60
|
+
* - `title` 是**纯名字** —— 早期 CLI 自己拼过「名字|部门」,与平台实际存的不符。
|
|
61
|
+
* - `department` 留空(平台存的是空串,机构信息另有 `departmentId`)。
|
|
62
|
+
* - `number`(工号)**不是人人都有**,没有就不发这个键。
|
|
63
|
+
* - `userid`:搜索接口不返回它,用 `id` 顶上 —— 实测平台落库取的正是 `id`
|
|
64
|
+
* (读回 `member/list` 里 `userId === id`)。
|
|
65
|
+
*/
|
|
66
|
+
export function buildPersonEntry(emp) {
|
|
67
|
+
const id = String(emp?.id ?? '');
|
|
68
|
+
const name = String(emp?.name ?? '');
|
|
69
|
+
const entry = {
|
|
70
|
+
id,
|
|
71
|
+
cid: String(emp?.imCid ?? emp?.cid ?? ''),
|
|
72
|
+
userid: String(emp?.userid ?? emp?.userId ?? id),
|
|
73
|
+
name,
|
|
74
|
+
statusCode: String(emp?.status ?? 'normal'),
|
|
75
|
+
content: name,
|
|
76
|
+
title: name,
|
|
77
|
+
contentDesc: name,
|
|
78
|
+
department: '',
|
|
79
|
+
avatar: emp?.hrmAvatarInfos ?? {
|
|
80
|
+
previewPath: '/api/file/preview?type=redirect&imgFormat=small&fileId=',
|
|
81
|
+
appPreviewPath: '/api/app/file/preview?type=redirect&imgFormat=small&fileId=',
|
|
82
|
+
name,
|
|
83
|
+
userId: id,
|
|
84
|
+
},
|
|
85
|
+
indexType: indexTypeOf(emp),
|
|
86
|
+
isLeaf: true,
|
|
87
|
+
templateType: 'default',
|
|
88
|
+
originTargetType: 'user',
|
|
89
|
+
pid: '',
|
|
90
|
+
richContent: name,
|
|
91
|
+
departmentId: String(emp?.departmentId ?? ''),
|
|
92
|
+
mainId: id,
|
|
93
|
+
stopDepartment: false,
|
|
94
|
+
leaf: true,
|
|
95
|
+
};
|
|
96
|
+
const jobNum = String(emp?.jobNum ?? '').trim();
|
|
97
|
+
if (jobNum)
|
|
98
|
+
entry.number = jobNum;
|
|
99
|
+
return entry;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 部门 / 分部:浏览接口(`browser/data/{department,subcompany}`)的返回项 → `obj_department[]` / `obj_subcompany[]` 的一项。
|
|
103
|
+
*
|
|
104
|
+
* 两个返回项字段一致(`id`/`name`/`content`/`title`/`icon`),只有缺省图标不同,
|
|
105
|
+
* 所以共用一份构造。
|
|
106
|
+
*/
|
|
107
|
+
export function buildOrgEntry(raw, kind) {
|
|
108
|
+
const name = String(raw?.name ?? raw?.content ?? '');
|
|
109
|
+
return {
|
|
110
|
+
id: String(raw?.id ?? ''),
|
|
111
|
+
name,
|
|
112
|
+
content: String(raw?.content ?? name),
|
|
113
|
+
// 部门是「部门名|上级路径」,直接沿用搜索结果的 title;没有就用名字兜底
|
|
114
|
+
title: String(raw?.title ?? name),
|
|
115
|
+
isLeaf: true,
|
|
116
|
+
icon: String(raw?.icon ?? DEFAULT_ICON[kind]),
|
|
117
|
+
stopDepartment: false,
|
|
118
|
+
leaf: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** 按类型分发到对应的构造器。 */
|
|
122
|
+
export function buildMemberEntry(kind, raw) {
|
|
123
|
+
return kind === 'resource' ? buildPersonEntry(raw) : buildOrgEntry(raw, kind);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 从搜索结果里挑出目标对象:**精确同名优先**;只有一条结果时用它;否则报错。
|
|
127
|
+
*
|
|
128
|
+
* 不取首条 —— 同名或模糊命中时取首条会**静默加错人**,事后只能去角色里一条条翻。
|
|
129
|
+
*/
|
|
130
|
+
export function pickExact(list, keyword, label, nameOf) {
|
|
131
|
+
const rows = Array.isArray(list) ? list : [];
|
|
132
|
+
const name = (x) => String(nameOf(x) ?? '');
|
|
133
|
+
const exact = rows.filter((x) => name(x) === keyword);
|
|
134
|
+
if (exact.length === 1)
|
|
135
|
+
return exact[0];
|
|
136
|
+
if (exact.length > 1) {
|
|
137
|
+
throw new Error(`${label}「${keyword}」匹配到 ${exact.length} 条同名记录,无法确定是哪一个`);
|
|
138
|
+
}
|
|
139
|
+
if (rows.length === 0)
|
|
140
|
+
throw new Error(`未找到${label}「${keyword}」`);
|
|
141
|
+
if (rows.length === 1)
|
|
142
|
+
return rows[0];
|
|
143
|
+
throw new Error(`${label}「${keyword}」匹配到 ${rows.length} 条但没有同名项:`
|
|
144
|
+
+ `${rows.slice(0, 5).map(name).join('、')}${rows.length > 5 ? ' …' : ''}`);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 组装 `member/save-or-update` 的报文。
|
|
148
|
+
*
|
|
149
|
+
* `objectTypeFilter` 与 `org_permission` 等取平台界面上的固定值;
|
|
150
|
+
* `objType` 决定哪个数组承载成员。
|
|
151
|
+
*/
|
|
152
|
+
export function buildMemberSavePayload(kind, entries, opts = {}) {
|
|
153
|
+
return {
|
|
154
|
+
objType: kind,
|
|
155
|
+
obj_level: '1',
|
|
156
|
+
seclevel: { max: opts.secMax ?? 100, min: opts.secMin ?? 0 },
|
|
157
|
+
org_permission: 'ALL_SCOPE',
|
|
158
|
+
position_level: '1',
|
|
159
|
+
isOpenSubcompany: true,
|
|
160
|
+
isSeclevel: Boolean(opts.isSeclevel),
|
|
161
|
+
includeFlag: false,
|
|
162
|
+
isAll: false,
|
|
163
|
+
appDetach: false,
|
|
164
|
+
objectTypeFilter: [
|
|
165
|
+
'resource', 'department', 'subcompany', 'channel',
|
|
166
|
+
'position', 'all', 'external', 'allExternal',
|
|
167
|
+
],
|
|
168
|
+
isRoleMaintainer: false,
|
|
169
|
+
expireType: 'UNLIMITED',
|
|
170
|
+
detach: true,
|
|
171
|
+
// 部门/分部才有这个键:人员那条抓包里没有它
|
|
172
|
+
...(kind === 'resource' ? {} : { department_attribute: opts.departmentAttribute ?? [] }),
|
|
173
|
+
[memberArrayKey(kind)]: entries,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/** `member/list` 的请求体(分页与筛选都留空 = 取全部)。 */
|
|
177
|
+
export function buildMemberListBody() {
|
|
178
|
+
return {
|
|
179
|
+
memberLevel: '', orgSubcompany: '', subcompany: '', channel: '',
|
|
180
|
+
orgDepartment: '', position: '', employee: '', department: '', expire: false,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 从 `member/list` 的返回里抽出成员行。
|
|
185
|
+
*
|
|
186
|
+
* 返回体里除 `data` 外还夹着表格列定义、按钮权限等一堆东西,**只认 `data` 数组**,
|
|
187
|
+
* 别去猜别的键(`displayData` 是同一份内容的副本)。
|
|
188
|
+
*/
|
|
189
|
+
export function extractMemberRows(response) {
|
|
190
|
+
// 成员行在 **`response.data.data`**:外层 `data` 是分页包装(还带 columns / operates /
|
|
191
|
+
// checkBoxPermission 等表格元数据)。直接取 `response.data` 会拿到对象、被 `Array.isArray`
|
|
192
|
+
// 判假而返回空 —— 于是「读不到」被误报成「没有成员」。
|
|
193
|
+
const payload = response?.data;
|
|
194
|
+
const rows = Array.isArray(payload) ? payload : payload?.data;
|
|
195
|
+
if (!Array.isArray(rows))
|
|
196
|
+
return [];
|
|
197
|
+
return rows.map((r) => ({
|
|
198
|
+
id: String(r?.id ?? ''),
|
|
199
|
+
object: String(r?.object ?? r?.memberName ?? ''),
|
|
200
|
+
resourceType: String(r?.resourceType ?? ''),
|
|
201
|
+
memberLevel: String(r?.memberLevel ?? ''),
|
|
202
|
+
orgPermission: String(r?.orgPermission ?? ''),
|
|
203
|
+
userId: String(r?.userId ?? ''),
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=role-member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-member.js","sourceRoot":"","sources":["../../src/services/role-member.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { ApiClient } from '../core/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* 由 workflowId 读流程的基础信息与**它关联的表单**。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么值得单独做
|
|
6
|
+
*
|
|
7
|
+
* 流程列表(`workflow search` / `workflow list`)回的字段很薄:只有 id、名称、类型名、
|
|
8
|
+
* 描述、关联类型等。**「这个流程绑的是哪张表」不在里面** —— 那要另调接口。
|
|
9
|
+
*
|
|
10
|
+
* ## 三条接口各给什么
|
|
11
|
+
*
|
|
12
|
+
* | 接口 | 给什么 | 可靠性 |
|
|
13
|
+
* |---|---|---|
|
|
14
|
+
* | `baseSet/getBaseInfoList` | 流程自身的名称 / 类型名 / 描述 | 稳,按 id 检索 |
|
|
15
|
+
* | `baseSet/getRelateForm` | `{formId}` —— **关联表单的 id** | 稳,这是通用路径 |
|
|
16
|
+
* | `baseSet/getChangeRelateForm` | `data.ebFormId[0]`:表单的 name / state / module | **只在带变更单的流程上有值**,普通流程回空数组 |
|
|
17
|
+
*
|
|
18
|
+
* `getRelateForm` 是唯一稳定的「流程 → 表单」入口。`getChangeRelateForm` 只当**补充信息源**:
|
|
19
|
+
* 有值就顺带拿表单名与启用状态,没有也不影响 formId 到手。
|
|
20
|
+
*
|
|
21
|
+
* ## 两个容易踩的点
|
|
22
|
+
*
|
|
23
|
+
* - **`formId` 不是 `objId`**。平台自己也是拿 formId 直接开设计器的,定位表单 formId 就够;
|
|
24
|
+
* 但要让其它命令(表单布局、字段管理那些)用上,得先换成 objId,而**没有直通的
|
|
25
|
+
* formId → objId 接口** —— 只能先知道在哪个应用,再按 formId 匹配。
|
|
26
|
+
* - **所属应用不在任何一条返回里**。别指望 `customParameters.ebAppId` 之类:那个键是空的。
|
|
27
|
+
*/
|
|
28
|
+
export interface WorkflowFormRef {
|
|
29
|
+
formId: string;
|
|
30
|
+
/** 表单名。仅当 `getChangeRelateForm` 有值时才有,否则空串。 */
|
|
31
|
+
name: string;
|
|
32
|
+
/** 启用状态原文(如「启用」)。同上,可能为空。 */
|
|
33
|
+
state: string;
|
|
34
|
+
/**
|
|
35
|
+
* 是不是 eb 表(`module === 'ebuilder'`)。
|
|
36
|
+
* **`null` 表示判断不了** —— 补充信息源没值时无从得知,不要当成「不是」。
|
|
37
|
+
*/
|
|
38
|
+
isEb: boolean | null;
|
|
39
|
+
}
|
|
40
|
+
export interface WorkflowInfo {
|
|
41
|
+
workflowId: string;
|
|
42
|
+
name: string;
|
|
43
|
+
typeName: string;
|
|
44
|
+
desc: string;
|
|
45
|
+
/** 关联表单。查不到时为 `null`(该流程可能没绑表,或接口没返回)。 */
|
|
46
|
+
form: WorkflowFormRef | null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 把三条接口的结果并成一份。**纯函数**,便于覆盖「补充源缺失」这类分支。
|
|
50
|
+
*
|
|
51
|
+
* 名称取 `baseRow` 优先 —— 它来自流程自身的列表接口,比变更关联那份更权威;
|
|
52
|
+
* 两者都没有时退回空串,不编。
|
|
53
|
+
*/
|
|
54
|
+
export declare function mergeWorkflowInfo(workflowId: string, baseRow: Record<string, any> | undefined, relateForm: Record<string, any> | undefined, ebForm: Record<string, any> | undefined): WorkflowInfo;
|
|
55
|
+
/**
|
|
56
|
+
* 判定 `baseSet/deletePath` 的结果。**纯函数**。
|
|
57
|
+
*
|
|
58
|
+
* 这个接口会「成功但没删」:顶层 `code/status` 只表示**请求被处理了**,删除的**真实结果**
|
|
59
|
+
* 在 `data.data.status` 里。平台拒绝删除时返回的是
|
|
60
|
+
* `{code:200, status:true, data:{status:false, msg:'…'}}` —— 只看顶层就会把没删成的
|
|
61
|
+
* 报成「流程已删除」。前端的判断也是 `result.data.status`。
|
|
62
|
+
*
|
|
63
|
+
* `data.data` 缺失时(不同环境/版本可能不带)不硬判失败,交给调用方回读确认 ——
|
|
64
|
+
* 宁可多查一次,也不要在拿不到结果时假装成功或假装失败。
|
|
65
|
+
*/
|
|
66
|
+
export declare function judgeDeletePathResponse(res: any): {
|
|
67
|
+
ok: boolean;
|
|
68
|
+
reason: string;
|
|
69
|
+
inconclusive: boolean;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* 按 **id 精确** 找一条流程。找不到返回 `undefined`。
|
|
73
|
+
*
|
|
74
|
+
* **只认 id 完全相等**,不做兜底取首条 —— 这个函数是「删除前先确认存在」的依据,
|
|
75
|
+
* 取首条会让一个不存在的 id 因为搜索的模糊匹配而「被找到」。
|
|
76
|
+
*
|
|
77
|
+
* 两个 belongType 都查:团队流程与个人流程是分开的列表,只查一个会把另一边的
|
|
78
|
+
* 正常流程误判成「不存在」。
|
|
79
|
+
*/
|
|
80
|
+
export declare function findWorkflowRow(client: ApiClient, baseUrl: string, workflowId: string): Promise<Record<string, any> | undefined>;
|
|
81
|
+
/** 读一条流程的信息。三条调用里只有 `getBaseInfoList` 失败会抛出,另两条缺了不算错。 */
|
|
82
|
+
export declare function fetchWorkflowInfo(client: ApiClient, baseUrl: string, workflowId: string): Promise<WorkflowInfo>;
|
|
83
|
+
//# sourceMappingURL=workflow-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-info.d.ts","sourceRoot":"","sources":["../../src/services/workflow-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EACxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GACtC,YAAY,CAkBd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAWxG;AAKD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAsB1C;AAED,yDAAyD;AACzD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAavB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 把三条接口的结果并成一份。**纯函数**,便于覆盖「补充源缺失」这类分支。
|
|
3
|
+
*
|
|
4
|
+
* 名称取 `baseRow` 优先 —— 它来自流程自身的列表接口,比变更关联那份更权威;
|
|
5
|
+
* 两者都没有时退回空串,不编。
|
|
6
|
+
*/
|
|
7
|
+
export function mergeWorkflowInfo(workflowId, baseRow, relateForm, ebForm) {
|
|
8
|
+
const formId = String(relateForm?.formId || '');
|
|
9
|
+
const module = String(ebForm?.module || '');
|
|
10
|
+
return {
|
|
11
|
+
workflowId: String(workflowId),
|
|
12
|
+
name: String(baseRow?.workflowName || ebForm?.name || ''),
|
|
13
|
+
typeName: String(baseRow?.typeName || ''),
|
|
14
|
+
desc: String(baseRow?.workflowDesc || ''),
|
|
15
|
+
form: formId
|
|
16
|
+
? {
|
|
17
|
+
formId,
|
|
18
|
+
name: String(ebForm?.name || ''),
|
|
19
|
+
state: String(ebForm?.state || ''),
|
|
20
|
+
// 只有拿到 module 才敢下结论;缺了就如实说「不知道」
|
|
21
|
+
isEb: module ? module === 'ebuilder' : null,
|
|
22
|
+
}
|
|
23
|
+
: null,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 判定 `baseSet/deletePath` 的结果。**纯函数**。
|
|
28
|
+
*
|
|
29
|
+
* 这个接口会「成功但没删」:顶层 `code/status` 只表示**请求被处理了**,删除的**真实结果**
|
|
30
|
+
* 在 `data.data.status` 里。平台拒绝删除时返回的是
|
|
31
|
+
* `{code:200, status:true, data:{status:false, msg:'…'}}` —— 只看顶层就会把没删成的
|
|
32
|
+
* 报成「流程已删除」。前端的判断也是 `result.data.status`。
|
|
33
|
+
*
|
|
34
|
+
* `data.data` 缺失时(不同环境/版本可能不带)不硬判失败,交给调用方回读确认 ——
|
|
35
|
+
* 宁可多查一次,也不要在拿不到结果时假装成功或假装失败。
|
|
36
|
+
*/
|
|
37
|
+
export function judgeDeletePathResponse(res) {
|
|
38
|
+
if (res?.code !== 200 || !res?.status) {
|
|
39
|
+
return { ok: false, reason: res?.msg || '未知错误', inconclusive: false };
|
|
40
|
+
}
|
|
41
|
+
const inner = res?.data;
|
|
42
|
+
if (inner && typeof inner === 'object' && inner.status !== undefined) {
|
|
43
|
+
return inner.status === true
|
|
44
|
+
? { ok: true, reason: '', inconclusive: false }
|
|
45
|
+
: { ok: false, reason: inner.msg || '平台未说明原因', inconclusive: false };
|
|
46
|
+
}
|
|
47
|
+
return { ok: true, reason: '', inconclusive: true };
|
|
48
|
+
}
|
|
49
|
+
/** 团队流程 / 个人流程。按 id 找一条流程时两个作用域都要看。 */
|
|
50
|
+
const BELONG_TYPES = [1, 0];
|
|
51
|
+
/**
|
|
52
|
+
* 按 **id 精确** 找一条流程。找不到返回 `undefined`。
|
|
53
|
+
*
|
|
54
|
+
* **只认 id 完全相等**,不做兜底取首条 —— 这个函数是「删除前先确认存在」的依据,
|
|
55
|
+
* 取首条会让一个不存在的 id 因为搜索的模糊匹配而「被找到」。
|
|
56
|
+
*
|
|
57
|
+
* 两个 belongType 都查:团队流程与个人流程是分开的列表,只查一个会把另一边的
|
|
58
|
+
* 正常流程误判成「不存在」。
|
|
59
|
+
*/
|
|
60
|
+
export async function findWorkflowRow(client, baseUrl, workflowId) {
|
|
61
|
+
const wanted = String(workflowId);
|
|
62
|
+
let anySucceeded = false;
|
|
63
|
+
let lastError = '';
|
|
64
|
+
for (const belongType of BELONG_TYPES) {
|
|
65
|
+
const list = await client.post(`${baseUrl}/api/bs/workflow/pathdef/baseSet/getBaseInfoList`, {
|
|
66
|
+
isTemplate: 0, belongType, current: 1, pageSize: 50,
|
|
67
|
+
searchParams: {
|
|
68
|
+
searchDatas: { type: 'and', status: '0', formType: 'all' },
|
|
69
|
+
quickSearchDatas: {},
|
|
70
|
+
otherSearchDatas: { workflowId: wanted },
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
if (list?.code !== 200 || !list?.status) {
|
|
74
|
+
lastError = list?.msg || '未知错误';
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
anySucceeded = true;
|
|
78
|
+
const hit = (list?.data?.data || []).find((r) => String(r.id) === wanted);
|
|
79
|
+
if (hit)
|
|
80
|
+
return hit;
|
|
81
|
+
}
|
|
82
|
+
// 一次都没查成 → 是接口的问题,不能当成「不存在」——
|
|
83
|
+
// 那会让「删除前的存在性检查」在接口抽风时把正常流程挡下来。
|
|
84
|
+
if (!anySucceeded)
|
|
85
|
+
throw new Error(`查询流程失败: ${lastError}`);
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
/** 读一条流程的信息。三条调用里只有 `getBaseInfoList` 失败会抛出,另两条缺了不算错。 */
|
|
89
|
+
export async function fetchWorkflowInfo(client, baseUrl, workflowId) {
|
|
90
|
+
const baseRow = await findWorkflowRow(client, baseUrl, workflowId);
|
|
91
|
+
const relate = await client.get(`${baseUrl}/api/bs/workflow/pathdef/baseSet/getRelateForm?workflowId=${workflowId}`);
|
|
92
|
+
// 补充信息源:普通流程这里就是空数组,不当错误处理
|
|
93
|
+
const change = await client.get(`${baseUrl}/api/bs/workflow/pathdef/baseSet/getChangeRelateForm?workflowId=${workflowId}`);
|
|
94
|
+
const ebForm = (change?.data?.data?.ebFormId || [])[0];
|
|
95
|
+
return mergeWorkflowInfo(workflowId, baseRow, relate?.data, ebForm);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=workflow-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-info.js","sourceRoot":"","sources":["../../src/services/workflow-info.ts"],"names":[],"mappings":"AAkDA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,OAAwC,EACxC,UAA2C,EAC3C,MAAuC;IAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACzD,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC;QACzC,IAAI,EAAE,MAAM;YACV,CAAC,CAAC;gBACA,MAAM;gBACN,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;gBAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;gBAClC,gCAAgC;gBAChC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI;aAC5C;YACD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAQ;IAC9C,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QACtC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC;IACxB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI;YAC1B,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;YAC/C,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC;AAED,uCAAuC;AACvC,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAiB,EACjB,OAAe,EACf,UAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,kDAAkD,EAAE;YAC3F,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YACnD,YAAY,EAAE;gBACZ,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAC1D,gBAAgB,EAAE,EAAE;gBACpB,gBAAgB,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;aACzC;SACF,CAAC,CAAC;QACH,IAAI,IAAI,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAAC,SAAS,GAAG,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QACvF,YAAY,GAAG,IAAI,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;QAC/E,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,8BAA8B;IAC9B,gCAAgC;IAChC,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IAC3D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAiB,EACjB,OAAe,EACf,UAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAEnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC7B,GAAG,OAAO,6DAA6D,UAAU,EAAE,CACpF,CAAC;IACF,2BAA2B;IAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC7B,GAAG,OAAO,mEAAmE,UAAU,EAAE,CAC1F,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,OAAO,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -24,7 +24,7 @@ export declare const NESTED_GROUPS: Set<string>;
|
|
|
24
24
|
/** 分组数据本身是数组,写入时换个名字 */
|
|
25
25
|
export declare const ARRAY_GROUPS: Record<string, string>;
|
|
26
26
|
/** 回读值 → 写入值。 */
|
|
27
|
-
export declare function toWriteValue(value: any): any;
|
|
27
|
+
export declare function toWriteValue(value: any, key?: string): any;
|
|
28
28
|
/** GET 响应的 settingList → 按 settingKey 分组的数据。 */
|
|
29
29
|
export declare function readGroups(root: any): Record<string, any>;
|
|
30
30
|
/** 分组数据 → 可提交报文。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-odoc-setting.d.ts","sourceRoot":"","sources":["../../src/services/workflow-odoc-setting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,mBAAmB;AACnB,eAAO,MAAM,aAAa,aAA4C,CAAC;AAEvE,wBAAwB;AACxB,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-odoc-setting.d.ts","sourceRoot":"","sources":["../../src/services/workflow-odoc-setting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,mBAAmB;AACnB,eAAO,MAAM,aAAa,aAA4C,CAAC;AAEvE,wBAAwB;AACxB,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAgC,CAAC;AASjF,iBAAiB;AACjB,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAc1D;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAOzD;AAED,oBAAoB;AACpB,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAYjG;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAgB7F;AAED,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAG7E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAK9D"}
|
|
@@ -23,13 +23,22 @@
|
|
|
23
23
|
export const NESTED_GROUPS = new Set(['odocNumber', 'odocAttachArea']);
|
|
24
24
|
/** 分组数据本身是数组,写入时换个名字 */
|
|
25
25
|
export const ARRAY_GROUPS = { signNode: 'signNodeList' };
|
|
26
|
+
/** 浏览器读回为 [{name,id}],保存时需要逗号分隔的节点 ID。 */
|
|
27
|
+
const NODE_LIST_KEYS = new Set([
|
|
28
|
+
'openTextDefaultNode', 'editTextNode', 'openTextInFormNode', 'reUploadNode',
|
|
29
|
+
'cleanCopyNodes', 'printNodes', 'downloadNodes', 'syncTitleNodes',
|
|
30
|
+
'useClientNodes', 'editNumberNode', 'attachOpenNode', 'archivesNode',
|
|
31
|
+
]);
|
|
26
32
|
/** 回读值 → 写入值。 */
|
|
27
|
-
export function toWriteValue(value) {
|
|
33
|
+
export function toWriteValue(value, key) {
|
|
28
34
|
if (typeof value === 'boolean')
|
|
29
35
|
return value ? '1' : '0';
|
|
30
36
|
if (Array.isArray(value)) {
|
|
37
|
+
if (key && NODE_LIST_KEYS.has(key)) {
|
|
38
|
+
return value.map((row) => String(row?.id ?? row)).join(',');
|
|
39
|
+
}
|
|
31
40
|
if (value.length && typeof value[0] === 'object') {
|
|
32
|
-
return value.map((row) => Object.fromEntries(Object.entries(row || {}).map(([k, v]) => [k, toWriteValue(v)])));
|
|
41
|
+
return value.map((row) => Object.fromEntries(Object.entries(row || {}).map(([k, v]) => [k, toWriteValue(v, k)])));
|
|
33
42
|
}
|
|
34
43
|
return value.join(',');
|
|
35
44
|
}
|
|
@@ -50,14 +59,14 @@ export function buildPayload(groups, workflowId) {
|
|
|
50
59
|
const out = { workflowId };
|
|
51
60
|
for (const [groupKey, data] of Object.entries(groups)) {
|
|
52
61
|
if (NESTED_GROUPS.has(groupKey)) {
|
|
53
|
-
out[groupKey] = Object.fromEntries(Object.entries(data).map(([k, v]) => [k, toWriteValue(v)]));
|
|
62
|
+
out[groupKey] = Object.fromEntries(Object.entries(data).map(([k, v]) => [k, toWriteValue(v, k)]));
|
|
54
63
|
}
|
|
55
64
|
else if (ARRAY_GROUPS[groupKey]) {
|
|
56
65
|
out[ARRAY_GROUPS[groupKey]] = toWriteValue(data);
|
|
57
66
|
}
|
|
58
67
|
else {
|
|
59
68
|
for (const [k, v] of Object.entries(data))
|
|
60
|
-
out[k] = toWriteValue(v);
|
|
69
|
+
out[k] = toWriteValue(v, k);
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
72
|
return out;
|
|
@@ -72,13 +81,13 @@ export function applyPatch(payload, patch) {
|
|
|
72
81
|
if (NESTED_GROUPS.has(key) && value && typeof value === 'object' && !Array.isArray(value)) {
|
|
73
82
|
const nested = { ...(payload[key] || {}) };
|
|
74
83
|
for (const [k, v] of Object.entries(value)) {
|
|
75
|
-
nested[k] = toWriteValue(v);
|
|
84
|
+
nested[k] = toWriteValue(v, k);
|
|
76
85
|
touched.push(`${key}.${k}`);
|
|
77
86
|
}
|
|
78
87
|
payload[key] = nested;
|
|
79
88
|
continue;
|
|
80
89
|
}
|
|
81
|
-
payload[key] = toWriteValue(value);
|
|
90
|
+
payload[key] = toWriteValue(value, key);
|
|
82
91
|
touched.push(key);
|
|
83
92
|
}
|
|
84
93
|
return touched;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-odoc-setting.js","sourceRoot":"","sources":["../../src/services/workflow-odoc-setting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,mBAAmB;AACnB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEvE,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAA2B,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AAEjF,iBAAiB;AACjB,MAAM,UAAU,YAAY,CAAC,KAAU;
|
|
1
|
+
{"version":3,"file":"workflow-odoc-setting.js","sourceRoot":"","sources":["../../src/services/workflow-odoc-setting.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,30 @@ export declare function pinyinInitials(name: string): string;
|
|
|
4
4
|
* same initials recur in the same table (0 → bare initials, 1 → initials+'1', …).
|
|
5
5
|
* Caller tracks recurrence via pinyinInitials() and passes the dupIndex. */
|
|
6
6
|
export declare function toColumnName(fieldName: string, dupIndex?: number): string;
|
|
7
|
+
/** 字段的两个"名字"。 */
|
|
8
|
+
export interface FieldKeys {
|
|
9
|
+
/** 字段编码。 */
|
|
10
|
+
dataKey: string;
|
|
11
|
+
/** 数据库列名。 */
|
|
12
|
+
columnName: string;
|
|
13
|
+
/** 用户是否**显式指定**了 columnName —— 决定要不要把它下发给平台。 */
|
|
14
|
+
explicitColumnName: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 解析字段的 `dataKey`(字段编码)与 `columnName`(数据库列名)。
|
|
18
|
+
*
|
|
19
|
+
* **两者是独立的东西**,平台允许不同(设计器里可分别填)。默认同值,有指定才分开:
|
|
20
|
+
* - 都不给 → 都取拼音首字母
|
|
21
|
+
* - 只给 dataKey → 列名跟随(**历史行为**,`--data-key` 一直如此)
|
|
22
|
+
* - 只给 columnName → 列名用它,dataKey 走默认
|
|
23
|
+
* - 两个都给 → 各用各的
|
|
24
|
+
*
|
|
25
|
+
* `explicitColumnName` 为假时**不发 columnName**,交给平台按 dataKey 推导 —— 老路径不受影响。
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveFieldKeys(fieldName: string, spec?: {
|
|
28
|
+
dataKey?: string | null;
|
|
29
|
+
columnName?: string | null;
|
|
30
|
+
}, dupIndex?: number): FieldKeys;
|
|
7
31
|
/** Generate a table name suffix: pinyin initials + 4 random digits */
|
|
8
32
|
export declare function toTableName(formName: string): string;
|
|
9
33
|
/** 明细表子表物理表名:pinyin initials + 随机后缀。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-name.d.ts","sourceRoot":"","sources":["../../src/utils/column-name.ts"],"names":[],"mappings":"AASA,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAanD;AAED;;6EAE6E;AAC7E,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAGpE;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;8DAE8D;AAC9D,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAG5E"}
|
|
1
|
+
{"version":3,"file":"column-name.d.ts","sourceRoot":"","sources":["../../src/utils/column-name.ts"],"names":[],"mappings":"AASA,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAanD;AAED;;6EAE6E;AAC7E,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAGpE;AAED,iBAAiB;AACjB,MAAM,WAAW,SAAS;IACxB,YAAY;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,EAClE,QAAQ,SAAI,GACX,SAAS,CAIX;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;8DAE8D;AAC9D,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAG5E"}
|
|
@@ -30,6 +30,22 @@ export function toColumnName(fieldName, dupIndex = 0) {
|
|
|
30
30
|
const base = pinyinInitials(fieldName);
|
|
31
31
|
return dupIndex > 0 ? `${base}${dupIndex}` : base;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* 解析字段的 `dataKey`(字段编码)与 `columnName`(数据库列名)。
|
|
35
|
+
*
|
|
36
|
+
* **两者是独立的东西**,平台允许不同(设计器里可分别填)。默认同值,有指定才分开:
|
|
37
|
+
* - 都不给 → 都取拼音首字母
|
|
38
|
+
* - 只给 dataKey → 列名跟随(**历史行为**,`--data-key` 一直如此)
|
|
39
|
+
* - 只给 columnName → 列名用它,dataKey 走默认
|
|
40
|
+
* - 两个都给 → 各用各的
|
|
41
|
+
*
|
|
42
|
+
* `explicitColumnName` 为假时**不发 columnName**,交给平台按 dataKey 推导 —— 老路径不受影响。
|
|
43
|
+
*/
|
|
44
|
+
export function resolveFieldKeys(fieldName, spec = {}, dupIndex = 0) {
|
|
45
|
+
const dataKey = String(spec.dataKey ?? '').trim() || toColumnName(fieldName, dupIndex);
|
|
46
|
+
const explicit = String(spec.columnName ?? '').trim();
|
|
47
|
+
return { dataKey, columnName: explicit || dataKey, explicitColumnName: Boolean(explicit) };
|
|
48
|
+
}
|
|
33
49
|
/** Generate a table name suffix: pinyin initials + 4 random digits */
|
|
34
50
|
export function toTableName(formName) {
|
|
35
51
|
const suffix = String(randomInt(1000, 9999));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-name.js","sourceRoot":"","sources":["../../src/utils/column-name.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACvG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACzC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,KAAK,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;6EAE6E;AAC7E,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,QAAQ,GAAG,CAAC;IAC1D,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACvC,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;AACjD,CAAC;AAED;;8DAE8D;AAC9D,MAAM,UAAU,cAAc,CAAC,eAAuB,EAAE,QAAQ,GAAG,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,MAAM,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;AACnE,CAAC"}
|
|
1
|
+
{"version":3,"file":"column-name.js","sourceRoot":"","sources":["../../src/utils/column-name.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACvG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACzC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,KAAK,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;6EAE6E;AAC7E,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,QAAQ,GAAG,CAAC;IAC1D,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACvC,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAYD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,OAAgE,EAAE,EAClE,QAAQ,GAAG,CAAC;IAEZ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,IAAI,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;AACjD,CAAC;AAED;;8DAE8D;AAC9D,MAAM,UAAU,cAAc,CAAC,eAAuB,EAAE,QAAQ,GAAG,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,MAAM,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;AACnE,CAAC"}
|
package/ecodecmd/package.json
CHANGED
package/ecodecmd/src/loaddep.js
CHANGED
|
@@ -6,22 +6,32 @@ const path = require('path');
|
|
|
6
6
|
const os = require('os');
|
|
7
7
|
const fs = require('fs');
|
|
8
8
|
const axios = require('axios');
|
|
9
|
-
const request = require('request')
|
|
10
9
|
|
|
11
10
|
const cacheJarDir = path.join(os.homedir(), '.ecode_ide_plugin/cache');
|
|
12
11
|
|
|
13
12
|
const download = (url, filepath) => {
|
|
14
13
|
return new Promise((resolve, reject) => {
|
|
15
14
|
const stream = fs.createWriteStream(filepath);
|
|
15
|
+
// 下载失败时别把半个文件留在缓存目录里
|
|
16
|
+
const fail = (err) => {
|
|
17
|
+
stream.destroy();
|
|
18
|
+
fs.rmSync(filepath, { force: true });
|
|
19
|
+
reject(err);
|
|
20
|
+
};
|
|
16
21
|
// 添加useragent
|
|
17
|
-
|
|
18
|
-
pipe
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
})
|
|
22
|
+
// 用 axios 而不是 request:request 已停止维护,且非 2xx 会被 axios 默认 reject,
|
|
23
|
+
// 不会再把错误页当 jar 写进缓存目录(旧写法用 pipe 的 close 事件判完成,判不出来)
|
|
24
|
+
axios({
|
|
25
|
+
url,
|
|
26
|
+
method: 'get',
|
|
27
|
+
responseType: 'stream',
|
|
28
|
+
headers: { 'User-Agent': 'ecodecmd' },
|
|
29
|
+
}).then((res) => {
|
|
30
|
+
res.data.pipe(stream);
|
|
31
|
+
stream.on('finish', () => resolve(''));
|
|
32
|
+
stream.on('error', fail);
|
|
33
|
+
res.data.on('error', fail);
|
|
34
|
+
}).catch(fail);
|
|
25
35
|
})
|
|
26
36
|
}
|
|
27
37
|
|