{"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"]}]}
|