n20-common-lib 3.1.7 → 3.1.9

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,9 +1,10 @@
1
1
  {
2
2
  "name": "n20-common-lib",
3
- "version": "3.1.7",
3
+ "version": "3.1.9",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "vue-cli-service serve",
7
+ "prepublishOnly": "npm run build:css",
7
8
  "build": "node versionInfo.js && npm run build:css && vue-cli-service build --testTheme",
8
9
  "test:unit": "vue-cli-service test:unit",
9
10
  "lint": "vue-cli-service lint",
@@ -1,13 +1,8 @@
1
1
  .n20-page-header {
2
2
  display: flex;
3
3
  line-height: 20px;
4
- padding: 12px 16px;
5
-
4
+ padding-bottom: 2px;
6
5
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
7
- &__wappr {
8
- display: flex;
9
- flex-wrap: wrap;
10
- }
11
6
 
12
7
  .page-header__left {
13
8
  display: flex;
@@ -37,23 +32,14 @@
37
32
  }
38
33
 
39
34
  .page-header__title {
40
- color: var(--text-2, #4e5969);
41
- /* 14/CN-Regular */
42
- font-family: 'PingFang SC';
43
35
  font-size: 14px;
44
- font-style: normal;
45
- font-weight: 400;
46
- line-height: 22px; /* 157.143% */
36
+ line-height: 20px;
37
+ color: #3d4a57;
47
38
  }
48
39
 
49
40
  .page-header__content {
50
- color: var(--text-1, #1d2129);
51
-
52
- /* 16/CN-Medium */
53
- font-family: 'PingFang SC';
54
- font-size: 16px;
55
- font-style: normal;
56
- font-weight: 500;
57
- line-height: 24px; /* 150% */
41
+ font-size: 14px;
42
+ line-height: 20px;
43
+ color: #3d4a57;
58
44
  }
59
45
  }
@@ -295,6 +295,16 @@
295
295
  height: 12px;
296
296
  line-height: 12px;
297
297
  }
298
+ /* 纯图标按钮:与固定列 operate-icon-btn 样式一致 */
299
+ .hover-btn-icon-only {
300
+ display: inline-flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ width: 28px;
304
+ height: 28px;
305
+ border-radius: 4px;
306
+ font-size: 14px;
307
+ }
298
308
  }
299
309
 
300
310
  .hover-btns-more {
@@ -59,7 +59,7 @@ export default {
59
59
  this.$emit('enter')
60
60
  },
61
61
  handleChange(value) {
62
- this.$emit('change', { field: this.item.value, value })
62
+ this.$emit('change', { field: this.item.value, value, item: this.item })
63
63
  },
64
64
  handleVisibleChange(value) {
65
65
  if (!value) {
@@ -136,14 +136,6 @@ export default {
136
136
  }
137
137
  },
138
138
  props: {
139
- hasSaveView: {
140
- type: Boolean,
141
- default: false
142
- },
143
- isNotClose: {
144
- type: Boolean,
145
- default: false
146
- },
147
139
  maxLength: {
148
140
  type: Number
149
141
  },
@@ -1,24 +1,20 @@
1
1
  <template>
2
2
  <div class="n20-page-header">
3
- <div class="n20-page-header__wappr">
4
- <div v-if="!disable" class="page-header__left" @click="$emit('back')">
5
- <i :class="icon"></i>
6
- <div class="page-header__title">
7
- <slot name="title">{{ title }}</slot>
8
- </div>
9
- </div>
10
- <div class="page-header__content">
11
- <slot name="content">{{ content }}</slot>
3
+ <div v-if="!disable" class="page-header__left" @click="$emit('back')">
4
+ <i :class="icon"></i>
5
+ <div class="page-header__title">
6
+ <slot name="title">{{ title }}</slot>
12
7
  </div>
13
8
  </div>
14
- <div>
15
- <slot></slot>
9
+ <div class="page-header__content">
10
+ <slot name="content">{{ content }}</slot>
16
11
  </div>
17
12
  </div>
18
13
  </template>
19
14
 
20
15
  <script>
21
16
  import { $lc } from '../../utils/i18n/index'
17
+
22
18
  export default {
23
19
  name: 'PageHeader',
24
20
  props: {
@@ -24,10 +24,12 @@
24
24
  :disabled="item2.disabled | dbdBtn(row)"
25
25
  >
26
26
  <el-badge v-if="resolveBadge(item2)" :value="resolveBadge(item2)" :max="item2.badgeMax || 99">
27
+ <i v-if="item2.icon" :class="item2.icon" class="m-r-ss" />
27
28
  <el-link v-if="item2.type" :type="item2.type" :underline="false">{{ item2.label }}</el-link>
28
29
  <template v-else>{{ item2.label }}</template>
29
30
  </el-badge>
30
31
  <template v-else>
32
+ <i v-if="item2.icon" :class="item2.icon" class="m-r-ss" />
31
33
  <el-link v-if="item2.type" :type="item2.type" :underline="false">{{ item2.label }}</el-link>
32
34
  <template v-else>{{ item2.label }}</template>
33
35
  </template>
@@ -37,10 +39,12 @@
37
39
  </el-dropdown-item>
38
40
  <el-dropdown-item v-else :key="item.label" :command="item.command" :disabled="item.disabled | dbdBtn(row)">
39
41
  <el-badge v-if="resolveBadge(item)" :value="resolveBadge(item)" :max="item.badgeMax || 99">
42
+ <i v-if="item.icon" :class="item.icon" class="m-r-ss" />
40
43
  <el-link v-if="item.type" :type="item.type" :underline="false">{{ item.label }}</el-link>
41
44
  <template v-else>{{ item.label }}</template>
42
45
  </el-badge>
43
46
  <template v-else>
47
+ <i v-if="item.icon" :class="item.icon" class="m-r-ss" />
44
48
  <el-link v-if="item.type" :type="item.type" :underline="false">{{ item.label }}</el-link>
45
49
  <template v-else>{{ item.label }}</template>
46
50
  </template>
@@ -63,10 +67,12 @@
63
67
  :disabled="item.disabled | dbdBtn(row)"
64
68
  >
65
69
  <el-badge v-if="resolveBadge(item)" :value="resolveBadge(item)" :max="item.badgeMax || 99">
70
+ <i v-if="item.icon" :class="item.icon" class="m-r-ss" />
66
71
  <el-link v-if="item.type" :type="item.type" :underline="false">{{ item.label }}</el-link>
67
72
  <template v-else>{{ item.label }}</template>
68
73
  </el-badge>
69
74
  <template v-else>
75
+ <i v-if="item.icon" :class="item.icon" class="m-r-ss" />
70
76
  <el-link v-if="item.type" :type="item.type" :underline="false">{{ item.label }}</el-link>
71
77
  <template v-else>{{ item.label }}</template>
72
78
  </template>
@@ -182,4 +188,4 @@ export default {
182
188
  }
183
189
  }
184
190
  }
185
- </script>
191
+ </script>
@@ -0,0 +1,80 @@
1
+ <template>
2
+ <!-- 纯图标按钮:用 tooltip 提示文字 -->
3
+ <el-tooltip v-if="item.iconOnly && item.icon" :content="item.tip || item.label" placement="top">
4
+ <el-link
5
+ :class="index ? 'm-l-b' : ''"
6
+ :disabled="item.disabled | dbdBtn(row)"
7
+ :type="item.type || 'primary'"
8
+ :underline="false"
9
+ class="operate-icon-btn"
10
+ @click="$emit('click')"
11
+ >
12
+ <i :class="item.icon" />
13
+ </el-link>
14
+ </el-tooltip>
15
+ <!-- 图标+文字按钮 -->
16
+ <el-link
17
+ v-else-if="item.icon"
18
+ :class="index ? 'm-l-b' : ''"
19
+ :disabled="item.disabled | dbdBtn(row)"
20
+ :type="item.type || 'primary'"
21
+ :underline="false"
22
+ @click="$emit('click')"
23
+ >
24
+ <i :class="item.icon" class="m-r-ss" />
25
+ <span v-if="item.tip" v-title="`${item.tip}`">{{ item.label }}</span>
26
+ <span v-else>{{ item.label }}</span>
27
+ </el-link>
28
+ <!-- 纯文字按钮 -->
29
+ <el-link
30
+ v-else
31
+ :class="index ? 'm-l-b' : ''"
32
+ :disabled="item.disabled | dbdBtn(row)"
33
+ :type="item.type || 'primary'"
34
+ :underline="false"
35
+ @click="$emit('click')"
36
+ >
37
+ <span v-if="item.tip" v-title="`${item.tip}`">{{ item.label }}</span>
38
+ <span v-else>{{ item.label }}</span>
39
+ </el-link>
40
+ </template>
41
+
42
+ <script>
43
+ export default {
44
+ name: 'OperateLink',
45
+ props: {
46
+ item: {
47
+ type: Object,
48
+ required: true
49
+ },
50
+ row: {
51
+ type: Object,
52
+ default: () => ({})
53
+ },
54
+ index: {
55
+ type: Number,
56
+ default: 0
57
+ }
58
+ },
59
+ filters: {
60
+ dbdBtn(dbd, row) {
61
+ if (dbd === undefined || dbd === null) return false
62
+ if (typeof dbd === 'boolean') return dbd
63
+ if (typeof dbd === 'function') return dbd(row)
64
+ return false
65
+ }
66
+ }
67
+ }
68
+ </script>
69
+ <style scoped>
70
+ /* 纯图标按钮:固定尺寸、居中对齐 */
71
+ .operate-icon-btn {
72
+ display: inline-flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ width: 28px;
76
+ height: 28px;
77
+ border-radius: 4px;
78
+ font-size: 14px;
79
+ }
80
+ </style>
@@ -2,43 +2,19 @@
2
2
  <div class="flex-box flex-v">
3
3
  <template v-for="(item, i) in btnList">
4
4
  <template v-if="shouldShowButton(item, row)">
5
+ <!-- 有子级下拉 -->
5
6
  <el-dropdown
6
7
  v-if="shouldShowChildren(item.children, row)"
7
- :key="item.label"
8
+ :key="'dd-' + i"
8
9
  class="m-l-b"
9
10
  @command="(c) => $emit('command', c)"
10
11
  >
11
12
  <div class="flex-box flex-v">
12
- <el-badge
13
- v-if="resolveBadge(item)"
14
- :value="resolveBadge(item)"
15
- :max="item.badgeMax || 99"
16
- class="operate-btn-badge"
17
- >
18
- <el-link
19
- :key="item.label"
20
- :class="i ? 'm-l-b' : ''"
21
- :disabled="item.disabled | dbdBtn(row)"
22
- :underline="false"
23
- type="primary"
24
- @click="$emit('command', item.command)"
25
- >
26
- <span v-if="item.tip" v-title="`${item.tip}`">{{ item.label }}</span>
27
- <span v-else>{{ item.label }}</span>
28
- </el-link>
13
+ <el-badge v-if="resolveBadge(item)" :value="resolveBadge(item)" :max="item.badgeMax || 99" class="operate-btn-badge">
14
+ <OperateLink :item="item" :row="row" :index="i" @click="$emit('command', item.command)" />
29
15
  </el-badge>
30
16
  <template v-else>
31
- <el-link
32
- :key="item.label"
33
- :class="i ? 'm-l-b' : ''"
34
- :disabled="item.disabled | dbdBtn(row)"
35
- :underline="false"
36
- type="primary"
37
- @click="$emit('command', item.command)"
38
- >
39
- <span v-if="item.tip" v-title="`${item.tip}`">{{ item.label }}</span>
40
- <span v-else>{{ item.label }}</span>
41
- </el-link>
17
+ <OperateLink :item="item" :row="row" :index="i" @click="$emit('command', item.command)" />
42
18
  </template>
43
19
  <i class="el-icon-arrow-down color-primary" />
44
20
  </div>
@@ -50,64 +26,50 @@
50
26
  :command="childItem.command"
51
27
  :disabled="childItem.disabled | dbdBtn(row)"
52
28
  >
53
- <el-badge
54
- v-if="resolveBadge(childItem)"
55
- :value="resolveBadge(childItem)"
56
- :max="childItem.badgeMax || 99"
57
- >
58
- <el-link v-if="childItem.type" :type="childItem.type" :underline="false">{{
59
- childItem.label
60
- }}</el-link>
29
+ <el-badge v-if="resolveBadge(childItem)" :value="resolveBadge(childItem)" :max="childItem.badgeMax || 99">
30
+ <el-link v-if="childItem.type" :type="childItem.type" :underline="false">{{ childItem.label }}</el-link>
61
31
  <template v-else>{{ childItem.label }}</template>
62
32
  </el-badge>
63
33
  <template v-else>
64
- <el-link v-if="childItem.type" :type="childItem.type" :underline="false">{{
65
- childItem.label
66
- }}</el-link>
34
+ <el-link v-if="childItem.type" :type="childItem.type" :underline="false">{{ childItem.label }}</el-link>
67
35
  <template v-else>{{ childItem.label }}</template>
68
36
  </template>
69
37
  </el-dropdown-item>
70
38
  </template>
71
39
  </el-dropdown-menu>
72
40
  </el-dropdown>
41
+
42
+ <!-- 无子级,有 badge -->
73
43
  <el-badge
74
44
  v-else-if="resolveBadge(item)"
45
+ :key="'bd-' + i"
75
46
  :value="resolveBadge(item)"
76
47
  :max="item.badgeMax || 99"
77
48
  class="operate-btn-badge"
78
49
  >
79
- <el-link
80
- :key="item.label"
81
- :class="i ? 'm-l-b' : ''"
82
- :disabled="item.disabled | dbdBtn(row)"
83
- :type="item.type || 'primary'"
84
- :underline="false"
85
- @click="$emit('command', item.command)"
86
- >
87
- <span v-if="item.tip" v-title="`${item.tip}`">{{ item.label }}</span>
88
- <span v-else>{{ item.label }}</span>
89
- </el-link>
50
+ <OperateLink :item="item" :row="row" :index="i" @click="$emit('command', item.command)" />
90
51
  </el-badge>
91
- <el-link
52
+
53
+ <!-- 无子级,无 badge -->
54
+ <OperateLink
92
55
  v-else
93
- :key="item.label"
94
- :class="i ? 'm-l-b' : ''"
95
- :disabled="item.disabled | dbdBtn(row)"
96
- :type="item.type || 'primary'"
97
- :underline="false"
56
+ :key="'lk-' + i"
57
+ :item="item"
58
+ :row="row"
59
+ :index="i"
98
60
  @click="$emit('command', item.command)"
99
- >
100
- <span v-if="item.tip" v-title="`${item.tip}`">{{ item.label }}</span>
101
- <span v-else>{{ item.label }}</span>
102
- </el-link>
61
+ />
103
62
  </template>
104
63
  </template>
105
64
  </div>
106
65
  </template>
107
66
 
108
67
  <script>
68
+ import OperateLink from './OperateLink.vue'
69
+
109
70
  export default {
110
71
  name: 'ChildrenOperateBtn',
72
+ components: { OperateLink },
111
73
  props: {
112
74
  btnList: {
113
75
  type: Array,
@@ -319,26 +319,66 @@
319
319
  @mouseleave="handleBtnGroupLeave"
320
320
  >
321
321
  <div class="hover-btns-wrapper">
322
- <el-button
323
- v-for="(btn, idx) in displayHoverBtns"
324
- :key="'display-' + idx"
325
- :type="btn.type || 'primary'"
326
- :size="btn.size || 'mini'"
327
- :icon="btn.icon"
328
- :disabled="resolveDisabled(btn)"
329
- :class="[btn.class]"
330
- @click.stop="handleHoverBtnClick(btn, $event)"
331
- >
332
- <el-badge
333
- v-if="resolveBadge(btn)"
334
- :value="resolveBadge(btn)"
335
- :max="btn.badgeMax || 99"
336
- class="hover-btn-badge"
322
+ <template v-for="(btn, idx) in displayHoverBtns">
323
+ <!-- 纯图标按钮:与固定列的 el-link 图标按钮样式一致 -->
324
+ <el-tooltip
325
+ v-if="btn.iconOnly && btn.icon"
326
+ :key="'display-' + idx"
327
+ :content="btn.tip || btn.label"
328
+ placement="top"
329
+ >
330
+ <el-link
331
+ :type="btn.type || 'primary'"
332
+ :disabled="resolveDisabled(btn)"
333
+ :underline="false"
334
+ :class="['hover-btn-icon-only', btn.class]"
335
+ @click.stop="handleHoverBtnClick(btn, $event)"
336
+ >
337
+ <i :class="btn.icon" />
338
+ </el-link>
339
+ </el-tooltip>
340
+ <!-- 图标+文字按钮 -->
341
+ <el-button
342
+ v-else-if="btn.icon"
343
+ :key="'display-icon-' + idx"
344
+ :type="btn.type || 'primary'"
345
+ :size="btn.size || 'mini'"
346
+ :disabled="resolveDisabled(btn)"
347
+ :class="[btn.class]"
348
+ @click.stop="handleHoverBtnClick(btn, $event)"
349
+ >
350
+ <i :class="btn.icon" class="m-r-ss" />
351
+ <el-badge
352
+ v-if="resolveBadge(btn)"
353
+ :value="resolveBadge(btn)"
354
+ :max="btn.badgeMax || 99"
355
+ class="hover-btn-badge"
356
+ >
357
+ {{ btn.label }}
358
+ </el-badge>
359
+ <template v-else>{{ btn.label }}</template>
360
+ </el-button>
361
+ <!-- 纯文字按钮 -->
362
+ <el-button
363
+ v-else
364
+ :key="'display-text-' + idx"
365
+ :type="btn.type || 'primary'"
366
+ :size="btn.size || 'mini'"
367
+ :disabled="resolveDisabled(btn)"
368
+ :class="[btn.class]"
369
+ @click.stop="handleHoverBtnClick(btn, $event)"
337
370
  >
338
- {{ btn.label }}
339
- </el-badge>
340
- <template v-else>{{ btn.label }}</template>
341
- </el-button>
371
+ <el-badge
372
+ v-if="resolveBadge(btn)"
373
+ :value="resolveBadge(btn)"
374
+ :max="btn.badgeMax || 99"
375
+ class="hover-btn-badge"
376
+ >
377
+ {{ btn.label }}
378
+ </el-badge>
379
+ <template v-else>{{ btn.label }}</template>
380
+ </el-button>
381
+ </template>
342
382
  <!-- 更多按钮下拉菜单 -->
343
383
  <el-dropdown
344
384
  v-if="moreHoverBtns.length > 0"
@@ -356,6 +396,7 @@
356
396
  :command="btn"
357
397
  :disabled="resolveDisabled(btn)"
358
398
  >
399
+ <i v-if="btn.icon" :class="btn.icon" class="m-r-ss" />
359
400
  <el-badge v-if="resolveBadge(btn)" :value="resolveBadge(btn)" :max="btn.badgeMax || 99">
360
401
  <span :class="btn.type === 'danger' ? 'color-danger' : ''">
361
402
  {{ btn.label }}