sasp-flow-render 1.0.1

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 (68) hide show
  1. package/index.js +108 -0
  2. package/package.json +21 -0
  3. package/router.js +13 -0
  4. package/src/assets/font/iconfont.css +1158 -0
  5. package/src/assets/font/iconfont.eot +0 -0
  6. package/src/assets/font/iconfont.js +1 -0
  7. package/src/assets/font/iconfont.svg +827 -0
  8. package/src/assets/font/iconfont.ttf +0 -0
  9. package/src/assets/font/iconfont.woff +0 -0
  10. package/src/assets/images/card_zwsj.png +0 -0
  11. package/src/assets/images/dataStore.png +0 -0
  12. package/src/assets/images/dataStore_icon.png +0 -0
  13. package/src/assets/images/draft.png +0 -0
  14. package/src/assets/images/edit_icon.png +0 -0
  15. package/src/assets/images/end.png +0 -0
  16. package/src/assets/images/end_icon.png +0 -0
  17. package/src/assets/images/gateway.png +0 -0
  18. package/src/assets/images/gateway_icon.png +0 -0
  19. package/src/assets/images/globalConnect_icon.png +0 -0
  20. package/src/assets/images/group_icon.png +0 -0
  21. package/src/assets/images/hander_icon.png +0 -0
  22. package/src/assets/images/icon_ quality.png +0 -0
  23. package/src/assets/images/lasso_icon.png +0 -0
  24. package/src/assets/images/mobile_preview.png +0 -0
  25. package/src/assets/images/participant_icon.png +0 -0
  26. package/src/assets/images/publicProcess_icon.png +0 -0
  27. package/src/assets/images/remind_example.png +0 -0
  28. package/src/assets/images/space_icon.png +0 -0
  29. package/src/assets/images/start.png +0 -0
  30. package/src/assets/images/start_icon.png +0 -0
  31. package/src/assets/images/subprocess_icon.png +0 -0
  32. package/src/assets/images/tab_set_example.png +0 -0
  33. package/src/assets/images/timer.png +0 -0
  34. package/src/assets/images/timer_icon.png +0 -0
  35. package/src/assets/images/userTask_icon.png +0 -0
  36. package/src/assets/images/user_task.png +0 -0
  37. package/src/assets/js/api/apiFlow.js +219 -0
  38. package/src/assets/js/flowInstall.js +25 -0
  39. package/src/assets/js/global/cacheGlobal.js +110 -0
  40. package/src/assets/js/global/flowGlobal.js +61 -0
  41. package/src/assets/js/global/flowUserGlobal.js +35 -0
  42. package/src/assets/js/global/interfaceCache.js +31 -0
  43. package/src/assets/js/storageIO.js +106 -0
  44. package/src/components/flowChart.vue +463 -0
  45. package/src/components/flowInst/css/flowInstList.scss +193 -0
  46. package/src/components/flowInst/flowInstList.vue +818 -0
  47. package/src/components/flowInst/flowInstTab.vue +2858 -0
  48. package/src/components/flowInst/popup/flowInstForm.vue +54 -0
  49. package/src/components/flowRoamRecords.vue +768 -0
  50. package/src/components/messageMould/messageMould.vue +547 -0
  51. package/src/components/roamRecord.vue +567 -0
  52. package/src/components/userSelect.vue +537 -0
  53. package/src/views/flowInstView.vue +178 -0
  54. package/src/views/menuRouter/flowMenuRouter.vue +260 -0
  55. package/src/views/menuRouter/flowResRouter.vue +223 -0
  56. package/src/views/popup/css/flowMain.scss +156 -0
  57. package/src/views/popup/event/compoment/diy/info.txt +1 -0
  58. package/src/views/popup/event/compoment/eventParentConfig.vue +45 -0
  59. package/src/views/popup/event/js/loadFlowEventPlugin.js +279 -0
  60. package/src/views/popup/js/controls/CustomContextPad.js +310 -0
  61. package/src/views/popup/js/controls/CustomPalette.js +303 -0
  62. package/src/views/popup/js/controls/CustomRenderer.js +219 -0
  63. package/src/views/popup/js/controls/index.js +11 -0
  64. package/src/views/popup/js/customModeler/CustomModeler.js +22 -0
  65. package/src/views/popup/js/translations/customTranslate.js +14 -0
  66. package/src/views/popup/js/translations/translations.js +234 -0
  67. package/src/views/popup/js/utils/utils.js +53 -0
  68. package/src/views/test.vue +79 -0
