From 60a293514d0afd6afbfcd5f5185ae906cb35271f Mon Sep 17 00:00:00 2001 From: lin-xin <2981207131@qq.com> Date: Sat, 17 Dec 2022 13:37:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=AF=BC=E5=87=BAexcel=EF=BC=8C=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E5=81=9A=E4=BA=86=E4=B8=80=E4=BA=9B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 1 + package-lock.json | 61 +++++++ package.json | 3 +- public/template.xlsx | Bin 0 -> 10163 bytes src/App.vue | 8 +- src/assets/css/color-dark.css | 7 +- src/assets/css/main.css | 64 -------- src/components/sidebar.vue | 289 ++++++++++++++++++---------------- src/main.ts | 39 ++--- src/router/index.ts | 178 ++++++++++++--------- src/views/dashboard.vue | 11 +- src/views/export.vue | 98 ++++++++++++ src/views/form.vue | 268 +++++++++++++++---------------- src/views/import.vue | 118 ++++++++++++++ src/views/table.vue | 2 +- src/views/upload.vue | 100 +++++------- 16 files changed, 740 insertions(+), 507 deletions(-) create mode 100644 public/template.xlsx create mode 100644 src/views/export.vue create mode 100644 src/views/import.vue diff --git a/components.d.ts b/components.d.ts index a9b470e..25a75fb 100644 --- a/components.d.ts +++ b/components.d.ts @@ -24,6 +24,7 @@ declare module '@vue/runtime-core' { ElIcon: typeof import('element-plus/es')['ElIcon'] ElImage: typeof import('element-plus/es')['ElImage'] ElInput: typeof import('element-plus/es')['ElInput'] + ElLink: typeof import('element-plus/es')['ElLink'] ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElOption: typeof import('element-plus/es')['ElOption'] diff --git a/package-lock.json b/package-lock.json index 641430d..eeec21e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -322,6 +322,11 @@ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + }, "anymatch": { "version": "3.1.2", "resolved": "https://repo.huaweicloud.com/repository/npm/anymatch/-/anymatch-3.1.2.tgz", @@ -381,6 +386,15 @@ "fill-range": "^7.0.1" } }, + "cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://repo.huaweicloud.com/repository/npm/chokidar/-/chokidar-3.5.3.tgz", @@ -397,6 +411,11 @@ "readdirp": "~3.6.0" } }, + "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==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://repo.huaweicloud.com/repository/npm/combined-stream/-/combined-stream-1.0.8.tgz", @@ -410,6 +429,11 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/core-js-pure/-/core-js-pure-3.24.1.tgz", "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==" }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, "cropperjs": { "version": "1.5.12", "resolved": "https://repo.huaweicloud.com/repository/npm/cropperjs/-/cropperjs-1.5.12.tgz", @@ -699,6 +723,11 @@ "mime-types": "^2.1.12" } }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, "fsevents": { "version": "2.3.2", "resolved": "https://repo.huaweicloud.com/repository/npm/fsevents/-/fsevents-2.3.2.tgz", @@ -1024,6 +1053,14 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, + "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" + } + }, "strip-literal": { "version": "0.4.0", "resolved": "https://repo.huaweicloud.com/repository/npm/strip-literal/-/strip-literal-0.4.0.tgz", @@ -1232,6 +1269,30 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz", "integrity": "sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==", "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==" + }, + "xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "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" + } } } } diff --git a/package.json b/package.json index c104840..e0fad80 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "vue-cropperjs": "^5.0.0", "vue-router": "^4.1.3", "vue-schart": "^2.0.0", - "wangeditor": "^4.7.15" + "wangeditor": "^4.7.15", + "xlsx": "^0.18.5" }, "devDependencies": { "@vitejs/plugin-vue": "^3.0.0", diff --git a/public/template.xlsx b/public/template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5d17cf71510bddf174eddf79cfd612017421f122 GIT binary patch literal 10163 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 PKn93?o--8D%hUe=g`SFR literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue index aade1f9..f0fca28 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,7 +1,13 @@ + diff --git a/src/main.ts b/src/main.ts index a06240b..2311764 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,34 +1,27 @@ -import {createApp} from 'vue' -import { createPinia } from 'pinia' -import ElementPlus from 'element-plus' -import * as ElementPlusIconsVue from '@element-plus/icons-vue' -import zhCn from 'element-plus/es/locale/lang/zh-cn' -import App from './App.vue' -import router from './router' -import { usePermissStore } from './store/permiss' -import 'element-plus/dist/index.css' -import './assets/css/icon.css' +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; +import * as ElementPlusIconsVue from '@element-plus/icons-vue'; +import App from './App.vue'; +import router from './router'; +import { usePermissStore } from './store/permiss'; +import './assets/css/icon.css'; +const app = createApp(App); +app.use(createPinia()); +app.use(router); -const app = createApp(App) - -app.use(createPinia()) -app.use(router) -app.use(ElementPlus, { - locale: zhCn, -}) // 注册elementplus图标 for (const [key, component] of Object.entries(ElementPlusIconsVue)) { - app.component(key, component) + app.component(key, component); } // 自定义权限指令 -const permiss = usePermissStore() +const permiss = usePermissStore(); app.directive('permiss', { mounted(el, binding) { - if(!permiss.key.includes(String(binding.value))){ + if (!permiss.key.includes(String(binding.value))) { el['hidden'] = true; } - } -}) + }, +}); -app.mount('#app') \ No newline at end of file +app.mount('#app'); diff --git a/src/router/index.ts b/src/router/index.ts index 3e06500..02e9668 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,133 +1,165 @@ -import {createRouter, createWebHashHistory, RouteRecordRaw} from "vue-router"; -import { usePermissStore } from '../store/permiss' -import Home from "../views/home.vue"; +import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'; +import { usePermissStore } from '../store/permiss'; +import Home from '../views/home.vue'; -const routes:RouteRecordRaw[] = [ +const routes: RouteRecordRaw[] = [ { path: '/', - redirect: '/dashboard' - }, { - path: "/", - name: "Home", + redirect: '/dashboard', + }, + { + path: '/', + name: 'Home', component: Home, children: [ { - path: "/dashboard", - name: "dashboard", + path: '/dashboard', + name: 'dashboard', meta: { title: '系统首页', - permiss: '1' + permiss: '1', }, - component: () => import ( /* webpackChunkName: "dashboard" */ "../views/dashboard.vue") - }, { - path: "/table", - name: "basetable", + component: () => import(/* webpackChunkName: "dashboard" */ '../views/dashboard.vue'), + }, + { + path: '/table', + name: 'basetable', meta: { title: '表格', - permiss: '2' + permiss: '2', }, - component: () => import ( /* webpackChunkName: "table" */ "../views/table.vue") - }, { - path: "/charts", - name: "basecharts", + component: () => import(/* webpackChunkName: "table" */ '../views/table.vue'), + }, + { + path: '/charts', + name: 'basecharts', meta: { title: '图表', - permiss: '11' + permiss: '11', }, - component: () => import ( /* webpackChunkName: "charts" */ "../views/charts.vue") - }, { - path: "/form", - name: "baseform", + component: () => import(/* webpackChunkName: "charts" */ '../views/charts.vue'), + }, + { + path: '/form', + name: 'baseform', meta: { title: '表单', - permiss: '5' + permiss: '5', }, - component: () => import ( /* webpackChunkName: "form" */ "../views/form.vue") - }, { - path: "/tabs", - name: "tabs", + component: () => import(/* webpackChunkName: "form" */ '../views/form.vue'), + }, + { + path: '/tabs', + name: 'tabs', meta: { title: 'tab标签', - permiss: '3' + permiss: '3', }, - component: () => import ( /* webpackChunkName: "tabs" */ "../views/tabs.vue") - }, { - path: "/donate", - name: "donate", + component: () => import(/* webpackChunkName: "tabs" */ '../views/tabs.vue'), + }, + { + path: '/donate', + name: 'donate', meta: { title: '鼓励作者', - permiss: '14' + permiss: '14', }, - component: () => import ( /* webpackChunkName: "donate" */ "../views/donate.vue") - }, { - path: "/permission", - name: "permission", + component: () => import(/* webpackChunkName: "donate" */ '../views/donate.vue'), + }, + { + path: '/permission', + name: 'permission', meta: { title: '权限管理', - permiss: '13' + permiss: '13', }, - component: () => import ( /* webpackChunkName: "permission" */ "../views/permission.vue") - }, { - path: "/upload", - name: "upload", + component: () => import(/* webpackChunkName: "permission" */ '../views/permission.vue'), + }, + { + path: '/upload', + name: 'upload', meta: { title: '上传插件', - permiss: '6' + permiss: '6', }, - component: () => import ( /* webpackChunkName: "upload" */ "../views/upload.vue") - }, { - path: "/icon", - name: "icon", + component: () => import(/* webpackChunkName: "upload" */ '../views/upload.vue'), + }, + { + path: '/icon', + name: 'icon', meta: { title: '自定义图标', - permiss: '10' + permiss: '10', }, - component: () => import ( /* webpackChunkName: "icon" */ "../views/icon.vue") - }, { + component: () => import(/* webpackChunkName: "icon" */ '../views/icon.vue'), + }, + { path: '/user', name: 'user', meta: { - title: '个人中心' + title: '个人中心', }, - component: () => import (/* webpackChunkName: "user" */ '../views/user.vue') - }, { + component: () => import(/* webpackChunkName: "user" */ '../views/user.vue'), + }, + { path: '/editor', name: 'editor', meta: { title: '富文本编辑器', - permiss: '8' + permiss: '8', }, - component: () => import (/* webpackChunkName: "editor" */ '../views/editor.vue') - }, { + component: () => import(/* webpackChunkName: "editor" */ '../views/editor.vue'), + }, + { path: '/markdown', name: 'markdown', meta: { title: 'markdown编辑器', - permiss: '9' + permiss: '9', }, - component: () => import (/* webpackChunkName: "markdown" */ '../views/markdown.vue') - } - ] - }, { - path: "/login", - name: "Login", + component: () => import(/* webpackChunkName: "markdown" */ '../views/markdown.vue'), + }, + { + path: '/export', + name: 'export', + meta: { + title: '导出Excel', + permiss: '2', + }, + component: () => import(/* webpackChunkName: "export" */ '../views/export.vue'), + }, + { + path: '/import', + name: 'import', + meta: { + title: '导入Excel', + permiss: '2', + }, + component: () => import(/* webpackChunkName: "import" */ '../views/import.vue'), + }, + ], + }, + { + path: '/login', + name: 'Login', meta: { - title: '登录' + title: '登录', }, - component: () => import ( /* webpackChunkName: "login" */ "../views/login.vue") - }, { + component: () => import(/* webpackChunkName: "login" */ '../views/login.vue'), + }, + { path: '/403', name: '403', meta: { - title: '没有权限' + title: '没有权限', }, - component: () => import (/* webpackChunkName: "403" */ '../views/403.vue') + component: () => import(/* webpackChunkName: "403" */ '../views/403.vue'), }, ]; const router = createRouter({ history: createWebHashHistory(), - routes + routes, }); router.beforeEach((to, from, next) => { @@ -144,4 +176,4 @@ router.beforeEach((to, from, next) => { } }); -export default router; \ No newline at end of file +export default router; diff --git a/src/views/dashboard.vue b/src/views/dashboard.vue index 6ba78fa..5e6d039 100644 --- a/src/views/dashboard.vue +++ b/src/views/dashboard.vue @@ -26,10 +26,13 @@ Vue - JavaScript - CSS - HTML - + + TypeScript + + CSS + + HTML + diff --git a/src/views/export.vue b/src/views/export.vue new file mode 100644 index 0000000..21ecf6b --- /dev/null +++ b/src/views/export.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/views/form.vue b/src/views/form.vue index 2744e68..75609ae 100644 --- a/src/views/form.vue +++ b/src/views/form.vue @@ -1,66 +1,66 @@ diff --git a/src/views/import.vue b/src/views/import.vue new file mode 100644 index 0000000..e0ca8c3 --- /dev/null +++ b/src/views/import.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/views/table.vue b/src/views/table.vue index cd9453f..6888ccb 100644 --- a/src/views/table.vue +++ b/src/views/table.vue @@ -177,7 +177,7 @@ const saveEdit = () => { font-size: 14px; } .red { - color: #ff0000; + color: #F56C6C; } .mr10 { margin-right: 10px; diff --git a/src/views/upload.vue b/src/views/upload.vue index f935ec6..960edc3 100644 --- a/src/views/upload.vue +++ b/src/views/upload.vue @@ -1,76 +1,48 @@ From f70c93715b5bf1c0804d9eecaedac008d9aec86d Mon Sep 17 00:00:00 2001 From: lin-xin <2981207131@qq.com> Date: Sat, 17 Dec 2022 13:51:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.ts b/src/main.ts index 2311764..43ae5c7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,6 +4,7 @@ import * as ElementPlusIconsVue from '@element-plus/icons-vue'; import App from './App.vue'; import router from './router'; import { usePermissStore } from './store/permiss'; +import 'element-plus/dist/index.css'; import './assets/css/icon.css'; const app = createApp(App);