@steedos-labs/plugin-workflow 3.0.1-beta.6 → 3.0.1-beta.7

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.
@@ -2,6 +2,7 @@
2
2
  const { getCollection, _makeNewID } = require('../utils/collection');
3
3
  const UUFlowManager = require('../manager/uuflow_manager.js');
4
4
  const pushManager = require('../manager/push_manager.js');
5
+ const approveManager = require('../manager/approve_manager.js');
5
6
  const {
6
7
  update_instance_tasks,
7
8
  insert_instance_tasks,
@@ -106,7 +107,7 @@ module.exports = {
106
107
  }
107
108
 
108
109
  setObj.modified = new Date();
109
- setObj.modified_by = this.userId;
110
+ setObj.modified_by = ctx.userId;
110
111
 
111
112
  await instancesCollection.updateOne({
112
113
  _id: ins_id,
@@ -191,15 +192,19 @@ module.exports = {
191
192
  return true;
192
193
  },
193
194
 
194
- /**
195
- cc_submit: function (ins_id, description, myApprove, ccHasEditPermission) {
195
+ cc_submit: async function (ins_id, description, myApprove, ccHasEditPermission, ctx = {}) {
196
+ const db = {
197
+ instances: await getCollection('instances'),
198
+ forms: await getCollection('forms'),
199
+ users: await getCollection('users')
200
+ };
196
201
  var setObj = {};
197
202
 
198
- var instance = db.instances.findOne(ins_id);
203
+ var instance = await db.instances.findOne({_id: ins_id});
199
204
  var traces = instance.traces;
200
- var current_user_id = this.userId;
205
+ var current_user_id = ctx.userId;
201
206
 
202
- var flow = uuflowManager.getFlow(instance.flow);
207
+ var flow = await UUFlowManager.getFlow(instance.flow);
203
208
  var values = myApprove.values || {};
204
209
 
205
210
  var approve_id = myApprove._id;
@@ -223,20 +228,13 @@ module.exports = {
223
228
  'judge': "submitted",
224
229
  'cost_time': new Date() - a.start_date,
225
230
  }
226
- // upobj[key_str + 'is_finished'] = true;
227
- // upobj[key_str + 'is_read'] = true;
228
- // upobj[key_str + 'finish_date'] = new Date();
229
- // upobj[key_str + 'judge'] = "submitted";
230
- // upobj[key_str + 'cost_time'] = new Date() - a.start_date;
231
231
  if (approve_id == a._id && !t.is_finished && ccHasEditPermission) {
232
232
  myTrace = t;
233
- var step = uuflowManager.getStep(instance, flow, t.step);
234
- // upobj[key_str + "values"] = uuflowManager.getApproveValues(values, step["permissions"], instance.form, instance.form_version)
235
- approveDoc['values'] = uuflowManager.getApproveValues(values, step["permissions"], instance.form, instance.form_version)
233
+ var step = await UUFlowManager.getStep(instance, flow, t.step);
234
+ approveDoc['values'] = await UUFlowManager.getApproveValues(values, step["permissions"], instance.form, instance.form_version)
236
235
  }
237
236
  //设置意见,意见只添加到最后一条approve中
238
237
  if (approve_id == a._id) {
239
- // upobj[key_str + 'description'] = description;
240
238
  approveDoc['description'] = description
241
239
  }
242
240
  for (const key in approveDoc) {
@@ -244,14 +242,14 @@ module.exports = {
244
242
  upobj[key_str + key] = approveDoc[key]
245
243
  }
246
244
  }
247
- db.instances.update({
245
+ await db.instances.updateOne({
248
246
  _id: ins_id,
249
247
  'traces._id': t._id
250
248
  }, {
251
249
  $set: upobj
252
250
  })
253
251
  // 更新
254
- update_instance_tasks(ins_id, a.trace, a._id, approveDoc)
252
+ await update_instance_tasks(ins_id, a.trace, a._id, approveDoc)
255
253
  is_finished = true;
256
254
  }
257
255
  }
@@ -262,19 +260,19 @@ module.exports = {
262
260
  if (myApprove && is_finished) {
263
261
 
264
262
  setObj.modified = new Date();
265
- setObj.modified_by = this.userId;
263
+ setObj.modified_by = ctx.userId;
266
264
 
267
265
  if (ccHasEditPermission && myApprove && !myTrace.is_finished) {
268
- var ins = uuflowManager.getInstance(ins_id);
269
- var updated_values = uuflowManager.getUpdatedValues(ins, approve_id);
266
+ var ins = await UUFlowManager.getInstance(ins_id);
267
+ var updated_values = await UUFlowManager.getUpdatedValues(ins, approve_id);
270
268
  setObj.values = updated_values;
271
- setObj.name = uuflowManager.getInstanceName(instance);
269
+ setObj.name = await UUFlowManager.getInstanceName(instance);
272
270
  // 计算extras
273
- var form = db.forms.findOne(instance.form);
274
- setObj.extras = uuflowManager.caculateExtras(setObj.values, form, instance.form_version);
271
+ var form = await db.forms.findOne({ _id : instance.form});
272
+ setObj.extras = await UUFlowManager.caculateExtras(setObj.values, form, instance.form_version);
275
273
  }
276
274
 
277
- db.instances.update({
275
+ await db.instances.updateOne({
278
276
  _id: ins_id,
279
277
  cc_users: current_user_id
280
278
  }, {
@@ -289,7 +287,7 @@ module.exports = {
289
287
  }
290
288
  });
291
289
 
292
- db.instances.update({
290
+ await db.instances.updateOne({
293
291
  _id: ins_id,
294
292
  }, {
295
293
  $pull: {
@@ -297,31 +295,35 @@ module.exports = {
297
295
  }
298
296
  });
299
297
 
300
- uuflowManager.updateCCcount(ins_id)
298
+ await UUFlowManager.updateCCcount(ins_id)
301
299
 
302
- instance = db.instances.findOne(ins_id);
300
+ const instance = await db.instances.findOne({ _id: ins_id});
303
301
 
304
- current_user_info = db.users.findOne(current_user_id);
302
+ const current_user_info = await db.users.findOne({ _id: current_user_id});
305
303
  //传阅提交不通知传阅者
306
304
  if (false && description && myApprove && myApprove.from_user) {
307
- pushManager.send_instance_notification("trace_approve_cc_submit", instance, "", current_user_info, [myApprove.from_user]);
305
+ await pushManager.send_instance_notification("trace_approve_cc_submit", instance, "", current_user_info, [myApprove.from_user]);
308
306
  }
309
307
 
310
- pushManager.send_message_to_specifyUser("current_user", current_user_id);
308
+ await pushManager.send_message_to_specifyUser("current_user", current_user_id);
311
309
 
312
- flow_id = instance.flow;
310
+ const flow_id = instance.flow;
313
311
  // 如果已经配置webhook并已激活则触发
314
- pushManager.triggerWebhook(flow_id, instance, myApprove, 'cc_submit', current_user_id, []);
312
+ await pushManager.triggerWebhook(flow_id, instance, myApprove, 'cc_submit', current_user_id, []);
315
313
  }
316
314
 
317
315
  return true;
318
316
  },
319
317
 
320
- cc_remove: function (instanceId, approveId) {
318
+ cc_remove: async function (instanceId, approveId) {
319
+ const db = {
320
+ instances: await getCollection('instances'),
321
+ };
322
+
321
323
  var setObj = {};
322
324
 
323
- var instance = db.instances.findOne(instanceId, {
324
- fields: {
325
+ var instance = await db.instances.findOne({_id: instanceId}, {
326
+ projection: {
325
327
  traces: 1,
326
328
  cc_users: 1
327
329
  }
@@ -360,17 +362,17 @@ module.exports = {
360
362
  })
361
363
 
362
364
  setObj.modified = new Date();
363
- setObj.modified_by = this.userId;
365
+ setObj.modified_by = ctx.userId;
364
366
 
365
367
  if (multi > 1) {
366
- db.instances.update({
368
+ await db.instances.updateOne({
367
369
  _id: instanceId,
368
370
  'traces._id': trace_id
369
371
  }, {
370
372
  $set: setObj
371
373
  });
372
374
  } else {
373
- db.instances.update({
375
+ await db.instances.updateOne({
374
376
  _id: instanceId,
375
377
  'traces._id': trace_id
376
378
  }, {
@@ -381,23 +383,24 @@ module.exports = {
381
383
  });
382
384
  }
383
385
 
384
- uuflowManager.updateCCcount(instanceId)
386
+ await UUFlowManager.updateCCcount(instanceId)
385
387
 
386
- remove_instance_tasks(approveId)
388
+ await remove_instance_tasks(approveId)
387
389
 
388
390
 
389
- pushManager.send_message_to_specifyUser("current_user", remove_user_id);
391
+ await pushManager.send_message_to_specifyUser("current_user", remove_user_id);
390
392
  return true;
391
393
  },
392
394
 
393
- batch_cancel_cc: function (instance_id, approve_ids) {
394
- check(instance_id, String)
395
- check(approve_ids, Array)
395
+ batch_cancel_cc: async function (instance_id, approve_ids) {
396
+ const db = {
397
+ instances: await getCollection('instances'),
398
+ };
396
399
 
397
400
  var setObj = {};
398
401
 
399
- var instance = db.instances.findOne(instance_id, {
400
- fields: {
402
+ var instance = await db.instances.findOne(instance_id, {
403
+ projection: {
401
404
  traces: 1,
402
405
  cc_users: 1
403
406
  }
@@ -426,15 +429,15 @@ module.exports = {
426
429
  return;
427
430
 
428
431
  setObj.modified = new Date();
429
- setObj.modified_by = this.userId;
432
+ setObj.modified_by = ctx.userId;
430
433
 
431
- db.instances.update({
434
+ await db.instances.updateOne({
432
435
  _id: instance_id
433
436
  }, {
434
437
  $set: setObj,
435
438
  });
436
439
  for (const ruId of remove_user_ids) {
437
- db.instances.update({
440
+ await db.instances.updateOne({
438
441
  _id: instance_id,
439
442
  cc_users: ruId
440
443
  }, {
@@ -443,7 +446,7 @@ module.exports = {
443
446
  }
444
447
  });
445
448
  }
446
- db.instances.update({
449
+ await db.instances.updateOne({
447
450
  _id: instance_id,
448
451
  }, {
449
452
  $pull: {
@@ -451,23 +454,27 @@ module.exports = {
451
454
  }
452
455
  });
453
456
 
454
- uuflowManager.updateCCcount(instance_id)
457
+ await UUFlowManager.updateCCcount(instance_id)
455
458
 
456
- direct_remove_many_instance_tasks(removeApproveIds)
459
+ await direct_remove_many_instance_tasks(removeApproveIds)
457
460
 
458
- remove_user_ids.forEach(function (u_id) {
459
- pushManager.send_message_to_specifyUser("current_user", u_id);
460
- })
461
+ for (const u_id of remove_user_ids) {
462
+ await pushManager.send_message_to_specifyUser("current_user", u_id);
463
+ }
461
464
  return true;
462
465
  },
463
466
 
464
- cc_save: function (ins_id, description, myApprove, ccHasEditPermission) {
467
+ cc_save: async function (ins_id, description, myApprove, ccHasEditPermission) {
468
+ const db = {
469
+ instances: await getCollection('instances'),
470
+ forms: await getCollection('forms'),
471
+ };
465
472
  var setObj = {};
466
473
  const approveDoc = {}
467
474
 
468
- var instance = db.instances.findOne(ins_id);
475
+ var instance = await db.instances.findOne({ _id: ins_id});
469
476
  var traces = instance.traces;
470
- var current_user_id = this.userId;
477
+ var current_user_id = ctx.userId;
471
478
 
472
479
  var trace_id = myApprove.trace;
473
480
  var approve_id = myApprove._id;
@@ -481,14 +488,14 @@ module.exports = {
481
488
 
482
489
  var myTrace;
483
490
 
484
- traces.forEach(function (t) {
491
+ for (const t of traces) {
485
492
  if (t.approves) {
486
- t.approves.forEach(function (a, idx) {
493
+ for (const [idx, a] of t.approves.entries()) {
487
494
  if (a.handler == current_user_id && a.type == 'cc' && a.is_finished == false) {
488
495
  var upobj = {};
489
496
  upobj['traces.$.approves.' + idx + '.judge'] = "submitted";
490
497
  upobj['traces.$.approves.' + idx + '.read_date'] = new Date();
491
- db.instances.update({
498
+ await db.instances.update({
492
499
  _id: ins_id,
493
500
  'traces._id': t._id
494
501
  }, {
@@ -496,9 +503,9 @@ module.exports = {
496
503
  })
497
504
 
498
505
  }
499
- });
506
+ };
500
507
  }
501
- })
508
+ }
502
509
 
503
510
  var index = 0;
504
511
  var currentStepId;
@@ -527,18 +534,18 @@ module.exports = {
527
534
 
528
535
  var key_str = 'traces.$.approves.' + index + '.';
529
536
 
530
- var flow = uuflowManager.getFlow(instance.flow);
537
+ var flow = await UUFlowManager.getFlow(instance.flow);
531
538
 
532
- var step = uuflowManager.getStep(instance, flow, currentStepId);
539
+ var step = UUFlowManager.getStep(instance, flow, currentStepId);
533
540
 
534
- var permissions_values = uuflowManager.getApproveValues(myApprove.values, step.permissions, instance.form, instance.form_version);
541
+ var permissions_values = await UUFlowManager.getApproveValues(myApprove.values, step.permissions, instance.form, instance.form_version);
535
542
 
536
543
  var change_values = approveManager.getChangeValues(instance.values, permissions_values);
537
544
 
538
545
  setObj.values = _.extend((instance.values || {}), permissions_values);
539
546
  // 计算extras
540
- var form = db.forms.findOne(instance.form);
541
- setObj.extras = uuflowManager.caculateExtras(setObj.values, form, instance.form_version);
547
+ var form = await db.forms.findOne({ _id: instance.form });
548
+ setObj.extras = await UUFlowManager.caculateExtras(setObj.values, form, instance.form_version);
542
549
  approveDoc['extras'] = setObj.extras
543
550
 
544
551
  if (!_.isEmpty(change_values)) {
@@ -554,18 +561,18 @@ module.exports = {
554
561
  approveDoc['values_history'] = values_history
555
562
  }
556
563
 
557
- setObj.name = uuflowManager.getInstanceName(instance)
564
+ setObj.name = await UUFlowManager.getInstanceName(instance)
558
565
  approveDoc['instance_name'] = setObj.name
559
566
  }
560
567
 
561
568
  updateObj.$set = setObj;
562
569
 
563
- db.instances.update({
570
+ await db.instances.updateOne({
564
571
  _id: ins_id,
565
572
  'traces._id': myApprove.trace
566
573
  }, updateObj);
567
- update_instance_tasks(ins_id, myApprove.trace, myApprove._id, approveDoc)
574
+ await update_instance_tasks(ins_id, myApprove.trace, myApprove._id, approveDoc)
568
575
  return true;
569
576
  }
570
- */
577
+
571
578
  }
@@ -58,7 +58,7 @@ amis_schema: |-
58
58
  }
59
59
  },
