car_web/node_modules/.cache/vue-loader/0afa32063c80ced23385a76f6aa...

1 line
14 KiB
JSON

{"remainingRequest":"D:\\workspace\\car_web\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\workspace\\car_web\\src\\components\\FileUpload\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\workspace\\car_web\\src\\components\\FileUpload\\index.vue","mtime":1708672711875},{"path":"D:\\workspace\\car_web\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\workspace\\car_web\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\workspace\\car_web\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\workspace\\car_web\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBnZXRUb2tlbiB9IGZyb20gIkAvdXRpbHMvYXV0aCI7DQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogIkZpbGVVcGxvYWQiLA0KICBwcm9wczogew0KICAgIC8vIOWAvA0KICAgIHZhbHVlOiBbU3RyaW5nLCBPYmplY3QsIEFycmF5XSwNCiAgICAvLyDmlbDph4/pmZDliLYNCiAgICBsaW1pdDogew0KICAgICAgdHlwZTogTnVtYmVyLA0KICAgICAgZGVmYXVsdDogNSwNCiAgICB9LA0KICAgIC8vIOWkp+Wwj+mZkOWItihNQikNCiAgICBmaWxlU2l6ZTogew0KICAgICAgdHlwZTogTnVtYmVyLA0KICAgICAgZGVmYXVsdDogNSwNCiAgICB9LA0KICAgIC8vIOaWh+S7tuexu+Weiywg5L6L5aaCWydwbmcnLCAnanBnJywgJ2pwZWcnXQ0KICAgIGZpbGVUeXBlOiB7DQogICAgICB0eXBlOiBBcnJheSwNCiAgICAgIGRlZmF1bHQ6ICgpID0+IFsiZG9jIiwgInhscyIsICJwcHQiLCAidHh0IiwgInBkZiJdLA0KICAgIH0sDQogICAgLy8g5piv5ZCm5pi+56S65o+Q56S6DQogICAgaXNTaG93VGlwOiB7DQogICAgICB0eXBlOiBCb29sZWFuLA0KICAgICAgZGVmYXVsdDogdHJ1ZQ0KICAgIH0NCiAgfSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgbnVtYmVyOiAwLA0KICAgICAgdXBsb2FkTGlzdDogW10sDQogICAgICB1cGxvYWRGaWxlVXJsOiBwcm9jZXNzLmVudi5WVUVfQVBQX0JBU0VfQVBJICsgIi9maWxlL3VwbG9hZCIsIC8vIOS4iuS8oOaWh+S7tuacjeWKoeWZqOWcsOWdgA0KICAgICAgaGVhZGVyczogew0KICAgICAgICBBdXRob3JpemF0aW9uOiAiQmVhcmVyICIgKyBnZXRUb2tlbigpLA0KICAgICAgfSwNCiAgICAgIGZpbGVMaXN0OiBbXSwNCiAgICB9Ow0KICB9LA0KICB3YXRjaDogew0KICAgIHZhbHVlOiB7DQogICAgICBoYW5kbGVyKHZhbCkgew0KICAgICAgICBpZiAodmFsKSB7DQogICAgICAgICAgbGV0IHRlbXAgPSAxOw0KICAgICAgICAgIC8vIOmmluWFiOWwhuWAvOi9rOS4uuaVsOe7hA0KICAgICAgICAgIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiB0aGlzLnZhbHVlLnNwbGl0KCcsJyk7DQogICAgICAgICAgLy8g54S25ZCO5bCG5pWw57uE6L2s5Li65a+56LGh5pWw57uEDQogICAgICAgICAgdGhpcy5maWxlTGlzdCA9IGxpc3QubWFwKGl0ZW0gPT4gew0KICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAic3RyaW5nIikgew0KICAgICAgICAgICAgICBpdGVtID0geyBuYW1lOiBpdGVtLCB1cmw6IGl0ZW0gfTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGl0ZW0udWlkID0gaXRlbS51aWQgfHwgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyB0ZW1wKys7DQogICAgICAgICAgICByZXR1cm4gaXRlbTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLmZpbGVMaXN0ID0gW107DQogICAgICAgICAgcmV0dXJuIFtdOw0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgZGVlcDogdHJ1ZSwNCiAgICAgIGltbWVkaWF0ZTogdHJ1ZQ0KICAgIH0NCiAgfSwNCiAgY29tcHV0ZWQ6IHsNCiAgICAvLyDmmK/lkKbmmL7npLrmj5DnpLoNCiAgICBzaG93VGlwKCkgew0KICAgICAgcmV0dXJuIHRoaXMuaXNTaG93VGlwICYmICh0aGlzLmZpbGVUeXBlIHx8IHRoaXMuZmlsZVNpemUpOw0KICAgIH0sDQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvLyDkuIrkvKDliY3moKHmo4DmoLzlvI/lkozlpKflsI8NCiAgICBoYW5kbGVCZWZvcmVVcGxvYWQoZmlsZSkgew0KICAgICAgLy8g5qCh5qOA5paH5Lu257G75Z6LDQogICAgICBpZiAodGhpcy5maWxlVHlwZSkgew0KICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZS5zcGxpdCgnLicpOw0KICAgICAgICBjb25zdCBmaWxlRXh0ID0gZmlsZU5hbWVbZmlsZU5hbWUubGVuZ3RoIC0gMV07DQogICAgICAgIGNvbnN0IGlzVHlwZU9rID0gdGhpcy5maWxlVHlwZS5pbmRleE9mKGZpbGVFeHQpID49IDA7DQogICAgICAgIGlmICghaXNUeXBlT2spIHsNCiAgICAgICAgICB0aGlzLiRtb2RhbC5tc2dFcnJvcihg5paH5Lu25qC85byP5LiN5q2j56GuLCDor7fkuIrkvKAke3RoaXMuZmlsZVR5cGUuam9pbigiLyIpfeagvOW8j+aWh+S7tiFgKTsNCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIC8vIOagoeajgOaWh+S7tuWkp+Wwjw0KICAgICAgaWYgKHRoaXMuZmlsZVNpemUpIHsNCiAgICAgICAgY29uc3QgaXNMdCA9IGZpbGUuc2l6ZSAvIDEwMjQgLyAxMDI0IDwgdGhpcy5maWxlU2l6ZTsNCiAgICAgICAgaWYgKCFpc0x0KSB7DQogICAgICAgICAgdGhpcy4kbW9kYWwubXNnRXJyb3IoYOS4iuS8oOaWh+S7tuWkp+Wwj+S4jeiDvei2hei/hyAke3RoaXMuZmlsZVNpemV9IE1CIWApOw0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdGhpcy4kbW9kYWwubG9hZGluZygi5q2j5Zyo5LiK5Lyg5paH5Lu277yM6K+356iN5YCZLi4uIik7DQogICAgICB0aGlzLm51bWJlcisrOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfSwNCiAgICAvLyDmlofku7bkuKrmlbDotoXlh7oNCiAgICBoYW5kbGVFeGNlZWQoKSB7DQogICAgICB0aGlzLiRtb2RhbC5tc2dFcnJvcihg5LiK5Lyg5paH5Lu25pWw6YeP5LiN6IO96LaF6L+HICR7dGhpcy5saW1pdH0g5LiqIWApOw0KICAgIH0sDQogICAgLy8g5LiK5Lyg5aSx6LSlDQogICAgaGFuZGxlVXBsb2FkRXJyb3IoZXJyKSB7DQogICAgICB0aGlzLiRtb2RhbC5tc2dFcnJvcigi5LiK5Lyg5paH5Lu25aSx6LSl77yM6K+36YeN6K+VIik7DQogICAgICB0aGlzLiRtb2RhbC5jbG9zZUxvYWRpbmcoKQ0KICAgIH0sDQogICAgLy8g5LiK5Lyg5oiQ5Yqf5Zue6LCDDQogICAgaGFuZGxlVXBsb2FkU3VjY2VzcyhyZXMsIGZpbGUpIHsNCiAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7DQogICAgICAgIHRoaXMudXBsb2FkTGlzdC5wdXNoKHsgbmFtZTogcmVzLmRhdGEudXJsLCB1cmw6IHJlcy5kYXRhLnVybCB9KTsNCiAgICAgICAgdGhpcy51cGxvYWRlZFN1Y2Nlc3NmdWxseSgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5udW1iZXItLTsNCiAgICAgICAgdGhpcy4kbW9kYWwuY2xvc2VMb2FkaW5nKCk7DQogICAgICAgIHRoaXMuJG1vZGFsLm1zZ0Vycm9yKHJlcy5tc2cpOw0KICAgICAgICB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuaGFuZGxlUmVtb3ZlKGZpbGUpOw0KICAgICAgICB0aGlzLnVwbG9hZGVkU3VjY2Vzc2Z1bGx5KCk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDliKDpmaTmlofku7YNCiAgICBoYW5kbGVEZWxldGUoaW5kZXgpIHsNCiAgICAgIHRoaXMuZmlsZUxpc3Quc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgdGhpcy5saXN0VG9TdHJpbmcodGhpcy5maWxlTGlzdCkpOw0KICAgIH0sDQogICAgLy8g5LiK5Lyg57uT5p2f5aSE55CGDQogICAgdXBsb2FkZWRTdWNjZXNzZnVsbHkoKSB7DQogICAgICBpZiAodGhpcy5udW1iZXIgPiAwICYmIHRoaXMudXBsb2FkTGlzdC5sZW5ndGggPT09IHRoaXMubnVtYmVyKSB7DQogICAgICAgIHRoaXMuZmlsZUxpc3QgPSB0aGlzLmZpbGVMaXN0LmNvbmNhdCh0aGlzLnVwbG9hZExpc3QpOw0KICAgICAgICB0aGlzLnVwbG9hZExpc3QgPSBbXTsNCiAgICAgICAgdGhpcy5udW1iZXIgPSAwOw0KICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIHRoaXMubGlzdFRvU3RyaW5nKHRoaXMuZmlsZUxpc3QpKTsNCiAgICAgICAgdGhpcy4kbW9kYWwuY2xvc2VMb2FkaW5nKCk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDojrflj5bmlofku7blkI3np7ANCiAgICBnZXRGaWxlTmFtZShuYW1lKSB7DQogICAgICBpZiAobmFtZS5sYXN0SW5kZXhPZigiLyIpID4gLTEpIHsNCiAgICAgICAgcmV0dXJuIG5hbWUuc2xpY2UobmFtZS5sYXN0SW5kZXhPZigiLyIpICsgMSk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gIiI7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDlr7nosaHovazmiJDmjIflrprlrZfnrKbkuLLliIbpmpQNCiAgICBsaXN0VG9TdHJpbmcobGlzdCwgc2VwYXJhdG9yKSB7DQogICAgICBsZXQgc3RycyA9ICIiOw0KICAgICAgc2VwYXJhdG9yID0gc2VwYXJhdG9yIHx8ICIsIjsNCiAgICAgIGZvciAobGV0IGkgaW4gbGlzdCkgew0KICAgICAgICBzdHJzICs9IGxpc3RbaV0udXJsICsgc2VwYXJhdG9yOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHN0cnMgIT0gJycgPyBzdHJzLnN1YnN0cigwLCBzdHJzLmxlbmd0aCAtIDEpIDogJyc7DQogICAgfQ0KICB9DQp9Ow0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/components/FileUpload","sourcesContent":["<template>\r\n <div class=\"upload-file\">\r\n <el-upload\r\n multiple\r\n :action=\"uploadFileUrl\"\r\n :before-upload=\"handleBeforeUpload\"\r\n :file-list=\"fileList\"\r\n :limit=\"limit\"\r\n :on-error=\"handleUploadError\"\r\n :on-exceed=\"handleExceed\"\r\n :on-success=\"handleUploadSuccess\"\r\n :show-file-list=\"false\"\r\n :headers=\"headers\"\r\n class=\"upload-file-uploader\"\r\n ref=\"fileUpload\"\r\n >\r\n <!-- 上传按钮 -->\r\n <el-button size=\"mini\" type=\"primary\">选取文件</el-button>\r\n <!-- 上传提示 -->\r\n <div class=\"el-upload__tip\" slot=\"tip\" v-if=\"showTip\">\r\n 请上传\r\n <template v-if=\"fileSize\"> 大小不超过 <b style=\"color: #f56c6c\">{{ fileSize }}MB</b> </template>\r\n <template v-if=\"fileType\"> 格式为 <b style=\"color: #f56c6c\">{{ fileType.join(\"/\") }}</b> </template>\r\n 的文件\r\n </div>\r\n </el-upload>\r\n\r\n <!-- 文件列表 -->\r\n <transition-group class=\"upload-file-list el-upload-list el-upload-list--text\" name=\"el-fade-in-linear\" tag=\"ul\">\r\n <li :key=\"file.url\" class=\"el-upload-list__item ele-upload-list__item-content\" v-for=\"(file, index) in fileList\">\r\n <el-link :href=\"file.url\" :underline=\"false\" target=\"_blank\">\r\n <span class=\"el-icon-document\"> {{ getFileName(file.name) }} </span>\r\n </el-link>\r\n <div class=\"ele-upload-list__item-content-action\">\r\n <el-link :underline=\"false\" @click=\"handleDelete(index)\" type=\"danger\">删除</el-link>\r\n </div>\r\n </li>\r\n </transition-group>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { getToken } from \"@/utils/auth\";\r\n\r\nexport default {\r\n name: \"FileUpload\",\r\n props: {\r\n // 值\r\n value: [String, Object, Array],\r\n // 数量限制\r\n limit: {\r\n type: Number,\r\n default: 5,\r\n },\r\n // 大小限制(MB)\r\n fileSize: {\r\n type: Number,\r\n default: 5,\r\n },\r\n // 文件类型, 例如['png', 'jpg', 'jpeg']\r\n fileType: {\r\n type: Array,\r\n default: () => [\"doc\", \"xls\", \"ppt\", \"txt\", \"pdf\"],\r\n },\r\n // 是否显示提示\r\n isShowTip: {\r\n type: Boolean,\r\n default: true\r\n }\r\n },\r\n data() {\r\n return {\r\n number: 0,\r\n uploadList: [],\r\n uploadFileUrl: process.env.VUE_APP_BASE_API + \"/file/upload\", // 上传文件服务器地址\r\n headers: {\r\n Authorization: \"Bearer \" + getToken(),\r\n },\r\n fileList: [],\r\n };\r\n },\r\n watch: {\r\n value: {\r\n handler(val) {\r\n if (val) {\r\n let temp = 1;\r\n // 首先将值转为数组\r\n const list = Array.isArray(val) ? val : this.value.split(',');\r\n // 然后将数组转为对象数组\r\n this.fileList = list.map(item => {\r\n if (typeof item === \"string\") {\r\n item = { name: item, url: item };\r\n }\r\n item.uid = item.uid || new Date().getTime() + temp++;\r\n return item;\r\n });\r\n } else {\r\n this.fileList = [];\r\n return [];\r\n }\r\n },\r\n deep: true,\r\n immediate: true\r\n }\r\n },\r\n computed: {\r\n // 是否显示提示\r\n showTip() {\r\n return this.isShowTip && (this.fileType || this.fileSize);\r\n },\r\n },\r\n methods: {\r\n // 上传前校检格式和大小\r\n handleBeforeUpload(file) {\r\n // 校检文件类型\r\n if (this.fileType) {\r\n const fileName = file.name.split('.');\r\n const fileExt = fileName[fileName.length - 1];\r\n const isTypeOk = this.fileType.indexOf(fileExt) >= 0;\r\n if (!isTypeOk) {\r\n this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join(\"/\")}格式文件!`);\r\n return false;\r\n }\r\n }\r\n // 校检文件大小\r\n if (this.fileSize) {\r\n const isLt = file.size / 1024 / 1024 < this.fileSize;\r\n if (!isLt) {\r\n this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);\r\n return false;\r\n }\r\n }\r\n this.$modal.loading(\"正在上传文件,请稍候...\");\r\n this.number++;\r\n return true;\r\n },\r\n // 文件个数超出\r\n handleExceed() {\r\n this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);\r\n },\r\n // 上传失败\r\n handleUploadError(err) {\r\n this.$modal.msgError(\"上传文件失败,请重试\");\r\n this.$modal.closeLoading()\r\n },\r\n // 上传成功回调\r\n handleUploadSuccess(res, file) {\r\n if (res.code === 200) {\r\n this.uploadList.push({ name: res.data.url, url: res.data.url });\r\n this.uploadedSuccessfully();\r\n } else {\r\n this.number--;\r\n this.$modal.closeLoading();\r\n this.$modal.msgError(res.msg);\r\n this.$refs.fileUpload.handleRemove(file);\r\n this.uploadedSuccessfully();\r\n }\r\n },\r\n // 删除文件\r\n handleDelete(index) {\r\n this.fileList.splice(index, 1);\r\n this.$emit(\"input\", this.listToString(this.fileList));\r\n },\r\n // 上传结束处理\r\n uploadedSuccessfully() {\r\n if (this.number > 0 && this.uploadList.length === this.number) {\r\n this.fileList = this.fileList.concat(this.uploadList);\r\n this.uploadList = [];\r\n this.number = 0;\r\n this.$emit(\"input\", this.listToString(this.fileList));\r\n this.$modal.closeLoading();\r\n }\r\n },\r\n // 获取文件名称\r\n getFileName(name) {\r\n if (name.lastIndexOf(\"/\") > -1) {\r\n return name.slice(name.lastIndexOf(\"/\") + 1);\r\n } else {\r\n return \"\";\r\n }\r\n },\r\n // 对象转成指定字符串分隔\r\n listToString(list, separator) {\r\n let strs = \"\";\r\n separator = separator || \",\";\r\n for (let i in list) {\r\n strs += list[i].url + separator;\r\n }\r\n return strs != '' ? strs.substr(0, strs.length - 1) : '';\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.upload-file-uploader {\r\n margin-bottom: 5px;\r\n}\r\n.upload-file-list .el-upload-list__item {\r\n border: 1px solid #e4e7ed;\r\n line-height: 2;\r\n margin-bottom: 10px;\r\n position: relative;\r\n}\r\n.upload-file-list .ele-upload-list__item-content {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n color: inherit;\r\n}\r\n.ele-upload-list__item-content-action .el-link {\r\n margin-right: 10px;\r\n}\r\n</style>"]}]}