n20-common-lib 2.2.1 → 2.2.3

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": "2.2.1",
3
+ "version": "2.2.3",
4
4
  "private": false,
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -690,7 +690,7 @@ $--input-max: 224px;
690
690
  &.is-clearable {
691
691
  .el-select {
692
692
  .el-input__inner {
693
- padding-right: 50px;
693
+ padding-right: 30px;
694
694
  }
695
695
  }
696
696
  }
@@ -1,5 +1,13 @@
1
1
  <template>
2
- <el-input v-if="!select" v-bind="$attrs" :value="value" :clearable="clearable" v-on="$listeners" @change="searchFn">
2
+ <el-input
3
+ v-if="!select"
4
+ class="n20-input-search-1"
5
+ v-bind="$attrs"
6
+ :value="value"
7
+ :clearable="clearable"
8
+ v-on="$listeners"
9
+ @change="searchFn"
10
+ >
3
11
  <i
4
12
  slot="suffix"
5
13
  class="is-search el-input__icon"
@@ -28,12 +36,13 @@
28
36
  <slot></slot>
29
37
  </el-select>
30
38
  <span class="el-input__suffix"
31
- ><i class="is-search el-input__icon" :class="suffixIcon || 'el-icon-zoom-in'" @click.stop="searchFn"></i
32
- ><i
33
- v-if="clearable && isHove && hasVal"
34
- class="is-search el-input__icon el-icon-circle-close"
35
- @click="closeFn"
36
- ></i
39
+ ><span class="el-input__suffix-inner"
40
+ ><i class="is-search el-input__icon" :class="suffixIcon || 'el-icon-zoom-in'" @click.stop="searchFn"></i
41
+ ><i
42
+ v-if="clearable && isHove && hasVal"
43
+ class="is-search el-input__icon el-icon-circle-close"
44
+ @click.stop="closeFn"
45
+ ></i></span
37
46
  ></span>
38
47
  </div>
39
48
  </template>
@@ -112,3 +121,9 @@ export default {
112
121
  }
113
122
  }
114
123
  </script>
124
+ <style>
125
+ .n20-input-search-1 .el-input__suffix-inner,
126
+ .n20-input-search .el-input__suffix-inner {
127
+ background: var(--color-white);
128
+ }
129
+ </style>
@@ -43,7 +43,7 @@
43
43
  </el-input>
44
44
  不自动填充密码End -->
45
45
  </el-form-item>
46
- <el-form-item class="m-b" :label="'图形验证码' | $lc" prop="imageCode">
46
+ <el-form-item v-if="showImageCode" class="m-b" :label="'图形验证码' | $lc" prop="imageCode">
47
47
  <br />
48
48
  <div class="flex-box">
49
49
  <el-input v-model="form.imageCode" class="flex-item m-r-s" :placeholder="'请输入图形验证码' | $lc" />
@@ -186,6 +186,10 @@ export default {
186
186
  extraForm: {
187
187
  type: Object,
188
188
  default: () => ({})
189
+ },
190
+ showImageCode: {
191
+ type: Boolean,
192
+ default: false
189
193
  }
190
194
  },
191
195
  data() {
@@ -256,12 +260,18 @@ export default {
256
260
  }
257
261
  },
