From 761b0e5ec261e4b5e78dba18152e8ab04f422201 Mon Sep 17 00:00:00 2001 From: xiaoxian521 <1923740402@qq.com> Date: Fri, 28 Oct 2022 15:32:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=90=E4=BA=A4=E9=9D=9E=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=E7=89=88=E6=9C=AC=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/extensions.json | 1 - .vscode/settings.json | 8 - README.en-US.md | 5 +- README.md | 5 +- build/cdn.ts | 5 - build/plugins.ts | 8 - locales/en.yaml | 43 ---- locales/zh-CN.yaml | 43 ---- mock/asyncRoutes.ts | 8 +- package.json | 4 +- pnpm-lock.yaml | 211 ------------------ public/serverConfig.json | 1 - src/App.vue | 3 +- src/assets/avatars.jpg | Bin 23391 -> 0 bytes src/assets/svg/globalization.svg | 1 - ...{mdi_keyboard_esc.svg => keyboard_esc.svg} | 0 src/layout/components/navbar.vue | 66 +----- src/layout/components/screenfull/index.vue | 6 +- .../search/components/SearchFooter.vue | 2 +- .../search/components/SearchModal.vue | 3 +- .../search/components/SearchResult.vue | 5 +- src/layout/components/sidebar/breadCrumb.vue | 5 +- src/layout/components/sidebar/horizontal.vue | 65 +----- src/layout/components/sidebar/mixNav.vue | 68 +----- src/layout/components/sidebar/sidebarItem.vue | 17 +- src/layout/components/tag/index.vue | 16 +- src/layout/frameView.vue | 8 +- src/layout/hooks/useLayout.ts | 6 - src/layout/hooks/useNav.ts | 30 +-- src/layout/hooks/useTag.ts | 19 +- src/layout/hooks/useTranslationLang.ts | 37 --- src/layout/types.ts | 2 +- src/main.ts | 3 +- src/plugins/i18n.ts | 74 ------ src/plugins/vxe-table/index.ts | 18 +- src/router/index.ts | 6 +- src/router/modules/error.ts | 9 +- src/router/modules/home.ts | 5 +- src/router/modules/remaining.ts | 5 +- src/store/modules/user.ts | 1 + src/style/sidebar.scss | 13 -- src/utils/README.md | 5 - src/utils/http/README.md | 25 --- src/utils/responsive.ts | 4 - src/views/login/index.vue | 64 +----- src/views/login/utils/rule.ts | 7 +- src/views/welcome/index.vue | 2 +- types/global.d.ts | 1 - types/index.ts | 4 - vite.config.ts | 2 +- 50 files changed, 95 insertions(+), 854 deletions(-) delete mode 100644 locales/en.yaml delete mode 100644 locales/zh-CN.yaml delete mode 100644 src/assets/avatars.jpg delete mode 100644 src/assets/svg/globalization.svg rename src/assets/svg/{mdi_keyboard_esc.svg => keyboard_esc.svg} (100%) delete mode 100644 src/layout/hooks/useTranslationLang.ts delete mode 100644 src/plugins/i18n.ts delete mode 100644 src/utils/README.md delete mode 100644 src/utils/http/README.md diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 9ae6dc7..041d9c9 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,7 +7,6 @@ "bradlc.vscode-tailwindcss", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", - "lokalise.i18n-ally", "redhat.vscode-yaml", "csstools.postcss", "mikestead.dotenv", diff --git a/.vscode/settings.json b/.vscode/settings.json index bb65d68..1aa0ecb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,13 +27,5 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, - "i18n-ally.localesPaths": "locales", - "i18n-ally.keystyle": "nested", - "i18n-ally.sortKeys": true, - "i18n-ally.namespace": true, - "i18n-ally.enabledParsers": ["yaml", "js"], - "i18n-ally.sourceLanguage": "en", - "i18n-ally.displayLanguage": "zh-CN", - "i18n-ally.enabledFrameworks": ["vue"], "iconify.excludes": ["el"] } diff --git a/README.en-US.md b/README.en-US.md index 5960cc2..6bca145 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -1,4 +1,4 @@ -

