执行过npm install命令的vue-element-admin源码
康凯
2022-05-20 aa4c235a8ca67ea8b731f90c951a465e92c0a865
1
{"remainingRequest":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\源码\\vue-element-admin-master\\src\\components\\UploadExcel\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\components\\UploadExcel\\index.vue","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBYTFNYIGZyb20gJ3hsc3gnCgpleHBvcnQgZGVmYXVsdCB7CiAgcHJvcHM6IHsKICAgIGJlZm9yZVVwbG9hZDogRnVuY3Rpb24sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUKICAgIG9uU3VjY2VzczogRnVuY3Rpb24vLyBlc2xpbnQtZGlzYWJsZS1saW5lCiAgfSwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIGV4Y2VsRGF0YTogewogICAgICAgIGhlYWRlcjogbnVsbCwKICAgICAgICByZXN1bHRzOiBudWxsCiAgICAgIH0KICAgIH0KICB9LAogIG1ldGhvZHM6IHsKICAgIGdlbmVyYXRlRGF0YSh7IGhlYWRlciwgcmVzdWx0cyB9KSB7CiAgICAgIHRoaXMuZXhjZWxEYXRhLmhlYWRlciA9IGhlYWRlcgogICAgICB0aGlzLmV4Y2VsRGF0YS5yZXN1bHRzID0gcmVzdWx0cwogICAgICB0aGlzLm9uU3VjY2VzcyAmJiB0aGlzLm9uU3VjY2Vzcyh0aGlzLmV4Y2VsRGF0YSkKICAgIH0sCiAgICBoYW5kbGVEcm9wKGUpIHsKICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuCiAgICAgIGNvbnN0IGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXMKICAgICAgaWYgKGZpbGVzLmxlbmd0aCAhPT0gMSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ09ubHkgc3VwcG9ydCB1cGxvYWRpbmcgb25lIGZpbGUhJykKICAgICAgICByZXR1cm4KICAgICAgfQogICAgICBjb25zdCByYXdGaWxlID0gZmlsZXNbMF0gLy8gb25seSB1c2UgZmlsZXNbMF0KCiAgICAgIGlmICghdGhpcy5pc0V4Y2VsKHJhd0ZpbGUpKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcignT25seSBzdXBwb3J0cyB1cGxvYWQgLnhsc3gsIC54bHMsIC5jc3Ygc3VmZml4IGZpbGVzJykKICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgfQogICAgICB0aGlzLnVwbG9hZChyYXdGaWxlKQogICAgICBlLnN0b3BQcm9wYWdhdGlvbigpCiAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgfSwKICAgIGhhbmRsZURyYWdvdmVyKGUpIHsKICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JwogICAgfSwKICAgIGhhbmRsZVVwbG9hZCgpIHsKICAgICAgdGhpcy4kcmVmc1snZXhjZWwtdXBsb2FkLWlucHV0J10uY2xpY2soKQogICAgfSwKICAgIGhhbmRsZUNsaWNrKGUpIHsKICAgICAgY29uc3QgZmlsZXMgPSBlLnRhcmdldC5maWxlcwogICAgICBjb25zdCByYXdGaWxlID0gZmlsZXNbMF0gLy8gb25seSB1c2UgZmlsZXNbMF0KICAgICAgaWYgKCFyYXdGaWxlKSByZXR1cm4KICAgICAgdGhpcy51cGxvYWQocmF3RmlsZSkKICAgIH0sCiAgICB1cGxvYWQocmF3RmlsZSkgewogICAgICB0aGlzLiRyZWZzWydleGNlbC11cGxvYWQtaW5wdXQnXS52YWx1ZSA9IG51bGwgLy8gZml4IGNhbid0IHNlbGVjdCB0aGUgc2FtZSBleGNlbAoKICAgICAgaWYgKCF0aGlzLmJlZm9yZVVwbG9hZCkgewogICAgICAgIHRoaXMucmVhZGVyRGF0YShyYXdGaWxlKQogICAgICAgIHJldHVybgogICAgICB9CiAgICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMuYmVmb3JlVXBsb2FkKHJhd0ZpbGUpCiAgICAgIGlmIChiZWZvcmUpIHsKICAgICAgICB0aGlzLnJlYWRlckRhdGEocmF3RmlsZSkKICAgICAgfQogICAgfSwKICAgIHJlYWRlckRhdGEocmF3RmlsZSkgewogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlCiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKQogICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBlLnRhcmdldC5yZXN1bHQKICAgICAgICAgIGNvbnN0IHdvcmtib29rID0gWExTWC5yZWFkKGRhdGEsIHsgdHlwZTogJ2FycmF5JyB9KQogICAgICAgICAgY29uc3QgZmlyc3RTaGVldE5hbWUgPSB3b3JrYm9vay5TaGVldE5hbWVzWzBdCiAgICAgICAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5TaGVldHNbZmlyc3RTaGVldE5hbWVdCiAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmdldEhlYWRlclJvdyh3b3Jrc2hlZXQpCiAgICAgICAgICBjb25zdCByZXN1bHRzID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdvcmtzaGVldCkKICAgICAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKHsgaGVhZGVyLCByZXN1bHRzIH0pCiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQogICAgICAgICAgcmVzb2x2ZSgpCiAgICAgICAgfQogICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihyYXdGaWxlKQogICAgICB9KQogICAgfSwKICAgIGdldEhlYWRlclJvdyhzaGVldCkgewogICAgICBjb25zdCBoZWFkZXJzID0gW10KICAgICAgY29uc3QgcmFuZ2UgPSBYTFNYLnV0aWxzLmRlY29kZV9yYW5nZShzaGVldFsnIXJlZiddKQogICAgICBsZXQgQwogICAgICBjb25zdCBSID0gcmFuZ2Uucy5yCiAgICAgIC8qIHN0YXJ0IGluIHRoZSBmaXJzdCByb3cgKi8KICAgICAgZm9yIChDID0gcmFuZ2Uucy5jOyBDIDw9IHJhbmdlLmUuYzsgKytDKSB7IC8qIHdhbGsgZXZlcnkgY29sdW1uIGluIHRoZSByYW5nZSAqLwogICAgICAgIGNvbnN0IGNlbGwgPSBzaGVldFtYTFNYLnV0aWxzLmVuY29kZV9jZWxsKHsgYzogQywgcjogUiB9KV0KICAgICAgICAvKiBmaW5kIHRoZSBjZWxsIGluIHRoZSBmaXJzdCByb3cgKi8KICAgICAgICBsZXQgaGRyID0gJ1VOS05PV04gJyArIEMgLy8gPC0tIHJlcGxhY2Ugd2l0aCB5b3VyIGRlc2lyZWQgZGVmYXVsdAogICAgICAgIGlmIChjZWxsICYmIGNlbGwudCkgaGRyID0gWExTWC51dGlscy5mb3JtYXRfY2VsbChjZWxsKQogICAgICAgIGhlYWRlcnMucHVzaChoZHIpCiAgICAgIH0KICAgICAgcmV0dXJuIGhlYWRlcnMKICAgIH0sCiAgICBpc0V4Y2VsKGZpbGUpIHsKICAgICAgcmV0dXJuIC9cLih4bHN4fHhsc3xjc3YpJC8udGVzdChmaWxlLm5hbWUpCiAgICB9CiAgfQp9Cg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;AAaA;;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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","file":"index.vue","sourceRoot":"src/components/UploadExcel","sourcesContent":["<template>\n  <div>\n    <input ref=\"excel-upload-input\" class=\"excel-upload-input\" type=\"file\" accept=\".xlsx, .xls\" @change=\"handleClick\">\n    <div class=\"drop\" @drop=\"handleDrop\" @dragover=\"handleDragover\" @dragenter=\"handleDragover\">\n      Drop excel file here or\n      <el-button :loading=\"loading\" style=\"margin-left:16px;\" size=\"mini\" type=\"primary\" @click=\"handleUpload\">\n        Browse\n      </el-button>\n    </div>\n  </div>\n</template>\n\n<script>\nimport XLSX from 'xlsx'\n\nexport default {\n  props: {\n    beforeUpload: Function, // eslint-disable-line\n    onSuccess: Function// eslint-disable-line\n  },\n  data() {\n    return {\n      loading: false,\n      excelData: {\n        header: null,\n        results: null\n      }\n    }\n  },\n  methods: {\n    generateData({ header, results }) {\n      this.excelData.header = header\n      this.excelData.results = results\n      this.onSuccess && this.onSuccess(this.excelData)\n    },\n    handleDrop(e) {\n      e.stopPropagation()\n      e.preventDefault()\n      if (this.loading) return\n      const files = e.dataTransfer.files\n      if (files.length !== 1) {\n        this.$message.error('Only support uploading one file!')\n        return\n      }\n      const rawFile = files[0] // only use files[0]\n\n      if (!this.isExcel(rawFile)) {\n        this.$message.error('Only supports upload .xlsx, .xls, .csv suffix files')\n        return false\n      }\n      this.upload(rawFile)\n      e.stopPropagation()\n      e.preventDefault()\n    },\n    handleDragover(e) {\n      e.stopPropagation()\n      e.preventDefault()\n      e.dataTransfer.dropEffect = 'copy'\n    },\n    handleUpload() {\n      this.$refs['excel-upload-input'].click()\n    },\n    handleClick(e) {\n      const files = e.target.files\n      const rawFile = files[0] // only use files[0]\n      if (!rawFile) return\n      this.upload(rawFile)\n    },\n    upload(rawFile) {\n      this.$refs['excel-upload-input'].value = null // fix can't select the same excel\n\n      if (!this.beforeUpload) {\n        this.readerData(rawFile)\n        return\n      }\n      const before = this.beforeUpload(rawFile)\n      if (before) {\n        this.readerData(rawFile)\n      }\n    },\n    readerData(rawFile) {\n      this.loading = true\n      return new Promise((resolve, reject) => {\n        const reader = new FileReader()\n        reader.onload = e => {\n          const data = e.target.result\n          const workbook = XLSX.read(data, { type: 'array' })\n          const firstSheetName = workbook.SheetNames[0]\n          const worksheet = workbook.Sheets[firstSheetName]\n          const header = this.getHeaderRow(worksheet)\n          const results = XLSX.utils.sheet_to_json(worksheet)\n          this.generateData({ header, results })\n          this.loading = false\n          resolve()\n        }\n        reader.readAsArrayBuffer(rawFile)\n      })\n    },\n    getHeaderRow(sheet) {\n      const headers = []\n      const range = XLSX.utils.decode_range(sheet['!ref'])\n      let C\n      const R = range.s.r\n      /* start in the first row */\n      for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */\n        const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]\n        /* find the cell in the first row */\n        let hdr = 'UNKNOWN ' + C // <-- replace with your desired default\n        if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)\n        headers.push(hdr)\n      }\n      return headers\n    },\n    isExcel(file) {\n      return /\\.(xlsx|xls|csv)$/.test(file.name)\n    }\n  }\n}\n</script>\n\n<style scoped>\n.excel-upload-input{\n  display: none;\n  z-index: -9999;\n}\n.drop{\n  border: 2px dashed #bbb;\n  width: 600px;\n  height: 160px;\n  line-height: 160px;\n  margin: 0 auto;\n  font-size: 24px;\n  border-radius: 5px;\n  text-align: center;\n  color: #bbb;\n  position: relative;\n}\n</style>\n"]}]}