weaver-e10-builder 1.0.2-beta
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/README.md +200 -0
- package/dist/commands/app.d.ts +3 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +305 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +386 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +106 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +134 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/docx.d.ts +3 -0
- package/dist/commands/docx.d.ts.map +1 -0
- package/dist/commands/docx.js +54 -0
- package/dist/commands/docx.js.map +1 -0
- package/dist/commands/form-button.d.ts +3 -0
- package/dist/commands/form-button.d.ts.map +1 -0
- package/dist/commands/form-button.js +441 -0
- package/dist/commands/form-button.js.map +1 -0
- package/dist/commands/form-data.d.ts +3 -0
- package/dist/commands/form-data.d.ts.map +1 -0
- package/dist/commands/form-data.js +197 -0
- package/dist/commands/form-data.js.map +1 -0
- package/dist/commands/form-ebuilder-columns.d.ts +3 -0
- package/dist/commands/form-ebuilder-columns.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-columns.js +118 -0
- package/dist/commands/form-ebuilder-columns.js.map +1 -0
- package/dist/commands/form-ebuilder-filter.d.ts +3 -0
- package/dist/commands/form-ebuilder-filter.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-filter.js +135 -0
- package/dist/commands/form-ebuilder-filter.js.map +1 -0
- package/dist/commands/form-ebuilder-scope.d.ts +3 -0
- package/dist/commands/form-ebuilder-scope.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-scope.js +321 -0
- package/dist/commands/form-ebuilder-scope.js.map +1 -0
- package/dist/commands/form-ebuilder-search.d.ts +3 -0
- package/dist/commands/form-ebuilder-search.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-search.js +252 -0
- package/dist/commands/form-ebuilder-search.js.map +1 -0
- package/dist/commands/form-formula.d.ts +12 -0
- package/dist/commands/form-formula.d.ts.map +1 -0
- package/dist/commands/form-formula.js +252 -0
- package/dist/commands/form-formula.js.map +1 -0
- package/dist/commands/form-layout-init.d.ts +15 -0
- package/dist/commands/form-layout-init.d.ts.map +1 -0
- package/dist/commands/form-layout-init.js +162 -0
- package/dist/commands/form-layout-init.js.map +1 -0
- package/dist/commands/form-layout.d.ts +3 -0
- package/dist/commands/form-layout.d.ts.map +1 -0
- package/dist/commands/form-layout.js +236 -0
- package/dist/commands/form-layout.js.map +1 -0
- package/dist/commands/form-list-click.d.ts +3 -0
- package/dist/commands/form-list-click.d.ts.map +1 -0
- package/dist/commands/form-list-click.js +154 -0
- package/dist/commands/form-list-click.js.map +1 -0
- package/dist/commands/form-list-event.d.ts +3 -0
- package/dist/commands/form-list-event.d.ts.map +1 -0
- package/dist/commands/form-list-event.js +203 -0
- package/dist/commands/form-list-event.js.map +1 -0
- package/dist/commands/form-list-filter.d.ts +9 -0
- package/dist/commands/form-list-filter.d.ts.map +1 -0
- package/dist/commands/form-list-filter.js +107 -0
- package/dist/commands/form-list-filter.js.map +1 -0
- package/dist/commands/form-list-group.d.ts +11 -0
- package/dist/commands/form-list-group.d.ts.map +1 -0
- package/dist/commands/form-list-group.js +100 -0
- package/dist/commands/form-list-group.js.map +1 -0
- package/dist/commands/form-list-permission.d.ts +3 -0
- package/dist/commands/form-list-permission.d.ts.map +1 -0
- package/dist/commands/form-list-permission.js +127 -0
- package/dist/commands/form-list-permission.js.map +1 -0
- package/dist/commands/form-list-search-group.d.ts +3 -0
- package/dist/commands/form-list-search-group.d.ts.map +1 -0
- package/dist/commands/form-list-search-group.js +132 -0
- package/dist/commands/form-list-search-group.js.map +1 -0
- package/dist/commands/form-list-stats.d.ts +11 -0
- package/dist/commands/form-list-stats.d.ts.map +1 -0
- package/dist/commands/form-list-stats.js +139 -0
- package/dist/commands/form-list-stats.js.map +1 -0
- package/dist/commands/form-list-unit.d.ts +3 -0
- package/dist/commands/form-list-unit.d.ts.map +1 -0
- package/dist/commands/form-list-unit.js +95 -0
- package/dist/commands/form-list-unit.js.map +1 -0
- package/dist/commands/form-list-utils.d.ts +32 -0
- package/dist/commands/form-list-utils.d.ts.map +1 -0
- package/dist/commands/form-list-utils.js +76 -0
- package/dist/commands/form-list-utils.js.map +1 -0
- package/dist/commands/form-list.d.ts +3 -0
- package/dist/commands/form-list.d.ts.map +1 -0
- package/dist/commands/form-list.js +624 -0
- package/dist/commands/form-list.js.map +1 -0
- package/dist/commands/form-permission.d.ts +3 -0
- package/dist/commands/form-permission.d.ts.map +1 -0
- package/dist/commands/form-permission.js +193 -0
- package/dist/commands/form-permission.js.map +1 -0
- package/dist/commands/form-relate.d.ts +14 -0
- package/dist/commands/form-relate.d.ts.map +1 -0
- package/dist/commands/form-relate.js +140 -0
- package/dist/commands/form-relate.js.map +1 -0
- package/dist/commands/form-serial-mark.d.ts +18 -0
- package/dist/commands/form-serial-mark.d.ts.map +1 -0
- package/dist/commands/form-serial-mark.js +167 -0
- package/dist/commands/form-serial-mark.js.map +1 -0
- package/dist/commands/form-table-view.d.ts +3 -0
- package/dist/commands/form-table-view.d.ts.map +1 -0
- package/dist/commands/form-table-view.js +217 -0
- package/dist/commands/form-table-view.js.map +1 -0
- package/dist/commands/form-validate.d.ts +3 -0
- package/dist/commands/form-validate.d.ts.map +1 -0
- package/dist/commands/form-validate.js +122 -0
- package/dist/commands/form-validate.js.map +1 -0
- package/dist/commands/form-view-permission.d.ts +3 -0
- package/dist/commands/form-view-permission.d.ts.map +1 -0
- package/dist/commands/form-view-permission.js +86 -0
- package/dist/commands/form-view-permission.js.map +1 -0
- package/dist/commands/form-view.d.ts +3 -0
- package/dist/commands/form-view.d.ts.map +1 -0
- package/dist/commands/form-view.js +145 -0
- package/dist/commands/form-view.js.map +1 -0
- package/dist/commands/form.d.ts +3 -0
- package/dist/commands/form.d.ts.map +1 -0
- package/dist/commands/form.js +2467 -0
- package/dist/commands/form.js.map +1 -0
- package/dist/commands/icon.d.ts +3 -0
- package/dist/commands/icon.d.ts.map +1 -0
- package/dist/commands/icon.js +82 -0
- package/dist/commands/icon.js.map +1 -0
- package/dist/commands/matrix.d.ts +3 -0
- package/dist/commands/matrix.d.ts.map +1 -0
- package/dist/commands/matrix.js +587 -0
- package/dist/commands/matrix.js.map +1 -0
- package/dist/commands/menu-permission.d.ts +3 -0
- package/dist/commands/menu-permission.d.ts.map +1 -0
- package/dist/commands/menu-permission.js +188 -0
- package/dist/commands/menu-permission.js.map +1 -0
- package/dist/commands/menu.d.ts +16 -0
- package/dist/commands/menu.d.ts.map +1 -0
- package/dist/commands/menu.js +269 -0
- package/dist/commands/menu.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +345 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/role.d.ts +3 -0
- package/dist/commands/role.d.ts.map +1 -0
- package/dist/commands/role.js +224 -0
- package/dist/commands/role.js.map +1 -0
- package/dist/commands/user.d.ts +3 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +49 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/workflow-action.d.ts +3 -0
- package/dist/commands/workflow-action.d.ts.map +1 -0
- package/dist/commands/workflow-action.js +1821 -0
- package/dist/commands/workflow-action.js.map +1 -0
- package/dist/commands/workflow-advanced.d.ts +3 -0
- package/dist/commands/workflow-advanced.d.ts.map +1 -0
- package/dist/commands/workflow-advanced.js +290 -0
- package/dist/commands/workflow-advanced.js.map +1 -0
- package/dist/commands/workflow-condition.d.ts +7 -0
- package/dist/commands/workflow-condition.d.ts.map +1 -0
- package/dist/commands/workflow-condition.js +562 -0
- package/dist/commands/workflow-condition.js.map +1 -0
- package/dist/commands/workflow-message.d.ts +3 -0
- package/dist/commands/workflow-message.d.ts.map +1 -0
- package/dist/commands/workflow-message.js +399 -0
- package/dist/commands/workflow-message.js.map +1 -0
- package/dist/commands/workflow-node-overtime.d.ts +3 -0
- package/dist/commands/workflow-node-overtime.d.ts.map +1 -0
- package/dist/commands/workflow-node-overtime.js +150 -0
- package/dist/commands/workflow-node-overtime.js.map +1 -0
- package/dist/commands/workflow-node-reject.d.ts +3 -0
- package/dist/commands/workflow-node-reject.d.ts.map +1 -0
- package/dist/commands/workflow-node-reject.js +115 -0
- package/dist/commands/workflow-node-reject.js.map +1 -0
- package/dist/commands/workflow-node-sign.d.ts +15 -0
- package/dist/commands/workflow-node-sign.d.ts.map +1 -0
- package/dist/commands/workflow-node-sign.js +100 -0
- package/dist/commands/workflow-node-sign.js.map +1 -0
- package/dist/commands/workflow-node-validate.d.ts +16 -0
- package/dist/commands/workflow-node-validate.d.ts.map +1 -0
- package/dist/commands/workflow-node-validate.js +169 -0
- package/dist/commands/workflow-node-validate.js.map +1 -0
- package/dist/commands/workflow-node.d.ts +3 -0
- package/dist/commands/workflow-node.d.ts.map +1 -0
- package/dist/commands/workflow-node.js +347 -0
- package/dist/commands/workflow-node.js.map +1 -0
- package/dist/commands/workflow-numbering.d.ts +17 -0
- package/dist/commands/workflow-numbering.d.ts.map +1 -0
- package/dist/commands/workflow-numbering.js +191 -0
- package/dist/commands/workflow-numbering.js.map +1 -0
- package/dist/commands/workflow-plan-range.d.ts +3 -0
- package/dist/commands/workflow-plan-range.d.ts.map +1 -0
- package/dist/commands/workflow-plan-range.js +116 -0
- package/dist/commands/workflow-plan-range.js.map +1 -0
- package/dist/commands/workflow-setting.d.ts +3 -0
- package/dist/commands/workflow-setting.d.ts.map +1 -0
- package/dist/commands/workflow-setting.js +440 -0
- package/dist/commands/workflow-setting.js.map +1 -0
- package/dist/commands/workflow-title.d.ts +14 -0
- package/dist/commands/workflow-title.d.ts.map +1 -0
- package/dist/commands/workflow-title.js +106 -0
- package/dist/commands/workflow-title.js.map +1 -0
- package/dist/commands/workflow.d.ts +26 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +2359 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/core/auth.d.ts +36 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +351 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/client.d.ts +27 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +100 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/crypto.d.ts +11 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +102 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/core/edition.d.ts +4 -0
- package/dist/core/edition.d.ts.map +1 -0
- package/dist/core/edition.js +19 -0
- package/dist/core/edition.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/services/action-detail.d.ts +112 -0
- package/dist/services/action-detail.d.ts.map +1 -0
- package/dist/services/action-detail.js +443 -0
- package/dist/services/action-detail.js.map +1 -0
- package/dist/services/condition-rules.d.ts +45 -0
- package/dist/services/condition-rules.d.ts.map +1 -0
- package/dist/services/condition-rules.js +207 -0
- package/dist/services/condition-rules.js.map +1 -0
- package/dist/services/form-create.d.ts +102 -0
- package/dist/services/form-create.d.ts.map +1 -0
- package/dist/services/form-create.js +835 -0
- package/dist/services/form-create.js.map +1 -0
- package/dist/services/form-ebuilder-filter.d.ts +60 -0
- package/dist/services/form-ebuilder-filter.d.ts.map +1 -0
- package/dist/services/form-ebuilder-filter.js +562 -0
- package/dist/services/form-ebuilder-filter.js.map +1 -0
- package/dist/services/form-table-view.d.ts +117 -0
- package/dist/services/form-table-view.d.ts.map +1 -0
- package/dist/services/form-table-view.js +882 -0
- package/dist/services/form-table-view.js.map +1 -0
- package/dist/services/form-view-permission.d.ts +30 -0
- package/dist/services/form-view-permission.d.ts.map +1 -0
- package/dist/services/form-view-permission.js +208 -0
- package/dist/services/form-view-permission.js.map +1 -0
- package/dist/services/form-view.d.ts +41 -0
- package/dist/services/form-view.d.ts.map +1 -0
- package/dist/services/form-view.js +334 -0
- package/dist/services/form-view.js.map +1 -0
- package/dist/services/formula-detail.d.ts +31 -0
- package/dist/services/formula-detail.d.ts.map +1 -0
- package/dist/services/formula-detail.js +66 -0
- package/dist/services/formula-detail.js.map +1 -0
- package/dist/services/rich-types.d.ts +35 -0
- package/dist/services/rich-types.d.ts.map +1 -0
- package/dist/services/rich-types.js +105 -0
- package/dist/services/rich-types.js.map +1 -0
- package/dist/services/workflow-layout.d.ts +118 -0
- package/dist/services/workflow-layout.d.ts.map +1 -0
- package/dist/services/workflow-layout.js +279 -0
- package/dist/services/workflow-layout.js.map +1 -0
- package/dist/services/workflow-operator.d.ts +36 -0
- package/dist/services/workflow-operator.d.ts.map +1 -0
- package/dist/services/workflow-operator.js +65 -0
- package/dist/services/workflow-operator.js.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/column-name.d.ts +13 -0
- package/dist/utils/column-name.d.ts.map +1 -0
- package/dist/utils/column-name.js +45 -0
- package/dist/utils/column-name.js.map +1 -0
- package/ecodecmd/package.json +27 -0
- package/ecodecmd/src/build.js +709 -0
- package/ecodecmd/src/compile.js +81 -0
- package/ecodecmd/src/index.js +48 -0
- package/ecodecmd/src/init.js +73 -0
- package/ecodecmd/src/lib/@babel/plugin-proposal-object-rest-spread@7.5.5/index.js +1795 -0
- package/ecodecmd/src/lib/@babel/plugin-proposal-optional-chaining@7.6.0/index.js +135 -0
- package/ecodecmd/src/lib/@babel/preset-env-standalone@7.5.5/babel-preset-env.js +76043 -0
- package/ecodecmd/src/lib/@babel/standalone@7.5.5/babel.js +90802 -0
- package/ecodecmd/src/lib/exec.js +77 -0
- package/ecodecmd/src/loaddep.js +154 -0
- package/ecodecmd/src/util/compress.js +58 -0
- package/ecodecmd/src/util/crypto-util.js +19 -0
- package/ecodecmd/src/util/index.js +153 -0
- package/ecodecmd/src/util/snowflake.js +144 -0
- package/package.json +43 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 流程节点自动排版(分层布局)
|
|
3
|
+
*
|
|
4
|
+
* 读 getXml 的 mxGraph XML → 按连线关系分层(忽略退回线)→ 重排所有节点
|
|
5
|
+
* mxGeometry 坐标 → saveLayout 回写 → 回读验证。
|
|
6
|
+
*
|
|
7
|
+
* 只改节点坐标,连线 cell 保持 relative="1" 自动正交路由,无需改 edge。
|
|
8
|
+
*/
|
|
9
|
+
import type { ApiClient } from '../core/client.js';
|
|
10
|
+
export type WorkflowLayoutClient = Pick<ApiClient, 'get' | 'postForm' | 'post'>;
|
|
11
|
+
export interface AutoLayoutOptions {
|
|
12
|
+
/** 布局方向: ltr=左右(层=列), ttb=上下(层=行) */
|
|
13
|
+
direction?: 'ltr' | 'ttb';
|
|
14
|
+
/** 相邻层间距(列间距 ltr / 行间距 ttb) */
|
|
15
|
+
gapX?: number;
|
|
16
|
+
/** 同层节点间距(行间距 ltr / 列间距 ttb) */
|
|
17
|
+
gapY?: number;
|
|
18
|
+
marginX?: number;
|
|
19
|
+
marginY?: number;
|
|
20
|
+
/** 只计算坐标并返回新 XML,不回写 */
|
|
21
|
+
dryRun?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface AutoLayoutNode {
|
|
24
|
+
nodeId: string;
|
|
25
|
+
name: string;
|
|
26
|
+
nodeType: string;
|
|
27
|
+
nodeAttr: string;
|
|
28
|
+
layer: number;
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
}
|
|
32
|
+
export interface AutoLayoutResult {
|
|
33
|
+
workflowId: string;
|
|
34
|
+
direction: 'ltr' | 'ttb';
|
|
35
|
+
nodes: AutoLayoutNode[];
|
|
36
|
+
/** 参与分层的节点数 */
|
|
37
|
+
nodeCount: number;
|
|
38
|
+
/** 连线数(含退回线) */
|
|
39
|
+
linkCount: number;
|
|
40
|
+
/** 层数 */
|
|
41
|
+
layerCount: number;
|
|
42
|
+
saved: boolean;
|
|
43
|
+
/** 回读验证是否全部命中 */
|
|
44
|
+
verified: boolean;
|
|
45
|
+
xml?: string;
|
|
46
|
+
error?: string;
|
|
47
|
+
}
|
|
48
|
+
/** 解析 getXml 输出的 mxGraph XML,得到节点 + 连线结构 */
|
|
49
|
+
export declare function parseWorkflowXml(xml: string): {
|
|
50
|
+
nodeCells: {
|
|
51
|
+
ref: string;
|
|
52
|
+
nodeId: string;
|
|
53
|
+
name: string;
|
|
54
|
+
nodeType: string;
|
|
55
|
+
nodeAttr: string;
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
w: number;
|
|
59
|
+
h: number;
|
|
60
|
+
cell: string;
|
|
61
|
+
}[];
|
|
62
|
+
links: {
|
|
63
|
+
linkId: string;
|
|
64
|
+
source: string;
|
|
65
|
+
target: string;
|
|
66
|
+
reject: boolean;
|
|
67
|
+
}[];
|
|
68
|
+
};
|
|
69
|
+
/** 分层:忽略退回线,最长路径分层。发起(nodeType=0)强制层0,结束(nodeType=3)提升到最深层。 */
|
|
70
|
+
export declare function computeLayers(nodeCells: Array<{
|
|
71
|
+
nodeId: string;
|
|
72
|
+
nodeType: string;
|
|
73
|
+
}>, links: Array<{
|
|
74
|
+
source: string;
|
|
75
|
+
target: string;
|
|
76
|
+
reject: boolean;
|
|
77
|
+
}>): Map<string, number>;
|
|
78
|
+
/** 计算每个节点的坐标,返回 { nodeId → {x,y,layer} } */
|
|
79
|
+
export declare function computePositions(nodeCells: Array<{
|
|
80
|
+
nodeId: string;
|
|
81
|
+
}>, layers: Map<string, number>, opts: Required<Pick<AutoLayoutOptions, 'direction' | 'gapX' | 'gapY' | 'marginX' | 'marginY'>>): Map<string, {
|
|
82
|
+
x: number;
|
|
83
|
+
y: number;
|
|
84
|
+
layer: number;
|
|
85
|
+
}>;
|
|
86
|
+
/** 按布局方向计算 edge 的连接点(style + defaultPos 里的 exit/entry)。
|
|
87
|
+
* ltr:右侧出、左侧进(水平流)。ttb:底部出、顶部进(纵向流,平台默认)。 */
|
|
88
|
+
export declare function edgeExitEntry(direction: 'ltr' | 'ttb'): string;
|
|
89
|
+
/** 把 getXml 服务器格式转成浏览器格式并应用新坐标。
|
|
90
|
+
*
|
|
91
|
+
* 服务器 saveLayout 只认浏览器 mxGraph 格式:node/edge cell 用纯数字 id,
|
|
92
|
+
* edge 的 source/target 引用 node 的数字 id。getXml 输出的 node_xxx/link_xxx
|
|
93
|
+
* 直接回传会解析失败(节点被判定为 null/已删除)。 */
|
|
94
|
+
export declare function buildBrowserXml(xml: string, positions: Map<string, {
|
|
95
|
+
x: number;
|
|
96
|
+
y: number;
|
|
97
|
+
}>, direction?: 'ltr' | 'ttb'): string;
|
|
98
|
+
/** 回读 getXml 验证坐标 */
|
|
99
|
+
export declare function verifyPositions(client: WorkflowLayoutClient, baseUrl: string, workflowId: string, expected: Map<string, {
|
|
100
|
+
x: number;
|
|
101
|
+
y: number;
|
|
102
|
+
}>): Promise<{
|
|
103
|
+
ok: boolean;
|
|
104
|
+
mismatch: Array<{
|
|
105
|
+
nodeId: string;
|
|
106
|
+
expected: string;
|
|
107
|
+
actual: string;
|
|
108
|
+
}>;
|
|
109
|
+
}>;
|
|
110
|
+
export interface AutoLayoutInput {
|
|
111
|
+
client: WorkflowLayoutClient;
|
|
112
|
+
baseUrl: string;
|
|
113
|
+
workflowId: string;
|
|
114
|
+
options?: AutoLayoutOptions;
|
|
115
|
+
}
|
|
116
|
+
/** 主入口:读图 → 分层 → 排布 → (可选)回写 → 验证 */
|
|
117
|
+
export declare function autoLayoutWorkflow(input: AutoLayoutInput): Promise<AutoLayoutResult>;
|
|
118
|
+
//# sourceMappingURL=workflow-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-layout.d.ts","sourceRoot":"","sources":["../../src/services/workflow-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
const NODE_W = 170;
|
|
2
|
+
const NODE_H = 64;
|
|
3
|
+
/** 解析 getXml 输出的 mxGraph XML,得到节点 + 连线结构 */
|
|
4
|
+
export function parseWorkflowXml(xml) {
|
|
5
|
+
// 节点 cell: node_xxx id + nodeId + mxGeometry
|
|
6
|
+
const nodeCells = [];
|
|
7
|
+
const nodeRe = /<mxCell\b[^>]*nodeId="(\d+)"[^>]*>.*?<\/mxCell>/g;
|
|
8
|
+
for (const m of xml.matchAll(nodeRe)) {
|
|
9
|
+
const cell = m[0];
|
|
10
|
+
const nodeId = m[1];
|
|
11
|
+
const ref = cell.match(/id="(node_\d+)"/)?.[1] || '';
|
|
12
|
+
const name = cell.match(/value="([^"]*)"/)?.[1] || '';
|
|
13
|
+
const nodeType = cell.match(/nodeType="([^"]*)"/)?.[1] || '';
|
|
14
|
+
const nodeAttr = cell.match(/nodeAttriBute="([^"]*)"/)?.[1] || cell.match(/nodeAttr="([^"]*)"/)?.[1] || '0';
|
|
15
|
+
const geo = cell.match(/<mxGeometry\s+x="([\d.]+)"\s+y="([\d.]+)"\s+width="([\d.]+)"\s+height="([\d.]+)"/);
|
|
16
|
+
nodeCells.push({
|
|
17
|
+
ref,
|
|
18
|
+
nodeId,
|
|
19
|
+
name,
|
|
20
|
+
nodeType,
|
|
21
|
+
nodeAttr,
|
|
22
|
+
x: geo ? parseFloat(geo[1]) : 0,
|
|
23
|
+
y: geo ? parseFloat(geo[2]) : 0,
|
|
24
|
+
w: geo ? parseFloat(geo[3]) : NODE_W,
|
|
25
|
+
h: geo ? parseFloat(geo[4]) : NODE_H,
|
|
26
|
+
cell,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// 连线 cell: link_xxx id + source/target(node ref) + isReject
|
|
30
|
+
const links = [];
|
|
31
|
+
const edgeRe = /<mxCell\b[^>]*edge="1"[^>]*>.*?<\/mxCell>/g;
|
|
32
|
+
for (const m of xml.matchAll(edgeRe)) {
|
|
33
|
+
const cell = m[0];
|
|
34
|
+
const linkId = cell.match(/linkId="(\d+)"/)?.[1] || '';
|
|
35
|
+
const source = cell.match(/source="(node_\d+)"/)?.[1] || '';
|
|
36
|
+
const target = cell.match(/target="(node_\d+)"/)?.[1] || '';
|
|
37
|
+
const reject = (cell.match(/isReject="(\d)"/)?.[1] || '0') === '1';
|
|
38
|
+
if (!linkId || !source || !target)
|
|
39
|
+
continue;
|
|
40
|
+
links.push({ linkId, source, target, reject });
|
|
41
|
+
}
|
|
42
|
+
return { nodeCells, links };
|
|
43
|
+
}
|
|
44
|
+
/** 分层:忽略退回线,最长路径分层。发起(nodeType=0)强制层0,结束(nodeType=3)提升到最深层。 */
|
|
45
|
+
export function computeLayers(nodeCells, links) {
|
|
46
|
+
const nodeIds = nodeCells.map(n => n.nodeId);
|
|
47
|
+
const idSet = new Set(nodeIds);
|
|
48
|
+
const edges = [];
|
|
49
|
+
for (const l of links) {
|
|
50
|
+
if (l.reject)
|
|
51
|
+
continue;
|
|
52
|
+
// source/target 是 node_xxx ref,解析回 nodeId
|
|
53
|
+
const from = l.source.replace('node_', '');
|
|
54
|
+
const to = l.target.replace('node_', '');
|
|
55
|
+
if (idSet.has(from) && idSet.has(to))
|
|
56
|
+
edges.push({ from, to });
|
|
57
|
+
}
|
|
58
|
+
// memo DFS 最长路径:depth(n) = 从 n 到最深叶子的边数
|
|
59
|
+
const memo = new Map();
|
|
60
|
+
const depthOf = (id) => {
|
|
61
|
+
if (memo.has(id))
|
|
62
|
+
return memo.get(id);
|
|
63
|
+
memo.set(id, 0); // 防环
|
|
64
|
+
let d = 0;
|
|
65
|
+
for (const e of edges) {
|
|
66
|
+
if (e.from === id)
|
|
67
|
+
d = Math.max(d, 1 + depthOf(e.to));
|
|
68
|
+
}
|
|
69
|
+
memo.set(id, d);
|
|
70
|
+
return d;
|
|
71
|
+
};
|
|
72
|
+
const depth = new Map();
|
|
73
|
+
let maxDepth = 0;
|
|
74
|
+
for (const id of nodeIds) {
|
|
75
|
+
const d = depthOf(id);
|
|
76
|
+
depth.set(id, d);
|
|
77
|
+
if (d > maxDepth)
|
|
78
|
+
maxDepth = d;
|
|
79
|
+
}
|
|
80
|
+
const layers = new Map();
|
|
81
|
+
let maxLayer = 0;
|
|
82
|
+
for (const id of nodeIds) {
|
|
83
|
+
layers.set(id, maxDepth - depth.get(id));
|
|
84
|
+
maxLayer = Math.max(maxLayer, maxDepth - depth.get(id));
|
|
85
|
+
}
|
|
86
|
+
// 发起节点强制层 0
|
|
87
|
+
for (const n of nodeCells) {
|
|
88
|
+
if (n.nodeType === '0')
|
|
89
|
+
layers.set(n.nodeId, 0);
|
|
90
|
+
}
|
|
91
|
+
// 结束节点提升到最深层
|
|
92
|
+
for (const n of nodeCells) {
|
|
93
|
+
if (n.nodeType === '3') {
|
|
94
|
+
const cur = layers.get(n.nodeId) ?? 0;
|
|
95
|
+
if (cur < maxLayer)
|
|
96
|
+
layers.set(n.nodeId, maxLayer);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return layers;
|
|
100
|
+
}
|
|
101
|
+
/** 计算每个节点的坐标,返回 { nodeId → {x,y,layer} } */
|
|
102
|
+
export function computePositions(nodeCells, layers, opts) {
|
|
103
|
+
// 层 → 该层节点(按 nodeId 数值序,保持稳定)
|
|
104
|
+
const byLayer = new Map();
|
|
105
|
+
for (const n of nodeCells) {
|
|
106
|
+
const layer = layers.get(n.nodeId) ?? 0;
|
|
107
|
+
if (!byLayer.has(layer))
|
|
108
|
+
byLayer.set(layer, []);
|
|
109
|
+
byLayer.get(layer).push(n.nodeId);
|
|
110
|
+
}
|
|
111
|
+
for (const arr of byLayer.values()) {
|
|
112
|
+
arr.sort((a, b) => Number(a) - Number(b));
|
|
113
|
+
}
|
|
114
|
+
const result = new Map();
|
|
115
|
+
const { direction, gapX, gapY, marginX, marginY } = opts;
|
|
116
|
+
for (const [layer, ids] of byLayer) {
|
|
117
|
+
ids.forEach((id, idx) => {
|
|
118
|
+
let x, y;
|
|
119
|
+
if (direction === 'ttb') {
|
|
120
|
+
x = marginX + idx * (NODE_W + gapX);
|
|
121
|
+
y = marginY + layer * (NODE_H + gapY);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
x = marginX + layer * (NODE_W + gapX);
|
|
125
|
+
y = marginY + idx * (NODE_H + gapY);
|
|
126
|
+
}
|
|
127
|
+
result.set(id, { x, y, layer });
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
/** 按布局方向计算 edge 的连接点(style + defaultPos 里的 exit/entry)。
|
|
133
|
+
* ltr:右侧出、左侧进(水平流)。ttb:底部出、顶部进(纵向流,平台默认)。 */
|
|
134
|
+
export function edgeExitEntry(direction) {
|
|
135
|
+
return direction === 'ttb'
|
|
136
|
+
? 'exitX=0.5;exitY=1.0;entryX=0.5;entryY=0.0'
|
|
137
|
+
: 'exitX=1.0;exitY=0.5;entryX=0.0;entryY=0.5';
|
|
138
|
+
}
|
|
139
|
+
/** 把 getXml 服务器格式转成浏览器格式并应用新坐标。
|
|
140
|
+
*
|
|
141
|
+
* 服务器 saveLayout 只认浏览器 mxGraph 格式:node/edge cell 用纯数字 id,
|
|
142
|
+
* edge 的 source/target 引用 node 的数字 id。getXml 输出的 node_xxx/link_xxx
|
|
143
|
+
* 直接回传会解析失败(节点被判定为 null/已删除)。 */
|
|
144
|
+
export function buildBrowserXml(xml, positions, direction = 'ltr') {
|
|
145
|
+
// 1. 分配数字 id:node 从 2 开始,edge 从 node 末尾接续(永不冲突)
|
|
146
|
+
const nodeNum = new Map();
|
|
147
|
+
const edgeNum = new Map();
|
|
148
|
+
let next = 2;
|
|
149
|
+
for (const m of xml.matchAll(/<mxCell\b[^>]*id="(node_\d+)"[^>]*>/g)) {
|
|
150
|
+
if (!nodeNum.has(m[1]))
|
|
151
|
+
nodeNum.set(m[1], next++);
|
|
152
|
+
}
|
|
153
|
+
for (const m of xml.matchAll(/<mxCell\b[^>]*id="(link_\d+)"[^>]*>/g)) {
|
|
154
|
+
if (!edgeNum.has(m[1]))
|
|
155
|
+
edgeNum.set(m[1], next++);
|
|
156
|
+
}
|
|
157
|
+
// 2. 先替换 source/target(node_xxx 引用),再替换 id,避免 source 里被误判
|
|
158
|
+
let out = xml;
|
|
159
|
+
for (const [ref, num] of nodeNum) {
|
|
160
|
+
out = out.replace(new RegExp(`source="${ref}"`, 'g'), `source="${num}"`);
|
|
161
|
+
out = out.replace(new RegExp(`target="${ref}"`, 'g'), `target="${num}"`);
|
|
162
|
+
}
|
|
163
|
+
// 3. 替换 cell id,并同步把坐标写进对应 node cell 的 mxGeometry
|
|
164
|
+
for (const [ref, num] of nodeNum) {
|
|
165
|
+
const oldIdRe = new RegExp(`(id=")${ref}(")`, 'g');
|
|
166
|
+
out = out.replace(oldIdRe, `$1${num}$2`);
|
|
167
|
+
}
|
|
168
|
+
for (const [ref, num] of edgeNum) {
|
|
169
|
+
out = out.replace(new RegExp(`(id=")${ref}(")`, 'g'), `$1${num}$2`);
|
|
170
|
+
}
|
|
171
|
+
// 4. 应用坐标:在浏览器格式(数字 id)的 node cell 上替换 geometry
|
|
172
|
+
for (const [ref, num] of nodeNum) {
|
|
173
|
+
const pos = positions.get(ref.replace('node_', ''));
|
|
174
|
+
if (!pos)
|
|
175
|
+
continue;
|
|
176
|
+
const { x, y } = pos;
|
|
177
|
+
const cellRe = new RegExp(`<mxCell\\b[^>]*id="${num}"[^>]*>.*?<mxGeometry\\s+x="[\\d.]+"\\s+y="[\\d.]+"`);
|
|
178
|
+
out = out.replace(cellRe, match => match.replace(/(<mxGeometry\s+x=")[\d.]+("\s+y=")[\d.]+(")/, `$1${x}$2${y}$3`));
|
|
179
|
+
}
|
|
180
|
+
// 5. 根 cell 规范化(浏览器格式:id=0 无 vertex,id=1 parent=0)
|
|
181
|
+
out = out.replace(/<mxCell id="0" vertex="1"\/><mxCell id="1" vertex="1" parent="0"\/>/, '<mxCell id="0"/><mxCell id="1" parent="0"/>');
|
|
182
|
+
// 6. 按方向重写 edge 连接点(style + defaultPos),否则 ltr 下线仍从节点底部出/顶部进
|
|
183
|
+
out = out.replace(/exitX=[\d.]+;exitY=[\d.]+;entryX=[\d.]+;entryY=[\d.]+/g, edgeExitEntry(direction));
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
/** 回读 getXml 验证坐标 */
|
|
187
|
+
export async function verifyPositions(client, baseUrl, workflowId, expected) {
|
|
188
|
+
const data = await client.postForm(`${baseUrl}/api/bs/workflow/pathdef/chart/getXml`, `workflowId=${workflowId}&keepTitle=undefined&showType=0`);
|
|
189
|
+
const xml = data?.data?.xml || '';
|
|
190
|
+
const { nodeCells } = parseWorkflowXml(xml);
|
|
191
|
+
const mismatch = [];
|
|
192
|
+
for (const n of nodeCells) {
|
|
193
|
+
const exp = expected.get(n.nodeId);
|
|
194
|
+
if (!exp)
|
|
195
|
+
continue;
|
|
196
|
+
if (Math.abs(n.x - exp.x) > 0.5 || Math.abs(n.y - exp.y) > 0.5) {
|
|
197
|
+
mismatch.push({ nodeId: n.nodeId, expected: `(${exp.x},${exp.y})`, actual: `(${n.x},${n.y})` });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return { ok: mismatch.length === 0, mismatch };
|
|
201
|
+
}
|
|
202
|
+
/** 主入口:读图 → 分层 → 排布 → (可选)回写 → 验证 */
|
|
203
|
+
export async function autoLayoutWorkflow(input) {
|
|
204
|
+
const { client, baseUrl, workflowId } = input;
|
|
205
|
+
const opts = input.options ?? {};
|
|
206
|
+
const direction = opts.direction ?? 'ltr';
|
|
207
|
+
const gapX = opts.gapX ?? 90;
|
|
208
|
+
const gapY = opts.gapY ?? 40;
|
|
209
|
+
const marginX = opts.marginX ?? 60;
|
|
210
|
+
const marginY = opts.marginY ?? 60;
|
|
211
|
+
const dryRun = opts.dryRun ?? false;
|
|
212
|
+
// 1. 读图
|
|
213
|
+
const data = await client.postForm(`${baseUrl}/api/bs/workflow/pathdef/chart/getXml`, `workflowId=${workflowId}&keepTitle=undefined&showType=0`);
|
|
214
|
+
if (data?.code !== 200 || !data?.data?.xml) {
|
|
215
|
+
return { workflowId, direction, nodes: [], nodeCount: 0, linkCount: 0, layerCount: 0, saved: false, verified: false, error: data?.msg || '读取流程图 XML 失败' };
|
|
216
|
+
}
|
|
217
|
+
const xml = data.data.xml;
|
|
218
|
+
const { nodeCells, links } = parseWorkflowXml(xml);
|
|
219
|
+
if (nodeCells.length === 0) {
|
|
220
|
+
return { workflowId, direction, nodes: [], nodeCount: 0, linkCount: 0, layerCount: 0, saved: false, verified: false, error: '未解析到节点(可能该流程没有流程图数据)' };
|
|
221
|
+
}
|
|
222
|
+
// 2. 分层 + 3. 排布
|
|
223
|
+
const layers = computeLayers(nodeCells, links);
|
|
224
|
+
const positions = computePositions(nodeCells, layers, {
|
|
225
|
+
direction,
|
|
226
|
+
gapX,
|
|
227
|
+
gapY,
|
|
228
|
+
marginX,
|
|
229
|
+
marginY,
|
|
230
|
+
});
|
|
231
|
+
const nodeList = nodeCells.map(n => {
|
|
232
|
+
const p = positions.get(n.nodeId);
|
|
233
|
+
return { nodeId: n.nodeId, name: n.name, nodeType: n.nodeType, nodeAttr: n.nodeAttr, layer: p.layer, x: p.x, y: p.y };
|
|
234
|
+
});
|
|
235
|
+
const layerCount = new Set([...layers.values()]).size;
|
|
236
|
+
// 构造浏览器格式 XML(保存实际用的格式)
|
|
237
|
+
const newXml = buildBrowserXml(xml, positions, direction);
|
|
238
|
+
// dry-run:只返回结果和新 XML
|
|
239
|
+
if (dryRun) {
|
|
240
|
+
return { workflowId, direction, nodes: nodeList, nodeCount: nodeCells.length, linkCount: links.length, layerCount, saved: false, verified: false, xml: newXml };
|
|
241
|
+
}
|
|
242
|
+
// 4. 回写
|
|
243
|
+
let saveOk = false;
|
|
244
|
+
try {
|
|
245
|
+
// 锁定图表(浏览器保存前也这么做)
|
|
246
|
+
await client.postForm(`${baseUrl}/api/bs/workflow/pathdef/chart/checkoutHeart`, `workflowId=${workflowId}&chartSrc=0`);
|
|
247
|
+
}
|
|
248
|
+
catch { /* best effort */ }
|
|
249
|
+
const saveXml = newXml.replace(/^<\?xml[^>]*\?>\s*/, '').replace(/grid="1"/, 'grid="0"');
|
|
250
|
+
const xmlB64 = Buffer.from(saveXml).toString('base64').replace(/\+/g, '$');
|
|
251
|
+
const body = `workflowId=${workflowId}&deleteLinks=&deleteNodes=&groups={"col":[],"row":[]}&deleteGroups=&templateKey=0&chartSrc=0&showConditionName=false&showLinkName=false&isSaveBySkipLinkValidate=false&xml=${xmlB64}`;
|
|
252
|
+
try {
|
|
253
|
+
const saveRes = await client.postForm(`${baseUrl}/api/bs/workflow/pathdef/chart/saveLayout`, body);
|
|
254
|
+
saveOk = saveRes?.code === 200 && !!saveRes?.status;
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
saveOk = false;
|
|
258
|
+
}
|
|
259
|
+
// 5. 回读验证
|
|
260
|
+
let verified = false;
|
|
261
|
+
try {
|
|
262
|
+
const v = await verifyPositions(client, baseUrl, workflowId, positions);
|
|
263
|
+
verified = v.ok;
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
verified = false;
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
workflowId,
|
|
270
|
+
direction,
|
|
271
|
+
nodes: nodeList,
|
|
272
|
+
nodeCount: nodeCells.length,
|
|
273
|
+
linkCount: links.length,
|
|
274
|
+
layerCount,
|
|
275
|
+
saved: saveOk,
|
|
276
|
+
verified,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=workflow-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-layout.js","sourceRoot":"","sources":["../../src/services/workflow-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 流程节点操作者组管理
|
|
3
|
+
*
|
|
4
|
+
* 节点操作者按「组」存储。一个节点可有多组(条件组),set-operator 走
|
|
5
|
+
* 「先清空旧组、再新建一组」的全量重建,避免重复设置时旧组堆积。
|
|
6
|
+
*
|
|
7
|
+
* 接口链(实测):
|
|
8
|
+
* 读已有组列表: getNodeSetForm → data.operator [{name,id}]
|
|
9
|
+
* 读组内条目: getOperatorGroupList?paramGroupId=<组id>&sourceType=1&nodeId=<nodeId>
|
|
10
|
+
* 删组: deleteOperatorGroupItemList {groupId, sourceType, oldItemDatas:[组内条目]}
|
|
11
|
+
* 保存: saveOperatorGroup
|
|
12
|
+
*/
|
|
13
|
+
import type { ApiClient } from '../core/client.js';
|
|
14
|
+
export type OperatorClient = Pick<ApiClient, 'get' | 'post'>;
|
|
15
|
+
export interface OperatorGroupRef {
|
|
16
|
+
name: string;
|
|
17
|
+
id: string;
|
|
18
|
+
}
|
|
19
|
+
/** 读节点当前所有操作者组(getNodeSetForm → data.operator) */
|
|
20
|
+
export declare function getNodeOperatorGroups(client: OperatorClient, baseUrl: string, workflowId: string, nodeId: string): Promise<OperatorGroupRef[]>;
|
|
21
|
+
/** 读组内操作者条目(getOperatorGroupList,需确切 groupId)。
|
|
22
|
+
* 响应结构:gl.data 直接是条目数组(不是 gl.data.data)。 */
|
|
23
|
+
export declare function getNodeOperatorItems(client: OperatorClient, baseUrl: string, groupId: string, nodeId: string): Promise<any[]>;
|
|
24
|
+
/** 删除一个操作者组(deleteOperatorGroupItemList) */
|
|
25
|
+
export declare function deleteNodeOperatorGroup(client: OperatorClient, baseUrl: string, groupId: string, oldItemDatas: any[]): Promise<void>;
|
|
26
|
+
/** 清空节点所有操作者组,返回清理的组数 */
|
|
27
|
+
export declare function clearNodeOperatorGroups(client: OperatorClient, baseUrl: string, workflowId: string, nodeId: string): Promise<number>;
|
|
28
|
+
/**
|
|
29
|
+
* 按逗号分隔的关键词查找多个角色(组内多操作者,如竞签多候选)。
|
|
30
|
+
* 返回 { found: 命中角色数组, missing: 第一个未命中的关键词(空=全部命中) }
|
|
31
|
+
*/
|
|
32
|
+
export declare function findRolesByKeywords(roles: any[], keyword: string): {
|
|
33
|
+
found: any[];
|
|
34
|
+
missing: string;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=workflow-operator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-operator.d.ts","sourceRoot":"","sources":["../../src/services/workflow-operator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,kDAAkD;AAClD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAM7B;AAED;6CAC6C;AAC7C,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,EAAE,CAAC,CAOhB;AAED,4CAA4C;AAC5C,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,GAAG,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,yBAAyB;AACzB,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAWjB;AAcD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CASpG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** 读节点当前所有操作者组(getNodeSetForm → data.operator) */
|
|
2
|
+
export async function getNodeOperatorGroups(client, baseUrl, workflowId, nodeId) {
|
|
3
|
+
const nsf = await client.get(`${baseUrl}/api/bs/workflow/pathdef/nodeBase/getNodeSetForm?workflowId=${workflowId}&nodeId=${nodeId}`);
|
|
4
|
+
const groups = nsf?.data?.data?.operator || [];
|
|
5
|
+
return Array.isArray(groups) ? groups : [];
|
|
6
|
+
}
|
|
7
|
+
/** 读组内操作者条目(getOperatorGroupList,需确切 groupId)。
|
|
8
|
+
* 响应结构:gl.data 直接是条目数组(不是 gl.data.data)。 */
|
|
9
|
+
export async function getNodeOperatorItems(client, baseUrl, groupId, nodeId) {
|
|
10
|
+
const gl = await client.get(`${baseUrl}/api/bs/workflow/pathdef/nodeOperator/getOperatorGroupList?paramGroupId=${groupId}&sourceType=1&nodeId=${nodeId}&refWorkflowId=`);
|
|
11
|
+
const d = gl?.data;
|
|
12
|
+
const items = Array.isArray(d?.data) ? d.data : (Array.isArray(d) ? d : []);
|
|
13
|
+
return items;
|
|
14
|
+
}
|
|
15
|
+
/** 删除一个操作者组(deleteOperatorGroupItemList) */
|
|
16
|
+
export async function deleteNodeOperatorGroup(client, baseUrl, groupId, oldItemDatas) {
|
|
17
|
+
await client.post(`${baseUrl}/api/bs/workflow/pathdef/nodeOperator/deleteOperatorGroupItemList`, {
|
|
18
|
+
groupId,
|
|
19
|
+
sourceType: '1',
|
|
20
|
+
oldItemDatas,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/** 清空节点所有操作者组,返回清理的组数 */
|
|
24
|
+
export async function clearNodeOperatorGroups(client, baseUrl, workflowId, nodeId) {
|
|
25
|
+
const groups = await getNodeOperatorGroups(client, baseUrl, workflowId, nodeId);
|
|
26
|
+
for (const g of groups) {
|
|
27
|
+
try {
|
|
28
|
+
const items = await getNodeOperatorItems(client, baseUrl, g.id, nodeId);
|
|
29
|
+
if (Array.isArray(items) && items.length > 0) {
|
|
30
|
+
await deleteNodeOperatorGroup(client, baseUrl, g.id, items);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch { /* 单个组清理失败不影响后续 */ }
|
|
34
|
+
}
|
|
35
|
+
return groups.length;
|
|
36
|
+
}
|
|
37
|
+
/** 在角色树中按关键词查找角色 */
|
|
38
|
+
function findRoleInTree(nodes, keyword) {
|
|
39
|
+
for (const node of nodes) {
|
|
40
|
+
if (node.content && node.content.includes(keyword))
|
|
41
|
+
return node;
|
|
42
|
+
if (node.children && node.children.length > 0) {
|
|
43
|
+
const found = findRoleInTree(node.children, keyword);
|
|
44
|
+
if (found)
|
|
45
|
+
return found;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 按逗号分隔的关键词查找多个角色(组内多操作者,如竞签多候选)。
|
|
52
|
+
* 返回 { found: 命中角色数组, missing: 第一个未命中的关键词(空=全部命中) }
|
|
53
|
+
*/
|
|
54
|
+
export function findRolesByKeywords(roles, keyword) {
|
|
55
|
+
const keywords = keyword.split(',').map(s => s.trim()).filter(Boolean);
|
|
56
|
+
const found = [];
|
|
57
|
+
for (const kw of keywords) {
|
|
58
|
+
const f = findRoleInTree(roles, kw);
|
|
59
|
+
if (!f)
|
|
60
|
+
return { found, missing: kw };
|
|
61
|
+
found.push(f);
|
|
62
|
+
}
|
|
63
|
+
return { found, missing: '' };
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=workflow-operator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-operator.js","sourceRoot":"","sources":["../../src/services/workflow-operator.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** Auth file data (decrypted) */
|
|
2
|
+
export interface AuthData {
|
|
3
|
+
cookies: Record<string, string>;
|
|
4
|
+
userId: string;
|
|
5
|
+
tenantKey: string;
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
passportUrl?: string;
|
|
8
|
+
stTicket?: string;
|
|
9
|
+
redirectUrl?: string;
|
|
10
|
+
cookieSavedAt?: number;
|
|
11
|
+
mainUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Employee search result */
|
|
14
|
+
export interface Employee {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
department: string;
|
|
18
|
+
mobile: string;
|
|
19
|
+
}
|
|
20
|
+
/** Menu item */
|
|
21
|
+
export interface MenuItem {
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
pageType: string;
|
|
25
|
+
url: string;
|
|
26
|
+
}
|
|
27
|
+
/** Ecode file/directory entry */
|
|
28
|
+
export interface EcodeEntry {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
type: 'folder' | 'file';
|
|
32
|
+
sourceId?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Form field definition */
|
|
35
|
+
export interface FormField {
|
|
36
|
+
fieldId: string;
|
|
37
|
+
fieldName: string;
|
|
38
|
+
fieldKey: string;
|
|
39
|
+
id: string;
|
|
40
|
+
fieldOptions?: Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
valueKey: string;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
/** Global CLI options */
|
|
46
|
+
export interface GlobalOptions {
|
|
47
|
+
auth?: string;
|
|
48
|
+
profile?: string;
|
|
49
|
+
json?: boolean;
|
|
50
|
+
baseUrl?: string;
|
|
51
|
+
passportUrl?: string;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,6BAA6B;AAC7B,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gBAAgB;AAChB,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4BAA4B;AAC5B,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,yBAAyB;AACzB,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Extract pinyin initials from a mixed Chinese/English name */
|
|
2
|
+
export declare function pinyinInitials(name: string): string;
|
|
3
|
+
/** Generate a field column name: pinyin initials, plus a dup index when the
|
|
4
|
+
* same initials recur in the same table (0 → bare initials, 1 → initials+'1', …).
|
|
5
|
+
* Caller tracks recurrence via pinyinInitials() and passes the dupIndex. */
|
|
6
|
+
export declare function toColumnName(fieldName: string, dupIndex?: number): string;
|
|
7
|
+
/** Generate a table name suffix: pinyin initials + 4 random digits */
|
|
8
|
+
export declare function toTableName(formName: string): string;
|
|
9
|
+
/** 明细表子表物理表名:pinyin initials + 随机后缀。
|
|
10
|
+
* 主表名带随机后缀(uf_xxx_1234)但子表名原来只有 uf_{dataKey},重复用同一明细表名建表会
|
|
11
|
+
* 与残留物理表冲突。布局通过 subFormId/associatedId 引用子表,物理表名加后缀不影响引用。 */
|
|
12
|
+
export declare function toSubTableName(detailFieldName: string, dupIndex?: number): string;
|
|
13
|
+
//# sourceMappingURL=column-name.d.ts.map
|
|
@@ -0,0 +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"}
|