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