sh-view 1.7.5 → 1.7.6
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 +1 -1
- package/packages/components/global-components/{sh-layout → sh-split}/index.vue +1 -1
- package/packages/components/global-components/sh-upload/index.vue +182 -325
- package/packages/components/global-components/sh-upload/js/ajax.js +80 -0
- package/packages/components/global-components/sh-upload/js/mixin.js +257 -0
- package/packages/components/global-components/sh-vxe-form/js/methods.js +28 -41
- package/packages/components/global-components/sh-vxe-list/index.vue +25 -5
- package/packages/components/global-components/sh-vxe-query/index.vue +56 -32
- package/packages/components/global-components/sh-vxe-table/js/methods.js +81 -88
- package/packages/components/global-components/sh-vxe-toolbar/index.vue +3 -3
- package/packages/vxeTable/index.js +5 -6
- package/packages/components/global-components/sh-upload/components/u-img.vue +0 -63
- package/packages/components/global-components/sh-upload/components/u-list.vue +0 -100
|
@@ -7,10 +7,9 @@ const vxeEvents = {
|
|
|
7
7
|
},
|
|
8
8
|
// 单选框变化
|
|
9
9
|
onRadioChange(params) {
|
|
10
|
-
const that = this
|
|
11
10
|
var { row } = params
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
this.selectionRows = [row]
|
|
12
|
+
this.$emit('radio-change', this.selectionRows, params)
|
|
14
13
|
},
|
|
15
14
|
// 复选框变化
|
|
16
15
|
onSelectionChange(params) {
|
|
@@ -63,15 +62,14 @@ const vxeEvents = {
|
|
|
63
62
|
},
|
|
64
63
|
// 只对 edit-config 配置时有效,单元格编辑状态下被关闭时会触发该事件
|
|
65
64
|
async onEditClosed(params) {
|
|
66
|
-
const that = this
|
|
67
65
|
let { row, column } = params
|
|
68
66
|
let { property, model, rname, rprops } = column
|
|
69
67
|
if ((model.update || model.change) && rname) {
|
|
70
|
-
let { rvalue, rtext } =
|
|
71
|
-
|
|
68
|
+
let { rvalue, rtext } = this.$vUtils.formatRender(model.value, property, row, rname, rprops, this, true)
|
|
69
|
+
this.$vUtils.set(row, column.property, rvalue)
|
|
72
70
|
model.change = false
|
|
73
71
|
}
|
|
74
|
-
|
|
72
|
+
this.$emit('edit-closed', params)
|
|
75
73
|
},
|
|
76
74
|
// 只对 edit-config 配置时有效,单元格被激活编辑时会触发该事件
|
|
77
75
|
async onEditActived(params) {
|
|
@@ -137,10 +135,9 @@ const vxeMethods = {
|
|
|
137
135
|
// // vxe组件方法可通过 this.tableRef() 调用
|
|
138
136
|
// 表格全选
|
|
139
137
|
setSelectionAll() {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
that.selectionRows = that.tableRef().getCheckboxRecords()
|
|
138
|
+
this.isAllChecked = !this.isAllChecked
|
|
139
|
+
this.tableRef().setAllCheckboxRow(this.isAllChecked)
|
|
140
|
+
this.selectionRows = this.tableRef().getCheckboxRecords()
|
|
144
141
|
},
|
|
145
142
|
// 表格打印、导出统一过滤列
|
|
146
143
|
columnDefaultFilterMethod({ column, $columnIndex }) {
|
|
@@ -188,11 +185,11 @@ const vxeMethods = {
|
|
|
188
185
|
},
|
|
189
186
|
// 默认求底部绑定方法vxe
|
|
190
187
|
tableFooterMethod({ columns, data }) {
|
|
191
|
-
|
|
188
|
+
const { footerCalculate, tableFooterCompute } = this
|
|
192
189
|
let footerData = []
|
|
193
|
-
let footerCalculateList =
|
|
190
|
+
let footerCalculateList = footerCalculate.calculate || []
|
|
194
191
|
footerCalculateList.forEach(key => {
|
|
195
|
-
footerData.push(
|
|
192
|
+
footerData.push(tableFooterCompute(columns, data, key, footerCalculate[key]))
|
|
196
193
|
})
|
|
197
194
|
return footerData
|
|
198
195
|
},
|
|
@@ -230,8 +227,8 @@ const vxeMethods = {
|
|
|
230
227
|
})
|
|
231
228
|
},
|
|
232
229
|
tableFooterSpanMethod({ $rowIndex, column, $columnIndex, data }) {
|
|
233
|
-
|
|
234
|
-
let defaultColumns =
|
|
230
|
+
const { columnsConfigDefault, tableGlobalConfig } = this
|
|
231
|
+
let defaultColumns = columnsConfigDefault.filter(item => tableGlobalConfig[item.type])
|
|
235
232
|
let colspan = defaultColumns.length || 1
|
|
236
233
|
if (column.type === 'seq') {
|
|
237
234
|
return { rowspan: 1, colspan: colspan }
|
|
@@ -256,47 +253,46 @@ const shMethods = {
|
|
|
256
253
|
},
|
|
257
254
|
// 初始化生成新表头数据
|
|
258
255
|
initTableColumns(columns = []) {
|
|
259
|
-
let
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
that.tableColumnsFixed = that.$vUtils.clone(columnsArr, true)
|
|
256
|
+
let { columnsArr, columnsFlatArr, formItemsArr, rules } = this.getTransfarColumn(columns)
|
|
257
|
+
this.tableColumnsFlat = columnsFlatArr
|
|
258
|
+
this.tableFormItems = formItemsArr
|
|
259
|
+
this.initEditRules(rules)
|
|
260
|
+
if (!this.tableReverse) {
|
|
261
|
+
this.tableColumnsFixed = this.$vUtils.clone(columnsArr, true)
|
|
266
262
|
} else {
|
|
267
|
-
|
|
263
|
+
this.tableColumnsFixed = this.getReverseColumn(this.columns)
|
|
268
264
|
}
|
|
269
265
|
},
|
|
270
266
|
// 初始化验证规则
|
|
271
267
|
initEditRules(rules) {
|
|
272
|
-
const
|
|
273
|
-
if (rules &&
|
|
268
|
+
const { tableEditRules, $vUtils } = this
|
|
269
|
+
if (rules && $vUtils.isPlainObject(rules)) {
|
|
274
270
|
Object.keys(rules).forEach(key => {
|
|
275
|
-
if (
|
|
276
|
-
|
|
271
|
+
if (tableEditRules[key]) {
|
|
272
|
+
tableEditRules[key] = Array.from(new Set(tableEditRules[key].concat(rules[key])))
|
|
277
273
|
} else {
|
|
278
|
-
|
|
274
|
+
tableEditRules[key] = rules[key]
|
|
279
275
|
}
|
|
280
276
|
})
|
|
281
277
|
}
|
|
282
278
|
},
|
|
283
279
|
// 初始化表头配置默认值
|
|
284
280
|
initColsDefaultValue() {
|
|
285
|
-
const
|
|
281
|
+
const { tableColumnsFlat, dataSourse, $vUtils } = this
|
|
286
282
|
let colsDefaultValue = {}
|
|
287
|
-
|
|
283
|
+
$vUtils.eachTree(tableColumnsFlat, item => {
|
|
288
284
|
let renderObj = item.editRender || item.cellRender || {}
|
|
289
285
|
let noRenderArr = ['$vGlobalOption']
|
|
290
|
-
if (!noRenderArr.includes(renderObj.name) &&
|
|
291
|
-
|
|
286
|
+
if (!noRenderArr.includes(renderObj.name) && !$vUtils.isNone(renderObj.props?.defaultValue)) {
|
|
287
|
+
$vUtils.set(colsDefaultValue, item.field, renderObj.props?.defaultValue)
|
|
292
288
|
}
|
|
293
289
|
})
|
|
294
|
-
|
|
295
|
-
if (Array.isArray(
|
|
296
|
-
|
|
290
|
+
this.tableRowDefaultData = colsDefaultValue
|
|
291
|
+
if (Array.isArray(dataSourse) && Object.keys(colsDefaultValue).length > 0) {
|
|
292
|
+
dataSourse.forEach(row => {
|
|
297
293
|
Object.keys(colsDefaultValue).forEach(field => {
|
|
298
|
-
if (
|
|
299
|
-
|
|
294
|
+
if ($vUtils.isNone($vUtils.get(row, field))) {
|
|
295
|
+
$vUtils.set(row, field, $vUtils.get(colsDefaultValue, field))
|
|
300
296
|
}
|
|
301
297
|
})
|
|
302
298
|
})
|
|
@@ -304,36 +300,36 @@ const shMethods = {
|
|
|
304
300
|
},
|
|
305
301
|
// 反转表格-反转表头及数据
|
|
306
302
|
getReverseColumn(oriColumns) {
|
|
307
|
-
const
|
|
303
|
+
const { reverseConfig, disabled, columnObjDefault, dataSourse } = this
|
|
308
304
|
let columns = []
|
|
309
|
-
let columnsNum =
|
|
310
|
-
let keyPrefix =
|
|
311
|
-
let titPrefix =
|
|
312
|
-
let valueRenderObj =
|
|
305
|
+
let columnsNum = reverseConfig.num
|
|
306
|
+
let keyPrefix = reverseConfig.keyPrefix || 'reversePre'
|
|
307
|
+
let titPrefix = reverseConfig.titPrefix || ''
|
|
308
|
+
let valueRenderObj = disabled ? { cellRender: { name: '$vRowCell' } } : { editRender: { name: '$vRowCell' } }
|
|
313
309
|
if (columnsNum) {
|
|
314
310
|
for (let i = 1; i <= columnsNum; i++) {
|
|
315
311
|
columns.push(
|
|
316
|
-
Object.assign({ field: `${keyPrefix}title${i}`, title: `名称${i}` },
|
|
317
|
-
Object.assign({ field: `${keyPrefix}value${i}`, title: `数值${i}` },
|
|
312
|
+
Object.assign({ field: `${keyPrefix}title${i}`, title: `名称${i}` }, columnObjDefault),
|
|
313
|
+
Object.assign({ field: `${keyPrefix}value${i}`, title: `数值${i}` }, columnObjDefault, valueRenderObj)
|
|
318
314
|
)
|
|
319
315
|
}
|
|
320
316
|
} else {
|
|
321
|
-
columns.push(Object.assign({ field: `${keyPrefix}title`, title: '名称', fixed: 'left' },
|
|
322
|
-
|
|
323
|
-
columns.push(Object.assign({ field: `${keyPrefix}value${index + 1}`, title: `${titPrefix}${index + 1}` },
|
|
317
|
+
columns.push(Object.assign({ field: `${keyPrefix}title`, title: '名称', fixed: 'left' }, columnObjDefault))
|
|
318
|
+
dataSourse.forEach((item, index) => {
|
|
319
|
+
columns.push(Object.assign({ field: `${keyPrefix}value${index + 1}`, title: `${titPrefix}${index + 1}` }, columnObjDefault, valueRenderObj))
|
|
324
320
|
})
|
|
325
321
|
}
|
|
326
322
|
return columns
|
|
327
323
|
},
|
|
328
324
|
// 反转表格-反转配置生成数据
|
|
329
325
|
getReverseData(oriData = []) {
|
|
330
|
-
const
|
|
326
|
+
const { reverseConfig, columns, $vUtils } = this
|
|
331
327
|
let data = []
|
|
332
|
-
let columnsNum =
|
|
333
|
-
let keyPrefix =
|
|
328
|
+
let columnsNum = reverseConfig.num
|
|
329
|
+
let keyPrefix = reverseConfig.keyPrefix || 'reversePre'
|
|
334
330
|
if (columnsNum) {
|
|
335
331
|
// 将表头平均分组
|
|
336
|
-
let chunkColumns =
|
|
332
|
+
let chunkColumns = $vUtils.chunk(columns, columnsNum)
|
|
337
333
|
chunkColumns.forEach((colGroup, colGroupIndex) => {
|
|
338
334
|
let item = {}
|
|
339
335
|
colGroup.forEach((column, columnIndex) => {
|
|
@@ -345,7 +341,7 @@ const shMethods = {
|
|
|
345
341
|
data.push(item)
|
|
346
342
|
})
|
|
347
343
|
} else {
|
|
348
|
-
data =
|
|
344
|
+
data = columns.map(column => {
|
|
349
345
|
const item = { [`${keyPrefix}title`]: column.title }
|
|
350
346
|
oriData.forEach((row, index) => {
|
|
351
347
|
item[`${keyPrefix}value${index + 1}`] = row[column.field] || ''
|
|
@@ -359,12 +355,12 @@ const shMethods = {
|
|
|
359
355
|
},
|
|
360
356
|
// 转换生成新表头数据
|
|
361
357
|
getTransfarColumn(oriArr = []) {
|
|
362
|
-
|
|
358
|
+
const { columnObjDefault, columnObj, tableGlobalConfig, isTrue, getDefaultMessage, turnColumnItemFilters, $vUtils } = this
|
|
363
359
|
let columnsFlatArr = []
|
|
364
360
|
let formItemsArr = []
|
|
365
361
|
let rules = {}
|
|
366
|
-
let columnsArr =
|
|
367
|
-
let tar = Object.assign({},
|
|
362
|
+
let columnsArr = $vUtils.mapTree(oriArr, ori => {
|
|
363
|
+
let tar = Object.assign({}, columnObjDefault, columnObj, ori)
|
|
368
364
|
if (ori.children && ori.children.length > 0) {
|
|
369
365
|
tar.sortable = false
|
|
370
366
|
tar.filter = false
|
|
@@ -374,17 +370,17 @@ const shMethods = {
|
|
|
374
370
|
props: Object.assign({}, ori.renderProps || {})
|
|
375
371
|
}
|
|
376
372
|
// 首先提取校验配置
|
|
377
|
-
if (
|
|
373
|
+
if (isTrue(tar['renderRequire'])) {
|
|
378
374
|
// 若配置了校验参数则走校验参数,没配置则给默认校验条件
|
|
379
375
|
if (tar['requireProps'] && Array.isArray(tar['requireProps']) && tar['requireProps'].length > 0) {
|
|
380
376
|
rules[tar['field']] = tar['requireProps']
|
|
381
377
|
} else {
|
|
382
378
|
let dataType = 'string'
|
|
383
379
|
let arrayType = ['$vCheckgroup', '$vUpload', '$vTable']
|
|
384
|
-
if (arrayType.includes(ori['renderName']) || ((ori['renderName'] === '$vSelect' || ori['renderName'] === '$vTree') &&
|
|
380
|
+
if (arrayType.includes(ori['renderName']) || ((ori['renderName'] === '$vSelect' || ori['renderName'] === '$vTree') && isTrue(renderConfig.props.multiple))) {
|
|
385
381
|
dataType = 'array'
|
|
386
382
|
}
|
|
387
|
-
rules[tar['field']] = [{ required: true, message:
|
|
383
|
+
rules[tar['field']] = [{ required: true, message: getDefaultMessage(tar['renderName'], tar['title']), type: dataType }]
|
|
388
384
|
}
|
|
389
385
|
}
|
|
390
386
|
// 个性化设置
|
|
@@ -413,7 +409,7 @@ const shMethods = {
|
|
|
413
409
|
tar.editRender = Object.assign({}, renderConfig, tar.editRender || {})
|
|
414
410
|
}
|
|
415
411
|
// 初始化表单查询配置
|
|
416
|
-
if (
|
|
412
|
+
if (tableGlobalConfig.search) {
|
|
417
413
|
let editFixedNames = ['$vImg', '$vHref', '$vUpload']
|
|
418
414
|
let formItem = Object.assign({}, tar)
|
|
419
415
|
formItem.itemRender = Object.assign({}, renderConfig, tar.editRender || {}, tar.itemRender || {})
|
|
@@ -427,7 +423,7 @@ const shMethods = {
|
|
|
427
423
|
}
|
|
428
424
|
// 初始化过滤条件
|
|
429
425
|
if (tar.filter === true || Number(tar.filter) === 1) {
|
|
430
|
-
|
|
426
|
+
turnColumnItemFilters(tar, renderConfig.props)
|
|
431
427
|
}
|
|
432
428
|
}
|
|
433
429
|
columnsFlatArr.push(tar)
|
|
@@ -547,28 +543,24 @@ const shMethods = {
|
|
|
547
543
|
}
|
|
548
544
|
},
|
|
549
545
|
// 自定义操作列点击事件
|
|
550
|
-
handleGoptionClick(btnObj, dataObj) {
|
|
551
|
-
const that = this
|
|
546
|
+
async handleGoptionClick(btnObj, dataObj) {
|
|
552
547
|
if (btnObj.code === 'delete' || btnObj.idConfirm) {
|
|
553
|
-
|
|
548
|
+
await this.msgconfirm({
|
|
554
549
|
content: btnObj.ConfirmContent || `确定${btnObj.content}吗?`
|
|
555
|
-
}).then(() => {
|
|
556
|
-
that.$emit('globaloption', btnObj, dataObj)
|
|
557
550
|
})
|
|
558
551
|
} else {
|
|
559
|
-
that.$emit('globaloption', btnObj, dataObj)
|
|
560
552
|
}
|
|
553
|
+
this.$emit('globaloption', btnObj, dataObj)
|
|
561
554
|
},
|
|
562
555
|
// 新增行按钮
|
|
563
556
|
async handleTableAddRow(rows, index = -1, isTool = false) {
|
|
564
|
-
const
|
|
565
|
-
let
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
addRows = await that.onToolbarBtnAddBefore(addRows)
|
|
557
|
+
const { tableRowDefaultData, onToolbarBtnAddBefore, rowConfig, $vUtils, tableRef } = this
|
|
558
|
+
let addRows = rows ? $vUtils.clone(rows, true) : tableRowDefaultData
|
|
559
|
+
if (!isTool && typeof onToolbarBtnAddBefore === 'function') {
|
|
560
|
+
addRows = await onToolbarBtnAddBefore(addRows)
|
|
569
561
|
}
|
|
570
562
|
// 删除主键,以防排序冲突
|
|
571
|
-
let mainKeyField =
|
|
563
|
+
let mainKeyField = rowConfig?.keyField || '_XID'
|
|
572
564
|
if (Array.isArray(addRows)) {
|
|
573
565
|
addRows.forEach(item => {
|
|
574
566
|
delete item[mainKeyField]
|
|
@@ -576,30 +568,31 @@ const shMethods = {
|
|
|
576
568
|
} else {
|
|
577
569
|
delete addRows[mainKeyField]
|
|
578
570
|
}
|
|
579
|
-
let { row: newRow } = await
|
|
580
|
-
await
|
|
581
|
-
if (!isTool)
|
|
571
|
+
let { row: newRow } = await tableRef().insertAt(addRows, index)
|
|
572
|
+
await tableRef().setActiveRow(newRow)
|
|
573
|
+
if (!isTool) this.$emit('toolbaroption', 'add', newRow, tableRef())
|
|
582
574
|
},
|
|
583
575
|
// 删除行按钮
|
|
584
576
|
async handleTableDeleteRow(rows, isTool = false) {
|
|
585
|
-
const that = this
|
|
586
577
|
let deleteRows = rows
|
|
587
578
|
if (isTool) {
|
|
588
|
-
let selectedRows =
|
|
589
|
-
if (selectedRows.length < 1)
|
|
579
|
+
let selectedRows = this.getSelectionData()
|
|
580
|
+
if (selectedRows.length < 1) {
|
|
581
|
+
this.msgwarning('请选择要删除的行!')
|
|
582
|
+
return
|
|
583
|
+
}
|
|
590
584
|
deleteRows = selectedRows
|
|
591
|
-
await
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
let result = await that.onToolbarBtnDeleteBefore(deleteRows)
|
|
585
|
+
await this.msgconfirm({ content: `确定删除吗?` })
|
|
586
|
+
} else if (typeof this.onToolbarBtnDeleteBefore === 'function') {
|
|
587
|
+
let result = await this.onToolbarBtnDeleteBefore(deleteRows)
|
|
595
588
|
if (!result) return
|
|
596
589
|
}
|
|
597
|
-
await
|
|
598
|
-
if (
|
|
599
|
-
let keyField =
|
|
600
|
-
|
|
590
|
+
await this.tableRef().remove(deleteRows)
|
|
591
|
+
if (this.selectionRows && this.selectionRows.length > 0) {
|
|
592
|
+
let keyField = this.rowConfig.keyField || this.$vTableSetup.table.rowConfig.keyField
|
|
593
|
+
this.selectionRows = this.selectionRows.filter(sr => !deleteRows.find(dr => dr[keyField] === sr[keyField]))
|
|
601
594
|
}
|
|
602
|
-
if (!isTool)
|
|
595
|
+
if (!isTool) this.$emit('toolbaroption', 'delete', deleteRows, this.tableRef())
|
|
603
596
|
}
|
|
604
597
|
}
|
|
605
598
|
|
|
@@ -104,12 +104,12 @@ export default {
|
|
|
104
104
|
},
|
|
105
105
|
rightBtns() {
|
|
106
106
|
let rBtns = []
|
|
107
|
-
let { rightConfig } = this
|
|
107
|
+
let { rightConfig, relation, leftActive } = this
|
|
108
108
|
if (rightConfig && Array.isArray(rightConfig)) {
|
|
109
109
|
rBtns = rightConfig
|
|
110
110
|
}
|
|
111
|
-
if (
|
|
112
|
-
rBtns = rBtns.filter(item => item.code && item.code.split(',').includes(
|
|
111
|
+
if (relation) {
|
|
112
|
+
rBtns = rBtns.filter(item => item.code && item.code.split(',').includes(leftActive))
|
|
113
113
|
}
|
|
114
114
|
return rBtns
|
|
115
115
|
},
|
|
@@ -96,13 +96,12 @@ let vxeOptions = {
|
|
|
96
96
|
return $$seq
|
|
97
97
|
} else if (tablePage) {
|
|
98
98
|
const { pagerConfig } = grid.props
|
|
99
|
-
const pageStart = seqConfig?.startIndex || (pagerConfig.pageSize
|
|
100
|
-
return
|
|
101
|
-
} else if (
|
|
102
|
-
return $seq
|
|
103
|
-
} else {
|
|
104
|
-
return seq === -1 ? $rowIndex + (seqConfig.startIndex || 1) : seq
|
|
99
|
+
const pageStart = seqConfig?.startIndex || (+pagerConfig.pageSize || 50) * ((+pagerConfig.currentPage || 1) - 1)
|
|
100
|
+
return treeConfig && $seq ? Number(pageStart) + Number($seq) + '.' + seq : Number(pageStart) + Number(seq)
|
|
101
|
+
} else if (treeConfig) {
|
|
102
|
+
return $seq ? $seq + '.' + seq : seq
|
|
105
103
|
}
|
|
104
|
+
return seq === -1 ? $rowIndex + (seqConfig.startIndex || 1) : seq
|
|
106
105
|
}
|
|
107
106
|
},
|
|
108
107
|
resizeConfig: {
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<img :src="imgsrc" />
|
|
3
|
-
</template>
|
|
4
|
-
|
|
5
|
-
<script>
|
|
6
|
-
export default {
|
|
7
|
-
name: 'UImg',
|
|
8
|
-
props: {
|
|
9
|
-
src: {
|
|
10
|
-
type: String
|
|
11
|
-
},
|
|
12
|
-
file: {
|
|
13
|
-
type: Object
|
|
14
|
-
},
|
|
15
|
-
baseUrl: {
|
|
16
|
-
type: String
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
data() {
|
|
20
|
-
return {
|
|
21
|
-
imgsrc: ''
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
watch: {
|
|
25
|
-
file: {
|
|
26
|
-
handler: function (val, oldVal) {
|
|
27
|
-
this.initMounted()
|
|
28
|
-
},
|
|
29
|
-
immediate: false,
|
|
30
|
-
deep: true
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
mounted() {
|
|
34
|
-
this.initMounted()
|
|
35
|
-
},
|
|
36
|
-
methods: {
|
|
37
|
-
// 初始化渲染
|
|
38
|
-
async initMounted() {
|
|
39
|
-
if (!this.src) {
|
|
40
|
-
this.imgsrc = this.file ? await this.getImagePreviewData(this.file) : ''
|
|
41
|
-
} else {
|
|
42
|
-
this.imgsrc = this.src.startsWith('http') ? this.src : this.baseUrl || this.$config.baseUrl.pro + this.src
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
// 生成预览图片列表
|
|
46
|
-
async getImagePreviewData(file) {
|
|
47
|
-
let fileReader = new FileReader()
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
try {
|
|
50
|
-
fileReader.readAsDataURL(file)
|
|
51
|
-
fileReader.onload = function (e) {
|
|
52
|
-
resolve(e.target.result)
|
|
53
|
-
}
|
|
54
|
-
} catch (e) {
|
|
55
|
-
reject(e)
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
</script>
|
|
62
|
-
|
|
63
|
-
<style scoped></style>
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<template v-if="uploadList.length > 0">
|
|
3
|
-
<div v-for="(item, index) in uploadList" :key="index" class="sh-upload-list" :style="upStyles" :class="upClass">
|
|
4
|
-
<div v-if="listType === 'card'" class="list-file-card">
|
|
5
|
-
<u-img v-if="type === 'img'" :src="item.url" :file="item"></u-img>
|
|
6
|
-
<div v-else class="file-title">{{ item.name }}</div>
|
|
7
|
-
<div class="list-file-cover">
|
|
8
|
-
<sh-icon v-if="preview" type="ios-eye-outline" title="查看文件" size="18" @click="handleFilePreviewView(item)" />
|
|
9
|
-
<sh-icon v-if="!disabled" type="ios-trash-outline" title="删除文件" size="18" @click="handleFileRemove(item)" />
|
|
10
|
-
</div>
|
|
11
|
-
</div>
|
|
12
|
-
<div v-else class="list-file-item">
|
|
13
|
-
<div class="file-title">{{ item.name }}</div>
|
|
14
|
-
<div class="file-action">
|
|
15
|
-
<span v-if="preview" class="file-action-item"><sh-icon type="ios-eye-outline" title="查看文件" size="18" @click="handleFilePreviewView(item)" /></span>
|
|
16
|
-
<span v-if="!disabled" class="file-action-item"><sh-icon type="ios-trash-outline" title="删除文件" size="18" @click="handleFileRemove(item)" /></span>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
</template>
|
|
21
|
-
<sh-modal v-if="previewModal" v-model="previewModal" title="预览查看" height="100%" readonly @close="handleFilePreviewCancel">
|
|
22
|
-
<template v-if="type === 'file'">
|
|
23
|
-
<sh-preview :url="previewFile.url"></sh-preview>
|
|
24
|
-
</template>
|
|
25
|
-
<template v-else-if="isFormData && type === 'img'">
|
|
26
|
-
<u-img :src="previewFile && previewFile.url" :file="previewFile" style="max-width: 100%; margin: auto; display: block"></u-img>
|
|
27
|
-
</template>
|
|
28
|
-
</sh-modal>
|
|
29
|
-
</template>
|
|
30
|
-
|
|
31
|
-
<script>
|
|
32
|
-
import UImg from './u-img.vue'
|
|
33
|
-
export default {
|
|
34
|
-
name: 'UList',
|
|
35
|
-
components: {
|
|
36
|
-
UImg
|
|
37
|
-
},
|
|
38
|
-
props: {
|
|
39
|
-
uploadList: {
|
|
40
|
-
type: Array,
|
|
41
|
-
default() {
|
|
42
|
-
return []
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
type: {
|
|
46
|
-
type: String,
|
|
47
|
-
default: 'img' // file 上传图片还是文件
|
|
48
|
-
},
|
|
49
|
-
listType: {
|
|
50
|
-
type: String,
|
|
51
|
-
default: 'list' // list 附件列表展示类型
|
|
52
|
-
},
|
|
53
|
-
isFormData: Boolean,
|
|
54
|
-
disabled: Boolean,
|
|
55
|
-
preview: Boolean,
|
|
56
|
-
upStyles: {
|
|
57
|
-
type: Object,
|
|
58
|
-
default() {
|
|
59
|
-
return {}
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
upClass: {
|
|
63
|
-
type: [Array, Object],
|
|
64
|
-
default() {
|
|
65
|
-
return {}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
emits: ['delete'],
|
|
70
|
-
data() {
|
|
71
|
-
return {
|
|
72
|
-
previewFile: null,
|
|
73
|
-
previewModal: false
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
methods: {
|
|
77
|
-
// 文件预览
|
|
78
|
-
handleFilePreviewView(obj) {
|
|
79
|
-
if (this.isFormData || this.type === 'file') {
|
|
80
|
-
this.previewFile = obj
|
|
81
|
-
this.previewModal = true
|
|
82
|
-
} else {
|
|
83
|
-
this.$ImagePreview.show({
|
|
84
|
-
previewList: [obj.url]
|
|
85
|
-
})
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
// 文件预览取消
|
|
89
|
-
handleFilePreviewCancel() {
|
|
90
|
-
this.previewModal = false
|
|
91
|
-
},
|
|
92
|
-
// 文件删除
|
|
93
|
-
handleFileRemove(data) {
|
|
94
|
-
this.$emit('delete', data)
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
</script>
|
|
99
|
-
|
|
100
|
-
<style scoped lang="scss"></style>
|