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

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,760 @@
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.useTransferRangeUsers = true
235
+ this.tableData = userList.map(item => {
236
+ return {
237
+ ...item,
238
+ organName: item.deptName,
239
+ status: '00'
240
+ }
241
+ })
242
+ this.modalBoxShow = !this.modalBoxShow;
243
+ this.$forceUpdate()
244
+ return
245
+ }
246
+ }
247
+ this.permScope = permScope
248
+ if (permScope && permScope !== 'all'){
249
+ this.getOrgTreeByProType(this.permScope, this.organTreeType)
250
+ } else {
251
+ this.permScopeList = 'all'
252
+ this.getRootData(organTreeType)
253
+ }
254
+ this.modalBoxShow = !this.modalBoxShow;
255
+ this.$forceUpdate()
256
+ },
257
+
258
+ onOk(){
259
+ let self = this
260
+ let idSelectedArr = self.idSelectedArr
261
+ self.loading = true
262
+ if (self.helpBoxType ==='addMultitaskInstance'){
263
+ idSelectedArr = [...new Set(idSelectedArr)]
264
+ const assingeeList = idSelectedArr.map(item => item.split(',')[0])
265
+ self.$emit('add-multitask-instance', assingeeList);
266
+ } else {
267
+ if (idSelectedArr.length > 1) {
268
+ self.loading = false
269
+ self.$Message.info('办理人只能选择一条记录!')
270
+ this.$emit('update-selected', ''); // 触发事件并传递 userId
271
+ } else {
272
+ let idSelectedArr = self.idSelectedArr[0].split(',')
273
+ if (self.helpBoxType === 'transferCurTask'){
274
+ let auditResult = {
275
+ code: self.data.auditResult,
276
+ name: self.data.auditResultName,
277
+ }
278
+ self.data.selectedUserId=idSelectedArr[0];
279
+ let url = this.smartFlowServerContext + '/manage/processTodo/audit'
280
+ ajax.post(url, self.data).then(function (resp) {
281
+ let result = resp.data
282
+ if (result.code == '200') {
283
+ self.loading = false
284
+ self.$Message.success(result.message);
285
+ if (self.executionCompleted) {
286
+ self.executionCompleted(true, self.data.instanceId, self.data.taskId, auditResult, self.data.taskId);
287
+ }
288
+ self.toBeDoneListDoSearch();
289
+ } else {
290
+ self.loading = false
291
+ self.$Message.error(result.message)
292
+ if (self.executionCompleted) {
293
+ self.executionCompleted(false, null, null, auditResult, self.data.taskId);
294
+ }
295
+ }
296
+ })
297
+ } else if (self.helpBoxType === 'delegateTask'){
298
+ self.$emit('delegate-task-assignee', idSelectedArr[0]);
299
+ } else {
300
+ self.$emit('update-next-node-assignee', idSelectedArr[0], idSelectedArr[1], self.id);
301
+ }
302
+ }
303
+ }
304
+ this.modalBoxShow = false;
305
+ },
306
+
307
+ doSearch: function () {
308
+ this.tableSearchParams = Object.assign({}, this.form)
309
+ },
310
+ onSelectionChange: function (selection) {
311
+ let self = this
312
+ // self.idSelectedArr = []
313
+ if (self.helpBoxType !== 'addMultitaskInstance' && selection.length > 1) {
314
+ self.$Message.info('只能选择一条记录!')
315
+ this.$refs.selection.selectAll(false);
316
+ }
317
+ for (let item of selection) {
318
+ self.idSelectedArr.push(item.userId + ',' + item.userName)
319
+ }
320
+ },
321
+ loadData (node, callback) {
322
+ this.getData(node, function (data) {
323
+ if (data.length > 0) {
324
+ callback(data)
325
+ }
326
+ })
327
+ },
328
+ getRootData (organTreeType) {
329
+ let self = this
330
+ let hostChilds = []
331
+ if (self.ucAdapterType === 'x1'){
332
+ let parentId = organTreeType == '00' ? 'rootId' : '0'
333
+ ajax.get(self.smartFlowServerContext + '/manage/organ/getOrgSubNodes', {
334
+ params: {
335
+ code: parentId,
336
+ orgTreeType: organTreeType
337
+ }
338
+ }).then(resp => {
339
+ if (resp.data.code === 200) {
340
+ let data = resp.data.data
341
+ if (data.length > 0) {
342
+ data.forEach(item => {
343
+ let obj = {}
344
+ obj.type = item.organType
345
+ obj.id = item.id
346
+ obj.organId = item.organId
347
+ obj.orders = item.orders
348
+ obj.title = item.organName
349
+ obj.name = item.organName
350
+ obj.com = item.com
351
+ obj.code = item.organCode
352
+ obj.loading = false
353
+ obj.children = []
354
+ obj.hasChild = true
355
+ hostChilds.push(obj)
356
+ })
357
+ self.treeData.push(hostChilds)
358
+ const codesSeen = new Map();
359
+ self.treeData = self.treeData.reduce((acc, item, index) => {
360
+ if (!codesSeen.has(item.code)) {
361
+ codesSeen.set(item.code, index);
362
+ acc.push(item);
363
+ }
364
+ return acc;
365
+ }, []);
366
+ self.selectChange(self.treeData[0])
367
+ }
368
+ }
369
+ }).catch(err => {
370
+ console.log(err);
371
+ })
372
+ } else {
373
+ ajax.get(self.smartFlowServerContext + '/manage/bizorgan/getOrgRootTree?bizOrganTreeType=' + organTreeType).then(resp => {
374
+ if (resp.data.code === 200) {
375
+ let data = resp.data.data
376
+ if (data.length > 0) {
377
+ for (let i = 0; i < data.length; i++) {
378
+ {
379
+ let obj = {}
380
+ obj.type = data[i].bizOrganType
381
+ obj.id = data[i].id
382
+ obj.organId = data[i].bizOrganId
383
+ obj.orders = data[i].orders
384
+ obj.title = data[i].bizOrganName
385
+ obj.name = data[i].bizOrganName
386
+ obj.com = data[i].bizOrganId
387
+ obj.code = data[i].bizOrganCode
388
+ obj.loading = false
389
+ obj.children = []
390
+ obj.hasChild = true
391
+ hostChilds.push(obj)
392
+ self.treeData.push(hostChilds);
393
+ const codesSeen = new Map();
394
+ self.treeData = self.treeData.reduce((acc, item, index) => {
395
+ if (!codesSeen.has(item.code)) {
396
+ codesSeen.set(item.code, index);
397
+ acc.push(item);
398
+ }
399
+ return acc;
400
+ }, []);
401
+ }
402
+ }
403
+ self.selectChange(self.treeData[0])
404
+ }
405
+ }
406
+ }).catch(err => {
407
+ console.log(err);
408
+ })
409
+ }
410
+ },
411
+ async getOrgTreeByProType(permScope, organTreeType){
412
+ let self = this
413
+ let userPermScope = permScope.substring(permScope.indexOf("U:"))
414
+ userPermScope = userPermScope.substring(2, userPermScope.indexOf(","))
415
+ let permScopeTwo = userPermScope.split(';')
416
+ if (permScopeTwo.length > 0 && permScopeTwo[0]){
417
+ self.permScopeList = 'U:' + userPermScope + ','
418
+ let promises = []
419
+ for (let i = 0; i < permScopeTwo.length; i++) {
420
+ let promise = ajax.get(self.smartFlowServerContext + "/manage/user/get/" + permScopeTwo[i] + '?treeType=' + organTreeType)
421
+ .then(resp => {
422
+ if (resp.data.code === 200) {
423
+ return resp.data.data.organCode
424
+ }
425
+ })
426
+ promises.push(promise)
427
+ }
428
+ Promise.all(promises).then(async (result) => {
429
+ const uniqueResults = [...new Set(result.filter(Boolean))];
430
+ permScope = uniqueResults.join(';');
431
+ self.treeData = await this.getOrganTreeByProType(permScope, permScope, organTreeType);
432
+ self.selectChange(self.treeData[0])
433
+ })
434
+ } else {
435
+ //对于流程类型中没有规定人员范围但规定组织范围的情况
436
+ self.treeData = await this.getOrganTreeByProType(permScope, permScope.substring(2, permScope.indexOf(",")), organTreeType);
437
+ self.selectChange(self.treeData[0])
438
+ }
439
+ },
440
+ getOrganTreeByProType(row, permScope, organTreeType) {
441
+ const self = this
442
+ return new Promise((resolve, reject) => {
443
+ let organTree = [];
444
+ let childsTree = [];
445
+ if (permScope && permScope.length > 0) {
446
+ let params = {
447
+ orgTreeType: organTreeType,
448
+ };
449
+ permScope = permScope.split(';');
450
+
451
+ const requests = permScope.map(perm => {
452
+ return ajax.get(self.smartFlowServerContext + '/manage/organ/get/' + perm, { params: params })
453
+ .then(resp => {
454
+ if (resp.data.code === 200) {
455
+ return resp.data.data;
456
+ } else {
457
+ return [];
458
+ }
459
+ })
460
+ .catch(err => {
461
+ console.error(err);
462
+ return [];
463
+ });
464
+ });
465
+
466
+ Promise.all(requests)
467
+ .then(results => {
468
+ let tree
469
+ if (self.ucAdapterType === 'x1'){
470
+ tree = self.x1OrganTree(results)
471
+ } else {
472
+ tree = self.scOrganTree(results)
473
+ }
474
+ for (let value of tree) {
475
+ self.formatOrganTree(value, childsTree, organTreeType)
476
+ }
477
+
478
+ organTree.push(childsTree);
479
+ const codesSeen = new Map();
480
+ organTree = organTree.reduce((acc, item, index) => {
481
+ if (!codesSeen.has(item.code)) {
482
+ codesSeen.set(item.code, index);
483
+ acc.push(item);
484
+ }
485
+ return acc;
486
+ }, []);
487
+ resolve(organTree);
488
+ })
489
+ .catch(err => {
490
+ reject(err);
491
+ });
492
+ } else {
493
+ resolve([]);
494
+ }
495
+ });
496
+ },
497
+ x1OrganTree(results){
498
+ const nodeMap = new Map();
499
+ results.forEach(item => {
500
+ const organCode = item.organCode
501
+ const organStruPath = item.organStruPath
502
+ const parts = organStruPath.split('#').filter(p => p);
503
+ let currentNode = nodeMap.get(organCode) || { organCode, organStruPath, item, children: []};
504
+ currentNode.parts = parts;
505
+ nodeMap.set(organCode, currentNode);
506
+ });
507
+ nodeMap.forEach(node => {
508
+ const { organCode, parts } = node;
509
+ let parentCode = null;
510
+ for (let i = 0; i < parts.length - 1; i++) {
511
+ parentCode = parts[i];
512
+ const parentNode = nodeMap.get(parentCode);
513
+
514
+ if (parentNode) {
515
+ if (parentNode.organId === node.item.parentId && !parentNode.children.some(child => child.organCode === organCode)) {
516
+ parentNode.children.push(node);
517
+ } else {
518
+ // 如果直接父节点不在流程类型范围内但祖宗节点在
519
+ let children = parentNode.children;
520
+ for (let j = i + 1; j < parts.length - 1; j++) {
521
+ const partCode = parts[j];
522
+ let existingChild = children.find(child => child.organCode === partCode);
523
+
524
+ if (!existingChild) {
525
+ existingChild = { organCode: partCode, children: [] };
526
+ children.push(existingChild);
527
+ }
528
+ children = existingChild.children;
529
+ }
530
+ // 将当前节点添加到最后一个子节点的 children 中
531
+ children.push(node);
532
+ }
533
+ nodeMap.delete(organCode);
534
+ break;
535
+ }
536
+ }
537
+
538
+ });
539
+ return nodeMap.values()
540
+ },
541
+ scOrganTree(results){
542
+ const nodeMap = new Map();
543
+ results.forEach(item => {
544
+ const organId = item.organId
545
+ const parentId = item.parentId
546
+ let currentNode = nodeMap.get(organId) || { organId, parentId, item, children: []};
547
+ nodeMap.set(organId, currentNode);
548
+ });
549
+ const tree = [];
550
+ nodeMap.forEach((node, organId) => {
551
+ const parentId = node.parentId;
552
+
553
+ // 如果有父节点,则将当前节点添加到父节点的 children 数组中
554
+ if (parentId && nodeMap.has(parentId)) {
555
+ const parentNode = nodeMap.get(parentId);
556
+ parentNode.children.push(node);
557
+ } else {
558
+ tree.push(node);
559
+ }
560
+ });
561
+ return tree
562
+ },
563
+ formatOrganTree(nodeMap, childsTree, organTreeType){
564
+ const self = this
565
+ let obj = {}
566
+ if (nodeMap.item){
567
+ obj = {
568
+ type: nodeMap.item.organType,
569
+ id: nodeMap.item.id,
570
+ organId: nodeMap.item.organId,
571
+ orders: nodeMap.item.orders,
572
+ title: nodeMap.item.organName,
573
+ name: nodeMap.item.organName,
574
+ com: nodeMap.item.organId,
575
+ code: nodeMap.item.organCode,
576
+ loading: false,
577
+ checked: false,
578
+ hasChild: true,
579
+ children: [],
580
+ };
581
+ if (nodeMap.children && nodeMap.children.length > 0){
582
+ for (let child of nodeMap.children){
583
+ self.formatOrganTree(child, obj.children, organTreeType)
584
+ }
585
+ }
586
+ childsTree.push(obj);
587
+ } else {
588
+ let params = {
589
+ orgTreeType: organTreeType,
590
+ }
591
+ ajax.get(self.smartFlowServerContext + '/manage/organ/get/' + nodeMap.organCode, { params: params })
592
+ .then(resp => {
593
+ if (resp.data.code === 200) {
594
+ let data = resp.data.data
595
+ obj = {
596
+ type: data.organType,
597
+ id: data.id,
598
+ organId: data.organId,
599
+ orders: data.orders,
600
+ title: data.organName,
601
+ name: data.organName,
602
+ com: data.organId,
603
+ code: data.organCode,
604
+ loading: false,
605
+ disabled: true,
606
+ checked: false,
607
+ hasChild: true,
608
+ children: [],
609
+ render: (h, { root, node, data }) => {
610
+ return h('span', {
611
+ style: {
612
+ display: 'inline-block',
613
+ color: '#b9bbc0',
614
+ width: '100%'
615
+ }
616
+ }, [
617
+ h('span', [
618
+ h('span', data.title)
619
+ ])
620
+ ]);
621
+ },
622
+ }
623
+ if (nodeMap.children && nodeMap.children.length > 0){
624
+ for (let child of nodeMap.children){
625
+ self.formatOrganTree(child, obj.children, organTreeType)
626
+ }
627
+ }
628
+ childsTree.push(obj);
629
+ }
630
+ })
631
+ .catch(err => {
632
+ console.error(err);
633
+ return [];
634
+ })
635
+ }
636
+ },
637
+ getData (node, callback) {
638
+ let self = this
639
+ ajax.get(this.upmsServerContext + '/manage/ucOrgan/getOrgSubNodes', {
640
+ params: {
641
+ organCode: node.code,
642
+ orgTreeType: self.organTreeType
643
+ }
644
+ }).then(function (resp) {
645
+ const childs = []
646
+ if (resp.data.code === 1) {
647
+ let nodeDatas = resp.data.data
648
+ if (nodeDatas && nodeDatas.length > 0) {
649
+ nodeDatas.forEach(item => {
650
+ let obj = {}
651
+ obj.type = item.organType
652
+ obj.id = item.id
653
+ obj.organId = item.organId
654
+ obj.orders = item.orders
655
+ obj.title = item.organName
656
+ obj.name = item.organName
657
+ obj.com = item.com
658
+ obj.parent = node
659
+ obj.code = item.organCode
660
+ obj.loading = false
661
+ obj.children = []
662
+ obj.hasChild = true
663
+ childs.push(obj)
664
+ })
665
+ } else {
666
+ self.$set(node, 'hasChild', false)
667
+ self.$delete(node, 'loading')
668
+ }
669
+ if (callback) {
670
+ callback(childs)
671
+ }
672
+ } else {
673
+ self.$set(node, 'hasChild', false)
674
+ self.$delete(node, 'loading')
675
+ if (callback) {
676
+ callback()
677
+ }
678
+ }
679
+ })
680
+ },
681
+ selectChange (node) {
682
+ let self = this
683
+ if (node && node.length > 0) {
684
+ if (self.currentNode !== node[0]) {
685
+ self.currentNode = node[0]
686
+
687
+ self.form.organId = self.currentNode.organId
688
+ self.form.organTitle = self.currentNode.title
689
+
690
+ let permScopeList = self.permScopeList
691
+ if (permScopeList !== 'all'){
692
+ permScopeList += 'O:' + self.currentNode.code
693
+ }
694
+ self.dataUrl =self.smartFlowServerContext+ '/manage/user/getAssigneeList?orgTreeType=' + self.organTreeType + "&permScopeList=" + permScopeList
695
+
696
+ if (this.useTransferRangeOrgan){
697
+ self.dataUrl = self.upmsServerContext+ '/manage/user/list'
698
+ }
699
+ self.doSearch()
700
+
701
+ if (node[0].children.length <= 0) {
702
+ self.getData(node[0], function (data) {
703
+ self.$set(node[0], 'children', data)
704
+ })
705
+ }
706
+ self.$set(node[0], 'expand', true)
707
+ }
708
+ } else {
709
+ self.$set(self.currentNode, 'expand', !self.currentNode.expand)
710
+ self.currentNode.selected = true
711
+ }
712
+ },
713
+
714
+ onCancel () {
715
+ if (this.helpBoxType === 'transferCurTask'){
716
+ this.$emit('update-selected', ''); // 触发事件并传递 userId
717
+ }
718
+ this.modalBoxShow = false;
719
+
720
+ },
721
+
722
+ getSystemConfig(){
723
+ const self = this
724
+ ajax.get(self.smartFlowServerContext + '/anon/systemConfig/getSystemConfig').then(function (resp) {
725
+ const result = resp.data;
726
+ if (result && result.code === '200') {
727
+ self.ucAdapterType = result.data.ucAdapterType
728
+ }
729
+ }).catch(err => {
730
+ console.log(err);
731
+ })
732
+ },
733
+
734
+ },
735
+ };
736
+ </script>
737
+
738
+ <style lang="less" scope>
739
+ .org-info{
740
+ display: flex;
741
+ max-height: 700px;
742
+ .org-tree {
743
+ width: 265px;
744
+ min-height: 450px;
745
+ border-right: 1px solid #dcdee2;
746
+ .tree-content {
747
+ height: 100%;
748
+ overflow-y: auto;
749
+ }
750
+ }
751
+
752
+ .org-detil {
753
+ flex:1;
754
+ min-height: 400px;
755
+ min-width: 800px;
756
+ padding: 0 10px 10px;
757
+ margin-left: 10px;
758
+ }
759
+ }
760
+ </style>