handleBeforeUpload(file, fileList) {// fileList 只包含了當次上傳的文件列表,不包含已上傳的文件列表// 所以長度要加上已上傳的文件列表的長度const isLimit = this.fileList.length + fileList.length > this.limit;const indexOfFile = fileList.findIndex(item => item.uid === file.uid) + this.fileList.length;if (isLimit && indexOfFile === this.limit) {file.status = 'beforeUploadReject';file.statusText = '最多上傳' + this.limit + '張圖片';return false;}if (isLimit && indexOfFile > this.limit) {file.status = 'beforeUploadReject';return false;}const isJpgOrPng = file.type.startsWith('image/');if (!isJpgOrPng) {file.status = 'beforeUploadReject';file.statusText = '請上傳圖片';return false;}const isLtmb = file.size / 1024 / 1024 < this.isLtMB;if (!isLtmb) {file.status = 'beforeUploadReject';file.statusText = `圖片不能大于${this.isLtMB}mb`;return false;}let self = this;if (this.limitHeight && this.limitWidth) {return new Promise((resolve, reject) => {// 圖片寬高比例限制let w = 0,h = 0;let reader = new FileReader();reader.readAsDataURL(file);reader.onload = () => {const image = new Image();image.src = reader.result;image.onload = () => {w = image.width;h = image.height;if (w > self.limitWidth || h > self.limitHeight) {self.$message.error('圖片尺寸超過限制,請重新上傳');return reject(false);} else {return resolve(true);}};};});}},
異步操作要用promise返回true或者false