kyoyue 5 maanden geleden
bovenliggende
commit
0dedf2d6cf
100 gewijzigde bestanden met toevoegingen van 769 en 918 verwijderingen
  1. 5 0
      .browserslistrc
  2. 14 0
      .editorconfig
  3. 0 3
      .env
  4. 0 25
      .env.development.orig
  5. 0 21
      .env.test
  6. 0 23
      .env.yanhuaguo
  7. 7 0
      .eslintignore
  8. 123 0
      .eslintrc.js
  9. 14 0
      .gitattributes
  10. 14 26
      .gitignore
  11. 7 0
      .stylelintrc.js
  12. 54 0
      .vscode/settings.json
  13. 0 422
      CHANGELOG.md
  14. 0 8
      Dockerfile
  15. 16 4
      LICENSE
  16. 0 25
      Makefile
  17. 202 2
      README.En.md
  18. 286 2
      README.md
  19. 0 0
      apps/portal-view/.gitkeep
  20. 0 15
      apps/test-server/README.md
  21. 0 18
      apps/test-server/controller/FileController.ts
  22. 0 15
      apps/test-server/controller/UserController.ts
  23. 0 18
      apps/test-server/ecosystem.config.cjs
  24. 0 63
      apps/test-server/index.ts
  25. 0 8
      apps/test-server/nodemon.json
  26. 0 36
      apps/test-server/package.json
  27. 0 23
      apps/test-server/routes.ts
  28. 0 54
      apps/test-server/service/FileService.ts
  29. 0 25
      apps/test-server/service/UserService.ts
  30. 0 7
      apps/test-server/tsconfig.json
  31. 0 9
      apps/test-server/utils.ts
  32. 7 0
      babel.config.js
  33. 20 0
      deploy.sh
  34. 0 38
      deploy/default.conf
  35. 0 1
      dist/_app.config.js
  36. 0 0
      dist/assets/AgentDrawer-s6mY-KR4.js
  37. 0 0
      dist/assets/ApiDrawer-Bh1eBFtL.js
  38. 0 0
      dist/assets/BatchMsgDrawer-XUcT4iC0.js
  39. 0 0
      dist/assets/ChatroomMemberDrawer-CyNJ4J_g.js
  40. 0 0
      dist/assets/CloudFileDrawer-BUjGTCtL.js
  41. 0 0
      dist/assets/CloudFileTagDrawer-BR_xA8Xl.js
  42. 0 0
      dist/assets/ContactDrawer-DW8b0q1O.js
  43. 0 0
      dist/assets/DepartmentDrawer-Tuyfp0yD.js
  44. 0 1
      dist/assets/DeptTree-DWtXVFFK.js
  45. 0 0
      dist/assets/DictionaryDetailDrawer-K0Klxtn0.js
  46. 0 0
      dist/assets/DictionaryDrawer-CVG-VcVS.js
  47. 0 0
      dist/assets/EmailProviderDrawer-DcD09TP4.js
  48. 0 0
      dist/assets/EmployeeDrawer-CxyyiEKu.js
  49. 0 1
      dist/assets/Exception-DSfuHZB5.css
  50. 0 1
      dist/assets/Exception-HLf8iefG.js
  51. 0 0
      dist/assets/ExclamationCircleOutlined-ChH4dB9e.js
  52. 0 0
      dist/assets/FileDrawer-Dp_NKCy_.js
  53. 0 1
      dist/assets/ForgetPasswordForm-nnU8G0l7.js
  54. 0 0
      dist/assets/ForgetPasswordForm.vue_vue_type_script_setup_true_lang-DZoQ8w9K.js
  55. 0 1
      dist/assets/FrameBlank-4lWxBQPL.js
  56. 0 0
      dist/assets/GroupLabelDrawer-BjMnNrNK.js
  57. 0 1
      dist/assets/GrowCard-1KMAacqT.js
  58. 0 0
      dist/assets/GrowCard.vue_vue_type_script_setup_true_lang-CQndC6VV.js
  59. 0 1
      dist/assets/InputNumberItem-Ckh5653h.js
  60. 0 1
      dist/assets/InputNumberItem-mlzB66jM.css
  61. 0 0
      dist/assets/LabelDrawer-CUzvmvVd.js
  62. 0 0
      dist/assets/LabelRelationshipDrawer-D8f_va1a.js
  63. 0 0
      dist/assets/LockPage-FX_jvRuM.css
  64. 0 0
      dist/assets/LockPage-Iwdp4ojk.js
  65. 0 0
      dist/assets/LogModal-BlAgRNy5.js
  66. 0 0
      dist/assets/LogModal-CEcEJkLa.js
  67. 0 0
      dist/assets/LogModal-DcJjZdcH.js
  68. 0 0
      dist/assets/Login-Bb-g6kOl.css
  69. 0 1
      dist/assets/Login-Dvx1UeSt.js
  70. 0 0
      dist/assets/Login.vue_vue_type_style_index_0_lang-CUbHs28E.js
  71. 0 1
      dist/assets/LoginForm-B5vLPhTi.js
  72. 0 0
      dist/assets/LoginForm.vue_vue_type_script_setup_true_lang-1wfOhX4A.js
  73. 0 1
      dist/assets/LoginFormTitle-7wbmEXtm.css
  74. 0 0
      dist/assets/LoginFormTitle-B87hEy7y.js
  75. 0 0
      dist/assets/MemberDrawer-COu2TzP4.js
  76. 0 0
      dist/assets/MemberRankDrawer-B7icaCO9.js
  77. 0 1
      dist/assets/MenuDrawer-BoRm1l-U.css
  78. 0 0
      dist/assets/MenuDrawer-iD06KfkH.js
  79. 0 0
      dist/assets/OauthDrawer-B7LFds4k.js
  80. 0 0
      dist/assets/OauthDrawer-vz3TnIBm.js
  81. 0 0
      dist/assets/PositionDrawer-Bd7Yybto.js
  82. 0 1
      dist/assets/ProjectCard-DfOuGJaM.js
  83. 0 1
      dist/assets/ProjectCard.vue_vue_type_script_setup_true_lang-DlPyqpWC.js
  84. 0 1
      dist/assets/QrCodeForm-CPoFIH-q.js
  85. 0 1
      dist/assets/QrCodeForm.vue_vue_type_script_setup_true_lang-B5QYqhXr.js
  86. 0 1
      dist/assets/QuickNav-CbNJki_r.js
  87. 0 1
      dist/assets/RankTree-qVJK2t15.js
  88. 0 1
      dist/assets/RegisterForm-CdOnRCQe.js
  89. 0 0
      dist/assets/RegisterForm.vue_vue_type_script_setup_true_lang-DO_xlns8.js
  90. 0 0
      dist/assets/RoleDrawer-Rq7H_q26.js
  91. 0 1
      dist/assets/SalesProductPie-BSZJrxRc.js
  92. 0 1
      dist/assets/SelectItem-DAJy60Bv.js
  93. 0 1
      dist/assets/SelectItem-DexHytPo.css
  94. 0 0
      dist/assets/SendMsgDrawer-D1GpUTzA.js
  95. 0 0
      dist/assets/ServerDrawer-REayQhf9.js
  96. 0 1
      dist/assets/SessionTimeoutLogin-BoUhsb2c.js
  97. 0 1
      dist/assets/SessionTimeoutLogin-bBJkmg8M.css
  98. 0 1
      dist/assets/SettingFooter-C5yfp5rq.js
  99. 0 1
      dist/assets/SettingFooter-ChNbBFc9.css
  100. 0 1
      dist/assets/SimpleMenuTag-BtJtLk9V.js

+ 5 - 0
.browserslistrc

@@ -0,0 +1,5 @@
+# 支持浏览器配置
+> 1%
+last 2 versions
+not dead
+

+ 14 - 0
.editorconfig

@@ -0,0 +1,14 @@
+# 编辑器配置
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false

+ 0 - 3
.env

@@ -1,3 +0,0 @@
-# spa-title
-VITE_GLOB_APP_TITLE = 
-

+ 0 - 25
.env.development.orig

@@ -1,25 +0,0 @@
-# Whether to open mock
-VITE_USE_MOCK = false
-
-# public path
-VITE_PUBLIC_PATH = /
-
-VITE_BUILD_COMPRESS = 'none'
-
-# Delete console
-VITE_DROP_CONSOLE = false
-
-# vite 本地跨域代理
-# VITE_PROXY=[["/sys-api","http://localhost:9100"]]
-# VITE_BUILD_COMPRESS = 'none'
-# Basic interface address SPA
-VITE_GLOB_API_URL=
-# VITE_GLOB_API_URL=http://192.168.66.16:19101
-# VITE_GLOB_API_URL=/sys-api
-
-
-# File upload address, optional
-VITE_GLOB_UPLOAD_URL=/fms-api/upload
-
-# Interface prefix
-VITE_GLOB_API_URL_PREFIX=

+ 0 - 21
.env.test

@@ -1,21 +0,0 @@
-NODE_ENV=production
-# Whether to open mock
-VITE_USE_MOCK = false
-
-# public path
-VITE_PUBLIC_PATH = /
-
-# Whether to enable gzip or brotli compression
-# Optional: gzip | brotli | none
-# If you need multiple forms, you can use `,` to separate
-VITE_BUILD_COMPRESS = 'none'
-
-# Basic interface address SPA
-VITE_GLOB_API_URL=https://wxadminapi.gkscrm.com
-
-# File upload address, optional
-# It can be forwarded by nginx or write the actual address directly
-VITE_GLOB_UPLOAD_URL=https://wxadminapi.gkscrm.com
-
-# Interface prefix
-VITE_GLOB_API_URL_PREFIX=

+ 0 - 23
.env.yanhuaguo

@@ -1,23 +0,0 @@
-# Whether to open mock
-VITE_USE_MOCK = false
-
-# public path
-VITE_PUBLIC_PATH = /
-
-VITE_BUILD_COMPRESS = 'none'
-
-# Delete console
-VITE_DROP_CONSOLE = false
-
-# vite 本地跨域代理
-# VITE_PROXY=[["/fms-api","https://wxadminapi.gkscrm.com"]]
-# Basic interface address SPA
-VITE_GLOB_API_URL=
-# File upload address, optional
-VITE_GLOB_UPLOAD_URL=https://wxadminapi.gkscrm.com
-# VITE_GLOB_API_URL=
-# VITE_GLOB_API_URL=/sys-api
-
-# Interface prefix
-VITE_GLOB_API_URL_PREFIX=
-VITE_GLOB_APP_TITLE=

+ 7 - 0
.eslintignore

