From f6057458de42ed700f8808318d42c9f7ff2f3212 Mon Sep 17 00:00:00 2001 From: xiaoxian521 <1923740402@qq.com> Date: Mon, 6 Dec 2021 17:11:15 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=90=8C=E6=AD=A5=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E7=89=88=E5=88=86=E6=94=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 14 +- .env.development | 20 +-- .env.production | 7 +- .eslintrc.js | 6 + README.en-US.md | 4 + README.md | 4 + build/index.ts | 39 +++++ build/proxy.ts | 19 --- build/utils.ts | 32 ---- package.json | 4 + pnpm-lock.yaml | 89 +++++++++- src/api/routes.ts | 4 +- src/api/user.ts | 26 +++ src/assets/avatars.jpg | Bin 0 -> 23391 bytes src/config/index.ts | 8 +- src/layout/components/appMain.vue | 2 +- src/layout/components/navbar.vue | 17 +- src/layout/components/sidebar/breadCrumb.vue | 2 +- src/layout/components/sidebar/horizontal.vue | 13 +- src/layout/components/sidebar/sidebarItem.vue | 2 +- src/layout/components/tag/index.vue | 3 +- src/plugins/i18n/index.ts | 24 +++ src/router/index.ts | 32 +++- src/store/modules/app.ts | 16 +- src/store/modules/multiTags.ts | 15 +- src/store/modules/settings.ts | 9 +- src/store/modules/types.ts | 29 ++++ src/store/modules/user.ts | 84 +++++++++ src/utils/auth.ts | 43 +++++ src/utils/http/README.md | 25 +++ src/utils/http/config.ts | 32 ---- src/utils/http/core.ts | 236 -------------------------- src/utils/http/index.ts | 168 +++++++++++++++++- src/utils/http/types.d.ts | 45 ++--- src/utils/http/utils.ts | 29 ---- src/utils/i18n.ts | 19 --- src/utils/storage/cookie.ts | 53 ------ src/utils/storage/db.ts | 93 ---------- types/global.d.ts | 16 +- vite.config.ts | 55 +++--- 40 files changed, 671 insertions(+), 667 deletions(-) create mode 100644 build/index.ts delete mode 100644 build/proxy.ts delete mode 100644 build/utils.ts create mode 100644 src/api/user.ts create mode 100644 src/assets/avatars.jpg create mode 100644 src/store/modules/user.ts create mode 100644 src/utils/auth.ts create mode 100644 src/utils/http/README.md delete mode 100644 src/utils/http/config.ts delete mode 100644 src/utils/http/core.ts delete mode 100644 src/utils/http/utils.ts delete mode 100644 src/utils/i18n.ts delete mode 100644 src/utils/storage/cookie.ts delete mode 100644 src/utils/storage/db.ts diff --git a/.env b/.env index d9f3a78..da26759 100644 --- a/.env +++ b/.env @@ -1,14 +1,2 @@ -# port +# 项目本地运行端口号 VITE_PORT = 8848 -# title -VITE_TITLE = vue-pure-admin -# version -VITE_VERSION = 2.6.0 -# open -VITE_OPEN = false - -# public path -VITE_PUBLIC_PATH = / - -# Cross-domain proxy, you can configure multiple -VITE_PROXY = [ ["/api", "http://127.0.0.1:3000" ] ] diff --git a/.env.development b/.env.development index d9f3a78..23c4c72 100644 --- a/.env.development +++ b/.env.development @@ -1,14 +1,12 @@ -# port +# 项目本地运行端口号 VITE_PORT = 8848 -# title -VITE_TITLE = vue-pure-admin -# version -VITE_VERSION = 2.6.0 -# open -VITE_OPEN = false - -# public path + +# 开发环境读取配置文件路径 VITE_PUBLIC_PATH = / -# Cross-domain proxy, you can configure multiple -VITE_PROXY = [ ["/api", "http://127.0.0.1:3000" ] ] +# 开发环境代理 +VITE_PROXY_DOMAIN = /api + +# 开发环境后端地址 +VITE_PROXY_DOMAIN_REAL = "http://127.0.0.1:3000" + diff --git a/.env.production b/.env.production index d6e1ff4..eace0a9 100644 --- a/.env.production +++ b/.env.production @@ -1,2 +1,5 @@ -# public path -VITE_PUBLIC_PATH = /manages/ +# 线上环境项目打包路径 +VITE_PUBLIC_PATH = / + +# 线上环境后端地址 +VITE_PROXY_DOMAIN_REAL = "" diff --git a/.eslintrc.js b/.eslintrc.js index f414aa0..ef92312 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -70,6 +70,12 @@ module.exports = { argsIgnorePattern: "^_", varsIgnorePattern: "^_" } + ], + "prettier/prettier": [ + "error", + { + endOfLine: "auto" + } ] } }; diff --git a/README.en-US.md b/README.en-US.md index ad4bac8..94a2518 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -8,6 +8,10 @@ The lite version is based on the shelf extracted from https://github.com/xiaoxian521/vue-pure-admin, which contains the main functions and is more suitable for actual project development +## Docs + + + ## Usage ### Installation dependencies diff --git a/README.md b/README.md index ebc089d..ab5ea62 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ 精简版是基于 https://github.com/xiaoxian521/vue-pure-admin 提炼出的架子,包含主体功能,更适合实际项目开发 +## 文档 + + + ## 用法 ### 安装依赖 diff --git a/build/index.ts b/build/index.ts new file mode 100644 index 0000000..c70fb1c --- /dev/null +++ b/build/index.ts @@ -0,0 +1,39 @@ +// 处理环境变量 +const warpperEnv = (envConf: Recordable): ViteEnv => { + // 此处为默认值,无需修改 + const ret: ViteEnv = { + VITE_PORT: 8848, + VITE_PUBLIC_PATH: "", + VITE_PROXY_DOMAIN: "", + VITE_PROXY_DOMAIN_REAL: "" + }; + + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = + realName === "true" ? true : realName === "false" ? false : realName; + + if (envName === "VITE_PORT") { + realName = Number(realName); + } + ret[envName] = realName; + if (typeof realName === "string") { + process.env[envName] = realName; + } else if (typeof realName === "object") { + process.env[envName] = JSON.stringify(realName); + } + } + return ret; +}; + +// 跨域代理重写 +const regExps = (value: string, reg: string): string => { + return value.replace(new RegExp(reg, "g"), ""); +}; + +// 环境变量 +const loadEnv = (): ViteEnv => { + return import.meta.env; +}; + +export { warpperEnv, regExps, loadEnv }; diff --git a/build/proxy.ts b/build/proxy.ts deleted file mode 100644 index 7cae8eb..0000000 --- a/build/proxy.ts +++ /dev/null @@ -1,19 +0,0 @@ -type ProxyItem = [string, string]; - -type ProxyList = ProxyItem[]; - -const regExps = (value: string, reg: string): string => { - return value.replace(new RegExp(reg, "g"), ""); -}; - -export function createProxy(list: ProxyList = []) { - const ret: any = {}; - for (const [prefix, target] of list) { - ret[prefix] = { - target: target, - changeOrigin: true, - rewrite: (path: string) => regExps(path, prefix) - }; - } - return ret; -} diff --git a/build/utils.ts b/build/utils.ts deleted file mode 100644 index 92f4b8d..0000000 --- a/build/utils.ts +++ /dev/null @@ -1,32 +0,0 @@ -const warpperEnv = (envConf: Recordable): ViteEnv => { - const ret: any = {}; - - for (const envName of Object.keys(envConf)) { - let realName = envConf[envName].replace(/\\n/g, "\n"); - realName = - realName === "true" ? true : realName === "false" ? false : realName; - - if (envName === "VITE_PORT") { - realName = Number(realName); - } - if (envName === "VITE_PROXY" && realName) { - try { - realName = JSON.parse(realName.replace(/'/g, '"')); - } catch (error) { - realName = ""; - } - } - ret[envName] = realName; - if (typeof realName === "string") { - process.env[envName] = realName; - } else if (typeof realName === "object") { - process.env[envName] = JSON.stringify(realName); - } - } - return ret; -}; -const loadEnv = (): ViteEnv => { - return import.meta.env; -}; - -export { loadEnv, warpperEnv }; diff --git a/package.json b/package.json index e09e508..2d30a03 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "element-plus": "1.2.0-beta.3", "element-resize-detector": "^1.2.3", "font-awesome": "^4.7.0", + "js-cookie": "^3.0.1", "lodash-es": "^4.17.21", "lowdb": "^3.0.0", "mitt": "^3.0.0", @@ -49,6 +50,7 @@ "path": "^0.12.7", "path-to-regexp": "^6.2.0", "pinia": "^2.0.0-rc.14", + "qs": "^6.10.2", "remixicon": "^2.5.0", "resize-observer-polyfill": "^1.5.1", "responsive-storage": "^1.0.11", @@ -62,9 +64,11 @@ "@commitlint/cli": "13.1.0", "@commitlint/config-conventional": "13.1.0", "@types/element-resize-detector": "1.1.3", + "@types/js-cookie": "^3.0.1", "@types/mockjs": "1.0.3", "@types/node": "14.14.14", "@types/nprogress": "0.2.0", + "@types/qs": "^6.9.7", "@typescript-eslint/eslint-plugin": "4.31.0", "@typescript-eslint/parser": "4.31.0", "@vitejs/plugin-vue": "^1.9.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b18048d..8a2c85c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,11 @@ specifiers: "@fortawesome/free-solid-svg-icons": ^5.15.4 "@fortawesome/vue-fontawesome": ^3.0.0-5 "@types/element-resize-detector": 1.1.3 + "@types/js-cookie": ^3.0.1 "@types/mockjs": 1.0.3 "@types/node": 14.14.14 "@types/nprogress": 0.2.0 + "@types/qs": ^6.9.7 "@typescript-eslint/eslint-plugin": 4.31.0 "@typescript-eslint/parser": 4.31.0 "@vitejs/plugin-vue": ^1.9.4 @@ -36,6 +38,7 @@ specifiers: eslint-plugin-vue: 7.17.0 font-awesome: ^4.7.0 husky: 7.0.2 + js-cookie: ^3.0.1 lint-staged: 11.1.2 lodash-es: ^4.17.21 lowdb: ^3.0.0 @@ -49,6 +52,7 @@ specifiers: postcss-import: 14.0.0 prettier: 2.3.2 pretty-quick: 3.1.1 + qs: ^6.10.2 remixicon: ^2.5.0 resize-observer-polyfill: ^1.5.1 responsive-storage: ^1.0.11 @@ -86,6 +90,7 @@ dependencies: element-plus: 1.2.0-beta.3_vue@3.2.21 element-resize-detector: 1.2.3 font-awesome: 4.7.0 + js-cookie: 3.0.1 lodash-es: 4.17.21 lowdb: 3.0.0 mitt: 3.0.0 @@ -94,6 +99,7 @@ dependencies: path: 0.12.7 path-to-regexp: 6.2.0 pinia: 2.0.2_typescript@4.4.2+vue@3.2.21 + qs: 6.10.2 remixicon: 2.5.0 resize-observer-polyfill: 1.5.1 responsive-storage: 1.0.11_vue@3.2.21 @@ -107,9 +113,11 @@ devDependencies: "@commitlint/cli": 13.1.0 "@commitlint/config-conventional": 13.1.0 "@types/element-resize-detector": 1.1.3 + "@types/js-cookie": 3.0.1 "@types/mockjs": 1.0.3 "@types/node": 14.14.14 "@types/nprogress": 0.2.0 + "@types/qs": 6.9.7 "@typescript-eslint/eslint-plugin": 4.31.0_f4e6dc0776b3600ef484e3c64a523136 "@typescript-eslint/parser": 4.31.0_eslint@7.30.0+typescript@4.4.2 "@vitejs/plugin-vue": 1.9.4_vite@2.6.14 @@ -1017,6 +1025,13 @@ packages: } dev: true + /@types/js-cookie/3.0.1: + resolution: + { + integrity: sha512-7wg/8gfHltklehP+oyJnZrz9XBuX5ZPP4zB6UsI84utdlkRYLnOm2HfpLXazTwZA+fpGn0ir8tGNgVnMEleBGQ== + } + dev: true + /@types/json-schema/7.0.9: resolution: { @@ -1089,6 +1104,13 @@ packages: } dev: true + /@types/qs/6.9.7: + resolution: + { + integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + } + dev: true + /@types/resolve/1.17.1: resolution: { @@ -1870,6 +1892,16 @@ packages: engines: { node: ">=6" } dev: true + /call-bind/1.0.2: + resolution: + { + integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + } + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + dev: false + /callsites/3.1.0: resolution: { @@ -3379,7 +3411,6 @@ packages: { integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== } - dev: true /functional-red-black-tree/1.0.1: resolution: { integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= } @@ -3401,6 +3432,17 @@ packages: engines: { node: 6.* || 8.* || >= 10.* } dev: true + /get-intrinsic/1.1.1: + resolution: + { + integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + } + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + dev: false + /get-own-enumerable-property-symbols/3.0.2: resolution: { @@ -3586,6 +3628,14 @@ packages: engines: { node: ">=8" } dev: true + /has-symbols/1.0.2: + resolution: + { + integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + } + engines: { node: ">= 0.4" } + dev: false + /has/1.0.3: resolution: { @@ -3594,7 +3644,6 @@ packages: engines: { node: ">= 0.4.0" } dependencies: function-bind: 1.1.1 - dev: true /hash-sum/2.0.0: resolution: @@ -3932,6 +3981,14 @@ packages: resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } dev: true + /js-cookie/3.0.1: + resolution: + { + integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== + } + engines: { node: ">=12" } + dev: false + /js-tokens/4.0.0: resolution: { @@ -4576,6 +4633,13 @@ packages: resolution: { integrity: sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= } dev: true + /object-inspect/1.11.1: + resolution: + { + integrity: sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== + } + dev: false + /on-finished/2.3.0: resolution: { integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= } engines: { node: ">= 0.8" } @@ -5103,6 +5167,16 @@ packages: engines: { node: ">=0.6.0", teleport: ">=0.2.0" } dev: true + /qs/6.10.2: + resolution: + { + integrity: sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== + } + engines: { node: ">=0.6" } + dependencies: + side-channel: 1.0.4 + dev: false + /queue-microtask/1.2.3: resolution: { @@ -5469,6 +5543,17 @@ packages: engines: { node: ">=8" } dev: true + /side-channel/1.0.4: + resolution: + { + integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.11.1 + dev: false + /signal-exit/3.0.5: resolution: { diff --git a/src/api/routes.ts b/src/api/routes.ts index bbd3527..2c6dc6a 100644 --- a/src/api/routes.ts +++ b/src/api/routes.ts @@ -1,5 +1,5 @@ import { http } from "../utils/http"; -export const getAsyncRoutes = (data?: object) => { - return http.request("get", "/getAsyncRoutes", data); +export const getAsyncRoutes = (params?: object) => { + return http.request("get", "/getAsyncRoutes", { params }); }; diff --git a/src/api/user.ts b/src/api/user.ts new file mode 100644 index 0000000..a9bac54 --- /dev/null +++ b/src/api/user.ts @@ -0,0 +1,26 @@ +import { http } from "../utils/http"; + +interface userType extends Promise { + svg?: string; + code?: number; + info?: object; +} + +// 获取验证码 +export const getVerify = (): userType => { + return http.request("get", "/captcha"); +}; + +// 登录 +export const getLogin = (data: object) => { + return http.request("post", "/login", { data }); +}; + +// 刷新token +export const refreshToken = (data: object) => { + return http.request("post", "/refreshToken", { data }); +}; + +// export const searchVague = (data: object) => { +// return http.request("post", "/searchVague", { data }); +// }; diff --git a/src/assets/avatars.jpg b/src/assets/avatars.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0226ae4d57eae4e423b0e29d55bf301895958d7 GIT binary patch literal 23391 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 h6q^>sM1=cdQ|GCSV_$ { config = Object.assign(config, cfg); @@ -30,10 +33,7 @@ export const getServerConfig = async (app: App): Promise => { return axios({ baseURL: "", method: "get", - url: - process.env.NODE_ENV === "production" - ? "/manages/serverConfig.json" - : "/serverConfig.json" + url: `${VITE_PUBLIC_PATH}serverConfig.json` }) .then(({ data: config }) => { let $config = app.config.globalProperties.$config; diff --git a/src/layout/components/appMain.vue b/src/layout/components/appMain.vue index d1ee605..35211bb 100644 --- a/src/layout/components/appMain.vue +++ b/src/layout/components/appMain.vue @@ -75,7 +75,7 @@ const transitionMain = defineComponent({ hideTabs && layout ? 'padding-top: 48px;' : '', !hideTabs && layout ? 'padding-top: 85px;' : '', hideTabs && !layout ? 'padding-top: 48px' : '', - !hideTabs && !layout ? 'padding-top: 98px;' : '' + !hideTabs && !layout ? 'padding-top: 85px;' : '' ]" > diff --git a/src/layout/components/navbar.vue b/src/layout/components/navbar.vue index 4064e3e..06a7aff 100644 --- a/src/layout/components/navbar.vue +++ b/src/layout/components/navbar.vue @@ -1,17 +1,18 @@