@lambo-design/workflow-approve 1.0.0-beta.11 → 1.0.0-beta.111
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/index.js +4 -1
- package/package.json +5 -4
- package/src/components/assignee-box.vue +586 -111
- package/src/components/candidate-groups-box.vue +1948 -0
- package/src/components/countersigners-box.vue +858 -0
- package/src/components/history.vue +885 -378
- package/src/components/horizontal/history.vue +497 -464
- package/src/components/opinion.vue +322 -302
- package/src/components/process-info.vue +546 -0
- package/src/horizontal.vue +1098 -1002
- package/src/portrait.vue +1927 -568
- package/src/styles/css/index.less +385 -220
- package/src/utils/const.js +36 -0
- package/src/workflow-diagram.vue +930 -332
|
@@ -1,30 +1,48 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
-
<Modal v-model="modalBoxShow" width="1217" title="
|
|
3
|
+
<Modal v-model="modalBoxShow" width="1217" :title="title" @on-ok="onOk" @on-cancel="onCancel" loading>
|
|
4
4
|
<div class="org-info">
|
|
5
|
-
<div class="org-tree">
|
|
6
|
-
<
|
|
5
|
+
<div class="org-tree" v-if="!useTransferRangeUsers">
|
|
6
|
+
<div class="tree-content">
|
|
7
|
+
<div v-if="treeData.length === 0">暂无数据</div>
|
|
8
|
+
<Tree v-else v-for="(item,index) in treeData" :key="index" :data="item" ref="treeBM"
|
|
9
|
+
:load-data="loadData" @on-select-change="selectChange"></Tree>
|
|
10
|
+
<!-- <Tree :data="treeData" :load-data="loadData" @on-select-change="selectChange"></Tree>-->
|
|
11
|
+
</div>
|
|
7
12
|
</div>
|
|
8
13
|
<div class="org-detil">
|
|
9
|
-
<LamboPagingTable ref="selection" :dataUrl="dataUrl" :columns="tableColumn" :searchParams="tableSearchParams"
|
|
10
|
-
@on-selection-change="onSelectionChange">
|
|
11
|
-
<div slot="search">
|
|
12
|
-
<Form :label-width="
|
|
13
|
-
<
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
14
|
+
<LamboPagingTable :key="useTransferRangeUsers" ref="selection" highlight-row :data="tableData" :dataUrl="dataUrl" :columns="tableColumn" :searchParams="tableSearchParams" :height="tableHeight"
|
|
15
|
+
@on-selection-change="onSelectionChange" @on-current-change="onCurrentChange" :page-disable="useTransferRangeUsers" :showTableOption="!useTransferRangeUsers">
|
|
16
|
+
<div slot="search" v-if="!useTransferRangeUsers">
|
|
17
|
+
<Form :label-width="60" label-colon>
|
|
18
|
+
<Row>
|
|
19
|
+
<Col span="6">
|
|
20
|
+
<FormItem label="账号">
|
|
21
|
+
<Input v-model="form.userId" placeholder="按账号搜索" />
|
|
22
|
+
</FormItem>
|
|
23
|
+
</Col>
|
|
24
|
+
<Col span="6">
|
|
25
|
+
<FormItem label="姓名">
|
|
26
|
+
<Input v-model="form.userName" placeholder="按姓名搜索" />
|
|
27
|
+
</FormItem>
|
|
28
|
+
</Col>
|
|
29
|
+
<Col span="8">
|
|
30
|
+
<FormItem label="是否管理员" prop="isAdmin" :labelWidth="100">
|
|
31
|
+
<RadioGroup v-model="form.isAdmin">
|
|
32
|
+
<Radio label="">全部</Radio>
|
|
33
|
+
<Radio label="1">是</Radio>
|
|
34
|
+
<Radio label="0">否</Radio>
|
|
35
|
+
</RadioGroup>
|
|
36
|
+
</FormItem>
|
|
37
|
+
</Col>
|
|
38
|
+
<Col span="4">
|
|
39
|
+
<FormItem >
|
|
40
|
+
<Button type="primary" icon="ios-search" @click="doSearch">查询</Button>
|
|
41
|
+
</FormItem>
|
|
42
|
+
</Col>
|
|
43
|
+
</Row>
|
|
44
|
+
|
|
26
45
|
<FormItem>
|
|
27
|
-
<Button type="primary" icon="ios-search" @click="doSearch">查询</Button>
|
|
28
46
|
</FormItem>
|
|
29
47
|
</Form>
|
|
30
48
|
</div>
|
|
@@ -67,12 +85,27 @@ export default {
|
|
|
67
85
|
type: String,
|
|
68
86
|
default: '/api/upms-server',
|
|
69
87
|
},
|
|
88
|
+
//是否展示操作按钮二次弹框
|
|
89
|
+
showConfirmBox: {
|
|
90
|
+
type: Boolean,
|
|
91
|
+
required: false,
|
|
92
|
+
default: false
|
|
93
|
+
},
|
|
70
94
|
},
|
|
71
95
|
data() {
|
|
72
96
|
return {
|
|
97
|
+
id: '',
|
|
98
|
+
title: '选择办理人',
|
|
99
|
+
helpBoxType: 'auditTo82',
|
|
100
|
+
ucAdapterType: 'x1',
|
|
101
|
+
useTransferRangeUsers: false,
|
|
102
|
+
useTransferRangeOrgan: false,
|
|
73
103
|
loading: false,
|
|
104
|
+
organTreeType: '00',
|
|
105
|
+
permScope: 'all',
|
|
74
106
|
modalBoxShow: false,
|
|
75
107
|
dataUrl:'',
|
|
108
|
+
tableData:[],
|
|
76
109
|
helpBoxColumns: [
|
|
77
110
|
{
|
|
78
111
|
title: "用户ID",
|
|
@@ -105,20 +138,25 @@ export default {
|
|
|
105
138
|
};
|
|
106
139
|
},
|
|
107
140
|
created () {
|
|
108
|
-
this.
|
|
141
|
+
this.getSystemConfig()
|
|
109
142
|
},
|
|
110
143
|
computed: {
|
|
111
|
-
|
|
144
|
+
tableHeight(){
|
|
145
|
+
return this.useTransferRangeUsers ? 600 : 0
|
|
146
|
+
},
|
|
112
147
|
tableColumn () {
|
|
113
148
|
let columns = []
|
|
114
149
|
let self = this
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
150
|
+
// 加签/选择候选人可多选
|
|
151
|
+
if (this.helpBoxType === 'addMultitaskInstance' || this.helpBoxType === 'appointHandlerWithCandGroups'){
|
|
152
|
+
columns.push({
|
|
153
|
+
title: '#',
|
|
154
|
+
key: 'selectId',
|
|
155
|
+
type: 'selection',
|
|
156
|
+
align: 'center',
|
|
157
|
+
width: 55
|
|
158
|
+
})
|
|
159
|
+
}
|
|
122
160
|
columns.push({
|
|
123
161
|
title: '账号',
|
|
124
162
|
key: 'userId',
|
|
@@ -131,92 +169,221 @@ export default {
|
|
|
131
169
|
sortField: 'user_name',
|
|
132
170
|
sortable: 'custom'
|
|
133
171
|
})
|
|
172
|
+
|
|
173
|
+
if (self.useTransferRangeUsers && self.ucAdapterType == 'x1'){
|
|
174
|
+
columns.push({
|
|
175
|
+
title: '联系电话',
|
|
176
|
+
key: 'tel',
|
|
177
|
+
sortField: 'tel',
|
|
178
|
+
sortable: 'custom'
|
|
179
|
+
})
|
|
180
|
+
}
|
|
134
181
|
columns.push({
|
|
135
182
|
title: '部门名称',
|
|
136
183
|
key: 'organName',
|
|
137
184
|
sortField: 'organ_name',
|
|
138
185
|
sortable: 'custom'
|
|
139
186
|
})
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
187
|
+
if (self.useTransferRangeUsers && self.ucAdapterType == 'x1'){
|
|
188
|
+
columns.push({
|
|
189
|
+
title: '公司名称',
|
|
190
|
+
key: 'comName',
|
|
191
|
+
sortField: 'com_name',
|
|
192
|
+
sortable: 'custom'
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
if (!self.useTransferRangeUsers){
|
|
196
|
+
{
|
|
197
|
+
columns.push({
|
|
198
|
+
title: '状态',
|
|
199
|
+
key: 'status',
|
|
200
|
+
sortable: 'custom',
|
|
201
|
+
align: 'center',
|
|
202
|
+
width: 100,
|
|
203
|
+
render: function (h, param) {
|
|
204
|
+
let state = param.row.status
|
|
205
|
+
if (state === '00') {
|
|
206
|
+
state = '正常'
|
|
207
|
+
} else {
|
|
208
|
+
state = '锁定'
|
|
209
|
+
}
|
|
210
|
+
return h('span', state)
|
|
211
|
+
}
|
|
212
|
+
})
|
|
154
213
|
}
|
|
155
|
-
}
|
|
214
|
+
}
|
|
156
215
|
|
|
157
216
|
return columns
|
|
158
217
|
}
|
|
159
218
|
},
|
|
160
219
|
inject: ['toBeDoneListDoSearch'],
|
|
161
220
|
methods: {
|
|
162
|
-
init () {
|
|
221
|
+
init (organTreeType) {
|
|
163
222
|
let self = this
|
|
164
|
-
self.
|
|
223
|
+
self.organTreeType = organTreeType
|
|
224
|
+
self.getRootData(organTreeType)
|
|
225
|
+
},
|
|
226
|
+
clearData(){
|
|
227
|
+
this.idSelectedArr = []
|
|
228
|
+
this.useTransferRangeUsers = false
|
|
229
|
+
//清除表格数据
|
|
230
|
+
this.doSearch()
|
|
165
231
|
},
|
|
166
|
-
toggleShowHelpBox() {
|
|
232
|
+
toggleShowHelpBox(organTreeType, permScope, helpBoxType, id, data) {
|
|
233
|
+
this.clearData()
|
|
234
|
+
this.id = id
|
|
235
|
+
this.helpBoxType = helpBoxType
|
|
236
|
+
this.organTreeType = organTreeType
|
|
237
|
+
if (helpBoxType === 'appointHandlerWithCandGroups'){
|
|
238
|
+
this.title = '选择候选人'
|
|
239
|
+
}
|
|
240
|
+
if (data && (data.orgList || data.userList)){
|
|
241
|
+
const {orgList, userList} = data
|
|
242
|
+
if (orgList && orgList.length > 0){
|
|
243
|
+
this.useTransferRangeOrgan = true
|
|
244
|
+
let childs = []
|
|
245
|
+
orgList.forEach(item => {
|
|
246
|
+
let obj = {}
|
|
247
|
+
obj.organId = item.orgId
|
|
248
|
+
obj.title = item.orgName
|
|
249
|
+
obj.name = item.orgName
|
|
250
|
+
obj.code = item.orgCode
|
|
251
|
+
obj.loading = false
|
|
252
|
+
obj.children = []
|
|
253
|
+
obj.hasChild = true
|
|
254
|
+
childs.push(obj)
|
|
255
|
+
})
|
|
256
|
+
this.treeData.push(childs)
|
|
257
|
+
const codesSeen = new Map();
|
|
258
|
+
this.treeData = this.treeData.reduce((acc, item, index) => {
|
|
259
|
+
if (!codesSeen.has(item.code)) {
|
|
260
|
+
codesSeen.set(item.code, index);
|
|
261
|
+
acc.push(item);
|
|
262
|
+
}
|
|
263
|
+
return acc;
|
|
264
|
+
}, []);
|
|
265
|
+
this.selectChange(this.treeData[0])
|
|
266
|
+
this.modalBoxShow = !this.modalBoxShow;
|
|
267
|
+
this.$forceUpdate()
|
|
268
|
+
return
|
|
269
|
+
}
|
|
270
|
+
if (userList && userList.length > 0){
|
|
271
|
+
this.treeData = []
|
|
272
|
+
this.useTransferRangeUsers = true
|
|
273
|
+
this.tableData = userList.map(item => {
|
|
274
|
+
return {
|
|
275
|
+
...item,
|
|
276
|
+
organName: item.deptName,
|
|
277
|
+
status: '00'
|
|
278
|
+
}
|
|
279
|
+
})
|
|
280
|
+
this.modalBoxShow = !this.modalBoxShow;
|
|
281
|
+
this.$forceUpdate()
|
|
282
|
+
return
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
this.permScope = permScope
|
|
286
|
+
if (permScope && permScope !== 'all'){
|
|
287
|
+
this.getOrgTreeByProType(this.permScope, this.organTreeType)
|
|
288
|
+
} else {
|
|
289
|
+
this.permScopeList = 'all'
|
|
290
|
+
this.getRootData(organTreeType)
|
|
291
|
+
}
|
|
167
292
|
this.modalBoxShow = !this.modalBoxShow;
|
|
293
|
+
this.$forceUpdate()
|
|
168
294
|
},
|
|
169
295
|
|
|
170
296
|
onOk(){
|
|
171
297
|
let self = this
|
|
172
298
|
let idSelectedArr = self.idSelectedArr
|
|
299
|
+
if (self.idSelectedArr.length === 0) {
|
|
300
|
+
self.onCancel()
|
|
301
|
+
return
|
|
302
|
+
}
|
|
173
303
|
self.loading = true
|
|
174
|
-
if (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
304
|
+
if (self.helpBoxType ==='addMultitaskInstance'){
|
|
305
|
+
idSelectedArr = [...new Set(idSelectedArr)]
|
|
306
|
+
const assingeeList = idSelectedArr.map(item => item.split(',')[0])
|
|
307
|
+
self.$emit('add-multitask-instance', assingeeList);
|
|
308
|
+
}else if (self.helpBoxType ==='appointHandlerWithCandGroups'){
|
|
309
|
+
idSelectedArr = [...new Set(idSelectedArr)]
|
|
310
|
+
self.$emit('appoint-handler-with-candGroups', idSelectedArr, self.id);
|
|
178
311
|
} else {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
self.loading = false
|
|
190
|
-
self.$Message.success(result.message);
|
|
191
|
-
if (this.executionCompleted) {
|
|
192
|
-
this.executionCompleted(true, self.data.instanceId, self.data.taskId, auditResult, self.data.taskId);
|
|
312
|
+
if (idSelectedArr.length > 1) {
|
|
313
|
+
self.loading = false
|
|
314
|
+
self.$Message.info('办理人只能选择一条记录!')
|
|
315
|
+
this.$emit('update-selected', ''); // 触发事件并传递 userId
|
|
316
|
+
} else {
|
|
317
|
+
let idSelectedArr = self.idSelectedArr[0].split(',')
|
|
318
|
+
if (self.helpBoxType === 'auditTo82'){
|
|
319
|
+
let auditResult = {
|
|
320
|
+
code: self.data.auditResult,
|
|
321
|
+
name: self.data.auditResultName,
|
|
193
322
|
}
|
|
194
|
-
self.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
self.$Message.error(result.message)
|
|
198
|
-
if (this.executionCompleted) {
|
|
199
|
-
this.executionCompleted(false, null, null, auditResult, self.data.taskId);
|
|
323
|
+
if (!self.showConfirmBox){
|
|
324
|
+
self.execute(auditResult)
|
|
325
|
+
return;
|
|
200
326
|
}
|
|
327
|
+
self.$Modal.confirm({
|
|
328
|
+
title: '提示',
|
|
329
|
+
content: '确定要' + auditResult.name + '吗?',
|
|
330
|
+
onOk: () => {
|
|
331
|
+
self.execute(auditResult)
|
|
332
|
+
},
|
|
333
|
+
onCancel: () => {
|
|
334
|
+
self.loading = false
|
|
335
|
+
self.disable = false
|
|
336
|
+
}
|
|
337
|
+
})
|
|
338
|
+
} else if (self.helpBoxType === 'delegateTask'){
|
|
339
|
+
self.$emit('delegate-task-assignee', idSelectedArr[0]);
|
|
340
|
+
} else {
|
|
341
|
+
self.$emit('update-next-node-assignee', idSelectedArr[0], idSelectedArr[1], self.id);
|
|
201
342
|
}
|
|
202
|
-
}
|
|
343
|
+
}
|
|
203
344
|
}
|
|
204
345
|
this.modalBoxShow = false;
|
|
205
346
|
},
|
|
206
|
-
|
|
207
|
-
|
|
347
|
+
execute(auditResult){
|
|
348
|
+
const self = this
|
|
349
|
+
self.data.selectedUserId=idSelectedArr[0];
|
|
350
|
+
let url = this.smartFlowServerContext + '/manage/processTodo/audit'
|
|
351
|
+
ajax.post(url, self.data).then(function (resp) {
|
|
352
|
+
let result = resp.data
|
|
353
|
+
if (result.code == '200') {
|
|
354
|
+
self.loading = false
|
|
355
|
+
self.$Message.success(result.message);
|
|
356
|
+
if (self.executionCompleted) {
|
|
357
|
+
self.executionCompleted(true, self.data.instanceId, self.data.taskId, auditResult, self.data.taskId);
|
|
358
|
+
}
|
|
359
|
+
self.toBeDoneListDoSearch();
|
|
360
|
+
} else {
|
|
361
|
+
self.loading = false
|
|
362
|
+
self.$Message.error(result.message)
|
|
363
|
+
if (self.executionCompleted) {
|
|
364
|
+
self.executionCompleted(false, null, null, auditResult, self.data.taskId);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
})
|
|
368
|
+
},
|
|
208
369
|
doSearch: function () {
|
|
209
370
|
this.tableSearchParams = Object.assign({}, this.form)
|
|
210
371
|
},
|
|
372
|
+
// 加签、选择下一环节候选人
|
|
211
373
|
onSelectionChange: function (selection) {
|
|
212
374
|
let self = this
|
|
213
|
-
self.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
375
|
+
if (self.helpBoxType === 'addMultitaskInstance' || self.helpBoxType === 'appointHandlerWithCandGroups') {
|
|
376
|
+
for (let item of selection) {
|
|
377
|
+
self.idSelectedArr.push(item.userId + ',' + item.userName)
|
|
378
|
+
}
|
|
217
379
|
}
|
|
218
|
-
|
|
219
|
-
|
|
380
|
+
},
|
|
381
|
+
// 转办、委派、选择下一环节办理人
|
|
382
|
+
onCurrentChange(selection) {
|
|
383
|
+
let self = this
|
|
384
|
+
if (self.helpBoxType !== 'addMultitaskInstance' && self.helpBoxType !== 'appointHandlerWithCandGroups') {
|
|
385
|
+
self.idSelectedArr = []
|
|
386
|
+
self.idSelectedArr.push(selection.userId + ',' + selection.userName)
|
|
220
387
|
}
|
|
221
388
|
},
|
|
222
389
|
loadData (node, callback) {
|
|
@@ -226,50 +393,332 @@ export default {
|
|
|
226
393
|
}
|
|
227
394
|
})
|
|
228
395
|
},
|
|
229
|
-
getRootData () {
|
|
396
|
+
getRootData (organTreeType) {
|
|
230
397
|
let self = this
|
|
231
|
-
let
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
398
|
+
let hostChilds = []
|
|
399
|
+
if (self.ucAdapterType === 'x1'){
|
|
400
|
+
let parentId = organTreeType == '00' ? 'rootId' : '0'
|
|
401
|
+
ajax.get(self.smartFlowServerContext + '/manage/organ/getOrgSubNodes', {
|
|
402
|
+
params: {
|
|
403
|
+
code: parentId,
|
|
404
|
+
orgTreeType: organTreeType
|
|
405
|
+
}
|
|
406
|
+
}).then(resp => {
|
|
407
|
+
if (resp.data.code === 200) {
|
|
408
|
+
let data = resp.data.data
|
|
409
|
+
if (data.length > 0) {
|
|
410
|
+
data.forEach(item => {
|
|
411
|
+
let obj = {}
|
|
412
|
+
obj.type = item.organType
|
|
413
|
+
obj.id = item.id
|
|
414
|
+
obj.organId = item.organId
|
|
415
|
+
obj.orders = item.orders
|
|
416
|
+
obj.title = item.organName
|
|
417
|
+
obj.name = item.organName
|
|
418
|
+
obj.com = item.com
|
|
419
|
+
obj.code = item.organCode
|
|
420
|
+
obj.loading = false
|
|
421
|
+
obj.children = []
|
|
422
|
+
obj.hasChild = true
|
|
423
|
+
hostChilds.push(obj)
|
|
424
|
+
})
|
|
425
|
+
self.treeData.push(hostChilds)
|
|
426
|
+
const codesSeen = new Map();
|
|
427
|
+
self.treeData = self.treeData.reduce((acc, item, index) => {
|
|
428
|
+
if (!codesSeen.has(item.code)) {
|
|
429
|
+
codesSeen.set(item.code, index);
|
|
430
|
+
acc.push(item);
|
|
431
|
+
}
|
|
432
|
+
return acc;
|
|
433
|
+
}, []);
|
|
434
|
+
self.selectChange(self.treeData[0])
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}).catch(err => {
|
|
438
|
+
console.log(err);
|
|
439
|
+
})
|
|
440
|
+
} else {
|
|
441
|
+
ajax.get(self.smartFlowServerContext + '/manage/bizorgan/getOrgRootTree?bizOrganTreeType=' + organTreeType).then(resp => {
|
|
442
|
+
if (resp.data.code === 200) {
|
|
443
|
+
let data = resp.data.data
|
|
444
|
+
if (data.length > 0) {
|
|
445
|
+
for (let i = 0; i < data.length; i++) {
|
|
446
|
+
{
|
|
447
|
+
let obj = {}
|
|
448
|
+
obj.type = data[i].bizOrganType
|
|
449
|
+
obj.id = data[i].id
|
|
450
|
+
obj.organId = data[i].bizOrganId
|
|
451
|
+
obj.orders = data[i].orders
|
|
452
|
+
obj.title = data[i].bizOrganName
|
|
453
|
+
obj.name = data[i].bizOrganName
|
|
454
|
+
obj.com = data[i].bizOrganId
|
|
455
|
+
obj.code = data[i].bizOrganCode
|
|
456
|
+
obj.loading = false
|
|
457
|
+
obj.children = []
|
|
458
|
+
obj.hasChild = true
|
|
459
|
+
hostChilds.push(obj)
|
|
460
|
+
self.treeData.push(hostChilds);
|
|
461
|
+
const codesSeen = new Map();
|
|
462
|
+
self.treeData = self.treeData.reduce((acc, item, index) => {
|
|
463
|
+
if (!codesSeen.has(item.code)) {
|
|
464
|
+
codesSeen.set(item.code, index);
|
|
465
|
+
acc.push(item);
|
|
466
|
+
}
|
|
467
|
+
return acc;
|
|
468
|
+
}, []);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
self.selectChange(self.treeData[0])
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}).catch(err => {
|
|
475
|
+
console.log(err);
|
|
476
|
+
})
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
async getOrgTreeByProType(permScope, organTreeType){
|
|
480
|
+
let self = this
|
|
481
|
+
let userPermScope = permScope.substring(permScope.indexOf("U:"))
|
|
482
|
+
userPermScope = userPermScope.substring(2, userPermScope.indexOf(","))
|
|
483
|
+
let permScopeTwo = userPermScope.split(';')
|
|
484
|
+
if (permScopeTwo.length > 0 && permScopeTwo[0]){
|
|
485
|
+
self.permScopeList = 'U:' + userPermScope + ','
|
|
486
|
+
let promises = []
|
|
487
|
+
for (let i = 0; i < permScopeTwo.length; i++) {
|
|
488
|
+
let promise = ajax.get(self.smartFlowServerContext + "/manage/user/get/" + permScopeTwo[i] + '?treeType=' + organTreeType)
|
|
489
|
+
.then(resp => {
|
|
490
|
+
if (resp.data.code === 200) {
|
|
491
|
+
return resp.data.data.organCode
|
|
492
|
+
}
|
|
493
|
+
})
|
|
494
|
+
promises.push(promise)
|
|
495
|
+
}
|
|
496
|
+
Promise.all(promises).then(async (result) => {
|
|
497
|
+
const uniqueResults = [...new Set(result.filter(Boolean))];
|
|
498
|
+
permScope = uniqueResults.join(';');
|
|
499
|
+
self.treeData = await this.getOrganTreeByProType(permScope, permScope, organTreeType);
|
|
500
|
+
self.selectChange(self.treeData[0])
|
|
501
|
+
})
|
|
502
|
+
} else {
|
|
503
|
+
//对于流程类型中没有规定人员范围但规定组织范围的情况
|
|
504
|
+
self.treeData = await this.getOrganTreeByProType(permScope, permScope.substring(2, permScope.indexOf(",")), organTreeType);
|
|
505
|
+
self.selectChange(self.treeData[0])
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
getOrganTreeByProType(row, permScope, organTreeType) {
|
|
509
|
+
const self = this
|
|
510
|
+
return new Promise((resolve, reject) => {
|
|
511
|
+
let organTree = [];
|
|
512
|
+
let childsTree = [];
|
|
513
|
+
if (permScope && permScope.length > 0) {
|
|
514
|
+
let params = {
|
|
515
|
+
orgTreeType: organTreeType,
|
|
516
|
+
};
|
|
517
|
+
permScope = permScope.split(';');
|
|
518
|
+
|
|
519
|
+
const requests = permScope.map(perm => {
|
|
520
|
+
return ajax.get(self.smartFlowServerContext + '/manage/organ/get/' + perm, { params: params })
|
|
521
|
+
.then(resp => {
|
|
522
|
+
if (resp.data.code === 200) {
|
|
523
|
+
return resp.data.data;
|
|
524
|
+
} else {
|
|
525
|
+
return [];
|
|
526
|
+
}
|
|
527
|
+
})
|
|
528
|
+
.catch(err => {
|
|
529
|
+
console.error(err);
|
|
530
|
+
return [];
|
|
531
|
+
});
|
|
532
|
+
});
|
|
533
|
+
|
|
534
|
+
Promise.all(requests)
|
|
535
|
+
.then(results => {
|
|
536
|
+
let tree
|
|
537
|
+
if (self.ucAdapterType === 'x1'){
|
|
538
|
+
tree = self.x1OrganTree(results)
|
|
539
|
+
} else {
|
|
540
|
+
tree = self.scOrganTree(results)
|
|
541
|
+
}
|
|
542
|
+
for (let value of tree) {
|
|
543
|
+
self.formatOrganTree(value, childsTree, organTreeType)
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
organTree.push(childsTree);
|
|
547
|
+
const codesSeen = new Map();
|
|
548
|
+
organTree = organTree.reduce((acc, item, index) => {
|
|
549
|
+
if (!codesSeen.has(item.code)) {
|
|
550
|
+
codesSeen.set(item.code, index);
|
|
551
|
+
acc.push(item);
|
|
552
|
+
}
|
|
553
|
+
return acc;
|
|
554
|
+
}, []);
|
|
555
|
+
resolve(organTree);
|
|
249
556
|
})
|
|
557
|
+
.catch(err => {
|
|
558
|
+
reject(err);
|
|
559
|
+
});
|
|
560
|
+
} else {
|
|
561
|
+
resolve([]);
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
},
|
|
565
|
+
x1OrganTree(results){
|
|
566
|
+
const nodeMap = new Map();
|
|
567
|
+
results.forEach(item => {
|
|
568
|
+
const organCode = item.organCode
|
|
569
|
+
const organStruPath = item.organStruPath
|
|
570
|
+
const parts = organStruPath.split('#').filter(p => p);
|
|
571
|
+
let currentNode = nodeMap.get(organCode) || { organCode, organStruPath, item, children: []};
|
|
572
|
+
currentNode.parts = parts;
|
|
573
|
+
nodeMap.set(organCode, currentNode);
|
|
574
|
+
});
|
|
575
|
+
nodeMap.forEach(node => {
|
|
576
|
+
const { organCode, parts } = node;
|
|
577
|
+
let parentCode = null;
|
|
578
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
579
|
+
parentCode = parts[i];
|
|
580
|
+
const parentNode = nodeMap.get(parentCode);
|
|
250
581
|
|
|
251
|
-
|
|
252
|
-
|
|
582
|
+
if (parentNode) {
|
|
583
|
+
if (parentNode.organId === node.item.parentId && !parentNode.children.some(child => child.organCode === organCode)) {
|
|
584
|
+
parentNode.children.push(node);
|
|
585
|
+
} else {
|
|
586
|
+
// 如果直接父节点不在流程类型范围内但祖宗节点在
|
|
587
|
+
let children = parentNode.children;
|
|
588
|
+
for (let j = i + 1; j < parts.length - 1; j++) {
|
|
589
|
+
const partCode = parts[j];
|
|
590
|
+
let existingChild = children.find(child => child.organCode === partCode);
|
|
591
|
+
|
|
592
|
+
if (!existingChild) {
|
|
593
|
+
existingChild = { organCode: partCode, children: [] };
|
|
594
|
+
children.push(existingChild);
|
|
595
|
+
}
|
|
596
|
+
children = existingChild.children;
|
|
597
|
+
}
|
|
598
|
+
// 将当前节点添加到最后一个子节点的 children 中
|
|
599
|
+
children.push(node);
|
|
600
|
+
}
|
|
601
|
+
nodeMap.delete(organCode);
|
|
602
|
+
break;
|
|
253
603
|
}
|
|
254
|
-
self.treeData = childs
|
|
255
604
|
}
|
|
256
|
-
|
|
605
|
+
|
|
606
|
+
});
|
|
607
|
+
return nodeMap.values()
|
|
608
|
+
},
|
|
609
|
+
scOrganTree(results){
|
|
610
|
+
const nodeMap = new Map();
|
|
611
|
+
results.forEach(item => {
|
|
612
|
+
const organId = item.organId
|
|
613
|
+
const parentId = item.parentId
|
|
614
|
+
let currentNode = nodeMap.get(organId) || { organId, parentId, item, children: []};
|
|
615
|
+
nodeMap.set(organId, currentNode);
|
|
616
|
+
});
|
|
617
|
+
const tree = [];
|
|
618
|
+
nodeMap.forEach((node, organId) => {
|
|
619
|
+
const parentId = node.parentId;
|
|
620
|
+
|
|
621
|
+
// 如果有父节点,则将当前节点添加到父节点的 children 数组中
|
|
622
|
+
if (parentId && nodeMap.has(parentId)) {
|
|
623
|
+
const parentNode = nodeMap.get(parentId);
|
|
624
|
+
parentNode.children.push(node);
|
|
625
|
+
} else {
|
|
626
|
+
tree.push(node);
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
return tree
|
|
630
|
+
},
|
|
631
|
+
formatOrganTree(nodeMap, childsTree, organTreeType){
|
|
632
|
+
const self = this
|
|
633
|
+
let obj = {}
|
|
634
|
+
if (nodeMap.item){
|
|
635
|
+
obj = {
|
|
636
|
+
type: nodeMap.item.organType,
|
|
637
|
+
id: nodeMap.item.id,
|
|
638
|
+
organId: nodeMap.item.organId,
|
|
639
|
+
orders: nodeMap.item.orders,
|
|
640
|
+
title: nodeMap.item.organName,
|
|
641
|
+
name: nodeMap.item.organName,
|
|
642
|
+
com: nodeMap.item.organId,
|
|
643
|
+
code: nodeMap.item.organCode,
|
|
644
|
+
loading: false,
|
|
645
|
+
checked: false,
|
|
646
|
+
hasChild: true,
|
|
647
|
+
children: [],
|
|
648
|
+
};
|
|
649
|
+
if (nodeMap.children && nodeMap.children.length > 0){
|
|
650
|
+
for (let child of nodeMap.children){
|
|
651
|
+
self.formatOrganTree(child, obj.children, organTreeType)
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
childsTree.push(obj);
|
|
655
|
+
} else {
|
|
656
|
+
let params = {
|
|
657
|
+
orgTreeType: organTreeType,
|
|
658
|
+
}
|
|
659
|
+
ajax.get(self.smartFlowServerContext + '/manage/organ/get/' + nodeMap.organCode, { params: params })
|
|
660
|
+
.then(resp => {
|
|
661
|
+
if (resp.data.code === 200) {
|
|
662
|
+
let data = resp.data.data
|
|
663
|
+
obj = {
|
|
664
|
+
type: data.organType,
|
|
665
|
+
id: data.id,
|
|
666
|
+
organId: data.organId,
|
|
667
|
+
orders: data.orders,
|
|
668
|
+
title: data.organName,
|
|
669
|
+
name: data.organName,
|
|
670
|
+
com: data.organId,
|
|
671
|
+
code: data.organCode,
|
|
672
|
+
loading: false,
|
|
673
|
+
disabled: true,
|
|
674
|
+
checked: false,
|
|
675
|
+
hasChild: true,
|
|
676
|
+
children: [],
|
|
677
|
+
render: (h, { root, node, data }) => {
|
|
678
|
+
return h('span', {
|
|
679
|
+
style: {
|
|
680
|
+
display: 'inline-block',
|
|
681
|
+
color: '#b9bbc0',
|
|
682
|
+
width: '100%'
|
|
683
|
+
}
|
|
684
|
+
}, [
|
|
685
|
+
h('span', [
|
|
686
|
+
h('span', data.title)
|
|
687
|
+
])
|
|
688
|
+
]);
|
|
689
|
+
},
|
|
690
|
+
}
|
|
691
|
+
if (nodeMap.children && nodeMap.children.length > 0){
|
|
692
|
+
for (let child of nodeMap.children){
|
|
693
|
+
self.formatOrganTree(child, obj.children, organTreeType)
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
childsTree.push(obj);
|
|
697
|
+
}
|
|
698
|
+
})
|
|
699
|
+
.catch(err => {
|
|
700
|
+
console.error(err);
|
|
701
|
+
return [];
|
|
702
|
+
})
|
|
703
|
+
}
|
|
257
704
|
},
|
|
258
705
|
getData (node, callback) {
|
|
259
706
|
let self = this
|
|
260
707
|
ajax.get(this.upmsServerContext + '/manage/ucOrgan/getOrgSubNodes', {
|
|
261
708
|
params: {
|
|
262
|
-
organCode: node.code
|
|
709
|
+
organCode: node.code,
|
|
710
|
+
orgTreeType: self.organTreeType
|
|
263
711
|
}
|
|
264
712
|
}).then(function (resp) {
|
|
265
713
|
const childs = []
|
|
266
714
|
if (resp.data.code === 1) {
|
|
267
715
|
let nodeDatas = resp.data.data
|
|
268
|
-
if (nodeDatas.length > 0) {
|
|
716
|
+
if (nodeDatas && nodeDatas.length > 0) {
|
|
269
717
|
nodeDatas.forEach(item => {
|
|
270
718
|
let obj = {}
|
|
271
719
|
obj.type = item.organType
|
|
272
|
-
obj.id = item.
|
|
720
|
+
obj.id = item.id
|
|
721
|
+
obj.organId = item.organId
|
|
273
722
|
obj.orders = item.orders
|
|
274
723
|
obj.title = item.organName
|
|
275
724
|
obj.name = item.organName
|
|
@@ -299,14 +748,22 @@ export default {
|
|
|
299
748
|
},
|
|
300
749
|
selectChange (node) {
|
|
301
750
|
let self = this
|
|
302
|
-
if (node.length > 0) {
|
|
751
|
+
if (node && node.length > 0) {
|
|
303
752
|
if (self.currentNode !== node[0]) {
|
|
304
753
|
self.currentNode = node[0]
|
|
305
754
|
|
|
306
|
-
self.form.organId = self.currentNode.
|
|
755
|
+
self.form.organId = self.currentNode.organId
|
|
307
756
|
self.form.organTitle = self.currentNode.title
|
|
308
757
|
|
|
309
|
-
|
|
758
|
+
let permScopeList = self.permScopeList
|
|
759
|
+
if (permScopeList !== 'all'){
|
|
760
|
+
permScopeList += 'O:' + self.currentNode.code
|
|
761
|
+
}
|
|
762
|
+
self.dataUrl =self.smartFlowServerContext+ '/manage/user/getAssigneeList?orgTreeType=' + self.organTreeType + "&permScopeList=" + permScopeList
|
|
763
|
+
|
|
764
|
+
if (this.useTransferRangeOrgan){
|
|
765
|
+
self.dataUrl = self.upmsServerContext+ '/manage/user/list?orgTreeType=' + self.organTreeType
|
|
766
|
+
}
|
|
310
767
|
self.doSearch()
|
|
311
768
|
|
|
312
769
|
if (node[0].children.length <= 0) {
|
|
@@ -323,11 +780,24 @@ export default {
|
|
|
323
780
|
},
|
|
324
781
|
|
|
325
782
|
onCancel () {
|
|
326
|
-
this
|
|
783
|
+
if (this.helpBoxType === 'auditTo82'){
|
|
784
|
+
this.$emit('update-selected', ''); // 触发事件并传递 userId
|
|
785
|
+
}
|
|
327
786
|
this.modalBoxShow = false;
|
|
328
787
|
|
|
329
788
|
},
|
|
330
789
|
|
|
790
|
+
getSystemConfig(){
|
|
791
|
+
const self = this
|
|
792
|
+
ajax.get(self.smartFlowServerContext + '/anon/systemConfig/getSystemConfig').then(function (resp) {
|
|
793
|
+
const result = resp.data;
|
|
794
|
+
if (result && result.code === '200') {
|
|
795
|
+
self.ucAdapterType = result.data.ucAdapterType
|
|
796
|
+
}
|
|
797
|
+
}).catch(err => {
|
|
798
|
+
console.log(err);
|
|
799
|
+
})
|
|
800
|
+
},
|
|
331
801
|
|
|
332
802
|
},
|
|
333
803
|
};
|
|
@@ -336,10 +806,15 @@ export default {
|
|
|
336
806
|
<style lang="less" scope>
|
|
337
807
|
.org-info{
|
|
338
808
|
display: flex;
|
|
809
|
+
max-height: 700px;
|
|
339
810
|
.org-tree {
|
|
340
811
|
width: 265px;
|
|
341
812
|
min-height: 450px;
|
|
342
813
|
border-right: 1px solid #dcdee2;
|
|
814
|
+
.tree-content {
|
|
815
|
+
height: 100%;
|
|
816
|
+
overflow-y: auto;
|
|
817
|
+
}
|
|
343
818
|
}
|
|
344
819
|
|
|
345
820
|
.org-detil {
|