执行过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=style&index=0&id=12d4a639&scoped=true&lang=css&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\components\\UploadExcel\\index.vue","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\css-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\postcss-loader\\src\\index.js","mtime":499162500000},{"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:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCi5leGNlbC11cGxvYWQtaW5wdXR7CiAgZGlzcGxheTogbm9uZTsKICB6LWluZGV4OiAtOTk5OTsKfQouZHJvcHsKICBib3JkZXI6IDJweCBkYXNoZWQgI2JiYjsKICB3aWR0aDogNjAwcHg7CiAgaGVpZ2h0OiAxNjBweDsKICBsaW5lLWhlaWdodDogMTYwcHg7CiAgbWFyZ2luOiAwIGF1dG87CiAgZm9udC1zaXplOiAyNHB4OwogIGJvcmRlci1yYWRpdXM6IDVweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgY29sb3I6ICNiYmI7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Cg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyHA;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"]}]}