weaver-e10-builder 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/actionflow.d.ts.map +1 -1
- package/dist/commands/actionflow.js +12 -25
- package/dist/commands/actionflow.js.map +1 -1
- package/dist/commands/designer-css.d.ts +15 -0
- package/dist/commands/designer-css.d.ts.map +1 -0
- package/dist/commands/designer-css.js +205 -0
- package/dist/commands/designer-css.js.map +1 -0
- package/dist/commands/form-field-lang.d.ts.map +1 -1
- package/dist/commands/form-field-lang.js +4 -39
- package/dist/commands/form-field-lang.js.map +1 -1
- package/dist/commands/form-layout-init.d.ts.map +1 -1
- package/dist/commands/form-layout-init.js +15 -10
- package/dist/commands/form-layout-init.js.map +1 -1
- package/dist/commands/form-layout.js +24 -21
- package/dist/commands/form-layout.js.map +1 -1
- package/dist/commands/form-native.d.ts.map +1 -1
- package/dist/commands/form-native.js +181 -0
- package/dist/commands/form-native.js.map +1 -1
- package/dist/commands/form-validate.d.ts.map +1 -1
- package/dist/commands/form-validate.js +11 -3
- package/dist/commands/form-validate.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +76 -19
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +170 -23
- package/dist/commands/menu.js.map +1 -1
- package/dist/commands/wf-form.d.ts +1 -0
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +44 -13
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -1
- package/dist/commands/workflow-node-assign-flow.js +1 -2
- package/dist/commands/workflow-node-assign-flow.js.map +1 -1
- package/dist/commands/workflow-node.d.ts.map +1 -1
- package/dist/commands/workflow-node.js +147 -2
- package/dist/commands/workflow-node.js.map +1 -1
- package/dist/commands/workflow-odoc.d.ts.map +1 -1
- package/dist/commands/workflow-odoc.js +56 -56
- package/dist/commands/workflow-odoc.js.map +1 -1
- package/dist/commands/workflow-setting.d.ts.map +1 -1
- package/dist/commands/workflow-setting.js +77 -1
- package/dist/commands/workflow-setting.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +36 -80
- package/dist/commands/workflow.js.map +1 -1
- package/dist/core/client.d.ts +14 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +28 -12
- package/dist/core/client.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/command_output.d.ts +7 -0
- package/dist/services/actionflow/command_output.d.ts.map +1 -1
- package/dist/services/actionflow/command_output.js +46 -0
- package/dist/services/actionflow/command_output.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +14 -4
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add_compiler.js +29 -0
- package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.js +23 -8
- package/dist/services/actionflow/components/action_eb_update.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 +239 -6
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
- package/dist/services/actionflow/components/custom_set_form.d.ts +10 -0
- package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -0
- package/dist/services/actionflow/components/custom_set_form.js +65 -0
- package/dist/services/actionflow/components/custom_set_form.js.map +1 -0
- package/dist/services/actionflow/components/custom_trigger.d.ts +2 -2
- package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/components/custom_trigger.js +7 -10
- package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +1 -1
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/output.d.ts.map +1 -1
- package/dist/services/actionflow/components/output.js +6 -1
- package/dist/services/actionflow/components/output.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +13 -6
- 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 +3 -2
- package/dist/services/actionflow/context_provider.js.map +1 -1
- package/dist/services/actionflow/dynamic_resources.d.ts.map +1 -1
- package/dist/services/actionflow/dynamic_resources.js +1 -1
- package/dist/services/actionflow/dynamic_resources.js.map +1 -1
- package/dist/services/actionflow/ebuilder_source.d.ts +19 -0
- package/dist/services/actionflow/ebuilder_source.d.ts.map +1 -0
- package/dist/services/actionflow/ebuilder_source.js +78 -0
- package/dist/services/actionflow/ebuilder_source.js.map +1 -0
- package/dist/services/actionflow/form_source.d.ts +51 -10
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +173 -29
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +4 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +46 -22
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts +6 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +211 -3
- 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 +83 -15
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/designer-css.d.ts +89 -0
- package/dist/services/designer-css.d.ts.map +1 -0
- package/dist/services/designer-css.js +163 -0
- package/dist/services/designer-css.js.map +1 -0
- package/dist/services/dom-structure.d.ts +42 -0
- package/dist/services/dom-structure.d.ts.map +1 -0
- package/dist/services/dom-structure.js +251 -0
- package/dist/services/dom-structure.js.map +1 -0
- package/dist/services/form-field-patch.d.ts +22 -0
- package/dist/services/form-field-patch.d.ts.map +1 -1
- package/dist/services/form-field-patch.js +29 -0
- package/dist/services/form-field-patch.js.map +1 -1
- package/dist/services/form-i18n-label.d.ts +48 -0
- package/dist/services/form-i18n-label.d.ts.map +1 -0
- package/dist/services/form-i18n-label.js +91 -0
- package/dist/services/form-i18n-label.js.map +1 -0
- package/dist/services/form-style-template.d.ts +6 -2
- package/dist/services/form-style-template.d.ts.map +1 -1
- package/dist/services/form-style-template.js +8 -4
- package/dist/services/form-style-template.js.map +1 -1
- package/dist/services/menu-catalog.d.ts +84 -0
- package/dist/services/menu-catalog.d.ts.map +1 -0
- package/dist/services/menu-catalog.js +183 -0
- package/dist/services/menu-catalog.js.map +1 -0
- package/dist/services/workflow-add-step.d.ts +45 -0
- package/dist/services/workflow-add-step.d.ts.map +1 -0
- package/dist/services/workflow-add-step.js +122 -0
- package/dist/services/workflow-add-step.js.map +1 -0
- package/dist/services/workflow-assign-flow.d.ts +1 -6
- package/dist/services/workflow-assign-flow.d.ts.map +1 -1
- package/dist/services/workflow-assign-flow.js +3 -8
- package/dist/services/workflow-assign-flow.js.map +1 -1
- package/dist/services/workflow-drawback.d.ts +19 -0
- package/dist/services/workflow-drawback.d.ts.map +1 -0
- package/dist/services/workflow-drawback.js +59 -0
- package/dist/services/workflow-drawback.js.map +1 -0
- package/dist/services/workflow-links.d.ts +51 -0
- package/dist/services/workflow-links.d.ts.map +1 -0
- package/dist/services/workflow-links.js +162 -0
- package/dist/services/workflow-links.js.map +1 -0
- package/dist/services/workflow-node-layout.d.ts +45 -4
- package/dist/services/workflow-node-layout.d.ts.map +1 -1
- package/dist/services/workflow-node-layout.js +142 -41
- package/dist/services/workflow-node-layout.js.map +1 -1
- package/dist/services/workflow-odoc-setting.d.ts +43 -0
- package/dist/services/workflow-odoc-setting.d.ts.map +1 -0
- package/dist/services/workflow-odoc-setting.js +100 -0
- package/dist/services/workflow-odoc-setting.js.map +1 -0
- package/dist/services/workflow-tab-config.d.ts +54 -0
- package/dist/services/workflow-tab-config.d.ts.map +1 -0
- package/dist/services/workflow-tab-config.js +137 -0
- package/dist/services/workflow-tab-config.js.map +1 -0
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +48 -48
- package/skill-docs/SKILL.md +7 -7
- package/skill-docs/_catalog.md +2 -0
- package/skill-docs/actionflows/SKILL.md +2 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +38 -1
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +42 -0
- package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +1 -1
- package/skill-docs/actionflows/references/components/logic/Output.md +2 -0
- package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +16 -11
- package/skill-docs/assets/dom-structure/Bar.json +341 -0
- package/skill-docs/assets/dom-structure/BarStack.json +341 -0
- package/skill-docs/assets/dom-structure/Bubble.json +323 -0
- package/skill-docs/assets/dom-structure/Calendar.json +515 -0
- package/skill-docs/assets/dom-structure/Circular.json +337 -0
- package/skill-docs/assets/dom-structure/CollapsePanel.json +289 -0
- package/skill-docs/assets/dom-structure/Comment.json +617 -0
- package/skill-docs/assets/dom-structure/CountDown.json +755 -0
- package/skill-docs/assets/dom-structure/DigitalPanel.json +191 -0
- package/skill-docs/assets/dom-structure/EbButton.json +387 -0
- package/skill-docs/assets/dom-structure/FastCreate.json +242 -0
- package/skill-docs/assets/dom-structure/Gauge.json +282 -0
- package/skill-docs/assets/dom-structure/HBar.json +336 -0
- package/skill-docs/assets/dom-structure/HBarStack.json +337 -0
- package/skill-docs/assets/dom-structure/Line.json +341 -0
- package/skill-docs/assets/dom-structure/NList.json +712 -0
- package/skill-docs/assets/dom-structure/NavBar.json +274 -0
- package/skill-docs/assets/dom-structure/NavPanel.json +390 -0
- package/skill-docs/assets/dom-structure/NewTab.json +606 -0
- package/skill-docs/assets/dom-structure/Nightingale.json +336 -0
- package/skill-docs/assets/dom-structure/PageHeader.json +205 -0
- package/skill-docs/assets/dom-structure/Picture.json +209 -0
- package/skill-docs/assets/dom-structure/Pie.json +338 -0
- package/skill-docs/assets/dom-structure/ProgressChart.json +299 -0
- package/skill-docs/assets/dom-structure/SearchGlobal.json +628 -0
- package/skill-docs/assets/dom-structure/Slide.json +489 -0
- package/skill-docs/assets/dom-structure/Treemap.json +324 -0
- package/skill-docs/references/common/guide-plan-template.md +1 -1
- package/skill-docs/references/common/ref-cli-commands.md +21 -13
- package/skill-docs/references/ebuilder-designer/guide-designer-components.md +12 -1
- package/skill-docs/references/ebuilder-designer/guide-designer-css.md +127 -0
- package/skill-docs/references/ebuilder-designer/guide-designer.md +6 -5
- package/skill-docs/references/form/guide-create-form.md +1 -1
- package/skill-docs/references/form/guide-form-layout-planning.md +1 -1
- package/skill-docs/references/form/guide-form-linkage.md +28 -2
- package/skill-docs/references/menu/system-menus.md +12 -0
- package/skill-docs/references/workflow/guide-workflow-odoc.md +22 -2
- package/skill-docs/references/workflow/guide-workflow.md +18 -3
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const GETDATA = '/api/bs/form/msg/multilangset/getdata';
|
|
2
|
+
const SAVE_LABEL = '/api/bs/i18n/multilangLabel/saveLabel';
|
|
3
|
+
/**
|
|
4
|
+
* 读多语言标签的各语言行。
|
|
5
|
+
* `labelId` 传 `'-1'` 拿的是**模板行**(每行有 id/langid/langtype,value 为空),新建标签时用它当底。
|
|
6
|
+
*/
|
|
7
|
+
export async function readLanguageRows(client, baseUrl, labelId, module) {
|
|
8
|
+
const res = await client.post(`${baseUrl}${GETDATA}`, { labelid: labelId, module, versionEnable: false });
|
|
9
|
+
if (res?.code !== 200 || res?.status === false) {
|
|
10
|
+
throw new Error(`读取多语言标签失败: ${res?.msg || '未知错误'}`);
|
|
11
|
+
}
|
|
12
|
+
return res?.data?.usernamePerLangs || [];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 新建一个多语言标签,返回它的 `labelid`(负数雪花)。
|
|
16
|
+
*
|
|
17
|
+
* 默认只写简体中文;要同时写英文传 `en`。
|
|
18
|
+
* 报文形状对齐设计器实际发出的那一次(`dialogVisible`/`loading` 都是 `false`、
|
|
19
|
+
* `tabMenuValue` 给的是 **en_US 那一行**、`usernamePerLangs` 里不带「(默认)」后缀)。
|
|
20
|
+
*/
|
|
21
|
+
export async function createMultilangLabel(client, baseUrl, zh, module, en) {
|
|
22
|
+
const rows = await readLanguageRows(client, baseUrl, '-1', module);
|
|
23
|
+
const zhRow = rows.find((r) => r.langtype === 'zh_CN');
|
|
24
|
+
const enRow = rows.find((r) => r.langtype === 'en_US');
|
|
25
|
+
if (!zhRow)
|
|
26
|
+
throw new Error('当前环境未返回简体中文语言行,无法创建多语言标签');
|
|
27
|
+
const selected = [zhRow, enRow].filter(Boolean);
|
|
28
|
+
const withDefaultSuffix = (r) => `${String(r.langName).replace(/\s*\(默认\)$/, '')} (默认)`;
|
|
29
|
+
const res = await client.post(`${baseUrl}${SAVE_LABEL}`, {
|
|
30
|
+
dialogVisible: false,
|
|
31
|
+
checkboxVisible: false,
|
|
32
|
+
checkboxOptionValue: selected.map((r) => r.langtype),
|
|
33
|
+
checkboxValue: selected.map((r) => r.langtype),
|
|
34
|
+
tableData: selected.map((r) => ({
|
|
35
|
+
...r,
|
|
36
|
+
langName: r.langtype === 'zh_CN' ? withDefaultSuffix(r) : r.langName,
|
|
37
|
+
value: r.langtype === 'zh_CN' ? zh : (en ?? ''),
|
|
38
|
+
content: r.langtype === 'zh_CN' ? withDefaultSuffix(r) : r.langName,
|
|
39
|
+
})),
|
|
40
|
+
valueChanged: false,
|
|
41
|
+
tabTextLastValue: '',
|
|
42
|
+
value: '',
|
|
43
|
+
loading: false,
|
|
44
|
+
versionOptions: [],
|
|
45
|
+
versionValue: '1',
|
|
46
|
+
versionInfo: {},
|
|
47
|
+
windowIsEnableMultiLang: true,
|
|
48
|
+
usernamePerLangs: selected.map((r) => ({ ...r, value: '' })),
|
|
49
|
+
labelid: '-1',
|
|
50
|
+
targetId: -1,
|
|
51
|
+
tabMenuValue: String(enRow?.id || ''),
|
|
52
|
+
currentData: { ...(enRow || {}), value: '', content: enRow?.langName },
|
|
53
|
+
module,
|
|
54
|
+
versionEnable: false,
|
|
55
|
+
});
|
|
56
|
+
if (res?.code !== 200 || res?.status === false) {
|
|
57
|
+
throw new Error(`保存多语言标签失败: ${res?.msg || '未知错误'}`);
|
|
58
|
+
}
|
|
59
|
+
const labelId = String(res?.data?.labelid || '');
|
|
60
|
+
if (!labelId || labelId === '-1')
|
|
61
|
+
throw new Error('保存多语言标签后未返回有效 labelid');
|
|
62
|
+
return labelId;
|
|
63
|
+
}
|
|
64
|
+
/** 配置位里存的是不是多语言标签 id(负数雪花)。**不要**用「是负数」一概而论地判文本。 */
|
|
65
|
+
export function looksLikeLabelId(value) {
|
|
66
|
+
return /^-\d{10,}$/.test(String(value ?? ''));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 标签写入后有**约 10 秒的延迟才可读**(实测:存完 +7s 仍取回空、+11s 才拿到文本)。
|
|
70
|
+
* 所以「刚建完规则马上 list」会看到原始 id,**这不是 bug**,等一会儿再读就有文本。
|
|
71
|
+
* 命令层不做重试等待 —— 等十秒会让人以为卡住了,而换个时间读就好了。
|
|
72
|
+
*/
|
|
73
|
+
/**
|
|
74
|
+
* 把配置位里的值还原成人能读的文本:是标签 id 就查回简体中文,否则原样返回。
|
|
75
|
+
* **老数据兼容**:拦截上线前存的规则里 `helpContent` 是中文原文,这条路要能照常显示。
|
|
76
|
+
*/
|
|
77
|
+
export async function resolveLabelText(client, baseUrl, value, module) {
|
|
78
|
+
const raw = String(value ?? '');
|
|
79
|
+
if (!looksLikeLabelId(raw))
|
|
80
|
+
return raw;
|
|
81
|
+
try {
|
|
82
|
+
const rows = await readLanguageRows(client, baseUrl, raw, module);
|
|
83
|
+
const zh = rows.find((r) => r.langtype === 'zh_CN')?.value;
|
|
84
|
+
return String(zh ?? '') || raw;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// 查不回来时**显示原值**(用户至少能看到是个引用),不吞掉也不假装是文本
|
|
88
|
+
return raw;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=form-i18n-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-i18n-label.js","sourceRoot":"","sources":["../../src/services/form-i18n-label.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,16 @@ export interface StyleTemplate {
|
|
|
6
6
|
export declare const isFlowLayout: (layoutType: string) => boolean;
|
|
7
7
|
/** 只用于展示和报错文案。 */
|
|
8
8
|
export declare const layoutCn: (layoutType: string) => string;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* 读样式模板列表。两个端点都是**租户级**的模板清单(不是应用级),
|
|
11
|
+
* 所以**不需要 appId** —— `ebbusinessid` 用 formId 即可。
|
|
12
|
+
*/
|
|
13
|
+
export declare function fetchStyleTemplates(client: ApiClient, baseUrl: string, formId: string, layoutType: string): Promise<StyleTemplate[]>;
|
|
10
14
|
/**
|
|
11
15
|
* 把 `--style-template` 的输入解析成该布局类型下的 styleTemplateId。
|
|
12
16
|
*
|
|
13
17
|
* 传 id 时**会校验它确实属于这套**——这正是当初踩坑的地方:跨套 id 平台不报错、直接忽略。
|
|
14
18
|
* 列表取回条数正好等于单页上限时无法判断是否被截断,此时找不到只告警不拦,避免误杀。
|
|
15
19
|
*/
|
|
16
|
-
export declare function resolveStyleTemplateId(client: ApiClient, baseUrl: string,
|
|
20
|
+
export declare function resolveStyleTemplateId(client: ApiClient, baseUrl: string, formId: string, layoutType: string, input: string): Promise<StyleTemplate>;
|
|
17
21
|
//# sourceMappingURL=form-style-template.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-style-template.d.ts","sourceRoot":"","sources":["../../src/services/form-style-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA6BnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,KAAG,OAAgC,CAAC;AAEnF,kBAAkB;AAClB,eAAO,MAAM,QAAQ,GAAI,YAAY,MAAM,KAAG,MAAmD,CAAC;AAElG,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,
|
|
1
|
+
{"version":3,"file":"form-style-template.d.ts","sourceRoot":"","sources":["../../src/services/form-style-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA6BnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,KAAG,OAAgC,CAAC;AAEnF,kBAAkB;AAClB,eAAO,MAAM,QAAQ,GAAI,YAAY,MAAM,KAAG,MAAmD,CAAC;AAElG;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAsB1B;AAoBD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CAkCxB"}
|
|
@@ -25,7 +25,11 @@ const PAGE_SIZE = 200;
|
|
|
25
25
|
export const isFlowLayout = (layoutType) => layoutType === 'FLOW';
|
|
26
26
|
/** 只用于展示和报错文案。 */
|
|
27
27
|
export const layoutCn = (layoutType) => (isFlowLayout(layoutType) ? '流式' : '表格式');
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* 读样式模板列表。两个端点都是**租户级**的模板清单(不是应用级),
|
|
30
|
+
* 所以**不需要 appId** —— `ebbusinessid` 用 formId 即可。
|
|
31
|
+
*/
|
|
32
|
+
export async function fetchStyleTemplates(client, baseUrl, formId, layoutType) {
|
|
29
33
|
const flow = isFlowLayout(layoutType);
|
|
30
34
|
const path = flow
|
|
31
35
|
? '/api/form/flow/template/list'
|
|
@@ -40,7 +44,7 @@ export async function fetchStyleTemplates(client, baseUrl, appId, formId, layout
|
|
|
40
44
|
pageNo: 1, pageSize: PAGE_SIZE, clientType: CLIENT_TYPE_PC, templateStatus: 1,
|
|
41
45
|
module: 'ebuilderform', customParam: { terminal: '' },
|
|
42
46
|
};
|
|
43
|
-
const res = await client.post(`${baseUrl}${path}
|
|
47
|
+
const res = await client.post(`${baseUrl}${path}`, body, { ebbusinessid: formId });
|
|
44
48
|
if (res?.code !== 200 || !res?.status) {
|
|
45
49
|
throw new Error(`读取${layoutCn(layoutType)}样式模板失败: ${res?.msg || '未知错误'}`);
|
|
46
50
|
}
|
|
@@ -70,8 +74,8 @@ function dupHint(dups) {
|
|
|
70
74
|
* 传 id 时**会校验它确实属于这套**——这正是当初踩坑的地方:跨套 id 平台不报错、直接忽略。
|
|
71
75
|
* 列表取回条数正好等于单页上限时无法判断是否被截断,此时找不到只告警不拦,避免误杀。
|
|
72
76
|
*/
|
|
73
|
-
export async function resolveStyleTemplateId(client, baseUrl,
|
|
74
|
-
const all = await fetchStyleTemplates(client, baseUrl,
|
|
77
|
+
export async function resolveStyleTemplateId(client, baseUrl, formId, layoutType, input) {
|
|
78
|
+
const all = await fetchStyleTemplates(client, baseUrl, formId, layoutType);
|
|
75
79
|
const cn = layoutCn(layoutType);
|
|
76
80
|
const trimmed = input.trim();
|
|
77
81
|
if (/^\d+$/.test(trimmed)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-style-template.js","sourceRoot":"","sources":["../../src/services/form-style-template.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,2CAA2C;AAC3C,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,6BAA6B;AAC7B,MAAM,SAAS,GAAG,GAAG,CAAC;AAOtB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAW,EAAE,CAAC,UAAU,KAAK,MAAM,CAAC;AAEnF,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAElG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiB,EACjB,OAAe,EACf,
|
|
1
|
+
{"version":3,"file":"form-style-template.js","sourceRoot":"","sources":["../../src/services/form-style-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 应用菜单目录:把 `allMenus` 的原始返回**递归展开**成可查询的节点表,并构造改名的写报文。
|
|
3
|
+
*
|
|
4
|
+
* 两件事非做不可,都是踩过的坑:
|
|
5
|
+
*
|
|
6
|
+
* 1. **菜单是棵树,不是一层。** `allMenus` 返回的每条记录带 `children`(实测嵌套到三层,
|
|
7
|
+
* 如「设置 → 个人设置 → 个人菜单设置」)。只映射顶层数组会把嵌套菜单全丢掉 ——
|
|
8
|
+
* 调用方据此断言「这个应用没有这个菜单」,是**没取到 ≠ 不存在**的那类假否定。
|
|
9
|
+
*
|
|
10
|
+
* 2. **改名不能把读回来的那条记录原样写回去。** 读侧是扁平记录,写侧读的是**嵌套的
|
|
11
|
+
* `page: {pageId, pageName, pageType, …}`** 对象;直接回写会把菜单写坏
|
|
12
|
+
* (实测 LINK → EMPTY、pageId 清空、menuType 归零)。必须重建 `page`。
|
|
13
|
+
* `menuUrl` 同理:记录里有就原样带,没有就**整个省略** —— 拿 pageId 顶替会把菜单写脏,
|
|
14
|
+
* 而服务端只在它为空时才肯写这个键。
|
|
15
|
+
*/
|
|
16
|
+
/** 读侧派生 / 只读键:回写会造成干扰(与 fields/表单一侧的只读键同理)。 */
|
|
17
|
+
export declare const MENU_READONLY_KEYS: readonly ["children", "createTime", "updateTime", "creator", "tenantKey", "deleteType"];
|
|
18
|
+
/**
|
|
19
|
+
* 改名后**必须原样不变**的字段。任一不等即视为写坏 —— 这正是「扁平记录直接回写」
|
|
20
|
+
* 那次事故的形状(pageType 被改成 EMPTY、menuType 归零)。
|
|
21
|
+
*/
|
|
22
|
+
export declare const MENU_GUARD_KEYS: readonly ["pageType", "pageId", "menuUrl", "menuType", "linkType", "openMode", "showType", "showOrder", "pid", "type", "sysMenuId", "tabs", "pageExtend", "filterCondition"];
|
|
23
|
+
export interface MenuNode {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
pageType: string;
|
|
27
|
+
pageId: string;
|
|
28
|
+
menuUrl: string;
|
|
29
|
+
menuType: string;
|
|
30
|
+
sysMenuId: string;
|
|
31
|
+
parentId: string;
|
|
32
|
+
depth: number;
|
|
33
|
+
raw: Record<string, any>;
|
|
34
|
+
}
|
|
35
|
+
export type MenuBucket = 'ebAppMenus' | 'cusAppMenus';
|
|
36
|
+
export declare function menuNameOf(raw: Record<string, any>): string;
|
|
37
|
+
/**
|
|
38
|
+
* 递归展开菜单树。`depth` 从 0 起,`parentId` 取记录自带的 pid/parentId,
|
|
39
|
+
* 缺失时回落到所在层的父节点 id。
|
|
40
|
+
*/
|
|
41
|
+
export declare function flattenMenus(nodes: any[], depth?: number, parentId?: string): MenuNode[];
|
|
42
|
+
/**
|
|
43
|
+
* 选桶。两桶装的是同一批菜单的两种形状(`ebAppMenus` 用 `content`/`pid`,
|
|
44
|
+
* `cusAppMenus` 用 `menuName`/`parentId`),**不能合并**(会翻倍)。
|
|
45
|
+
* 优先 `ebAppMenus` —— 它的键集就是写报文(`savePublishMenu` 的 navigation)的形状。
|
|
46
|
+
*/
|
|
47
|
+
export declare function pickMenuBucket(data: any): {
|
|
48
|
+
nodes: MenuNode[];
|
|
49
|
+
bucket: MenuBucket;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* 按 id 或名称找菜单。id 精确命中优先;否则返回**所有**同名节点
|
|
53
|
+
* (真实数据里同一个应用存在两条「合同门户页面」—— 调用方必须据此报歧义,不能擅自挑一条)。
|
|
54
|
+
*/
|
|
55
|
+
export declare function findMenus(nodes: MenuNode[], query: string): MenuNode[];
|
|
56
|
+
/** 按名称模糊找候选(用于「找不到」时给提示)。 */
|
|
57
|
+
export declare function similarMenus(nodes: MenuNode[], query: string, limit?: number): MenuNode[];
|
|
58
|
+
/**
|
|
59
|
+
* 平台系统项(回收站 / 设置 / 个人设置 …)。这些菜单由平台维护、指向内置页面,
|
|
60
|
+
* 改名没有语义,调用方应拒绝。
|
|
61
|
+
*/
|
|
62
|
+
export declare function isSystemMenu(node: MenuNode): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* 构造改名的写报文:以读回的记录为底,只动名字,再**补上写侧要的嵌套 `page`**。
|
|
65
|
+
*
|
|
66
|
+
* 关键取舍:
|
|
67
|
+
* - 读侧派生键一律摘掉(`children` 等),它们不是 navigation 的一部分。
|
|
68
|
+
* - `page` 必须重建:记录里没有这个键,而写侧认它。缺了就是「LINK 变 EMPTY」那次事故。
|
|
69
|
+
* - `menuUrl` **只在记录里本来就有非空值时**带上;没有就整个省略。服务端只在它为空时才写它,
|
|
70
|
+
* 拿 pageId 顶替会把菜单写脏。
|
|
71
|
+
* - `filterCondition` / `tabs` / `pageExtend` 等一律沿用记录原值,不重造 ——
|
|
72
|
+
* 改名不该顺手改掉别人的筛选条件。
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildRenameNavigation(node: MenuNode, newName: string, appId: string): Record<string, any>;
|
|
75
|
+
/**
|
|
76
|
+
* 比对改名前后,返回**名字之外**发生变化的守卫字段。
|
|
77
|
+
* 返回空数组才算改名干净;非空即调用方应硬失败并点名。
|
|
78
|
+
*/
|
|
79
|
+
export declare function diffMenuGuard(before: MenuNode, after: MenuNode): string[];
|
|
80
|
+
/** 把节点表按层级渲染成缩进行(对齐 `role` 命令的树形打印)。 */
|
|
81
|
+
export declare function renderMenuTree(nodes: MenuNode[]): string[];
|
|
82
|
+
/** 嵌套(非顶层)节点数。 */
|
|
83
|
+
export declare function nestedCount(nodes: MenuNode[]): number;
|
|
84
|
+
//# sourceMappingURL=menu-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-catalog.d.ts","sourceRoot":"","sources":["../../src/services/menu-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,yFAOrB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,eAAe,8KAGlB,CAAC;AAEX,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC;AAWtD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,SAAI,EAAE,QAAQ,SAAM,GAAG,QAAQ,EAAE,CAsBhF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAMnF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAMtE;AAED,6BAA6B;AAC7B,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,QAAQ,EAAE,CAOrF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA2BzG;AAOD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,CAQzE;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAE1D;AAED,kBAAkB;AAClB,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 应用菜单目录:把 `allMenus` 的原始返回**递归展开**成可查询的节点表,并构造改名的写报文。
|
|
3
|
+
*
|
|
4
|
+
* 两件事非做不可,都是踩过的坑:
|
|
5
|
+
*
|
|
6
|
+
* 1. **菜单是棵树,不是一层。** `allMenus` 返回的每条记录带 `children`(实测嵌套到三层,
|
|
7
|
+
* 如「设置 → 个人设置 → 个人菜单设置」)。只映射顶层数组会把嵌套菜单全丢掉 ——
|
|
8
|
+
* 调用方据此断言「这个应用没有这个菜单」,是**没取到 ≠ 不存在**的那类假否定。
|
|
9
|
+
*
|
|
10
|
+
* 2. **改名不能把读回来的那条记录原样写回去。** 读侧是扁平记录,写侧读的是**嵌套的
|
|
11
|
+
* `page: {pageId, pageName, pageType, …}`** 对象;直接回写会把菜单写坏
|
|
12
|
+
* (实测 LINK → EMPTY、pageId 清空、menuType 归零)。必须重建 `page`。
|
|
13
|
+
* `menuUrl` 同理:记录里有就原样带,没有就**整个省略** —— 拿 pageId 顶替会把菜单写脏,
|
|
14
|
+
* 而服务端只在它为空时才肯写这个键。
|
|
15
|
+
*/
|
|
16
|
+
/** 两个桶的字段名不同,取值时两组都要认。 */
|
|
17
|
+
const NAME_KEYS = ['content', 'menuName', 'showName', 'alias', 'nameAlias', 'realName'];
|
|
18
|
+
const PARENT_KEYS = ['pid', 'parentId'];
|
|
19
|
+
/** 读侧派生 / 只读键:回写会造成干扰(与 fields/表单一侧的只读键同理)。 */
|
|
20
|
+
export const MENU_READONLY_KEYS = [
|
|
21
|
+
'children',
|
|
22
|
+
'createTime',
|
|
23
|
+
'updateTime',
|
|
24
|
+
'creator',
|
|
25
|
+
'tenantKey',
|
|
26
|
+
'deleteType',
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* 改名后**必须原样不变**的字段。任一不等即视为写坏 —— 这正是「扁平记录直接回写」
|
|
30
|
+
* 那次事故的形状(pageType 被改成 EMPTY、menuType 归零)。
|
|
31
|
+
*/
|
|
32
|
+
export const MENU_GUARD_KEYS = [
|
|
33
|
+
'pageType', 'pageId', 'menuUrl', 'menuType', 'linkType', 'openMode',
|
|
34
|
+
'showType', 'showOrder', 'pid', 'type', 'sysMenuId', 'tabs', 'pageExtend', 'filterCondition',
|
|
35
|
+
];
|
|
36
|
+
/** 逐层取值:两个桶的键名不同,谁的先命中用谁。 */
|
|
37
|
+
function firstOf(raw, keys) {
|
|
38
|
+
for (const k of keys) {
|
|
39
|
+
const v = raw?.[k];
|
|
40
|
+
if (v !== undefined && v !== null && String(v) !== '')
|
|
41
|
+
return String(v);
|
|
42
|
+
}
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
export function menuNameOf(raw) {
|
|
46
|
+
return firstOf(raw, NAME_KEYS);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 递归展开菜单树。`depth` 从 0 起,`parentId` 取记录自带的 pid/parentId,
|
|
50
|
+
* 缺失时回落到所在层的父节点 id。
|
|
51
|
+
*/
|
|
52
|
+
export function flattenMenus(nodes, depth = 0, parentId = '0') {
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const raw of nodes || []) {
|
|
55
|
+
if (!raw || typeof raw !== 'object')
|
|
56
|
+
continue;
|
|
57
|
+
const id = String(raw.id ?? '');
|
|
58
|
+
out.push({
|
|
59
|
+
id,
|
|
60
|
+
name: menuNameOf(raw),
|
|
61
|
+
pageType: String(raw.pageType ?? ''),
|
|
62
|
+
pageId: String(raw.pageId ?? ''),
|
|
63
|
+
menuUrl: String(raw.menuUrl ?? ''),
|
|
64
|
+
menuType: String(raw.menuType ?? ''),
|
|
65
|
+
sysMenuId: String(raw.sysMenuId ?? ''),
|
|
66
|
+
parentId: firstOf(raw, PARENT_KEYS) || String(parentId),
|
|
67
|
+
depth,
|
|
68
|
+
raw,
|
|
69
|
+
});
|
|
70
|
+
if (Array.isArray(raw.children) && raw.children.length) {
|
|
71
|
+
out.push(...flattenMenus(raw.children, depth + 1, id));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 选桶。两桶装的是同一批菜单的两种形状(`ebAppMenus` 用 `content`/`pid`,
|
|
78
|
+
* `cusAppMenus` 用 `menuName`/`parentId`),**不能合并**(会翻倍)。
|
|
79
|
+
* 优先 `ebAppMenus` —— 它的键集就是写报文(`savePublishMenu` 的 navigation)的形状。
|
|
80
|
+
*/
|
|
81
|
+
export function pickMenuBucket(data) {
|
|
82
|
+
const eb = data?.ebAppMenus;
|
|
83
|
+
const cus = data?.cusAppMenus;
|
|
84
|
+
if (Array.isArray(eb) && eb.length)
|
|
85
|
+
return { nodes: flattenMenus(eb), bucket: 'ebAppMenus' };
|
|
86
|
+
if (Array.isArray(cus) && cus.length)
|
|
87
|
+
return { nodes: flattenMenus(cus), bucket: 'cusAppMenus' };
|
|
88
|
+
return { nodes: [], bucket: 'ebAppMenus' };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 按 id 或名称找菜单。id 精确命中优先;否则返回**所有**同名节点
|
|
92
|
+
* (真实数据里同一个应用存在两条「合同门户页面」—— 调用方必须据此报歧义,不能擅自挑一条)。
|
|
93
|
+
*/
|
|
94
|
+
export function findMenus(nodes, query) {
|
|
95
|
+
const q = String(query ?? '').trim();
|
|
96
|
+
if (!q)
|
|
97
|
+
return [];
|
|
98
|
+
const byId = nodes.filter((n) => n.id === q);
|
|
99
|
+
if (byId.length)
|
|
100
|
+
return byId;
|
|
101
|
+
return nodes.filter((n) => n.name === q);
|
|
102
|
+
}
|
|
103
|
+
/** 按名称模糊找候选(用于「找不到」时给提示)。 */
|
|
104
|
+
export function similarMenus(nodes, query, limit = 10) {
|
|
105
|
+
const q = String(query ?? '').trim();
|
|
106
|
+
if (!q)
|
|
107
|
+
return [];
|
|
108
|
+
return nodes
|
|
109
|
+
.filter((n) => n.name.includes(q) || q.includes(n.name))
|
|
110
|
+
.filter((n) => n.name)
|
|
111
|
+
.slice(0, limit);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 平台系统项(回收站 / 设置 / 个人设置 …)。这些菜单由平台维护、指向内置页面,
|
|
115
|
+
* 改名没有语义,调用方应拒绝。
|
|
116
|
+
*/
|
|
117
|
+
export function isSystemMenu(node) {
|
|
118
|
+
return node.pageType === 'setting' || node.pageType === 'BASE';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 构造改名的写报文:以读回的记录为底,只动名字,再**补上写侧要的嵌套 `page`**。
|
|
122
|
+
*
|
|
123
|
+
* 关键取舍:
|
|
124
|
+
* - 读侧派生键一律摘掉(`children` 等),它们不是 navigation 的一部分。
|
|
125
|
+
* - `page` 必须重建:记录里没有这个键,而写侧认它。缺了就是「LINK 变 EMPTY」那次事故。
|
|
126
|
+
* - `menuUrl` **只在记录里本来就有非空值时**带上;没有就整个省略。服务端只在它为空时才写它,
|
|
127
|
+
* 拿 pageId 顶替会把菜单写脏。
|
|
128
|
+
* - `filterCondition` / `tabs` / `pageExtend` 等一律沿用记录原值,不重造 ——
|
|
129
|
+
* 改名不该顺手改掉别人的筛选条件。
|
|
130
|
+
*/
|
|
131
|
+
export function buildRenameNavigation(node, newName, appId) {
|
|
132
|
+
const nav = { ...node.raw };
|
|
133
|
+
for (const k of MENU_READONLY_KEYS)
|
|
134
|
+
delete nav[k];
|
|
135
|
+
nav.id = node.id;
|
|
136
|
+
// 两个桶的名字键名不同,记录里有哪个就改哪个;content 是写侧主键,始终给。
|
|
137
|
+
nav.content = newName;
|
|
138
|
+
for (const k of ['alias', 'nameAlias', 'realName', 'menuName', 'showName']) {
|
|
139
|
+
if (k in nav)
|
|
140
|
+
nav[k] = newName;
|
|
141
|
+
}
|
|
142
|
+
nav.page = {
|
|
143
|
+
pageId: node.pageId,
|
|
144
|
+
pageName: String(node.raw.pageName || newName),
|
|
145
|
+
pageType: node.pageType,
|
|
146
|
+
terminalScopes: String(node.raw.terminalScopes ?? ''),
|
|
147
|
+
appid: appId,
|
|
148
|
+
};
|
|
149
|
+
// 有才带,没有就省略 —— 不要用 pageId 合成
|
|
150
|
+
if (node.raw.menuUrl !== undefined && String(node.raw.menuUrl) !== '') {
|
|
151
|
+
nav.menuUrl = String(node.raw.menuUrl);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
delete nav.menuUrl;
|
|
155
|
+
}
|
|
156
|
+
return nav;
|
|
157
|
+
}
|
|
158
|
+
/** 归一化比较值:`undefined` 与 `''` 视为等价(键存在与否不代表语义差异)。 */
|
|
159
|
+
function norm(v) {
|
|
160
|
+
return v === undefined || v === null ? '' : String(v);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 比对改名前后,返回**名字之外**发生变化的守卫字段。
|
|
164
|
+
* 返回空数组才算改名干净;非空即调用方应硬失败并点名。
|
|
165
|
+
*/
|
|
166
|
+
export function diffMenuGuard(before, after) {
|
|
167
|
+
const changed = [];
|
|
168
|
+
for (const k of MENU_GUARD_KEYS) {
|
|
169
|
+
if (norm(before.raw?.[k]) !== norm(after.raw?.[k])) {
|
|
170
|
+
changed.push(`${k}: ${JSON.stringify(norm(before.raw?.[k]))} → ${JSON.stringify(norm(after.raw?.[k]))}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return changed;
|
|
174
|
+
}
|
|
175
|
+
/** 把节点表按层级渲染成缩进行(对齐 `role` 命令的树形打印)。 */
|
|
176
|
+
export function renderMenuTree(nodes) {
|
|
177
|
+
return nodes.map((n) => `${' '.repeat(n.depth + 1)}${n.name}`);
|
|
178
|
+
}
|
|
179
|
+
/** 嵌套(非顶层)节点数。 */
|
|
180
|
+
export function nestedCount(nodes) {
|
|
181
|
+
return nodes.filter((n) => n.depth > 0).length;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=menu-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-catalog.js","sourceRoot":"","sources":["../../src/services/menu-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ApiClient } from '../core/client.js';
|
|
2
|
+
/** 加签接收人选择方式 */
|
|
3
|
+
export declare const SELECT_MODES: Record<string, number>;
|
|
4
|
+
export declare const SELECT_MODE_LABELS: Record<number, string>;
|
|
5
|
+
/** 默认环节类型 */
|
|
6
|
+
export declare const NODE_TYPES: Record<string, number>;
|
|
7
|
+
export declare const NODE_TYPE_LABELS: Record<number, string>;
|
|
8
|
+
/** 默认会签属性 */
|
|
9
|
+
export declare const SIGN_ATTRS: Record<string, number>;
|
|
10
|
+
export declare const SIGN_ATTR_LABELS: Record<number, string>;
|
|
11
|
+
/** 流转结束后默认流转方式 */
|
|
12
|
+
export declare const FLOW_TYPES: Record<string, number>;
|
|
13
|
+
export declare const FLOW_TYPE_LABELS: Record<number, string>;
|
|
14
|
+
/** 回到本节点后的流转方式 */
|
|
15
|
+
export declare const BACK_FLOW_TYPES: Record<string, number>;
|
|
16
|
+
export declare const BACK_FLOW_TYPE_LABELS: Record<number, string>;
|
|
17
|
+
/** 加签人字段权限 */
|
|
18
|
+
export declare const FIELD_AUTH_TYPES: Record<string, number>;
|
|
19
|
+
export declare const FIELD_AUTH_TYPE_LABELS: Record<number, string>;
|
|
20
|
+
export interface AddStepSettings {
|
|
21
|
+
selectMode: number;
|
|
22
|
+
defNodeType: number;
|
|
23
|
+
defSignAttr: number;
|
|
24
|
+
defFlowType: number;
|
|
25
|
+
backFlowType: number;
|
|
26
|
+
fieldauthType: number;
|
|
27
|
+
/** 允许修改流程表单内容:0 关闭 / 1 开启 */
|
|
28
|
+
defModifyForm: number;
|
|
29
|
+
/** 限制接收范围(只开开关,范围明细另行保存) */
|
|
30
|
+
limitReceiveRange: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare const DEFAULT_ADD_STEP: AddStepSettings;
|
|
33
|
+
/** 回读归一:字符串枚举 → 数字,布尔 → 布尔 */
|
|
34
|
+
export declare function normalizeAddStep(data: any): AddStepSettings;
|
|
35
|
+
export declare function getAddStepSettings(client: ApiClient, baseUrl: string, workflowId: string, nodeId: string): Promise<AddStepSettings>;
|
|
36
|
+
/** 枚举越界检查。返回错误文案数组(空 = 通过)。 */
|
|
37
|
+
export declare function validateAddStep(s: AddStepSettings): string[];
|
|
38
|
+
/**
|
|
39
|
+
* 保存。**枚举一律发数字** —— 把 GET 回读的字符串原样发出去会 500。
|
|
40
|
+
* 返回实际写出的设置,供调用方回读比对。
|
|
41
|
+
*/
|
|
42
|
+
export declare function saveAddStepSettings(client: ApiClient, baseUrl: string, workflowId: string, nodeId: string, s: AddStepSettings): Promise<AddStepSettings>;
|
|
43
|
+
/** 回读比对,返回不一致项 */
|
|
44
|
+
export declare function diffAddStep(before: AddStepSettings, after: AddStepSettings): string[];
|
|
45
|
+
//# sourceMappingURL=workflow-add-step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-add-step.d.ts","sourceRoot":"","sources":["../../src/services/workflow-add-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAkBnD,gBAAgB;AAChB,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAoC,CAAC;AACrF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAwC,CAAC;AAE/F,aAAa;AACb,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAuC,CAAC;AACtF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAiC,CAAC;AAEtF,aAAa;AACb,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAwC,CAAC;AACvF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAsC,CAAC;AAE3F,kBAAkB;AAClB,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAwB,CAAC;AACvE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAiC,CAAC;AAEtF,kBAAkB;AAClB,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAwC,CAAC;AAC5F,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAExD,CAAC;AAEF,cAAc;AACd,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAuB,CAAC;AAC5E,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAmC,CAAC;AAE9F,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,gBAAgB,EAAE,eAG9B,CAAC;AAEF,8BAA8B;AAC9B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,GAAG,eAAe,CAkB3D;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GACrE,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAED,+BAA+B;AAC/B,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAe5D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,GACzF,OAAO,CAAC,eAAe,CAAC,CAoB1B;AAED,kBAAkB;AAClB,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,CAMrF"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 节点加签设置(操作菜单「加签」按钮的内部设置)。
|
|
3
|
+
*
|
|
4
|
+
* GET `addstep/getNodeAddStepSetForm` 的返回多包一层:`data.addStepForm.data`。
|
|
5
|
+
*
|
|
6
|
+
* **回读的值不能直接写回去**(2026-09-22 实测):GET 把这些枚举回读成**字符串**
|
|
7
|
+
* `"0"/"1"/"2"`、`limitReceiveRange` 回读成布尔 `false`,原样提交直接 500「系统错误」。
|
|
8
|
+
* 全部转成数字再发就通 —— 与指定流转、节点菜单是同一类读写形状不对称。
|
|
9
|
+
*
|
|
10
|
+
* 另一处文档与实际不符:接口库写 `fieldauthType` 是「1 所有字段权限 / 2 与当前节点一致」,
|
|
11
|
+
* 线上实际枚举是 **0 所有字段权限 / 1 与当前节点保持一致**(页面默认值就是 `"1"`)。
|
|
12
|
+
* 照文档发 `2` 是个枚举里不存在的值。
|
|
13
|
+
*/
|
|
14
|
+
const BASE = '/api/bs/workflow/pathdef';
|
|
15
|
+
/** 加签接收人选择方式 */
|
|
16
|
+
export const SELECT_MODES = { simple: 0, list: 1, chart: 2 };
|
|
17
|
+
export const SELECT_MODE_LABELS = { 0: '简易模式', 1: '列表模式', 2: '流程图模式' };
|
|
18
|
+
/** 默认环节类型 */
|
|
19
|
+
export const NODE_TYPES = { approve: 0, confirm: 1, view: 2 };
|
|
20
|
+
export const NODE_TYPE_LABELS = { 0: '审批', 1: '确认', 2: '查阅' };
|
|
21
|
+
/** 默认会签属性 */
|
|
22
|
+
export const SIGN_ATTRS = { countersign: 0, non: 1, order: 2 };
|
|
23
|
+
export const SIGN_ATTR_LABELS = { 0: '会签', 1: '非会签', 2: '依次逐个处理' };
|
|
24
|
+
/** 流转结束后默认流转方式 */
|
|
25
|
+
export const FLOW_TYPES = { next: 0, back: 1 };
|
|
26
|
+
export const FLOW_TYPE_LABELS = { 0: '自动流转下一节点', 1: '回到本节点' };
|
|
27
|
+
/** 回到本节点后的流转方式 */
|
|
28
|
+
export const BACK_FLOW_TYPES = { operator: 0, next: 1, addstep: 2 };
|
|
29
|
+
export const BACK_FLOW_TYPE_LABELS = {
|
|
30
|
+
0: '由当前节点操作者选择', 1: '流转至下一节点', 2: '流转至加签环节',
|
|
31
|
+
};
|
|
32
|
+
/** 加签人字段权限 */
|
|
33
|
+
export const FIELD_AUTH_TYPES = { all: 0, same: 1 };
|
|
34
|
+
export const FIELD_AUTH_TYPE_LABELS = { 0: '所有字段权限', 1: '与当前节点保持一致' };
|
|
35
|
+
export const DEFAULT_ADD_STEP = {
|
|
36
|
+
selectMode: 1, defNodeType: 0, defSignAttr: 0, defFlowType: 0,
|
|
37
|
+
backFlowType: 0, fieldauthType: 1, defModifyForm: 0, limitReceiveRange: false,
|
|
38
|
+
};
|
|
39
|
+
/** 回读归一:字符串枚举 → 数字,布尔 → 布尔 */
|
|
40
|
+
export function normalizeAddStep(data) {
|
|
41
|
+
const d = data || {};
|
|
42
|
+
const num = (v, fallback) => {
|
|
43
|
+
if (v === undefined || v === null || v === '')
|
|
44
|
+
return fallback;
|
|
45
|
+
if (typeof v === 'boolean')
|
|
46
|
+
return v ? 1 : 0;
|
|
47
|
+
const n = Number(v);
|
|
48
|
+
return Number.isFinite(n) ? n : fallback;
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
selectMode: num(d.selectMode, DEFAULT_ADD_STEP.selectMode),
|
|
52
|
+
defNodeType: num(d.defNodeType, DEFAULT_ADD_STEP.defNodeType),
|
|
53
|
+
defSignAttr: num(d.defSignAttr, DEFAULT_ADD_STEP.defSignAttr),
|
|
54
|
+
defFlowType: num(d.defFlowType, DEFAULT_ADD_STEP.defFlowType),
|
|
55
|
+
backFlowType: num(d.backFlowType, DEFAULT_ADD_STEP.backFlowType),
|
|
56
|
+
fieldauthType: num(d.fieldauthType, DEFAULT_ADD_STEP.fieldauthType),
|
|
57
|
+
defModifyForm: num(d.defModifyForm, DEFAULT_ADD_STEP.defModifyForm),
|
|
58
|
+
limitReceiveRange: d.limitReceiveRange === true || d.limitReceiveRange === 1 || d.limitReceiveRange === '1',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export async function getAddStepSettings(client, baseUrl, workflowId, nodeId) {
|
|
62
|
+
const res = await client.get(`${baseUrl}${BASE}/addstep/getNodeAddStepSetForm?workflowId=${workflowId}&nodeId=${nodeId}`);
|
|
63
|
+
if (res?.code !== 200 || !res?.status)
|
|
64
|
+
throw new Error(`读取加签设置失败: ${res?.msg || '未知错误'}`);
|
|
65
|
+
const form = res?.data?.addStepForm;
|
|
66
|
+
if (!form?.data)
|
|
67
|
+
throw new Error(`加签设置返回结构异常(缺 addStepForm.data),节点 ${nodeId} 可能不支持加签`);
|
|
68
|
+
return normalizeAddStep(form.data);
|
|
69
|
+
}
|
|
70
|
+
/** 枚举越界检查。返回错误文案数组(空 = 通过)。 */
|
|
71
|
+
export function validateAddStep(s) {
|
|
72
|
+
const errors = [];
|
|
73
|
+
const check = (label, value, labels) => {
|
|
74
|
+
if (!(value in labels)) {
|
|
75
|
+
errors.push(`${label} 不支持 ${value},可选: ${Object.entries(labels).map(([k, v]) => `${k}=${v}`).join(' / ')}`);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
check('选择方式', s.selectMode, SELECT_MODE_LABELS);
|
|
79
|
+
check('环节类型', s.defNodeType, NODE_TYPE_LABELS);
|
|
80
|
+
check('会签属性', s.defSignAttr, SIGN_ATTR_LABELS);
|
|
81
|
+
check('流转方式', s.defFlowType, FLOW_TYPE_LABELS);
|
|
82
|
+
check('回到本节点后流转方式', s.backFlowType, BACK_FLOW_TYPE_LABELS);
|
|
83
|
+
check('字段权限', s.fieldauthType, FIELD_AUTH_TYPE_LABELS);
|
|
84
|
+
check('允许修改表单内容', s.defModifyForm, { 0: '关闭', 1: '开启' });
|
|
85
|
+
return errors;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 保存。**枚举一律发数字** —— 把 GET 回读的字符串原样发出去会 500。
|
|
89
|
+
* 返回实际写出的设置,供调用方回读比对。
|
|
90
|
+
*/
|
|
91
|
+
export async function saveAddStepSettings(client, baseUrl, workflowId, nodeId, s) {
|
|
92
|
+
const errors = validateAddStep(s);
|
|
93
|
+
if (errors.length)
|
|
94
|
+
throw new Error(errors.join(';'));
|
|
95
|
+
const payload = {
|
|
96
|
+
workflowId, nodeId,
|
|
97
|
+
selectMode: Number(s.selectMode),
|
|
98
|
+
defNodeType: Number(s.defNodeType),
|
|
99
|
+
defSignAttr: Number(s.defSignAttr),
|
|
100
|
+
defFlowType: Number(s.defFlowType),
|
|
101
|
+
backFlowType: Number(s.backFlowType),
|
|
102
|
+
fieldauthType: Number(s.fieldauthType),
|
|
103
|
+
defModifyForm: Number(s.defModifyForm),
|
|
104
|
+
limitReceiveRange: s.limitReceiveRange ? 1 : 0,
|
|
105
|
+
isSync: false,
|
|
106
|
+
};
|
|
107
|
+
const res = await client.post(`${baseUrl}${BASE}/addstep/saveNodeAddStepSetInfo`, payload);
|
|
108
|
+
if (res?.code !== 200 || res?.status === false) {
|
|
109
|
+
throw new Error(`保存加签设置失败: ${res?.msg || '未知错误'}`);
|
|
110
|
+
}
|
|
111
|
+
return s;
|
|
112
|
+
}
|
|
113
|
+
/** 回读比对,返回不一致项 */
|
|
114
|
+
export function diffAddStep(before, after) {
|
|
115
|
+
const out = [];
|
|
116
|
+
for (const key of Object.keys(before)) {
|
|
117
|
+
if (before[key] !== after[key])
|
|
118
|
+
out.push(`${key}: 期望 ${String(before[key])},回读 ${String(after[key])}`);
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=workflow-add-step.js.map
|