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.
Files changed (37) hide show
  1. package/package.json +1 -1
  2. package/src/assets/css/_coreLib.scss +4 -1
  3. package/src/assets/css/button.scss +8 -19
  4. package/src/assets/css/element-variables.scss +11 -11
  5. package/src/assets/css/file-upload-table.scss +10 -0
  6. package/src/assets/css/layout-content.scss +1 -0
  7. package/src/{components/PageHeader/style.scss → assets/css/page-header.scss} +22 -7
  8. package/src/assets/css/page.scss +12 -0
  9. package/src/assets/css/pagination.scss +75 -17
  10. package/src/assets/css/rootvar.scss +1 -0
  11. package/src/assets/css/secondary-tab.scss +60 -43
  12. package/src/assets/css/table.scss +165 -19
  13. package/src/assets/css/tabs.scss +68 -0
  14. package/src/components/FileUploadTable/aiCheckDialog.vue +2 -2
  15. package/src/components/PageHeader/index.vue +11 -6
  16. package/src/components/PageLayout/page.vue +15 -3
  17. package/src/components/Pagination/index.vue +7 -4
  18. package/src/components/Pagination/main.vue +113 -0
  19. package/src/components/SecondaryTab/index.vue +45 -34
  20. package/src/components/ShowColumn/index.vue +14 -4
  21. package/src/components/TableOperate/index.vue +101 -0
  22. package/src/components/TablePro/index.vue +171 -95
  23. package/src/components/TableSetSize/index.vue +3 -3
  24. package/src/components/TableSetSize/index1.vue +82 -0
  25. package/src/components/Tabs/index.vue +64 -0
  26. package/src/index.js +4 -1
  27. package/style/index.css +1 -1
  28. package/theme/blue.css +1 -1
  29. package/theme/cctcRed.css +1 -1
  30. package/theme/green.css +1 -1
  31. package/theme/lightBlue.css +1 -1
  32. package/theme/orange.css +1 -1
  33. package/theme/purple.css +1 -1
  34. package/theme/red.css +1 -1
  35. package/theme/yellow.css +1 -1
  36. package/src/components/TableSetSize/index copy.vue +0 -69
  37. 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
- <template #default="{ row }">
205
- <slot :name="`cell_${item.prop}`" :row="row">{{ row[item.prop] }}</slot>
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 tableSetSize from '../TableSetSize/index.vue'
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
- tableSetSize,
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.columns)
521
+ return this.calcColumnWidth(this.checkColumns)
465
522
  } else {
466
- return this.columns
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.expandConfig || this.$attrs['expand-config']
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 ? 100 : activeCount === 2 ? 80 : 50
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.columns.forEach((item) => {
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
- columns = columns.map((item) => {
1005
- return {
1006
- ...item,
1007
- _width_: 0
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
- // 优先使用表格容器的宽度,如果没有则使用app容器宽度
1098
+ // 获取容器宽度
1012
1099
  let wrapperEl = this.$refs.vxeTable?.$el
1013
- if (!wrapperEl) {
1014
- wrapperEl = document.querySelector('div#app')
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
- function calc(columns) {
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
- if (!column.width && !column.minWidth && !column['min-width']) {
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
- // 计算基础宽度:有width的用width,没有的用minWidth
1042
- const widthValue = column.width || column.minWidth || column['min-width'] || 0
1043
- // 处理不同格式的宽度:数字、"100"、"100px"
1044
- let baseWidth = 0
1045
- if (typeof widthValue === 'number') {
1046
- baseWidth = widthValue
1047
- } else if (typeof widthValue === 'string') {
1048
- // 提取字符串中的数字部分
1049
- baseWidth = parseInt(widthValue) || 0
1050
- }
1051
- column['_baseWidth_'] = baseWidth
1052
- totalBaseWidth += baseWidth
1053
- })
1054
- // 如果所有列的基础宽度总和 >= 容器宽度,不做处理
1055
- if (totalBaseWidth >= windowWidth) {
1056
- return columns
1057
- } else {
1058
- const seqColumns = columns.filter((item) => item.type !== 'seq' && item.type !== 'checkbox')
1059
- if (seqColumns.length > 0) {
1060
- seqColumns[0].width = ''
1061
- }
1062
- return columns
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 calc(columns)
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-primary' : ''"
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: 'mini',
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/index.vue'
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,