@steedos-labs/plugin-workflow 3.0.46 → 3.0.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.
Files changed (30) hide show
  1. package/designer/dist/amis-renderer/amis-renderer.css +1 -1
  2. package/designer/dist/amis-renderer/amis-renderer.js +1 -1
  3. package/designer/dist/assets/index-CH5Rzd1r.css +1 -0
  4. package/designer/dist/assets/index-Z3wTJs2h.js +952 -0
  5. package/designer/dist/index.html +2 -2
  6. package/main/default/manager/import.js +20 -2
  7. package/main/default/objects/instances/buttons/instance_delete.button.yml +1 -1
  8. package/main/default/objects/instances/buttons/instance_related.button.yml +4 -1
  9. package/main/default/routes/api_workflow_ai_form_design.router.js +5 -2
  10. package/main/default/routes/api_workflow_ai_form_design_stream.router.js +5 -2
  11. package/main/default/routes/flow_form_design.ejs +8 -0
  12. package/main/default/routes/flow_form_design.router.js +1 -1
  13. package/main/default/test/FORMULA_SCAN_GUIDE.md +258 -0
  14. package/main/default/test/prompt-formula-analyze.md +59 -0
  15. package/main/default/test/prompt-formula-fix.md +75 -0
  16. package/main/default/test/reports/formula-scan/.gitkeep +0 -0
  17. package/main/default/test/reports/formula-scan/SCAN_HISTORY.md +165 -0
  18. package/main/default/test/reports/formula-scan/scan-result-v6-20260324.json +31846 -0
  19. package/main/default/test/reports/formula-scan/scan-result-v7-20260324.json +31543 -0
  20. package/main/default/test/run_approval_comments_upgrade.js +135 -0
  21. package/main/default/test/scan_production_formulas.js +573 -0
  22. package/main/default/test/test_formula_compat.js +38 -0
  23. package/main/default/utils/designerManager.js +1 -0
  24. package/main/default/utils/formula-compat.js +8 -0
  25. package/package.json +1 -1
  26. package/public/amis-renderer/amis-renderer.css +1 -1
  27. package/public/amis-renderer/amis-renderer.js +1 -1
  28. package/public/workflow/index.css +4 -0
  29. package/designer/dist/assets/index-BNKlgpz1.js +0 -943
  30. package/designer/dist/assets/index-D7JdeS9f.css +0 -1
@@ -0,0 +1,135 @@
1
+ /**
2
+ * 独立执行审批意见字段升级脚本
3
+ *
4
+ * 用于对备份还原的 forms 库执行 yijianlan 等审批意见字段转换,
5
+ * 作为公式扫描的前置步骤,排除已知的老版本审批意见公式干扰。
6
+ *
7
+ * 用法:
8
+ * FORMULA_SCAN_MONGO_URL=mongodb://127.0.0.1:27017/<dbname> \
9
+ * node main/default/test/run_approval_comments_upgrade.js
10
+ *
11
+ * 可选参数:
12
+ * DRY_RUN=true 只统计不修改数据库
13
+ */
14
+ 'use strict';
15
+
16
+ const { _helpers: { matchesApprovalPattern, transformField, processFieldsArray, processAmisSchema } } = require('../../../src/rests/migrateApprovalCommentsField');
17
+
18
+ async function main() {
19
+ const mongoUrl = process.env.FORMULA_SCAN_MONGO_URL || process.env.MONGO_URL;
20
+ if (!mongoUrl) {
21
+ console.error('错误:请设置环境变量 FORMULA_SCAN_MONGO_URL 或 MONGO_URL');
22
+ process.exit(1);
23
+ }
24
+
25
+ const dryRun = process.env.DRY_RUN === 'true';
26
+
27
+ const MongoClient = require('mongodb').MongoClient;
28
+ const client = new MongoClient(mongoUrl);
29
+ await client.connect();
30
+
31
+ const dbName = mongoUrl.split('/').pop().split('?')[0];
32
+ const db = client.db(dbName);
33
+ const formsCollection = db.collection('forms');
34
+
35
+ // 不限制 state,扫描所有表单(备份库可能缺少 state 字段)
36
+ const cursor = formsCollection.find({});
37
+
38
+ let totalForms = 0;
39
+ let totalFields = 0;
40
+ let scannedForms = 0;
41
+ const bulkOps = [];
42
+
43
+ while (await cursor.hasNext()) {
44
+ const form = await cursor.next();
45
+ scannedForms++;
46
+ let formUpdated = false;
47
+ const formUpdate = {};
48
+ const formUnset = {};
49
+ let formFieldCount = 0;
50
+
51
+ // current.fields
52
+ if (form.current && Array.isArray(form.current.fields)) {
53
+ const { updates, unsets } = processFieldsArray(form.current.fields, 'current.fields');
54
+ if (updates.length > 0) {
55
+ formUpdated = true;
56
+ formFieldCount += updates.length;
57
+ for (const u of updates) {
58
+ for (const key in u.update) {
59
+ formUpdate[`${u.path}.${key}`] = u.update[key];
60
+ }
61
+ }
62
+ for (const p of unsets) {
63
+ formUnset[p] = '';
64
+ }
65
+ }
66
+ }
67
+
68
+ // historys[].fields
69
+ if (Array.isArray(form.historys)) {
70
+ for (let h = 0; h < form.historys.length; h++) {
71
+ const history = form.historys[h];
72
+ if (Array.isArray(history.fields)) {
73
+ const { updates, unsets } = processFieldsArray(history.fields, `historys.${h}.fields`);
74
+ if (updates.length > 0) {
75
+ formUpdated = true;
76
+ formFieldCount += updates.length;
77
+ for (const u of updates) {
78
+ for (const key in u.update) {
79
+ formUpdate[`${u.path}.${key}`] = u.update[key];
80
+ }
81
+ }
82
+ for (const p of unsets) {
83
+ formUnset[p] = '';
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ // amis_schema
91
+ if (form.amis_schema && typeof form.amis_schema === 'string') {
92
+ const transformed = processAmisSchema(form.amis_schema);
93
+ if (transformed) {
94
+ formUpdated = true;
95
+ formUpdate.__approval_comments_original__amis_schema = form.amis_schema;
96
+ formUpdate.amis_schema = transformed;
97
+ }
98
+ }
99
+
100
+ if (formUpdated) {
101
+ totalForms++;
102
+ totalFields += formFieldCount;
103
+ if (!dryRun) {
104
+ const updateDoc = { $set: formUpdate };
105
+ if (Object.keys(formUnset).length > 0) {
106
+ updateDoc.$unset = formUnset;
107
+ }
108
+ bulkOps.push({
109
+ updateOne: { filter: { _id: form._id }, update: updateDoc }
110
+ });
111
+ if (bulkOps.length >= 500) {
112
+ await formsCollection.bulkWrite(bulkOps, { ordered: false });
113
+ bulkOps.length = 0;
114
+ }
115
+ }
116
+ }
117
+ }
118
+
119
+ if (!dryRun && bulkOps.length > 0) {
120
+ await formsCollection.bulkWrite(bulkOps, { ordered: false });
121
+ }
122
+
123
+ await client.close();
124
+
125
+ console.log('');
126
+ console.log(dryRun ? '审批意见字段升级(DRY RUN,未修改数据库)' : '审批意见字段升级完成');
127
+ console.log(`扫描表单数: ${scannedForms}`);
128
+ console.log(`升级表单数: ${totalForms}`);
129
+ console.log(`升级字段数: ${totalFields}`);
130
+ }
131
+
132
+ main().catch(err => {
133
+ console.error('执行失败:', err.message);
134
+ process.exit(1);
135
+ });