| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-button v-else @click="handleClick" |
| | | >éæ©{{ img ? 'å¾ç' : 'æä»¶' }}</el-button |
| | | > |
| | | <el-button v-else @click="handleClick">éæ©{{ img ? "å¾ç" : "æä»¶" }}</el-button> |
| | | |
| | | <el-button |
| | | v-if="!autoUpload && !img" |
| | |
| | | </div> |
| | | </template> |
| | | <script> |
| | | let OSS = require('ali-oss'); |
| | | let OSS = require("ali-oss"); |
| | | export default { |
| | | components: {}, |
| | | props: { |
| | |
| | | //æ¯å¦æ¾ç¤ºé»è®¤ä»ç» |
| | | //æ¯å¦å¤é |
| | | type: Boolean, |
| | | default: false |
| | | default: false, |
| | | }, |
| | | fileInfo: { |
| | | //ç¨äºæ¥æ¶ä¸ä¼ çæä»¶ï¼ä¹å¯ä»¥å 以é»è®¤å¼ï¼æ¾ç¤ºå·²ä¸ä¼ çæä»¶ï¼ç¨æ·ä¸ä¼ åä¼è¦çé»è®¤å¼ |
| | | type: Array, |
| | | default: () => { |
| | | return []; |
| | | } //æ ¼å¼[{name:'1.jpg',path:'127.0.01/1.jpg'}] |
| | | }, //æ ¼å¼[{name:'1.jpg',path:'127.0.01/1.jpg'}] |
| | | }, |
| | | downLoad: { |
| | | //æ¯å¦å¯ä»¥ç¹å»æä»¶ä¸è½½ |
| | | type: Boolean, |
| | | default: true |
| | | default: true, |
| | | }, |
| | | multiple: { |
| | | //æ¯å¦å¤é |
| | | type: Boolean, |
| | | default: false |
| | | default: false, |
| | | }, |
| | | maxFile: { |
| | | //æå¤å¯éæä»¶æ°éï¼å¿
é¡»multiple=trueï¼æä¼çæ |
| | | type: Number, |
| | | default: 5 |
| | | default: 5, |
| | | }, |
| | | maxSize: { |
| | | //æä»¶éå¶å¤§å°3M |
| | | type: Number, |
| | | default: 50 |
| | | default: 50, |
| | | }, |
| | | |
| | | autoUpload: { |
| | | //éæ©æä»¶åæ¯å¦èªå¨ä¸ä¼ |
| | | type: Boolean, |
| | | default: true |
| | | default: true, |
| | | }, |
| | | img: { |
| | | //å¾çç±»å img>excel>fileTypesä¸ç§æä»¶ç±»åä¼å
级 |
| | | type: Boolean, |
| | | default: false |
| | | default: false, |
| | | }, |
| | | excel: { |
| | | //excelæä»¶ |
| | | type: Boolean, |
| | | default: false |
| | | default: false, |
| | | }, |
| | | fileTypes: { |
| | | //æå®ä¸ä¼ æä»¶çç±»å |
| | | type: Array, |
| | | default: () => { |
| | | return []; |
| | | } |
| | | }, |
| | | }, |
| | | url: { |
| | | //ä¸ä¼ çurl |
| | | type: String, |
| | | default: '' |
| | | default: "", |
| | | }, |
| | | uploadBefore: { |
| | | //è¿åfalseä¼ä¸æ¢æ§è¡ |
| | |
| | | type: Function, |
| | | default: (files) => { |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | uploadAfter: { |
| | | //è¿åfalseä¼ä¸æ¢æ§è¡ |
| | |
| | | type: Function, |
| | | default: (result, files) => { |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | onChange: { |
| | | //éæ©æä»¶æ¶ //è¿åfalseä¼ä¸æ¢æ§è¡ |
| | | type: Function, |
| | | default: (files) => { |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | // clear: { |
| | | // //ä¸ä¼ 宿忝妿¸
空æä»¶å表 |
| | |
| | | fileList: { |
| | | //æ¯å¦æ¾ç¤ºéæ©çæä»¶å表 |
| | | type: Boolean, |
| | | default: true |
| | | default: true, |
| | | }, |
| | | fileClick: { |
| | | //ç¹å»æä»¶äºä»¶ |
| | | type: Function, |
| | | default: (index, file, files) => { |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | removeBefore: { |
| | | //ç§»é¤æä»¶äºä»¶ |
| | | type: Function, |
| | | default: (index, file, files) => { |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | append: { |
| | | //æ¤å±æ§å·²åºå¼ï¼å¤æä»¶ä¸ä¼ ï¼é»è®¤è¿½å æä»¶ |
| | | type: Boolean, |
| | | default: false |
| | | default: false, |
| | | }, |
| | | compress: { |
| | | //å¼å¯å¾çå缩,å颿 ¹æ®éè¦åå®å |
| | | type: Boolean, |
| | | default: true |
| | | default: true, |
| | | }, |
| | | compressMinSize: { |
| | | //å缩çæå°æ¯ä¾ |
| | | type: Number, |
| | | default: 0.1 |
| | | } |
| | | default: 0.1, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | errorImg: 'this.src="' + require('@/assets/imgs/error-img.png') + '"', |
| | | errorImg: 'this.src="' + require("@/assets/imgs/error-img.png") + '"', |
| | | changed: false, //æå¨ä¸ä¼ æååç¦æ¢éå¤ä¸ä¼ ï¼å¿
须鿰鿩 |
| | | model: true, |
| | | files: [], |
| | | bigImg: '', |
| | | imgTypes: ['gif', 'jpg', 'jpeg', 'png', 'bmp', 'webp', 'jfif'], |
| | | bigImg: "", |
| | | imgTypes: ["gif", "jpg", "jpeg", "png", "bmp", "webp", "jfif"], |
| | | loadingStatus: false, |
| | | loadText: 'ä¸ä¼ æä»¶' |
| | | loadText: "ä¸ä¼ æä»¶", |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | handler(files) { |
| | | this.cloneFile(files); |
| | | }, |
| | | deep: true |
| | | } |
| | | deep: true, |
| | | }, |
| | | }, |
| | | methods: { |
| | | cloneFile(files) { |
| | | this.files = files.map((x) => { |
| | | return { |
| | | name: x.name || this.getFileName(x.path), |
| | | path: x.path |
| | | path: x.path, |
| | | }; |
| | | }); |
| | | }, |
| | | getFileName(path) { |
| | | if (!path) { |
| | | return 'æªå®ä¹æä»¶å'; |
| | | return "æªå®ä¹æä»¶å"; |
| | | } |
| | | let _index = path.lastIndexOf('/'); |
| | | let _index = path.lastIndexOf("/"); |
| | | return path.substring(_index + 1); |
| | | }, |
| | | previewImg(index) { |
| | |
| | | }, |
| | | getSelector() { |
| | | if (this.autoUpload) { |
| | | return 'auto-selector'; |
| | | return "auto-selector"; |
| | | } |
| | | return 'submit-selector'; |
| | | return "submit-selector"; |
| | | }, |
| | | getImgSrc(file, index) { |
| | | if (file.hasOwnProperty('path')) { |
| | | if (file.hasOwnProperty("path")) { |
| | | if (this.base.isUrl(file.path)) { |
| | | return file.path; |
| | | } |
| | | //2020.12.27å¢å base64å¾çæä½ |
| | | if (file.path.indexOf('/9j/') != -1) { |
| | | return 'data:image/jpeg;base64,' + file.path; |
| | | if (file.path.indexOf("/9j/") != -1) { |
| | | return "data:image/jpeg;base64," + file.path; |
| | | } |
| | | if (file.path.substr(0, 1) == '/') { |
| | | if (file.path.substr(0, 1) == "/") { |
| | | file.path = file.path.substr(1); |
| | | } |
| | | return this.http.ipAddress + file.path; |
| | |
| | | return; |
| | | } |
| | | if (!file.path) { |
| | | this.$message.error('请å
ä¸ä¼ æä»¶'); |
| | | this.$message.error("请å
ä¸ä¼ æä»¶"); |
| | | return; |
| | | } |
| | | this.base.dowloadFile( |
| | | file.path, |
| | | file.name, |
| | | { |
| | | Authorization: this.$store.getters.getToken() |
| | | Authorization: this.$store.getters.getToken(), |
| | | }, |
| | | this.http.ipAddress |
| | | ); |
| | | }, |
| | | getText() { |
| | | if (this.img) { |
| | | return 'åªè½ä¸ä¼ å¾ç,'; |
| | | return "åªè½ä¸ä¼ å¾ç,"; |
| | | } else if (this.excel) { |
| | | return 'åªè½ä¸ä¼ excelæä»¶,'; |
| | | return "åªè½ä¸ä¼ excelæä»¶,"; |
| | | } |
| | | }, |
| | | handleClick() { |
| | |
| | | return this.files; |
| | | }, |
| | | convertToFile(dataurl, filename) { |
| | | let arr = dataurl.split(','); |
| | | let arr = dataurl.split(","); |
| | | let mime = arr[0].match(/:(.*?);/)[1]; |
| | | let suffix = mime.split('/')[1]; |
| | | let suffix = mime.split("/")[1]; |
| | | let bstr = atob(arr[1]); |
| | | let n = bstr.length; |
| | | let u8arr = new Uint8Array(n); |
| | |
| | | // 第ä¸ä¸ªåæ°æ¯ è¦æ¾å°æä»¶ä¸çå
容ç MIME ç±»å |
| | | return new File([u8arr], `${filename}.${suffix}`, { |
| | | type: mime, |
| | | input: true |
| | | input: true, |
| | | }); |
| | | }, |
| | | async compressImg(file) { |
| | |
| | | let img = new Image(); |
| | | img.src = e.target.result; |
| | | let _this = this; |
| | | img.onload = function() { |
| | | img.onload = function () { |
| | | //é»è®¤ææ¯ä¾å缩 |
| | | let w = this.width; |
| | | let h = this.height; |
| | | let canvas = document.createElement('canvas'); |
| | | let ctx = canvas.getContext('2d'); |
| | | canvas.setAttribute('width', w); |
| | | canvas.setAttribute('height', h); |
| | | let canvas = document.createElement("canvas"); |
| | | let ctx = canvas.getContext("2d"); |
| | | canvas.setAttribute("width", w); |
| | | canvas.setAttribute("height", h); |
| | | ctx.drawImage(this, 0, 0, w, h); |
| | | let rate = 0.3; |
| | | if (fileSize > 2) { |
| | |
| | | rate = _this.compressMinSize; |
| | | } |
| | | // rate=1; |
| | | let base64 = canvas.toDataURL('image/jpeg', rate); |
| | | let base64 = canvas.toDataURL("image/jpeg", rate); |
| | | resolve(_this.convertToFile(base64, file.name)); |
| | | }; |
| | | }; |
| | | }); |
| | | }, |
| | | async uploadOSS() { |
| | | this.http.get('api/alioss/getAccessToken', {}, false).then(async (x) => { |
| | | this.http.get("api/alioss/getAccessToken", {}, false).then(async (x) => { |
| | | if (!x.status) return this.$Message.error(x.message); |
| | | let client = new OSS({ |
| | | // yourRegionå¡«åBucketæå¨å°åã以åä¸1ï¼æå·ï¼ä¸ºä¾ï¼Regionå¡«å为oss-cn-hangzhouã |
| | |
| | | // ä»STSæå¡è·åçå®å
¨ä»¤çï¼SecurityTokenï¼ã |
| | | stsToken: x.data.securityToken, |
| | | // å¡«åBucketåç§°ã |
| | | bucket: x.data.bucket |
| | | bucket: x.data.bucket, |
| | | }); |
| | | console.log(this.files); |
| | | for (let index = 0; index < this.files.length; index++) { |
| | | const file = this.files[index]; |
| | | if (file.input) { |
| | | let result = await client.put( |
| | | x.data.bucketFolder + '/' + x.data.unique + file.name, |
| | | x.data.bucketFolder + "/" + x.data.unique + file.name, |
| | | file |
| | | ); |
| | | file.path = result.url; |
| | |
| | | let _files = this.files.map((file) => { |
| | | return { |
| | | name: file.newName || file.name, |
| | | path: file.path |
| | | path: file.path, |
| | | }; |
| | | }); |
| | | this.fileInfo.push(..._files); |
| | |
| | | async upload(vail) { |
| | | if (vail && !this.checkFile()) return false; |
| | | if (!this.url) { |
| | | return this.$message.error('没æé
置好Url'); |
| | | return this.$message.error("没æé
置好Url"); |
| | | } |
| | | if (!this.files || this.files.length == 0) { |
| | | return this.$message.error('è¯·éæ©æä»¶'); |
| | | return this.$message.error("è¯·éæ©æä»¶"); |
| | | } |
| | | //å¢å ä¸ä¼ æ¶èªå®ä¹åæ°ï¼åå°ä½¿ç¨è·åUtilities.HttpContext.Current.Request.Query["åæ®µ"] |
| | | let params={}; |
| | | if (!this.uploadBefore(this.files,params)) { |
| | | let params = {}; |
| | | if (!this.uploadBefore(this.files, params)) { |
| | | return; |
| | | } |
| | | let paramText=""; |
| | | let paramText = ""; |
| | | if (Object.keys(params).length) { |
| | | paramText="?1=1"; |
| | | paramText = "?1=1"; |
| | | for (const key in params) { |
| | | let value=params[key]; |
| | | if(typeof(value)=='object'){ |
| | | value=JSON.stringify(value) |
| | | let value = params[key]; |
| | | if (typeof value == "object") { |
| | | value = JSON.stringify(value); |
| | | } |
| | | paramText+=`&${key}=${value}` |
| | | paramText += `&${key}=${value}`; |
| | | } |
| | | } |
| | | |
| | | this.loadingStatus = true; |
| | | this.loadText = 'ä¸ä¼ ä¸..'; |
| | | this.loadText = "ä¸ä¼ ä¸.."; |
| | | if (window.oss && window.oss.ali.use) { |
| | | await this.uploadOSS(); |
| | | this.loadingStatus = false; |
| | | this.loadText = 'ä¸ä¼ æä»¶'; |
| | | if (!this.uploadAfter({status:true}, this.files)) { |
| | | this.loadText = "ä¸ä¼ æä»¶"; |
| | | if (!this.uploadAfter({ status: true }, this.files)) { |
| | | this.changed = false; |
| | | return; |
| | | } else { |
| | | this.changed = true; |
| | | } |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.$message.success("ä¸ä¼ æå"); |
| | | return; |
| | | } |
| | | |
| | |
| | | for (let index = 0; index < this.files.length; index++) { |
| | | let file = this.files[index]; |
| | | if (file.input) { |
| | | let name = file.name.split('.'); |
| | | let name = file.name.split("."); |
| | | name = name[name.length - 1].toLocaleLowerCase(); |
| | | let isImg = this.imgTypes.indexOf(name) != -1; |
| | | if (isImg && (name == 'jpg' || name == 'jpeg')) { |
| | | if (isImg && (name == "jpg" || name == "jpeg")) { |
| | | //>200KBçå¼å¯å缩 |
| | | if (isImg && file.size / 1024 / 1024 > 0.2) { |
| | | console.log('å缩å' + file.size); |
| | | console.log("å缩å" + file.size); |
| | | file = await this.compressImg(file); |
| | | file.compress = true; |
| | | this.files[index] = file; |
| | | this.files[index].input = true; |
| | | console.log('å缩å' + file.size); |
| | | console.log("å缩å" + file.size); |
| | | } |
| | | } |
| | | forms.append('fileInput', file, file.name); |
| | | forms.append("fileInput", file, file.name); |
| | | } |
| | | } |
| | | // forms.append("fileInput", this.files); |
| | | |
| | | this.http |
| | | .post(this.url+paramText, forms, this.autoUpload ? 'æ£å¨ä¸ä¼ æä»¶' : '') |
| | | .post(this.url + paramText, forms, this.autoUpload ? "æ£å¨ä¸ä¼ æä»¶" : "") |
| | | .then( |
| | | (x) => { |
| | | // this.$refs.uploadFile.clearFiles(); |
| | | this.loadingStatus = false; |
| | | this.loadText = 'ä¸ä¼ æä»¶'; |
| | | this.loadText = "ä¸ä¼ æä»¶"; |
| | | if (!this.uploadAfter(x, this.files)) { |
| | | this.changed = false; |
| | | return; |
| | |
| | | let _files = this.files.map((file) => { |
| | | return { |
| | | name: file.name, |
| | | path: file.path || x.data + file.name |
| | | path: file.path || x.data + file.name, |
| | | }; |
| | | }); |
| | | this.fileInfo.push(..._files); |
| | |
| | | this.files = _files; |
| | | }, |
| | | (error) => { |
| | | this.loadText = 'ä¸ä¼ æä»¶'; |
| | | this.loadText = "ä¸ä¼ æä»¶"; |
| | | this.loadingStatus = false; |
| | | } |
| | | ); |
| | | }, |
| | | format(file, checkFileType) { |
| | | const format = |
| | | file.name |
| | | .split('.') |
| | | .pop() |
| | | .toLocaleLowerCase() || ''; |
| | | let fileIcon = 'el-icon-document'; |
| | | const format = file.name.split(".").pop().toLocaleLowerCase() || ""; |
| | | let fileIcon = "el-icon-document"; |
| | | if (this.fileTypes.length > 0 && checkFileType != undefined) { |
| | | if (this.fileTypes.indexOf(format) != -1) { |
| | | return true; |
| | |
| | | if ( |
| | | checkFileType && |
| | | !(checkFileType instanceof Array) && |
| | | checkFileType != 'img' && |
| | | checkFileType != 'excel' |
| | | checkFileType != "img" && |
| | | checkFileType != "excel" |
| | | ) { |
| | | if (checkFileType.indexOf(format) > -1) { |
| | | return true; |
| | |
| | | } |
| | | } |
| | | |
| | | if (checkFileType == 'img' || this.imgTypes.indexOf(format) > -1) { |
| | | if (checkFileType == 'img') { |
| | | if (checkFileType == "img" || this.imgTypes.indexOf(format) > -1) { |
| | | if (checkFileType == "img") { |
| | | if (this.imgTypes.indexOf(format) > -1) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | fileIcon = 'el-icon-picture-outline'; |
| | | fileIcon = "el-icon-picture-outline"; |
| | | } |
| | | if ( |
| | | ['mp4', 'm3u8', 'rmvb', 'avi', 'swf', '3gp', 'mkv', 'flv'].indexOf( |
| | | format |
| | | ) > -1 |
| | | ["mp4", "m3u8", "rmvb", "avi", "swf", "3gp", "mkv", "flv"].indexOf(format) > -1 |
| | | ) { |
| | | fileIcon = 'el-icon-document'; |
| | | fileIcon = "el-icon-document"; |
| | | } |
| | | if (['mp3', 'wav', 'wma', 'ogg', 'aac', 'flac'].indexOf(format) > -1) { |
| | | fileIcon = 'el-icon-document'; |
| | | if (["mp3", "wav", "wma", "ogg", "aac", "flac"].indexOf(format) > -1) { |
| | | fileIcon = "el-icon-document"; |
| | | } |
| | | if (['doc', 'txt', 'docx', 'pages', 'epub', 'pdf'].indexOf(format) > -1) { |
| | | fileIcon = 'el-icon-document'; |
| | | if (["doc", "txt", "docx", "pages", "epub", "pdf"].indexOf(format) > -1) { |
| | | fileIcon = "el-icon-document"; |
| | | } |
| | | if ( |
| | | checkFileType == 'excel' || |
| | | ['numbers', 'csv', 'xls', 'xlsx'].indexOf(format) > -1 |
| | | checkFileType == "excel" || |
| | | ["numbers", "csv", "xls", "xlsx"].indexOf(format) > -1 |
| | | ) { |
| | | if (checkFileType == 'excel') { |
| | | if (['numbers', 'csv', 'xls', 'xlsx'].indexOf(format) > -1) { |
| | | if (checkFileType == "excel") { |
| | | if (["numbers", "csv", "xls", "xlsx"].indexOf(format) > -1) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | fileIcon = 'el-icon-document'; |
| | | fileIcon = "el-icon-document"; |
| | | } |
| | | return fileIcon; |
| | | }, |
| | |
| | | files.length + (inputFiles || []).length > (this.maxFile || 5) |
| | | ) { |
| | | this.$message.error( |
| | | 'æå¤åªè½éã' + |
| | | "æå¤åªè½éã" + |
| | | (this.maxFile || 5) + |
| | | 'ã' + |
| | | (this.img ? 'å¼ å¾ç' : '个æä»¶') + |
| | | '' |
| | | "ã" + |
| | | (this.img ? "å¼ å¾ç" : "个æä»¶") + |
| | | "" |
| | | ); |
| | | return false; |
| | | } |
| | |
| | | for (let index = 0; index < inputFiles.length; index++) { |
| | | const file = inputFiles[index]; |
| | | if (names.indexOf(file.name) != -1) { |
| | | file.name = '(' + index + ')' + file.name; |
| | | file.name = "(" + index + ")" + file.name; |
| | | } |
| | | names.push(file.name); |
| | | if (this.img && !this.format(file, 'img')) { |
| | | this.$message.error('éæ©çæä»¶ã' + file.name + 'ãåªè½æ¯å¾çæ ¼å¼'); |
| | | if (this.img && !this.format(file, "img")) { |
| | | this.$message.error("éæ©çæä»¶ã" + file.name + "ãåªè½æ¯å¾çæ ¼å¼"); |
| | | return false; |
| | | } |
| | | if (this.excel && !this.format(file, 'excel')) { |
| | | this.$message.error('éæ©çæä»¶ã' + file.name + 'ãåªè½æ¯excelæä»¶'); |
| | | if (this.excel && !this.format(file, "excel")) { |
| | | this.$message.error("éæ©çæä»¶ã" + file.name + "ãåªè½æ¯excelæä»¶"); |
| | | return false; |
| | | } |
| | | if ( |
| | |
| | | !this.format(file, this.fileTypes) |
| | | ) { |
| | | this.$message.error( |
| | | 'éæ©çæä»¶ã' + |
| | | "éæ©çæä»¶ã" + |
| | | file.name + |
| | | 'ãåªè½æ¯ã' + |
| | | this.fileTypes.join(',') + |
| | | 'ãæ ¼å¼' |
| | | "ãåªè½æ¯ã" + |
| | | this.fileTypes.join(",") + |
| | | "ãæ ¼å¼" |
| | | ); |
| | | return false; |
| | | } |
| | | if (file.size > (this.maxSize || 50) * 1024 * 1024) { |
| | | this.$message.error( |
| | | 'éæ©çæä»¶ã' + |
| | | file.name + |
| | | 'ãä¸è½è¶
è¿:' + |
| | | (this.maxSize || 50) + |
| | | 'M' |
| | | "éæ©çæä»¶ã" + file.name + "ãä¸è½è¶
è¿:" + (this.maxSize || 50) + "M" |
| | | ); |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="less" scoped> |
| | |
| | | .img-selector { |
| | | position: relative; |
| | | cursor: pointer; |
| | | margin: 0 10px 10px 0; |
| | | // margin: 0 10px 10px 0; |
| | | margin: 0px; |
| | | float: left; |
| | | width: 65px; |
| | | height: 65px; |
| | | width: 365px; |
| | | height: 365px; |
| | | border: 1px solid #c7c7c7; |
| | | overflow: hidden; |
| | | border-radius: 5px; |
| | | box-sizing: content-box; |
| | | background-image: url("~@/assets/test.png"); |
| | | background-repeat: no-repeat; |
| | | background-position: center; |
| | | background-size: contain; |
| | | img { |
| | | margin: 0; |
| | | padding: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: cover; |
| | | // background-image: url("@/assets/logo.png"); |
| | | } |
| | | |
| | | .operation { |