@tachybase/plugin-workflow-approval 0.23.41 → 0.23.47
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/client/base/Approval.setting.d.ts +1 -1
- package/dist/client/base/ApprovalPane.schema.d.ts +82 -57
- package/dist/client/base/ColumnShowApprovalId.d.ts +1 -0
- package/dist/client/base/Execution.schema.d.ts +222 -0
- package/dist/client/common/constants/approval-initiation-status-options.d.ts +16 -0
- package/dist/client/index.js +34 -34
- package/dist/client/usage/h5/todos/component/TabApprovalItem.d.ts +1 -2
- package/dist/externalVersion.js +10 -10
- package/dist/locale/en-US.json +2 -0
- package/dist/locale/zh-CN.json +3 -1
- package/dist/server/actions/approvals.js +11 -4
- package/dist/server/instructions/Approval.js +4 -1
- package/dist/server/instructions/ApprovalCarbonCopy.js +5 -1
- package/dist/server/plugin.js +0 -1
- package/dist/server/triggers/Approval.js +147 -146
- package/package.json +11 -11
- /package/dist/client/configuration/trigger-approval/{plugin.d.ts → kit.d.ts} +0 -0
- /package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureCard.component.d.ts +0 -0
- /package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureCard.style.d.ts +0 -0
- /package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureList.d.ts +0 -0
- /package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureList.style.d.ts +0 -0
- /package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureModal.schema.d.ts +0 -0
- /package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureModal.view.d.ts +0 -0
- /package/dist/client/usage/pc/block/{approval-card → approval-list}/InitiateApplication.d.ts +0 -0
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const TabApprovalItem: React.MemoExoticComponent<import("@tachybase/schema").ReactFC<unknown>>;
|
|
1
|
+
export declare const TabApprovalItem: import("react").MemoExoticComponent<import("@tachybase/schema").ReactFC<unknown>>;
|
|
3
2
|
export declare const changeWorkflowNoticeService: (api: any, t: any, cm: any, compile: any, input: any, setData: any, params: any, filter: any, user: any) => void;
|
package/dist/externalVersion.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
"@tachybase/client": "0.23.
|
|
3
|
-
"@tachybase/module-workflow": "0.23.
|
|
4
|
-
"@tachybase/server": "0.23.
|
|
2
|
+
"@tachybase/client": "0.23.47",
|
|
3
|
+
"@tachybase/module-workflow": "0.23.47",
|
|
4
|
+
"@tachybase/server": "0.23.47",
|
|
5
5
|
"lodash": "4.17.21",
|
|
6
6
|
"react": "18.3.1",
|
|
7
|
-
"@tachybase/schema": "0.23.
|
|
7
|
+
"@tachybase/schema": "0.23.47",
|
|
8
8
|
"antd": "5.22.5",
|
|
9
|
-
"@tachybase/actions": "0.23.
|
|
10
|
-
"@tachybase/database": "0.23.
|
|
11
|
-
"@tachybase/data-source": "0.23.
|
|
12
|
-
"@tachybase/module-ui-schema": "0.23.
|
|
13
|
-
"@tachybase/utils": "0.23.
|
|
9
|
+
"@tachybase/actions": "0.23.47",
|
|
10
|
+
"@tachybase/database": "0.23.47",
|
|
11
|
+
"@tachybase/data-source": "0.23.47",
|
|
12
|
+
"@tachybase/module-ui-schema": "0.23.47",
|
|
13
|
+
"@tachybase/utils": "0.23.47",
|
|
14
14
|
"sequelize": "6.37.5",
|
|
15
|
-
"@tachybase/components": "0.23.
|
|
15
|
+
"@tachybase/components": "0.23.47",
|
|
16
16
|
"@ant-design/icons": "5.3.7",
|
|
17
17
|
"ahooks": "3.8.4",
|
|
18
18
|
"react-router-dom": "6.28.1"
|
package/dist/locale/en-US.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"Approval Summary": "Approval Summary",
|
|
35
35
|
"Approval applications": "Approval applications",
|
|
36
36
|
"Approval blocks": "Approval blocks",
|
|
37
|
+
"Approval flow": "Approval flow",
|
|
37
38
|
"Approval process": "Approval process",
|
|
38
39
|
"Approval todos": "Approval todos",
|
|
39
40
|
"ApprovalCarbonCopy": "Approval:CarbonCopy",
|
|
@@ -225,6 +226,7 @@
|
|
|
225
226
|
"Repeat mode": "Repeat mode",
|
|
226
227
|
"Resource": "Resource",
|
|
227
228
|
"Resubmit": "Resubmit",
|
|
229
|
+
"Retry": "Retry",
|
|
228
230
|
"Return": "Return",
|
|
229
231
|
"Returnable": "Returnable",
|
|
230
232
|
"Returned": "Returned",
|
package/dist/locale/zh-CN.json
CHANGED
|
@@ -34,12 +34,13 @@
|
|
|
34
34
|
"Apply new": "发起新申请",
|
|
35
35
|
"Approval": "审批",
|
|
36
36
|
"Approval Carbon Copy": "审批抄送",
|
|
37
|
-
"Approval ID": "
|
|
37
|
+
"Approval ID": "审批编号",
|
|
38
38
|
"Approval Launch": "审批发起",
|
|
39
39
|
"Approval Summary": "审批摘要",
|
|
40
40
|
"Approval applications": "审批申请",
|
|
41
41
|
"Approval blocks": "审批卡片",
|
|
42
42
|
"Approval event": "审批事件",
|
|
43
|
+
"Approval flow": "审批流",
|
|
43
44
|
"Approval process": "审批处理",
|
|
44
45
|
"Approval todos": "审批待办",
|
|
45
46
|
"ApprovalCarbonCopy": "审批:抄送",
|
|
@@ -272,6 +273,7 @@
|
|
|
272
273
|
"Resolved": "完成",
|
|
273
274
|
"Resource": "数据表",
|
|
274
275
|
"Resubmit": "复制",
|
|
276
|
+
"Retry": "重试",
|
|
275
277
|
"Retry needed": "需重试",
|
|
276
278
|
"Return": "退回",
|
|
277
279
|
"Returnable": "可退回",
|
|
@@ -39,7 +39,7 @@ var import_status = require("../constants/status");
|
|
|
39
39
|
var import_tools = require("../tools");
|
|
40
40
|
const approvals = {
|
|
41
41
|
async create(context, next) {
|
|
42
|
-
const { status, collectionName, data,
|
|
42
|
+
const { status, collectionName, data, workflowKey } = context.action.params.values ?? {};
|
|
43
43
|
const [dataSourceName, cName] = (0, import_data_source.parseCollectionName)(collectionName);
|
|
44
44
|
const dataSource = context.app.dataSourceManager.dataSources.get(dataSourceName);
|
|
45
45
|
if (!dataSource) {
|
|
@@ -50,9 +50,12 @@ const approvals = {
|
|
|
50
50
|
return context.throw(400, `Collection "${cName}" not found`);
|
|
51
51
|
}
|
|
52
52
|
const workflow = await context.db.getRepository("workflows").findOne({
|
|
53
|
-
|
|
53
|
+
filter: {
|
|
54
|
+
key: workflowKey,
|
|
55
|
+
enabled: true
|
|
56
|
+
}
|
|
54
57
|
});
|
|
55
|
-
if (!
|
|
58
|
+
if (!workflow) {
|
|
56
59
|
return context.throw(400, "Current workflow not found or disabled, please refresh and try again");
|
|
57
60
|
}
|
|
58
61
|
if (status !== import_status.APPROVAL_STATUS.DRAFT) {
|
|
@@ -88,6 +91,7 @@ const approvals = {
|
|
|
88
91
|
data: instance,
|
|
89
92
|
dataKey: values[collection.filterTargetKey],
|
|
90
93
|
workflowKey: workflow.key,
|
|
94
|
+
workflowId: workflow.id,
|
|
91
95
|
applicantRoleName: context.state.currentRole,
|
|
92
96
|
summary
|
|
93
97
|
}
|
|
@@ -291,13 +295,16 @@ const approvals = {
|
|
|
291
295
|
}
|
|
292
296
|
const assignees = approval.records.map((record) => record.userId);
|
|
293
297
|
for (const userId of assignees) {
|
|
298
|
+
const [dataSourceName] = (0, import_data_source.parseCollectionName)(approval.collectionName);
|
|
299
|
+
const collection = this.workflow.app.dataSourceManager.dataSources.get(dataSourceName).collectionManager.getCollection(approval.collectionName);
|
|
294
300
|
const message = {
|
|
295
301
|
userId,
|
|
296
302
|
title: `{{t("Approval", { ns: '${import_constants.NAMESPACE}' })}}`,
|
|
297
303
|
content: `{{t("{{user}} reminder", { ns: "${import_constants.NAMESPACE}", user: "${approval.createdBy.nickname}" })}}`,
|
|
298
304
|
collectionName: approval.collectionName,
|
|
299
305
|
jsonContent: approval.summary,
|
|
300
|
-
schemaName: (_c = approval.workflow) == null ? void 0 : _c.config.applyDetail
|
|
306
|
+
schemaName: (_c = approval.workflow) == null ? void 0 : _c.config.applyDetail,
|
|
307
|
+
dataKey: approval.data[collection.filterTargetKey]
|
|
301
308
|
};
|
|
302
309
|
context.app.messageManager.sendMessage(+userId, message);
|
|
303
310
|
}
|
|
@@ -84,13 +84,16 @@ class ApprovalInstruction extends import_module_workflow.Instruction {
|
|
|
84
84
|
}
|
|
85
85
|
);
|
|
86
86
|
for (const userId of assignees) {
|
|
87
|
+
const [dataSourceName] = (0, import_data_source.parseCollectionName)(approval.collectionName);
|
|
88
|
+
const collection = this.workflow.app.dataSourceManager.dataSources.get(dataSourceName).collectionManager.getCollection(approval.collectionName);
|
|
87
89
|
const message = {
|
|
88
90
|
userId,
|
|
89
91
|
title: '{{t("Approval", { ns: "@tachybase/plugin-workflow-approval" })}}',
|
|
90
92
|
content: "",
|
|
91
93
|
collectionName: approval.collectionName,
|
|
92
94
|
jsonContent: approval.summary,
|
|
93
|
-
schemaName: node.config.applyDetail
|
|
95
|
+
schemaName: node.config.applyDetail,
|
|
96
|
+
dataKey: approval.data[collection.filterTargetKey]
|
|
94
97
|
};
|
|
95
98
|
this.workflow.app.messageManager.sendMessage(+userId, message);
|
|
96
99
|
}
|
|
@@ -20,6 +20,7 @@ __export(ApprovalCarbonCopy_exports, {
|
|
|
20
20
|
default: () => ApprovalCarbonCopyInstruction
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(ApprovalCarbonCopy_exports);
|
|
23
|
+
var import_data_source = require("@tachybase/data-source");
|
|
23
24
|
var import_module_workflow = require("@tachybase/module-workflow");
|
|
24
25
|
var import_constants = require("../../common/constants");
|
|
25
26
|
var import_status = require("../constants/status");
|
|
@@ -68,13 +69,16 @@ class ApprovalCarbonCopyInstruction extends import_module_workflow.Instruction {
|
|
|
68
69
|
transaction: processor.transaction
|
|
69
70
|
});
|
|
70
71
|
for (const userId of targetPersonList) {
|
|
72
|
+
const [dataSourceName] = (0, import_data_source.parseCollectionName)(approval.collectionName);
|
|
73
|
+
const collection = this.workflow.app.dataSourceManager.dataSources.get(dataSourceName).collectionManager.getCollection(approval.collectionName);
|
|
71
74
|
const message = {
|
|
72
75
|
userId,
|
|
73
76
|
title: '{{t("Approval Carbon Copy", { ns: "@tachybase/plugin-workflow-approval" })}}',
|
|
74
77
|
content: "",
|
|
75
78
|
jsonContent: approval.summary,
|
|
76
79
|
collectionName: approval.collectionName,
|
|
77
|
-
schemaName: node.config.showCarbonCopyDetail
|
|
80
|
+
schemaName: node.config.showCarbonCopyDetail,
|
|
81
|
+
dataKey: approval.data[collection.filterTargetKey]
|
|
78
82
|
};
|
|
79
83
|
this.workflow.app.messageManager.sendMessage(+userId, message);
|
|
80
84
|
}
|
package/dist/server/plugin.js
CHANGED
|
@@ -40,7 +40,6 @@ var import_Approval = __toESM(require("./instructions/Approval"));
|
|
|
40
40
|
var import_ApprovalCarbonCopy = __toESM(require("./instructions/ApprovalCarbonCopy"));
|
|
41
41
|
var import_Approval2 = __toESM(require("./triggers/Approval"));
|
|
42
42
|
class PluginWorkflowApproval extends import_server.Plugin {
|
|
43
|
-
workflow;
|
|
44
43
|
afterAdd() {
|
|
45
44
|
}
|
|
46
45
|
beforeLoad() {
|
|
@@ -28,155 +28,154 @@ var import_sequelize = require("sequelize");
|
|
|
28
28
|
var import_status = require("../constants/status");
|
|
29
29
|
var import_tools = require("../tools");
|
|
30
30
|
var import_tools2 = require("./tools");
|
|
31
|
-
class
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
id: approval.get("workflowId"),
|
|
38
|
-
type: ApprovalTrigger.TYPE,
|
|
39
|
-
enabled: true,
|
|
40
|
-
"config.collection": approval.collectionName
|
|
41
|
-
},
|
|
42
|
-
transaction
|
|
43
|
-
});
|
|
44
|
-
const isChangedStatus = approval.changed("status");
|
|
45
|
-
const isAllowStatusList = [import_status.APPROVAL_STATUS.DRAFT, import_status.APPROVAL_STATUS.SUBMITTED, import_status.APPROVAL_STATUS.RESUBMIT].includes(
|
|
46
|
-
approval.status
|
|
47
|
-
);
|
|
48
|
-
const previousApprovalStatus = approval.previous("status");
|
|
49
|
-
const currentApprovalStatus = approval.status;
|
|
50
|
-
const forbiddenList = [
|
|
51
|
-
[import_status.APPROVAL_STATUS.SUBMITTED, import_status.APPROVAL_STATUS.DRAFT],
|
|
52
|
-
// 撤回情况
|
|
53
|
-
[void 0, import_status.APPROVAL_STATUS.DRAFT]
|
|
54
|
-
// 保存草稿情况
|
|
55
|
-
];
|
|
56
|
-
const isForbiddenWhenStatusChange = forbiddenList.some(
|
|
57
|
-
([prev, curr]) => prev === previousApprovalStatus && curr === currentApprovalStatus
|
|
58
|
-
);
|
|
59
|
-
if (!workflow || !isChangedStatus || !isAllowStatusList || isForbiddenWhenStatusChange) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
const [dataSourceName, collectionName] = (0, import_data_source.parseCollectionName)(approval.collectionName);
|
|
63
|
-
const { repository } = this.workflow.app.dataSourceManager.dataSources.get(dataSourceName).collectionManager.getCollection(collectionName);
|
|
64
|
-
const data = await repository.findOne({
|
|
65
|
-
filterByTk: approval.get("dataKey"),
|
|
66
|
-
appends: workflow.config.appends,
|
|
67
|
-
transaction: this.workflow.useDataSourceTransaction(dataSourceName, transaction)
|
|
68
|
-
});
|
|
69
|
-
this.workflow.trigger(
|
|
70
|
-
workflow,
|
|
71
|
-
{
|
|
72
|
-
data: (0, import_module_workflow.toJSON)(data),
|
|
73
|
-
approvalId: approval.id,
|
|
74
|
-
applicantRoleName: approval.applicantRoleName,
|
|
75
|
-
summary: (0, import_tools.getSummary)({
|
|
76
|
-
summaryConfig: workflow.config.summary,
|
|
77
|
-
data
|
|
78
|
-
}),
|
|
79
|
-
collectionName: approval.collectionName
|
|
80
|
-
},
|
|
81
|
-
{ transaction }
|
|
82
|
-
);
|
|
83
|
-
};
|
|
84
|
-
onExecutionCreate = async (execution, { transaction }) => {
|
|
85
|
-
const workflow = await execution.getWorkflow({ transaction });
|
|
86
|
-
if (workflow.type !== ApprovalTrigger.TYPE) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const { approvalId, data, summary, collectionName } = execution.context;
|
|
90
|
-
const ApprovalExecutionRepo = this.workflow.db.getRepository("approvalExecutions");
|
|
91
|
-
const approvalExecution = await ApprovalExecutionRepo.create({
|
|
92
|
-
values: {
|
|
93
|
-
approvalId,
|
|
94
|
-
executionId: execution.id,
|
|
95
|
-
status: execution.status,
|
|
96
|
-
snapshot: data,
|
|
97
|
-
summary,
|
|
98
|
-
collectionName
|
|
99
|
-
},
|
|
100
|
-
transaction
|
|
101
|
-
});
|
|
102
|
-
const ApprovalsRepo = this.workflow.db.getRepository("approvals");
|
|
103
|
-
await ApprovalsRepo.update({
|
|
104
|
-
filterByTk: approvalId,
|
|
105
|
-
values: { latestExecutionId: approvalExecution.id },
|
|
106
|
-
transaction
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
onExecutionUpdate = async (execution, { transaction }) => {
|
|
110
|
-
if (!execution.workflow) {
|
|
111
|
-
execution.workflow = await execution.getWorkflow({ transaction });
|
|
112
|
-
}
|
|
113
|
-
if (!execution.status || execution.workflow.type !== ApprovalTrigger.TYPE) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
const approvalExecution = await this.workflow.db.getRepository("approvalExecutions").findOne({
|
|
117
|
-
filter: {
|
|
118
|
-
executionId: execution.id,
|
|
119
|
-
approvalId: execution.context.approvalId
|
|
120
|
-
},
|
|
121
|
-
appends: ["approval"],
|
|
122
|
-
transaction
|
|
123
|
-
});
|
|
124
|
-
const { approval } = approvalExecution;
|
|
125
|
-
if (![import_status.APPROVAL_STATUS.SUBMITTED, import_status.APPROVAL_STATUS.PROCESSING].includes(approval.status)) {
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
let status = import_status.APPROVAL_STATUS.APPROVED;
|
|
129
|
-
if (execution.status === import_module_workflow.EXECUTION_STATUS.RESOLVED) {
|
|
130
|
-
const [approvalNodeJob] = await execution.getJobs({
|
|
31
|
+
const _ApprovalTrigger = class _ApprovalTrigger extends import_module_workflow.Trigger {
|
|
32
|
+
constructor(workflow) {
|
|
33
|
+
super(workflow);
|
|
34
|
+
this.sync = false;
|
|
35
|
+
this.triggerHandler = async (approval, { transaction }) => {
|
|
36
|
+
const workflow = await approval.getWorkflow({
|
|
131
37
|
where: {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
38
|
+
id: approval.get("workflowId"),
|
|
39
|
+
type: _ApprovalTrigger.TYPE,
|
|
40
|
+
enabled: true,
|
|
41
|
+
"config.collection": approval.collectionName
|
|
135
42
|
},
|
|
136
|
-
include: [
|
|
137
|
-
{
|
|
138
|
-
association: "node",
|
|
139
|
-
where: {
|
|
140
|
-
type: "approval"
|
|
141
|
-
},
|
|
142
|
-
required: true
|
|
143
|
-
}
|
|
144
|
-
],
|
|
145
|
-
order: [["updatedAt", "DESC"]],
|
|
146
|
-
limit: 1,
|
|
147
43
|
transaction
|
|
148
44
|
});
|
|
149
|
-
|
|
150
|
-
|
|
45
|
+
const isChangedStatus = approval.changed("status");
|
|
46
|
+
const isAllowStatusList = [import_status.APPROVAL_STATUS.DRAFT, import_status.APPROVAL_STATUS.SUBMITTED, import_status.APPROVAL_STATUS.RESUBMIT].includes(
|
|
47
|
+
approval.status
|
|
48
|
+
);
|
|
49
|
+
const previousApprovalStatus = approval.previous("status");
|
|
50
|
+
const currentApprovalStatus = approval.status;
|
|
51
|
+
const forbiddenList = [
|
|
52
|
+
[import_status.APPROVAL_STATUS.SUBMITTED, import_status.APPROVAL_STATUS.DRAFT],
|
|
53
|
+
// 撤回情况
|
|
54
|
+
[void 0, import_status.APPROVAL_STATUS.DRAFT]
|
|
55
|
+
// 保存草稿情况
|
|
56
|
+
];
|
|
57
|
+
const isForbiddenWhenStatusChange = forbiddenList.some(
|
|
58
|
+
([prev, curr]) => prev === previousApprovalStatus && curr === currentApprovalStatus
|
|
59
|
+
);
|
|
60
|
+
if (!workflow || !isChangedStatus || !isAllowStatusList || isForbiddenWhenStatusChange) {
|
|
61
|
+
return;
|
|
151
62
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
63
|
+
const [dataSourceName, collectionName] = (0, import_data_source.parseCollectionName)(approval.collectionName);
|
|
64
|
+
const { repository } = this.workflow.app.dataSourceManager.dataSources.get(dataSourceName).collectionManager.getCollection(collectionName);
|
|
65
|
+
const data = await repository.findOne({
|
|
66
|
+
filterByTk: approval.get("dataKey"),
|
|
67
|
+
appends: workflow.config.appends,
|
|
68
|
+
transaction: this.workflow.useDataSourceTransaction(dataSourceName, transaction)
|
|
69
|
+
});
|
|
70
|
+
this.workflow.trigger(
|
|
71
|
+
workflow,
|
|
72
|
+
{
|
|
73
|
+
data: (0, import_module_workflow.toJSON)(data),
|
|
74
|
+
approvalId: approval.id,
|
|
75
|
+
applicantRoleName: approval.applicantRoleName,
|
|
76
|
+
summary: (0, import_tools.getSummary)({
|
|
77
|
+
summaryConfig: workflow.config.summary,
|
|
78
|
+
data
|
|
79
|
+
}),
|
|
80
|
+
collectionName: approval.collectionName
|
|
81
|
+
},
|
|
82
|
+
{ transaction }
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
this.onExecutionCreate = async (execution, { transaction }) => {
|
|
86
|
+
const workflow = await execution.getWorkflow({ transaction });
|
|
87
|
+
if (workflow.type !== _ApprovalTrigger.TYPE) {
|
|
88
|
+
return;
|
|
155
89
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
this.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
90
|
+
const { approvalId, data, summary, collectionName } = execution.context;
|
|
91
|
+
const ApprovalExecutionRepo = this.workflow.db.getRepository("approvalExecutions");
|
|
92
|
+
const approvalExecution = await ApprovalExecutionRepo.create({
|
|
93
|
+
values: {
|
|
94
|
+
approvalId,
|
|
95
|
+
executionId: execution.id,
|
|
96
|
+
status: execution.status,
|
|
97
|
+
snapshot: data,
|
|
98
|
+
summary,
|
|
99
|
+
collectionName
|
|
100
|
+
},
|
|
101
|
+
transaction
|
|
102
|
+
});
|
|
103
|
+
const ApprovalsRepo = this.workflow.db.getRepository("approvals");
|
|
104
|
+
await ApprovalsRepo.update({
|
|
105
|
+
filterByTk: approvalId,
|
|
106
|
+
values: { latestExecutionId: approvalExecution.id },
|
|
107
|
+
transaction
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
this.onExecutionUpdate = async (execution, { transaction }) => {
|
|
111
|
+
if (!execution.workflow) {
|
|
112
|
+
execution.workflow = await execution.getWorkflow({ transaction });
|
|
113
|
+
}
|
|
114
|
+
if (!execution.status || execution.workflow.type !== _ApprovalTrigger.TYPE) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const approvalExecution = await this.workflow.db.getRepository("approvalExecutions").findOne({
|
|
118
|
+
filter: {
|
|
119
|
+
executionId: execution.id,
|
|
120
|
+
approvalId: execution.context.approvalId
|
|
121
|
+
},
|
|
122
|
+
appends: ["approval"],
|
|
123
|
+
transaction
|
|
124
|
+
});
|
|
125
|
+
const { approval } = approvalExecution;
|
|
126
|
+
if (![import_status.APPROVAL_STATUS.SUBMITTED, import_status.APPROVAL_STATUS.PROCESSING].includes(approval.status)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
let status = import_status.APPROVAL_STATUS.APPROVED;
|
|
130
|
+
if (execution.status === import_module_workflow.EXECUTION_STATUS.RESOLVED) {
|
|
131
|
+
const [approvalNodeJob] = await execution.getJobs({
|
|
132
|
+
where: {
|
|
133
|
+
status: {
|
|
134
|
+
[import_sequelize.Op.ne]: import_module_workflow.JOB_STATUS.PENDING
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
include: [
|
|
138
|
+
{
|
|
139
|
+
association: "node",
|
|
140
|
+
where: {
|
|
141
|
+
type: "approval"
|
|
142
|
+
},
|
|
143
|
+
required: true
|
|
144
|
+
}
|
|
145
|
+
],
|
|
146
|
+
order: [["updatedAt", "DESC"]],
|
|
147
|
+
limit: 1,
|
|
148
|
+
transaction
|
|
149
|
+
});
|
|
150
|
+
if (approvalNodeJob && import_tools2.ApprovalJobStatusMap[approvalNodeJob.result] != null) {
|
|
151
|
+
status = import_tools2.ApprovalJobStatusMap[approvalNodeJob.result];
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
if (import_tools2.ExecutionStatusMap[execution.status] != null) {
|
|
155
|
+
status = import_tools2.ExecutionStatusMap[execution.status];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
await approval.update({ status }, { transaction });
|
|
159
|
+
await approvalExecution.update({ status: execution.status }, { transaction });
|
|
160
|
+
};
|
|
161
|
+
this.middleware = async (context, next) => {
|
|
162
|
+
if (!context.action) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const {
|
|
166
|
+
resourceName,
|
|
167
|
+
actionName,
|
|
168
|
+
params: { triggerWorkflows }
|
|
169
|
+
} = context.action;
|
|
170
|
+
if (resourceName === "workflows" && actionName === "trigger") {
|
|
171
|
+
return this.workflowTriggerAction(context, next);
|
|
172
|
+
}
|
|
173
|
+
await next();
|
|
174
|
+
if (!triggerWorkflows || !["create", "update"].includes(actionName)) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
this.collectionTriggerAction(context);
|
|
178
|
+
};
|
|
180
179
|
const { db } = workflow.app;
|
|
181
180
|
db.on("approvals.afterSave", this.triggerHandler);
|
|
182
181
|
db.on("executions.afterCreate", this.onExecutionCreate);
|
|
@@ -192,7 +191,7 @@ class ApprovalTrigger extends import_module_workflow.Trigger {
|
|
|
192
191
|
const workflowRepo = this.workflow.db.getRepository("workflows");
|
|
193
192
|
const workflows = await workflowRepo.find({
|
|
194
193
|
filter: {
|
|
195
|
-
type:
|
|
194
|
+
type: _ApprovalTrigger.TYPE,
|
|
196
195
|
key: triggers.map((trigger) => trigger[0]),
|
|
197
196
|
current: true,
|
|
198
197
|
enabled: true
|
|
@@ -239,7 +238,7 @@ class ApprovalTrigger extends import_module_workflow.Trigger {
|
|
|
239
238
|
const triggers = triggerWorkflows.split(",").map((trigger) => trigger.split("!"));
|
|
240
239
|
const triggersKeysMap = new Map(triggers);
|
|
241
240
|
const workflows = Array.from(this.workflow.enabledCache.values()).filter(
|
|
242
|
-
(item) => item.type ===
|
|
241
|
+
(item) => item.type === _ApprovalTrigger.TYPE && triggersKeysMap.has(item.key)
|
|
243
242
|
);
|
|
244
243
|
for (const workflow of workflows) {
|
|
245
244
|
const [dataSourceName, collectionName] = (0, import_data_source.parseCollectionName)(workflow.config.collection);
|
|
@@ -315,4 +314,6 @@ class ApprovalTrigger extends import_module_workflow.Trigger {
|
|
|
315
314
|
applyForm: result["x-uid"]
|
|
316
315
|
};
|
|
317
316
|
}
|
|
318
|
-
}
|
|
317
|
+
};
|
|
318
|
+
_ApprovalTrigger.TYPE = "approval";
|
|
319
|
+
let ApprovalTrigger = _ApprovalTrigger;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tachybase/plugin-workflow-approval",
|
|
3
3
|
"displayName": "Approval",
|
|
4
|
-
"version": "0.23.
|
|
4
|
+
"version": "0.23.47",
|
|
5
5
|
"description": "Approval base in Workflow",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"Approval",
|
|
@@ -25,16 +25,16 @@
|
|
|
25
25
|
"sequelize": "^6.37.5"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@tachybase/actions": "0.23.
|
|
29
|
-
"@tachybase/
|
|
30
|
-
"@tachybase/
|
|
31
|
-
"@tachybase/
|
|
32
|
-
"@tachybase/
|
|
33
|
-
"@tachybase/module-workflow": "0.23.
|
|
34
|
-
"@tachybase/schema": "0.23.
|
|
35
|
-
"@tachybase/server": "0.23.
|
|
36
|
-
"@tachybase/
|
|
37
|
-
"@tachybase/
|
|
28
|
+
"@tachybase/actions": "0.23.47",
|
|
29
|
+
"@tachybase/components": "0.23.47",
|
|
30
|
+
"@tachybase/client": "0.23.47",
|
|
31
|
+
"@tachybase/database": "0.23.47",
|
|
32
|
+
"@tachybase/data-source": "0.23.47",
|
|
33
|
+
"@tachybase/module-workflow": "0.23.47",
|
|
34
|
+
"@tachybase/schema": "0.23.47",
|
|
35
|
+
"@tachybase/server": "0.23.47",
|
|
36
|
+
"@tachybase/utils": "0.23.47",
|
|
37
|
+
"@tachybase/test": "0.23.47"
|
|
38
38
|
},
|
|
39
39
|
"description.zh-CN": "审批系统是一个强大的BPM工具,为业务流程自动化提供基础支持,同时具备高度灵活性和可扩展性,确保审批流程的效率和合规性,助力企业释放创新潜力。",
|
|
40
40
|
"displayName.zh-CN": "审批",
|
|
File without changes
|
/package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureCard.component.d.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/client/usage/pc/block/{approval-card → approval-list}/FeatureModal.schema.d.ts
RENAMED
|
File without changes
|
|
File without changes
|
/package/dist/client/usage/pc/block/{approval-card → approval-list}/InitiateApplication.d.ts
RENAMED
|
File without changes
|