@lambo-design/workflow-approve 1.0.0-beta.8 → 1.0.0-beta.81

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