@@ -0,0 +1,7 @@
+src/assets
+src/icons
+public
+dist
+node_modules
+vab-icon
+layouts

+ 123 - 0
.eslintrc.js

@@ -0,0 +1,123 @@
+/**
+ * @author https://github.com/zxwk1998/vue-admin-better (不想保留author可删除)
+ * @description .eslintrc.js
+ */
+
+module.exports = {
+  root: true,
+  env: {
+    node: true,
+  },
+  extends: ['plugin:vue/recommended', 'eslint:recommended', '@vue/prettier'],
+  rules: {
+    'no-undef': 'off',
+    'no-console': 'off',
+    'no-debugger': 'off',
+    'prettier/prettier': 'off',
+    'prefer-template': 'error',
+    '@typescript-eslint/no-this-alias': 'off',
+    '@typescript-eslint/no-explicit-any': 'off',
+    '@typescript-eslint/no-var-requires': 'off',
+    '@typescript-eslint/no-empty-function': 'off',
+    '@typescript-eslint/ban-ts-comment': 'off',
+    'vue/no-reserved-component-names': 'off',
+    'vue/no-v-html': 'off',
+    'no-unused-vars': 'off',
+    'vue/no-useless-template-attributes': 'off',
+    'use-isnan': 'off',
+    'vue/html-self-closing': [
+      'error',
+      {
+        html: {
+          void: 'any',
+          normal: 'any',
+          component: 'always',
+        },
+        svg: 'always',
+        math: 'always',
+      },
+    ],
+    'vue/component-name-in-template-casing': [
+      'error',
+      'kebab-case',
+      {
+        registeredComponentsOnly: false,
+        ignores: [],
+      },
+    ],
+    // 多字组件名称
+    'vue/multi-word-component-names': 'off',
+    // Vue组件排序
+    'vue/order-in-components': [
+      'warn',
+      {
+        order: [
+          'el',
+          'name',
+          'key',
+          'parent',
+          'functional',
+          ['delimiters', 'comments'],
+          ['components', 'directives', 'filters'],
+          'extends',
+          'mixins',
+          ['provide', 'inject'],
+          'ROUTER_GUARDS',
+          'layout',
+          'middleware',
+          'validate',
+          'scrollToTop',
+          'transition',
+          'loading',
+          'inheritAttrs',
+          'model',
+          ['props', 'propsData'],
+          'emits',
+          'setup',
+          'fetch',
+          'asyncData',
+          'data',
+          'head',
+          'computed',
+          'watch',
+          'watchQuery',
+          'LIFECYCLE_HOOKS',
+          'methods',
+          ['template', 'render'],
+          'renderError',
+        ],
+      },
+    ],
+    // Vue属性排序
+    'vue/attributes-order': [
+      'warn',
+      {
+        order: [
+          'DEFINITION',
+          'LIST_RENDERING',
+          'CONDITIONALS',
+          'RENDER_MODIFIERS',
+          'GLOBAL',
+          'UNIQUE',
+          'TWO_WAY_BINDING',
+          'OTHER_DIRECTIVES',
+          'OTHER_ATTR',
+          'EVENTS',
+          'CONTENT',
+        ],
+        alphabetical: true, //字母顺序
+      },
+    ],
+  },
+  parserOptions: {
+    parser: 'babel-eslint',
+  },
+  overrides: [
+    {
+      files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'],
+      env: {
+        jest: true,
+      },
+    },
+  ],
+}

+ 14 - 0
.gitattributes

@@ -0,0 +1,14 @@
+# .gitattributes
+*.html text eol=lf
+*.css text eol=lf
+*.js text eol=lf
+*.scss text eol=lf
+*.vue text eol=lf
+*.hbs text eol=lf
+*.sh text eol=lf
+*.md text eol=lf
+*.json text eol=lf
+*.yml text eol=lf
+.browserslistrc text eol=lf
+.gitignore text eol=lf
+*.js linguist-language=vue

+ 14 - 26
.gitignore

@@ -1,38 +1,26 @@
-node_modules
-node-jiti
+# .gitignore
 .DS_Store
-.cache
-.turbo
-
-tests/server/static
-tests/server/static/upload
-
-.local
-# local env files
+node_modules
+dist
 .env.local
 .env.*.local
-.eslintcache
-
-# Log files
 npm-debug.log*
+yarn.lock
 yarn-debug.log*
 yarn-error.log*
-pnpm-debug.log*
-
-# Editor directories and files
 .idea
-# .vscode
 *.suo
 *.ntvs*
 *.njsproj
 *.sln
 *.sw?
-
-package-lock.json
-pnpm-lock.yaml
-
-.history
-
-.env.development
-.env.production
-.vscode/launch.json
+public/video
+*.zip
+*.7z
+/src/layouts/components/layouts
+/zx-templates
+/package-lock.json
+/src/styles/themes/green.scss
+/src/styles/themes/dark.scss
+/src/styles/themes/glory.scss
+/.history

+ 7 - 0
.stylelintrc.js

@@ -0,0 +1,7 @@
+/**
+ * @author https://github.com/zxwk1998/vue-admin-better (不想保留author可删除)
+ * @description stylelint
+ */
+module.exports = {
+  extends: ['stylelint-config-recess-order', 'stylelint-config-prettier'],
+}

+ 54 - 0
.vscode/settings.json

@@ -0,0 +1,54 @@
+{
+  "[vue]": {
+    "editor.defaultFormatter": "Vue.volar"
+  },
+  "editor.quickSuggestions": {
+    "strings": true
+  },
+  "workbench.colorTheme": "One Monokai",
+  "editor.tabSize": 2,
+  "editor.detectIndentation": false,
+  "emmet.triggerExpansionOnTab": true,
+  "editor.formatOnSave": true,
+  "javascript.format.enable": true,
+  "git.enableSmartCommit": true,
+  "git.autofetch": true,
+  "git.confirmSync": false,
+  "[json]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "liveServer.settings.donotShowInfoMsg": true,
+  "explorer.confirmDelete": false,
+  "javascript.updateImportsOnFileMove.enabled": "always",
+  "typescript.updateImportsOnFileMove.enabled": "always",
+  "files.exclude": {
+    "**/.idea": true
+  },
+  "editor.codeActionsOnSave": {
+    "source.fixAll.stylelint": "explicit",
+    "source.fixAll.eslint": "explicit"
+  },
+  "[javascript]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[jsonc]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[html]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "editor.suggest.snippetsPreventQuickSuggestions": false,
+  "prettier.htmlWhitespaceSensitivity": "ignore",
+  "prettier.vueIndentScriptAndStyle": true,
+  "docthis.authorName": "https://vuejs-core.cn",
+  "docthis.includeAuthorTag": true,
+  "docthis.includeDescriptionTag": true,
+  "docthis.enableHungarianNotationEvaluation": true,
+  "docthis.inferTypesFromNames": true,
+  "vetur.format.defaultFormatter.html": "prettier",
+  "files.autoSave": "onFocusChange",
+  "path-intellisense.mappings": {
+    "@": "${workspaceRoot}/src"
+  },
+  "files.eol": "\n"
+}

File diff suppressed because it is too large
+ 0 - 422
CHANGELOG.md


+ 0 - 8
Dockerfile

@@ -1,8 +0,0 @@
-FROM nginx:1.25.2-alpine
-
-COPY dist/ /usr/share/nginx/html/
-COPY deploy/default.conf /etc/nginx/conf.d/
-
-LABEL MAINTAINER="yuansu.china.work@gmail.com"
-
-EXPOSE 80

+ 16 - 4
LICENSE

@@ -1,9 +1,21 @@
 MIT License
 
-Copyright (c) 2022-present, Ryan Su
+Copyright (c) 2020 good luck
 
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 0 - 25
Makefile

@@ -1,25 +0,0 @@
-VERSION=$(shell git describe --tags --always)
-
-.PHONY: docker
-docker: # Compile and build the docker | 编译并构建 docker 镜像
-	pnpm install
-	pnpm build
-	docker build -f Dockerfile -t ${DOCKER_USERNAME}/backend-ui:${VERSION} .
-
-.PHONY: docker-not-build
-docker-not-build: # Build the docker without compiling | 不编译直接构建镜像
-	docker build -f Dockerfile -t ${DOCKER_USERNAME}/backend-ui:${VERSION} .
-
-.PHONY: publish-docker
-publish-docker: # Publish the docker | 发布镜像
-	echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin https://${REPO}
-	docker push ${DOCKER_USERNAME}/backend-ui:${VERSION}
-
-.PHONY: run-docker
-run-docker: # Run the docker image | 运行 docker 镜像
-	docker volume create backendui
-	docker run -d --name ${DOCKER_USERNAME}/backend-ui:${VERSION} -p 80:80 -v backendui:/etc/nginx --network docker-compose_simple-admin ${DOCKER_USERNAME}/backendui:${VERSION}
-
-.PHONY: help
-help: # Show help | 显示帮助
-	@grep -E '^[a-zA-Z0-9 -]+:.*#'  Makefile | sort | while read -r l; do printf "\033[1;32m$$(echo $$l | cut -f 1 -d':')\033[00m:$$(echo $$l | cut -f 2- -d'#')\n"; done

+ 202 - 2
README.En.md

@@ -1,3 +1,203 @@
-<div align="center">
-<h1>Gooki wechat admin</h1>
+[简体中文](./README.md) | English
+
+<div align="center"><img width="200" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/logo/vab.png"/>
+<h1> vue-admin-better(element-ui) </h1>
+<p>The flying snow all over the sky is a flying note, playing out expectations with blessings. May the epidemic dissipate as soon as possible, may you no longer have regrets next year, may you be warm in winter, may you not be cold in spring, and may you have lights in the dark and an umbrella in the rain.
+</p>
 </div>
