From e9e2877b95d433cc4a19535944c68ec137f1d58a Mon Sep 17 00:00:00 2001 From: markma <750975972@qq.com> Date: Tue, 22 Mar 2022 22:11:21 +0800 Subject: [PATCH] 13 debug --- package-lock.json | 113 +++++++++++ package.json | 5 +- src/common/js/util.js | 17 ++ src/excel/Blob.js | 181 ++++++++++++++++++ src/excel/Export2Excel.js | 142 ++++++++++++++ .../导入用户信息模版 (3).xlsx | Bin 0 -> 9031 bytes src/router/index.js | 6 + src/views/ImportData.vue | 43 +++++ src/views/Login.vue | 84 ++++++-- src/views/OuterAppForm.vue | 4 +- src/views/OuterHistory.vue | 1 - src/views/OuterUserIndex.vue | 108 ++++++++++- src/views/SetComment.vue | 2 +- src/views/StudentUserIndex.vue | 31 ++- src/views/TeacherApplication.vue | 12 +- src/views/TeacherUserIndex.vue | 28 ++- 16 files changed, 741 insertions(+), 36 deletions(-) create mode 100644 src/common/js/util.js create mode 100644 src/excel/Blob.js create mode 100644 src/excel/Export2Excel.js create mode 100644 src/excel/importExcels/导入用户信息模版 (3).xlsx create mode 100644 src/views/ImportData.vue diff --git a/package-lock.json b/package-lock.json index 14a6feb..178cd1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2106,6 +2106,14 @@ "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", "dev": true }, + "adler-32": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.0.tgz", + "integrity": "sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g==", + "requires": { + "printj": "~1.2.2" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3126,6 +3134,23 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "cfb": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.1.tgz", + "integrity": "sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0", + "printj": "~1.3.0" + }, + "dependencies": { + "printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==" + } + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3371,6 +3396,11 @@ "q": "^1.1.2" } }, + "codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -3681,6 +3711,22 @@ "parse-json": "^4.0.0" } }, + "crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" + }, + "dependencies": { + "printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==" + } + } + }, "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -4737,6 +4783,11 @@ "strip-eof": "^1.0.0" } }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -4972,6 +5023,11 @@ } } }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -5099,6 +5155,11 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -8146,6 +8207,11 @@ "renderkid": "^2.0.4" } }, + "printj": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.2.3.tgz", + "integrity": "sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA==" + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -8330,6 +8396,12 @@ "unpipe": "1.0.0" } }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -8803,6 +8875,15 @@ "ajv-keywords": "^3.1.0" } }, + "script-loader": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz", + "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==", + "dev": true, + "requires": { + "raw-loader": "~0.5.1" + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -9355,6 +9436,14 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -10778,6 +10867,16 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -10813,6 +10912,20 @@ "async-limiter": "~1.0.0" } }, + "xlsx": { + "version": "0.18.4", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.4.tgz", + "integrity": "sha512-u2plLVR/Ju2NxByPcWuxW3eOHEE/EH8w0vDyvHx8pFa8qO3fpq+l/57msr/Eq4cY5LErFOFD4sp4jIyPd6nFzQ==", + "requires": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index e2366ee..880bd5a 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,11 @@ "dependencies": { "core-js": "^3.6.5", "element-ui": "^2.15.6", + "file-saver": "^2.0.5", "vue": "^2.6.11", "vue-router": "^3.2.0", - "vuex": "^3.4.0" + "vuex": "^3.4.0", + "xlsx": "^0.18.4" }, "devDependencies": { "@vue/cli-plugin-babel": "~4.5.0", @@ -19,6 +21,7 @@ "@vue/cli-plugin-vuex": "~4.5.0", "@vue/cli-service": "~4.5.0", "axios": "^0.26.1", + "script-loader": "^0.7.2", "vue-cli-plugin-axios": "^0.0.4", "vue-cli-plugin-element": "^1.0.1", "vue-template-compiler": "^2.6.11" diff --git a/src/common/js/util.js b/src/common/js/util.js new file mode 100644 index 0000000..4f57888 --- /dev/null +++ b/src/common/js/util.js @@ -0,0 +1,17 @@ +export function export2Excel(columns, list, title) { + require.ensure([], () => { + const {export_json_to_excel} = require('../../excel/Export2Excel'); + let tHeader = [] + let filterVal = [] + console.log(columns) + if (!columns) { + return; + } + columns.forEach(item => { + tHeader.push(item.title) + filterVal.push(item.key) + }) + const data = list.map(v => filterVal.map(j => v[j])) + export_json_to_excel(tHeader, data, title); + }) +} \ No newline at end of file diff --git a/src/excel/Blob.js b/src/excel/Blob.js new file mode 100644 index 0000000..2d8b952 --- /dev/null +++ b/src/excel/Blob.js @@ -0,0 +1,181 @@ +/* eslint-disable */ +/* Blob.js + * A Blob implementation. + * 2014-05-27 + * + * By Eli Grey, http://eligrey.com + * By Devin Samarin, https://github.com/eboyjr + * License: X11/MIT + * See LICENSE.md + */ + +/*global self, unescape */ +/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, + plusplus: true */ + +/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ + +(function (view) { + "use strict"; + + view.URL = view.URL || view.webkitURL; + + if (view.Blob && view.URL) { + try { + new Blob; + return; + } catch (e) { + } + } + + // Internally we use a BlobBuilder implementation to base Blob off of + // in order to support older browsers that only have BlobBuilder + var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function (view) { + var + get_class = function (object) { + return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; + } + , FakeBlobBuilder = function BlobBuilder() { + this.data = []; + } + , FakeBlob = function Blob(data, type, encoding) { + this.data = data; + this.size = data.length; + this.type = type; + this.encoding = encoding; + } + , FBB_proto = FakeBlobBuilder.prototype + , FB_proto = FakeBlob.prototype + , FileReaderSync = view.FileReaderSync + , FileException = function (type) { + this.code = this[this.name = type]; + } + , file_ex_codes = ( + "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " + + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR" + ).split(" ") + , file_ex_code = file_ex_codes.length + , real_URL = view.URL || view.webkitURL || view + , real_create_object_URL = real_URL.createObjectURL + , real_revoke_object_URL = real_URL.revokeObjectURL + , URL = real_URL + , btoa = view.btoa + , atob = view.atob + + , ArrayBuffer = view.ArrayBuffer + , Uint8Array = view.Uint8Array + ; + FakeBlob.fake = FB_proto.fake = true; + while (file_ex_code--) { + FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1; + } + if (!real_URL.createObjectURL) { + URL = view.URL = {}; + } + URL.createObjectURL = function (blob) { + var + type = blob.type + , data_URI_header + ; + if (type === null) { + type = "application/octet-stream"; + } + if (blob instanceof FakeBlob) { + data_URI_header = "data:" + type; + if (blob.encoding === "base64") { + return data_URI_header + ";base64," + blob.data; + } else if (blob.encoding === "URI") { + return data_URI_header + "," + decodeURIComponent(blob.data); + } + if (btoa) { + return data_URI_header + ";base64," + btoa(blob.data); + } else { + return data_URI_header + "," + encodeURIComponent(blob.data); + } + } else if (real_create_object_URL) { + return real_create_object_URL.call(real_URL, blob); + } + }; + URL.revokeObjectURL = function (object_URL) { + if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) { + real_revoke_object_URL.call(real_URL, object_URL); + } + }; + FBB_proto.append = function (data/*, endings*/) { + var bb = this.data; + // decode data to a binary string + if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) { + var + str = "" + , buf = new Uint8Array(data) + , i = 0 + , buf_len = buf.length + ; + for (; i < buf_len; i++) { + str += String.fromCharCode(buf[i]); + } + bb.push(str); + } else if (get_class(data) === "Blob" || get_class(data) === "File") { + if (FileReaderSync) { + var fr = new FileReaderSync; + bb.push(fr.readAsBinaryString(data)); + } else { + // async FileReader won't work as BlobBuilder is sync + throw new FileException("NOT_READABLE_ERR"); + } + } else if (data instanceof FakeBlob) { + if (data.encoding === "base64" && atob) { + bb.push(atob(data.data)); + } else if (data.encoding === "URI") { + bb.push(decodeURIComponent(data.data)); + } else if (data.encoding === "raw") { + bb.push(data.data); + } + } else { + if (typeof data !== "string") { + data += ""; // convert unsupported types to strings + } + // decode UTF-16 to binary string + bb.push(unescape(encodeURIComponent(data))); + } + }; + FBB_proto.getBlob = function (type) { + if (!arguments.length) { + type = null; + } + return new FakeBlob(this.data.join(""), type, "raw"); + }; + FBB_proto.toString = function () { + return "[object BlobBuilder]"; + }; + FB_proto.slice = function (start, end, type) { + var args = arguments.length; + if (args < 3) { + type = null; + } + return new FakeBlob( + this.data.slice(start, args > 1 ? end : this.data.length) + , type + , this.encoding + ); + }; + FB_proto.toString = function () { + return "[object Blob]"; + }; + FB_proto.close = function () { + this.size = this.data.length = 0; + }; + return FakeBlobBuilder; + }(view)); + + view.Blob = function Blob(blobParts, options) { + var type = options ? (options.type || "") : ""; + var builder = new BlobBuilder(); + if (blobParts) { + for (var i = 0, len = blobParts.length; i < len; i++) { + builder.append(blobParts[i]); + } + } + return builder.getBlob(type); + }; +}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this)); \ No newline at end of file diff --git a/src/excel/Export2Excel.js b/src/excel/Export2Excel.js new file mode 100644 index 0000000..d2dad61 --- /dev/null +++ b/src/excel/Export2Excel.js @@ -0,0 +1,142 @@ +/* eslint-disable */ +require('script-loader!file-saver'); +require('./Blob'); +require('script-loader!xlsx/dist/xlsx.core.min'); + +function generateArray(table) { + var out = []; + var rows = table.querySelectorAll('tr'); + var ranges = []; + for (var R = 0; R < rows.length; ++R) { + var outRow = []; + var row = rows[R]; + var columns = row.querySelectorAll('td'); + for (var C = 0; C < columns.length; ++C) { + var cell = columns[C]; + var colspan = cell.getAttribute('colspan'); + var rowspan = cell.getAttribute('rowspan'); + var cellValue = cell.innerText; + if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; + + //Skip ranges + ranges.forEach(function (range) { + if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { + for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); + } + }); + + //Handle Row Span + if (rowspan || colspan) { + rowspan = rowspan || 1; + colspan = colspan || 1; + ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}}); + } + ; + + //Handle Value + outRow.push(cellValue !== "" ? cellValue : null); + + //Handle Colspan + if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null); + } + out.push(outRow); + } + return [out, ranges]; +}; + +function datenum(v, date1904) { + if (date1904) v += 1462; + var epoch = Date.parse(v); + return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); +} + +function sheet_from_array_of_arrays(data, opts) { + var ws = {}; + var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}}; + for (var R = 0; R != data.length; ++R) { + for (var C = 0; C != data[R].length; ++C) { + if (range.s.r > R) range.s.r = R; + if (range.s.c > C) range.s.c = C; + if (range.e.r < R) range.e.r = R; + if (range.e.c < C) range.e.c = C; + var cell = {v: data[R][C]}; + if (cell.v == null) continue; + var cell_ref = XLSX.utils.encode_cell({c: C, r: R}); + + if (typeof cell.v === 'number') cell.t = 'n'; + else if (typeof cell.v === 'boolean') cell.t = 'b'; + else if (cell.v instanceof Date) { + cell.t = 'n'; + cell.z = XLSX.SSF._table[14]; + cell.v = datenum(cell.v); + } else cell.t = 's'; + + ws[cell_ref] = cell; + } + } + if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); + return ws; +} + +function Workbook() { + if (!(this instanceof Workbook)) return new Workbook(); + this.SheetNames = []; + this.Sheets = {}; +} + +function s2ab(s) { + var buf = new ArrayBuffer(s.length); + var view = new Uint8Array(buf); + for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; + return buf; +} + +export function export_table_to_excel(id) { + var theTable = document.getElementById(id); + console.log('a') + var oo = generateArray(theTable); + var ranges = oo[1]; + + /* original data */ + var data = oo[0]; + var ws_name = "SheetJS"; + console.log(data); + + var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); + + /* add ranges to worksheet */ + // ws['!cols'] = ['apple', 'banan']; + ws['!merges'] = ranges; + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); + + saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx") +} + +function formatJson(jsonData) { + console.log(jsonData) +} + +export function export_json_to_excel(th, jsonData, defaultTitle) { + + /* original data */ + + var data = jsonData; + data.unshift(th); + var ws_name = "SheetJS"; + + var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); + + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); + var title = defaultTitle || '列表' + saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx") +} \ No newline at end of file diff --git a/src/excel/importExcels/导入用户信息模版 (3).xlsx b/src/excel/importExcels/导入用户信息模版 (3).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..81af9afaa2b2e08bfba81bbf12d84ef29b34c932 GIT binary patch literal 9031 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 literal 0 HcmV?d00001 diff --git a/src/router/index.js b/src/router/index.js index 8bcfe2e..282e3ca 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -15,6 +15,7 @@ import OuterAppDetail from "../views/OuterAppDetail"; import NoAuthority from "../views/NoAuthority"; import SetComment from "../views/SetComment" import GetComment from "../views/GetComment" +import ImportData from "../views/ImportData"; Vue.use(VueRouter) @@ -100,6 +101,11 @@ const routes = [ path: "/user/outer/:id/getComment", name: "查看评论", component: GetComment + }, + { + path: "/user/outer/:id/importData", + name: "导入用户信息", + component: ImportData } ] }, diff --git a/src/views/ImportData.vue b/src/views/ImportData.vue new file mode 100644 index 0000000..02719f3 --- /dev/null +++ b/src/views/ImportData.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/src/views/Login.vue b/src/views/Login.vue index 8380c7b..03b9456 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -1,26 +1,43 @@ - - -