n20-common-lib 3.0.37 → 3.0.38
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/package.json +1 -1
- package/src/assets/css/_coreLib.scss +4 -1
- package/src/assets/css/button.scss +8 -19
- package/src/assets/css/element-variables.scss +11 -11
- package/src/assets/css/file-upload-table.scss +10 -0
- package/src/assets/css/layout-content.scss +1 -0
- package/src/{components/PageHeader/style.scss → assets/css/page-header.scss} +22 -7
- package/src/assets/css/page.scss +12 -0
- package/src/assets/css/pagination.scss +75 -17
- package/src/assets/css/rootvar.scss +1 -0
- package/src/assets/css/secondary-tab.scss +60 -43
- package/src/assets/css/table.scss +165 -19
- package/src/assets/css/tabs.scss +68 -0
- package/src/components/FileUploadTable/aiCheckDialog.vue +2 -2
- package/src/components/PageHeader/index.vue +11 -6
- package/src/components/PageLayout/page.vue +15 -3
- package/src/components/Pagination/index.vue +7 -4
- package/src/components/Pagination/main.vue +113 -0
- package/src/components/SecondaryTab/index.vue +45 -34
- package/src/components/ShowColumn/index.vue +14 -4
- package/src/components/TableOperate/index.vue +101 -0
- package/src/components/TablePro/index.vue +171 -95
- package/src/components/TableSetSize/index.vue +3 -3
- package/src/components/TableSetSize/index1.vue +82 -0
- package/src/components/Tabs/index.vue +64 -0
- package/src/index.js +4 -1
- package/style/index.css +1 -1
- package/theme/blue.css +1 -1
- package/theme/cctcRed.css +1 -1
- package/theme/green.css +1 -1
- package/theme/lightBlue.css +1 -1
- package/theme/orange.css +1 -1
- package/theme/purple.css +1 -1
- package/theme/red.css +1 -1
- package/theme/yellow.css +1 -1
- package/src/components/TableSetSize/index copy.vue +0 -69
- package/src/components/TableSetSize/style.scss +0 -81
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
<div class="skeleton-cell" v-for="col in skeletonCols" :key="'col-' + col"></div>
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
10
|
+
<!-- 表格 -->
|
|
10
11
|
<vxe-table
|
|
11
12
|
ref="vxeTable"
|
|
12
13
|
:key="colsKey"
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
iconMatch: 'n20-icon-xiala-moren'
|
|
49
50
|
}"
|
|
50
51
|
:merge-cells="mergeCells"
|
|
52
|
+
:row-class-name="getRowClassName"
|
|
51
53
|
v-bind="Object.assign({ size: size }, $attrs, sizeBind)"
|
|
52
54
|
v-on="$listeners"
|
|
53
55
|
@sort-change="(val) => customSortMethod(val)"
|
|
@@ -58,6 +60,7 @@
|
|
|
58
60
|
@cell-mouseleave="handleCellMouseLeave"
|
|
59
61
|
@scroll="handleTableScroll"
|
|
60
62
|
@toggle-tree-expand="syncExpandState"
|
|
63
|
+
@column-resizable-change="resizableChange"
|
|
61
64
|
>
|
|
62
65
|
<template v-for="(item, i) in _columns">
|
|
63
66
|
<slot v-if="item.slotName" :name="item.slotName" :column="item"></slot>
|
|
@@ -201,45 +204,45 @@
|
|
|
201
204
|
></i>
|
|
202
205
|
</div>
|
|
203
206
|
</template>
|
|
204
|
-
|
|
205
|
-
|
|
207
|
+
<!-- 处理旧格式 formatter 和 render -->
|
|
208
|
+
<template v-if="item._oldFormatter || item._oldRender" #default="{ row, column }">
|
|
209
|
+
<!-- 旧的 render 函数 -->
|
|
210
|
+
<template v-if="item._oldRender && item.render">
|
|
211
|
+
<vxe-tooltip :content="row[column.property]">
|
|
212
|
+
<template #default>
|
|
213
|
+
<div v-html="item.render($createElement, row)"></div>
|
|
214
|
+
</template>
|
|
215
|
+
</vxe-tooltip>
|
|
216
|
+
</template>
|
|
217
|
+
<!-- 旧的 formatter 函数:formatter: ({ row }) => html -->
|
|
218
|
+
<template v-else-if="item._oldFormatter && item._originalFormatter">
|
|
219
|
+
<div v-html="item._originalFormatter({ row })"></div>
|
|
220
|
+
</template>
|
|
221
|
+
<!-- 纯对象字段 -->
|
|
222
|
+
<template
|
|
223
|
+
v-else-if="row[column.property] && typeof row[column.property] === 'object' && row[column.property].name"
|
|
224
|
+
>
|
|
225
|
+
{{ row[column.property].name }}
|
|
226
|
+
</template>
|
|
227
|
+
<slot v-else :name="`cell_${item.prop}`" :row="row">{{ row[column.property] }}</slot>
|
|
206
228
|
</template>
|
|
207
229
|
</vxe-column>
|
|
208
230
|
</template>
|
|
209
|
-
<vxe-column fixed="right" header-class-name="fixed-column__static" :min-width="clacStaticColumnWidth">
|
|
210
|
-
<template #header>
|
|
211
|
-
<div class="flex-box flex-v flex-c">
|
|
212
|
-
<i
|
|
213
|
-
v-if="showColumn"
|
|
214
|
-
v-title="$lc('设置显示列')"
|
|
215
|
-
class="v3-icon-system-solution pointer"
|
|
216
|
-
:class="hoverIconKey === 'showColumn' ? 'color-primary' : ''"
|
|
217
|
-
@mouseenter="hoverIconKey = 'showColumn'"
|
|
218
|
-
@mouseleave="hoverIconKey = null"
|
|
219
|
-
@click="$emit('visible-column')"
|
|
220
|
-
></i>
|
|
221
|
-
<tableSetSize v-if="showSetsize" :size="sizeC" v-bind="$attrs" @update:size="sizeUp" @resize="sizeSet" />
|
|
222
|
-
<i
|
|
223
|
-
v-if="$attrs.treeConfig || $attrs['tree-config']"
|
|
224
|
-
v-title="!isExpand ? $lc('展开分组') : $lc('折叠分组')"
|
|
225
|
-
class="pointer"
|
|
226
|
-
:class="[
|
|
227
|
-
isExpand ? 'v3-icon-group-collapse' : 'v3-icon-group-expand',
|
|
228
|
-
hoverIconKey === 'toggleExpand' ? 'color-primary' : ''
|
|
229
|
-
]"
|
|
230
|
-
@mouseenter="hoverIconKey = 'toggleExpand'"
|
|
231
|
-
@mouseleave="hoverIconKey = null"
|
|
232
|
-
@click="toggleExpand"
|
|
233
|
-
></i>
|
|
234
|
-
</div>
|
|
235
|
-
</template>
|
|
236
|
-
</vxe-column>
|
|
237
231
|
<template #empty>
|
|
238
232
|
<slot name="empty">
|
|
239
233
|
<empty type="noData" :content="$lc('暂无数据')" :height="200" :width="200" />
|
|
240
234
|
</slot>
|
|
241
235
|
</template>
|
|
242
236
|
</vxe-table>
|
|
237
|
+
<!-- 操作列 -->
|
|
238
|
+
<tableOperate
|
|
239
|
+
:size="sizeC"
|
|
240
|
+
v-bind="$attrs"
|
|
241
|
+
@update:size="sizeUp"
|
|
242
|
+
@resize="sizeSet"
|
|
243
|
+
@toggle-expand="toggleExpand"
|
|
244
|
+
@visible-column="dialogVisible = !dialogVisible"
|
|
245
|
+
/>
|
|
243
246
|
<!-- 操作列的悬浮按钮组 -->
|
|
244
247
|
<transition name="hover-btns-fade">
|
|
245
248
|
<div
|
|
@@ -288,12 +291,29 @@
|
|
|
288
291
|
</div>
|
|
289
292
|
</div>
|
|
290
293
|
</transition>
|
|
294
|
+
|
|
295
|
+
<table-show-column
|
|
296
|
+
ref="showColumn"
|
|
297
|
+
:dialog-visible.sync="dialogVisible"
|
|
298
|
+
:check-columns="checkColumns"
|
|
299
|
+
:columns="columns"
|
|
300
|
+
:label-key="labelKey"
|
|
301
|
+
:auto-save="autoSave"
|
|
302
|
+
:page-id="pageId"
|
|
303
|
+
:isExport="isExport"
|
|
304
|
+
:isFilter="isFilter"
|
|
305
|
+
:width="width"
|
|
306
|
+
:hasPX="hasPX"
|
|
307
|
+
@setColumns="setColumns"
|
|
308
|
+
/>
|
|
291
309
|
</div>
|
|
292
310
|
</template>
|
|
293
311
|
|
|
294
312
|
<script>
|
|
295
313
|
import empty from '../Empty'
|
|
296
|
-
import
|
|
314
|
+
import tableOperate from '../TableOperate/index.vue'
|
|
315
|
+
import tableShowColumn from '../ShowColumn/index.vue'
|
|
316
|
+
|
|
297
317
|
import { $lc } from '../../utils/i18n/index.js'
|
|
298
318
|
|
|
299
319
|
const renderer = {
|
|
@@ -313,7 +333,8 @@ const renderer = {
|
|
|
313
333
|
export default {
|
|
314
334
|
name: 'TablePro',
|
|
315
335
|
components: {
|
|
316
|
-
|
|
336
|
+
tableOperate,
|
|
337
|
+
tableShowColumn,
|
|
317
338
|
empty,
|
|
318
339
|
renderer
|
|
319
340
|
},
|
|
@@ -426,13 +447,47 @@ export default {
|
|
|
426
447
|
},
|
|
427
448
|
// 悬浮按钮组隐藏延迟(毫秒)
|
|
428
449
|
hoverBtnsHideDelay: {
|
|
429
|
-
type: Number
|
|
430
|
-
default: 150
|
|
450
|
+
type: Number
|
|
431
451
|
},
|
|
432
452
|
// 悬浮按钮组最大显示数量,超过则收起到"更多"下拉菜单
|
|
433
453
|
hoverBtnsMaxShow: {
|
|
434
454
|
type: Number,
|
|
435
455
|
default: 4
|
|
456
|
+
},
|
|
457
|
+
// 列头标签键
|
|
458
|
+
labelKey: {
|
|
459
|
+
type: String,
|
|
460
|
+
default: 'label'
|
|
461
|
+
},
|
|
462
|
+
// 是否自动保存列设置
|
|
463
|
+
autoSave: {
|
|
464
|
+
type: Boolean,
|
|
465
|
+
default: true
|
|
466
|
+
},
|
|
467
|
+
pageId: {
|
|
468
|
+
type: String,
|
|
469
|
+
default: undefined
|
|
470
|
+
},
|
|
471
|
+
isExport: {
|
|
472
|
+
type: Boolean,
|
|
473
|
+
default: false
|
|
474
|
+
},
|
|
475
|
+
isFilter: {
|
|
476
|
+
type: Boolean,
|
|
477
|
+
default: false
|
|
478
|
+
},
|
|
479
|
+
width: {
|
|
480
|
+
type: String,
|
|
481
|
+
default: '1000px'
|
|
482
|
+
},
|
|
483
|
+
hasPX: {
|
|
484
|
+
type: Boolean,
|
|
485
|
+
default: false
|
|
486
|
+
},
|
|
487
|
+
// 导出函数
|
|
488
|
+
exportFn: {
|
|
489
|
+
type: Function,
|
|
490
|
+
default: null
|
|
436
491
|
}
|
|
437
492
|
},
|
|
438
493
|
data() {
|
|
@@ -454,16 +509,18 @@ export default {
|
|
|
454
509
|
isDropdownVisible: false, // "更多"下拉菜单是否展开
|
|
455
510
|
hoverHeaderProp: null, // 当前悬停表头列的 prop
|
|
456
511
|
hoverIconKey: null, // 当前悬停的静态列头图标标识
|
|
457
|
-
isExpand: false
|
|
512
|
+
isExpand: false,
|
|
513
|
+
dialogVisible: false, // 显示列设置对话框
|
|
514
|
+
checkColumns: [] // 显示列设置对话框中已选择的列
|
|
458
515
|
}
|
|
459
516
|
},
|
|
460
517
|
computed: {
|
|
461
518
|
_columns: {
|
|
462
519
|
get() {
|
|
463
520
|
if (this.isAutoWidth) {
|
|
464
|
-
return this.calcColumnWidth(this.
|
|
521
|
+
return this.calcColumnWidth(this.checkColumns)
|
|
465
522
|
} else {
|
|
466
|
-
return this.
|
|
523
|
+
return this.checkColumns
|
|
467
524
|
}
|
|
468
525
|
},
|
|
469
526
|
set(val) {
|
|
@@ -502,9 +559,9 @@ export default {
|
|
|
502
559
|
},
|
|
503
560
|
// 计算列宽
|
|
504
561
|
clacStaticColumnWidth() {
|
|
505
|
-
const hasExpand = this.$attrs.
|
|
562
|
+
const hasExpand = this.$attrs.treeConfig || this.$attrs['tree-config']
|
|
506
563
|
const activeCount = [this.showColumn, this.showSetsize, hasExpand].filter(Boolean).length
|
|
507
|
-
return activeCount === 3 ?
|
|
564
|
+
return activeCount === 3 ? 112 : 76
|
|
508
565
|
}
|
|
509
566
|
},
|
|
510
567
|
watch: {
|
|
@@ -524,12 +581,36 @@ export default {
|
|
|
524
581
|
},
|
|
525
582
|
activated() {
|
|
526
583
|
this.$refs.vxeTable.loadData(this.data)
|
|
584
|
+
if (this.pageId) {
|
|
585
|
+
this.getColumns()
|
|
586
|
+
}
|
|
527
587
|
},
|
|
528
588
|
beforeDestroy() {
|
|
529
589
|
// 清理定时器
|
|
530
590
|
this.clearHoverTimers()
|
|
531
591
|
},
|
|
592
|
+
mounted() {
|
|
593
|
+
if (this.pageId) {
|
|
594
|
+
this.getColumns()
|
|
595
|
+
}
|
|
596
|
+
},
|
|
532
597
|
methods: {
|
|
598
|
+
resizableChange({ resizeWidth, columnIndex }) {
|
|
599
|
+
this.checkColumns[columnIndex].width = resizeWidth
|
|
600
|
+
|
|
601
|
+
this.$refs.showColumn.saveColumns(this.checkColumns)
|
|
602
|
+
},
|
|
603
|
+
setColumns(list) {
|
|
604
|
+
if (this.isExport) {
|
|
605
|
+
this.exportFn(list)
|
|
606
|
+
} else {
|
|
607
|
+
this.checkColumns = list
|
|
608
|
+
}
|
|
609
|
+
},
|
|
610
|
+
async getColumns() {
|
|
611
|
+
const columns = await this.$refs.showColumn.getColumns(this.pageId)
|
|
612
|
+
this.checkColumns = columns?.length ? columns : this.columns
|
|
613
|
+
},
|
|
533
614
|
/**
|
|
534
615
|
* 一键展开/折叠表格树形行(仅处理第一层级数据行)
|
|
535
616
|
* 通过 vxe-table 的 setTreeExpand API 批量设置顶层行的展开状态,
|
|
@@ -722,7 +803,7 @@ export default {
|
|
|
722
803
|
// 输出全部条件
|
|
723
804
|
const obj = {}
|
|
724
805
|
// 复制默认筛选条件为空
|
|
725
|
-
this.
|
|
806
|
+
this.checkColumns.forEach((item) => {
|
|
726
807
|
if (item.filters) {
|
|
727
808
|
this.$set(obj, item.prop, undefined)
|
|
728
809
|
}
|
|
@@ -1000,69 +1081,64 @@ export default {
|
|
|
1000
1081
|
}
|
|
1001
1082
|
},
|
|
1002
1083
|
// ========== 列宽计算相关方法 ==========
|
|
1084
|
+
getRowClassName({ row }) {
|
|
1085
|
+
const checkedRows = this.$refs.vxeTable?.getCheckboxRecords(false) || []
|
|
1086
|
+
const checkedSet = new Set(checkedRows)
|
|
1087
|
+
return checkedSet.has(row) ? 'n20-table-pro__row-checked' : ''
|
|
1088
|
+
},
|
|
1003
1089
|
calcColumnWidth(columns) {
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1090
|
+
// 常量配置
|
|
1091
|
+
const CHAR_WIDTH = 20 // 每个字符的平均宽度(像素)
|
|
1092
|
+
const PADDING = 20 // 左右padding
|
|
1093
|
+
const CHECKBOX_WIDTH = 50 // 复选框列宽度
|
|
1094
|
+
const OPERATE_WIDTH = 180 // 操作列宽度
|
|
1095
|
+
const HOVER_BTNS_WIDTH = 356 // 悬浮按钮组宽度
|
|
1096
|
+
const MIN_LABEL_LENGTH = 10 // 最小标签长度
|
|
1010
1097
|
|
|
1011
|
-
//
|
|
1098
|
+
// 获取容器宽度
|
|
1012
1099
|
let wrapperEl = this.$refs.vxeTable?.$el
|
|
1013
|
-
if (!wrapperEl)
|
|
1014
|
-
|
|
1015
|
-
}
|
|
1016
|
-
if (!wrapperEl) {
|
|
1017
|
-
return columns
|
|
1018
|
-
}
|
|
1019
|
-
const { width: windowWidth } = wrapperEl.getBoundingClientRect()
|
|
1020
|
-
// 定义每个字符的平均宽度(像素)
|
|
1021
|
-
const CHAR_WIDTH = 20 // 根据实际字体大小调整
|
|
1022
|
-
const PADDING = 20 // 左右padding
|
|
1100
|
+
if (!wrapperEl) wrapperEl = document.querySelector('div#app')
|
|
1101
|
+
if (!wrapperEl) return columns
|
|
1023
1102
|
|
|
1024
|
-
|
|
1025
|
-
// 计算所有列的基础宽度总和
|
|
1026
|
-
let totalBaseWidth = 0
|
|
1027
|
-
columns.forEach((column) => {
|
|
1028
|
-
if (column.static && column.label === $lc('操作') && !column.width && !column.minWidth) {
|
|
1029
|
-
column.width = 180
|
|
1030
|
-
}
|
|
1031
|
-
if (column.type === 'checkbox') {
|
|
1032
|
-
column.width = 50
|
|
1033
|
-
}
|
|
1103
|
+
const { width: containerWidth } = wrapperEl.getBoundingClientRect()
|
|
1034
1104
|
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
const textLength = (column.label && column.label.length) || 10
|
|
1038
|
-
column.minWidth = Math.ceil(textLength * CHAR_WIDTH + PADDING)
|
|
1039
|
-
}
|
|
1105
|
+
// 解析宽度值(支持数字、"100"、"100px"格式)
|
|
1106
|
+
const parseWidth = (value) => (typeof value === 'number' ? value : parseInt(value, 10) || 0)
|
|
1040
1107
|
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1108
|
+
// 计算列宽并统计总宽度
|
|
1109
|
+
let totalWidth = 0
|
|
1110
|
+
const calcColumns = columns.map((column) => {
|
|
1111
|
+
// 操作列固定宽度
|
|
1112
|
+
if (column.static && column.label === $lc('操作') && !column.width && !column.minWidth) {
|
|
1113
|
+
column.width = OPERATE_WIDTH
|
|
1114
|
+
}
|
|
1115
|
+
// 复选框列固定宽度
|
|
1116
|
+
if (column.type === 'checkbox') {
|
|
1117
|
+
column.width = CHECKBOX_WIDTH
|
|
1118
|
+
}
|
|
1119
|
+
// 未设置宽度时,根据标签字符数计算最小宽度
|
|
1120
|
+
if (!column.width && !column.minWidth && !column['min-width']) {
|
|
1121
|
+
const textLength = column.label?.length || MIN_LABEL_LENGTH
|
|
1122
|
+
column.minWidth = Math.ceil(textLength * CHAR_WIDTH + PADDING)
|
|
1123
|
+
}
|
|
1124
|
+
// 计算基础宽度
|
|
1125
|
+
const widthValue = column.width || column.minWidth || column['min-width'] || 0
|
|
1126
|
+
const baseWidth = parseWidth(widthValue)
|
|
1127
|
+
column._baseWidth_ = baseWidth
|
|
1128
|
+
totalWidth += baseWidth
|
|
1129
|
+
return column
|
|
1130
|
+
})
|
|
1131
|
+
|
|
1132
|
+
// 悬浮按钮:给最后一列预留按钮组空间
|
|
1133
|
+
if (this.btnList?.length && calcColumns.length > 0) {
|
|
1134
|
+
const lastColumn = calcColumns[calcColumns.length - 1]
|
|
1135
|
+
const baseWidth = lastColumn._baseWidth_ || 0
|
|
1136
|
+
if (baseWidth <= HOVER_BTNS_WIDTH) {
|
|
1137
|
+
lastColumn.width = HOVER_BTNS_WIDTH + baseWidth
|
|
1063
1138
|
}
|
|
1139
|
+
lastColumn.align = 'left'
|
|
1064
1140
|
}
|
|
1065
|
-
return
|
|
1141
|
+
return calcColumns
|
|
1066
1142
|
}
|
|
1067
1143
|
}
|
|
1068
1144
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
<el-dropdown @command="setSize">
|
|
3
3
|
<i
|
|
4
4
|
v-title="$lc('行高')"
|
|
5
|
-
class="v3-icon-line-height pointer"
|
|
6
|
-
:class="hoverIconKey === 'height' ? 'color-
|
|
5
|
+
class="v3-icon-line-height pointer color-white"
|
|
6
|
+
:class="hoverIconKey === 'height' ? 'color-white' : ''"
|
|
7
7
|
@mouseenter="hoverIconKey = 'height'"
|
|
8
8
|
@mouseleave="hoverIconKey = null"
|
|
9
9
|
></i>
|
|
@@ -26,7 +26,7 @@ export default {
|
|
|
26
26
|
type: Object,
|
|
27
27
|
default: () => ({
|
|
28
28
|
border: 'inner',
|
|
29
|
-
size: '
|
|
29
|
+
size: 'small',
|
|
30
30
|
stripe: false
|
|
31
31
|
})
|
|
32
32
|
},
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="el-table-set-size flex-box">
|
|
3
|
+
<div class="el-table-set-size-item m-r-0">
|
|
4
|
+
<i
|
|
5
|
+
v-title="$lc('设置显示列')"
|
|
6
|
+
class="v3-icon-system-solution pointer color-white"
|
|
7
|
+
:class="hoverIconKey === 'showColumn' ? 'color-white' : ''"
|
|
8
|
+
@mouseenter="hoverIconKey = 'showColumn'"
|
|
9
|
+
@mouseleave="hoverIconKey = null"
|
|
10
|
+
@click="$emit('visible-column')"
|
|
11
|
+
></i>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="el-table-set-size-item m-r-0">
|
|
14
|
+
<tableSetSize
|
|
15
|
+
:size="sizeC"
|
|
16
|
+
v-bind="$attrs"
|
|
17
|
+
@update:size="(row) => $emit('update:size', row)"
|
|
18
|
+
@resize="(row) => $emit('resize', row)"
|
|
19
|
+
/>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="el-table-set-size-item m-r-0">
|
|
22
|
+
<i
|
|
23
|
+
v-title="!isExpand ? $lc('展开分组') : $lc('折叠分组')"
|
|
24
|
+
class="pointer"
|
|
25
|
+
:class="[
|
|
26
|
+
isExpand ? 'v3-icon-group-collapse' : 'v3-icon-group-expand',
|
|
27
|
+
hoverIconKey === 'toggleExpand' ? 'color-white' : ''
|
|
28
|
+
]"
|
|
29
|
+
@mouseenter="hoverIconKey = 'toggleExpand'"
|
|
30
|
+
@mouseleave="hoverIconKey = null"
|
|
31
|
+
@click="$emit('toggle-expand')"
|
|
32
|
+
></i>
|
|
33
|
+
</div>
|
|
34
|
+
<!-- v-if="$attrs.treeConfig || $attrs['tree-config']"
|
|
35
|
+
<div class="el-table-set-size-item m-r-0" :class="sizeC === 'mini' && 'active'" @click="setSize('mini')">
|
|
36
|
+
<img class="icon-mini" src="./mini.png" />
|
|
37
|
+
<div class="text-mini">{{ _lang === 'zh' ? '小行距' : 'mini' }}</div>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="el-table-set-size-item" :class="sizeC === 'small' && 'active'" @click="setSize('small')">
|
|
40
|
+
<img class="icon-small" src="./small.png" />
|
|
41
|
+
<div class="text-small">{{ _lang === 'zh' ? '中行距' : 'small' }}</div>
|
|
42
|
+
</div> -->
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<script>
|
|
47
|
+
import tableSetSize from './index.vue'
|
|
48
|
+
export default {
|
|
49
|
+
name: 'TableSetSize',
|
|
50
|
+
components: { tableSetSize },
|
|
51
|
+
props: {
|
|
52
|
+
size: {
|
|
53
|
+
type: String,
|
|
54
|
+
default: 'small'
|
|
55
|
+
},
|
|
56
|
+
mini: {
|
|
57
|
+
type: Object,
|
|
58
|
+
default: () => ({
|
|
59
|
+
border: true,
|
|
60
|
+
size: 'mini',
|
|
61
|
+
stripe: true
|
|
62
|
+
})
|
|
63
|
+
},
|
|
64
|
+
small: {
|
|
65
|
+
type: Object,
|
|
66
|
+
default: () => ({
|
|
67
|
+
border: true,
|
|
68
|
+
size: 'small',
|
|
69
|
+
stripe: false
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
data() {
|
|
74
|
+
let _this = this
|
|
75
|
+
return {
|
|
76
|
+
isExpand: false,
|
|
77
|
+
hoverIconKey: null, // 当前悬停的静态列头图标标识
|
|
78
|
+
sizeC: localStorage.getItem('table-size') || _this.size
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
</script>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="n20-tabs__wrapper">
|
|
3
|
+
<el-tabs :value="init" class="n20-tabs__tab" type="card" :before-leave="beforeFn" @tab-click="clickFn">
|
|
4
|
+
<el-tab-pane
|
|
5
|
+
v-for="item of data"
|
|
6
|
+
:key="item.name"
|
|
7
|
+
:tab-info="item"
|
|
8
|
+
:name="item.name"
|
|
9
|
+
:icon="item.icon"
|
|
10
|
+
:disabled="item.disabled"
|
|
11
|
+
>
|
|
12
|
+
<template slot="label">
|
|
13
|
+
<span v-if="item.icon" :class="item.icon"></span>
|
|
14
|
+
<sup v-if="item.badge" class="el-tabs__item-badge"></sup>
|
|
15
|
+
<span v-if="item.content" v-title="`${item.content}`"> {{ item.name }}</span>
|
|
16
|
+
<span v-else>{{ item.name }}</span>
|
|
17
|
+
</template>
|
|
18
|
+
</el-tab-pane>
|
|
19
|
+
</el-tabs>
|
|
20
|
+
<div class="n20-tabs__right">
|
|
21
|
+
<slot></slot>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<script>
|
|
27
|
+
import { $lc } from '../../utils/i18n/index'
|
|
28
|
+
export default {
|
|
29
|
+
name: 'Tabs',
|
|
30
|
+
props: {
|
|
31
|
+
data: {
|
|
32
|
+
type: Array,
|
|
33
|
+
default: () => []
|
|
34
|
+
},
|
|
35
|
+
init: {
|
|
36
|
+
type: String,
|
|
37
|
+
default: ''
|
|
38
|
+
},
|
|
39
|
+
size: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: 'mini'
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
computed: {
|
|
45
|
+
stop() {
|
|
46
|
+
return !this.$listeners['update:init']
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
methods: {
|
|
50
|
+
clickFn(C) {
|
|
51
|
+
let item = C.$attrs['tab-info']
|
|
52
|
+
if (this.$listeners['update:init']) {
|
|
53
|
+
!item.disabled && this.$emit('update:init', item.name)
|
|
54
|
+
}
|
|
55
|
+
if (this.$listeners['click']) {
|
|
56
|
+
this.$emit('click', item)
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
beforeFn(name) {
|
|
60
|
+
return name === this.init ? true : !this.stop
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
</script>
|
package/src/index.js
CHANGED
|
@@ -42,7 +42,7 @@ import InputSearch from './components/InputSearch/index.vue'
|
|
|
42
42
|
import NavMenu from './components/NavMenu/index.vue'
|
|
43
43
|
import PageHeader from './components/PageHeader/index.vue'
|
|
44
44
|
import Page from './components/PageLayout/page.vue'
|
|
45
|
-
import Pagination from './components/Pagination/
|
|
45
|
+
import Pagination from './components/Pagination/main.vue'
|
|
46
46
|
import SecondaryTab from './components/SecondaryTab/index.vue'
|
|
47
47
|
import SelectLazy from './components/SelectLazy/index.vue'
|
|
48
48
|
import SelectTreeLazy from './components/SelectTree/SelectTreeLazy.vue'
|
|
@@ -75,6 +75,7 @@ import HandlingAdvice from './components/HandlingAdvice/index.vue'
|
|
|
75
75
|
import Preview from './components/Preview/index.vue'
|
|
76
76
|
import SelectTreePro from './components/SelectTree/pro.vue'
|
|
77
77
|
import Tree from './components/Tree/index.vue'
|
|
78
|
+
import Tabs from './components/Tabs/index.vue'
|
|
78
79
|
|
|
79
80
|
// 新版日期选择框
|
|
80
81
|
import BusiDatePicker from './components/DateSelect/busiDate.vue'
|
|
@@ -207,6 +208,7 @@ const components = [
|
|
|
207
208
|
ShowColumn,
|
|
208
209
|
Page,
|
|
209
210
|
Task,
|
|
211
|
+
Tabs,
|
|
210
212
|
IconGroupButton,
|
|
211
213
|
Anchor,
|
|
212
214
|
AnchorItem,
|
|
@@ -383,6 +385,7 @@ export {
|
|
|
383
385
|
TertiaryTab,
|
|
384
386
|
TimePicker,
|
|
385
387
|
Tree,
|
|
388
|
+
Tabs,
|
|
386
389
|
Upload,
|
|
387
390
|
UploadMsg,
|
|
388
391
|
WorkCard,
|