feige
2023-09-10 8319f67b9bec1d19c06eaa4216f0f34c67e3afb1
1
{"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"]}]}