diff --git a/src/settings.js b/src/settings.js index c573021..11afd79 100644 --- a/src/settings.js +++ b/src/settings.js @@ -12,5 +12,6 @@ module.exports = { * @type {boolean} true | false * @description Whether show the logo in sidebar */ - sidebarLogo: false + sidebarLogo: false, + uploadSize: 1024 * 1024 * 20, } diff --git a/src/utils/formBuilder.js b/src/utils/formBuilder.js index c6cbd85..af72d9d 100644 --- a/src/utils/formBuilder.js +++ b/src/utils/formBuilder.js @@ -2,9 +2,10 @@ import formBuilderMap from "./formBuilderMap"; import { CreateElement, VNode } from "vue"; import moment from "moment"; import { getToken } from "@/utils/auth"; -import { deepCopy } from "@/utils/index"; -import axios from 'axios' -import { flowList } from "@/api/flow" +import {deepCopy, formatFileSize, formatTime} from "@/utils/index"; +import { uploadSize } from "@/settings"; +import axios from 'axios'; +import { flowList } from "@/api/flow"; /** * @param {String} device 'desktop' or 'mobile' * @param {Object} info field参数 @@ -258,18 +259,20 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab 'progress-text': "{percent}%", 'more-config': { maxCount: 1, layout: 'horizontal' }, 'show-button-text': false, - 'limit-size': 20, + 'limit-size': uploadSize / 1024 / 1024, // vxeupload 单位Mb 'limit-count': info.multiple ? 20 : 1, multiple: !!info.multiple, readonly: pReadable, 'upload-method': ({ file }) => { const formData = new FormData() formData.append('file', file) + window.$_uploading = true return axios.post(process.env.VUE_APP_UPLOAD_API, formData, { headers: { Authorization: `Bearer ${getToken()}`, } }).then((response) => { + window.$_uploading = false if (response.status === 200 && !response.data.code) { if (!(row[info.name] instanceof Array)) { row[info.name] = [] @@ -282,6 +285,8 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab } else { this.$message.error("上传失败") } + }).catch(err => { + window.$_uploading = false }) } } @@ -299,17 +304,24 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab "application/msword,image/jpeg,application/pdf,image/png,application/vnd.ms-powerpoint,text/plain,application/x-zip-compressed,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document", multiple: !!info.multiple, limit: info.multiple ? 20 : 1, - fileList: this.form[info.name], + fileList: this.form[info.name].map(i => { + if (i.hasOwnProperty('original_name')) { + i.name = i.original_name + } + return i + }), beforeUpload: (file) => { - if (file.size / 1024 / 1024 > 20) { + if (file.size > uploadSize) { this.$message({ type: "warning", - message: "上传图片大小超过20Mb!", + message: `上传图片大小超过${formatFileSize(uploadSize)}!`, }); return false; } + window.$_uploading = true }, onSuccess: (response, file, fileList) => { + window.$_uploading = false fileList.forEach((file) => { if (file.response?.data && !file.response?.code) { file.response = file.response.data; @@ -321,6 +333,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab this.form[info.name] = fileList }, onError: (err, file, fileList) => { + window.$_uploading = false this.form[info.name] = fileList this.$message({ type: "warning", @@ -357,7 +370,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab } } }, - file.name + file.original_name || file.name ), ]), h("i", { @@ -391,7 +404,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab class: "el-upload__tip", slot: "tip", }, - "文件不超过20Mb" + `文件不超过${formatFileSize(uploadSize)}` ), ] ); @@ -795,10 +808,11 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab { props: { value: row[info.name], + 'name-field': 'original_name', 'progress-text': "{percent}%", 'more-config': { maxCount: 1, layout: 'horizontal' }, 'show-button-text': false, - 'limit-size': 20, + 'limit-size': uploadSize / 1024 / 1024, //vxe upload单位为Mb 'limit-count': info.multiple ? 20 : 1, readonly: true } @@ -816,7 +830,12 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab accept: "application/msword,image/jpeg,application/pdf,image/png,application/vnd.ms-powerpoint,text/plain,application/x-zip-compressed,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document", multiple: true, - fileList: (this.form[info.name] instanceof Array) ? this.form[info.name] : [], + fileList: (this.form[info.name] instanceof Array) ? this.form[info.name].map(i => { + if (i.hasOwnProperty('original_name')) { + i.name = i.original_name + } + return i + }) : [], }, scopedSlots: { file: (scope) => { @@ -1086,17 +1105,29 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab accept: "application/msword,image/jpeg,application/pdf,image/png,application/vnd.ms-powerpoint,text/plain,application/x-zip-compressed,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document", multiple: !!info.multiple, - fileList: row ? row[info.name] : this.form[info.name], + fileList: row ? row[info.name].map(i => { + if (i.hasOwnProperty('original_name')) { + i.name = i.original_name + } + return i + }) : this.form[info.name].map(i => { + if (i.hasOwnProperty('original_name')) { + i.name = i.original_name + } + return i + }), beforeUpload: (file) => { - if (file.size / 1024 / 1024 > 20) { + if (file.size > uploadSize) { this.$message({ type: "warning", - message: "上传图片大小超过20Mb!", + message: `上传图片大小超过${formatFileSize(uploadSize)}!`, }); return false; } + window.$_uploading = true }, onSuccess: (response, file, fileList) => { + window.$_uploading = false fileList.forEach((file) => { if (file.response?.data && !file.response?.code) { file.response = file.response.data; @@ -1108,6 +1139,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab row ? row[info.name] = fileList : this.form[info.name] = fileList; }, onError: (err, file, fileList) => { + window.$_uploading = false row ? row[info.name] = fileList : this.form[info.name] = fileList; this.$message({ type: "warning", @@ -1183,7 +1215,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab class: "el-upload__tip", slot: "tip", }, - "文件不超过20Mb" + `文件不超过${formatFileSize(uploadSize)}` ), ] ) @@ -1397,7 +1429,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab } } }, - file.name + file.original_name || file.name ), ])) ); diff --git a/src/utils/index.js b/src/utils/index.js index 3c84de8..d5563fa 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -203,3 +203,16 @@ export function parseMoney(money, precision = 2) { export function generateRandomString() { return Math.random().toString(36).substring(2, 34)+new Date().getTime(); } + +export function formatFileSize(size) { + if (size < 1024 * 1024) { + const temp = size / 1024; + return temp.toFixed(2) + "KB"; + } else if (size < 1024 * 1024 * 1024) { + const temp = size / (1024 * 1024); + return temp.toFixed(2) + "MB"; + } else { + const temp = size / (1024 * 1024 * 1024); + return temp.toFixed(2) + "GB"; + } +} diff --git a/src/views/attendance/index.vue b/src/views/attendance/index.vue index dd99cda..8575fa3 100644 --- a/src/views/attendance/index.vue +++ b/src/views/attendance/index.vue @@ -45,8 +45,8 @@ :fullscreen="$store.getters.device === 'mobile'" >
打卡照片
- -

照片大小不能超过20Mb

+ +

照片大小不能超过{{ formatFileSize(uploadSize) }}

描述
@@ -63,19 +63,20 @@