+
+[![stars](https://img.shields.io/github/stars/zxwk1998/vue-admin-better?style=flat-square&logo=GitHub)](https://github.com/zxwk1998/vue-admin-better)
+[![star](https://gitee.com/chu1204505056/vue-admin-better/badge/star.svg?theme=gray)](https://gitee.com/chu1204505056/vue-admin-better)
+[![license](https://img.shields.io/github/license/zxwk1998/vue-admin-better?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)
+
+---
+
+# 🎉 Characteristic
+
+- 💪 40 + high quality single page
+- 💅 RBAC model + JWT permission control
+- 🌍 100000 + practical application of the project
+- 👏 Good type definition
+- 🥳 The open source version supports free commercial use
+- 🚀 Cross platform PC, mobile terminal and tablet
+- 📦 Back end route dynamic rendering
+
+## 🌐 Address
+
+- [🎉 Vue2. X + element UI (free commercial, PC, tablet and mobile phone supported)](https://vuejs-core.cn/vue-admin-better/)
+
+<!-- - [⚡️ Vue3. X + element plus (alpha version, free commercial, supporting PC, tablet and mobile phone)](https://vuejs-core.cn/vue-admin-better-plus/) -->
+
+<!-- - [⚡️ Vue3. X + ant design Vue (beta version, free commercial, supporting PC, tablet and mobile phone)](https://vuejs-core.cn/vue-admin-better-antdv/) -->
+
+- [⚡️ vue3.x + vite + vue-admin-arco](https://vuejs-core.cn/vue-admin-arco/)
+
+- [🚀 Admin Pro demo address (vue2.x paid version, supporting PC, tablet and mobile phone)](https://vuejs-core.cn/admin-pro/)
+
+- [🚀 Admin plus demo address (vue3.x paid version, supporting PC, tablet and mobile phone)](https://vuejs-core.cn/admin-plus/)
+
+- [📌 Pro and plus purchase address authorization](https://vuejs-core.cn/authorization/)
+
+- [🌐 Github Warehouse address](https://github.com/zxwk1998/vue-admin-better/)
+
+- [🌐 Gitee Warehouse address](https://gitee.com/chu1204505056/vue-admin-better/)
+
+- Recently, the VAB official website has been frequently attacked by DDoS. We have taken relevant preventive measures.
+  If the website cannot be accessed, please visit the backup address
+
+## 📦️ Desktop applications
+
+- [Admin Pro](https://gitee.com/chu1204505056/microsoft-store/raw/master/AdminPlus.zip)
+- [Admin Plus](https://gitee.com/chu1204505056/microsoft-store/raw/master/AdminPlus.zip)
+
+<!-- ## 🌱 Vue3.x vue3.0-antdv [Click switch branch](https://github.com/zxwk1998/vue-admin-better/tree/vue3.0-antdv)
+
+```bash
+git clone -b vue3.0-antdv https://github.com/zxwk1998/vue-admin-better.git
+npm i --registry=http://mirrors.cloud.tencent.com/npm/
+npm run serve
+``` -->
+
+## 🌱 Vue2.xmain [Click switch branch](https://github.com/zxwk1998/vue-admin-better/tree/master)
+
+```bash
+git clone -b master https://github.com/zxwk1998/vue-admin-better.git
+npm i --registry=http://mirrors.cloud.tencent.com/npm/
+npm run serve
+```
+
+## 🍻 Front end discussion QQ group
+
+- Let's have a cup of coffee, and then contact QQ 783963206 to invite you to the discussion group. Because of the large
+  number of users, if you haven't passed a friend's request, please contact Alipay on the Alipay payment page, whether
+  you invite or not, you can enjoy the open source code, thank you for your support and trust, and provide the
+  vue-admin-better basic version in the group. Automatic configuration tutorial of development tools and project
+  development documents.
+
+<table>
+<tr>
+<!-- <td>
+<img width="200px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/qq_group/hbm.jpg">
+</td> -->
+<td>
+<img width="200px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/zfb_kf.jpg">
+</td>
+<td>
+<img width="200px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/qq_group/vab-2.jpg">
+</td>
+<td>
+<img width="200px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/qq_group/vab-3.jpg">
+</td>
+</tr>
+</table>
+
+## 🙈 We promise to sponsor open source projects regularly (thank giant)
+
+<a title="vue" href="https://opencollective.com/vuejs" target="_blank">
+<img width="64px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/vue.png"/>
+</a>
+<a title="element-plus" href="https://opencollective.com/element-plus" target="_blank">
+<img width="64px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/element-plus.png"/>
+</a>
+<a title="ant-design-vue" href="https://opencollective.com/ant-design-vue" target="_blank">
+<img width="64px" src="https://images.opencollective.com/ant-design-vue/2ec179b/logo/256.png"/>
+</a>
+
+## 🎨 Acknowledge
+
+| Project                                                          |
+| ---------------------------------------------------------------- |
+| [vue](https://github.com/vuejs/vue)                              |
+| [element-ui](https://github.com/ElemeFE/element)                 |
+| [element-plus](https://github.com/element-plus/element-plus)     |
+| [ant-design-vue](https://github.com/vueComponent/ant-design-vue) |
+| [mock](https://github.com/nuysoft/Mock)                          |
+| [axios](https://github.com/axios/axios)                          |
+
+## 👷 Outstanding contributors to the framework (in no order)
+
+<a href="https://github.com/buuing" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/36689704?s=50"/>
+</a>
+<a href="https://github.com/hipi" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/22478003?s=50"/>
+</a>
+<a href="https://github.com/fwfmiao" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/29328241?s=50"/>
+</a>
+<a href="https://github.com/hdtopku" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/14859466?s=50"/>
+</a>
+<a href="https://github.com/shaonialife" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/16135960?s=50"/>
+</a>
+
+## 📌 Advantages and precautions
+
+```
+Compared with other open source admin frameworks, it has the following advantages:
+1. Support the front-end control routing permission intelligence and the back-end control routing permission all mode
+2. It is known that the open source Vue admin framework is the first to support the automatic generation and export function of mock
+3. More than 50 global fine configurations are provided
+4. Support SCSS automatic sorting and eslint automatic repair
+5. Axios fine encapsulation supports multiple data sources, multiple successful code arrays, and application / JSON; charset=UTF-8、application/x-www-form-urlencoded; Charset = UTF-8 multiple parameter transfer modes
+6. Support login RSA encryption
+7. Support packaging to automatically generate 7z compressed packages
+8. Support errorlog error interception
+9. Support multi theme and multi layout switching
+Precautions for use:
+1. The project uses lf line feed instead of CRLF line feed by default. When creating a new file, please pay attention to selecting the file line feed
+2. The project uses the strictest eslint verification specification (plugin: Vue / recommended) by default. Before using it, it is recommended to configure the development tool to realize automatic repair (vscode development is recommended)
+3. The project uses the MIT open source agreement with the broadest requirements, and the MIT open source agreement can be used for free
+
+```
+
+## 💚 Suitable for people
+
+- I am developing and want to use element UI / element plus, with 1 year of front-end development experience +.
+- Familiar with vue.js technology stack and developed several practical projects with it.
+- Students who are interested in principle and technology and want to improve.
+
+## 🎉 Function map
+
+![img](https://gcore.jsdelivr.net/gh/zxwk1998/image/vip/flow.drawio.png)
+
+## 🗃️ design sketch
+
+The following is a screenshot of the pro version:
+
+<table>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/2.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/6.png">
+</td>
+</tr>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/8.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/9.png">
+</td>
+</tr>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/3.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/5.png">
+</td>
+</tr>
+</table>
+
+## 📄 Commercial considerations
+
+This project can be used for commercial purposes free of charge. Please abide by the MIT agreement and keep the author's
+technical support statement. For customized source code copyright information, please contact customer service QQ 783963206.
+
+<!-- ## 严正声明
+
+近期发现不少游手好闲之人有组织有预谋的利用码云、知乎、掘金等网站可用国外非法网站提供的匿名手机号注册的账号 bug 冒充 vab 去攻击 vue-element-admin,iview-admin,若依,d2-admin,ant-design-vue 的行为,恶意制造对立,试图让其他开源作者卷入其中,对各位开源作者造成的影响我们深表歉意,我们欢迎 vab 的用户去体验其他更优秀的框架,vue-admin-beautiful 走到今天实属不易,被人冒充,被人发帖诋毁,被人故意发布错误言论假装发帖表扬实则为我们招骂,无意动任何人的奶酪,从 2020 年至今坚持全职维护已过一年时间,说实在的我们靠技术生存并不丢人吧,一年来感谢 vab 的用户对我们不离不弃,也希望大家越来越好,加油! -->

+ 286 - 2
README.md

@@ -1,3 +1,287 @@
-<div align="center">
-<h1>冠客微信管理后台</h1>
+<div>
+
+简体中文 | [English](./README.en.md)
+
+<div align="center"><img width="200" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/logo/vab.png"/>
+<h1> vue-admin-better</h1>
+<p>瑞雪兆丰年,红梅报新春,愿您新的一年平安喜乐,万事顺意,所得皆所愿!</p>
+</div>
+
+[![stars](https://img.shields.io/github/stars/zxwk1998/vue-admin-better?style=flat-square&logo=GitHub)](https://github.com/zxwk1998/vue-admin-better)
+[![star](https://gitee.com/chu1204505056/vue-admin-better/badge/star.svg?theme=gray)](https://gitee.com/chu1204505056/vue-admin-better)
+[![license](https://img.shields.io/github/license/zxwk1998/vue-admin-better?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)
+
+---
+
+<!-- ## 🎉 全新版本
+
+基于 vite5.x + vue3.x + arco-design2.x 全新的前端框架 vue-admin-arco, 欢迎点击查看或试用 👏🏻👏🏻👏🏻
+
+[开源地址](https://github.com/zxwk1998/vue-admin-arco) | [演示地址](https://vuejs-core.cn/vue-admin-arco) -->
+
+## 🎉 特性
+
+- 💪 40+高质量单页
+- 💅 RBAC 模型 + JWT 权限控制
+- 🌍 10 万+ 项目实际应用
+- 👏 良好的类型定义
+- 🥳 开源版本支持免费商用
+- 🚀 跨平台 PC、手机端、平板
+- 📦️ 后端路由动态渲染
+
+## 🌐 付费版演示地址
+
+- [🚀 Vue Admin Pro 演示地址(vue2.x + element-ui 2.x 付费版本,支持 PC、平板、手机)](https://vuejs-core.cn/admin-pro/)
+
+- [🚀 Vue Admin Plus 演示地址(vue3.x + element-plus 2.x 付费版本,支持 PC、平板、手机)](https://vuejs-core.cn/admin-plus/)
+
+- [🚀 Vue Shop Vite 演示地址(vue3.x + vite 5.x + element-plus 2.x 付费版本,支持 PC、平板、手机)](https://vuejs-core.cn/shop-vite/)
+
+- [📌 Vue Admin Pro 及 Vue Admin Plus 购买地址](https://vuejs-core.cn/authorization/)
+
+- [📌 Vue Shop Vite 购买地址](https://vuejs-core.cn/authorization/shop-vite.html)
+
+<!-- ## 🔊 温馨提示
+
+近期,我们发现少数不法互联网用户通过 IDC 云服务器、代理 ip、本地计算机等方式对我们的演示地址,发起了大规模攻击,包括但不限于 DDOS 攻击、SQL 注入、大文件上传、端口扫描、目录扫描等方式,我们已第一时间通过技术手段追踪到其攻击服务器部署的网站内容,并由此推断出其所入职公司或相关联的公司,望其迷途知返,切勿再做损人不利己的事情。我们不清楚其这样做的原因,也不愿意通过以牙还牙,以眼还眼的方式,将事态扩大,为保障正常用户的访问演示地址的体验,提升访问速度,目前,演示地址已采取以下防范措施:
+
+- 1、演示地址服务器已购买 DDOS 高防包,有效防止了大多数恶意攻击。
+- 2、演示地址服务器已禁止.git、.svn、.env、.php 等后缀文件访问,单个 ip 累计访问以上文件超过 20 次,将被永久封禁,并无法再次打开演示地址。
+- 3、演示地址每晚 3 点进行备份恢复、重启服务器操作,预计将有 2 到 3 分钟访问超时。
+- 4、演示地址已加入恶意 ip 共享计划,对于存在恶意扫描服务器端口、服务器文件的问题 ip,我们将立即封禁,并同步至云服务器厂商恶意 ip 名单。
+
+以上措施真实有效,正常用户切勿因好奇前去尝试 DDOS 高防包的准确性,采取以上措施,实属迫不得已,地球这么大,容得下每一个前端框架,希望大家在各自的人生里各自发光,把余下的时间多用来陪陪家人孩子。(温馨提示:如果您发现自己的 ip 被误封,可联系微信客服申请解除)。 -->
+
+## 🌐 免费版演示地址
+
+- [🎉 Vue Admin Better (vue2.x + element-ui 免费商用,支持 PC、平板、手机)](https://vuejs-core.cn/vue-admin-better)
+
+<!-- - [⚡️ vue3.x + element-plus(alpha 版本,免费商用,支持 PC、平板、手机)](https://vuejs-core.cn/vue-admin-better-plus/) -->
+
+<!-- - [⚡️ Vue Admin Ant (vue3.x + ant-design-vue 免费商用,支持 PC、平板、手机)](https://vuejs-core.cn/vue-admin-better-antdv/) -->
+
+- [⚡️ Vue Admin Arco (vue3.x + vite5.x + arco2.x 免费商用,支持 PC)](https://vuejs-core.cn/vue-admin-arco/)
+
+## 🌐 仓库地址
+
+- [🌐 vue2.x github 仓库地址](https://github.com/zxwk1998/vue-admin-better/)
+
+- [🌐 vue3.x github 仓库地址](https://github.com/zxwk1998/vue-admin-arco/)
+
+- [🌐 vue2.x 码云仓库地址](https://gitee.com/chu1204505056/vue-admin-better/)
+
+- [🌐 vue3.x 码云仓库地址](https://gitee.com/chu1204505056/vue-admin-arco/)
+
+## 🍻 前端讨论 QQ 群
+
+- 请我们喝杯咖啡,打赏后联系 QQ 783963206 邀请您进入讨论群(由于用户数较多,如果您打赏后未通过好友请求,可以尝试多加几次),不管您请还是不请,您都可以享受到开源的代码,感谢您的支持和信任,群内提供
+  vue-admin-better 基础版本、开发工具自动配置教程及项目开发文档。
+
+<table>
+<tr>
+<td>
+<img width="200px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/zfb_kf.jpg">
+</td>
+<td>
+<img width="200px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/qq_group/vab-2.jpg">
+</td>
+<td>
+<img width="200px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/qq_group/vab-3.jpg">
+</td>
+</tr>
+</table>
+
+## 📦️ 桌面应用程序
+
+- [Admin Pro](https://gitee.com/chu1204505056/microsoft-store/raw/master/AdminPlus.zip)
+- [Admin Plus](https://gitee.com/chu1204505056/microsoft-store/raw/master/AdminPlus.zip)
+
+<!-- ## 🌱 vue3.x vue3.0-antdv 分支(ant-design-vue)[点击切换分支](https://github.com/zxwk1998/vue-admin-better/tree/vue3.0-antdv)
+
+```bash
+# 克隆项目
+git clone -b vue3.0-antdv https://github.com/zxwk1998/vue-admin-better.git
+# 安装依赖
+npm i --registry=http://mirrors.cloud.tencent.com/npm/
+# 本地开发 启动项目
+npm run serve
+``` -->
+
+## 🌱 vue3.x arco-design [点击切换仓库](https://github.com/zxwk1998/vue-admin-arco)
+
+```bash
+# 克隆项目
+git clonehttps://github.com/zxwk1998/vue-admin-arco.git
+# 安装依赖
+npm i --registry=http://mirrors.cloud.tencent.com/npm/
+# 本地开发 启动项目
+npm run dev
+```
+
+## 🌱vue2.x master 分支(element-ui)[点击切换分支](https://github.com/zxwk1998/vue-admin-better/tree/master)
+
+```bash
+# 克隆项目
+git clone -b master https://github.com/zxwk1998/vue-admin-better.git
+# 安装依赖
+npm i --registry=http://mirrors.cloud.tencent.com/npm/
+# 本地开发 启动项目
+npm run serve
+```
+
+## 🔊 友情链接
+
+- [OPSLI 基于 vue-admin-better 开源版的最佳实践](https://github.com/hiparker/opsli-boot)
+
+- [uView uni-app 生态最优秀的 UI 框架](https://github.com/YanxinNet/uView/)
+
+- [form-generator Element 表单设计代码生成器](https://github.com/JakHuang/form-generator/)
+
+- [wangEditor 国产最强开源富文本编辑](https://github.com/wangeditor-team/wangEditor)
+
+## 🙈 赞助
+
+- 如果您觉得 vue admin better 帮到了您 ,如果情况允许,您可以选择赞助以下项目
+
+<a title="vue" href="https://opencollective.com/vuejs" target="_blank">
+<img width="64px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/vue.png"/>
+</a>
+<a title="element-plus" href="https://opencollective.com/element-plus" target="_blank">
+<img width="64px" src="https://gcore.jsdelivr.net/gh/zxwk1998/image/element-plus.png"/>
+</a>
+<a title="ant-design-vue" href="https://opencollective.com/ant-design-vue" target="_blank">
+<img width="64px" src="https://images.opencollective.com/ant-design-vue/2ec179b/logo/256.png"/>
+</a>
+
+## 👷 框架杰出贡献者
+
+<a href="https://github.com/fwfmiao" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/29328241?s=50"/>
+</a>
+<a href="https://github.com/buuing" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/36689704?s=50"/>
+</a>
+<a href="https://github.com/hipi" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/22478003?s=50"/>
+</a>
+<a href="https://github.com/hdtopku" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/14859466?s=50"/>
+</a>
+<a href="https://github.com/shaonialife" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/16135960?s=50"/>
+</a>
+<a href="https://github.com/1511578084" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/24790218?s=50"/>
+</a>
+<a href="https://github.com/Arooba-git" target="_blank">
+<img width="50px" style="border-radius:999px" src="https://avatars.githubusercontent.com/u/56495631?s=50"/>
+</a>
+
+## 📌 优势及注意事项
+
+```
+对比其他开源 admin 框架有如下优势:
+1. 支持前端控制路由权限 intelligence、后端控制路由权限 all 模式
+2. 已知开源 vue admin 框架中首家支持 mock 自动生成自动导出功能
+3. 提供 50 余项全局精细化配置
+4. 支持 scss 自动排序,eslint 自动修复
+5. axios 精细化封装,支持多数据源、多成功 code 数组,支持 application/json;charset=UTF-8、application/x-www-form-urlencoded;charset=UTF-8 多种传参方式
+6. 支持登录RSA加密
+7. 支持打包自动生成7Z压缩包
+8. 支持errorlog错误拦截
+9. 支持多主题、多布局切换
+
+使用注意事项:
+1. 项目默认使用lf换行符而非crlf换行符,新建文件时请注意选择文件换行符
+2. 项目默认使用的最严格的eslint校验规范(plugin:vue/recommended),使用之前建议配置开发工具实现自动修复(建议使用vscode开发)
+3. 项目使用的是要求最宽泛的MIT开源协议,保留MIT开源协议即可免费商用
+
+```
+
+## 💚 适合人群
+
+- 正在以及想使用 element-ui/element-plus 开发,前端开发经验 1 年+。
+- 熟悉 Vue.js 技术栈,使用它开发过几个实际项目。
+- 对原理技术感兴趣,想进阶和提升的同学。
+
+## 🎨 Star
+
+[![Stargazers for vue-admin-better](https://reporoster.com/stars/zxwk1998/vue-admin-better)](https://github.com/zxwk1998/vue-admin-better/stargazers)
+
+## ✨ Fork
+
+[![Forkers repo roster for vue-admin-better](https://reporoster.com/forks/zxwk1998/vue-admin-better)](https://github.com/zxwk1998/vue-admin-better/network/members)
+
+## 🎉 功能地图
+
+![img](https://gcore.jsdelivr.net/gh/zxwk1998/image/vip/flow.drawio.png)
+
+## 🗃️ 效果图
+
+以下是截取的是 pro 版的效果图展示:
+
+<table>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/2.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/6.png">
+</td>
+</tr>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/8.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/9.png">
+</td>
+</tr>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/3.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/5.png">
+</td>
+</tr>
+</table>
+
+以下是截取的是 shop 版的效果图展示:
+
+<table>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/16.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/17.png">
+</td>
+</tr>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/18.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/19.png">
+</td>
+</tr>
+<tr>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/20.png">
+</td>
+<td>
+<img src="https://gcore.jsdelivr.net/gh/zxwk1998/image/21.png">
+</td>
+</tr>
+</table>
+
+## 📄 商用注意事项
+
+开源版本可免费用于商业用途,如果方便就留个 Star 吧
+
+<!-- ,请遵守 MIT 协议并保留作者技术支持声明,当然如果不愿意保留可以删掉,毕竟我也拿您没办法,能帮到您也当是给自己积德了,至于[Admin](https://vuejs-core.cn/admin-plus/)、[Shop](https://vuejs-core.cn/shop-vite/) 的付费版本的相关说明如下:
+本人只参与了前期小部分的开发,所以不必跟开源版做对比,同事的代码功底比我好太多,我自愧不如,关于买这件事,没有强买强卖,您愿意买就买,不愿意买就忽略。我们不高尚,写代码就是为了养家糊口,不是为了用爱发电。这几年看到那么多开源项目借鉴了我们付费版本的布局、主题配置的灵感和创意,一开始我是鄙视的,现在还好状态调整过来了,能够被借鉴,被讨论恰好说明了我们的产品有价值,为了产品卖的更好我们也必须更加用心的去维护付费版本以保持我们产品的竞争力。
+当然,最后还有几句话不得不说,身处互联网由盛转衰的大变革的洪流中,能活下来就已经是千难万难了,希望所有的程序员哥哥姐姐们,早日实现自己的梦想,完成自己的心愿,也想对刚要毕业准备做一名程序员的学弟学妹们说几句,互联网行业没有你们想象的那么高大上,如果想成为一名程序员那就做好加班的准备,如果有更好的选择那就别选这个行业了。 -->
+
 </div>

+ 0 - 0
apps/portal-view/.gitkeep


+ 0 - 15
apps/test-server/README.md

@@ -1,15 +0,0 @@
-# Test Server
-
-It is used to start the test interface service, which can test the upload, websocket, login and other interfaces.
-
-## Usage
-
-```bash
-
-cd ./test/server
-
-pnpm install
-
-pnpm run start
-
-```

+ 0 - 18
apps/test-server/controller/FileController.ts

@@ -1,18 +0,0 @@
-import FileService from '../service/FileService';
-
-class FileController {
-  private service: FileService = new FileService();
-
-  upload = async (ctx) => {
-    const files = ctx.request.files.file;
-    console.log(files);
-
-    if (files.length === undefined) {
-      this.service.upload(ctx, files, false);
-    } else {
-      this.service.upload(ctx, files, true);
-    }
-  };
-}
-
-export default new FileController();

+ 0 - 15
apps/test-server/controller/UserController.ts

@@ -1,15 +0,0 @@
-import UserService from '../service/UserService';
-
-class UserController {
-  private service: UserService = new UserService();
-
-  login = async (ctx) => {
-    ctx.body = await this.service.login();
-  };
-
-  getUserInfoById = async (ctx) => {
-    ctx.body = await this.service.getUserInfoById();
-  };
-}
-
-export default new UserController();

+ 0 - 18
apps/test-server/ecosystem.config.cjs

@@ -1,18 +0,0 @@
-const { name } = require('./package.json');
-const path = require('path');
-
-module.exports = {
-  apps: [
-    {
-      name,
-      script: path.resolve(__dirname, './dist/index.js'),
-      instances: require('os').cpus().length,
-      autorestart: true,
-      watch: true,
-      env_production: {
-        NODE_ENV: 'production',
-        PORT: 8080,
-      },
-    },
-  ],
-};

+ 0 - 63
apps/test-server/index.ts

@@ -1,63 +0,0 @@
-import Koa from 'koa';
-import path from 'path';
-import Router from 'koa-router';
-import body from 'koa-body';
-import cors from 'koa2-cors';
-import koaStatic from 'koa-static';
-import websockify from 'koa-websocket';
-import route from 'koa-route';
-
-import AppRoutes from './routes';
-
-const PORT = 3300;
-
-const app = websockify(new Koa());
-
-app.ws.use(function (ctx, next) {
-  ctx.websocket.send('connection succeeded!');
-  return next(ctx);
-});
-
-app.ws.use(
-  route.all('/test', function (ctx) {
-    // ctx.websocket.send('Hello World');
-    ctx.websocket.on('message', function (message) {
-      // do something with the message from client
-
-      if (message !== 'ping') {
-        const data = JSON.stringify({
-          id: Math.ceil(Math.random() * 1000),
-          time: new Date().getTime(),
-          res: `${message}`,
-        });
-        ctx.websocket.send(data);
-      }
-      console.log(message);
-    });
-  }),
-);
-
-const router = new Router();
-
-// router
-AppRoutes.forEach((route) => router[route.method](route.path, route.action));
-
-app.use(cors());
-app.use(
-  body({
-    encoding: 'gzip',
-    multipart: true,
-    formidable: {
-      // uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录
-      keepExtensions: true,
-      maxFieldsSize: 20 * 1024 * 1024,
-    },
-  }),
-);
-app.use(router.routes());
-app.use(router.allowedMethods());
-app.use(koaStatic(path.join(__dirname)));
-
-app.listen(PORT, () => {
-  console.log(`Application started successfully: http://localhost:${PORT}`);
-});

+ 0 - 8
apps/test-server/nodemon.json

@@ -1,8 +0,0 @@
-{
-  "watch": ["src"],
-  "ext": "ts",
-  "exec": "ts-node -r tsconfig-paths/register index.ts",
-  "events": {
-    "restart": "clear"
-  }
-}

+ 0 - 36
apps/test-server/package.json

@@ -1,36 +0,0 @@
-{
-  "name": "server",
-  "version": "1.0.0",
-  "license": "MIT",
-  "scripts": {
-    "compile": "rimraf ./dist && tsup ./index.ts --dts --format cjs,esm  ",
-    "prod": "npx pm2 start ecosystem.config.cjs --env production",
-    "restart": "pm2 restart ecosystem.config.cjs --env production",
-    "start": "nodemon",
-    "stop": "npx pm2 stop ecosystem.config.cjs"
-  },
-  "dependencies": {
-    "fs-extra": "^11.1.1",
-    "koa": "^2.14.2",
-    "koa-body": "^6.0.1",
-    "koa-bodyparser": "^4.4.1",
-    "koa-route": "^3.2.0",
-    "koa-router": "^12.0.0",
-    "koa-static": "^5.0.0",
-    "koa-websocket": "^7.0.0",
-    "koa2-cors": "^2.0.6"
-  },
-  "devDependencies": {
-    "@types/koa": "^2.13.6",
-    "@types/koa-bodyparser": "^5.0.2",
-    "@types/koa-router": "^7.4.4",
-    "@types/node": "^20.4.0",
-    "nodemon": "^2.0.22",
-    "pm2": "^5.3.0",
-    "rimraf": "^5.0.1",
-    "ts-node": "^10.9.1",
-    "tsconfig-paths": "^4.2.0",
-    "tsup": "^7.1.0",
-    "typescript": "^5.1.6"
-  }
-}

+ 0 - 23
apps/test-server/routes.ts

@@ -1,23 +0,0 @@
-import UserController from './controller/UserController';
-import FileController from './controller/FileController';
-
-export default [
-  // user
-  {
-    path: '/login',
-    method: 'post',
-    action: UserController.login,
-  },
-  {
-    path: '/getUserInfoById',
-    method: 'get',
-    action: UserController.getUserInfoById,
-  },
-
-  // file
-  {
-    path: '/upload',
-    method: 'post',
-    action: FileController.upload,
-  },
-];

+ 0 - 54
apps/test-server/service/FileService.ts

@@ -1,54 +0,0 @@
-import path from 'path';
-import fs from 'fs-extra';
-
-const uploadUrl = 'http://localhost:3300/static/upload';
-const filePath = path.join(__dirname, '../static/upload/');
-
-fs.ensureDir(filePath);
-export default class UserService {
-  async upload(ctx, files, isMultiple) {
-    let fileReader, fileResource, writeStream;
-
-    const fileFunc = function (file) {
-      fileReader = fs.createReadStream(file.path);
-      fileResource = filePath + `/${file.name}`;
-      console.log(fileResource);
-
-      writeStream = fs.createWriteStream(fileResource);
-      fileReader.pipe(writeStream);
-    };
-
-    const returnFunc = function (flag) {
-      if (flag) {
-        let url = '';
-        for (let i = 0; i < files.length; i++) {
-          url += uploadUrl + `/${files[i].name},`;
-        }
-        url = url.replace(/,$/gi, '');
-        ctx.body = {
-          url: url,
-          code: 0,
-          message: 'upload Success!',
-        };
-      } else {
-        ctx.body = {
-          url: uploadUrl + `/${files.name}`,
-          code: 0,
-          message: 'upload Success!',
-        };
-      }
-    };
-    console.log(isMultiple, files.length);
-
-    if (isMultiple) {
-      for (let i = 0; i < files.length; i++) {
-        const f1 = files[i];
-        fileFunc(f1);
-      }
-    } else {
-      fileFunc(files);
-    }
-    fs.ensureDir(filePath);
-    returnFunc(isMultiple);
-  }
-}

+ 0 - 25
apps/test-server/service/UserService.ts

@@ -1,25 +0,0 @@
-import { Result } from '../utils';
-
-const fakeUserInfo = {
-  userId: '1',
-  username: 'vben',
-  realName: 'Vben Admin',
-  desc: 'manager',
-  password: '123456',
-  token: 'fakeToken1',
-  roles: [
-    {
-      roleName: 'Super Admin',
-      value: 'super',
-    },
-  ],
-};
-export default class UserService {
-  async login() {
-    return Result.success(fakeUserInfo);
-  }
-
-  async getUserInfoById() {
-    return Result.success(fakeUserInfo);
-  }
-}

+ 0 - 7
apps/test-server/tsconfig.json

@@ -1,7 +0,0 @@
-{
-  "$schema": "https://json.schemastore.org/tsconfig",
-  "extends": "@vben/ts-config/node-server.json",
-  "compilerOptions": {
-    "noImplicitAny": false
-  }
-}

+ 0 - 9
apps/test-server/utils.ts

@@ -1,9 +0,0 @@
-export class Result {
-  static success(data: any) {
-    return {
-      code: 0,
-      success: true,
-      result: data,
-    };
-  }
-}

+ 7 - 0
babel.config.js

@@ -0,0 +1,7 @@
+/**
+ * @author https://github.com/zxwk1998/vue-admin-better (不想保留author可删除)
+ * @description babel.config
+ */
+module.exports = {
+  presets: ['@vue/cli-plugin-babel/preset'],
+}

+ 20 - 0
deploy.sh

@@ -0,0 +1,20 @@
+#强制推送
+#!/usr/bin/env bash
+set -e
+npm run build
+cd dist
+touch .nojekyll
+git init
+git add -A
+git commit -m 'deploy'
+git push -f "https://${access_token}@gitee.com/chu1204505056/vue-admin-better.git" master:gh-pages
+git push -f "https://${access_token}@gitee.com/chu1204505056/vue-admin-better-element.git" master:gh-pages
+start "https://gitee.com/chu1204505056/vue-admin-better/pages"
+start "https://gitee.com/chu1204505056/vue-admin-better-element/pages"
+git push -f "https://${access_token}@github.com/zxwk1998/vue-admin-better.git" master:gh-pages
+cd -
+exec /bin/bash
+
+
+
+

+ 0 - 38
deploy/default.conf

@@ -1,38 +0,0 @@
-server {
-    listen       80;
-    listen  [::]:80;
-    server_name  localhost;
-
-    location / {
-        root   /usr/share/nginx/html;
-        index  index.html index.htm;
-        try_files $uri $uri/ /index.html;
-    }
-
-    location /sys-api/ {
-        proxy_set_header Host $http_host;
-        proxy_set_header X-Real-IP $remote_addr;
-        proxy_set_header REMOTE-HOST $remote_addr;
-        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-        proxy_pass  http://core-api-svc.default.svc.cluster.local:9100/;
-        # proxy_pass  http://core-api:9100/; # for docker
-    }
-    
-    # location /fms-api/ {
-    #     proxy_set_header Host $http_host;
-    #     proxy_set_header X-Real-IP $remote_addr;
-    #     proxy_set_header REMOTE-HOST $remote_addr;
-    #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-    #     proxy_pass  http://fms-api-svc.default.svc.cluster.local:9102/;
-    #     # proxy_pass  http://fms-api:9102/; # for docker
-    # }
-
-    # location /mms-api/ {
-    #     proxy_set_header Host $http_host;
-    #     proxy_set_header X-Real-IP $remote_addr;
-    #     proxy_set_header REMOTE-HOST $remote_addr;
-    #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-    #     proxy_pass  http://mms-api-svc.default.svc.cluster.local:9104/;
-    #     # proxy_pass  http://mms-api:9103/; # for docker
-    # }
-}

+ 0 - 1
dist/_app.config.js

@@ -1 +0,0 @@
-window.__PRODUCTION____APP__CONF__={"VITE_GLOB_APP_TITLE":"","VITE_GLOB_API_URL":"https://wxadminapi.gkscrm.com","VITE_GLOB_UPLOAD_URL":"https://wxadminapi.gkscrm.com","VITE_GLOB_API_URL_PREFIX":""};Object.freeze(window.__PRODUCTION____APP__CONF__);Object.defineProperty(window,"__PRODUCTION____APP__CONF__",{configurable:false,writable:false,});

File diff suppressed because it is too large
+ 0 - 0
dist/assets/AgentDrawer-s6mY-KR4.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/ApiDrawer-Bh1eBFtL.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/BatchMsgDrawer-XUcT4iC0.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/ChatroomMemberDrawer-CyNJ4J_g.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/CloudFileDrawer-BUjGTCtL.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/CloudFileTagDrawer-BR_xA8Xl.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/ContactDrawer-DW8b0q1O.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/DepartmentDrawer-Tuyfp0yD.js


+ 0 - 1
dist/assets/DeptTree-DWtXVFFK.js

@@ -1 +0,0 @@
-var d=(o,s,e)=>new Promise((i,n)=>{var c=a=>{try{r(e.next(a))}catch(l){n(l)}},t=a=>{try{r(e.throw(a))}catch(l){n(l)}},r=a=>a.done?i(a.value):Promise.resolve(a.value).then(c,t);r((e=e.apply(o,s)).next())});import{g as p}from"./department-CbtZ8GOW.js";import{_ as m}from"./index-B9j7GguH.js";import{b as f,_ as u}from"./entry/index-SzYbyYyI-1725508979199.js";import{a as _}from"./tree-CAiiw6s-.js";import{d as h,f as D,o as y,a4 as k,Z as v,_ as T,k as B}from"./vue-DJQJAWta.js";import"./index-DXRBtcOy.js";import"./antd-CEhaUYkT.js";const F=h({name:"DeptTree",components:{BasicTree:m},emits:["select"],setup(o,{emit:s}){const e=D([]),{t:i}=f();function n(){return d(this,null,function*(){const t=yield p({page:1,pageSize:1e3}),r=_(t.data.data,{labelField:"trans",valueField:"id",idKeyField:"id",childrenKeyField:"children",parentKeyField:"parentId"});e.value=r})}function c(t){s("select",t[0])}return y(()=>{n()}),{treeData:e,handleSelect:c,t:i}}}),S={class:"m-4 mr-0 overflow-hidden rounded-md"};function $(o,s,e,i,n,c){const t=k("BasicTree");return v(),T("div",S,[B(t,{title:o.t("sys.department.departmentList"),toolbar:"",search:"",treeWrapperClassName:"h-[calc(100%-35px)] overflow-auto",clickRowToExpand:!1,treeData:o.treeData,fieldNames:{key:"key",title:"title"},onSelect:o.handleSelect},null,8,["title","treeData","onSelect"])])}const I=u(F,[["render",$]]);export{I as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/DictionaryDetailDrawer-K0Klxtn0.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/DictionaryDrawer-CVG-VcVS.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/EmailProviderDrawer-DcD09TP4.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/EmployeeDrawer-CxyyiEKu.js


+ 0 - 1
dist/assets/Exception-DSfuHZB5.css

@@ -1 +0,0 @@
-.vben-app-exception-page{display:flex;flex-direction:column;align-items:center}.vben-app-exception-page .ant-result-icon img{max-width:400px;max-height:300px}

+ 0 - 1
dist/assets/Exception-HLf8iefG.js

@@ -1 +0,0 @@
-import{E as e,u as N,e as O,b as R,f as S,P as m}from"./entry/index-SzYbyYyI-1725508979199.js";import{d as A,f as k,ai as G,c as d,u as s,k as r}from"./vue-DJQJAWta.js";import{B as P,J as D}from"./antd-CEhaUYkT.js";const C="/assets/no-data-BKo151DF.svg",h="/assets/net-error-sXkbaH3y.svg",F=A({name:"ErrorPage",props:{status:{type:Number,default:e.PAGE_NOT_FOUND},title:{type:String,default:""},subTitle:{type:String,default:""},full:{type:Boolean,default:!1}},setup(n){const a=k(new Map),{query:E}=G(),o=N(),c=O(),{t}=R(),{prefixCls:p}=S("app-exception-page"),x=d(()=>{const{status:l}=E,{status:i}=n;return Number(l)||i}),_=d(()=>s(a).get(s(x))),T=t("sys.exception.backLogin"),u=t("sys.exception.backHome");return s(a).set(e.PAGE_NOT_ACCESS,{title:"403",status:`${e.PAGE_NOT_ACCESS}`,subTitle:t("sys.exception.subTitle403"),btnText:n.full?T:u,handler:()=>n.full?o(m.BASE_LOGIN):o()}),s(a).set(e.PAGE_NOT_FOUND,{title:"404",status:`${e.PAGE_NOT_FOUND}`,subTitle:t("sys.exception.subTitle404"),btnText:n.full?T:u,handler:()=>n.full?o(m.BASE_LOGIN):o()}),s(a).set(e.ERROR,{title:"500",status:`${e.ERROR}`,subTitle:t("sys.exception.subTitle500"),btnText:u,handler:()=>o()}),s(a).set(e.PAGE_NOT_DATA,{title:t("sys.exception.noDataTitle"),subTitle:"",btnText:t("common.redo"),handler:()=>c(),icon:C}),s(a).set(e.NET_WORK_ERROR,{title:t("sys.exception.networkErrorTitle"),subTitle:t("sys.exception.networkErrorSubTitle"),btnText:t("common.redo"),handler:()=>c(),icon:h}),()=>{const{title:l,subTitle:i,btnText:b,icon:f,handler:g,status:y}=s(_)||{};return r(D,{class:p,status:y,title:n.title||l,"sub-title":n.subTitle||i},{extra:()=>b&&r(P,{type:"primary",onClick:g},{default:()=>b}),icon:()=>f?r("img",{src:f},null):null})}}});export{F as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/ExclamationCircleOutlined-ChH4dB9e.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/FileDrawer-Dp_NKCy_.js


+ 0 - 1
dist/assets/ForgetPasswordForm-nnU8G0l7.js

@@ -1 +0,0 @@
-import{_ as o}from"./ForgetPasswordForm.vue_vue_type_script_setup_true_lang-DZoQ8w9K.js";import"./LoginFormTitle-B87hEy7y.js";import"./entry/index-SzYbyYyI-1725508979199.js";import"./vue-DJQJAWta.js";import"./antd-CEhaUYkT.js";import"./index-CwezuZcD.js";import"./captcha-DaI-bvz6.js";export{o as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/ForgetPasswordForm.vue_vue_type_script_setup_true_lang-DZoQ8w9K.js


+ 0 - 1
dist/assets/FrameBlank-4lWxBQPL.js

@@ -1 +0,0 @@
-import{d as e,Z as a,_ as n}from"./vue-DJQJAWta.js";const _=e({name:"FrameBlank",__name:"FrameBlank",setup(r){return(t,o)=>(a(),n("div"))}});export{_ as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/GroupLabelDrawer-BjMnNrNK.js


+ 0 - 1
dist/assets/GrowCard-1KMAacqT.js

@@ -1 +0,0 @@
-import{_ as o}from"./GrowCard.vue_vue_type_script_setup_true_lang-CQndC6VV.js";import"./entry/index-SzYbyYyI-1725508979199.js";import"./vue-DJQJAWta.js";import"./antd-CEhaUYkT.js";export{o as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/GrowCard.vue_vue_type_script_setup_true_lang-CQndC6VV.js


+ 0 - 1
dist/assets/InputNumberItem-Ckh5653h.js

@@ -1 +0,0 @@
-import{f as r,_ as o}from"./entry/index-SzYbyYyI-1725508979199.js";import{b as p}from"./index-CwFIduem.js";import{d as m,a4 as i,Z as l,_ as u,$ as c,a0 as f,k as d,a9 as b,a1 as C}from"./vue-DJQJAWta.js";import{ax as g}from"./antd-CEhaUYkT.js";import"./useContentViewHeight-DfQoPqDa.js";import"./useWindowSizeFn-DN_CVpnl.js";import"./index-DXRBtcOy.js";import"./useSortable-DPEIWbfN.js";import"./index-3yGpKef2.js";import"./lock-CZ3J9apf.js";const _=m({name:"InputNumberItem",components:{InputNumber:g},props:{event:{type:Number},title:{type:String}},setup(e){const{prefixCls:t}=r("setting-input-number-item");function n(a){e.event&&p(e.event,a)}return{prefixCls:t,handleChange:n}}});function I(e,t,n,a,N,h){const s=i("InputNumber");return l(),u("div",{class:C(e.prefixCls)},[c("span",null,f(e.title),1),d(s,b(e.$attrs,{size:"small",class:`${e.prefixCls}-input-number`,onChange:e.handleChange}),null,16,["class","onChange"])],2)}const E=o(_,[["render",I],["__scopeId","data-v-73aab964"]]);export{E as default};

+ 0 - 1
dist/assets/InputNumberItem-mlzB66jM.css

@@ -1 +0,0 @@
-.vben-setting-input-number-item[data-v-73aab964]{display:flex;justify-content:space-between;margin:16px 0}.vben-setting-input-number-item-input-number[data-v-73aab964]{width:126px!important}[data-theme=dark] .vben-setting-input-number-item[data-v-73aab964]{display:flex;justify-content:space-between;margin:16px 0;color:#fff}[data-theme=dark] .vben-setting-input-number-item-input-number[data-v-73aab964]{width:126px!important}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/LabelDrawer-CUzvmvVd.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/LabelRelationshipDrawer-D8f_va1a.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/LockPage-FX_jvRuM.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/LockPage-Iwdp4ojk.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/LogModal-BlAgRNy5.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/LogModal-CEcEJkLa.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/LogModal-DcJjZdcH.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Login-Bb-g6kOl.css


+ 0 - 1
dist/assets/Login-Dvx1UeSt.js

@@ -1 +0,0 @@
-import{_ as o}from"./Login.vue_vue_type_style_index_0_lang-CUbHs28E.js";import"./entry/index-SzYbyYyI-1725508979199.js";import"./vue-DJQJAWta.js";import"./antd-CEhaUYkT.js";import"./LoginForm.vue_vue_type_script_setup_true_lang-1wfOhX4A.js";import"./LoginFormTitle-B87hEy7y.js";import"./captcha-DaI-bvz6.js";import"./index-CwezuZcD.js";import"./ForgetPasswordForm.vue_vue_type_script_setup_true_lang-DZoQ8w9K.js";import"./RegisterForm.vue_vue_type_script_setup_true_lang-DO_xlns8.js";import"./index-Ct-3rkiZ.js";import"./QrCodeForm.vue_vue_type_script_setup_true_lang-B5QYqhXr.js";export{o as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Login.vue_vue_type_style_index_0_lang-CUbHs28E.js


+ 0 - 1
dist/assets/LoginForm-B5vLPhTi.js

@@ -1 +0,0 @@
-import{_ as o}from"./LoginForm.vue_vue_type_script_setup_true_lang-1wfOhX4A.js";import"./vue-DJQJAWta.js";import"./LoginFormTitle-B87hEy7y.js";import"./entry/index-SzYbyYyI-1725508979199.js";import"./antd-CEhaUYkT.js";import"./captcha-DaI-bvz6.js";import"./index-CwezuZcD.js";export{o as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/LoginForm.vue_vue_type_script_setup_true_lang-1wfOhX4A.js


+ 0 - 1
dist/assets/LoginFormTitle-7wbmEXtm.css

@@ -1 +0,0 @@
-[data-theme=dark] .form-title[data-v-166e67c3]{color:#fff}.form-title[data-v-166e67c3]{color:#5e5e5e}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/LoginFormTitle-B87hEy7y.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/MemberDrawer-COu2TzP4.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/MemberRankDrawer-B7icaCO9.js


+ 0 - 1
dist/assets/MenuDrawer-BoRm1l-U.css

@@ -1 +0,0 @@
-.paramForm[data-v-bcc42ee4]{padding:1em}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/MenuDrawer-iD06KfkH.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/OauthDrawer-B7LFds4k.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/OauthDrawer-vz3TnIBm.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/PositionDrawer-Bd7Yybto.js


+ 0 - 1
dist/assets/ProjectCard-DfOuGJaM.js

@@ -1 +0,0 @@
-import{_ as o}from"./ProjectCard.vue_vue_type_script_setup_true_lang-DlPyqpWC.js";import"./entry/index-SzYbyYyI-1725508979199.js";import"./vue-DJQJAWta.js";import"./antd-CEhaUYkT.js";export{o as default};

+ 0 - 1
dist/assets/ProjectCard.vue_vue_type_script_setup_true_lang-DlPyqpWC.js

@@ -1 +0,0 @@
-import{b as c}from"./entry/index-SzYbyYyI-1725508979199.js";import{a2 as d,a3 as l,G as u}from"./antd-CEhaUYkT.js";import{d as f,f as i,Z as p,a5 as _,a6 as a,k as o,u as e,G as y,a0 as n,a9 as I}from"./vue-DJQJAWta.js";const x=f({__name:"ProjectCard",setup(N){const{t:s}=c(),t=i([]);return t.value=[["sys.sys.Name",localStorage.getItem("departmentName")||"Default Name"],["sys.sys.version","V 0.0.1"]],(m,g)=>(p(),_(e(u),I({title:e(s)("sys.sys.info")},m.$attrs),{default:a(()=>[o(e(d),{bordered:"","data-source":t.value},{renderItem:a(({item:r})=>[o(e(l),null,{default:a(()=>[y(n(e(s)(r[0]))+" : "+n(r[1]),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},16,["title"]))}});export{x as _};

+ 0 - 1
dist/assets/QrCodeForm-CPoFIH-q.js

@@ -1 +0,0 @@
-import{_ as o}from"./QrCodeForm.vue_vue_type_script_setup_true_lang-B5QYqhXr.js";import"./LoginFormTitle-B87hEy7y.js";import"./entry/index-SzYbyYyI-1725508979199.js";import"./vue-DJQJAWta.js";import"./antd-CEhaUYkT.js";export{o as default};

+ 0 - 1
dist/assets/QrCodeForm.vue_vue_type_script_setup_true_lang-B5QYqhXr.js

@@ -1 +0,0 @@
-import{u as l,L as m,b as u}from"./LoginFormTitle-B87hEy7y.js";import{b as d}from"./entry/index-SzYbyYyI-1725508979199.js";import{ac as _,F as g,B as p}from"./antd-CEhaUYkT.js";import{d as f,c as x,u as e,Z as h,_ as k,k as t,$ as C,a6 as a,G as o,a0 as n,F as y,a8 as S}from"./vue-DJQJAWta.js";const B={class:"enter-x min-w-64 min-h-64"},L="https://doc.ryansu.tech",E=f({__name:"QrCodeForm",setup(F){const{t:s}=d(),{handleBackLogin:r,getLoginState:c}=l(),i=x(()=>e(c)===m.QR_CODE);return(b,v)=>i.value?(h(),k(y,{key:0},[t(u,{class:"enter-x"}),C("div",B,[t(e(_),{value:L,class:"enter-x flex justify-center xl:justify-start",width:280}),t(e(g),{class:"enter-x"},{default:a(()=>[o(n(e(s)("sys.login.scanSign")),1)]),_:1}),t(e(p),{size:"large",block:"",class:"mt-4 enter-x",onClick:e(r)},{default:a(()=>[o(n(e(s)("sys.login.backSignIn")),1)]),_:1},8,["onClick"])])],64)):S("",!0)}});export{E as _};

+ 0 - 1
dist/assets/QuickNav-CbNJki_r.js

@@ -1 +0,0 @@
-import{I as m,b as p,u as f,_ as g}from"./entry/index-SzYbyYyI-1725508979199.js";import{G as _,a4 as y}from"./antd-CEhaUYkT.js";import{d as C,a4 as o,Z as n,a5 as s,a6 as a,_ as k,F as I,a7 as $,$ as r,k as b,a0 as h,a9 as v}from"./vue-DJQJAWta.js";const M=[{title:"routes.system.userManagementTitle",icon:"ant-design:user-outlined",color:"#bf0c2c",redirect:"/user"},{title:"routes.system.roleManagementTitle",icon:"eos-icons:role-binding-outlined",color:"#e18525",redirect:"/role"},{title:"routes.system.menuManagementTitle",icon:"ep:menu",color:"#3fb27f",redirect:"/menu"},{title:"routes.system.apiManagementTitle",icon:"ant-design:api-outlined",color:"#4daf1bc9",redirect:"/api"},{title:"routes.system.dictionaryManagementTitle",icon:"ant-design:book-outlined",color:"#cc00ff",redirect:"/dictionary"},{title:"routes.system.oauthManagement",icon:"ant-design:unlock-filled",color:"#0099ff",redirect:"/oauth"}],G=C({components:{Card:_,CardGrid:y,Icon:m},setup(){const{t:e}=p();return{go:f(),t:e,navItems:M}}}),T=["onClick"],B={class:"text-md mt-2"};function N(e,i,x,F,V,w){const c=o("Icon"),l=o("CardGrid"),d=o("Card");return n(),s(d,v({title:e.t("sys.sys.navigation")},e.$attrs),{default:a(()=>[(n(!0),k(I,null,$(e.navItems,(t,u)=>(n(),s(l,{key:u},{default:a(()=>[r("span",{class:"flex flex-col items-center",onClick:z=>e.go(t.redirect)},[b(c,{icon:t.icon,color:t.color,size:"20"},null,8,["icon","color"]),r("span",B,h(e.t(t.title)),1)],8,T)]),_:2},1024))),128))]),_:1},16,["title"])}const P=g(G,[["render",N]]);export{P as default};

+ 0 - 1
dist/assets/RankTree-qVJK2t15.js

@@ -1 +0,0 @@
-var d=(o,s,e)=>new Promise((i,n)=>{var c=a=>{try{r(e.next(a))}catch(l){n(l)}},t=a=>{try{r(e.throw(a))}catch(l){n(l)}},r=a=>a.done?i(a.value):Promise.resolve(a.value).then(c,t);r((e=e.apply(o,s)).next())});import{v as m,_ as p}from"./entry/index-SzYbyYyI-1725508979199.js";import{g as f}from"./memberRank-9ua_T8XQ.js";import{_ as u}from"./index-B9j7GguH.js";import{a as _}from"./tree-CAiiw6s-.js";import{d as h,f as k,o as v,a4 as b,Z as y,_ as D,k as R}from"./vue-DJQJAWta.js";import"./antd-CEhaUYkT.js";import"./index-DXRBtcOy.js";const T=h({name:"RankTree",components:{BasicTree:u},emits:["select"],setup(o,{emit:s}){const e=k([]),{t:i}=m.useI18n();function n(){return d(this,null,function*(){const t=yield f({page:1,pageSize:1e3}),r=_(t.data.data,{labelField:"trans",valueField:"id",idKeyField:"id",childrenKeyField:"children",parentKeyField:"parentId"});e.value=r})}function c(t){s("select",t[0])}return v(()=>{n()}),{treeData:e,handleSelect:c,t:i}}}),g={class:"m-4 mr-0 overflow-hidden bg-white rounded-md"};function w(o,s,e,i,n,c){const t=b("BasicTree");return y(),D("div",g,[R(t,{title:o.t("sys.memberRank.memberRankList"),toolbar:"",search:"",treeWrapperClassName:"h-[calc(100%-35px)] overflow-auto",clickRowToExpand:!1,treeData:o.treeData,fieldNames:{key:"key",title:"title"},onSelect:o.handleSelect},null,8,["title","treeData","onSelect"])])}const x=p(T,[["render",w]]);export{x as default};

+ 0 - 1
dist/assets/RegisterForm-CdOnRCQe.js

@@ -1 +0,0 @@
-import{_ as o}from"./RegisterForm.vue_vue_type_script_setup_true_lang-DO_xlns8.js";import"./vue-DJQJAWta.js";import"./LoginFormTitle-B87hEy7y.js";import"./entry/index-SzYbyYyI-1725508979199.js";import"./antd-CEhaUYkT.js";import"./index-Ct-3rkiZ.js";import"./captcha-DaI-bvz6.js";import"./index-CwezuZcD.js";export{o as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/RegisterForm.vue_vue_type_script_setup_true_lang-DO_xlns8.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/RoleDrawer-Rq7H_q26.js


+ 0 - 1
dist/assets/SalesProductPie-BSZJrxRc.js

@@ -1 +0,0 @@
-import{u as o}from"./useECharts-D5fs2LGz.js";import{G as l}from"./antd-CEhaUYkT.js";import{d as s,f as u,w as d,Z as c,a5 as m,a6 as f,$ as h,ac as p,u as g}from"./vue-DJQJAWta.js";import"./entry/index-SzYbyYyI-1725508979199.js";const B=s({__name:"SalesProductPie",props:{loading:Boolean,width:{type:String,default:"100%"},height:{type:String,default:"300px"}},setup(e){const a=e,t=u(null),{setOptions:r}=o(t);return d(()=>a.loading,()=>{a.loading||r({tooltip:{trigger:"item"},series:[{name:"访问来源",type:"pie",radius:"80%",center:["50%","50%"],color:["#5ab1ef","#b6a2de","#67e0e3","#2ec7c9"],data:[{value:500,name:"电子产品"},{value:310,name:"服装"},{value:274,name:"化妆品"},{value:400,name:"家居"}].sort(function(n,i){return n.value-i.value}),roseType:"radius",animationType:"scale",animationEasing:"exponentialInOut",animationDelay:function(){return Math.random()*400}}]})},{immediate:!0}),(n,i)=>(c(),m(g(l),{title:"成交占比",loading:e.loading},{default:f(()=>[h("div",{ref_key:"chartRef",ref:t,style:p({width:e.width,height:e.height})},null,4)]),_:1},8,["loading"]))}});export{B as default};

+ 0 - 1
dist/assets/SelectItem-DAJy60Bv.js

@@ -1 +0,0 @@
-import{f as l,_ as i}from"./entry/index-SzYbyYyI-1725508979199.js";import{b as r}from"./index-CwFIduem.js";import{ak as d}from"./antd-CEhaUYkT.js";import{d as p,c as m,a4 as c,Z as u,_ as f,$ as g,a0 as C,k as b,a9 as h,a1 as S}from"./vue-DJQJAWta.js";import"./useContentViewHeight-DfQoPqDa.js";import"./useWindowSizeFn-DN_CVpnl.js";import"./index-DXRBtcOy.js";import"./useSortable-DPEIWbfN.js";import"./index-3yGpKef2.js";import"./lock-CZ3J9apf.js";const y=p({name:"SelectItem",components:{Select:d},props:{event:{type:Number},disabled:{type:Boolean},title:{type:String},def:{type:[String,Number]},initValue:{type:[String,Number]},options:{type:Array,default:()=>[]}},setup(e){const{prefixCls:t}=l("setting-select-item"),a=m(()=>e.def?{value:e.def,defaultValue:e.initValue||e.def}:{});return{prefixCls:t,handleChange:n=>{e.event&&r(e.event,n)},getBindValue:a}}});function v(e,t,a,s,n,V){const o=c("Select");return u(),f("div",{class:S(e.prefixCls)},[g("span",null,C(e.title),1),b(o,h(e.getBindValue,{class:`${e.prefixCls}-select`,onChange:e.handleChange,disabled:e.disabled,size:"small",options:e.options}),null,16,["class","onChange","disabled","options"])],2)}const H=i(y,[["render",v],["__scopeId","data-v-acb93ae2"]]);export{H as default};

+ 0 - 1
dist/assets/SelectItem-DexHytPo.css

@@ -1 +0,0 @@
-.vben-setting-select-item[data-v-acb93ae2]{display:flex;justify-content:space-between;margin:16px 0}.vben-setting-select-item-select[data-v-acb93ae2]{width:126px}[data-theme=dark] .vben-setting-select-item[data-v-acb93ae2]{display:flex;justify-content:space-between;margin:16px 0;color:#fff}[data-theme=dark] .vben-setting-select-item-select[data-v-acb93ae2]{width:126px;color:#fff}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/SendMsgDrawer-D1GpUTzA.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/ServerDrawer-REayQhf9.js


+ 0 - 1
dist/assets/SessionTimeoutLogin-BoUhsb2c.js

@@ -1 +0,0 @@
-import{d as m,f as u,o as c,j as p,Z as t,a5 as l,a6 as d,_ as f,k as _,a1 as g,u as S,q as B}from"./vue-DJQJAWta.js";import{_ as C}from"./Login.vue_vue_type_style_index_0_lang-CUbHs28E.js";import{f as k,c as I,J as v,i as x,b6 as M,_ as T}from"./entry/index-SzYbyYyI-1725508979199.js";import"./LoginForm.vue_vue_type_script_setup_true_lang-1wfOhX4A.js";import"./LoginFormTitle-B87hEy7y.js";import"./captcha-DaI-bvz6.js";import"./index-CwezuZcD.js";import"./antd-CEhaUYkT.js";import"./ForgetPasswordForm.vue_vue_type_script_setup_true_lang-DZoQ8w9K.js";import"./RegisterForm.vue_vue_type_script_setup_true_lang-DO_xlns8.js";import"./index-Ct-3rkiZ.js";import"./QrCodeForm.vue_vue_type_script_setup_true_lang-B5QYqhXr.js";const U=m({__name:"SessionTimeoutLogin",setup(L){const{prefixCls:r}=k("st-login"),s=I(),n=v(),a=x(),e=u(0),i=()=>a.getProjectConfig.permissionMode===M.BACK;return c(()=>{var o;e.value=(o=s.getUserInfo)==null?void 0:o.userId}),p(()=>{(e.value&&e.value!==s.getUserInfo.userId||i()&&n.getLastBuildMenuTime===0)&&document.location.reload()}),(o,P)=>(t(),l(B,null,{default:d(()=>[(t(),f("div",{key:0,class:g(S(r))},[_(C,{sessionTimeout:""})],2))]),_:1}))}}),J=T(U,[["__scopeId","data-v-07757e21"]]);export{J as default};

+ 0 - 1
dist/assets/SessionTimeoutLogin-bBJkmg8M.css

@@ -1 +0,0 @@
-.vben-st-login[data-v-07757e21]{position:fixed;z-index:9999999;width:100%;height:100%;background:var(--component-background-color)}

+ 0 - 1
dist/assets/SettingFooter-C5yfp5rq.js

@@ -1 +0,0 @@
-import{J as f,f as S,r as y,c as k,i as _,b as g,am as b,_ as h}from"./entry/index-SzYbyYyI-1725508979199.js";import{c as T,u as D}from"./copyTextToClipboard-rXxHrH2p.js";import{bV as O,Z as R}from"./antd-CEhaUYkT.js";import{d as A,a4 as c,Z as $,_ as v,k as o,a6 as l,G as i,a0 as p,a1 as B}from"./vue-DJQJAWta.js";const M=A({name:"SettingFooter",components:{CopyOutlined:O,RedoOutlined:R},setup(){const e=f(),{prefixCls:d}=S("setting-footer"),{t:s}=g(),{createMessage:u}=b(),m=y(),n=k(),r=_();function t(){T(n.token)}function a(){localStorage.clear(),r.resetAllState(),e.resetState(),m.resetState(),n.resetState(),location.reload()}function C(){D().clear(),u.success(s("layout.setting.operatingTitle")),location.reload()}return{prefixCls:d,t:s,handleClearAndRedo:a,handleClearDictionaryCache:C,handleCopyToken:t}}});function V(e,d,s,u,m,n){const r=c("CopyOutlined"),t=c("a-button"),a=c("RedoOutlined");return $(),v("div",{class:B(e.prefixCls)},[o(t,{type:"primary",block:"",onClick:e.handleCopyToken,class:"mb-3"},{default:l(()=>[o(r,{class:"mr-2"}),i(" "+p(e.t("layout.setting.copyToken")),1)]),_:1},8,["onClick"]),o(t,{color:"error",block:"",onClick:e.handleClearDictionaryCache,class:"mb-3"},{default:l(()=>[o(a,{class:"mr-2"}),i(" "+p(e.t("layout.setting.clearDictionaryCache")),1)]),_:1},8,["onClick"]),o(t,{color:"error",block:"",onClick:e.handleClearAndRedo},{default:l(()=>[o(a,{class:"mr-2"}),i(" "+p(e.t("layout.setting.clearBtn")),1)]),_:1},8,["onClick"])],2)}const x=h(M,[["render",V],["__scopeId","data-v-8804b34f"]]);export{x as default};

+ 0 - 1
dist/assets/SettingFooter-ChNbBFc9.css

@@ -1 +0,0 @@
-.vben-setting-footer[data-v-8804b34f]{display:flex;flex-direction:column;align-items:center}

+ 0 - 1
dist/assets/SimpleMenuTag-BtJtLk9V.js

@@ -1 +0,0 @@
-import{p as u,f as m,_ as f}from"./entry/index-SzYbyYyI-1725508979199.js";import{d,c as l,Z as C,_ as $,a0 as T,a1 as _,a8 as y}from"./vue-DJQJAWta.js";import"./antd-CEhaUYkT.js";const S=d({name:"SimpleMenuTag",props:{item:{type:Object,default:()=>({})},dot:u.bool,collapseParent:u.bool},setup(t){const{prefixCls:p}=m("simple-menu"),r=l(()=>{const{item:e}=t;if(!e)return!1;const{tag:o}=e;if(!o)return!1;const{dot:s,content:n}=o;return!(!s&&!n)}),i=l(()=>{if(!r.value)return"";const{item:e,collapseParent:o}=t,{tag:s}=e,{dot:n,content:c}=s;return n||o?"":c});return{getTagClass:l(()=>{const{item:e,collapseParent:o}=t,{tag:s={}}=e||{},{dot:n,type:c="error"}=s,a=`${p}-tag`;return[a,[`${a}--${c}`],{[`${a}--collapse`]:o,[`${a}--dot`]:n||t.dot}]}),getShowTag:r,getContent:i}}});function b(t,p,r,i,g,e){return t.getShowTag?(C(),$("span",{key:0,class:_(t.getTagClass)},T(t.getContent),3)):y("",!0)}const w=f(S,[["render",b]]);export{w as default};

Some files were not shown because too many files changed in this diff