@steedos-labs/plugin-workflow 3.0.82 → 3.0.84
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/designer/dist/amis-renderer/amis-renderer.js +1 -1
- package/designer/dist/assets/{index-WAa42ctb.js → index-DpFVuLlI.js} +28 -28
- package/designer/dist/index.html +1 -1
- package/main/default/client/flow2_render.client.js +1 -1
- package/main/default/objects/instances/buttons/instance_delete_many.button.yml +1 -1
- package/main/default/objects/instances/listviews/monitor.listview.yml +1 -1
- package/main/default/pages/instance_tasks_detail.page.amis.json +4 -7
- package/main/default/pages/page_instance_print.page.amis.json +3 -3
- package/main/default/routes/api_workflow_chart.router.js +374 -51
- package/main/default/routes/api_workflow_next_step_users.router.js +16 -16
- package/main/default/test/test_formula_compat.js +28 -1
- package/package.json +1 -1
- package/public/amis-renderer/amis-renderer.js +1 -1
|
@@ -280,24 +280,24 @@ router.post('/api/workflow/v2/nextStepUsersValue', requireAuthentication, async
|
|
|
280
280
|
|
|
281
281
|
let instance = await UUFlowManager.getInstance(instanceId);
|
|
282
282
|
|
|
283
|
-
//
|
|
283
|
+
// 优先从 step_approve 中获取(草稿提交时用户指定的处理人)
|
|
284
284
|
let newNextUsers = [];
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
//
|
|
289
|
-
// // 需要排除以下 approve.jude ['returned', 'terminated', 'retrieved'].includes(judge)
|
|
290
|
-
// newNextUsers = trace.approves
|
|
291
|
-
// .filter(approve => !['returned', 'terminated', 'retrieved'].includes(approve.judge))
|
|
292
|
-
// .map(approve => approve.handler);
|
|
293
|
-
// break;
|
|
294
|
-
// }
|
|
295
|
-
// }
|
|
296
|
-
|
|
297
|
-
// 如果 traces 中没有找到,回退到 step_approve
|
|
285
|
+
const step_approve = instance.step_approve || {};
|
|
286
|
+
newNextUsers = step_approve[nextStepId] || [];
|
|
287
|
+
|
|
288
|
+
// 如果 step_approve 中没有找到,回退到 traces 历史记录(驳回/转发等场景)
|
|
298
289
|
if (newNextUsers.length === 0) {
|
|
299
|
-
const
|
|
300
|
-
|
|
290
|
+
const traces = instance.traces || [];
|
|
291
|
+
for (let i = traces.length - 1; i >= 0; i--) {
|
|
292
|
+
const trace = traces[i];
|
|
293
|
+
if (trace.step === nextStepId && trace.approves && trace.approves.length > 0) {
|
|
294
|
+
// 排除 returned/terminated/retrieved 的 approve
|
|
295
|
+
newNextUsers = trace.approves
|
|
296
|
+
.filter(approve => !['returned', 'terminated', 'retrieved'].includes(approve.judge))
|
|
297
|
+
.map(approve => approve.handler);
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
301
|
}
|
|
302
302
|
|
|
303
303
|
// 校验 newNextUsers 中的用户是否存在于 space_users 中
|
|
@@ -133,13 +133,40 @@ const tableFieldMapCases = [
|
|
|
133
133
|
input: 'sum{项目预算金额}',
|
|
134
134
|
tableFieldMap: { '项目预算金额': '费用明细' },
|
|
135
135
|
expected: "${SUM(ARRAYMAP(费用明细, item => item['项目预算金额']))}"
|
|
136
|
+
},
|
|
137
|
+
// ----------------------------------------------------------------
|
|
138
|
+
// 子表【行内】公式:公式字段位于子表内,引用同一行其它含特殊字符字段
|
|
139
|
+
// 守护 steedos/steedos-widgets#660 反向:mapFormula 必须把 raw 字段名
|
|
140
|
+
// 安全化为 safeCode,否则运行期公式引擎找不到键 → 「数字无效」
|
|
141
|
+
// 注意:widgets flow.js 中行内字段编译时 `mapFormula(expr, null)`
|
|
142
|
+
// (不传 tableFieldMap),即与下方 cases 数组路径一致;这里显式断言
|
|
143
|
+
// 该路径下含全角/半角括号字段名也能被正确安全化。
|
|
144
|
+
// ----------------------------------------------------------------
|
|
145
|
+
{
|
|
146
|
+
name: '子表行内:公式引用同行全角括号字段(燃油费(本地)+ 燃油费(异地))',
|
|
147
|
+
input: '{燃油费(本地)} + {燃油费(异地)}',
|
|
148
|
+
expected: '${燃油费_本地 + 燃油费_异地}'
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: '子表行内:长公式(13 字段相加,混合普通与全角括号字段)',
|
|
152
|
+
input: '{燃油费(本地)} + {燃油费(异地)} + {维修保养费} + {过道费} + {停车费} + {洗车费} + {照证审验费} + {检车费} + {交强险} + {商业险} + {车船使用税} + {司机补助费} + {司机住宿费}',
|
|
153
|
+
expected: '${燃油费_本地 + 燃油费_异地 + 维修保养费 + 过道费 + 停车费 + 洗车费 + 照证审验费 + 检车费 + 交强险 + 商业险 + 车船使用税 + 司机补助费 + 司机住宿费}'
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: '子表行内:半角括号字段(油量(本地) / 里程数)',
|
|
157
|
+
input: '{油量(本地)} / {里程数} * 100',
|
|
158
|
+
expected: '${油量_本地 / 里程数 * 100}'
|
|
136
159
|
}
|
|
137
160
|
];
|
|
138
161
|
|
|
139
162
|
const run = () => {
|
|
140
163
|
console.log('[formula-compat] running tests...');
|
|
141
164
|
|
|
142
|
-
|
|
165
|
+
// commit 1ff2b27 (feat: Field-names-support-Chinese-characters) 在 getSafeCode 末尾追加了
|
|
166
|
+
// .replace(/_{2,}/g, '_').replace(/_$/, '') 两条规则,使连续特殊字符产生的多个下划线被折叠为单个。
|
|
167
|
+
// 因此含 %( =( 等连续特殊字符的字段名(如下例)在该提交后输出从 __2__ 变为 _2_,
|
|
168
|
+
// 断言期望值同步更新,否则测试脚本会失败。
|
|
169
|
+
assert.strictEqual(getSafeCode('工程形象进度%(2)=(3)/(1)'), '工程形象进度_2_3_1');
|
|
143
170
|
|
|
144
171
|
// 方括号转换测试
|
|
145
172
|
assert.strictEqual(
|