n20-common-lib 1.3.43 → 1.3.46
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/nstc-g6/components/NstcElectronicFile/NstcElectronicFile.vue +168 -48
- package/nstc-g6/components/NstcUploadCustomExcel/NstcUploadCustomExcel.vue +153 -155
- package/{src → nstc-g6}/utils/mapper_aims.js +0 -0
- package/package.json +3 -2
- package/src/components/ApprovalRecord/approvalImgPro.vue +120 -15
- package/src/components/DragList/index.vue +5 -1
- package/src/components/ECharts/index.vue +5 -2
- package/src/components/InputNumber/index.vue +1 -1
- package/src/components/LoginTemporary/form.vue +8 -2
- package/src/components/LoginTemporary/index.vue +16 -17
- package/src/components/LoginTemporary/qrcode.vue +5 -3
- package/src/components/Statis/index.vue +2 -0
- package/src/components/Statis/statisItem.vue +7 -2
- package/src/components/Table/index.vue +2 -49
- package/src/components/TableOperateColumn/OperateBtns.vue +13 -0
- package/src/index.js +1 -0
- package/src/utils/importGlobal.js +16 -0
- package/src/utils/toExcel.js +10 -2
- package/src/utils/xls2json.js +6 -2
- package/src/utils/xlsx2json.js +6 -2
- package/style/index.css +1 -1
- package/style/index.css.map +1 -1
- package/theme/blue.css +1 -1
- package/theme/green.css +1 -1
- package/theme/lightBlue.css +1 -1
- package/theme/orange.css +1 -1
- package/theme/purple.css +1 -1
- package/theme/red.css +1 -1
- package/theme/yellow.css +1 -1
- package/src/assets/.DS_Store +0 -0
- package/src/components/.DS_Store +0 -0
- package/src/components/Empty/.DS_Store +0 -0
- package/src/components/Empty/img/.DS_Store +0 -0
- package/src/components/Layout/.DS_Store +0 -0
- package/src/components/Table/ThSelectHeader.vue +0 -128
- package/src/plugins/.DS_Store +0 -0
- package/src/plugins/Sign/.DS_Store +0 -0
|
@@ -21,310 +21,308 @@
|
|
|
21
21
|
accept=".xlsx, .xls, .csv"
|
|
22
22
|
@change="handleClick"
|
|
23
23
|
/>
|
|
24
|
-
<i class="el-icon-upload"
|
|
24
|
+
<i class="el-icon-upload"></i>
|
|
25
25
|
</div>
|
|
26
26
|
</template>
|
|
27
27
|
|
|
28
28
|
<script>
|
|
29
|
-
import XLSX from
|
|
30
|
-
import { mapperData } from
|
|
29
|
+
import XLSX from 'xlsx'
|
|
30
|
+
import { mapperData } from '../../utils/mapper_aims.js'
|
|
31
31
|
export default {
|
|
32
|
-
name:
|
|
32
|
+
name: 'NstcUploadCustomExcel',
|
|
33
33
|
props: {
|
|
34
34
|
beforeUpload: Function, // eslint-disable-line
|
|
35
|
-
onSuccess: Function
|
|
35
|
+
onSuccess: Function // eslint-disable-line
|
|
36
36
|
},
|
|
37
37
|
data() {
|
|
38
38
|
return {
|
|
39
39
|
loading: false,
|
|
40
40
|
excelData: {
|
|
41
41
|
header: null,
|
|
42
|
-
results: null
|
|
42
|
+
results: null
|
|
43
43
|
},
|
|
44
44
|
excelDataAll: {},
|
|
45
|
-
analysisText:
|
|
45
|
+
analysisText: 'analysis',
|
|
46
46
|
columnsList: [],
|
|
47
|
-
columnsListNew: []
|
|
48
|
-
}
|
|
47
|
+
columnsListNew: []
|
|
48
|
+
}
|
|
49
49
|
},
|
|
50
50
|
methods: {
|
|
51
51
|
generateData(datas, list) {
|
|
52
52
|
// this.excelData.header = header
|
|
53
53
|
// this.excelData.results = results
|
|
54
|
-
this.onSuccess && this.onSuccess(datas, list)
|
|
54
|
+
this.onSuccess && this.onSuccess(datas, list)
|
|
55
55
|
},
|
|
56
56
|
handleDrop(e) {
|
|
57
|
-
e.stopPropagation()
|
|
58
|
-
e.preventDefault()
|
|
59
|
-
if (this.loading) return
|
|
60
|
-
const files = e.dataTransfer.files
|
|
57
|
+
e.stopPropagation()
|
|
58
|
+
e.preventDefault()
|
|
59
|
+
if (this.loading) return
|
|
60
|
+
const files = e.dataTransfer.files
|
|
61
61
|
if (files.length !== 1) {
|
|
62
|
-
this.$message.error(
|
|
63
|
-
return
|
|
62
|
+
this.$message.error('Only support uploading one file!')
|
|
63
|
+
return
|
|
64
64
|
}
|
|
65
|
-
const rawFile = files[0]
|
|
65
|
+
const rawFile = files[0] // only use files[0]
|
|
66
66
|
|
|
67
67
|
if (!this.isExcel(rawFile)) {
|
|
68
68
|
this.$message.error(
|
|
69
|
-
|
|
70
|
-
)
|
|
71
|
-
return false
|
|
69
|
+
'Only supports upload .xlsx, .xls, .csv suffix files'
|
|
70
|
+
)
|
|
71
|
+
return false
|
|
72
72
|
}
|
|
73
|
-
this.upload(rawFile)
|
|
74
|
-
e.stopPropagation()
|
|
75
|
-
e.preventDefault()
|
|
73
|
+
this.upload(rawFile)
|
|
74
|
+
e.stopPropagation()
|
|
75
|
+
e.preventDefault()
|
|
76
76
|
},
|
|
77
77
|
handleDragover(e) {
|
|
78
|
-
e.stopPropagation()
|
|
79
|
-
e.preventDefault()
|
|
80
|
-
e.dataTransfer.dropEffect =
|
|
78
|
+
e.stopPropagation()
|
|
79
|
+
e.preventDefault()
|
|
80
|
+
e.dataTransfer.dropEffect = 'copy'
|
|
81
81
|
},
|
|
82
82
|
handleUpload() {
|
|
83
|
-
this.$refs[
|
|
83
|
+
this.$refs['excel-upload-input'].click()
|
|
84
84
|
},
|
|
85
85
|
handleClick(e) {
|
|
86
|
-
const files = e.target.files
|
|
87
|
-
const rawFile = files[0]
|
|
88
|
-
if (!rawFile) return
|
|
89
|
-
this.upload(rawFile)
|
|
86
|
+
const files = e.target.files
|
|
87
|
+
const rawFile = files[0] // only use files[0]
|
|
88
|
+
if (!rawFile) return
|
|
89
|
+
this.upload(rawFile)
|
|
90
90
|
},
|
|
91
91
|
upload(rawFile) {
|
|
92
|
-
this.$refs[
|
|
92
|
+
this.$refs['excel-upload-input'].value = null // fix can't select the same excel
|
|
93
93
|
|
|
94
94
|
if (!this.beforeUpload) {
|
|
95
|
-
this.readerData(rawFile)
|
|
96
|
-
return
|
|
95
|
+
this.readerData(rawFile)
|
|
96
|
+
return
|
|
97
97
|
}
|
|
98
|
-
const before = this.beforeUpload(rawFile)
|
|
98
|
+
const before = this.beforeUpload(rawFile)
|
|
99
99
|
if (before) {
|
|
100
|
-
this.readerData(rawFile)
|
|
100
|
+
this.readerData(rawFile)
|
|
101
101
|
}
|
|
102
102
|
},
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
readerData(rawFile) {
|
|
105
|
-
this.loading = true
|
|
105
|
+
this.loading = true
|
|
106
106
|
//清空表头
|
|
107
|
-
this.columnsList = []
|
|
108
|
-
this.columnsListNew = []
|
|
107
|
+
this.columnsList = []
|
|
108
|
+
this.columnsListNew = []
|
|
109
109
|
return new Promise((resolve) => {
|
|
110
|
-
const reader = new FileReader()
|
|
110
|
+
const reader = new FileReader()
|
|
111
111
|
|
|
112
112
|
// 重写FileReader上的readAsBinaryString方法
|
|
113
113
|
FileReader.prototype.readAsBinaryString = (rawFile) => {
|
|
114
|
-
var binary =
|
|
115
|
-
var wb
|
|
116
|
-
var reader = new FileReader()
|
|
114
|
+
var binary = ''
|
|
115
|
+
var wb // 读取完成的数据
|
|
116
|
+
var reader = new FileReader()
|
|
117
117
|
reader.onload = () => {
|
|
118
118
|
// 读取成Uint8Array,再转换为Unicode编码(Unicode占两个字节)
|
|
119
|
-
var bytes = new Uint8Array(reader.result)
|
|
120
|
-
var length = bytes.byteLength
|
|
119
|
+
var bytes = new Uint8Array(reader.result)
|
|
120
|
+
var length = bytes.byteLength
|
|
121
121
|
for (var i = 0; i < length; i++) {
|
|
122
|
-
binary += String.fromCharCode(bytes[i])
|
|
122
|
+
binary += String.fromCharCode(bytes[i])
|
|
123
123
|
}
|
|
124
124
|
// 接下来就是xlsx了,具体可看api
|
|
125
125
|
wb = XLSX.read(binary, {
|
|
126
|
-
type:
|
|
127
|
-
})
|
|
128
|
-
let datas = []
|
|
126
|
+
type: 'binary'
|
|
127
|
+
})
|
|
128
|
+
let datas = []
|
|
129
129
|
for (let st = 0; st < wb.SheetNames.length; st++) {
|
|
130
|
-
var sheet = wb.Sheets[wb.SheetNames[st]]
|
|
131
|
-
let ref = sheet[
|
|
132
|
-
if (ref == undefined || ref ==
|
|
133
|
-
continue
|
|
130
|
+
var sheet = wb.Sheets[wb.SheetNames[st]]
|
|
131
|
+
let ref = sheet['!ref']
|
|
132
|
+
if (ref == undefined || ref == 'undefined') {
|
|
133
|
+
continue
|
|
134
134
|
}
|
|
135
|
-
var result0 = []
|
|
136
|
-
var result1 = []
|
|
137
|
-
var result2 = []
|
|
138
|
-
var row
|
|
139
|
-
var rowNum
|
|
140
|
-
var colNum
|
|
141
|
-
var range = XLSX.utils.decode_range(ref)
|
|
135
|
+
var result0 = []
|
|
136
|
+
var result1 = []
|
|
137
|
+
var result2 = []
|
|
138
|
+
var row
|
|
139
|
+
var rowNum
|
|
140
|
+
var colNum
|
|
141
|
+
var range = XLSX.utils.decode_range(ref)
|
|
142
142
|
for (rowNum = range.s.r; rowNum <= range.e.r; rowNum++) {
|
|
143
|
-
row = []
|
|
143
|
+
row = []
|
|
144
144
|
for (colNum = range.s.c; colNum <= range.e.c; colNum++) {
|
|
145
145
|
var nextCell =
|
|
146
146
|
sheet[
|
|
147
147
|
XLSX.utils.encode_cell({
|
|
148
148
|
r: rowNum,
|
|
149
|
-
c: colNum
|
|
149
|
+
c: colNum
|
|
150
150
|
})
|
|
151
|
-
]
|
|
151
|
+
]
|
|
152
152
|
|
|
153
|
-
if (typeof nextCell ===
|
|
154
|
-
row.push(void 0)
|
|
153
|
+
if (typeof nextCell === 'undefined') {
|
|
154
|
+
row.push(void 0)
|
|
155
155
|
} else {
|
|
156
|
-
let cellw = nextCell.v
|
|
157
|
-
if (cellw ==
|
|
158
|
-
row.push(cellw)
|
|
156
|
+
let cellw = nextCell.v
|
|
157
|
+
if (cellw == '' || cellw == null || cellw === 'undefined') {
|
|
158
|
+
row.push(cellw)
|
|
159
159
|
} else {
|
|
160
|
-
let val = cellw.toString().trim()
|
|
161
|
-
row.push(val)
|
|
160
|
+
let val = cellw.toString().trim()
|
|
161
|
+
row.push(val)
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
|
-
result0.push(row)
|
|
165
|
+
result0.push(row)
|
|
166
166
|
}
|
|
167
|
-
console.log(
|
|
168
|
-
let lastIndex = 0
|
|
169
|
-
let lastLength = 0
|
|
167
|
+
console.log('处理的数据', result0)
|
|
168
|
+
let lastIndex = 0 //最长数组位置
|
|
169
|
+
let lastLength = 0 //最长数组长度
|
|
170
170
|
for (let i = 0; i < result0.length; i++) {
|
|
171
|
-
let rows = result0[i]
|
|
172
|
-
let temp = []
|
|
171
|
+
let rows = result0[i]
|
|
172
|
+
let temp = []
|
|
173
173
|
for (let item of rows) {
|
|
174
174
|
if (item) {
|
|
175
|
-
temp.push(item)
|
|
175
|
+
temp.push(item)
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
if (lastLength < temp.length) {
|
|
179
|
-
lastIndex = i
|
|
180
|
-
lastLength = temp.length
|
|
179
|
+
lastIndex = i
|
|
180
|
+
lastLength = temp.length
|
|
181
181
|
}
|
|
182
|
-
temp.splice(0, temp.length)
|
|
182
|
+
temp.splice(0, temp.length) //清空
|
|
183
183
|
}
|
|
184
|
-
result1 = result0.slice(0, lastIndex)
|
|
185
|
-
result2 = result0.slice(lastIndex, result0.length)
|
|
184
|
+
result1 = result0.slice(0, lastIndex)
|
|
185
|
+
result2 = result0.slice(lastIndex, result0.length)
|
|
186
186
|
// outdata = XLSX.utils.sheet_to_json(sheet);
|
|
187
187
|
// 自定义方法向父组件传递数据
|
|
188
188
|
// that.$emit("getResult", outdata);
|
|
189
189
|
|
|
190
190
|
// window.console.log(JSON.stringify(result1))
|
|
191
191
|
// window.console.log(JSON.stringify(result2))
|
|
192
|
-
var json = {}
|
|
193
|
-
var jsons = []
|
|
192
|
+
var json = {}
|
|
193
|
+
var jsons = []
|
|
194
194
|
for (let i = 0; i < result1.length; i++) {
|
|
195
|
-
let content = result1[i]
|
|
195
|
+
let content = result1[i]
|
|
196
196
|
for (let j = 0; j < content.length; j++) {
|
|
197
|
-
let key = content[j]
|
|
197
|
+
let key = content[j]
|
|
198
198
|
if (Object.prototype.hasOwnProperty.call(mapperData, key)) {
|
|
199
199
|
this.columnsList.push({
|
|
200
200
|
prop: mapperData[key],
|
|
201
|
-
label: key
|
|
202
|
-
})
|
|
203
|
-
json[mapperData[key]] = content[++j]
|
|
201
|
+
label: key
|
|
202
|
+
})
|
|
203
|
+
json[mapperData[key]] = content[++j]
|
|
204
204
|
} else {
|
|
205
|
-
json[content[j]] = content[++j]
|
|
205
|
+
json[content[j]] = content[++j]
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
|
-
var title = result2[0]
|
|
209
|
+
var title = result2[0]
|
|
210
210
|
//过滤result2全为空的行
|
|
211
211
|
result2 = result2.filter((item) => {
|
|
212
|
-
let flag = 0
|
|
212
|
+
let flag = 0
|
|
213
213
|
item.forEach((cloum) => {
|
|
214
214
|
if (!cloum) {
|
|
215
|
-
flag
|
|
215
|
+
flag++
|
|
216
216
|
}
|
|
217
|
-
})
|
|
218
|
-
return flag < item.length
|
|
219
|
-
})
|
|
220
|
-
console.log(
|
|
217
|
+
})
|
|
218
|
+
return flag < item.length
|
|
219
|
+
})
|
|
220
|
+
console.log('---------', result2)
|
|
221
221
|
for (let k = 1; k < result2.length; k++) {
|
|
222
|
-
let content = result2[k]
|
|
223
|
-
let tempJson = {}
|
|
224
|
-
Object.assign(tempJson, json)
|
|
222
|
+
let content = result2[k]
|
|
223
|
+
let tempJson = {}
|
|
224
|
+
Object.assign(tempJson, json)
|
|
225
225
|
for (let l = 0; l < title.length; l++) {
|
|
226
|
-
let key = title[l]
|
|
226
|
+
let key = title[l]
|
|
227
227
|
if (Object.prototype.hasOwnProperty.call(mapperData, key)) {
|
|
228
228
|
this.columnsList.push({
|
|
229
229
|
prop: mapperData[key],
|
|
230
|
-
label: key
|
|
231
|
-
})
|
|
232
|
-
key = mapperData[key]
|
|
230
|
+
label: key
|
|
231
|
+
})
|
|
232
|
+
key = mapperData[key]
|
|
233
233
|
} else {
|
|
234
|
-
key = title[l]
|
|
234
|
+
key = title[l]
|
|
235
235
|
}
|
|
236
|
-
let val = content[l]
|
|
236
|
+
let val = content[l]
|
|
237
237
|
|
|
238
238
|
if (!tempJson[key]) {
|
|
239
|
-
tempJson[key] = val
|
|
239
|
+
tempJson[key] = val
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
|
-
jsons.push(tempJson)
|
|
242
|
+
jsons.push(tempJson)
|
|
243
243
|
}
|
|
244
244
|
// window.console.log("jsons:" + JSON.stringify(jsons))
|
|
245
|
-
window.console.log(
|
|
245
|
+
window.console.log('jsons:', jsons)
|
|
246
246
|
|
|
247
|
-
datas.push(jsons)
|
|
247
|
+
datas.push(jsons)
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
//处理数据
|
|
251
251
|
|
|
252
252
|
// this.excelDataAll = datas
|
|
253
253
|
|
|
254
|
-
let datasAll = [].concat(...datas)
|
|
255
|
-
console.log(
|
|
256
|
-
let reg = /.*[\u4e00-\u9fa5]
|
|
254
|
+
let datasAll = [].concat(...datas)
|
|
255
|
+
console.log('datasAll', datasAll)
|
|
256
|
+
let reg = /.*[\u4e00-\u9fa5]+.*$/
|
|
257
257
|
|
|
258
258
|
datasAll.forEach((item) => {
|
|
259
259
|
for (const key in item) {
|
|
260
260
|
if (
|
|
261
|
-
key ===
|
|
262
|
-
key ===
|
|
263
|
-
key ===
|
|
264
|
-
key ===
|
|
261
|
+
key === 'recAmount' ||
|
|
262
|
+
key === 'payAmount' ||
|
|
263
|
+
key === 'amount' ||
|
|
264
|
+
key === 'balance'
|
|
265
265
|
) {
|
|
266
|
-
item[key] && (item[key] = Number(item[key].replace(/,/g,
|
|
266
|
+
item[key] && (item[key] = Number(item[key].replace(/,/g, '')))
|
|
267
267
|
}
|
|
268
|
-
if (reg.test(key) || key ===
|
|
269
|
-
delete item[key]
|
|
268
|
+
if (reg.test(key) || key === 'undefined' || key === '') {
|
|
269
|
+
delete item[key]
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
|
-
})
|
|
272
|
+
})
|
|
273
273
|
|
|
274
274
|
datasAll = datasAll.filter((item) => {
|
|
275
|
-
let num = Object.keys(item).length
|
|
276
|
-
let flag = num
|
|
275
|
+
let num = Object.keys(item).length
|
|
276
|
+
let flag = num
|
|
277
277
|
for (var key in item) {
|
|
278
278
|
if (!item[key]) {
|
|
279
|
-
flag
|
|
279
|
+
flag--
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
|
-
return flag > 0
|
|
283
|
-
})
|
|
284
|
-
console.log(
|
|
285
|
-
let obj = {}
|
|
282
|
+
return flag > 0
|
|
283
|
+
})
|
|
284
|
+
console.log('datas', datasAll)
|
|
285
|
+
let obj = {}
|
|
286
286
|
for (let i = 0; i < this.columnsList.length; i++) {
|
|
287
287
|
if (
|
|
288
288
|
!obj[this.columnsList[i].label] &&
|
|
289
289
|
!obj[this.columnsList[i].prop]
|
|
290
290
|
) {
|
|
291
|
-
this.columnsListNew.push(this.columnsList[i])
|
|
292
|
-
obj[this.columnsList[i].label] = true
|
|
293
|
-
obj[this.columnsList[i].prop] = true
|
|
291
|
+
this.columnsListNew.push(this.columnsList[i])
|
|
292
|
+
obj[this.columnsList[i].label] = true
|
|
293
|
+
obj[this.columnsList[i].prop] = true
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
296
|
// console.log("表头", this.columnsListNew);
|
|
297
|
-
this.generateData(datasAll, this.columnsListNew)
|
|
297
|
+
this.generateData(datasAll, this.columnsListNew)
|
|
298
298
|
|
|
299
|
-
resolve()
|
|
300
|
-
}
|
|
301
|
-
reader.readAsArrayBuffer(rawFile)
|
|
302
|
-
}
|
|
303
|
-
reader.readAsBinaryString(rawFile)
|
|
304
|
-
})
|
|
299
|
+
resolve()
|
|
300
|
+
}
|
|
301
|
+
reader.readAsArrayBuffer(rawFile)
|
|
302
|
+
}
|
|
303
|
+
reader.readAsBinaryString(rawFile)
|
|
304
|
+
})
|
|
305
305
|
},
|
|
306
306
|
getHeaderRow(sheet) {
|
|
307
|
-
console.log(sheet)
|
|
308
|
-
const headers = []
|
|
309
|
-
const range = XLSX.utils.decode_range(sheet[
|
|
310
|
-
let C
|
|
311
|
-
const R = range.s.r
|
|
307
|
+
console.log(sheet)
|
|
308
|
+
const headers = []
|
|
309
|
+
const range = XLSX.utils.decode_range(sheet['!ref'])
|
|
310
|
+
let C
|
|
311
|
+
const R = range.s.r
|
|
312
312
|
/* start in the first row */
|
|
313
313
|
for (C = range.s.c; C <= range.e.c; ++C) {
|
|
314
314
|
/* walk every column in the range */
|
|
315
|
-
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
|
|
315
|
+
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
|
|
316
316
|
/* find the cell in the first row */
|
|
317
|
-
let hdr =
|
|
318
|
-
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
|
|
319
|
-
headers.push(hdr)
|
|
317
|
+
let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
|
|
318
|
+
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
|
|
319
|
+
headers.push(hdr)
|
|
320
320
|
}
|
|
321
|
-
return headers
|
|
321
|
+
return headers
|
|
322
322
|
},
|
|
323
323
|
isExcel(file) {
|
|
324
|
-
return /\.(xlsx|xls|csv)$/.test(file.name)
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
324
|
+
return /\.(xlsx|xls|csv)$/.test(file.name)
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
328
|
</script>
|
|
329
|
-
|
|
330
|
-
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n20-common-lib",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.46",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"jsonwebtoken": "^8.5.1",
|
|
45
45
|
"normalize.css": "^8.0.1",
|
|
46
46
|
"numerify": "*",
|
|
47
|
-
"
|
|
47
|
+
"panzoom": "*",
|
|
48
|
+
"qrcode": "*",
|
|
48
49
|
"resize-detector": "*",
|
|
49
50
|
"vuedraggable": "*"
|
|
50
51
|
},
|