@lambo-design/workflow-approve 1.0.0-beta.6 → 1.0.0-beta.60

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