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
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
* - `{主表.字段名}` / `{明细表名.字段名}` —— 平台存储格式
|
|
4
4
|
* - `[字段名]` / `[表名.字段名]` —— 设计器编辑器的写法
|
|
5
5
|
*
|
|
6
|
+
* **三段式是「选项引用」**:`{主表.性别.男}` 指「性别」字段里那个叫「男」的**选项**,
|
|
7
|
+
* 不是某个叫「性别.男」的字段。按第一个点切分会把字段读成 `性别.男`,然后报「未找到字段」——
|
|
8
|
+
* 那正是「用 CLI 表达不了选项比较」的老毛病(参数要的是选项的 valueKey,平台比的是选项对象)。
|
|
9
|
+
*
|
|
6
10
|
* 重复出现**不去重** —— 每个出现位置都要单独一个参数(见文件头说明)。
|
|
7
11
|
* 不做字符串字面量剔除:公式里写 `"["` 这种极端情况不在支持范围,误判会在解析阶段
|
|
8
12
|
* 报「未找到字段」,比静默错绑安全。
|
|
@@ -15,11 +19,17 @@ export function parseFormulaRefs(expression) {
|
|
|
15
19
|
const inner = (m[1] ?? m[2] ?? '').trim();
|
|
16
20
|
if (!inner)
|
|
17
21
|
continue;
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
// 按点切段(最多三段:表 / 字段 / 选项)。字段名带点的情形在这套平台里不存在,
|
|
23
|
+
// 而「第一个点之后全是字段名」会把三段式读坏,所以这里必须整段切开看。
|
|
24
|
+
// ⚠ 选项引用必须写**完整三段**:`[性别.男]` 只有两段,仍然按「明细表.字段名」读 ——
|
|
25
|
+
// 这与既有的方括号写法天然撞车,没法从段数之外再区分,所以不给它开后门。
|
|
26
|
+
const parts = inner.split('.').map((s) => s.trim());
|
|
27
|
+
const hasTable = parts.length >= 2 && parts[0] !== '' && parts[1] !== '';
|
|
28
|
+
const tail = hasTable ? parts.slice(2).join('.').trim() : '';
|
|
20
29
|
refs.push({
|
|
21
|
-
table: hasTable ?
|
|
22
|
-
field:
|
|
30
|
+
table: hasTable ? parts[0] : null,
|
|
31
|
+
field: hasTable ? parts[1] : inner,
|
|
32
|
+
...(hasTable && tail ? { option: tail } : {}),
|
|
23
33
|
raw: m[0],
|
|
24
34
|
index: m.index,
|
|
25
35
|
length: m[0].length,
|
|
@@ -27,6 +37,52 @@ export function parseFormulaRefs(expression) {
|
|
|
27
37
|
}
|
|
28
38
|
return refs;
|
|
29
39
|
}
|
|
40
|
+
/** 选项型控件的 componentKey —— 这些字段的值是选项,能写三段式引用。 */
|
|
41
|
+
const OPTION_FIELD_KEYS = ['Select', 'SelectMultiple', 'RadioBox', 'CheckBox'];
|
|
42
|
+
function isOptionField(field) {
|
|
43
|
+
return OPTION_FIELD_KEYS.includes(String(field?.componentKey || field?.fieldKey || field?.type || ''));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 取字段的选项表。`getEbField` 把选项放在 **`fieldConfig.options`**(`{name, valueKey, …}`);
|
|
47
|
+
* 其余几个位置是别的路由/老版本留下的可能落点,一并兜住,取到第一个非空数组为止。
|
|
48
|
+
*/
|
|
49
|
+
function optionsOf(field) {
|
|
50
|
+
const cands = [
|
|
51
|
+
field?.fieldConfig?.options,
|
|
52
|
+
field?.otherPropertiesObj?.options,
|
|
53
|
+
Array.isArray(field?.selectData) ? field.selectData : field?.selectData?.options,
|
|
54
|
+
];
|
|
55
|
+
for (const c of cands)
|
|
56
|
+
if (Array.isArray(c) && c.length)
|
|
57
|
+
return c;
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 选项的参数对象(形状实测自设计器落库的报文)。
|
|
62
|
+
*
|
|
63
|
+
* ⚠ `id` 是选项的 **valueKey**,不是选项记录自己的 id —— 同一份数据里这两个值相邻但不同
|
|
64
|
+
* (`valueKey=…7601` / 记录 `id=…2674`),发错了平台不报错,只是永远比对不上。
|
|
65
|
+
* 平台比的是**选项对象**,不是选项名的字符串,所以这种引用**没有 `fieldId`/`title`/`appId`**。
|
|
66
|
+
*/
|
|
67
|
+
function buildOptionParam(fieldId, optionName, optionValueKey, properKey, formId, module) {
|
|
68
|
+
return {
|
|
69
|
+
parent: '',
|
|
70
|
+
properKey,
|
|
71
|
+
formulaParentVarList: [],
|
|
72
|
+
dataTemplateId: '',
|
|
73
|
+
module,
|
|
74
|
+
direct: true,
|
|
75
|
+
del: false,
|
|
76
|
+
middleFieldIds: [fieldId],
|
|
77
|
+
dataSourceField: false,
|
|
78
|
+
repeat: false,
|
|
79
|
+
name: optionName,
|
|
80
|
+
directFormId: formId,
|
|
81
|
+
id: optionValueKey,
|
|
82
|
+
fieldType: 'option',
|
|
83
|
+
groupData: false,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
30
86
|
/**
|
|
31
87
|
* 按目标字段的类型给出合适的公式返回类型。
|
|
32
88
|
*
|
|
@@ -42,7 +98,48 @@ export function defaultReturnType(fieldKey) {
|
|
|
42
98
|
return 'Date';
|
|
43
99
|
return 'String';
|
|
44
100
|
}
|
|
45
|
-
|
|
101
|
+
/**
|
|
102
|
+
* 反查模块字段。**命中多条不取首条**,返回候选让调用方报错 ——
|
|
103
|
+
* 语义键 `name` 的标签就叫「名称」,与业务字段撞名是可预期的。
|
|
104
|
+
*/
|
|
105
|
+
function findModuleColumn(moduleColumns, name) {
|
|
106
|
+
if (!moduleColumns?.length)
|
|
107
|
+
return {};
|
|
108
|
+
const byId = moduleColumns.filter((c) => c.id === name);
|
|
109
|
+
if (byId.length)
|
|
110
|
+
return byId.length === 1 ? { col: byId[0] } : { candidates: byId };
|
|
111
|
+
const byName = moduleColumns.filter((c) => c.name === name);
|
|
112
|
+
if (byName.length)
|
|
113
|
+
return byName.length === 1 ? { col: byName[0] } : { candidates: byName };
|
|
114
|
+
return {};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 参数对象拼装。业务字段与模块字段共用这一处,将来补平台默认键只改这里。
|
|
118
|
+
* `module` 与 `appId` 由路由决定:`appId` 为 `undefined` 时**整个键不出现**
|
|
119
|
+
* —— 流程表单那条路由的 parameter 里就没有这个键,写个空串是另一回事。
|
|
120
|
+
*/
|
|
121
|
+
function buildParam(src, formId, module, appId) {
|
|
122
|
+
return {
|
|
123
|
+
dataTemplateId: '', fieldId: src.fieldId, formId, module,
|
|
124
|
+
properKey: src.properKey,
|
|
125
|
+
...(src.sFormId ? { sFormId: src.sFormId, sFormName: src.sFormName } : {}),
|
|
126
|
+
title: src.title, name: src.name,
|
|
127
|
+
...(appId === undefined ? {} : { appId }),
|
|
128
|
+
id: null,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/** 没给 `hint` 时的兜底指路。 */
|
|
132
|
+
const DEFAULT_COLUMNS_HINT = 'form formula-linkage columns';
|
|
133
|
+
/**
|
|
134
|
+
* 引用解析与参数构建的**纯核** —— 不碰网络,字段来源由调用方注入。
|
|
135
|
+
*
|
|
136
|
+
* 两条路由共用它(eb 表的字段来源是 `getEbField`,流程表单是 `getConfig`),所以这里只放
|
|
137
|
+
* **与路由无关**的规则:方括号归一化成花括号、逐出现位置各给一份参数、明细引用带
|
|
138
|
+
* `sFormId`/`sFormName`、模块字段一律写裸标签、业务字段与模块字段撞名时业务字段胜出。
|
|
139
|
+
*/
|
|
140
|
+
export function resolveFormulaRefs(expression, ctx) {
|
|
141
|
+
const { mainFields, detailTables, moduleColumns, formId, module, appId } = ctx;
|
|
142
|
+
const hint = ctx.hint || DEFAULT_COLUMNS_HINT;
|
|
46
143
|
const errors = [];
|
|
47
144
|
const warnings = [];
|
|
48
145
|
const parameters = [];
|
|
@@ -53,15 +150,6 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
|
|
|
53
150
|
// 早期版本在这里直接报错退出,把「平台允许的用法」当成非法输入拦掉了。
|
|
54
151
|
warnings.push('表达式中没有字段引用(纯常量公式)。平台允许这种写法,将按原样保存。');
|
|
55
152
|
}
|
|
56
|
-
// getEbField 取主表 + 明细结构(主表字段用于反查不带表名的 `[字段]`)
|
|
57
|
-
let mainFields = [];
|
|
58
|
-
let detailTables = [];
|
|
59
|
-
try {
|
|
60
|
-
const eb = await client.post(`${baseUrl}/api/bs/esb/setting/component/getEbField`, { tableId: objId, appId });
|
|
61
|
-
mainFields = eb?.data?.main || [];
|
|
62
|
-
detailTables = eb?.data?.detail || [];
|
|
63
|
-
}
|
|
64
|
-
catch { /* 拉取失败由解析报错兜底 */ }
|
|
65
153
|
const mainFind = (name) => mainFields.find((f) => String(f.id) === name || f.showName === name || f.dataKey === name);
|
|
66
154
|
const detailOf = (table) => detailTables.find((d) => d.tableName === table || String(d.detailTableId) === table);
|
|
67
155
|
const fieldIn = (dt, name) => (dt?.fields || []).find((x) => String(x.id) === name || x.showName === name || x.dataKey === name);
|
|
@@ -71,6 +159,7 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
|
|
|
71
159
|
for (const ref of refs) {
|
|
72
160
|
let table = ref.table;
|
|
73
161
|
let resolved;
|
|
162
|
+
let moduleCol = null;
|
|
74
163
|
if (table === '主表' || table === null) {
|
|
75
164
|
resolved = mainFind(ref.field);
|
|
76
165
|
if (!resolved && table === null) {
|
|
@@ -87,6 +176,23 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
|
|
|
87
176
|
}
|
|
88
177
|
if (resolved && (table === null || table === '主表')) {
|
|
89
178
|
table = '主表';
|
|
179
|
+
// 业务字段赢了同名的模块字段:不报错、不静默换源,只提示一句怎么强制指定
|
|
180
|
+
const sameName = moduleColumns?.filter((c) => c.name === ref.field) || [];
|
|
181
|
+
if (sameName.length) {
|
|
182
|
+
warnings.push(`「${ref.field}」已按业务字段解析;若要引用系统模块字段,请写成 [${sameName[0].id}]`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// 主表里没有 → 找模块字段(调用方没传 moduleColumns 时这里恒不命中,等价于原有报错)
|
|
186
|
+
if (!resolved) {
|
|
187
|
+
const hit = findModuleColumn(moduleColumns, ref.field);
|
|
188
|
+
if (hit.candidates) {
|
|
189
|
+
errors.push(`模块字段「${ref.field}」有多个候选(${hit.candidates.map((c) => c.id).join('、')}),请写成 [<语义键>] 指明是哪个`);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (hit.col) {
|
|
193
|
+
moduleCol = hit.col;
|
|
194
|
+
table = '主表';
|
|
195
|
+
}
|
|
90
196
|
}
|
|
91
197
|
}
|
|
92
198
|
else {
|
|
@@ -98,29 +204,86 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
|
|
|
98
204
|
resolved = fieldIn(dt, ref.field);
|
|
99
205
|
table = dt.tableName;
|
|
100
206
|
}
|
|
101
|
-
if (!resolved) {
|
|
207
|
+
if (!resolved && !moduleCol) {
|
|
102
208
|
const where = ref.table === '主表' ? '主表' : ref.table ? `明细表「${ref.table}」` : '主表或任一明细表';
|
|
103
209
|
const avail = ref.table && ref.table !== '主表'
|
|
104
210
|
? (detailOf(ref.table)?.fields || []).map((x) => x.showName).join(', ')
|
|
105
211
|
: mainFields.map((x) => x.showName).join(', ');
|
|
106
|
-
|
|
212
|
+
// 传了 moduleColumns 才提示模块字段写法;没传时错误文案与加这个参数之前逐字相同
|
|
213
|
+
const moduleHint = moduleColumns?.length
|
|
214
|
+
? `;若是系统模块字段(${moduleColumns.slice(0, 3).map((c) => c.name).join('、')} 等),可写成 [<语义键>],语义键见 ${hint}`
|
|
215
|
+
: '';
|
|
216
|
+
errors.push(`在${where}中未找到字段: "${ref.field}",可用: ${avail}${moduleHint}`);
|
|
107
217
|
continue;
|
|
108
218
|
}
|
|
219
|
+
// ── 护栏:选项型字段 与 **字符串字面量** 比较 ──────────────────────
|
|
220
|
+
// 选项存的是 valueKey,拿它跟选项**名字**比**恒不成立**;而平台照收、不报错、回 200 ——
|
|
221
|
+
// 这是最容易被写出来、又最难查的错法(写完看着全绿,只是结果永远不对)。
|
|
222
|
+
// 不阻断(表达式最终合不合法由平台定),但必须出声。
|
|
223
|
+
if (resolved && !ref.option && isOptionField(resolved)) {
|
|
224
|
+
const lit = /^\s*(==|!=)\s*(['"])([^'"]*)\2/.exec(expression.slice(ref.index + ref.length));
|
|
225
|
+
if (lit) {
|
|
226
|
+
// 建议按**字面量本身**去找同名的选项(`'女'` 就建议「女」),找不到才退而拿第一个当例子。
|
|
227
|
+
const opts = optionsOf(resolved);
|
|
228
|
+
const matched = opts.find((o) => String(o.name) === lit[3]);
|
|
229
|
+
const suggest = matched ? matched.name : (opts[0] ? opts[0].name : '<选项名>');
|
|
230
|
+
warnings.push(`「${ref.field}」是选项型控件,这里却拿它跟字符串 ${lit[2]}${lit[3]}${lit[2]} 比较 —— `
|
|
231
|
+
+ '选项存的是 valueKey,与选项名比**恒不成立**,平台也不报错。正确写法是引用选项本身:'
|
|
232
|
+
+ `{${ref.table || '主表'}.${ref.field}.${suggest}}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// ── 选项引用 `{主表.性别.男}` ─────────────────────────────────
|
|
236
|
+
// 平台比的是**选项对象**(参数里带选项的 valueKey),不是选项名的字符串 ——
|
|
237
|
+
// 所以这种引用必须解析出 valueKey,光把三段式原样发下去是不行的。
|
|
238
|
+
let optionHit = null;
|
|
239
|
+
if (ref.option) {
|
|
240
|
+
if (moduleCol) {
|
|
241
|
+
errors.push(`模块字段「${moduleCol.name}」没有选项,不能写成 {${ref.table || '主表'}.${moduleCol.name}.${ref.option}}`);
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const opts = optionsOf(resolved);
|
|
245
|
+
if (!opts.length) {
|
|
246
|
+
errors.push(`字段「${ref.field}」不是选项型控件(${resolved.componentKey || resolved.fieldKey || '未知类型'}),`
|
|
247
|
+
+ `不能写成 {${ref.table || '主表'}.${ref.field}.${ref.option}}`);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const byName = opts.filter((o) => String(o.name) === ref.option);
|
|
251
|
+
const hit = byName.length ? byName : opts.filter((o) => String(o.valueKey) === ref.option);
|
|
252
|
+
if (!hit.length) {
|
|
253
|
+
errors.push(`字段「${ref.field}」里没有选项「${ref.option}」,可选: ${opts.map((o) => o.name).join(', ')}`);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
if (hit.length > 1) {
|
|
257
|
+
errors.push(`选项「${ref.option}」在字段「${ref.field}」里有多个同名候选,请改用它的 valueKey 指定`);
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
optionHit = hit[0];
|
|
261
|
+
}
|
|
109
262
|
// 走到这里 table 必然已定型:要么 '主表',要么是某个明细表名(带表名的引用校验过、不带表名的已反查过)
|
|
110
263
|
const tableName = table;
|
|
111
264
|
const isDetail = tableName !== '主表';
|
|
112
265
|
const dt = isDetail ? detailOf(tableName) : null;
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
266
|
+
// 归一化用的字段名:模块字段与选项一律写**裸标签**(`{主表.主表数据id}` / `{主表.性别.男}`),
|
|
267
|
+
// 与平台落库形态一致,免得用户写 [formDataId] 时下发一个平台不认的 `{主表.formDataId}`
|
|
268
|
+
const normField = moduleCol ? moduleCol.name : optionHit ? `${ref.field}.${optionHit.name}` : ref.field;
|
|
269
|
+
if (moduleCol) {
|
|
270
|
+
parameters.push(buildParam({ fieldId: moduleCol.id, properKey: moduleCol.descType, title: moduleCol.name, name: moduleCol.name }, formId, module, appId));
|
|
271
|
+
}
|
|
272
|
+
else if (optionHit) {
|
|
273
|
+
parameters.push(buildOptionParam(String(resolved.id), String(optionHit.name), String(optionHit.valueKey), resolved.componentKey || resolved.fieldKey || 'Select', formId, module));
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
parameters.push(buildParam({
|
|
277
|
+
fieldId: String(resolved.id),
|
|
278
|
+
properKey: resolved.componentKey || resolved.fieldKey || 'Text',
|
|
279
|
+
title: resolved.showName || resolved.title || ref.field,
|
|
280
|
+
name: resolved.showName || resolved.field || ref.field,
|
|
281
|
+
...(dt ? { sFormId: String(dt.detailTableId), sFormName: dt.tableName } : {}),
|
|
282
|
+
}, formId, module, appId));
|
|
283
|
+
}
|
|
284
|
+
refNames.push(`${table}.${normField}`);
|
|
122
285
|
pieces.push(expression.slice(cursor, ref.index));
|
|
123
|
-
pieces.push(`{${table}.${
|
|
286
|
+
pieces.push(`{${table}.${normField}}`);
|
|
124
287
|
cursor = ref.index + ref.length;
|
|
125
288
|
}
|
|
126
289
|
pieces.push(expression.slice(cursor));
|
|
@@ -129,4 +292,23 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
|
|
|
129
292
|
normalizedExpression: errors.length ? expression : pieces.join(''),
|
|
130
293
|
};
|
|
131
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* eb 表那条路由:先取字段来源(`getEbField`)再调解析核。
|
|
297
|
+
*
|
|
298
|
+
* @param moduleColumns 模块字段(系统字段)候选。只有函数联动会传;**不传时行为与加这个参数之前完全一致**。
|
|
299
|
+
*/
|
|
300
|
+
export async function buildFormulaParameters(client, baseUrl, objId, appId, formId, expression, moduleColumns) {
|
|
301
|
+
// getEbField 取主表 + 明细结构(主表字段用于反查不带表名的 `[字段]`)
|
|
302
|
+
let mainFields = [];
|
|
303
|
+
let detailTables = [];
|
|
304
|
+
try {
|
|
305
|
+
const eb = await client.post(`${baseUrl}/api/bs/esb/setting/component/getEbField`, { tableId: objId, appId });
|
|
306
|
+
mainFields = eb?.data?.main || [];
|
|
307
|
+
detailTables = eb?.data?.detail || [];
|
|
308
|
+
}
|
|
309
|
+
catch { /* 拉取失败由解析报错兜底 */ }
|
|
310
|
+
return resolveFormulaRefs(expression, {
|
|
311
|
+
mainFields, detailTables, moduleColumns, formId, module: 'ebuilderform', appId,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
132
314
|
//# sourceMappingURL=formula-detail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formula-detail.js","sourceRoot":"","sources":["../../src/services/formula-detail.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formula-detail.js","sourceRoot":"","sources":["../../src/services/formula-detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ApiClient } from '../core/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* HRM 矩阵数据行的形状处理。
|
|
4
|
+
*
|
|
5
|
+
* 平台的 `data/save` 收的是:
|
|
6
|
+
* { matrixId, rowData: [ { id?, data: [ {dataIndex, conditionAble, value: ["<实体ID>"]} ] } ] }
|
|
7
|
+
*
|
|
8
|
+
* 两个要点:
|
|
9
|
+
*
|
|
10
|
+
* 1. **带 `id` 是改,不带是增。** 行 id 用 `matrix data list` 拿。同步型矩阵(`syncType=1`,
|
|
11
|
+
* 如部门矩阵)的行是组织架构同步出来的、不可增删,**行 id 就是部门 id**;手工维护的矩阵
|
|
12
|
+
* 行 id 是平台发号的雪花。
|
|
13
|
+
*
|
|
14
|
+
* 2. **平台整行覆盖**,不是按列合并。只给值列去改一行,条件列会被清空 —— 所以改行时必须
|
|
15
|
+
* 先读回该行、把没给的列补上再发。
|
|
16
|
+
*/
|
|
17
|
+
/** 简写数据行里代表「行 id」的键。列键(configId)全是数字串,不会与这两个撞。 */
|
|
18
|
+
export declare const ROW_ID_KEYS: string[];
|
|
19
|
+
/** 拆出简写行里的「行 id」与各列值。 */
|
|
20
|
+
export declare function splitMatrixRow(row: any): {
|
|
21
|
+
rowId?: string;
|
|
22
|
+
cells: Record<string, any>;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 统一成 ID 字符串数组。
|
|
26
|
+
* 两种写法都收:`["<实体ID>"]`(提交用)与 `[{id:"<实体ID>",...}]`(`data list` 读回的实体对象)。
|
|
27
|
+
*/
|
|
28
|
+
export declare function toIdList(v: any): string[];
|
|
29
|
+
/** 这一行没给、但列定义里有的列。改行时这些列必须从现有行补回来。 */
|
|
30
|
+
export declare function missingMatrixColumns(row: any, allColumns: string[]): string[];
|
|
31
|
+
/** 行里给了但矩阵没有的列 —— 多半是 configId 抄错了,要报出来而不是静默发出去。 */
|
|
32
|
+
export declare function unknownMatrixColumns(row: any, allColumns: string[]): string[];
|
|
33
|
+
/**
|
|
34
|
+
* 把一行简写展开成平台要的形状。
|
|
35
|
+
*
|
|
36
|
+
* 带了 `rowId` 且该行缺列时,必须传 `existingRow`(该行的现有数据)—— 缺的列会从它取值补上,
|
|
37
|
+
* 否则会被平台整行覆盖清空。`existingRow` 里的值是 `data list` 读回的实体对象数组,
|
|
38
|
+
* 由 [[toIdList]] 统一成 ID。
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildMatrixRow(row: any, conditionIds: Set<string>, allColumns: string[], existingRow?: any | null): any;
|
|
41
|
+
/** 按行 id 取一行。`data/page` 没有按行 id 过滤的入参,只能翻页找。 */
|
|
42
|
+
export declare function fetchMatrixRow(client: ApiClient, baseUrl: string, matrixId: string, rowId: string): Promise<any | null>;
|
|
43
|
+
//# sourceMappingURL=matrix-rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix-rows.d.ts","sourceRoot":"","sources":["../../src/services/matrix-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AAEH,kDAAkD;AAClD,eAAO,MAAM,WAAW,UAAkB,CAAC;AAE3C,yBAAyB;AACzB,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAYvF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAOzC;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG7E;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG7E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,CAAC,EAAE,GAAG,GAAG,IAAI,GACvB,GAAG,CAqBL;AAED,iDAAiD;AACjD,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAClE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAerB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HRM 矩阵数据行的形状处理。
|
|
3
|
+
*
|
|
4
|
+
* 平台的 `data/save` 收的是:
|
|
5
|
+
* { matrixId, rowData: [ { id?, data: [ {dataIndex, conditionAble, value: ["<实体ID>"]} ] } ] }
|
|
6
|
+
*
|
|
7
|
+
* 两个要点:
|
|
8
|
+
*
|
|
9
|
+
* 1. **带 `id` 是改,不带是增。** 行 id 用 `matrix data list` 拿。同步型矩阵(`syncType=1`,
|
|
10
|
+
* 如部门矩阵)的行是组织架构同步出来的、不可增删,**行 id 就是部门 id**;手工维护的矩阵
|
|
11
|
+
* 行 id 是平台发号的雪花。
|
|
12
|
+
*
|
|
13
|
+
* 2. **平台整行覆盖**,不是按列合并。只给值列去改一行,条件列会被清空 —— 所以改行时必须
|
|
14
|
+
* 先读回该行、把没给的列补上再发。
|
|
15
|
+
*/
|
|
16
|
+
/** 简写数据行里代表「行 id」的键。列键(configId)全是数字串,不会与这两个撞。 */
|
|
17
|
+
export const ROW_ID_KEYS = ['rowId', 'id'];
|
|
18
|
+
/** 拆出简写行里的「行 id」与各列值。 */
|
|
19
|
+
export function splitMatrixRow(row) {
|
|
20
|
+
const cells = {};
|
|
21
|
+
let rowId;
|
|
22
|
+
for (const [k, v] of Object.entries(row || {})) {
|
|
23
|
+
if (ROW_ID_KEYS.includes(k)) {
|
|
24
|
+
const s = String(v ?? '').trim();
|
|
25
|
+
if (s)
|
|
26
|
+
rowId = s;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
cells[k] = v;
|
|
30
|
+
}
|
|
31
|
+
return { rowId, cells };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 统一成 ID 字符串数组。
|
|
35
|
+
* 两种写法都收:`["<实体ID>"]`(提交用)与 `[{id:"<实体ID>",...}]`(`data list` 读回的实体对象)。
|
|
36
|
+
*/
|
|
37
|
+
export function toIdList(v) {
|
|
38
|
+
if (v === undefined || v === null || v === '')
|
|
39
|
+
return [];
|
|
40
|
+
const arr = Array.isArray(v) ? v : [v];
|
|
41
|
+
return arr
|
|
42
|
+
.map((e) => (e && typeof e === 'object' ? e.id : e))
|
|
43
|
+
.map((e) => String(e ?? '').trim())
|
|
44
|
+
.filter(Boolean);
|
|
45
|
+
}
|
|
46
|
+
/** 这一行没给、但列定义里有的列。改行时这些列必须从现有行补回来。 */
|
|
47
|
+
export function missingMatrixColumns(row, allColumns) {
|
|
48
|
+
const given = new Set(Object.keys(splitMatrixRow(row).cells));
|
|
49
|
+
return allColumns.filter((c) => !given.has(c));
|
|
50
|
+
}
|
|
51
|
+
/** 行里给了但矩阵没有的列 —— 多半是 configId 抄错了,要报出来而不是静默发出去。 */
|
|
52
|
+
export function unknownMatrixColumns(row, allColumns) {
|
|
53
|
+
const cols = new Set(allColumns);
|
|
54
|
+
return Object.keys(splitMatrixRow(row).cells).filter((k) => !cols.has(k));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 把一行简写展开成平台要的形状。
|
|
58
|
+
*
|
|
59
|
+
* 带了 `rowId` 且该行缺列时,必须传 `existingRow`(该行的现有数据)—— 缺的列会从它取值补上,
|
|
60
|
+
* 否则会被平台整行覆盖清空。`existingRow` 里的值是 `data list` 读回的实体对象数组,
|
|
61
|
+
* 由 [[toIdList]] 统一成 ID。
|
|
62
|
+
*/
|
|
63
|
+
export function buildMatrixRow(row, conditionIds, allColumns, existingRow) {
|
|
64
|
+
const { rowId, cells } = splitMatrixRow(row);
|
|
65
|
+
const merged = Object.entries(cells);
|
|
66
|
+
if (rowId) {
|
|
67
|
+
const given = new Set(Object.keys(cells));
|
|
68
|
+
for (const col of allColumns) {
|
|
69
|
+
if (given.has(col))
|
|
70
|
+
continue;
|
|
71
|
+
// 没给又没得补的列留空数组:与平台「整行覆盖」的语义一致,也避免发 undefined。
|
|
72
|
+
merged.push([col, existingRow ? toIdList(existingRow[col]) : []]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
...(rowId ? { id: rowId } : {}),
|
|
77
|
+
data: merged.map(([configId, v]) => ({
|
|
78
|
+
dataIndex: configId,
|
|
79
|
+
conditionAble: conditionIds.has(configId),
|
|
80
|
+
value: toIdList(v),
|
|
81
|
+
})),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** 按行 id 取一行。`data/page` 没有按行 id 过滤的入参,只能翻页找。 */
|
|
85
|
+
export async function fetchMatrixRow(client, baseUrl, matrixId, rowId) {
|
|
86
|
+
const size = 500;
|
|
87
|
+
const maxPages = 20;
|
|
88
|
+
for (let page = 1; page <= maxPages; page++) {
|
|
89
|
+
const res = await client.post(`${baseUrl}/api/bs/hrm/matrix2/data/page`, {
|
|
90
|
+
matrixId, current: page, pageSize: size,
|
|
91
|
+
});
|
|
92
|
+
const p = res?.data || {};
|
|
93
|
+
const rows = p.data || p.records || p.datas || [];
|
|
94
|
+
const hit = rows.find((r) => String(r.id) === String(rowId));
|
|
95
|
+
if (hit)
|
|
96
|
+
return hit;
|
|
97
|
+
if (rows.length < size)
|
|
98
|
+
return null; // 没有更多页
|
|
99
|
+
if (typeof p.total === 'number' && p.total <= page * size)
|
|
100
|
+
return null; // 已翻到底
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=matrix-rows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix-rows.js","sourceRoot":"","sources":["../../src/services/matrix-rows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 组织架构 — 部门的新建与删除。
|
|
3
|
+
*
|
|
4
|
+
* 新建部门是**四步链**,每一步的产出喂给下一步,缺一不可:
|
|
5
|
+
*
|
|
6
|
+
* ① GET `/api/bs/hrm/organization/getForm` 取**保存报文模板**(含现生成的 targetId)
|
|
7
|
+
* ② POST `/api/hrm/form/core/getFormLayout` 取 `formLayout.id` 与 `formLayoutMultiple.id`
|
|
8
|
+
* ③ POST `/api/hrm/form/core/saveFormData` 落表单数据,回吐 `recordId`
|
|
9
|
+
* ④ POST `/api/bs/hrm/organization/saveForm` 部门落进组织树
|
|
10
|
+
*
|
|
11
|
+
* ⚠ **① 给的模板不能直接当 ④ 的报文发** —— 形状对不上:
|
|
12
|
+
* ① 的 `data.parent` 是 `[]`、`data.subcompany` 是**对象数组**,
|
|
13
|
+
* 而 ④ 要的是 `parent: ""`(或父部门 id 字符串)与 `subcompany: "<机构id>"`。
|
|
14
|
+
* 转换集中在 `buildSaveFormPayload`,别在命令层现拼。
|
|
15
|
+
*
|
|
16
|
+
* 删除是单步:`POST /api/bs/hrm/department/delete`。
|
|
17
|
+
*/
|
|
18
|
+
/** 保存报文里的组织类型。建部门固定 `department`。 */
|
|
19
|
+
export declare const ORG_TYPE_DEPARTMENT = "department";
|
|
20
|
+
/**
|
|
21
|
+
* 解析当前登录用户所在机构 ID。
|
|
22
|
+
*
|
|
23
|
+
* `teamsCheck` 的 `body.currentUser.department`:优先 `subCompanyId`(公司级机构),
|
|
24
|
+
* 没有就退回 `department.id`(部分环境只有部门 id)。
|
|
25
|
+
*
|
|
26
|
+
* 与 `workflow-create-workflow.ts` 原先内联的那份同源 —— 那边已改为引用这里。
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveCurrentUserSubCompany(baseUrl: string, eteamsId: string): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* `teamsCheck` 拿当前登录用户。取不到就返回 `{}`(调用方各自兜底,这里不抛)。
|
|
31
|
+
*
|
|
32
|
+
* 人员导入要用 `currentUser.id` 当 `customParam.employeeId`,部门那两处要 `department`,
|
|
33
|
+
* 所以把请求这次抽出来共用 —— 不然同一份 teamsCheck 会有三处复制。
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchCurrentUser(baseUrl: string, eteamsId: string): Promise<any>;
|
|
36
|
+
/** ① 的返回里那份模板(只列用得到的键)。 */
|
|
37
|
+
export interface OrgFormTemplate {
|
|
38
|
+
targetId: string;
|
|
39
|
+
formId: string;
|
|
40
|
+
versionId: string;
|
|
41
|
+
subcompanyId: string;
|
|
42
|
+
rightList: string[];
|
|
43
|
+
hideFieldList: string[];
|
|
44
|
+
disporder: number;
|
|
45
|
+
virtualid: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 从 ① `getForm` 的返回里抽出模板。
|
|
49
|
+
*
|
|
50
|
+
* 抽不出来就抛 —— **不编默认值**:这四个 id 全是平台现生成的,
|
|
51
|
+
* 硬凑一个只会让后面的步骤以看不懂的方式失败。
|
|
52
|
+
*/
|
|
53
|
+
export declare function extractOrgFormTemplate(response: any): OrgFormTemplate;
|
|
54
|
+
/** ③ `saveFormData` 的报文。`presetDataId` 就是模板里的 `targetId`。 */
|
|
55
|
+
export declare function buildSaveFormDataPayload(tpl: Pick<OrgFormTemplate, 'targetId' | 'formId'>, formLayoutId: string, multipleLayoutId: string): Record<string, unknown>;
|
|
56
|
+
/** ③ 的返回里取 `recordId`(④ 要用)。取不到就抛,不编。 */
|
|
57
|
+
export declare function extractRecordId(response: any): string;
|
|
58
|
+
export interface CreateDepartmentInput {
|
|
59
|
+
name: string;
|
|
60
|
+
/** 部门编号。不传就沿用模板里的值(或空)。 */
|
|
61
|
+
code?: string;
|
|
62
|
+
/** 父部门 id。**顶层部门传机构 id**(= `subcompany`),与 `getForm` 的 `parentId` 同一个值。 */
|
|
63
|
+
parentId: string;
|
|
64
|
+
/** 所属机构 id。不传就用模板里带的那个。 */
|
|
65
|
+
subcompanyId?: string;
|
|
66
|
+
/** 直管上级部门名(可选,界面上的「上级部门」展示字段)。 */
|
|
67
|
+
supDepartment?: string;
|
|
68
|
+
/** 部门全称。不传用 name。 */
|
|
69
|
+
fullname?: string;
|
|
70
|
+
recordId: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* ④ `organization/saveForm` 的报文 —— 把 ① 的模板**转成**平台实际收的形状。
|
|
74
|
+
*
|
|
75
|
+
* 转换点(这三处是踩过的坑,别改回去):
|
|
76
|
+
* - `parent`:模板给的是数组(顶层时为空数组)→ 要 `""` 或父部门 id **字符串**
|
|
77
|
+
* - `subcompany`:模板给的是对象数组 → 要机构 id **字符串**
|
|
78
|
+
* - `formdata.objectId` / `formdataId`:都等于 `targetId`
|
|
79
|
+
*/
|
|
80
|
+
export declare function buildSaveFormPayload(tpl: OrgFormTemplate, input: CreateDepartmentInput): Record<string, unknown>;
|
|
81
|
+
/** 删除部门的报文。`parent` 是它的**父**(顶层部门的父就是机构 id)。 */
|
|
82
|
+
export declare function buildDeleteDepartmentPayload(id: string, parent: string): Record<string, unknown>;
|
|
83
|
+
/**
|
|
84
|
+
* 编辑部门时读当前状态:`getForm` 带 **`id=`**(不是 `parentId=`)。
|
|
85
|
+
*
|
|
86
|
+
* 同一个端点两种用法:带 `parentId` 给**新建模板**,带 `id` 给**这个部门的完整现状**。
|
|
87
|
+
* 返回的 `data` 就是编辑报文的模板。
|
|
88
|
+
*
|
|
89
|
+
* ⚠ 这个读接口**不过滤已删记录** —— 删除是软删(`isDelete: true`),删完再读仍能读出来。
|
|
90
|
+
* 所以它不能用来判断「部门还在不在」,判删除要看 `isDelete` 字段或用组织树列表。
|
|
91
|
+
*/
|
|
92
|
+
export declare function getOrgDetailPath(id: string): string;
|
|
93
|
+
export interface EditDepartmentInput {
|
|
94
|
+
/** 新名字。不传保持原值。 */
|
|
95
|
+
name?: string;
|
|
96
|
+
code?: string;
|
|
97
|
+
/** 新父部门 id。不传保持原值。 */
|
|
98
|
+
parentId?: string;
|
|
99
|
+
disporder?: number;
|
|
100
|
+
fullname?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* **编辑**部门的报文(`organization/saveForm`,与新建同一个端点但形状不同)。
|
|
104
|
+
*
|
|
105
|
+
* 编辑是「**当前完整状态 + 改动**」,不是只发改动,所以必须先用 `getOrgDetailPath` 把现状读回来。
|
|
106
|
+
* 与新建那版的差异(照着抓包对的):
|
|
107
|
+
* - 认 `id`,**没有** `targetId` / `formdata` / `formdataId` / `recordId`
|
|
108
|
+
* - 带 `tenantKey` / `creator` / `subcompanyid` / `datarank` / `createTime` / `updateTime` /
|
|
109
|
+
* `isTop` / `status` / `isDelete` / `usersettings` —— 这些**原样回传**,别自己造
|
|
110
|
+
* - `advanceForm` 是 `false`(新建时是 `true`)
|
|
111
|
+
* - `parent` 要的是**父的 id 字符串**;模板给的是数组,顶层部门则回填 `subcompanyid`
|
|
112
|
+
*/
|
|
113
|
+
export declare function buildUpdateDepartmentPayload(detail: any, input: EditDepartmentInput): Record<string, unknown>;
|
|
114
|
+
//# sourceMappingURL=org-department.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-department.d.ts","sourceRoot":"","sources":["../../src/services/org-department.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qCAAqC;AACrC,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrG;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAStF;AAED,2BAA2B;AAC3B,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,GAAG,GAAG,eAAe,CAyBrE;AAED,6DAA6D;AAC7D,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,QAAQ,CAAC,EACjD,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAKrD;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiChH;AAED,gDAAgD;AAChD,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,MAAM,WAAW,mBAAmB;IAClC,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoC7G"}
|