258
262
  getImgCode() {
259
- if (this.theType === 'account') {
263
+ if (this.theType === 'account' && this.showImageCode) {
260
264
  this.$set(this.form, 'imageCode', '')
261
265
  this.imageUrl && URL.revokeObjectURL(this.imageUrl)
262
- axios.get('/bems/prod_1.0/uas/api/authorization/captcha/image', null, { responseType: 'blob' }).then((blob) => {
263
- this.imageUrl = URL.createObjectURL(blob)
264
- })
266
+ axios
267
+ .get('/bems/prod_1.0/uas/api/authorization/captcha/image', null, {
268
+ responseType: 'blob',
269
+ loading: false,
270
+ noMsg: true
271
+ })
272
+ .then((blob) => {
273
+ this.imageUrl = URL.createObjectURL(blob)
274
+ })
265
275
  }
266
276
  },
267
277
  // 发送短信
@@ -1,12 +1,12 @@
1
1
  <template>
2
- <div v-if="alV" v-loading="alV" class="login-wrap">
2
+ <div v-if="alV" v-loading="alV" class="login-wrap" element-loading-custom-class="auto-login-loading">
3
3
  <loginForm
4
4
  ref="login-form"
5
+ class="login-form"
5
6
  :before-login="beforeLogin"
6
7
  :login-types="loginTypes"
7
8
  :login-then="loginThen"
8
9
  :async-rela-nos="asyncRelaNos"
9
- class="login-form"
10
10
  style="display: none"
11
11
  />
12
12
  </div>
@@ -20,11 +20,12 @@
20
20
  <div doc="登录页标语" v-html="loginSloganHtml"></div>
21
21
  <loginForm
22
22
  v-if="operateType === 'login'"
23
+ class="login-form"
23
24
  :before-login="beforeLogin"
24
25
  :login-types="loginTypes"
25
26
  :login-then="loginThen"
26
27
  :async-rela-nos="asyncRelaNos"
27
- class="login-form"
28
+ :show-image-code="showImageCode"
28
29
  @changType="getChangetype"
29
30
  >
30
31
  <div slot="header" class="login-form-header m-b text-c">{{ '欢 迎 登 录' | $lc }}</div>
@@ -84,6 +85,10 @@ export default {
84
85
  asyncRelaNos: {
85
86
  type: Boolean,
86
87
  default: false
88
+ },
89
+ showImageCode: {
90
+ type: Boolean,
91
+ default: false
87
92
  }
88
93
  },
89
94
  data() {
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div style="width: 100vw; height: 100vh; overflow: hidden">
3
- <div v-if="alV" v-loading="alV" class="login-wrap">
3
+ <div v-if="alV" v-loading="alV" class="login-wrap" element-loading-custom-class="auto-login-loading">
4
4
  <loginForm
5
5
  ref="login-form"
6
6
  :before-login="beforeLogin"
@@ -87,6 +87,7 @@
87
87
  :login-then="loginThenT"
88
88
  :async-rela-nos="asyncRelaNos"
89
89
  :extra-form="extraForm"
90
+ :show-image-code="showImageCode"
90
91
  @changType="getChangetype"
91
92
  >
92
93
  <div slot="header" class="login-form-header m-b text-c">{{ '欢 迎 登 录' | $lc }}</div>
@@ -173,6 +174,10 @@ export default {
173
174
  asyncRelaNos: {
174
175
  type: Boolean,
175
176
  default: false
177
+ },
178
+ showImageCode: {
179
+ type: Boolean,
180
+ default: true
176
181
  }
177
182
  },
178
183
  data() {
@@ -531,8 +536,10 @@ export default {
531
536
  position: absolute;
532
537
  right: 103px;
533
538
  top: 50%;
534
- transform: translateY(-50%);
539
+ width: 324px;
540
+ min-height: 360px;
535
541
  padding: 30px 30px 18px !important;
542
+ transform: translateY(-50%);
536
543
  background: #f7f6f6;
537
544
  }
538
545
  .login-bg-light .login-form {
@@ -111,9 +111,9 @@ function errorFn(status, msg, noMsg, isErr, res) {
111
111
  } else if (status === 500 || (isErr && msg.includes('500'))) {
112
112
  noMsg || showMsg($lc('500,服务器链接失败!'))
113
113
  } else if (status === 'ECONNABORTED' && msg.includes('timeout')) {
114
- showMsg($lc('请求超时'))
114
+ noMsg || showMsg($lc('请求超时'))
115
115
  } else if (msg === 'Network Error') {
116
- showMsg($lc('请求错误'))
116
+ noMsg || showMsg($lc('请求错误'))
117
117
  } else if (status >= 900 || status === -1) {
118
118
  noMsg || showMsg(msg)
119
119
  } else {
@@ -1,86 +1,120 @@
1
1
  import importG from './importGlobal.js'
2
2
 
3
- export default async function toExcel({ columns = [], rows = [], name = 'sheet01' }) {
3
+ const headStyle = {
4
+ fill: { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFE1E1E1' } },
5
+ alignment: { vertical: 'middle', horizontal: 'center' },
6
+ font: { bold: true }
7
+ }
8
+ const colBorder = {
9
+ top: { style: 'thin' },
10
+ left: { style: 'thin' },
11
+ bottom: { style: 'thin' },
12
+ right: { style: 'thin' }
13
+ }
14
+
15
+ export default async function toExcel() {
4
16
  let { default: ExcelJS } = await importG('exceljs', () => import(/*webpackChunkName: "exceljs"*/ 'exceljs'))
5
17
 
6
18
  // 创建工作簿
7
19
  const workbook = new ExcelJS.Workbook()
8
- // 创建工作表
9
- const worksheet = workbook.addWorksheet(name)
10
- let cols = []
11
- columns.forEach((col) => {
12
- if (!col.static) {
13
- let _col = {
14
- header: col.label,
15
- key: col.prop,
16
- style: col.style || {}
17
- }
18
20
 
19
- let width = col.width || col.minWidth || col['min-width'] || 0
20
- width = Math.max(width / 8, col.label.length * 2.2 + 2)
21
- width > 9 && (_col.width = width)
21
+ for (let I = 0; I < arguments.length; I++) {
22
+ let { columns = [], rows = [], name = `sheet${I + 1}`, unshiftHead, merges, custom } = arguments[I]
22
23
 
23
- if (col.numFmt) {
24
- _col.style.numFmt = col.numFmt
25
- } else if (col.formatter && typeof col.formatter === 'string') {
26
- if (/\|\s?money/.test(col.formatter)) {
27
- _col.style.numFmt = '#,##0.00'
24
+ // 创建工作表
25
+ const worksheet = workbook.addWorksheet(name)
26
+ let cols = []
27
+ columns.forEach((col) => {
28
+ if (!col.static) {
29
+ let _col = {
30
+ header: col.label,
31
+ key: col.prop,
32
+ style: col.style || {}
28
33
  }
29
- if (/\|\s?rate/.test(col.formatter)) {
30
- _col.style.numFmt = '0.000000'
34
+
35
+ let width = col.width || col.minWidth || col['min-width'] || 0
36
+ width = Math.max(width / 8, col.label.length * 2.2 + 2)
37
+ width > 9 && (_col.width = width)
38
+
39
+ if (col.numFmt) {
40
+ _col.style.numFmt = col.numFmt
41
+ } else if (col.formatter && typeof col.formatter === 'string') {
42
+ if (/\|\s?money/.test(col.formatter)) {
43
+ _col.style.numFmt = '#,##0.00'
44
+ }
45
+ if (/\|\s?rate/.test(col.formatter)) {
46
+ _col.style.numFmt = '0.000000'
47
+ }
31
48
  }
49
+
50
+ cols.push(_col)
32
51
  }
52
+ })
33
53
 
34
- cols.push(_col)
35
- }
36
- })
54
+ let cL = cols.length
55
+ let rL = rows.length
56
+ let ySplit = 1
37
57
 
38
- let cL = cols.length
39
- let rL = rows.length
58
+ worksheet.columns = cols
59
+ worksheet.addRows(rows)
40
60
 
41
- worksheet.columns = cols
42
- worksheet.addRows(rows)
61
+ for (let i = 0; i < cL; i++) {
62
+ worksheet.getCell(1, i + 1).style = headStyle
63
+ }
43
64
 
44
- worksheet.views = [
45
- {
46
- state: 'frozen',
47
- // xSplit: 1,
48
- ySplit: 1
65
+ for (let i = 0; i < rL + 1; i++) {
66
+ for (let j = 0; j < cL; j++) {
67
+ let cell = worksheet.getCell(i + 1, j + 1)
68
+ cell.border = colBorder
69
+ cell.alignment ? (cell.alignment.vertical = 'middle') : (cell.alignment = { vertical: 'middle' })
70
+ }
49
71
  }
50
- ]
51
-
52
- for (let i = 0; i < cL; i++) {
53
- worksheet.getCell(1, i + 1).style = {
54
- fill: {
55
- type: 'pattern',
56
- pattern: 'solid',
57
- fgColor: { argb: 'FFE1E1E1' }
58
- },
59
- alignment: {
60
- vertical: 'middle',
61
- horizontal: 'center'
62
- },
63
- font: {
64
- bold: true
72
+
73
+ if (unshiftHead) {
74
+ let headRows = Array.isArray(unshiftHead[0]) ? unshiftHead : [unshiftHead]
75
+ let headRowsT = []
76
+ let headRowsM = []
77
+ for (let i = 0; i < headRows.length; i++) {
78
+ let rI = i + 1
79
+ let headRowT = []
80
+ for (let j = 0; j < headRows[i].length; j++) {
81
+ let cI = j + 1
82
+ let col = headRows[i][j]
83
+ headRowT.push(col && col.label ? col.label : col)
84
+ if (col && col.merge) {
85
+ headRowsM.push([rI, cI, rI + col.merge[0] - 1, cI + col.merge[1] - 1])
86
+ }
87
+ }
88
+ headRowsT.push(headRowT)
89
+ ySplit = ySplit + 1
90
+ }
91
+
92
+ worksheet.spliceRows(1, 0, ...headRowsT)
93
+ for (let i = 0; i < headRows.length; i++) {
94
+ let rI = i + 1
95
+ for (let j = 0; j < headRows[i].length; j++) {
96
+ let cI = j + 1
97
+ worksheet.getCell(rI, cI).style = headStyle
98
+ }
99
+ }
100
+
101
+ for (let i = 0; i < headRowsM.length; i++) {
102
+ worksheet.mergeCells(...headRowsM[i])
65
103
  }
66
104
  }
67
- }
68
105
 
69
- for (let i = 0; i < cL; i++) {
70
- for (let j = 0; j < rL + 1; j++) {
71
- worksheet.getCell(j + 1, i + 1).border = {
72
- top: { style: 'thin' },
73
- left: { style: 'thin' },
74
- bottom: { style: 'thin' },
75
- right: { style: 'thin' }
106
+ worksheet.views = [{ state: 'frozen', ySplit: ySplit }]
107
+
108
+ if (merges && Array.isArray(merges)) {
109
+ for (let i = 0; i < merges.length; i++) {
110
+ worksheet.mergeCells(merges[i])
76
111
  }
77
112
  }
113
+ if (custom) {
114
+ await custom(worksheet)
115
+ }
78
116
  }
79
117
 
80
- // worksheet.getColumn(1).numFmt = '#,##0.00"%"'
81
- // worksheet.getColumn(1).numFmt = '#,##0.00'
82
- // worksheet.getColumn(2).width = 32
83
-
84
118
  return new Promise((resolve, reject) => {
85
119
  workbook.xlsx
86
120
  .writeBuffer()
@@ -26,6 +26,8 @@ export default async function toJson(file, name) {
26
26
  return pro.then((workbook) => {
27
27
  let sheetName = name || workbook.SheetNames[0]
28
28
  let workSheet = workbook.Sheets[sheetName]
29
+ if (!workSheet) return Promise.reject(`工作表:${name} 不存在`)
30
+
29
31
  let rows = []
30
32
  let cols = utils.sheet_to_csv(workSheet, { FS: '†', blankrows: false }).split('\n')[0].replace(/†+$/, '').split('†')
31
33
 
@@ -9,6 +9,8 @@ export default async function toJson(file, name) {
9
9
  .load(file)
10
10
  .then(() => {
11
11
  const worksheet = workbook.getWorksheet(name || 1)
12
+ if (!worksheet) return reject(`工作表:${name} 不存在`)
13
+
12
14
  let rows = []
13
15
  worksheet.eachRow((r) => {
14
16
  let row = r.values