vue-pure-admin Lite Edition

+

vue-pure-admin Lite Edition(no i18n version)

[![license](https://img.shields.io/github/license/xiaoxian521/vue-pure-admin.svg)](LICENSE) @@ -6,7 +6,7 @@ ## introduce -The lite version is based on the shelf extracted from [vue-pure-admin](https://github.com/xiaoxian521/vue-pure-admin), which contains the main functions and is more suitable for actual project development, the packaged size is only `3MB`, and will permanently sync the full version of the code +The Lite version is based on the shelf extracted from [vue-pure-admin](https://github.com/xiaoxian521/vue-pure-admin), including the main functions, which is more suitable for actual project development, and the packaged size is lower than ` 3MB`, and will permanently sync the full version of the code. After enabling `brotli` compression and `cdn` to replace the native library mode, the package size is less than `500kb` ## Supporting Video @@ -42,7 +42,6 @@ bilibili: https://www.bilibili.com/video/BV1534y1S7HV/ ## ⚠️ Attention - The Lite version does not accept any issues and prs. If you have any questions, please go to the full version https://github.com/xiaoxian521/vue-pure-admin/issues/new/choose to mention, thank you! ! ! -- Don't use the `delete-i18n` branch code, this branch is just for you to completely delete the internationalized references, it won't sync the code! ! ! [Completely remove the internationalization tutorial](https://www.bilibili.com/video/BV1Ru411B7k3/), please be sure to use the code from the `main` branch! ! ! ## License diff --git a/README.md b/README.md index f2e626b..f8dcaa6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

vue-pure-admin精简版

+

vue-pure-admin精简版(非国际化版本)

[![license](https://img.shields.io/github/license/xiaoxian521/vue-pure-admin.svg)](LICENSE) @@ -6,7 +6,7 @@ ## 介绍 -精简版是基于 [vue-pure-admin](https://github.com/xiaoxian521/vue-pure-admin) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小仅 `3MB`,并且会永久同步完整版的代码 +精简版是基于 [vue-pure-admin](https://github.com/xiaoxian521/vue-pure-admin) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小低于 `3MB`,并且会永久同步完整版的代码。开启 `brotli` 压缩和 `cdn` 替换本地库模式后,打包大小低于 `500kb` ## 配套视频 @@ -54,7 +54,6 @@ pnpm remove 包名 ## ⚠️ 注意 - 精简版不接受任何 `issues` 和 `pr`,如果有问题请到完整版 [issues](https://github.com/xiaoxian521/vue-pure-admin/issues/new/choose) 去提,谢谢!!! -- 不要使用 `delete-i18n` 分支代码,这个分支只是给你们完全删除国际化的参考,不会同步代码的!!! [完全删除国际化教程](https://www.bilibili.com/video/BV1Ru411B7k3/) ,请务必使用 `main` 分支的代码!!! ## 许可证 diff --git a/build/cdn.ts b/build/cdn.ts index 20f24ad..abf71b7 100644 --- a/build/cdn.ts +++ b/build/cdn.ts @@ -20,11 +20,6 @@ export const cdn = importToCDN({ var: "VueRouter", path: "vue-router.global.min.js" }, - { - name: "vue-i18n", - var: "VueI18n", - path: "vue-i18n.runtime.global.prod.min.js" - }, // 项目中没有直接安装vue-demi,但是pinia用到了,所以需要在引入pinia前引入vue-demi(https://github.com/vuejs/pinia/blob/v2/packages/pinia/package.json#L77) { name: "vue-demi", diff --git a/build/plugins.ts b/build/plugins.ts index f9a3a8a..4253c91 100644 --- a/build/plugins.ts +++ b/build/plugins.ts @@ -1,5 +1,4 @@ import { cdn } from "./cdn"; -import { resolve } from "path"; import vue from "@vitejs/plugin-vue"; import { viteBuildInfo } from "./info"; import svgLoader from "vite-svg-loader"; @@ -7,7 +6,6 @@ import legacy from "@vitejs/plugin-legacy"; import vueJsx from "@vitejs/plugin-vue-jsx"; import { viteMockServe } from "vite-plugin-mock"; import { configCompressPlugin } from "./compress"; -import VueI18n from "@intlify/vite-plugin-vue-i18n"; // import ElementPlus from "unplugin-element-plus/vite"; import { visualizer } from "rollup-plugin-visualizer"; import removeConsole from "vite-plugin-remove-console"; @@ -25,12 +23,6 @@ export function getPluginsList( const lifecycle = process.env.npm_lifecycle_event; return [ vue(), - // https://github.com/intlify/bundle-tools/tree/main/packages/vite-plugin-vue-i18n - VueI18n({ - runtimeOnly: true, - compositionOnly: true, - include: [resolve("locales/**")] - }), // jsx、tsx语法支持 vueJsx(), VITE_CDN ? cdn : null, diff --git a/locales/en.yaml b/locales/en.yaml deleted file mode 100644 index 5d8c6bf..0000000 --- a/locales/en.yaml +++ /dev/null @@ -1,43 +0,0 @@ -buttons: - hsLoginOut: LoginOut - hsfullscreen: FullScreen - hsexitfullscreen: ExitFullscreen - hsrefreshRoute: RefreshRoute - hslogin: Login - hsadd: Add - hsmark: Mark/Cancel - hssave: Save - hssearch: Search - hsexpendAll: Expand All - hscollapseAll: Collapse All - hssystemSet: Open ProjectConfig - hsdelete: Delete - hsreload: Reload - hscloseCurrentTab: Close CurrentTab - hscloseLeftTabs: Close LeftTabs - hscloseRightTabs: Close RightTabs - hscloseOtherTabs: Close OtherTabs - hscloseAllTabs: Close AllTabs - hswholeFullScreen: Whole FullScreen - hswholeExitFullScreen: Whole ExitFullScreen - hscontentFullScreen: Content FullScreen - hscontentExitFullScreen: Content ExitFullScreen -menus: - hshome: Home - hslogin: Login - hsabnormal: Abnormal Page - hsfourZeroFour: "404" - hsfourZeroOne: "403" - hsFive: "500" - permission: Permission Manage - permissionPage: Page Permission - permissionButton: Button Permission -status: - hsLoad: Loading... -login: - username: Username - password: Password - login: Login - usernameReg: Please enter username - passwordReg: Please enter password - passwordRuleReg: The password format should be any combination of 8-18 digits diff --git a/locales/zh-CN.yaml b/locales/zh-CN.yaml deleted file mode 100644 index 64f52d9..0000000 --- a/locales/zh-CN.yaml +++ /dev/null @@ -1,43 +0,0 @@ -buttons: - hsLoginOut: 退出系统 - hsfullscreen: 全屏 - hsexitfullscreen: 退出全屏 - hsrefreshRoute: 刷新路由 - hslogin: 登录 - hsadd: 新增 - hsmark: 标记/取消 - hssave: 保存 - hssearch: 搜索 - hsexpendAll: 全部展开 - hscollapseAll: 全部折叠 - hssystemSet: 打开项目配置 - hsdelete: 删除 - hsreload: 重新加载 - hscloseCurrentTab: 关闭当前标签页 - hscloseLeftTabs: 关闭左侧标签页 - hscloseRightTabs: 关闭右侧标签页 - hscloseOtherTabs: 关闭其他标签页 - hscloseAllTabs: 关闭全部标签页 - hswholeFullScreen: 整体页面全屏 - hswholeExitFullScreen: 整体页面退出全屏 - hscontentFullScreen: 内容区全屏 - hscontentExitFullScreen: 内容区退出全屏 -menus: - hshome: 首页 - hslogin: 登录 - hsabnormal: 异常页面 - hsfourZeroFour: "404" - hsfourZeroOne: "403" - hsFive: "500" - permission: 权限管理 - permissionPage: 页面权限 - permissionButton: 按钮权限 -status: - hsLoad: 加载中... -login: - username: 账号 - password: 密码 - login: 登录 - usernameReg: 请输入账号 - passwordReg: 请输入密码 - passwordRuleReg: 密码格式应为8-18位数字、字母、符号的任意两种组合 diff --git a/mock/asyncRoutes.ts b/mock/asyncRoutes.ts index 2c1e638..da6a559 100644 --- a/mock/asyncRoutes.ts +++ b/mock/asyncRoutes.ts @@ -10,7 +10,7 @@ import { MockMethod } from "vite-plugin-mock"; const permissionRouter = { path: "/permission", meta: { - title: "menus.permission", + title: "权限管理", icon: "lollipop", rank: 10 }, @@ -19,15 +19,15 @@ const permissionRouter = { path: "/permission/page/index", name: "PermissionPage", meta: { - roles: ["admin", "common"], - title: "menus.permissionPage" + title: "页面权限", + roles: ["admin", "common"] } }, { path: "/permission/button/index", name: "PermissionButton", meta: { - title: "menus.permissionButton", + title: "按钮权限", roles: ["admin", "common"], auths: ["btn_add", "btn_edit", "btn_delete"] } diff --git a/package.json b/package.json index 6b466cf..e2e742d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "preview:build": "pnpm build && vite preview", "typecheck": "tsc --noEmit && vue-tsc --noEmit --skipLibCheck", "cloc": "NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML", - "clean:cache": "rm -rf node_modules && rm -rf .eslintcache && pnpm install", + "clean:cache": "rm -rf node_modules && rm -rf .eslintcache && npm cache clean --force && pnpm install", "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock,build}/**/*.{vue,js,ts,tsx}\" --fix", "lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"", "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,css,scss,postcss,less}\" --cache --cache-location node_modules/.cache/stylelint/", @@ -55,7 +55,6 @@ "resize-observer-polyfill": "^1.5.1", "responsive-storage": "^2.1.0", "vue": "^3.2.40", - "vue-i18n": "^9.2.2", "vue-router": "^4.1.6", "vue-types": "^4.2.1", "vxe-table": "^4.3.2", @@ -67,7 +66,6 @@ "@iconify-icons/ep": "^1.2.7", "@iconify-icons/ri": "^1.2.3", "@iconify/vue": "^3.2.1", - "@intlify/vite-plugin-vue-i18n": "^6.0.3", "@pureadmin/theme": "^2.4.0", "@types/element-resize-detector": "1.1.3", "@types/js-cookie": "^3.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09bee8a..0b4b64a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,6 @@ specifiers: "@iconify-icons/ep": ^1.2.7 "@iconify-icons/ri": ^1.2.3 "@iconify/vue": ^3.2.1 - "@intlify/vite-plugin-vue-i18n": ^6.0.3 "@pureadmin/components": ^1.1.0 "@pureadmin/descriptions": ^1.1.0 "@pureadmin/table": ^1.2.0 @@ -88,7 +87,6 @@ specifiers: vite-svg-loader: ^3.6.0 vue: ^3.2.40 vue-eslint-parser: ^8.2.0 - vue-i18n: ^9.2.2 vue-router: ^4.1.6 vue-tsc: ^0.40.13 vue-types: ^4.2.1 @@ -123,7 +121,6 @@ dependencies: resize-observer-polyfill: 1.5.1 responsive-storage: 2.1.0 vue: 3.2.41 - vue-i18n: 9.2.2_vue@3.2.41 vue-router: 4.1.6_vue@3.2.41 vue-types: 4.2.1_vue@3.2.41 vxe-table: 4.3.5_vue@3.2.41+xe-utils@3.5.7 @@ -135,7 +132,6 @@ devDependencies: "@iconify-icons/ep": 1.2.9 "@iconify-icons/ri": 1.2.3 "@iconify/vue": 3.2.1_vue@3.2.41 - "@intlify/vite-plugin-vue-i18n": 6.0.3_vite@3.1.8+vue-i18n@9.2.2 "@pureadmin/theme": 2.4.0 "@types/element-resize-detector": 1.1.3 "@types/js-cookie": 3.0.2 @@ -988,131 +984,6 @@ packages: vue: 3.2.41 dev: true - /@intlify/bundle-utils/3.2.1_vue-i18n@9.2.2: - resolution: - { - integrity: sha512-rf4cLBOnbqmpXVcCdcYHilZpMt1m82syh3WLBJlZvGxN2KkH9HeHVH4+bnibF/SDXCHNh6lM6wTpS/qw+PkcMg== - } - engines: { node: ">= 12" } - peerDependencies: - petite-vue-i18n: "*" - vue-i18n: "*" - peerDependenciesMeta: - petite-vue-i18n: - optional: true - vue-i18n: - optional: true - dependencies: - "@intlify/message-compiler": 9.3.0-beta.6 - "@intlify/shared": 9.3.0-beta.6 - jsonc-eslint-parser: 1.4.1 - source-map: 0.6.1 - vue-i18n: 9.2.2_vue@3.2.41 - yaml-eslint-parser: 0.3.2 - dev: true - - /@intlify/core-base/9.2.2: - resolution: - { - integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA== - } - engines: { node: ">= 14" } - dependencies: - "@intlify/devtools-if": 9.2.2 - "@intlify/message-compiler": 9.2.2 - "@intlify/shared": 9.2.2 - "@intlify/vue-devtools": 9.2.2 - dev: false - - /@intlify/devtools-if/9.2.2: - resolution: - { - integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg== - } - engines: { node: ">= 14" } - dependencies: - "@intlify/shared": 9.2.2 - dev: false - - /@intlify/message-compiler/9.2.2: - resolution: - { - integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA== - } - engines: { node: ">= 14" } - dependencies: - "@intlify/shared": 9.2.2 - source-map: 0.6.1 - dev: false - - /@intlify/message-compiler/9.3.0-beta.6: - resolution: - { - integrity: sha512-3PJqRJoqvFHExA9DCkf7fZYKbvYne1tYQ0fptJAhUOZsELarh8wr4aPLKWCkQSRuutdrtZ/n5CcPgJgUmVthDw== - } - engines: { node: ">= 14" } - dependencies: - "@intlify/shared": 9.3.0-beta.6 - source-map: 0.6.1 - dev: true - - /@intlify/shared/9.2.2: - resolution: - { - integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q== - } - engines: { node: ">= 14" } - dev: false - - /@intlify/shared/9.3.0-beta.6: - resolution: - { - integrity: sha512-ITA1R4tvJYwZXT5x6QCSwxcwQ4dU52zrzVm/EUbgsp8oWzYS1xexBrxyNM80PSQudYvL2rvcZJKQ7yBh7b0LkQ== - } - engines: { node: ">= 14" } - dev: true - - /@intlify/vite-plugin-vue-i18n/6.0.3_vite@3.1.8+vue-i18n@9.2.2: - resolution: - { - integrity: sha512-6SgNzPAOCR90wvt368lKzi7f/5ZEWJn22UCGvhFsP3XvKqlF3cVzojahgQ6o+LTdCkExeM6wPgd+haFf28E9VQ== - } - engines: { node: ">= 14.6" } - peerDependencies: - petite-vue-i18n: "*" - vite: ^2.9.0 || ^3.0.0 - vue-i18n: "*" - peerDependenciesMeta: - petite-vue-i18n: - optional: true - vite: - optional: true - vue-i18n: - optional: true - dependencies: - "@intlify/bundle-utils": 3.2.1_vue-i18n@9.2.2 - "@intlify/shared": 9.3.0-beta.6 - "@rollup/pluginutils": 4.2.1 - debug: 4.3.4 - fast-glob: 3.2.12 - source-map: 0.6.1 - vite: 3.1.8_sass@1.55.0+terser@5.15.1 - vue-i18n: 9.2.2_vue@3.2.41 - transitivePeerDependencies: - - supports-color - dev: true - - /@intlify/vue-devtools/9.2.2: - resolution: - { - integrity: sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg== - } - engines: { node: ">= 14" } - dependencies: - "@intlify/core-base": 9.2.2 - "@intlify/shared": 9.2.2 - dev: false - /@jridgewell/gen-mapping/0.1.1: resolution: { @@ -2060,17 +1931,6 @@ packages: through: 2.3.8 dev: true - /acorn-jsx/5.3.2_acorn@7.4.1: - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - } - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 7.4.1 - dev: true - /acorn-jsx/5.3.2_acorn@8.8.0: resolution: { @@ -3736,16 +3596,6 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/2.1.0: - resolution: - { - integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - } - engines: { node: ">=6" } - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - /eslint-utils/3.0.0_eslint@8.25.0: resolution: { @@ -3759,14 +3609,6 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-visitor-keys/1.3.0: - resolution: - { - integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - } - engines: { node: ">=4" } - dev: true - /eslint-visitor-keys/2.1.0: resolution: { @@ -3833,18 +3675,6 @@ packages: - supports-color dev: true - /espree/6.2.1: - resolution: - { - integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - } - engines: { node: ">=6.0.0" } - dependencies: - acorn: 7.4.1 - acorn-jsx: 5.3.2_acorn@7.4.1 - eslint-visitor-keys: 1.3.0 - dev: true - /espree/9.4.0: resolution: { @@ -4819,20 +4649,6 @@ packages: hasBin: true dev: true - /jsonc-eslint-parser/1.4.1: - resolution: - { - integrity: sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg== - } - engines: { node: ">=8.10.0" } - dependencies: - acorn: 7.4.1 - eslint-utils: 2.1.0 - eslint-visitor-keys: 1.3.0 - espree: 6.2.1 - semver: 6.3.0 - dev: true - /jsonfile/6.1.0: resolution: { @@ -7670,22 +7486,6 @@ packages: - supports-color dev: true - /vue-i18n/9.2.2_vue@3.2.41: - resolution: - { - integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ== - } - engines: { node: ">= 14" } - peerDependencies: - vue: ^3.0.0 - dependencies: - "@intlify/core-base": 9.2.2 - "@intlify/shared": 9.2.2 - "@intlify/vue-devtools": 9.2.2 - "@vue/devtools-api": 6.4.5 - vue: 3.2.41 - dev: false - /vue-router/4.1.6_vue@3.2.41: resolution: { @@ -7867,17 +7667,6 @@ packages: } dev: true - /yaml-eslint-parser/0.3.2: - resolution: - { - integrity: sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg== - } - dependencies: - eslint-visitor-keys: 1.3.0 - lodash: 4.17.21 - yaml: 1.10.2 - dev: true - /yaml/1.10.2: resolution: { diff --git a/public/serverConfig.json b/public/serverConfig.json index 78759d6..4248229 100644 --- a/public/serverConfig.json +++ b/public/serverConfig.json @@ -5,7 +5,6 @@ "HiddenSideBar": false, "MultiTagsCache": false, "KeepAlive": true, - "Locale": "zh", "Layout": "vertical", "Theme": "default", "DarkMode": false, diff --git a/src/App.vue b/src/App.vue index b299a9e..2620967 100644 --- a/src/App.vue +++ b/src/App.vue @@ -8,7 +8,6 @@ import { defineComponent } from "vue"; import { ElConfigProvider } from "element-plus"; import zhCn from "element-plus/lib/locale/lang/zh-cn"; -import en from "element-plus/lib/locale/lang/en"; export default defineComponent({ name: "app", components: { @@ -16,7 +15,7 @@ export default defineComponent({ }, computed: { currentLocale() { - return this.$storage.locale?.locale === "zh" ? zhCn : en; + return zhCn; } } }); diff --git a/src/assets/avatars.jpg b/src/assets/avatars.jpg deleted file mode 100644 index a0226ae4d57eae4e423b0e29d55bf301895958d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23391 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 h6q^>sM1=cdQ|GCSV_$