@lambo-design/workflow-approve 1.0.0-beta.9 → 1.0.0-beta.91

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