@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.
@@ -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
- // // 优先从最近一次 traces 中查找 nextStepId 对应的处理人
283
+ // 优先从 step_approve 中获取(草稿提交时用户指定的处理人)
284
284
  let newNextUsers = [];
285
- // const traces = instance.traces || [];
286
- // for (let i = traces.length - 1; i >= 0; i--) {
287
- // const trace = traces[i];
288
- // if (trace.step === nextStepId && trace.approves && trace.approves.length > 0) {
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 step_approve = instance.step_approve || {};
300
- newNextUsers = step_approve[nextStepId] || [];
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
- assert.strictEqual(getSafeCode('工程形象进度%(2)=(3)/(1)'), '工程形象进度__2__3__1');
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(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos-labs/plugin-workflow",
3
- "version": "3.0.82",
3
+ "version": "3.0.84",
4
4
  "main": "package.service.js",
5
5
  "license": "MIT",
6
6
  "files": [