n20-common-lib 2.2.2 → 2.2.4

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.2",
3
+ "version": "2.2.4",
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>
@@ -28,7 +28,9 @@
28
28
  :show-image-code="showImageCode"
29
29
  @changType="getChangetype"
30
30
  >
31
- <div slot="header" class="login-form-header m-b text-c">{{ '欢 迎 登 录' | $lc }}</div>
31
+ <div slot="header" class="login-form-header m-b text-c">
32
+ <slot name="header">{{ '欢 迎 登 录' | $lc }}</slot>
33
+ </div>
32
34
  <el-dropdown-item slot="other">
33
35
  <slot name="others"></slot>
34
36
  </el-dropdown-item>
@@ -90,7 +90,9 @@
90
90
  :show-image-code="showImageCode"
91
91
  @changType="getChangetype"
92
92
  >
93
- <div slot="header" class="login-form-header m-b text-c">{{ '欢 迎 登 录' | $lc }}</div>
93
+ <div slot="header" class="login-form-header m-b text-c">
94
+ <slot name="header">{{ '欢 迎 登 录' | $lc }}</slot>
95
+ </div>
94
96
  <el-dropdown-item slot="other">
95
97
  <slot name="others"></slot>
96
98
  </el-dropdown-item>
@@ -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