three-trees-ui 1.0.51 → 1.0.53
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.
- package/lib/demo.html +10 -0
- package/lib/three-trees-ui.common.js +50588 -0
- package/lib/three-trees-ui.css +1 -0
- package/lib/three-trees-ui.umd.js +50598 -0
- package/lib/three-trees-ui.umd.min.js +1 -0
- package/package.json +2 -11
- package/packages/CustomDialog/src/customDialog.js +6 -12
- package/packages/CustomDialog/src/customDialog.vue +382 -28
- package/packages/Icon/src/icons/drag.js +14 -0
- package/packages/Icon/src/icons/index.js +1 -0
- package/packages/Subtable/src/SubExportDialog.vue +2 -2
- package/packages/Table/src/Table.vue +1 -3
- package/packages/TemplatePreview/src/TemplatePreview.vue +3 -3
- package/src/mixins/templatePreview.js +0 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "three-trees-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.53",
|
|
4
4
|
"publicPath": "/ui",
|
|
5
5
|
"author": "hotent",
|
|
6
6
|
"private": false,
|
|
@@ -133,14 +133,5 @@
|
|
|
133
133
|
"webpack-node-externals": "^1.7.2",
|
|
134
134
|
"xlsx": "^0.16.6"
|
|
135
135
|
},
|
|
136
|
-
"license": "MIT"
|
|
137
|
-
"description": "[](https://npmjs.org/package/three-trees-ui) [](https://npmjs.org/package/three-trees-ui) [](https://david-dm.org/dvajs/three-trees-ui)",
|
|
138
|
-
"directories": {
|
|
139
|
-
"example": "examples",
|
|
140
|
-
"test": "tests"
|
|
141
|
-
},
|
|
142
|
-
"repository": {
|
|
143
|
-
"type": "git",
|
|
144
|
-
"url": "http://10.10.78.172:2080/gitlab/xuyh/three-trees-ui.git"
|
|
145
|
-
}
|
|
136
|
+
"license": "MIT"
|
|
146
137
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import utils from '@/utils.js'
|
|
2
2
|
import mobileMode from '@/mixins/mobileMode.js'
|
|
3
|
-
import { Loading } from 'element-ui'
|
|
4
3
|
|
|
5
4
|
export default {
|
|
6
5
|
mixins: [mobileMode],
|
|
@@ -11,7 +10,7 @@ export default {
|
|
|
11
10
|
total: 0,
|
|
12
11
|
form: {},
|
|
13
12
|
itemSavestate: {},
|
|
14
|
-
|
|
13
|
+
tableLoading: false,
|
|
15
14
|
}
|
|
16
15
|
},
|
|
17
16
|
methods: {
|
|
@@ -26,19 +25,14 @@ export default {
|
|
|
26
25
|
this.dialogData = data
|
|
27
26
|
}
|
|
28
27
|
},
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.loadingInstance.close()
|
|
32
|
-
}
|
|
28
|
+
closeTableLoading() {
|
|
29
|
+
this.tableLoading = false
|
|
33
30
|
},
|
|
34
31
|
getDialoglistJson(pagination) {
|
|
35
32
|
if (this.isMobile) {
|
|
36
33
|
this.$showLoading()
|
|
37
34
|
} else {
|
|
38
|
-
this.
|
|
39
|
-
fullscreen: true,
|
|
40
|
-
text: '查询中...',
|
|
41
|
-
})
|
|
35
|
+
this.tableLoading = true
|
|
42
36
|
}
|
|
43
37
|
return this.$requestConfig
|
|
44
38
|
.request({
|
|
@@ -50,7 +44,7 @@ export default {
|
|
|
50
44
|
if (this.isMobile) {
|
|
51
45
|
this.$cancelLoading()
|
|
52
46
|
} else {
|
|
53
|
-
this.
|
|
47
|
+
this.closeTableLoading()
|
|
54
48
|
}
|
|
55
49
|
const listKey = pagination.listKey
|
|
56
50
|
? pagination.listKey
|
|
@@ -91,7 +85,7 @@ export default {
|
|
|
91
85
|
if (this.isMobile) {
|
|
92
86
|
this.$cancelLoading()
|
|
93
87
|
} else {
|
|
94
|
-
this.
|
|
88
|
+
this.closeTableLoading()
|
|
95
89
|
}
|
|
96
90
|
})
|
|
97
91
|
},
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
append-to-body
|
|
9
9
|
top="6vh"
|
|
10
10
|
width="75%"
|
|
11
|
+
class="hontent-custom-dialog"
|
|
11
12
|
@opened="afterOpen"
|
|
12
13
|
>
|
|
13
14
|
<el-container :style="style" style="overflow: auto">
|
|
@@ -267,6 +268,8 @@
|
|
|
267
268
|
<el-main ref="customTableRef" class="custom-dialog_main">
|
|
268
269
|
<el-table
|
|
269
270
|
ref="orgTable"
|
|
271
|
+
v-loading="tableLoading"
|
|
272
|
+
element-loading-text="查询中..."
|
|
270
273
|
:data="dialogData"
|
|
271
274
|
stripe
|
|
272
275
|
border
|
|
@@ -274,6 +277,7 @@
|
|
|
274
277
|
size="medium"
|
|
275
278
|
style="width: 100%"
|
|
276
279
|
:height="tableHeight"
|
|
280
|
+
:row-key="isSetPk !== '' ? isSetPk : 'custom_dialog_rowId'"
|
|
277
281
|
@row-click="orgRowClick"
|
|
278
282
|
@selection-change="orgTableSelection"
|
|
279
283
|
@select="onTableSelect"
|
|
@@ -283,6 +287,7 @@
|
|
|
283
287
|
v-if="customDialog.selectNum != 1"
|
|
284
288
|
type="selection"
|
|
285
289
|
align="center"
|
|
290
|
+
reserve-selection
|
|
286
291
|
width="55"
|
|
287
292
|
></el-table-column>
|
|
288
293
|
<el-table-column
|
|
@@ -343,6 +348,84 @@
|
|
|
343
348
|
</el-row>
|
|
344
349
|
</el-footer>
|
|
345
350
|
</el-container>
|
|
351
|
+
<div v-if="isSetPk !== ''" id="right" class="list-selector__selected">
|
|
352
|
+
<el-card shadow="hover">
|
|
353
|
+
<div slot="header" class="selector-selected__header clearfix">
|
|
354
|
+
<span>已选择({{ selectsCount }})</span>
|
|
355
|
+
<el-button
|
|
356
|
+
type="text"
|
|
357
|
+
style="float: right; padding: 3px 0"
|
|
358
|
+
@click="clearAllSelects"
|
|
359
|
+
>
|
|
360
|
+
{{ $t('ht.common.clear') }}
|
|
361
|
+
</el-button>
|
|
362
|
+
</div>
|
|
363
|
+
<el-scrollbar
|
|
364
|
+
v-if="selectsCount > 0"
|
|
365
|
+
class="selector-selected__scroll"
|
|
366
|
+
>
|
|
367
|
+
<draggable
|
|
368
|
+
v-model="selects"
|
|
369
|
+
class="selector-selected__wrap"
|
|
370
|
+
tag="ul"
|
|
371
|
+
v-bind="dragOptions"
|
|
372
|
+
handle=".list-selector__handle"
|
|
373
|
+
@start="isDragging = true"
|
|
374
|
+
@end="isDragging = false"
|
|
375
|
+
>
|
|
376
|
+
<li
|
|
377
|
+
v-for="(select, selectIndex) in selects"
|
|
378
|
+
:key="select[primaryFieldProp] + selectIndex"
|
|
379
|
+
class="selector-selected__item"
|
|
380
|
+
>
|
|
381
|
+
<div
|
|
382
|
+
class="selector-selected__item-left"
|
|
383
|
+
@dblclick="removeSelected(select)"
|
|
384
|
+
>
|
|
385
|
+
<ht-icon
|
|
386
|
+
v-if="!single"
|
|
387
|
+
name="drag"
|
|
388
|
+
class="list-selector__handle follow-theme-color"
|
|
389
|
+
width="16"
|
|
390
|
+
height="16"
|
|
391
|
+
fill=""
|
|
392
|
+
/>
|
|
393
|
+
<div class="selector-text">
|
|
394
|
+
{{ select[primaryFieldProp] }}
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
<i
|
|
398
|
+
v-if="!single"
|
|
399
|
+
:class="
|
|
400
|
+
selectIndex == 0 ? 'is-disabled' : 'selector-selected__up'
|
|
401
|
+
"
|
|
402
|
+
class="el-icon-top hover-follow-theme-color"
|
|
403
|
+
@click="sort(select, 'up')"
|
|
404
|
+
></i>
|
|
405
|
+
<i
|
|
406
|
+
v-if="!single"
|
|
407
|
+
class="el-icon-bottom hover-follow-theme-color"
|
|
408
|
+
:class="
|
|
409
|
+
selectIndex == selects.length - 1
|
|
410
|
+
? 'is-disabled'
|
|
411
|
+
: 'selector-selected__down'
|
|
412
|
+
"
|
|
413
|
+
@click="sort(select, 'down')"
|
|
414
|
+
></i>
|
|
415
|
+
<i
|
|
416
|
+
class="el-icon-error selector-selected__remove hover-follow-theme-color"
|
|
417
|
+
@click="removeSelected(select)"
|
|
418
|
+
></i>
|
|
419
|
+
</li>
|
|
420
|
+
</draggable>
|
|
421
|
+
</el-scrollbar>
|
|
422
|
+
<div v-else class="el-tree__empty-block">
|
|
423
|
+
<span class="el-tree__empty-text">
|
|
424
|
+
{{ t('el.table.emptyText') }}
|
|
425
|
+
</span>
|
|
426
|
+
</div>
|
|
427
|
+
</el-card>
|
|
428
|
+
</div>
|
|
346
429
|
</el-container>
|
|
347
430
|
<span slot="footer" class="dialog-footer" style="text-align: center">
|
|
348
431
|
<el-button size="small" type="primary" @click="dialogConfirm">
|
|
@@ -442,8 +525,10 @@
|
|
|
442
525
|
import form from '@/mixins/form.js'
|
|
443
526
|
import dialog from './customDialog.js'
|
|
444
527
|
import CustomQuery from '@/services/CustomQuery'
|
|
528
|
+
const draggable = require('vuedraggable')
|
|
445
529
|
export default {
|
|
446
530
|
name: 'CustomDialog',
|
|
531
|
+
components: { draggable },
|
|
447
532
|
mixins: [dialog, locale, inputName, permission, form],
|
|
448
533
|
props: {
|
|
449
534
|
custdialog: {
|
|
@@ -528,9 +613,17 @@
|
|
|
528
613
|
customDialogParams: {},
|
|
529
614
|
treeDialogConfig: null,
|
|
530
615
|
isPreview: false,
|
|
616
|
+
isDisabledConfirmBtn: true,
|
|
617
|
+
selects: [],
|
|
618
|
+
fromKey: '',
|
|
619
|
+
isSetPk: '',
|
|
620
|
+
primaryFieldProp: '',
|
|
531
621
|
}
|
|
532
622
|
},
|
|
533
623
|
computed: {
|
|
624
|
+
selectsCount() {
|
|
625
|
+
return this.selects && this.selects.length > 0 ? this.selects.length : 0
|
|
626
|
+
},
|
|
534
627
|
//默认展开的节点的 key 的数组
|
|
535
628
|
defaultExpandedKeys: function() {
|
|
536
629
|
if (
|
|
@@ -575,10 +668,10 @@
|
|
|
575
668
|
let currentObj = returnStr.find((item) => {
|
|
576
669
|
return item.comment.toLowerCase() === from
|
|
577
670
|
})
|
|
578
|
-
|
|
579
|
-
if (fromKey) {
|
|
671
|
+
this.fromKey = currentObj ? currentObj.field : ''
|
|
672
|
+
if (this.fromKey) {
|
|
580
673
|
this.selectOrgs = val.filter((item) => {
|
|
581
|
-
return this.value.split(',').includes(item[fromKey])
|
|
674
|
+
return this.value.split(',').includes(item[this.fromKey])
|
|
582
675
|
})
|
|
583
676
|
}
|
|
584
677
|
}
|
|
@@ -586,6 +679,13 @@
|
|
|
586
679
|
immediate: true,
|
|
587
680
|
deep: true,
|
|
588
681
|
},
|
|
682
|
+
selects(val) {
|
|
683
|
+
if (val && val.length) {
|
|
684
|
+
this.isDisabledConfirmBtn = false
|
|
685
|
+
} else {
|
|
686
|
+
this.isDisabledConfirmBtn = true
|
|
687
|
+
}
|
|
688
|
+
},
|
|
589
689
|
},
|
|
590
690
|
mounted() {
|
|
591
691
|
this.$root.$on('resize', () => {
|
|
@@ -611,6 +711,7 @@
|
|
|
611
711
|
},
|
|
612
712
|
showDialog(isMounted = false, isPreview = false) {
|
|
613
713
|
this.isPreview = isPreview
|
|
714
|
+
this.selects = []
|
|
614
715
|
this.fixedParams = {}
|
|
615
716
|
// 如果已存在配置信息就不去请求配置信息 直接初始化数据
|
|
616
717
|
if (this.dialogConfig) {
|
|
@@ -711,6 +812,14 @@
|
|
|
711
812
|
}
|
|
712
813
|
if (customDialog.style == 0 || customDialog.style == 2) {
|
|
713
814
|
//列表
|
|
815
|
+
let returnStrArray = JSON.parse(customDialog.resultfield)
|
|
816
|
+
if (returnStrArray && returnStrArray.length > 0) {
|
|
817
|
+
let result = returnStrArray.filter((item) => item.isPK)
|
|
818
|
+
if (result && result.length > 0) {
|
|
819
|
+
this.isSetPk = result[0].field
|
|
820
|
+
this.primaryFieldProp = this.isSetPk
|
|
821
|
+
}
|
|
822
|
+
}
|
|
714
823
|
setTimeout(() => {
|
|
715
824
|
this_.customDialogShow(
|
|
716
825
|
{
|
|
@@ -749,6 +858,15 @@
|
|
|
749
858
|
}
|
|
750
859
|
}
|
|
751
860
|
}
|
|
861
|
+
if (this.isSetPk !== '') {
|
|
862
|
+
let valueData = this.value ? this.value.split(',') : []
|
|
863
|
+
for (var i = 0; i < valueData.length; i++) {
|
|
864
|
+
let obj = {}
|
|
865
|
+
obj[this.isSetPk] = valueData[i]
|
|
866
|
+
this.selects.push({ ...obj })
|
|
867
|
+
}
|
|
868
|
+
this.selectOrgs = [...this.selects]
|
|
869
|
+
}
|
|
752
870
|
},
|
|
753
871
|
initTableHeight() {
|
|
754
872
|
this.$nextTick(() => {
|
|
@@ -766,12 +884,14 @@
|
|
|
766
884
|
if (this.customDialog.selectNum === 1) {
|
|
767
885
|
this.propsData = []
|
|
768
886
|
this.propsData.push(data)
|
|
887
|
+
this.selects = this.propsData
|
|
769
888
|
}
|
|
770
889
|
},
|
|
771
890
|
getChecked() {
|
|
772
891
|
// 多选
|
|
773
892
|
if (this.customDialog.selectNum === -1) {
|
|
774
893
|
this.propsData = this.$refs.tree.getCheckedNodes()
|
|
894
|
+
this.selects = this.propsData
|
|
775
895
|
}
|
|
776
896
|
},
|
|
777
897
|
customDialogShow(pageParam, isMounted = false) {
|
|
@@ -1401,23 +1521,35 @@
|
|
|
1401
1521
|
return value
|
|
1402
1522
|
},
|
|
1403
1523
|
checkList() {
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1524
|
+
if (this.isSetPk !== '') {
|
|
1525
|
+
this.checkBoxDataAll = this.selects
|
|
1526
|
+
if (this.customDialog.selectNum === 1) {
|
|
1527
|
+
let resData = this.dialogData.findIndex(
|
|
1528
|
+
(item) =>
|
|
1529
|
+
item.hasOwnProperty(this.isSetPk) &&
|
|
1530
|
+
item[this.isSetPk] == this.checkBoxDataAll[0][this.isSetPk]
|
|
1531
|
+
)
|
|
1532
|
+
this.tableRadioVal = resData
|
|
1533
|
+
} else {
|
|
1534
|
+
let selectedMarkList = []
|
|
1535
|
+
this.checkBoxDataAll.map((item) => {
|
|
1536
|
+
if (item.hasOwnProperty(this.isSetPk)) {
|
|
1537
|
+
selectedMarkList.push(item[this.isSetPk])
|
|
1538
|
+
}
|
|
1539
|
+
})
|
|
1540
|
+
this.dialogData.forEach((row) => {
|
|
1541
|
+
if (selectedMarkList.includes(row[this.isSetPk])) {
|
|
1542
|
+
this.$nextTick(() => {
|
|
1543
|
+
this.$refs.orgTable.toggleRowSelection(row, true)
|
|
1544
|
+
})
|
|
1545
|
+
} else {
|
|
1546
|
+
this.$nextTick(() => {
|
|
1547
|
+
this.$refs.orgTable.toggleRowSelection(row, false)
|
|
1548
|
+
})
|
|
1417
1549
|
}
|
|
1418
1550
|
})
|
|
1419
1551
|
}
|
|
1420
|
-
}
|
|
1552
|
+
}
|
|
1421
1553
|
},
|
|
1422
1554
|
toggleRowSelection(res, val) {
|
|
1423
1555
|
this.$refs.orgTable.toggleRowSelection(this.dialogData[res], val)
|
|
@@ -1430,19 +1562,31 @@
|
|
|
1430
1562
|
)
|
|
1431
1563
|
this.selectOrgs = []
|
|
1432
1564
|
this.selectOrgs.push(row)
|
|
1565
|
+
this.selects = this.selectOrgs
|
|
1433
1566
|
} else if (this.customDialog.selectNum != 1) {
|
|
1434
1567
|
this.isCurrentChange = false
|
|
1435
1568
|
//判断点击列表数据时复选框是否勾选 selected:true不勾选,false勾选
|
|
1569
|
+
let resData = this.selectOrgs.findIndex(
|
|
1570
|
+
(item) =>
|
|
1571
|
+
item.hasOwnProperty(this.isSetPk) &&
|
|
1572
|
+
item[this.isSetPk] == row[this.isSetPk]
|
|
1573
|
+
)
|
|
1436
1574
|
let selected =
|
|
1437
|
-
this.selectOrgs &&
|
|
1438
|
-
this.selectOrgs.length > 0 &&
|
|
1439
|
-
this.indexArray(this.selectOrgs, row) !== -1
|
|
1575
|
+
this.selectOrgs && this.selectOrgs.length > 0 && resData !== -1
|
|
1440
1576
|
if (selected) {
|
|
1441
1577
|
this.isCurrentChange = true
|
|
1442
|
-
|
|
1443
|
-
this.
|
|
1578
|
+
this.selectOrgs.splice(resData, 1)
|
|
1579
|
+
let selectsIndex = this.selects.findIndex(
|
|
1580
|
+
(item) =>
|
|
1581
|
+
item.hasOwnProperty(this.isSetPk) &&
|
|
1582
|
+
item[this.isSetPk] == row[this.isSetPk]
|
|
1583
|
+
)
|
|
1584
|
+
if (selectsIndex !== -1) {
|
|
1585
|
+
this.selects.splice(selectsIndex, 1)
|
|
1586
|
+
}
|
|
1444
1587
|
}
|
|
1445
1588
|
this.$refs.orgTable.toggleRowSelection(row)
|
|
1589
|
+
this.syncSelection2selects()
|
|
1446
1590
|
}
|
|
1447
1591
|
},
|
|
1448
1592
|
//列表复选框有改变时触发
|
|
@@ -1489,20 +1633,32 @@
|
|
|
1489
1633
|
}
|
|
1490
1634
|
}
|
|
1491
1635
|
}
|
|
1636
|
+
this.syncSelection2selects()
|
|
1492
1637
|
},
|
|
1493
1638
|
//点击列表某一个复选框时触发
|
|
1494
1639
|
onTableSelect(rows, row) {
|
|
1495
1640
|
this.isCurrentChange = false
|
|
1496
1641
|
//判断点击列表数据时复选框是否勾选 selected:true不勾选,false勾选
|
|
1642
|
+
let resData = this.selectOrgs.findIndex(
|
|
1643
|
+
(item) =>
|
|
1644
|
+
item.hasOwnProperty(this.isSetPk) &&
|
|
1645
|
+
item[this.isSetPk] == row[this.isSetPk]
|
|
1646
|
+
)
|
|
1497
1647
|
let selected =
|
|
1498
|
-
this.selectOrgs &&
|
|
1499
|
-
this.selectOrgs.length > 0 &&
|
|
1500
|
-
this.indexArray(this.selectOrgs, row) !== -1
|
|
1648
|
+
this.selectOrgs && this.selectOrgs.length > 0 && resData !== -1
|
|
1501
1649
|
if (selected) {
|
|
1502
1650
|
this.isCurrentChange = true
|
|
1503
|
-
|
|
1504
|
-
this.
|
|
1651
|
+
this.selectOrgs.splice(resData, 1)
|
|
1652
|
+
let selectsIndex = this.selects.findIndex(
|
|
1653
|
+
(item) =>
|
|
1654
|
+
item.hasOwnProperty(this.isSetPk) &&
|
|
1655
|
+
item[this.isSetPk] == row[this.isSetPk]
|
|
1656
|
+
)
|
|
1657
|
+
if (selectsIndex !== -1) {
|
|
1658
|
+
this.selects.splice(selectsIndex, 1)
|
|
1659
|
+
}
|
|
1505
1660
|
}
|
|
1661
|
+
this.syncSelection2selects()
|
|
1506
1662
|
},
|
|
1507
1663
|
selectAll(selection) {
|
|
1508
1664
|
if (this.oldselectOrgs != null && selection.length > 0) {
|
|
@@ -1515,6 +1671,7 @@
|
|
|
1515
1671
|
} else {
|
|
1516
1672
|
this.selectOrgs = _.cloneDeep(selection)
|
|
1517
1673
|
}
|
|
1674
|
+
this.syncSelection2selects()
|
|
1518
1675
|
},
|
|
1519
1676
|
checkNode(data, this_, pnode) {
|
|
1520
1677
|
if (!data.Pid) {
|
|
@@ -1571,13 +1728,15 @@
|
|
|
1571
1728
|
const this_ = this
|
|
1572
1729
|
this_.queryParam = ''
|
|
1573
1730
|
this.setDialogData([])
|
|
1574
|
-
this.
|
|
1731
|
+
this.closeTableLoading()
|
|
1575
1732
|
this_.customDialogShowList = false
|
|
1576
1733
|
//判断是否是点击了确认再点击取消的 inputVal没有值则表示直接点击的取消
|
|
1577
1734
|
if (!this_.inputVal) {
|
|
1578
1735
|
this_.selectOrgs = []
|
|
1736
|
+
this_.selects = []
|
|
1579
1737
|
} else {
|
|
1580
1738
|
this_.selectOrgs = this_.showData ? [...this_.showData] : ''
|
|
1739
|
+
this_.selects = [...this_.selectOrgs]
|
|
1581
1740
|
this.checkBoxDataAll = [...this_.selectOrgs]
|
|
1582
1741
|
}
|
|
1583
1742
|
},
|
|
@@ -1817,6 +1976,7 @@
|
|
|
1817
1976
|
clearAll() {
|
|
1818
1977
|
this.checkBoxDataAll = []
|
|
1819
1978
|
this.selectOrgs = []
|
|
1979
|
+
this.selects = []
|
|
1820
1980
|
this.showData = []
|
|
1821
1981
|
this.propsData = []
|
|
1822
1982
|
this.syncInputValue()
|
|
@@ -2070,6 +2230,80 @@
|
|
|
2070
2230
|
handleClose() {
|
|
2071
2231
|
this.dialogVisible = false
|
|
2072
2232
|
},
|
|
2233
|
+
// 同步已选行到已选数据中去
|
|
2234
|
+
syncSelection2selects() {
|
|
2235
|
+
// 复制一份当前已选数据
|
|
2236
|
+
let tmpSelects = [...this.selects]
|
|
2237
|
+
// 先将当前页中的数据从已选数据中移除
|
|
2238
|
+
this.dialogData.forEach((m) => {
|
|
2239
|
+
let Index = tmpSelects.findIndex(
|
|
2240
|
+
(item) =>
|
|
2241
|
+
item.hasOwnProperty(this.isSetPk) &&
|
|
2242
|
+
item[this.isSetPk] == m[this.isSetPk]
|
|
2243
|
+
)
|
|
2244
|
+
if (Index !== -1) {
|
|
2245
|
+
tmpSelects.splice(Index, 1)
|
|
2246
|
+
}
|
|
2247
|
+
})
|
|
2248
|
+
// 将剩余的已选数据与当前页选中的数据合并
|
|
2249
|
+
tmpSelects = [...tmpSelects, ...this.$refs.orgTable.selection]
|
|
2250
|
+
let copytmpSelects = _.cloneDeep(tmpSelects)
|
|
2251
|
+
if (this.isSetPk !== '') {
|
|
2252
|
+
this.selects = this.fn1(copytmpSelects, this.isSetPk)
|
|
2253
|
+
}
|
|
2254
|
+
|
|
2255
|
+
// 数组去重
|
|
2256
|
+
this.selects = _.uniqWith(this.selects, _.isEqual)
|
|
2257
|
+
},
|
|
2258
|
+
fn1(tempArr, isSetPk) {
|
|
2259
|
+
for (let i = 0; i < tempArr.length; i++) {
|
|
2260
|
+
for (let j = i + 1; j < tempArr.length; j++) {
|
|
2261
|
+
//排除custom_dialog_rowId比较
|
|
2262
|
+
let a = tempArr[i]
|
|
2263
|
+
let b = tempArr[j]
|
|
2264
|
+
delete a.custom_dialog_rowId
|
|
2265
|
+
delete b.custom_dialog_rowId
|
|
2266
|
+
if (
|
|
2267
|
+
tempArr[i].hasOwnProperty(isSetPk) &&
|
|
2268
|
+
tempArr[j].hasOwnProperty(isSetPk) &&
|
|
2269
|
+
tempArr[i][this.isSetPk] == tempArr[j][this.isSetPk] &&
|
|
2270
|
+
_.isEqual(a, b)
|
|
2271
|
+
) {
|
|
2272
|
+
tempArr.splice(j, 1)
|
|
2273
|
+
j--
|
|
2274
|
+
}
|
|
2275
|
+
}
|
|
2276
|
+
}
|
|
2277
|
+
return tempArr
|
|
2278
|
+
},
|
|
2279
|
+
removeSelected(select) {
|
|
2280
|
+
this.selects.splice(select, 1)
|
|
2281
|
+
this.selectOrgs.forEach((row) => {
|
|
2282
|
+
if (row[this.isSetPk] == select[this.isSetPk]) {
|
|
2283
|
+
// 对比成功之后,取消选中
|
|
2284
|
+
this.$nextTick(() => {
|
|
2285
|
+
this.$refs.orgTable.toggleRowSelection(
|
|
2286
|
+
this.dialogData.find((item) => {
|
|
2287
|
+
return item[this.isSetPk] == select[this.isSetPk]
|
|
2288
|
+
}),
|
|
2289
|
+
false
|
|
2290
|
+
)
|
|
2291
|
+
// 取消选中后还要把数据删除
|
|
2292
|
+
let res = this.indexArray(this.selectOrgs, row)
|
|
2293
|
+
this.selectOrgs.splice(res, 1)
|
|
2294
|
+
})
|
|
2295
|
+
}
|
|
2296
|
+
})
|
|
2297
|
+
},
|
|
2298
|
+
clearAllSelects() {
|
|
2299
|
+
this.selects = []
|
|
2300
|
+
this.selectOrgs = []
|
|
2301
|
+
this.$refs.orgTable.clearSelection()
|
|
2302
|
+
},
|
|
2303
|
+
//显示字段排序
|
|
2304
|
+
sort(select, type) {
|
|
2305
|
+
this.selects = utils.arrayMove(this.selects, select, type)
|
|
2306
|
+
},
|
|
2073
2307
|
},
|
|
2074
2308
|
}
|
|
2075
2309
|
</script>
|
|
@@ -2266,4 +2500,124 @@
|
|
|
2266
2500
|
min-height: 350px;
|
|
2267
2501
|
padding: 0 20px !important;
|
|
2268
2502
|
}
|
|
2503
|
+
.list-selector__selected {
|
|
2504
|
+
height: 100%;
|
|
2505
|
+
.selector-selected__wrap {
|
|
2506
|
+
list-style: none;
|
|
2507
|
+
width: calc(100% - 24px);
|
|
2508
|
+
padding: 10px;
|
|
2509
|
+
|
|
2510
|
+
li {
|
|
2511
|
+
line-height: 20px;
|
|
2512
|
+
}
|
|
2513
|
+
|
|
2514
|
+
li + li {
|
|
2515
|
+
margin-top: 10px;
|
|
2516
|
+
}
|
|
2517
|
+
|
|
2518
|
+
.selector-selected__item {
|
|
2519
|
+
height: 36px;
|
|
2520
|
+
padding: 0 6px;
|
|
2521
|
+
display: flex;
|
|
2522
|
+
align-items: center;
|
|
2523
|
+
justify-content: space-between;
|
|
2524
|
+
|
|
2525
|
+
&:hover {
|
|
2526
|
+
background-color: #f8f8f8;
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
.selector-selected__remove {
|
|
2530
|
+
color: #bfbfbf;
|
|
2531
|
+
&:hover {
|
|
2532
|
+
color: #409eff;
|
|
2533
|
+
}
|
|
2534
|
+
}
|
|
2535
|
+
.selector-selected__up {
|
|
2536
|
+
&:hover {
|
|
2537
|
+
color: #409eff;
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
.selector-selected__down {
|
|
2541
|
+
&:hover {
|
|
2542
|
+
color: #409eff;
|
|
2543
|
+
}
|
|
2544
|
+
}
|
|
2545
|
+
|
|
2546
|
+
.selector-selected__item-left {
|
|
2547
|
+
display: flex;
|
|
2548
|
+
align-items: center;
|
|
2549
|
+
width: 155px;
|
|
2550
|
+
.selector-text {
|
|
2551
|
+
width: 120px;
|
|
2552
|
+
text-align: left;
|
|
2553
|
+
text-overflow: ellipsis;
|
|
2554
|
+
overflow: hidden;
|
|
2555
|
+
white-space: nowrap;
|
|
2556
|
+
}
|
|
2557
|
+
|
|
2558
|
+
.list-selector__handle {
|
|
2559
|
+
cursor: move;
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2562
|
+
div {
|
|
2563
|
+
margin-left: 10px;
|
|
2564
|
+
}
|
|
2565
|
+
}
|
|
2566
|
+
i {
|
|
2567
|
+
font-size: 16px;
|
|
2568
|
+
}
|
|
2569
|
+
}
|
|
2570
|
+
}
|
|
2571
|
+
.el-tree__empty-block {
|
|
2572
|
+
height: 80px;
|
|
2573
|
+
}
|
|
2574
|
+
.is-disabled {
|
|
2575
|
+
color: #c0c4cc;
|
|
2576
|
+
cursor: not-allowed;
|
|
2577
|
+
}
|
|
2578
|
+
}
|
|
2579
|
+
</style>
|
|
2580
|
+
|
|
2581
|
+
<style lang="scss">
|
|
2582
|
+
.hontent-custom-dialog {
|
|
2583
|
+
#container {
|
|
2584
|
+
display: flex; /*中间弹性盒布局*/
|
|
2585
|
+
flex-wrap: nowrap; /*排列不下时不换行*/
|
|
2586
|
+
text-align: center;
|
|
2587
|
+
padding-left: 24px;
|
|
2588
|
+
}
|
|
2589
|
+
#center {
|
|
2590
|
+
order: 1;
|
|
2591
|
+
flex: 1;
|
|
2592
|
+
width: var(--middleWidth);
|
|
2593
|
+
.el-header {
|
|
2594
|
+
border-bottom: none !important;
|
|
2595
|
+
}
|
|
2596
|
+
}
|
|
2597
|
+
#left {
|
|
2598
|
+
order: 0;
|
|
2599
|
+
width: calc(var(--leftWidth) - 24px);
|
|
2600
|
+
padding-right: 24px;
|
|
2601
|
+
}
|
|
2602
|
+
#right {
|
|
2603
|
+
order: 2;
|
|
2604
|
+
width: 250px;
|
|
2605
|
+
padding-left: 24px;
|
|
2606
|
+
}
|
|
2607
|
+
.el-card__body {
|
|
2608
|
+
height: calc(var(--customHeight) - 130px - 48px - 25px - 24px);
|
|
2609
|
+
overflow: auto;
|
|
2610
|
+
@include base-scrollbar;
|
|
2611
|
+
}
|
|
2612
|
+
.el-card__header {
|
|
2613
|
+
height: 48px;
|
|
2614
|
+
background: #f9f9f9;
|
|
2615
|
+
line-height: 24px;
|
|
2616
|
+
text-align: left;
|
|
2617
|
+
font-size: 16px;
|
|
2618
|
+
}
|
|
2619
|
+
.el-dialog__footer {
|
|
2620
|
+
padding: 20px 24px 0px;
|
|
2621
|
+
}
|
|
2622
|
+
}
|
|
2269
2623
|
</style>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Icon from '../main.vue'
|
|
2
|
+
|
|
3
|
+
Icon.register({
|
|
4
|
+
drag: {
|
|
5
|
+
width: 1024,
|
|
6
|
+
height: 1024,
|
|
7
|
+
paths: [
|
|
8
|
+
{
|
|
9
|
+
d:
|
|
10
|
+
'M128 0h256v227.584H128z m512 0h256v227.584H640zM128 398.208h256v227.584H128V398.208z m512 0h256v227.584H640V398.208z m-512 398.208h256V1024H128z m512 0h256V1024H640z',
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
})
|