60
60
  "confirmText": "${'CustomLabels.confirm_delete' | t}",
61
- "hiddenOn": "!((record.box == 'draft' || record.box == 'monitor') \n && (context.user.is_space_admin \n || (_.includes(record.flow.perms.users_can_admin, context.user.userId) \n || _.intersection(record.flow.perms.orgs_can_admin, context.user.organizations_parents) > 0)\n ) \n || (record.box == 'inbox' && record.state == 'draft' && record.forward_from_instance))"
61
+ "hiddenOn": "!(record.box == 'draft' || (record.box == 'monitor' && context.user.is_space_admin) \n || (_.includes(record.flow.perms.users_can_admin, context.user.userId) \n || _.intersection(record.flow.perms.orgs_can_admin, context.user.organizations_parents) > 0)\n ) \n || (record.box == 'inbox' && record.state == 'draft' && record.forward_from_instance))"
62
62
  }
63
63
  ],
64
64
  "regions": [
@@ -17,7 +17,7 @@ amis_schema: |-
17
17
  "url": "/api/workflow/v2/instance/save",
18
18
  "method": "post",
19
19
  "sendOn": "",
20
- "requestAdaptor": "var _SteedosUI$getRef$get, _approveValues$next_s;\nconst formValues = context._scoped.getComponentById(\"instance_form\").getValues();\nconst approveValues = (_SteedosUI$getRef$get = context._scoped.getComponentById(\"instance_approval\")) === null || _SteedosUI$getRef$get === void 0 ? void 0 : _SteedosUI$getRef$get.getValues();\nlet nextUsers = approveValues === null || approveValues === void 0 ? void 0 : approveValues.next_users;\nif (_.isString(nextUsers)) {\n nextUsers = [approveValues.next_users];\n}\nconst instance = context.record;\nconst body = {\n instance: {\n _id: instance._id,\n applicant: formValues.applicant,\n submitter: formValues.submitter,\n traces: [{\n _id: instance.trace._id,\n step: instance.step._id,\n approves: [{\n _id: instance.approve._id,\n next_steps: [{\n step: approveValues === null || approveValues === void 0 || (_approveValues$next_s = approveValues.next_step) === null || _approveValues$next_s === void 0 ? void 0 : _approveValues$next_s._id,\n users: nextUsers\n }],\n description: approveValues === null || approveValues === void 0 ? void 0 : approveValues.suggestion,\n values: formValues\n }]\n }]\n }\n};\napi.data = body;\nreturn api;",
20
+ "requestAdaptor": "var _SteedosUI$getRef$get, _approveValues$next_s;\nconst formValues = context._scoped.getComponentById(\"instance_form\").getValues();const _formValues = JSON.parse(JSON.stringify(formValues)); if(_formValues){delete _formValues.__applicant} \nconst approveValues = (_SteedosUI$getRef$get = context._scoped.getComponentById(\"instance_approval\")) === null || _SteedosUI$getRef$get === void 0 ? void 0 : _SteedosUI$getRef$get.getValues();\nlet nextUsers = approveValues === null || approveValues === void 0 ? void 0 : approveValues.next_users;\nif (_.isString(nextUsers)) {\n nextUsers = [approveValues.next_users];\n}\nconst instance = context.record;\nconst body = {\n instance: {\n _id: instance._id,\n applicant: formValues.applicant.user,\n submitter: formValues.submitter,\n traces: [{\n _id: instance.trace._id,\n step: instance.step._id,\n approves: [{\n _id: instance.approve._id,\n next_steps: [{\n step: approveValues === null || approveValues === void 0 || (_approveValues$next_s = approveValues.next_step) === null || _approveValues$next_s === void 0 ? void 0 : _approveValues$next_s._id,\n users: nextUsers\n }],\n description: approveValues === null || approveValues === void 0 ? void 0 : approveValues.suggestion,\n values: _formValues\n }]\n }]\n }\n};\napi.data = body;\nreturn api;",
21
21
  "adaptor": "if (payload.instance == \"upgraded\") { window.setTimeout(function(){ window.location.reload(); }, 2000); return {...payload, status: 1, msg: t('instance_action_instance_save_msg_upgraded')}; } \n return payload.instance === true ? {...payload, status: 0, msg: t('instance_action_instance_save_msg_success')} : {...payload, status: 1, msg: t('instance_action_instance_save_msg_failed')};",
22
22
  "headers": {
23
23
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
@@ -1,53 +1,26 @@
1
1
  /*
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2023-02-11 14:50:02
4
- * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2023-02-15 17:12:18
4
+ * @LastEditors: 孙浩林 sunhaolin@steedos.com
5
+ * @LastEditTime: 2025-12-04 09:45:50
6
6
  * @Description:
7
7
  */
8
8
  const express = require("express");
9
9
  const router = express.Router();
10
10
  const { requireAuthentication } = require("@steedos/auth");
11
11
  const objectql = require('@steedos/objectql')
12
- const _ = require('lodash');
13
- const Fiber = function(fun){console.log('TODO Fiber...')}
14
12
 
15
- const { workflowMethods } = {name_todo: "@steedos/workflow"}
13
+ const { cc_submit } = require('../methods/trace_approve_cc');
16
14
 
17
15
  router.post('/api/workflow/v2/cc_submit', requireAuthentication, async function (req, res) {
18
16
  try {
19
17
  let userSession = req.user;
20
18
  const { instanceId, traceId, approveId, description } = req.body;
21
- const approve = await objectql.getSteedosSchema().broker.call('instance.getApprove', {instanceId, traceId, approveId});
22
- Fiber(async function () {
23
- try {
24
- // Meteor.call('cc_submit', instanceId, description, myApprove, ccHasEditPermission, function (error, result) {})
25
- //TODO
26
- console.log('======cc_submit=====', instanceId, description, approve);
27
- const ccHasEditPermission = false;
28
- const result = workflowMethods.cc_submit.apply({
29
- userId: userSession.userId
30
- }, [
31
- instanceId, description, approve, ccHasEditPermission])
32
- res.status(200).send(result);
33
- // Meteor.call('cc_submit', instanceId, description, approve, ccHasEditPermission, (error, result)=>{
34
- // if(error){
35
- // res.status(200).send({
36
- // error: error.message
37
- // });
38
- // }else{
39
- // res.status(200).send(result);
40
- // }
41
- // })
42
- } catch (error) {
43
- console.error(error);
44
- res.status(200).send({
45
- error: error.message
46
- });
47
- }
19
+ const approve = await objectql.getSteedosSchema().broker.call('instance.getApprove', { instanceId, traceId, approveId });
20
+ const ccHasEditPermission = false;
21
+ const result = await cc_submit(instanceId, description, approve, ccHasEditPermission, {userId: userSession.userId})
48
22
 
49
- }).run()
50
-
23
+ res.status(200).send(result);
51
24
  } catch (error) {
52
25
  console.error(error);
53
26
  res.status(200).send({
@@ -281,7 +281,7 @@
281
281
  }
282
282
 
283
283
  const tpl = {
284
- label: field.name,
284
+ label: field.name || field.code,
285
285
  name: field.code,
286
286
  required: field.is_required,
287
287
  multiple: field.is_multiselect,
@@ -290,8 +290,8 @@
290
290
  (field.is_searchable ? ' is_searchable' : '')
291
291
  };
292
292
 
293
- if(field.formula){
294
- tpl.value = `$${field.formula}`;
293
+ if(field.default_value){
294
+ tpl.value = field.default_value;
295
295
  }
296
296
 
297
297
  switch (field.type) {
@@ -301,10 +301,16 @@
301
301
  } else {
302
302
  tpl.type = "input-text";
303
303
  }
304
+ if(field.formula){
305
+ tpl.value = `$${field.formula}`;
306
+ }
304
307
  break;
305
308
  case "number":
306
309
  tpl.type = "input-number";
307
- tpl.precision=2
310
+ tpl.precision=field.digits || 0;
311
+ if(field.formula){
312
+ tpl.value = `$${field.formula}`;
313
+ }
308
314
  break;
309
315
  case "date":
310
316
  tpl.type = "input-date";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos-labs/plugin-workflow",
3
- "version": "3.0.1-beta.6",
3
+ "version": "3.0.1-beta.7",
4
4
  "main": "package.service.js",
5
5
  "license": "MIT",
6
6
  "scripts": {