@lambo-design/workflow-approve 1.0.0-beta.14 → 1.0.0-beta.141

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.
@@ -0,0 +1,814 @@
1
+ <template>
2
+ <div style="min-height: 300px;">
3
+ <div v-if="organTree.userMap && Object.keys(organTree.userMap).length > 0" class="searchable-select-wrapper">
4
+ <Select v-model="countersignersTagsData"
5
+ filterable multiple
6
+ @on-change="organChange($event)"
7
+ class="custom-select"
8
+ >
9
+ <Option v-for="(value, key) in organTree.userMap" :key="key" :value="`${key},${value.split('(')[0]}`"
10
+ :label="value.split('(')[0]">
11
+ <span>{{ value }}</span>
12
+ </Option>
13
+ </Select>
14
+ <Icon type="ios-search" class="search-icon"/>
15
+ </div>
16
+ <Tag v-else v-for="(item, index) in countersignersTagsData" :key="item.id" closable
17
+ @on-close="closeTags(index, item)"
18
+ size="large">
19
+ {{ item.split(',')[1] }}
20
+ </Tag>
21
+
22
+ <div class="cont">
23
+ <div
24
+ class="contLeftTwo">
25
+
26
+ <Tabs :animated="false" @on-click="dataNameClick">
27
+ <TabPane label="选人员">
28
+ <div class="overflowAuto">
29
+ <div v-if="readingRange.length === 0">暂无数据</div>
30
+ <Tree v-else v-for="(item,index) in readingRange" :key="index" :data="item" ref="treeEY" check-strictly
31
+ show-checkbox expand-node
32
+ :load-data="loadReadingRangeData" :checkable="true" @on-check-change="selectReRaYHChange"
33
+ @on-select-change="selectReRaYHChange"></Tree>
34
+ </div>
35
+ </TabPane>
36
+
37
+ </Tabs>
38
+
39
+ </div>
40
+ <div class="contRight">
41
+ <Card dis-hover v-if="treeUserCenterValue.length > 0">
42
+ <div class="overflowAuto">
43
+ <CheckboxGroup v-model="treeUserValue" class="checkbox-container" @on-change="getReadingRangeUser">
44
+ <Checkbox v-for="(item) in treeUserCenterValue" :key="item.userId"
45
+ :label="item.userId+','+item.userName">
46
+ {{ item.userName }} {{ showUserDetail(item) }}
47
+ </Checkbox>
48
+ </CheckboxGroup>
49
+ </div>
50
+ </Card>
51
+ </div>
52
+
53
+ </div>
54
+ </div>
55
+ </template>
56
+
57
+ <script>
58
+ import ajax from '@lambo-design/shared/utils/ajax'
59
+ import Title from './title'
60
+ import TreeSelect from '@lambo-design/tree-select'
61
+
62
+ export default {
63
+ props: {
64
+ smartFlowServerContext: {
65
+ type: String,
66
+ default: '/api/smart-flow-server',
67
+ },
68
+ upmsServerContext: {
69
+ type: String,
70
+ default: '/api/upms-server',
71
+ },
72
+ item: {
73
+ type: Object,
74
+ default: function () {
75
+ return {}
76
+ }
77
+ },
78
+ permScope: {
79
+ type: String,
80
+ default: ''
81
+ },
82
+
83
+ },
84
+ components: {
85
+ Title,
86
+ TreeSelect
87
+ },
88
+ data() {
89
+ return {
90
+ id: '',
91
+ ucAdapterType: 'x1',
92
+ treePostNameCenterValue: [],
93
+ selectedKeys: [],
94
+ postKeys: [],
95
+ postAllList: [],
96
+ noticeList: [],
97
+ orgList: [],
98
+ userNum: '0',
99
+ // permScope: "",
100
+ organTreeType: '00',
101
+ organIdList: [],
102
+ countersignersTagsData: [],
103
+ organTree: {
104
+ orgenMap: {},
105
+ userMap: {},
106
+ roleMap: {},
107
+ postMap: {},
108
+ },
109
+ readingRangePost: [],
110
+ treeUserValueCenter: [],
111
+ treeLength: 0,
112
+ treeValueBM: [],
113
+ treeOrgTypeValue: [],
114
+ dataName: '',
115
+ postList: [],//选中岗位集合(右侧显示)
116
+ processPostList: [],//岗位集合
117
+ noticeRoleNameList: [],//角色选择集合
118
+ roleList: [],//角色集合
119
+ noticeRoleList: [],//选中角色集合(右侧显示)
120
+ treeUserValue: [],//选中的人员(右侧显示)
121
+ selectedData: [],
122
+ treePostValue: [],
123
+ treeUserCenterValue: [],
124
+ treePostCenterValue: [],
125
+ readingRangeBM: [],//权限范围数据组织
126
+ readingRange: [],//权限范围数据人员
127
+ readingRangeOrgType: [],//权限范围数据部门
128
+ placeholder: '自动同意',
129
+ loading: false,
130
+ form: {
131
+ userId: '',
132
+ userName: '',
133
+ organId: '',
134
+ organTitle: '',
135
+ directChild: false,
136
+ isAdmin: ''
137
+ },
138
+ value: '2',
139
+ currentNode: {},
140
+ currentNodeUser: {},
141
+ currentNodePost: {},
142
+ ruleValidate: {
143
+ organization: [
144
+ { required: true, message: '请选择指定相对岗位的组织', trigger: 'blur' }
145
+ ],
146
+ position: [
147
+ { required: true, message: '请选择指定岗位', trigger: 'blur' }
148
+ ],
149
+ },
150
+
151
+ }
152
+ },
153
+ created() {
154
+ this.getSystemConfig()
155
+ let permScope = this.item.orgTreeType === this.defaultOrganTreeType ? this.permScope : 'all'
156
+ this.orgTreeType = this.item.orgTreeType ? this.item.orgTreeType : this.organTreeType
157
+ this.toggleShowHelpBox(this.permScope, this.item.candidates, this.orgTreeType, this.item.id)
158
+ },
159
+ computed: {},
160
+ mounted: function () {
161
+ },
162
+ methods: {
163
+ //把已选择的数据放入到已选列表中展示
164
+ getUser(row) {
165
+ if (row.users) {
166
+ let self = this
167
+ self.selectedKeys = []
168
+ self.treeUserValue = []
169
+ let users = row.users
170
+ let userList = users.split(',')
171
+ if (users && userList.length > 0) {
172
+ userList.forEach(item => {
173
+ let [userId, userName] = item.split(':')
174
+ let userStr = `${userId},${userName}`
175
+ self.selectedData.push(userStr)
176
+ self.treeUserValue.push(userStr)
177
+ self.selectedKeys.push(userStr)
178
+ if (!self.countersignersTagsData.includes(userStr)) {
179
+ self.countersignersTagsData.push(userStr)
180
+ }
181
+ self.userNum = '1'
182
+ })
183
+ }
184
+ }
185
+ },
186
+
187
+ organChange(event) {
188
+ this.countersignersTagsData = [...event] // 直接同步
189
+ this.treeUserValue = [...event] // 保持一致
190
+ this.selectedKeys = [...event]
191
+
192
+ },
193
+
194
+ getRootOrganTree(organTreeType) {
195
+
196
+ let self = this
197
+ let organTreeList = []
198
+ let organTree = []
199
+ ajax.get(self.smartFlowServerContext + '/manage/bizorgan/getOrgRootTree', {
200
+ params: {
201
+ bizOrganTreeType: organTreeType
202
+ }
203
+ }).then(resp => {
204
+ if (resp.data.code === 200) {
205
+ let data = resp.data.data
206
+ if (data.length > 0) {
207
+ data.forEach(item => {
208
+ let obj = {}
209
+ obj.type = item.bizOrganType
210
+ obj.id = item.id
211
+ obj.organId = item.bizOrganId
212
+ obj.orders = item.orders
213
+ obj.title = item.bizOrganName
214
+ obj.name = item.bizOrganName
215
+ obj.com = item.bizOrganId
216
+ obj.code = item.bizOrganCode
217
+ obj.loading = false
218
+ obj.children = []
219
+ obj.hasChild = true
220
+ organTreeList.push(obj)
221
+ })
222
+ }
223
+ organTree.push(organTreeList)
224
+ //去重
225
+ const codesSeen = new Map()
226
+ organTree = organTree.reduce((acc, item, index) => {
227
+ if (!codesSeen.has(item.code)) {
228
+ codesSeen.set(item.code, index)
229
+ acc.push(item)
230
+ }
231
+ return acc
232
+ }, [])
233
+ self.readingRangeBM = JSON.parse(JSON.stringify(organTree))
234
+ self.readingRange = JSON.parse(JSON.stringify(organTree))
235
+ }
236
+ })
237
+ self.organTreeRedis(self.permScope, self.readingRange)
238
+ },
239
+
240
+ getOrganTreeByProType(row, permScope, organTreeType) {
241
+ const self = this
242
+ return new Promise((resolve, reject) => {
243
+ let organTree = []
244
+ let childsTree = []
245
+ if (permScope && permScope.length > 0) {
246
+ let params = {
247
+ orgTreeType: organTreeType,
248
+ }
249
+ permScope = permScope.split(';')
250
+
251
+ const requests = permScope.map(perm => {
252
+ return ajax.get(self.smartFlowServerContext + '/manage/organ/get/' + perm, { params: params })
253
+ .then(resp => {
254
+ if (resp.data.code === 200) {
255
+ return resp.data.data
256
+ } else {
257
+ return []
258
+ }
259
+ })
260
+ .catch(err => {
261
+ console.error(err)
262
+ return []
263
+ })
264
+ })
265
+
266
+ Promise.all(requests)
267
+ .then(results => {
268
+ results.forEach(data => {
269
+ if (data) {
270
+ let obj = {
271
+ type: data.organType,
272
+ id: data.id,
273
+ organId: data.organId,
274
+ orders: data.orders,
275
+ title: data.organName,
276
+ name: data.organName,
277
+ com: data.organId,
278
+ code: data.organCode,
279
+ loading: false,
280
+ checked: false,
281
+ children: [],
282
+ hasChild: true,
283
+ }
284
+ childsTree.push(obj)
285
+ }
286
+ })
287
+
288
+ organTree.push(childsTree)
289
+ const codesSeen = new Map()
290
+ organTree = organTree.reduce((acc, item, index) => {
291
+ if (!codesSeen.has(item.code)) {
292
+ codesSeen.set(item.code, index)
293
+ acc.push(item)
294
+ }
295
+ return acc
296
+ }, [])
297
+ resolve(organTree)
298
+ })
299
+ .catch(err => {
300
+ reject(err)
301
+ })
302
+ } else {
303
+ resolve([])
304
+ }
305
+ })
306
+ },
307
+ //获取人员树信息(数据初始化)
308
+ async getReadingRange(row, organTreeType) {
309
+ let self = this
310
+ var permScope = row.substring(row.indexOf('U:'))
311
+ permScope = permScope.substring(2, permScope.indexOf(','))
312
+ let permScopeTwo = permScope.split(';')
313
+ if (permScopeTwo.length > 0 && permScopeTwo[0]) {
314
+ let promises = []
315
+ for (let i = 0; i < permScopeTwo.length; i++) {
316
+ let promise = ajax.get(self.smartFlowServerContext + '/manage/user/get/' + permScopeTwo[i] + '?treeType=' + organTreeType)
317
+ .then(resp => {
318
+ if (resp.data.code === 200) {
319
+ return resp.data.data.organCode
320
+ }
321
+ })
322
+ promises.push(promise)
323
+ }
324
+ Promise.all(promises).then(async (result) => {
325
+ const uniqueResults = [...new Set(result.filter(Boolean))]
326
+ permScope = uniqueResults.join(';')
327
+ self.readingRange = await this.getOrganTreeByProType(row, permScope, organTreeType)
328
+ self.organTreeRedis(this.permScope, self.readingRange)
329
+ })
330
+ } else {
331
+ //对于流程类型中没有规定人员范围但规定组织范围的情况
332
+ self.readingRange = await this.getOrganTreeByProType(row, row.substring(2, row.indexOf(',')), organTreeType)
333
+ self.organTreeRedis(this.permScope, self.readingRange)
334
+ }
335
+
336
+ },
337
+
338
+ closeTags(index, info) {
339
+ this.readingRangeScPerDel(index, info)
340
+ },
341
+
342
+ //权限范围人员单条删除
343
+ readingRangeScPerDel(res, info) {
344
+ let self = this
345
+ let index = this.treeUserValue.findIndex(item => {
346
+ return item === info
347
+ })
348
+ if (index !== -1) {
349
+ self.treeUserValue = self.treeUserValue.filter((_, i) => i !== index)
350
+ self.selectedKeys = self.selectedKeys.filter((_, i) => i !== index)
351
+ // self.selectedKeys.splice(index, 1)
352
+ }
353
+ let orgList = []
354
+ let organList = []
355
+ orgList.push(info)
356
+ self.countersignersTagsData.forEach(organ => {
357
+ if (organ.indexOf(info) == -1) {
358
+ organList.push(organ)
359
+ }
360
+ })
361
+ self.countersignersTagsData = organList
362
+ },
363
+
364
+ selectUserChange(node) {
365
+ let self = this
366
+ if (node.length > 0) {
367
+ if (self.currentNodeUser !== node[0]) {
368
+ self.currentNodeUser = node[0]
369
+
370
+ self.form.organId = self.currentNodeUser.id
371
+ self.form.organTitle = self.currentNodeUser.title
372
+
373
+ if (node[0].children.length <= 0) {
374
+ self.getReadingRangeData(node[0], function (data) {
375
+ self.$set(node[0], 'children', data)
376
+ })
377
+ }
378
+ self.$set(node[0], 'expand', true)
379
+ }
380
+ } else {
381
+ self.$set(self.currentNodeUser, 'expand', !self.currentNodeUser.expand)
382
+ self.currentNodeUser.selected = true
383
+ }
384
+ },
385
+ //获取用户信息(懒加载)(展开人员树时触发)
386
+ loadReadingRangeData(node, callback) {
387
+ this.getReadingRangeData(node, function (data) {
388
+ if (data.length > 0) {
389
+ callback(data)
390
+ }
391
+ })
392
+ },
393
+ getReadingRangeData(node, callback) {
394
+ let self = this
395
+ ajax.get(self.smartFlowServerContext + '/manage/organ/getOrgSubNodes', {
396
+ params: {
397
+ code: node.code,
398
+ orgTreeType: self.organTreeType
399
+ }
400
+ }).then(function (resp) {
401
+ const childs = []
402
+ if (resp.data.code === 200) {
403
+ let nodeDatas = resp.data.data
404
+ if (nodeDatas.length > 0) {
405
+ nodeDatas.forEach(item => {
406
+ let obj = {}
407
+ let typeName = ''
408
+ if ('com' === item.organType) {
409
+ typeName = '(公司)'
410
+ } else if ('dept' === item.organType) {
411
+ typeName = '(部门)'
412
+ }
413
+ // obj.disableCheckbox = true
414
+ obj.type = item.organType
415
+ obj.id = item.id
416
+ obj.title = item.organName + typeName
417
+ obj.name = item.organName
418
+ obj.com = item.organId
419
+ obj.organId = item.organId
420
+ obj.code = item.organCode
421
+ obj.loading = false
422
+ obj.children = []
423
+ obj.hasChild = true
424
+ childs.push(obj)
425
+ })
426
+ } else {
427
+ self.$set(node, 'hasChild', false)
428
+ self.$delete(node, 'loading')
429
+ }
430
+ if (callback) {
431
+ callback(childs)
432
+ }
433
+ } else {
434
+ self.$set(node, 'hasChild', false)
435
+ self.$delete(node, 'loading')
436
+ if (callback) {
437
+ callback()
438
+ }
439
+ }
440
+ })
441
+ },
442
+
443
+ //权限范围用户点击事件(点击人员树,触发查询,显示在右侧)
444
+ selectReRaYHChange(data, info) {
445
+ let self = this
446
+ const user = sessionStorage.getItem('userInfo')
447
+ const jsonArray = JSON.parse(user)
448
+ var userPermScope = self.permScope.substring(self.permScope.indexOf('U:'))
449
+ userPermScope = userPermScope.substring(2, userPermScope.indexOf(','))
450
+ userPermScope = userPermScope.split(';')
451
+ //self.selectUserChange(data)
452
+ let treeUserCenters = []
453
+
454
+ if (self.permScope == 'all' || self.permScope == 'undefined') {
455
+ let userIdSet = new Set()
456
+ data.forEach(itemCom => {
457
+
458
+ ajax.get(self.smartFlowServerContext + '/manage/user/getList', {
459
+ params: {
460
+ organId: itemCom.organId,
461
+ orgTreeType: self.organTreeType,
462
+ limit: '1000',
463
+ directChild: true,
464
+ }
465
+ }).then(function (resp) {
466
+ if (resp.data.code === 200) {
467
+ let nodeUser = resp.data.data.rows ? resp.data.data.rows : resp.data.data
468
+ nodeUser.forEach(item => {
469
+ if (!userIdSet.has(item.userId)) {
470
+ userIdSet.add(item.userId)
471
+ treeUserCenters.push({
472
+ userId: item.userId,
473
+ userName: item.userName,
474
+ nameItem: item.superiorOrgName,
475
+ organName: item.organName
476
+ })
477
+ }
478
+ })
479
+ }
480
+
481
+ })
482
+ })
483
+ } else {
484
+ let userIdSet = new Set()
485
+ data.forEach(itemCom => {
486
+ ajax.get(self.smartFlowServerContext + '/manage/user/getList', {
487
+ params: {
488
+ organId: itemCom.organId,
489
+ orgTreeType: self.organTreeType,
490
+ limit: '1000',
491
+ directChild: true,
492
+ }
493
+ }).then(function (resp) {
494
+ if (resp.data.code === 200) {
495
+ let nodeUser = resp.data.data.rows ? resp.data.data.rows : resp.data.data
496
+ nodeUser.forEach(item => {
497
+ if ((!userIdSet.has(item.userId) && userPermScope.includes(item.userId)) || userPermScope.length <= 0 || !userPermScope[0]) {
498
+ userIdSet.add(item.userId)
499
+ treeUserCenters.push({
500
+ userId: item.userId,
501
+ userName: item.userName,
502
+ nameItem: item.superiorOrgName,
503
+ organName: item.organName
504
+ })
505
+ }
506
+ })
507
+ }
508
+
509
+ })
510
+
511
+ })
512
+ }
513
+
514
+ self.treeUserCenterValue = treeUserCenters
515
+ },
516
+
517
+ // 人员选中
518
+ getReadingRangeUser(row) {
519
+ let self = this
520
+ self.userNum = '2'
521
+ if (row.length > self.selectedKeys.length) {
522
+ // 用户选择了新人员
523
+ self.treeUserValue = row
524
+ self.selectedKeys = row
525
+
526
+ let index = row.length - 1
527
+ let organName = row[index]
528
+
529
+ if (!self.countersignersTagsData.includes(organName)) {
530
+ self.countersignersTagsData.push(organName)
531
+ }
532
+
533
+ self.organChange(self.countersignersTagsData)
534
+
535
+ } else if (row.length < self.selectedKeys.length) {
536
+ // 用户取消了选择
537
+ let diff = self.selectedKeys.find(item => !row.includes(item))
538
+
539
+ // 从 countersignersTagsData 中移除取消的用户
540
+ if (diff) {
541
+ self.countersignersTagsData = self.countersignersTagsData.filter(item => item !== diff)
542
+ self.selectedKeys = row // 更新选中数据
543
+ }
544
+ }
545
+ },
546
+
547
+ //数据初始化?
548
+ organTreeRedis(row, readingRange) {
549
+ let organIds = []
550
+ if (readingRange.length > 0) {
551
+ readingRange[0].forEach(item => {
552
+ organIds.push(item.organId)
553
+ })
554
+ }
555
+ ajax.get(this.smartFlowServerContext + '/manage/user/getAllUsersInfo', {
556
+ params: {
557
+ organIds: organIds.join(','),
558
+ permScopeList: row,
559
+ orgTreeType: this.organTreeType
560
+ }
561
+ }
562
+ ).then(resp => {
563
+ if (resp.data.code === '200') {
564
+ for (let key in resp.data.data) {
565
+ const dataArr = [[key, resp.data.data[key]]]
566
+ for (let i = 0; i < dataArr.length; i++) {
567
+ const [key, value] = dataArr[i]
568
+ this.$set(this.organTree.userMap, key, value)
569
+ }
570
+ }
571
+ }
572
+ })
573
+
574
+ },
575
+
576
+ clearCache() {
577
+ this.readingRangeBM = []
578
+ this.readingRange = []
579
+ this.roleList = []
580
+ this.readingRangePost = []
581
+ this.treeUserCenterValue = []
582
+ this.treePostCenterValue = []
583
+ this.treeValueBM.forEach(item => {
584
+ item.checked = false
585
+ })
586
+ this.treeValueBM = []
587
+ this.treeUserValue = []
588
+ //角色集合
589
+ this.noticeRoleList = []
590
+ this.noticeRoleNameList = []
591
+ this.selectedKeys = []
592
+ //岗位集合
593
+ this.postList = []
594
+ this.treePostValue = []
595
+ this.processPostList = []
596
+ this.treeLength = 0
597
+ this.countersignersTagsData = []
598
+ this.postKeys = []
599
+ //组织类型
600
+ this.readingRangeOrgType = []
601
+ this.readingRangeOrgType.forEach(item => {
602
+ item.checked = false
603
+ })
604
+ this.treeOrgTypeValue = []
605
+ },
606
+ getSystemConfig() {
607
+ const self = this
608
+ ajax.get(self.smartFlowServerContext + '/anon/systemConfig/getSystemConfig').then(function (resp) {
609
+ const result = resp.data
610
+ if (result && result.code === '200') {
611
+ self.ucAdapterType = result.data.ucAdapterType
612
+ }
613
+ }).catch(err => {
614
+ console.log(err)
615
+ })
616
+ },
617
+ //数据初始化
618
+ toggleShowHelpBox(permScope, inputValue, organTreeType, id) {
619
+ this.clearCache()
620
+ this.id = id
621
+ this.permScope = permScope
622
+ this.organTreeType = organTreeType
623
+ // this.organTreeRedis(this.permScope)
624
+ if (inputValue) {
625
+ //加入已选择的数据
626
+ this.getUser(inputValue)
627
+ }
628
+ if (this.permScope == 'all') {
629
+ this.getRootOrganTree(organTreeType)
630
+ this.ucAdapterType === 'sc' ? this.getReadingRangeOrgType(permScope, organTreeType) : ''
631
+ } else {
632
+ this.getReadingRange(this.permScope, this.organTreeType)
633
+ }
634
+
635
+ },
636
+
637
+ showUserDetail(item) {
638
+ if (item.organName) {
639
+ return `(${item.organName} )`
640
+ }
641
+ },
642
+ dataNameClick(data) {
643
+ this.dataName = data
644
+ },
645
+ },
646
+
647
+ watch: {
648
+ countersignersTagsData: {
649
+ handler(newVal, oldVal) {
650
+ let organ = []
651
+ let names = []
652
+ let organs = []
653
+ this.treeValueBM.forEach(item => {
654
+ organ.push(item.code)
655
+ names.push(item.name)
656
+ organs.push(item.code + ':' + item.name)
657
+ })
658
+ let nameValue = []
659
+ let users = []
660
+ this.treeUserValue.forEach(item => {
661
+ const parts = item.split(',')
662
+ nameValue.push(parts[0])
663
+ names.push(parts[1])
664
+ users.push(parts[0] + ':' + parts[1])
665
+ })
666
+ let roleList = []
667
+ let roles = []
668
+ this.noticeRoleList.forEach(item => {
669
+ roleList.push(item.split(',')[0])
670
+ names.push(item.split(',')[1])
671
+ roles.push(item.split(',')[0] + ':' + item.split(',')[1])
672
+ })
673
+ let postList = []
674
+ let positions = []
675
+ this.treePostValue.forEach(item => {
676
+ postList.push(item.split(',')[0])
677
+ names.push(item.split(',')[1])
678
+ positions.push(item.split(',')[0] + ':' + item.split(',')[1])
679
+ })
680
+ let orgTypeList = []
681
+ let orgTypes = []
682
+ this.treeOrgTypeValue.forEach(item => {
683
+ orgTypeList.push(item.bizTypeCode)
684
+ names.push(item.typeName)
685
+ orgTypes.push(item.bizTypeCode + ':' + item.typeName)
686
+ })
687
+ let value = 'O:' + organ.join(';') + ',' + 'U:' + nameValue.join(';') + ',' + 'P:' + postList.join(';') + ',' + 'R:' + roleList.join(';') + ',' + 'RP:,T:' + orgTypeList.join(';')
688
+ let nameStr = names.join(',')
689
+ let detail = {
690
+ organs: organs.join(','),
691
+ users: users.join(','),
692
+ roles: roles.join(','),
693
+ positions: positions.join(','),
694
+ types: orgTypes.join(','),
695
+ }
696
+ this.$emit('update-cand-groups', value, nameStr, detail, this.item.id)
697
+ },
698
+ deep: true // 深度监听数组的变化
699
+ }
700
+ }
701
+ }
702
+ </script>
703
+
704
+ <style scoped>
705
+ .relativePositionAddButton {
706
+ float: right;
707
+ margin-top: 20px;
708
+ }
709
+
710
+ .relativePositionRemoveButton {
711
+ float: right;
712
+ margin: 2px;
713
+ }
714
+
715
+ .cont {
716
+ display: flex;
717
+ justify-content: left;
718
+ margin-top: 10px;
719
+ border: 1px solid #cecece;
720
+ padding: 10px;
721
+ }
722
+
723
+ .contLeft {
724
+ flex: 1; /* 让右侧自适应剩余空间 */
725
+ margin-top: 34px; /* 您原本的33.98px可改为34px */
726
+ min-height: 350px;
727
+ overflow: auto; /* 可选,若内容过长也可滚动 */
728
+ }
729
+
730
+ .contRight {
731
+ flex: 0 0 50%;
732
+ margin-top: 33.98px;
733
+ min-height: 350px;
734
+ }
735
+
736
+ .checkbox-container {
737
+ display: flex;
738
+ flex-direction: column;
739
+ line-height: 30px;
740
+ }
741
+
742
+ .overflowAuto {
743
+ min-height: 350px;
744
+ overflow-y: auto;
745
+ }
746
+
747
+ .contLeftTwo {
748
+ flex: none; /* 改为none,这样不按照flex比例缩放 */
749
+ width: 250px; /* 固定宽度或max-width */
750
+ margin-right: 10px;
751
+ overflow: auto; /* 当内容超过300px宽时出现滚动条 */
752
+ }
753
+
754
+
755
+ /deep/ .ivu-checkbox-input {
756
+ width: 136px;
757
+ }
758
+
759
+ /deep/ .custom-select {
760
+ width: 100% !important;
761
+ }
762
+
763
+ /deep/ .custom-select .ivu-select {
764
+ height: 80px; /* 控制总体高度 */
765
+ min-height: 80px;
766
+ line-height: normal; /* 避免行高过大导致居中 */
767
+ box-sizing: border-box;
768
+ }
769
+
770
+ /deep/ .custom-select .ivu-select-input {
771
+ height: auto !important;
772
+ line-height: normal !important;
773
+ padding: 0 !important;
774
+ margin-top: 0 !important;
775
+
776
+ }
777
+
778
+ /deep/ .custom-select .ivu-select-selection {
779
+ display: flex !important;
780
+ flex-wrap: wrap !important;
781
+ align-items: flex-start !important;
782
+ height: 80px; /* 与上面的高度一致 */
783
+ padding: 8px !important;
784
+ line-height: normal !important;
785
+ overflow-y: auto;
786
+ }
787
+
788
+ /deep/ .custom-select .ivu-select-selection__choice {
789
+ margin: 0 5px 5px 0;
790
+ vertical-align: top;
791
+ }
792
+
793
+ /* 可选:调整下拉箭头的位置 */
794
+ /deep/ .custom-select .ivu-select-arrow {
795
+ display: none;
796
+ }
797
+
798
+ .searchable-select-wrapper {
799
+ position: relative;
800
+ display: inline-block;
801
+ width: 100%;
802
+ }
803
+
804
+ .search-icon {
805
+ position: absolute;
806
+ top: 50%;
807
+ right: 10px;
808
+ zoom: 120%;
809
+ transform: translateY(100%);
810
+ color: #999; /* 根据需要调整图标颜色 */
811
+ pointer-events: none; /* 确保点击图标不会影响选择操作 */
812
+ }
813
+
814
+ </style>