【fix JUpload】解决上传文件无法回显,禁用状态删除按钮不消失

This commit is contained in:
danshihao
2023-03-10 17:12:25 +08:00
parent 11b47a604f
commit f73f667536
2 changed files with 69 additions and 41 deletions
@@ -54,7 +54,8 @@ export default {
pointer-events: auto !important; pointer-events: auto !important;
} }
.jero-form-container-disabled .ant-upload-list-item-actions .anticon-delete, /*.jero-form-container-disabled .ant-upload-list-item-actions .anticon-delete,*/
.jero-form-container-disabled .ant-upload-list-item .anticon-delete,
.jero-form-container-disabled .ant-upload-list-item .anticon-close{ .jero-form-container-disabled .ant-upload-list-item .anticon-close{
display: none; display: none;
} }
+67 -40
View File
@@ -47,9 +47,9 @@ import JImagePreviewModal from '@comp/jero/modal/JImagePreviewModal.vue'
const FILE_TYPE_ALL = 'all' const FILE_TYPE_ALL = 'all'
const FILE_TYPE_IMG = 'image' const FILE_TYPE_IMG = 'image'
const uidGenerator = () => { // const uidGenerator = () => {
return '-' + parseInt(Math.random() * 10000 + 1 + '', 10) // return '-' + parseInt(Math.random() * 10000 + 1 + '', 10)
} // }
const Base64 = require('js-base64').Base64 const Base64 = require('js-base64').Base64
@@ -142,15 +142,16 @@ export default {
immediate: true, immediate: true,
handler () { handler () {
const val = this.value const val = this.value
if (val instanceof Array) { this.initFileList(val)
if (this.returnUrl) { // if (val instanceof Array) {
this.initFileList(val.join(',')) // if (this.returnUrl) {
} else { // this.initFileList(val.join(','))
this.initFileListArr(val) // } else {
} // this.initFileListArr(val)
} else { // }
this.initFileList(val) // } else {
} // this.initFileList(val)
// }
} }
} }
}, },
@@ -178,34 +179,59 @@ export default {
// ---------------------------- end 图片左右换位置 ------------------------------------- // ---------------------------- end 图片左右换位置 -------------------------------------
}, },
methods: { methods: {
initFileListArr (val) { // 将url的参数拆分成对象
urlToParams (url) {
const commonUrl = window._CONFIG.staticDomainURL
// url截取参数的部分
const paramsStr = url.slice(url.indexOf('?') + 1)
const paramsObj = {
url,
id: url.slice(url.indexOf(commonUrl) + commonUrl.length + 1, url.indexOf('?'))
}
paramsStr.split('&').forEach(item => {
const arr = item.split('=')
paramsObj[arr[0]] = arr[1]
})
return paramsObj
},
initFileList (val) {
if (!val || val.length === 0) { if (!val || val.length === 0) {
this.fileList = [] this.fileList = []
return return
} }
for (let a = 0; a < val.length; a++) { // 所有文件url的数组
this.fileList.forEach((item) => { let arr = []
if (item.url === val[a]) { // 用于临时存储文件的数组,最终会被赋值到this.fileList
item.uid = uidGenerator() const fileList = []
item.response.status = 'done' if (val instanceof Array) {
} // url数组直接返回,如果是对象数组,就将每个对象的url取出
}) arr = this.returnUrl ? val : val.map(item => item.filePath)
} } else {
}, // 将字符串拆分数组(props声明value只能是Array或String)
initFileList (paths) { arr = val.split(',')
if (!paths || paths.length === 0) {
this.fileList = []
return
}
const arr = paths.split(',')
for (let a = 0; a < arr.length; a++) {
this.fileList.forEach((item) => {
if (item.url === arr[a]) {
item.uid = uidGenerator()
item.response.status = 'history'
}
})
} }
arr.forEach(url => {
if (url) {
const params = this.urlToParams(url)
fileList.push({
uid: params.id,
name: params.fullfilename,
status: 'done',
url,
// response用于下载和预览
response: {
success: true,
result: {
id: params.id,
fileName: params.fullfilename
},
status: 'history'
}
})
}
})
// 将处理好的数据回显
this.fileList = fileList
}, },
handlePathChange () { handlePathChange () {
const uploadFiles = this.fileList const uploadFiles = this.fileList
@@ -255,8 +281,9 @@ export default {
if (info.file.response.success) { if (info.file.response.success) {
fileList = fileList.map((file) => { fileList = fileList.map((file) => {
if (file.response) { if (file.response) {
const reUrl = `${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.response.result.fileName}` // const reUrl = `${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.response.result.fileName}`
file.url = getFileAccessHttpUrl(reUrl) // TODO getFileAccessHttpUrl方法会追加token,在之后拼参数
file.url = getFileAccessHttpUrl(file.response.result.id) + '&fullfilename=' + file.response.result.fileName
} }
return file return file
}) })
@@ -304,7 +331,7 @@ export default {
const fileType = file.type const fileType = file.type
// 截取文件后缀名 // 截取文件后缀名
const fileSuffix = file.name ? file.name.split('.')[file.name.split('.').length - 1] : '' const fileSuffix = file.name ? file.name.split('.')[file.name.split('.').length - 1] : ''
const canPreview = CAN_PREVIEW_FILE_TYPE.some(tt => fileType.indexOf(tt) !== -1) || CAN_PREVIEW_FILE_SUFFIX.some(tt => fileSuffix === tt) const canPreview = fileType ? CAN_PREVIEW_FILE_TYPE.some(tt => fileType.indexOf(tt) !== -1) : CAN_PREVIEW_FILE_SUFFIX.some(tt => fileSuffix === tt)
// 判断是否为可预览格式的文件 // 判断是否为可预览格式的文件
if (!canPreview) { if (!canPreview) {
this.$message.loading('该文件类型不支持预览,正在为您准备下载...').then(() => { this.$message.loading('该文件类型不支持预览,正在为您准备下载...').then(() => {
@@ -314,12 +341,12 @@ export default {
} }
const fileFullUrl = `${window._CONFIG.domianWebSocketURL}/sys/common/download/${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.name}` const fileFullUrl = `${window._CONFIG.domianWebSocketURL}/sys/common/download/${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.name}`
// 图片预览,使用自己添加的组件 // 图片预览,使用自己添加的组件
if (fileType.indexOf(FILE_TYPE_IMG) !== -1) { if (fileType && fileType.indexOf(FILE_TYPE_IMG) !== -1) {
this.$refs.imagePreviewModal.open(fileFullUrl) this.$refs.imagePreviewModal.open(fileFullUrl)
return return
} }
// pdf预览 // pdf预览
if (fileType.indexOf('pdf') !== -1) { if (fileType && fileType.indexOf('pdf') !== -1) {
const url = `/pdfjs/web/viewer.html?file=${encodeURIComponent(fileFullUrl)}` const url = `/pdfjs/web/viewer.html?file=${encodeURIComponent(fileFullUrl)}`
window.open(url) window.open(url)
return return