n20-common-lib 3.0.38 → 3.0.40

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n20-common-lib",
3
- "version": "3.0.38",
3
+ "version": "3.0.40",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "vue-cli-service serve",
@@ -120,7 +120,7 @@
120
120
  "vue-router": "^3.5.2",
121
121
  "vue-template-compiler": "^2.6.11",
122
122
  "vuex": "^3.6.2",
123
- "vxe-table": "3.20.0",
123
+ "vxe-table": "3.20.10",
124
124
  "vxe-pc-ui": "3.13.2",
125
125
  "webpack-bundle-analyzer": "^3.9.0",
126
126
  "xlsx": "0.14.1",
@@ -43,6 +43,7 @@ $--button-margin-left: 6px;
43
43
  .el-button--mini {
44
44
  padding: 5px 12px;
45
45
  font-size: 13px;
46
+ min-width: auto;
46
47
  }
47
48
  .el-button--info {
48
49
  &,
@@ -105,6 +105,7 @@
105
105
  border-radius: 4px;
106
106
  border: 1px solid var(--border-2, #e5e6eb);
107
107
  background: var(--bg-2, #fff);
108
+ padding: 0 4px;
108
109
  }
109
110
  }
110
111
 
@@ -449,7 +449,7 @@ th.vxe-header--column {
449
449
  }
450
450
 
451
451
  &:hover {
452
- width: 112px;
452
+ width: var(--hover-width, 112px);
453
453
  }
454
454
 
455
455
  &-item {
@@ -46,7 +46,7 @@
46
46
  :on-success="(response, file, fileList) => onTypeUploadSuccess(response, file, fileList, group.item)"
47
47
  :on-error="(err, file, fileList) => onTypeUploadError(err, file, fileList, group.item, index)"
48
48
  >
49
- <el-button slot="trigger" type="text" class="upload-trigger">去上传</el-button>
49
+ <el-button v-show="!readonly" slot="trigger" type="text" class="upload-trigger">去上传</el-button>
50
50
  </Upload>
51
51
  </div>
52
52
 
@@ -88,7 +88,7 @@
88
88
  </div>
89
89
  </div>
90
90
  <div class="flex-box">
91
- <div class="file-ai__card" v-if="AICheck" @click="AiCheck(row)">
91
+ <div class="file-ai__card" v-if="AICheck && !readonly" @click="AiCheck(row)">
92
92
  <img class="file-ai_icon" src="./jytg.svg" alt="" />
93
93
  <span class="file-ai_check">{{ $lc('AI 校验') }}</span>
94
94
  </div>
@@ -4,7 +4,11 @@
4
4
  <div class="n20-page-content flex-item" :class="{ is_padding: padding }">
5
5
  <slot></slot>
6
6
  </div>
7
- <div class="n20-page-content__footer" :class="{ 'n20-page-content__footer--max__padding': maxPadding }">
7
+ <div
8
+ v-if="$slots.footer"
9
+ class="n20-page-content__footer"
10
+ :class="{ 'n20-page-content__footer--max__padding': maxPadding }"
11
+ >
8
12
  <slot name="footer"></slot>
9
13
  </div>
10
14
  </div>
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <div class="ProFilterView">
3
3
  <div class="flex-box flex-lr flex-v top">
4
+ <slot name="leftContent"></slot>
4
5
  <div class="flex-box flex-v">
5
6
  <el-popover
6
7
  v-model="stVisible"
@@ -64,9 +65,8 @@
64
65
  </div>
65
66
  </div>
66
67
  </el-button>
67
- <slot name="leftContent"></slot>
68
+ <slot name="rightContent"></slot>
68
69
  </div>
69
- <slot name="rightContent"></slot>
70
70
  </div>
71
71
  <cl-advanced-filter
72
72
  ref="filter"
@@ -1,6 +1,6 @@
1
1
  <template>
2
- <div class="el-table-set-size flex-box">
3
- <div class="el-table-set-size-item m-r-0">
2
+ <div class="el-table-set-size flex-box" :style="{ '--hover-width': hoverWidth }">
3
+ <div v-if="showColumn" class="el-table-set-size-item m-r-0">
4
4
  <i
5
5
  v-title="$lc('设置显示列')"
6
6
  class="v3-icon-system-solution pointer color-white"
@@ -10,7 +10,7 @@
10
10
  @click="$emit('visible-column')"
11
11
  ></i>
12
12
  </div>
13
- <div class="el-table-set-size-item m-r-0">
13
+ <div v-if="showSetsize" class="el-table-set-size-item m-r-0">
14
14
  <el-dropdown @command="setSize">
15
15
  <i
16
16
  v-title="$lc('行高')"
@@ -25,7 +25,7 @@
25
25
  </el-dropdown-menu>
26
26
  </el-dropdown>
27
27
  </div>
28
- <div class="el-table-set-size-item m-r-0">
28
+ <div v-if="hasExpand" class="el-table-set-size-item m-r-0">
29
29
  <i
30
30
  v-title="!isExpand ? $lc('展开分组') : $lc('折叠分组')"
31
31
  class="pointer"
@@ -45,6 +45,14 @@
45
45
  export default {
46
46
  name: 'TableOperate',
47
47
  props: {
48
+ showColumn: {
49
+ type: Boolean,
50
+ default: false
51
+ },
52
+ showSetsize: {
53
+ type: Boolean,
54
+ default: true
55
+ },
48
56
  size: {
49
57
  type: String,
50
58
  default: 'small'
@@ -66,6 +74,21 @@ export default {
66
74
  })
67
75
  }
68
76
  },
77
+ computed: {
78
+ // 是否显示展开/折叠按钮(配置了 treeConfig 才显示)
79
+ hasExpand() {
80
+ return !!(this.$attrs.treeConfig || this.$attrs['tree-config'])
81
+ },
82
+ // 当前可见操作项数量
83
+ activeItemCount() {
84
+ return [this.showColumn, this.showSetsize, this.hasExpand].filter(Boolean).length
85
+ },
86
+ // 根据可见项数动态计算宽度
87
+ hoverWidth() {
88
+ const widthMap = { 3: '112px', 2: '88px', 1: '40px', 0: '0px' }
89
+ return widthMap[this.activeItemCount] || '0px'
90
+ }
91
+ },
69
92
  data() {
70
93
  let _this = this
71
94
  return {
@@ -50,7 +50,7 @@
50
50
  }"
51
51
  :merge-cells="mergeCells"
52
52
  :row-class-name="getRowClassName"
53
- v-bind="Object.assign({ size: size }, $attrs, sizeBind)"
53
+ v-bind="{ size, ...$attrs, ...sizeBind }"
54
54
  v-on="$listeners"
55
55
  @sort-change="(val) => customSortMethod(val)"
56
56
  @filter-change="filterChange"
@@ -236,6 +236,8 @@
236
236
  </vxe-table>
237
237
  <!-- 操作列 -->
238
238
  <tableOperate
239
+ :showColumn="showColumn"
240
+ :showSetsize="showSetsize"
239
241
  :size="sizeC"
240
242
  v-bind="$attrs"
241
243
  @update:size="sizeUp"
@@ -380,9 +382,10 @@ export default {
380
382
  return forbidSelect
381
383
  }
382
384
  },
385
+ // 是否显示显示列
383
386
  showColumn: {
384
387
  type: Boolean,
385
- default: false
388
+ default: true
386
389
  },
387
390
  // 数据更新时是否自动清空已选
388
391
  clearSelect: {
@@ -468,10 +471,6 @@ export default {
468
471
  type: String,
469
472
  default: undefined
470
473
  },
471
- isExport: {
472
- type: Boolean,
473
- default: false
474
- },
475
474
  isFilter: {
476
475
  type: Boolean,
477
476
  default: false
@@ -510,8 +509,9 @@ export default {
510
509
  hoverHeaderProp: null, // 当前悬停表头列的 prop
511
510
  hoverIconKey: null, // 当前悬停的静态列头图标标识
512
511
  isExpand: false,
512
+ isExport: false, // 是否导出
513
513
  dialogVisible: false, // 显示列设置对话框
514
- checkColumns: [] // 显示列设置对话框中已选择的列
514
+ checkColumns: this.columns.slice() // 显示列设置对话框中已选择的列(默认使用 columns prop)
515
515
  }
516
516
  },
517
517
  computed: {
@@ -567,6 +567,10 @@ export default {
567
567
  watch: {
568
568
  columns() {
569
569
  this.colsKey = this.colsKey + 1
570
+ // 没有 pageId 时,columns 变更同步更新 checkColumns
571
+ if (!this.pageId) {
572
+ this.checkColumns = this.columns.slice()
573
+ }
570
574
  },
571
575
  size(val) {
572
576
  this.sizeC = val
@@ -581,7 +585,7 @@ export default {
581
585
  },
582
586
  activated() {
583
587
  this.$refs.vxeTable.loadData(this.data)
584
- if (this.pageId) {
588
+ if (this.showColumn && this.pageId) {
585
589
  this.getColumns()
586
590
  }
587
591
  },
@@ -590,14 +594,17 @@ export default {
590
594
  this.clearHoverTimers()
591
595
  },
592
596
  mounted() {
593
- if (this.pageId) {
597
+ if (this.showColumn && this.pageId) {
594
598
  this.getColumns()
595
599
  }
596
600
  },
597
601
  methods: {
602
+ openExportColumn() {
603
+ this.dialogVisible = true
604
+ this.isExport = true
605
+ },
598
606
  resizableChange({ resizeWidth, columnIndex }) {
599
607
  this.checkColumns[columnIndex].width = resizeWidth
600
-
601
608
  this.$refs.showColumn.saveColumns(this.checkColumns)
602
609
  },
603
610
  setColumns(list) {
@@ -608,8 +615,13 @@ export default {
608
615
  }
609
616
  },
610
617
  async getColumns() {
611
- const columns = await this.$refs.showColumn.getColumns(this.pageId)
612
- this.checkColumns = columns?.length ? columns : this.columns
618
+ try {
619
+ const columns = await this.$refs.showColumn.getColumns(this.pageId)
620
+ this.checkColumns = columns?.length ? columns : this.columns
621
+ } catch (err) {
622
+ // API 请求失败时回退到 columns prop
623
+ this.checkColumns = this.columns
624
+ }
613
625
  },
614
626
  /**
615
627
  * 一键展开/折叠表格树形行(仅处理第一层级数据行)
@@ -98,7 +98,7 @@ const ASCII_W = {
98
98
  }
99
99
 
100
100
  export default function getWidth(label) {
101
- label = label || ''
101
+ label = String(label || '')
102
102
  let labels = label.match(/./gu) || []
103
103
  let labelW = 0
104
104
  labels.forEach((s) => (labelW += ASCII_W[s] || 14))
@@ -233,7 +233,7 @@ function request(opt) {
233
233
  delete debounceObj[opt.method + opt.url]
234
234
 
235
235
  closeLoading({ loading })
236
- })
236
+ }).catch(() => {}) // 防止 finally 返回的丢弃 Promise 产生未处理的 rejection
237
237
  debounceObj[opt.method + opt.url] = resPro
238
238
  return resPro
239
239
  }