n20-common-lib 1.2.20 → 1.2.21

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": "1.2.20",
3
+ "version": "1.2.21",
4
4
  "private": false,
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -33,6 +33,7 @@
33
33
  "jsonwebtoken": "^8.5.1",
34
34
  "normalize.css": "^8.0.1",
35
35
  "numerify": "^1.2.9",
36
+ "qrcode": "^1.5.0",
36
37
  "resize-detector": "^0.3.0",
37
38
  "vuedraggable": "^2.24.3"
38
39
  },
@@ -56,7 +57,6 @@
56
57
  "mockjs": "^1.1.0",
57
58
  "node-sass": "6.0.0",
58
59
  "qiankun": "^2.5.1",
59
- "qrcode": "^1.5.0",
60
60
  "sass-loader": "^10.2.0",
61
61
  "strip-json-comments": "^3.1.1",
62
62
  "vue": "^2.6.11",
@@ -492,7 +492,7 @@ $--input-max: 304px;
492
492
  font-size: 16px;
493
493
  }
494
494
  &.has-value {
495
- &:hover {
495
+ &:not(.is-disabled):hover {
496
496
  .el-input__prefix {
497
497
  display: none;
498
498
  }
@@ -1,3 +1,66 @@
1
+ .n20-pagination-1 {
2
+ display: inline-block;
3
+ padding-right: 5px;
4
+ > * {
5
+ vertical-align: middle;
6
+ }
7
+ .el-pagination {
8
+ display: inline-block;
9
+ }
10
+ .btn-prev,
11
+ .btn-next {
12
+ padding-left: 6px;
13
+ padding-right: 6px;
14
+ border: 1px solid $--border-color-base;
15
+ &:not([disabled]):hover {
16
+ border-color: $--color-primary;
17
+ }
18
+ }
19
+ .btn-next {
20
+ margin-left: 6px;
21
+ }
22
+ }
23
+ .n20-pagination-jumper-1 {
24
+ width: 36px;
25
+ margin-left: 6px;
26
+ margin-right: 6px;
27
+ &.is-without-controls {
28
+ .el-input__inner {
29
+ height: 26px;
30
+ line-height: 26px;
31
+ padding-left: 4px;
32
+ padding-right: 4px;
33
+ }
34
+ }
35
+ }
36
+ .n20-pagination-sizes-1 {
37
+ .el-radio-button__inner {
38
+ border-radius: $--border-radius-base !important;
39
+ border: 1px solid $--border-color-base;
40
+ box-shadow: none;
41
+ }
42
+ .el-radio-button__orig-radio:checked + .el-radio-button__inner {
43
+ border-color: $--color-primary;
44
+ }
45
+ }
46
+ .n20-pagination-usersizes-1 {
47
+ width: 52px;
48
+ vertical-align: middle;
49
+ &.is-without-controls {
50
+ .el-input__inner {
51
+ height: 26px;
52
+ line-height: 26px;
53
+ padding-left: 4px;
54
+ padding-right: 4px;
55
+ }
56
+ }
57
+ &.is-active {
58
+ .el-input__inner {
59
+ border-color: $--border-color-base;
60
+ }
61
+ }
62
+ }
63
+
1
64
  .n20-pagination {
2
65
  display: inline-block;
3
66
  > * {
@@ -45,4 +45,9 @@
45
45
  .el-tabs__active-bar {
46
46
  display: none;
47
47
  }
48
+
49
+ .el-tabs__nav-prev,
50
+ .el-tabs__nav-next {
51
+ line-height: 28px;
52
+ }
48
53
  }
@@ -1,6 +1,51 @@
1
+ .n20-tertiary-tab-1 {
2
+ display: inline-block;
3
+ max-width: 100%;
4
+ & > .el-tabs__header {
5
+ border: none;
6
+ margin-bottom: 0;
7
+ .el-tabs__nav {
8
+ border: none;
9
+ }
10
+ .el-tabs__item {
11
+ height: auto;
12
+ line-height: 1;
13
+ padding: 6px 16px !important;
14
+ border: 1px solid $--border-color-light !important;
15
+ margin-left: -1px;
16
+
17
+ &:first-child {
18
+ margin-left: 0;
19
+ border-radius: 4px 0 0 4px;
20
+ }
21
+ &:last-child {
22
+ border-radius: 0 4px 4px 0;
23
+ }
24
+ &.is-active {
25
+ border: 1px solid $--color-primary !important;
26
+ z-index: 1;
27
+ }
28
+ &.is-disabled {
29
+ color: $--color-text-placeholder;
30
+ background-color: $--button-disabled-background-color;
31
+ border-color: $--button-default-border-color !important;
32
+ cursor: not-allowed;
33
+ }
34
+ }
35
+ }
36
+
37
+ .el-tabs__nav-prev,
38
+ .el-tabs__nav-next {
39
+ line-height: 28px;
40
+ }
41
+ }
42
+
1
43
  .n20-tertiary-tab {
44
+ max-width: 100%;
45
+ white-space: nowrap;
46
+ overflow-x: auto;
2
47
  .el-radio-button--mini .el-radio-button__inner {
3
- padding: 6px 16px;
48
+ padding: 6px 16px;
4
49
  }
5
50
  .el-radio-button__orig-radio:checked + .el-radio-button__inner {
6
51
  color: $--color-primary;
@@ -12,11 +12,13 @@
12
12
  <slot :item="item" :index="index">
13
13
  <span>{{ item[labelKey] || item }}</span>
14
14
  </slot>
15
- <i
15
+ <el-link
16
16
  v-if="!disabled"
17
- class="n20-drag-remove n20-icon-shanchu"
17
+ class="n20-icon-shanchu"
18
+ :underline="false"
19
+ :disabled="inSC && item.checked"
18
20
  @click="remove(index)"
19
- ></i>
21
+ />
20
22
  </div>
21
23
  </vue-draggable>
22
24
  </template>
@@ -45,6 +47,11 @@ export default {
45
47
  default: 'label'
46
48
  }
47
49
  },
50
+ computed: {
51
+ inSC() {
52
+ return !!this.$attrs['in-show-column']
53
+ }
54
+ },
48
55
  methods: {
49
56
  change() {
50
57
  this.$emit('change', this.list)
@@ -1,38 +1,79 @@
1
1
  <template>
2
- <div class="n20-pagination">
2
+ <div class="n20-pagination-1">
3
3
  <el-pagination
4
- layout="prev,next,slot,jumper"
4
+ layout="prev,next,slot"
5
5
  :current-page.sync="pageObj[pageKey.no]"
6
6
  :page-size="pageObj[pageKey.size]"
7
7
  :total="pageObj[pageKey.total]"
8
8
  :size="size"
9
9
  @current-change="setnoOrsize"
10
+ />
11
+ <span class="m-r-ss"
12
+ ><span class="color-primary">{{ pageObj[pageKey.no] }}</span
13
+ >/{{ max }}</span
10
14
  >
11
- <span class="n20-pagination-total"
12
- ><span class="n20-pagination-no">{{ pageObj[pageKey.no] }}</span
13
- >/{{ max }}</span
14
- >
15
- <span class="el-pagination__sizes">
16
- <el-select
15
+ <span>到第</span>
16
+ <el-input-number
17
+ v-model="toNo"
18
+ class="n20-pagination-jumper-1 m-r-ss"
19
+ :min="1"
20
+ :max="max"
21
+ :step="1"
22
+ :step-strictly="true"
23
+ :controls="false"
24
+ :size="size"
25
+ @change="setnoOrsize"
26
+ />
27
+ <span class="m-r-s">页</span>
28
+ <el-popover v-model="settingV" placement="top" trigger="click">
29
+ <el-link
30
+ slot="reference"
31
+ icon="n20-icon-shezhi"
32
+ :underline="false"
33
+ style="font-size: 18px"
34
+ />
35
+ <div>
36
+ <span>每页显示</span>
37
+ <el-radio-group
17
38
  v-model="pageObj[pageKey.size]"
39
+ class="n20-pagination-sizes-1 m-l-s"
18
40
  size="mini"
19
- popper-class="el-pagination__sizes-popper"
20
- @change="setnoOrsize"
41
+ @change="
42
+ () => {
43
+ setnoOrsize()
44
+ settingV = false
45
+ }
46
+ "
21
47
  >
22
- <el-option
48
+ <el-radio-button
23
49
  v-for="item in pageSizes"
24
50
  :key="item"
25
- :value="item"
26
- :label="item + '条/页'"
27
- />
28
- <el-option
29
- :value="pageObj[pageKey.size]"
30
- :label="pageObj[pageKey.size] + '条/页'"
31
- style="display: none"
51
+ class="m-r-s"
52
+ :label="item"
32
53
  />
33
- </el-select>
34
- </span>
35
- </el-pagination>
54
+ </el-radio-group>
55
+ <el-input-number
56
+ v-model="userSize"
57
+ class="n20-pagination-usersizes-1"
58
+ :class="{
59
+ 'is-active': !pageSizes.includes(pageObj[pageKey.size])
60
+ }"
61
+ :min="1"
62
+ :max="sizeMax"
63
+ :step="1"
64
+ :step-strictly="true"
65
+ :controls="false"
66
+ size="mini"
67
+ placeholder="自定义"
68
+ @change="
69
+ () => {
70
+ setnoOrsize()
71
+ settingV = false
72
+ }
73
+ "
74
+ />
75
+ </div>
76
+ </el-popover>
36
77
  </div>
37
78
  </template>
38
79
 
@@ -62,11 +103,16 @@ export default {
62
103
  },
63
104
  pageSizes: {
64
105
  type: Array,
65
- default: () => [20, 50, 100, 300, 500]
106
+ default: () => [20, 50, 100]
107
+ },
108
+ sizeMax: {
109
+ type: Number,
110
+ default: 1000
66
111
  }
67
112
  },
68
113
  data() {
69
114
  return {
115
+ settingV: false,
70
116
  noOrsize: ''
71
117
  }
72
118
  },
@@ -76,6 +122,31 @@ export default {
76
122
  let size = this.pageObj[this.pageKey.size]
77
123
 
78
124
  return Math.ceil(total / size)
125
+ },
126
+ toNo: {
127
+ get() {
128
+ return this.pageObj[this.pageKey.no]
129
+ },
130
+ set(val) {
131
+ if (val) {
132
+ this.pageObj[this.pageKey.no] = val
133
+ } else {
134
+ this.pageObj[this.pageKey.no] = 1
135
+ }
136
+ }
137
+ },
138
+ userSize: {
139
+ get() {
140
+ return this.pageObj[this.pageKey.size]
141
+ },
142
+ set(val) {
143
+ if (val) {
144
+ this.pageObj[this.pageKey.size] = val
145
+ } else {
146
+ this.pageObj[this.pageKey.size] = this.pageSizes[0]
147
+ }
148
+ this.pageObj[this.pageKey.no] = 1
149
+ }
79
150
  }
80
151
  },
81
152
  watch: {
@@ -85,11 +156,9 @@ export default {
85
156
  },
86
157
  methods: {
87
158
  setnoOrsize() {
88
- this.$nextTick(() => {
89
- let no = this.pageObj[this.pageKey.no]
90
- let size = this.pageObj[this.pageKey.size]
91
- this.noOrsize = no + ',' + size
92
- })
159
+ let no = this.pageObj[this.pageKey.no]
160
+ let size = this.pageObj[this.pageKey.size]
161
+ this.noOrsize = no + ',' + size
93
162
  }
94
163
  }
95
164
  }
@@ -46,7 +46,11 @@
46
46
  >
47
47
  </div>
48
48
  <div class="flex-1 overflow-y">
49
- <drag-list :list="dragList" :label-key="labelKey" />
49
+ <drag-list
50
+ :list="dragList"
51
+ :label-key="labelKey"
52
+ :in-show-column="true"
53
+ />
50
54
  </div>
51
55
  </div>
52
56
  </div>
@@ -20,7 +20,7 @@
20
20
  <el-table-column
21
21
  v-else
22
22
  :key="'cl-table-' + i"
23
- :formatter="item.formatter | colfF"
23
+ :formatter="item.formatter | colfF(item.formatterMap)"
24
24
  :filters="item.filters | colftF(filtersMap)"
25
25
  v-bind="item"
26
26
  />
@@ -70,6 +70,7 @@
70
70
 
71
71
  <script>
72
72
  import numerify from 'numerify'
73
+ import dayjs from 'dayjs'
73
74
  import Pagination from '../Pagination/index.vue'
74
75
 
75
76
  const columnRender = {
@@ -86,6 +87,63 @@ const columnRender = {
86
87
  }
87
88
  }
88
89
 
90
+ function colfF(colf, map) {
91
+ if (typeof colf !== 'string') return colf
92
+ let sc = colf.split(/{.+?}/g) || []
93
+ let mc = colf.match(/{.+?}/g) || []
94
+ let mck = []
95
+ mc.forEach((t) => {
96
+ t = t.replace(/^{|\s+|}$/g, '').split('|')
97
+ mck.push(t)
98
+ })
99
+
100
+ return (row) => tplFn(row, sc, mck, map)
101
+ }
102
+ function tplFn(row, sc, mck, map = {}) {
103
+ let str = ''
104
+ sc.forEach((s, i) => {
105
+ str += s
106
+ let kA = mck[i]
107
+ if (kA && kA.length) {
108
+ let key = kA[0]
109
+ if (kA.length === 1) {
110
+ str += row[key]
111
+ } else {
112
+ let type = kA[1]
113
+ switch (type) {
114
+ case 'money':
115
+ str += numerify(row[key], '0,0.00')
116
+ break
117
+ case 'rate':
118
+ str += numerify(row[key], '0.000000')
119
+ break
120
+ case 'map':
121
+ str += map[row[key]]
122
+ break
123
+ case 'date':
124
+ str += dayjs(row[key]).format('YYYY-MM-DD')
125
+ break
126
+ case 'datetime':
127
+ str += dayjs(row[key]).format('YYYY-MM-DD HH:mm:ss')
128
+ break
129
+ case 'time':
130
+ str += dayjs(row[key]).format('HH:mm:ss')
131
+ break
132
+ default:
133
+ str += row[key]
134
+ break
135
+ }
136
+ }
137
+ }
138
+ })
139
+ return str
140
+ }
141
+
142
+ function colftF(colft, fMap) {
143
+ if (typeof colft !== 'string') return colft
144
+ return fMap[colft]
145
+ }
146
+
89
147
  export default {
90
148
  name: 'Table',
91
149
  components: {
@@ -93,36 +151,8 @@ export default {
93
151
  columnRender
94
152
  },
95
153
  filters: {
96
- colfF(colf) {
97
- if (typeof colf !== 'string') return colf
98
-
99
- if (/\|money/.test(colf)) {
100
- let mc = colf.match(/{(\S+)\|money}/)
101
- let key = mc && mc[1]
102
-
103
- return (row) => numerify(row[key], '0,0.00')
104
- } else if (/\|rate/.test(colf)) {
105
- let mc = colf.match(/{(\S+)\|rate}/)
106
- let key = mc && mc[1]
107
-
108
- return (row) => numerify(row[key], '0.000000')
109
- } else {
110
- let mc = colf.match(/{[^}]+}/g) || []
111
- let mcv = mc.map((m) => m.replace(/{|}/g, ''))
112
-
113
- return (row) => {
114
- let str = colf
115
- mc.forEach((tp, i) => {
116
- str = str.replace(tp, row[mcv[i]])
117
- })
118
- return str
119
- }
120
- }
121
- },
122
- colftF(colft, fMap) {
123
- if (typeof colft !== 'string') return colft
124
- return fMap[colft]
125
- }
154
+ colfF,
155
+ colftF
126
156
  },
127
157
  props: {
128
158
  column: {
@@ -1,17 +1,26 @@
1
1
 
2
2
  <template>
3
- <el-radio-group :value="init" class="n20-tertiary-tab" :size="size">
4
- <el-radio-button
3
+ <el-tabs
4
+ :value="init"
5
+ class="n20-tertiary-tab-1"
6
+ type="card"
7
+ :before-leave="beforeFn"
8
+ @tab-click="clickFn"
9
+ >
10
+ <el-tab-pane
5
11
  v-for="item of data"
6
12
  :key="item.name"
7
- :label="item.name"
13
+ :tab-info="item"
14
+ :name="item.name"
15
+ :icon="item.icon"
8
16
  :disabled="item.disabled"
9
- @click.native.prevent="(ev) => clickFn(item, ev)"
10
17
  >
11
- <span v-if="item.icon" :class="item.icon"></span>
12
- {{ item.name }}
13
- </el-radio-button>
14
- </el-radio-group>
18
+ <template slot="label">
19
+ <span v-if="item.icon" :class="item.icon"></span>
20
+ {{ item.name }}
21
+ </template>
22
+ </el-tab-pane>
23
+ </el-tabs>
15
24
  </template>
16
25
 
17
26
  <script>
@@ -31,22 +40,23 @@ export default {
31
40
  default: 'mini'
32
41
  }
33
42
  },
34
- data() {
35
- if (!this.$listeners['update:init'] && !this.$listeners['click']) {
36
- console.warn('请设置 @click 或 init.sync')
43
+ computed: {
44
+ stop() {
45
+ return !this.$listeners['update:init']
37
46
  }
38
- return {}
39
47
  },
40
48
  methods: {
41
- clickFn(item, ev) {
42
- ev.currentTarget && ev.currentTarget.blur()
43
-
49
+ clickFn(C) {
50
+ let item = C.$attrs['tab-info']
44
51
  if (this.$listeners['update:init']) {
45
52
  !item.disabled && this.$emit('update:init', item.name)
46
53
  }
47
54
  if (this.$listeners['click']) {
48
55
  this.$emit('click', item)
49
56
  }
57
+ },
58
+ beforeFn(name) {
59
+ return name === this.init ? true : !this.stop
50
60
  }
51
61
  }
52
62
  }
@@ -60,7 +60,7 @@ export default {
60
60
  if (v.no !== this.page) {
61
61
  this.$emit('update:page', v.no)
62
62
  }
63
- if (v.size !== this.size) {
63
+ if (v.size !== this.pageSize) {
64
64
  this.$emit('update:pageSize', v.size)
65
65
  // 为修复bug而写的bug
66
66
  this.$nextTick(() => {
package/src/index.js CHANGED
@@ -165,12 +165,21 @@ export default {
165
165
  }
166
166
  export {
167
167
  version,
168
- axios,
168
+ // 方法
169
169
  auth,
170
+ axios,
170
171
  getJsonc,
171
172
  downloadBlob,
172
173
  forEachs,
173
174
  list2tree,
175
+ repairEl,
176
+ linkPush,
177
+ linkGo,
178
+ isHas,
179
+ isHasG,
180
+ dayjs,
181
+ numerify,
182
+ // 组件
174
183
  ContentLoading,
175
184
  ContentNull,
176
185
  NavMenu,
@@ -216,12 +225,5 @@ export {
216
225
  AnchorItem,
217
226
  FlowStep,
218
227
  CascaderArea,
219
- FileExportAsync,
220
- repairEl,
221
- linkPush,
222
- linkGo,
223
- isHas,
224
- isHasG,
225
- dayjs,
226
- numerify
228
+ FileExportAsync
227
229
  }
@@ -1,8 +1,6 @@
1
1
  import locale from 'element-ui/lib/locale'
2
2
  import langEn from 'element-ui/lib/locale/lang/en'
3
3
  import langTw from 'element-ui/lib/locale/lang/zh-TW'
4
- import langCN from 'element-ui/lib/locale/lang/zh-CN'
5
- langCN?.el?.pagination?.goto && (langCN.el.pagination.goto = '到第')
6
4
 
7
5
  import zhHk from './cn2hk.json' // 简体繁体映射
8
6
  // 语言枚举
@@ -40,8 +38,6 @@ directive.install = (Vue, map = {}) => {
40
38
  locale.use(langEn)
41
39
  } else if (pageLang === 'zh-hk') {
42
40
  locale.use(langTw)
43
- } else {
44
- locale.use(langCN)
45
41
  }
46
42
 
47
43
  $i18n_map_root = map