@@ -0,0 +1,768 @@
1
+ <template>
2
+ <div id="roamRecordContainer" class="pos-abs-full flow-record-content"
3
+ v-loading="loading"
4
+ element-loading-text="正在加载,请稍后..."
5
+ element-loading-spinner="el-icon-loading"
6
+ element-loading-background="rgba(0, 0, 0, 0.6)" style="padding: 10px 20px;overflow-y: scroll;">
7
+ <div class="flow-summary">
8
+ <span style="font-weight: bold;">事项概述:</span>
9
+ {{flowSummary}}
10
+ </div>
11
+ <div class="flow-color">
12
+ <span style="font-weight: bold;">节点颜色:</span>
13
+ <span class="flow-color-content">
14
+ <span class="flow-color-item" v-for="node in flowStatusName" :key="node.code">
15
+ <span class="flow-color-item-radius"
16
+ :style="{backgroundColor:flowStatusColor[node.code]}"></span>
17
+ <span class="flow-color-item-text" style="">{{node.name}}</span>
18
+ </span>
19
+ </span>
20
+ </div>
21
+
22
+ <div style="padding-top:10px;text-align: center;">
23
+ <el-radio-group v-model="showStyle">
24
+ <el-radio-button label="图形展现"></el-radio-button>
25
+ <el-radio-button label="表格展现"></el-radio-button>
26
+ </el-radio-group>
27
+ </div>
28
+
29
+ <div class="flow-roam-record-content">
30
+ <el-timeline v-show="showStyle=='图形展现'">
31
+ <el-timeline-item
32
+ v-for="(item, index) in flowInstNodeArr"
33
+ :key="index"
34
+ placement="top"
35
+ :class="{'appendsign-item':(item.isAppendsign=='1' || item.activityType=='multiInstanceBody' || item.turnSign)}"
36
+ :icon="nodeInstIcon(item)"
37
+ :color="flowStatusColor[flowStatusCode[item.nodeInstStatus]]"
38
+ :timestamp="COMMON_FUNC.dateToString(new Date(item.startTime)) + ' 至 ' + (item.endTime?COMMON_FUNC.dateToString(new Date(item.endTime)):'')">
39
+
40
+ <el-popover v-if="item.isAppendsign=='1'"
41
+ placement="top"
42
+ popper-class="append-sign-popup"
43
+ width="400"
44
+ trigger="click">
45
+ <div class="flow-roam-record-content">
46
+ <el-timeline>
47
+ <el-timeline-item
48
+ v-for="(item, index) in item.addSignArr"
49
+ :key="index"
50
+ placement="top"
51
+ icon="el-icon-user-solid"
52
+ :color="flowStatusColor[flowStatusCode[item.nodeInstStatus]]"
53
+ :timestamp="COMMON_FUNC.dateToString(new Date(item.startTime)) + ' 至 ' + (item.endTime?COMMON_FUNC.dateToString(new Date(item.endTime)):'')">
54
+ <el-card>
55
+ <div slot="header" class="clearfix">
56
+ <h4>{{item.nodeName}}
57
+ <span style="padding-left:20px;color:#666;font-weight: normal;"> {{item.actorUserName}}</span>
58
+ </h4>
59
+ </div>
60
+ <p v-html="item.nodeMask"></p>
61
+ </el-card>
62
+ </el-timeline-item>
63
+ </el-timeline>
64
+ </div>
65
+
66
+ <div slot="reference" @click="showCompleteSignInfos(item.ids)"
67
+ title="点击查看加签信息"
68
+ class="appendsign-item-mask">
69
+ <i class="el-icon-postcard appendsign-item-icon"></i>
70
+ </div>
71
+ </el-popover>
72
+ <el-popover v-if="(item.turnSign || []).length > 0"
73
+ placement="top"
74
+ popper-class="append-sign-popup"
75
+ width="400"
76
+ trigger="click">
77
+ <div class="flow-roam-record-content">
78
+ <el-timeline>
79
+ <el-timeline-item
80
+ v-for="(item, index) in item.turnSign"
81
+ :key="index"
82
+ placement="top"
83
+ icon="el-icon-user-solid"
84
+ :color="flowStatusColor[flowStatusCode[item.nodeInstStatus]]"
85
+ :timestamp="COMMON_FUNC.dateToString(new Date(item.startTime)) + ' 至 ' + (item.endTime?COMMON_FUNC.dateToString(new Date(item.endTime)):'')">
86
+ <el-card>
87
+ <div slot="header" class="clearfix">
88
+ <h4>{{item.nodeName}}
89
+ <span style="padding-left:20px;color:#666;font-weight: normal;"> {{item.actorUserName}}</span>
90
+ </h4>
91
+ </div>
92
+ <p v-html="item.nodeMask"></p>
93
+ </el-card>
94
+ </el-timeline-item>
95
+ </el-timeline>
96
+ </div>
97
+
98
+ <div slot="reference" @click="showCompleteSignInfos(item.ids)"
99
+ title="点击查看转签前处理人信息"
100
+ class="appendsign-item-mask">
101
+ <i class="saspiconfont pl-icon-gongzuozhuanjiao appendsign-item-icon"></i>
102
+ </div>
103
+ </el-popover>
104
+
105
+ <el-popover v-if="item.activityType=='multiInstanceBody'"
106
+ placement="top"
107
+ popper-class="append-sign-popup"
108
+ width="400"
109
+ trigger="click">
110
+ <div class="flow-roam-record-content">
111
+ <el-timeline>
112
+ <el-timeline-item
113
+ v-for="(item, index) in item.manyChild"
114
+ :key="index"
115
+ placement="top"
116
+ icon="el-icon-user-solid"
117
+ :color="flowStatusColor[flowStatusCode[item.nodeInstStatus]]"
118
+ :timestamp="COMMON_FUNC.dateToString(new Date(item.startTime)) + ' 至 ' + (item.endTime?COMMON_FUNC.dateToString(new Date(item.endTime)):'')">
119
+ <el-card>
120
+ <div slot="header" class="clearfix">
121
+ <h4>{{item.nodeName}}
122
+ <span style="padding-left:20px;color:#666;font-weight: normal;"> {{item.actorUserName}}</span>
123
+ </h4>
124
+ </div>
125
+ <p v-html="item.nodeMask"></p>
126
+ </el-card>
127
+ </el-timeline-item>
128
+ </el-timeline>
129
+ </div>
130
+
131
+ <div slot="reference" @click="showCompleteSignInfos(item.ids)"
132
+ title="点击查看多人处理信息"
133
+ class="appendsign-item-mask">
134
+ <i class="saspiconfont pl-icon-duoren appendsign-item-icon"></i>
135
+ </div>
136
+ </el-popover>
137
+
138
+ <el-card>
139
+ <div slot="header" class="clearfix">
140
+ <h4>{{item.activityName}}
141
+ <span style="padding-left:20px;color:#666;font-weight: normal;" v-if="item.activityType != 'noneEndEvent'"
142
+ > {{item.actorUserName}}</span>
143
+ </h4>
144
+ </div>
145
+ <p v-html="item.nodeMask"></p>
146
+ </el-card>
147
+ </el-timeline-item>
148
+ </el-timeline>
149
+
150
+ <el-table v-show="showStyle=='表格展现'" :data="flowInstNodeArr" border stripe style="width: 100%">
151
+ <el-table-column prop="activityName" label="节点名称" width="180">
152
+ </el-table-column>
153
+ <el-table-column prop="nodeInstStatus" label="当前状态" width="130">
154
+ <template slot-scope="scope">
155
+ <span v-if="scope.row.isAppendsign!='1'" class="table-node-inst-status-item"
156
+ :style="{backgroundColor: flowStatusColor[flowStatusCode[scope.row.nodeInstStatus]]}">{{scope.row.nodeInstStatusName}}</span>
157
+
158
+ <el-popover v-if="scope.row.isAppendsign=='1'"
159
+ placement="top"
160
+ popper-class="append-sign-popup"
161
+ width="400"
162
+ trigger="click">
163
+ <div class="flow-roam-record-content">
164
+ <el-timeline>
165
+ <el-timeline-item
166
+ v-for="(item, index) in appendSignNodeArr"
167
+ :key="index"
168
+ placement="top"
169
+ icon="el-icon-user-solid"
170
+ :color="flowStatusColor[flowStatusCode[item.nodeInstStatus]]"
171
+ :timestamp="COMMON_FUNC.dateToString(new Date(item.startTime)) + ' 至 ' + (item.endTime?COMMON_FUNC.dateToString(new Date(item.endTime)):'')">
172
+ <el-card>
173
+ <div slot="header" class="clearfix">
174
+ <h4>{{item.nodeName}}
175
+ <span style="padding-left:20px;color:#666;font-weight: normal;"> {{item.actorUserName}}</span>
176
+ </h4>
177
+ </div>
178
+ <p v-html="item.nodeMask"></p>
179
+ </el-card>
180
+ </el-timeline-item>
181
+ </el-timeline>
182
+ </div>
183
+ <span slot="reference" class="table-node-inst-status-item" style="cursor: pointer"
184
+ :style="{backgroundColor: flowStatusColor[flowStatusCode[scope.row.nodeInstStatus]]}">{{scope.row.nodeInstStatusName}}</span>
185
+ </el-popover>
186
+
187
+ </template>
188
+ </el-table-column>
189
+ <el-table-column prop="actorUserName" label="处理人" width="120">
190
+ </el-table-column>
191
+ <el-table-column label="附加说明">
192
+ <template slot-scope="scope">
193
+ <p v-html="scope.row.nodeMask"></p>
194
+ </template>
195
+ </el-table-column>
196
+ <el-table-column prop="startTime" label="处理时间" width="200">
197
+ <template slot-scope="scope">
198
+ <div>起:{{COMMON_FUNC.dateToString(new Date(scope.row.startTime))}}</div>
199
+ <div>止:{{scope.row.endTime?COMMON_FUNC.dateToString(new Date(scope.row.endTime)):''}}</div>
200
+ </template>
201
+ </el-table-column>
202
+ </el-table>
203
+ </div>
204
+ </div>
205
+ </template>
206
+
207
+ <script>
208
+ export default {
209
+ name: "flow-roam-record",
210
+ props: {
211
+ flowInstId: {
212
+ type: String,
213
+ default: "6"
214
+ },
215
+ instId: {
216
+ type: String,
217
+ required:true
218
+ }
219
+ },
220
+ watch: {
221
+ flowInstId() {
222
+ this.init();
223
+ }
224
+ },
225
+ data() {
226
+ return {
227
+ loading: true,
228
+ flowInstNodeArr: [],
229
+ flowSummary:"",
230
+ showStyle: "图形展现",
231
+ flowStatusCode: {
232
+ "0": "pending", // 待处理
233
+ "1": "finished", // 已处理
234
+ "2": "retrieve", // 已取回
235
+ "3": "return", // 已退回
236
+ "4": "stopped", // 已中止
237
+ "5": "cancel", // 已撤销
238
+ "6": "sign", // 已加签
239
+ "7": "signed", // 已转签
240
+ "9": "recover" // 已恢复
241
+ },
242
+ flowStatusColor: {
243
+ "pending": "#aaa", // 待处理
244
+ "finished": "#75ce66", // 已处理
245
+ "retrieve": "#c03b44", // 已取回
246
+ "return": "#A349A4", // 已退回
247
+ "stopped": "red", // 已中止
248
+ "cancel": "#333", // 已撤销
249
+ "sign": "#aaa", // 已加签
250
+ "signed": "#75ce66", // 已转签
251
+ "recover": "#0D5DAF" // 已恢复
252
+ },
253
+ flowStatusName: [
254
+ {code: "pending", name: "待处理"},
255
+ {code: "finished", name: "已处理"},
256
+ {code: "retrieve", name: "已取回"},
257
+ {code: "return", name: "已退回"},
258
+ {code: "stopped", name: "已中止"},
259
+ {code: "sign", name: "已加签"},
260
+ {code: "signed", name: "已转签"},
261
+ {code: "recover", name: "已恢复"},
262
+ {code: "cancel", name: "已撤销(被取消)"},
263
+ ],
264
+
265
+ appendSignNodeArr: [],
266
+ flowNodeAppendSignDatas: []
267
+ };
268
+ },
269
+ created() {
270
+ this.init();
271
+ },
272
+ methods: {
273
+ init() {
274
+ this.flowInstNodeArr = [];
275
+ this.loading = true;
276
+ this.axios.post(this.api.plFlowInst.getHistoryActInst,{"flowInstId":this.instId}).then(res => {
277
+ if(!res.data.operateSuccess){
278
+ this.$message.error(res.data.operateMessage);
279
+ return;
280
+ }
281
+ // console.log('res', res.data.resultObject);
282
+ this.flowSummary = res.data.resultObject.flowSummary;
283
+ this.flowInstNodeArr = res.data.resultObject.resultList;
284
+ let variables = res.data.resultObject.variables;
285
+ let userIdsMap = res.data.resultObject.userIdsMap;
286
+ let externalTak = res.data.resultObject.externalTak;
287
+ // 初始化多人处理数据
288
+ let multiInstanceBodyObj = {};
289
+ let multiInstanceArr = [];
290
+ let turnSignObj = {};
291
+ let addSignObj = {};
292
+ let addSignIds = [];
293
+ let getbackObj = {};
294
+ (externalTak || []).forEach(item => {
295
+ if(item.parentTaskId){
296
+ item.activityName = item.name;
297
+ let assignee = item.assignee;
298
+ item.actorUserName = userIdsMap[assignee];
299
+ if(!item.actorUserName){
300
+ if(assignee.indexOf("_turnSign") > -1){
301
+ assignee = assignee.substring(0,assignee.lastIndexOf("_turnSign"));
302
+ }
303
+ item.actorUserName = userIdsMap[assignee];
304
+ }
305
+
306
+ if(!turnSignObj[item.parentTaskId]){
307
+ turnSignObj[item.parentTaskId] = [item];
308
+ }else{
309
+ turnSignObj[item.parentTaskId].push(item);
310
+ }
311
+ item.nodeInstStatus = "1";
312
+ item.nodeInstStatusName = "已转签";
313
+ item.actorUserName += "(" + item.nodeInstStatusName + ")";
314
+ let turnSignOwner = variables["turnSignGetBack_" + item.id];
315
+ if(turnSignOwner){
316
+ item.nodeInstStatus = "2";
317
+ item.actorUserName = userIdsMap[turnSignOwner] + "(由用户" + userIdsMap[assignee] + "取回)";
318
+ getbackObj[item.parentTaskId] = true;
319
+ }
320
+ }
321
+ })
322
+ this.flowInstNodeArr.forEach(item => {
323
+ // 获取任务状态,back:退回上一步,get:取回,skipNode:管理员退回,skip:用户退回
324
+ item.taskStatus = variables[item.taskId] || "";
325
+ switch (item.activityType) {
326
+ case "startEvent":
327
+ item.actorUserName = "";
328
+ break;
329
+ case "noneEndEvent":
330
+ item.actorUserName = "";
331
+ break;
332
+ case "parallelGateway":
333
+ case "exclusiveGateway":
334
+ case "InclusiveGateway":
335
+ item.actorUserName = "系统处理";
336
+ break;
337
+ case "multiInstanceBody":
338
+ item.actorUserName = "";
339
+ let activityId = item["activityId"];
340
+ activityId = activityId.substring(0,activityId.lastIndexOf("#"));
341
+ if(multiInstanceArr.indexOf(activityId) == -1){
342
+ multiInstanceArr.push(activityId);
343
+ }
344
+ multiInstanceBodyObj[item.id] = item;
345
+ break;
346
+ case "boundaryTimer":
347
+ item.actorUserName = "超时处理";
348
+ item.activityName="时钟";
349
+ break;
350
+ default:
351
+ let assignee = item.taskAssignee || "";
352
+ if(assignee.indexOf("completeSign") > -1){
353
+ assignee = assignee.substring(0,assignee.lastIndexOf("completeSign"));
354
+ }
355
+ if(assignee.indexOf("revoke") > -1){
356
+ assignee = assignee.substring(0,assignee.lastIndexOf("revoke"));
357
+ item.taskStatus = "cancel";
358
+ }
359
+ if(assignee.indexOf("stop") > -1){
360
+ assignee = assignee.substring(0,assignee.lastIndexOf("stop"));
361
+ item.taskStatus = "stop";
362
+ }
363
+ let signDataArr = assignee.split("_");
364
+ if(signDataArr.length == 3 && assignee.indexOf("_") == 0){ // 加签数据
365
+ let mainTaskId = signDataArr[2];
366
+ assignee = signDataArr[1];
367
+ if(!addSignObj[mainTaskId]){
368
+ addSignObj[mainTaskId] = [item];
369
+ }else{
370
+ addSignObj[mainTaskId].push(item);
371
+ }
372
+ item.wasAppendSign = true;
373
+ addSignIds.push(item.id);
374
+ }
375
+ item.actorUserName = userIdsMap[assignee];
376
+ break;
377
+ }
378
+ if(item.activityId.indexOf("Activity_draft") > -1){
379
+ item.actorUserName = res.data.resultObject["startUserName"];
380
+ }
381
+ if(item.endTime){
382
+ item.nodeInstStatus = "1";
383
+ item.nodeInstStatusName = "已完成";
384
+ if(item.activityType == "noneEndEvent"){
385
+ item.actorUserName = "";
386
+ }
387
+ if(item.activityType == "parallelGateway" || item.activityType == "exclusiveGateway"
388
+ || item.activityType == "inclusiveGateway"){
389
+ item.actorUserName = "系统处理";
390
+ }
391
+ if(item.canceled){
392
+ item.nodeInstStatusName = "多人处理他人通过后自动完成";
393
+ }
394
+ }else{
395
+ item.nodeInstStatus = "0";
396
+ item.nodeInstStatusName = "待处理";
397
+ }
398
+ // back:退回上一步,get:取回,skipNode:管理员退回,skip:用户退回
399
+ switch (item.taskStatus) {
400
+ case "back":
401
+ item.nodeInstStatus = "3";
402
+ item.nodeInstStatusName = "已退回";
403
+ break;
404
+ case "get":
405
+ item.nodeInstStatus = "2";
406
+ item.nodeInstStatusName = "已取回";
407
+ break;
408
+ case "skipNode":
409
+ item.actorUserName = "";
410
+ item.nodeInstStatus = "3";
411
+ item.nodeInstStatusName = "管理员(已退回到指定节点)";
412
+ break;
413
+ case "skip":
414
+ item.nodeInstStatus = "3";
415
+ item.nodeInstStatusName = "已退回到指定节点";
416
+ break;
417
+ case "cancel":
418
+ item.nodeInstStatus = "5";
419
+ item.nodeInstStatusName = "已被发起人撤销";
420
+ break;
421
+ case "stop":
422
+ item.nodeInstStatus = "4";
423
+ item.nodeInstStatusName = "已中止";
424
+ break;
425
+ default:
426
+ break;
427
+ }
428
+ // calledCaseInstanceId是1.0版本数据的nodeInstStatus
429
+ switch (item.calledCaseInstanceId) {
430
+ case "3":
431
+ item.nodeInstStatus = "3";
432
+ item.nodeInstStatusName = "已退回";
433
+ break;
434
+ case "2":
435
+ item.nodeInstStatus = "2";
436
+ item.nodeInstStatusName = "已取回";
437
+ break;
438
+ case "5":
439
+ item.nodeInstStatus = "5";
440
+ item.nodeInstStatusName = "已被发起人撤销";
441
+ break;
442
+ case "4":
443
+ item.nodeInstStatus = "4";
444
+ item.nodeInstStatusName = "已中止";
445
+ break;
446
+ case "7":
447
+ item.nodeInstStatus = "7";
448
+ item.nodeInstStatusName = "已转签";
449
+ break;
450
+ default:
451
+ break;
452
+ }
453
+ if(item.activityType == "startEvent"){
454
+ item.actorUserName = "";
455
+ }else if(variables["resolve_" + item.taskId]){ // 代理
456
+ item.actorUserName += "(由用户‘"+ userIdsMap[variables["resolve_" + item.taskId]] + "’代理完成)";
457
+ }else if(variables["getBack_" + item.taskId]){ // 取回
458
+ item.nodeInstStatus = "2";
459
+ item.actorUserName += "(由用户‘"+ userIdsMap[variables["getBack_" + item.taskId]] + "’取回)";
460
+ }else if(variables["back_" + item.taskId]){ // 退回
461
+ item.nodeInstStatus = "3";
462
+ item.actorUserName += "(由用户‘"+ userIdsMap[variables["back_" + item.taskId]] + "’退回)";
463
+ }else if(Object.keys(variables).indexOf("autoEnd_" + item.taskId) > -1){ // 自动处理
464
+ item.actorUserName += "(系统自动处理)";
465
+ }else if(variables["assignTask_" + item.taskId]){ // 退回
466
+ item.actorUserName += "(已加签)";
467
+ }else if(variables["addSignGetBack_" + item.taskId]){ // 加签取回
468
+ item.nodeInstStatus = "2";
469
+ item.actorUserName += "(由用户‘"+ userIdsMap[variables["addSignGetBack_" + item.taskId]] + "’取回)";
470
+ }else{
471
+ item.actorUserName += "(" + item.nodeInstStatusName + ")";
472
+ }
473
+ if(turnSignObj[item.taskId]){
474
+ if(!getbackObj[item.taskId]){
475
+ item.actorUserName += "(转签任务)";
476
+ }
477
+ item.turnSign = turnSignObj[item.taskId];
478
+ }
479
+ });
480
+
481
+ this.flowInstNodeArr.forEach(item => {
482
+ if(addSignObj[item.taskId]){
483
+ item.isAppendsign = 1;
484
+ item.addSignArr = addSignObj[item.taskId];
485
+ }
486
+ if(multiInstanceArr.indexOf(item.activityId) > -1 && !item.wasAppendSign){
487
+ // 判断多实例对象
488
+ Object.keys(multiInstanceBodyObj).forEach(instanceKey => {
489
+ let instance = multiInstanceBodyObj[instanceKey];
490
+ let activityId = instance["activityId"];
491
+ activityId = activityId.substring(0,activityId.lastIndexOf("#"));
492
+ if(activityId == item.activityId
493
+ && instance.startTime <= item.startTime
494
+ && instance.endTime >= item.endTime
495
+ && ((instance.endTime && item.endTime) || !instance.endTime)){
496
+ if(!instance.manyChild){
497
+ instance.manyChild = [item];
498
+ }else{
499
+ instance.manyChild.push(item);
500
+ }
501
+ }
502
+ })
503
+ }
504
+ })
505
+
506
+ let removeIds = [];
507
+ Object.keys(multiInstanceBodyObj).forEach(key => {
508
+ let multiInstance = multiInstanceBodyObj[key];
509
+ if((multiInstance.manyChild || []).length > 1){
510
+ multiInstance.manyChild.forEach(item => {
511
+ removeIds.push(item.id);
512
+ })
513
+ }else{
514
+ removeIds.push(key);
515
+ }
516
+ })
517
+
518
+ let inclusiveWayArr = [];
519
+ this.flowInstNodeArr = this.flowInstNodeArr.filter(item => {
520
+ let result = true;
521
+ if(item.activityType == "multiInstanceBody" && removeIds.indexOf(item.id) == -1){
522
+ let arrName = [];
523
+ item.manyChild.forEach(value => {
524
+ arrName.push(value.actorUserName);
525
+ item.activityName = value.activityName;
526
+ })
527
+ if(item.endTime){
528
+ item.actorUserName = "多人处理(已完成)";
529
+ }else{
530
+ item.actorUserName = "多人处理";
531
+ }
532
+ item.nodeMask = arrName.join(",");
533
+ }if(item.activityType == "inclusiveGateway"){
534
+ if(inclusiveWayArr.indexOf(item.activityId) == -1){
535
+ inclusiveWayArr.push(item.activityId);
536
+ }else{
537
+ result = false;
538
+ }
539
+ }else{
540
+ if(removeIds.indexOf(item.id) > -1 || addSignIds.indexOf(item.id) > -1){
541
+ result = false;
542
+ }
543
+ }
544
+
545
+ return result;
546
+ })
547
+ this.flowInstNodeArr = this.flowInstNodeArr.sort(this.sortInst);
548
+ this.loading = false;
549
+ // console.log('this.flowInstNodeArr', this.flowInstNodeArr);
550
+ })
551
+ },
552
+
553
+ sortInst(a,b){
554
+ if(a.endTime && b.endTime){
555
+ if(a.activityType == "startEvent"){
556
+ return -1;
557
+ }
558
+ if(b.activityType == "startEvent"){
559
+ return 1;
560
+ }
561
+ if(a.activityId == b.activityId){
562
+ return a.endTime - b.endTime;
563
+ }
564
+ if(a.endTime == b.endTime){
565
+ if((a.activityId || "").indexOf("Activity_draft") > -1 && (a.tenantId == '1')){
566
+ return -1;
567
+ }
568
+ if((b.activityId || "").indexOf("Activity_draft") > -1 && (a.tenantId == '1')){
569
+ return 1;
570
+ }
571
+ }
572
+ return a.endTime - b.endTime;
573
+ }
574
+
575
+ if(a.startTime == b.startTime){
576
+ if(!a.endTime){
577
+ return 1;
578
+ }
579
+ if(!b.endTime){
580
+ return -1;
581
+ }
582
+ if(a.activityType == "startEvent"){
583
+ return -1;
584
+ }
585
+ if(b.activityType == "startEvent"){
586
+ return 1;
587
+ }
588
+ return a.endTime - b.endTime;
589
+ }
590
+
591
+ },
592
+
593
+ /**
594
+ * 查看加签信息
595
+ */
596
+ showCompleteSignInfos(flowInstNodeIds) {
597
+ this.flowNodeAppendSignDatas = this.viewAppendSign(flowInstNodeIds);
598
+ },
599
+
600
+ /**
601
+ * 获取流程节点示例对应的图标
602
+ */
603
+ nodeInstIcon(nodeInst) {
604
+ if (nodeInst.activityType == "startEvent") {
605
+ return "el-icon-caret-right";
606
+ } else if (nodeInst.activityType == "userTask") {
607
+ return "el-icon-user-solid";
608
+ }else if(nodeInst.activityType == "multiInstanceBody"){
609
+ return "saspiconfont pl-icon-yonghu";
610
+ }else if (nodeInst.activityType == 'parallelGateway'
611
+ || nodeInst.activityType == 'exclusiveGateway'
612
+ || nodeInst.activityType == 'inclusiveGateway') {
613
+ return "el-icon-setting";
614
+ } else {
615
+ return "el-icon-circle-check";
616
+ }
617
+ },
618
+
619
+ viewAppendSign(signNodeId) {
620
+ let appendSignNodeIds = "$," + signNodeId; // 上一节点ID串
621
+ let isExitNextId = true; // 是否存在下一节点
622
+ let index = 0; // 循环变量,预防死循环
623
+ let iAppendSignSize = this.appendSignNodeArr.length; // 加签数组长度
624
+ let arrShowNodes = []; // 存储要展示的加签节点
625
+
626
+ // 根据获取要展示的加签节点
627
+ while ((index++) < iAppendSignSize && isExitNextId) {
628
+ // 置为不存在下一节点
629
+ isExitNextId = false;
630
+
631
+ // 循环加签数组
632
+ for (let i = 0; i < iAppendSignSize; i++) {
633
+ // 若匹配且非已获取过的加签节点
634
+ if (appendSignNodeIds.indexOf(this.appendSignNodeArr[i].preNodeInstId) > -1
635
+ && appendSignNodeIds.indexOf(this.appendSignNodeArr[i].id) == -1
636
+ ) {
637
+ // 置为存在下一节点
638
+ isExitNextId = true;
639
+ // 拼接进上一节点ID串中,待下一次外层循环中重新进行匹配
640
+ appendSignNodeIds += "," + this.appendSignNodeArr[i].id;
641
+ // 添加至要展示的加签节点数组
642
+ arrShowNodes.push(this.appendSignNodeArr[i]);
643
+ }
644
+ }
645
+ }
646
+
647
+ let nodeTmp = null; //用于冒泡排序的临时变量
648
+
649
+ // 对要展示的加签节点数组按处理时间进行冒泡排序
650
+ for (let i = 0; i < arrShowNodes.length; i++) {
651
+ for (let j = i + 1; j < arrShowNodes.length; j++) {
652
+ if (arrShowNodes[j].startTime && arrShowNodes[j].endTime
653
+ && (arrShowNodes[j].startTime <= arrShowNodes[i].startTime)
654
+ && (arrShowNodes[j].endTime <= arrShowNodes[i].endTime)) {
655
+ nodeTmp = arrShowNodes[i];
656
+ arrShowNodes[i] = arrShowNodes[j];
657
+ arrShowNodes[j] = nodeTmp;
658
+ }
659
+ }
660
+ }
661
+
662
+ return arrShowNodes;
663
+ }
664
+ }
665
+ }
666
+ </script>
667
+
668
+ <style lang="scss">
669
+ .append-sign-popup {
670
+ box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.5);
671
+ }
672
+ </style>
673
+
674
+ <style scoped lang="scss">
675
+ #roamRecordContainer {
676
+ padding: 10px 20px;
677
+ overflow-y: scroll;
678
+ }
679
+ /*滚动条样式*/
680
+ .pos-abs-full::-webkit-scrollbar-thumb {
681
+ border-radius: 3px !important;
682
+ background-color: #dddddd !important;
683
+ }
684
+
685
+ .flow-summary {
686
+ line-height: 26px;
687
+ }
688
+
689
+ .flow-color {
690
+ .flow-color-content {
691
+ line-height: 26px;
692
+
693
+ .flow-color-item {
694
+ padding-right: 10px;
695
+
696
+ .flow-color-item-radius {
697
+ width: 16px;
698
+ height: 16px;
699
+ border-radius: 8px;
700
+ display: inline-block;
701
+ vertical-align: middle;
702
+ margin-right: 3px;
703
+ }
704
+
705
+ .flow-color-item-text {
706
+ height: 26px;
707
+
708
+ display: inline-block;
709
+ vertical-align: middle;
710
+ }
711
+ }
712
+ }
713
+ }
714
+
715
+ .flow-roam-record-content {
716
+ padding: 20px 20px 0 20px;
717
+
718
+ /deep/ {
719
+
720
+
721
+ .appendsign-item {
722
+ .appendsign-item-mask {
723
+ position: absolute;
724
+ left: -20px;
725
+ width: 52px;
726
+ height: 55px;
727
+ top: 0;
728
+ cursor: pointer;
729
+
730
+ .appendsign-item-icon {
731
+ position: absolute;
732
+ right: -10px;
733
+ top: -15px;
734
+ font-size: 20px;
735
+ color: #666;
736
+ }
737
+ }
738
+
739
+ }
740
+
741
+ .table-node-inst-status-item {
742
+ display: inline-block;
743
+ line-height: 26px;
744
+ border-radius: 3px;
745
+ padding: 0 10px;
746
+ color: white;
747
+ }
748
+
749
+ .el-timeline-item__wrapper {
750
+ padding-left: 45px;
751
+ }
752
+
753
+ .el-timeline-item__node--normal {
754
+ width: 50px;
755
+ height: 50px;
756
+ left: -20px;
757
+
758
+ .el-timeline-item__icon {
759
+ font-size: 35px;
760
+ }
761
+ }
762
+
763
+ .el-card__header {
764
+ padding: 12px 20px;
765
+ }
766
+ }
767
+ }
768
+ </style>