Harper 1 jaar geleden
commit
18bbcf6ccb
100 gewijzigde bestanden met toevoegingen van 1083 en 0 verwijderingen
  1. 12 0
      .editorconfig
  2. 17 0
      .env
  3. 38 0
      .env.dev
  4. 34 0
      .env.prod
  5. 34 0
      .env.stage
  6. 34 0
      .env.test
  7. 8 0
      .eslintignore
  8. 259 0
      .eslintrc-auto-import.json
  9. 73 0
      .eslintrc.js
  10. 11 0
      .gitignore
  11. BIN
      .image/Java监控.jpg
  12. BIN
      .image/MySQL.jpg
  13. BIN
      .image/OA请假-列表.jpg
  14. BIN
      .image/OA请假-发起.jpg
  15. BIN
      .image/OA请假-详情.jpg
  16. BIN
      .image/Redis.jpg
  17. BIN
      .image/admin-uniapp/01.png
  18. BIN
      .image/admin-uniapp/02.png
  19. BIN
      .image/admin-uniapp/03.png
  20. BIN
      .image/admin-uniapp/04.png
  21. BIN
      .image/admin-uniapp/05.png
  22. BIN
      .image/admin-uniapp/06.png
  23. BIN
      .image/admin-uniapp/07.png
  24. BIN
      .image/admin-uniapp/08.png
  25. BIN
      .image/admin-uniapp/09.png
  26. BIN
      .image/common/mall-feature.png
  27. BIN
      .image/common/mall-preview.png
  28. BIN
      .image/common/project-vs.png
  29. BIN
      .image/common/ruoyi-vue-pro-architecture.png
  30. BIN
      .image/common/ruoyi-vue-pro-biz.png
  31. BIN
      .image/common/yudao-cloud-architecture.png
  32. BIN
      .image/common/yudao-roadmap.png
  33. BIN
      .image/个人中心.jpg
  34. BIN
      .image/代码生成.jpg
  35. BIN
      .image/令牌管理.jpg
  36. BIN
      .image/任务列表-审批.jpg
  37. BIN
      .image/任务列表-已办.jpg
  38. BIN
      .image/任务列表-待办.jpg
  39. BIN
      .image/任务日志.jpg
  40. BIN
      .image/商户信息.jpg
  41. BIN
      .image/在线用户.jpg
  42. BIN
      .image/大屏设计器-列表.jpg
  43. BIN
      .image/大屏设计器-编辑.jpg
  44. BIN
      .image/大屏设计器-预览.jpg
  45. BIN
      .image/字典数据.jpg
  46. BIN
      .image/字典类型.jpg
  47. BIN
      .image/定时任务.jpg
  48. BIN
      .image/岗位管理.jpg
  49. BIN
      .image/应用信息-列表.jpg
  50. BIN
      .image/应用信息-编辑.jpg
  51. BIN
      .image/应用管理.jpg
  52. BIN
      .image/我的流程-列表.jpg
  53. BIN
      .image/我的流程-发起.jpg
  54. BIN
      .image/我的流程-详情.jpg
  55. BIN
      .image/报表设计器-图形报表.jpg
  56. BIN
      .image/报表设计器-打印设计.jpg
  57. BIN
      .image/报表设计器-数据报表.jpg
  58. BIN
      .image/操作日志.jpg
  59. BIN
      .image/支付订单.jpg
  60. BIN
      .image/敏感词.jpg
  61. BIN
      .image/数据库文档.jpg
  62. BIN
      .image/文件管理.jpg
  63. BIN
      .image/文件管理2.jpg
  64. BIN
      .image/文件配置.jpg
  65. BIN
      .image/日志中心.jpg
  66. BIN
      .image/流程模型-列表.jpg
  67. BIN
      .image/流程模型-定义.jpg
  68. BIN
      .image/流程模型-设计.jpg
  69. BIN
      .image/流程表单.jpg
  70. BIN
      .image/生成效果.jpg
  71. BIN
      .image/用户分组.jpg
  72. BIN
      .image/用户管理.jpg
  73. BIN
      .image/登录.jpg
  74. BIN
      .image/登录日志.jpg
  75. BIN
      .image/短信日志.jpg
  76. BIN
      .image/短信模板.jpg
  77. BIN
      .image/短信渠道.jpg
  78. BIN
      .image/租户套餐.png
  79. BIN
      .image/租户管理.jpg
  80. BIN
      .image/系统接口.jpg
  81. BIN
      .image/菜单管理.jpg
  82. BIN
      .image/表单构建.jpg
  83. BIN
      .image/角色管理.jpg
  84. BIN
      .image/访问日志.jpg
  85. BIN
      .image/退款订单.jpg
  86. BIN
      .image/通知公告.jpg
  87. BIN
      .image/部门管理.jpg
  88. BIN
      .image/配置管理.jpg
  89. BIN
      .image/链路追踪.jpg
  90. BIN
      .image/错误日志.jpg
  91. BIN
      .image/错误码管理.jpg
  92. BIN
      .image/首页.jpg
  93. 11 0
      .prettierignore
  94. 6 0
      .stylelintignore
  95. 19 0
      .vscode/extensions.json
  96. 16 0
      .vscode/launch.json
  97. 144 0
      .vscode/settings.json
  98. 21 0
      LICENSE
  99. 246 0
      README.md
  100. 100 0
      build/vite/index.ts

+ 12 - 0
.editorconfig

@@ -0,0 +1,12 @@
+root = true
+[*.{js,ts,vue}]
+charset = utf-8 # 设置文件字符集为 utf-8
+end_of_line = lf # 控制换行类型(lf | cr | crlf)
+insert_final_newline = true # 始终在文件末尾插入一个新行
+indent_style = space # 缩进风格(tab | space)
+indent_size = 2 # 缩进大小
+max_line_length = 100 # 最大行长度
+
+[*.md] # 仅 md 文件适用以下规则
+max_line_length = off # 关闭最大行长度限制
+trim_trailing_whitespace = false # 关闭末尾空格修剪

+ 17 - 0
.env

@@ -0,0 +1,17 @@
+# 标题
+VITE_APP_TITLE=芋道管理系统
+
+# 项目本地运行端口号
+VITE_PORT=80
+
+# open 运行 npm run dev 时自动打开浏览器
+VITE_OPEN=true
+
+# 租户开关
+VITE_APP_TENANT_ENABLE=true
+
+# 验证码的开关
+VITE_APP_CAPTCHA_ENABLE=true
+
+# 百度统计
+VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc

+ 38 - 0
.env.dev

@@ -0,0 +1,38 @@
+# 开发环境:本地只启动前端项目,依赖开发环境(后端、APP)
+NODE_ENV=development
+
+VITE_DEV=fales
+
+# 请求路径
+VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
+# VITE_BASE_URL='http://dofast.demo.huizhizao.vip:20001'
+
+# 上传路径
+VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
+
+# 接口前缀
+VITE_API_BASEPATH=/dev-api
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=false
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=false
+
+# 是否sourcemap
+VITE_SOURCEMAP=true
+
+# 打包路径
+VITE_BASE_PATH=/
+
+# 输出路径
+VITE_OUT_DIR=dist
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
+
+# 验证码的开关
+VITE_APP_CAPTCHA_ENABLE=false

+ 34 - 0
.env.prod

@@ -0,0 +1,34 @@
+# 生产环境:只在打包时使用
+NODE_ENV=production
+
+VITE_DEV=false
+
+# 请求路径
+VITE_BASE_URL='http://localhost:48080'
+
+# 上传路径
+VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
+
+# 接口前缀
+VITE_API_BASEPATH=
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=true
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=true
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH=/
+
+# 输出路径
+VITE_OUT_DIR=dist-prod
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'

+ 34 - 0
.env.stage

@@ -0,0 +1,34 @@
+# 预发布环境:只在打包时使用
+NODE_ENV=production
+
+VITE_DEV=false
+
+# 请求路径
+VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
+
+# 上传路径
+VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
+
+# 接口前缀
+VITE_API_BASEPATH=
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=true
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=true
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH='http://static-vue3.yudao.iocoder.cn/'
+
+# 输出路径
+VITE_OUT_DIR=dist-stage
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'

+ 34 - 0
.env.test

@@ -0,0 +1,34 @@
+# 测试环境:只在打包时使用
+NODE_ENV=production
+
+VITE_DEV=false
+
+# 请求路径
+VITE_BASE_URL='http://localhost:48080'
+
+# 上传路径
+VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
+
+# 接口前缀
+VITE_API_BASEPATH=
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=true
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=true
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH=/admin-ui-vue3/
+
+# 输出路径
+VITE_OUT_DIR=dist-test
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'

+ 8 - 0
.eslintignore

@@ -0,0 +1,8 @@
+/build/
+/config/
+/dist/
+/*.js
+/test/unit/coverage/
+/node_modules/*
+/dist*
+/src/main.ts

+ 259 - 0
.eslintrc-auto-import.json

@@ -0,0 +1,259 @@
+{
+  "globals": {
+    "EffectScope": true,
+    "ElMessage": true,
+    "ElMessageBox": true,
+    "ElTag": true,
+    "asyncComputed": true,
+    "autoResetRef": true,
+    "computed": true,
+    "computedAsync": true,
+    "computedEager": true,
+    "computedInject": true,
+    "computedWithControl": true,
+    "controlledComputed": true,
+    "controlledRef": true,
+    "createApp": true,
+    "createEventHook": true,
+    "createGlobalState": true,
+    "createInjectionState": true,
+    "createReactiveFn": true,
+    "createSharedComposable": true,
+    "createUnrefFn": true,
+    "customRef": true,
+    "debouncedRef": true,
+    "debouncedWatch": true,
+    "defineAsyncComponent": true,
+    "defineComponent": true,
+    "eagerComputed": true,
+    "effectScope": true,
+    "extendRef": true,
+    "getCurrentInstance": true,
+    "getCurrentScope": true,
+    "h": true,
+    "ignorableWatch": true,
+    "inject": true,
+    "isDefined": true,
+    "isProxy": true,
+    "isReactive": true,
+    "isReadonly": true,
+    "isRef": true,
+    "makeDestructurable": true,
+    "markRaw": true,
+    "nextTick": true,
+    "onActivated": true,
+    "onBeforeMount": true,
+    "onBeforeUnmount": true,
+    "onBeforeUpdate": true,
+    "onClickOutside": true,
+    "onDeactivated": true,
+    "onErrorCaptured": true,
+    "onKeyStroke": true,
+    "onLongPress": true,
+    "onMounted": true,
+    "onRenderTracked": true,
+    "onRenderTriggered": true,
+    "onScopeDispose": true,
+    "onServerPrefetch": true,
+    "onStartTyping": true,
+    "onUnmounted": true,
+    "onUpdated": true,
+    "pausableWatch": true,
+    "provide": true,
+    "reactify": true,
+    "reactifyObject": true,
+    "reactive": true,
+    "reactiveComputed": true,
+    "reactiveOmit": true,
+    "reactivePick": true,
+    "readonly": true,
+    "ref": true,
+    "refAutoReset": true,
+    "refDebounced": true,
+    "refDefault": true,
+    "refThrottled": true,
+    "refWithControl": true,
+    "resolveComponent": true,
+    "resolveRef": true,
+    "resolveUnref": true,
+    "shallowReactive": true,
+    "shallowReadonly": true,
+    "shallowRef": true,
+    "syncRef": true,
+    "syncRefs": true,
+    "templateRef": true,
+    "throttledRef": true,
+    "throttledWatch": true,
+    "toRaw": true,
+    "toReactive": true,
+    "toRef": true,
+    "toRefs": true,
+    "triggerRef": true,
+    "tryOnBeforeMount": true,
+    "tryOnBeforeUnmount": true,
+    "tryOnMounted": true,
+    "tryOnScopeDispose": true,
+    "tryOnUnmounted": true,
+    "unref": true,
+    "unrefElement": true,
+    "until": true,
+    "useActiveElement": true,
+    "useArrayEvery": true,
+    "useArrayFilter": true,
+    "useArrayFind": true,
+    "useArrayFindIndex": true,
+    "useArrayJoin": true,
+    "useArrayMap": true,
+    "useArrayReduce": true,
+    "useArraySome": true,
+    "useAsyncQueue": true,
+    "useAsyncState": true,
+    "useAttrs": true,
+    "useBase64": true,
+    "useBattery": true,
+    "useBluetooth": true,
+    "useBreakpoints": true,
+    "useBroadcastChannel": true,
+    "useBrowserLocation": true,
+    "useCached": true,
+    "useClipboard": true,
+    "useColorMode": true,
+    "useConfirmDialog": true,
+    "useCounter": true,
+    "useCssModule": true,
+    "useCssVar": true,
+    "useCssVars": true,
+    "useCurrentElement": true,
+    "useCycleList": true,
+    "useDark": true,
+    "useDateFormat": true,
+    "useDebounce": true,
+    "useDebounceFn": true,
+    "useDebouncedRefHistory": true,
+    "useDeviceMotion": true,
+    "useDeviceOrientation": true,
+    "useDevicePixelRatio": true,
+    "useDevicesList": true,
+    "useDisplayMedia": true,
+    "useDocumentVisibility": true,
+    "useDraggable": true,
+    "useDropZone": true,
+    "useElementBounding": true,
+    "useElementByPoint": true,
+    "useElementHover": true,
+    "useElementSize": true,
+    "useElementVisibility": true,
+    "useEventBus": true,
+    "useEventListener": true,
+    "useEventSource": true,
+    "useEyeDropper": true,
+    "useFavicon": true,
+    "useFetch": true,
+    "useFileDialog": true,
+    "useFileSystemAccess": true,
+    "useFocus": true,
+    "useFocusWithin": true,
+    "useFps": true,
+    "useFullscreen": true,
+    "useGamepad": true,
+    "useGeolocation": true,
+    "useIdle": true,
+    "useImage": true,
+    "useInfiniteScroll": true,
+    "useIntersectionObserver": true,
+    "useInterval": true,
+    "useIntervalFn": true,
+    "useKeyModifier": true,
+    "useLastChanged": true,
+    "useLocalStorage": true,
+    "useMagicKeys": true,
+    "useManualRefHistory": true,
+    "useMediaControls": true,
+    "useMediaQuery": true,
+    "useMemoize": true,
+    "useMemory": true,
+    "useMounted": true,
+    "useMouse": true,
+    "useMouseInElement": true,
+    "useMousePressed": true,
+    "useMutationObserver": true,
+    "useNavigatorLanguage": true,
+    "useNetwork": true,
+    "useNow": true,
+    "useObjectUrl": true,
+    "useOffsetPagination": true,
+    "useOnline": true,
+    "usePageLeave": true,
+    "useParallax": true,
+    "usePermission": true,
+    "usePointer": true,
+    "usePointerSwipe": true,
+    "usePreferredColorScheme": true,
+    "usePreferredDark": true,
+    "usePreferredLanguages": true,
+    "useRafFn": true,
+    "useRefHistory": true,
+    "useResizeObserver": true,
+    "useRoute": true,
+    "useRouter": true,
+    "useScreenOrientation": true,
+    "useScreenSafeArea": true,
+    "useScriptTag": true,
+    "useScroll": true,
+    "useScrollLock": true,
+    "useSessionStorage": true,
+    "useShare": true,
+    "useSlots": true,
+    "useSpeechRecognition": true,
+    "useSpeechSynthesis": true,
+    "useStepper": true,
+    "useStorage": true,
+    "useStorageAsync": true,
+    "useStyleTag": true,
+    "useSupported": true,
+    "useSwipe": true,
+    "useTemplateRefsList": true,
+    "useTextDirection": true,
+    "useTextSelection": true,
+    "useTextareaAutosize": true,
+    "useThrottle": true,
+    "useThrottleFn": true,
+    "useThrottledRefHistory": true,
+    "useTimeAgo": true,
+    "useTimeout": true,
+    "useTimeoutFn": true,
+    "useTimeoutPoll": true,
+    "useTimestamp": true,
+    "useTitle": true,
+    "useToggle": true,
+    "useTransition": true,
+    "useUrlSearchParams": true,
+    "useUserMedia": true,
+    "useVModel": true,
+    "useVModels": true,
+    "useVibrate": true,
+    "useVirtualList": true,
+    "useWakeLock": true,
+    "useWebNotification": true,
+    "useWebSocket": true,
+    "useWebWorker": true,
+    "useWebWorkerFn": true,
+    "useWindowFocus": true,
+    "useWindowScroll": true,
+    "useWindowSize": true,
+    "watch": true,
+    "watchArray": true,
+    "watchAtMost": true,
+    "watchDebounced": true,
+    "watchEffect": true,
+    "watchIgnorable": true,
+    "watchOnce": true,
+    "watchPausable": true,
+    "watchPostEffect": true,
+    "watchSyncEffect": true,
+    "watchThrottled": true,
+    "watchTriggerable": true,
+    "watchWithFilter": true,
+    "whenever": true
+  }
+}

+ 73 - 0
.eslintrc.js

@@ -0,0 +1,73 @@
+// @ts-check
+const { defineConfig } = require('eslint-define-config')
+module.exports = defineConfig({
+  root: true,
+  env: {
+    browser: true,
+    node: true,
+    es6: true
+  },
+  parser: 'vue-eslint-parser',
+  parserOptions: {
+    parser: '@typescript-eslint/parser',
+    ecmaVersion: 2020,
+    sourceType: 'module',
+    jsxPragma: 'React',
+    ecmaFeatures: {
+      jsx: true
+    }
+  },
+  extends: [
+    'plugin:vue/vue3-recommended',
+    'plugin:@typescript-eslint/recommended',
+    'prettier',
+    'plugin:prettier/recommended',
+    '@unocss'
+  ],
+  rules: {
+    'vue/no-setup-props-destructure': 'off',
+    'vue/script-setup-uses-vars': 'error',
+    'vue/no-reserved-component-names': 'off',
+    '@typescript-eslint/ban-ts-ignore': 'off',
+    '@typescript-eslint/explicit-function-return-type': 'off',
+    '@typescript-eslint/no-explicit-any': 'off',
+    '@typescript-eslint/no-var-requires': 'off',
+    '@typescript-eslint/no-empty-function': 'off',
+    'vue/custom-event-name-casing': 'off',
+    'no-use-before-define': 'off',
+    '@typescript-eslint/no-use-before-define': 'off',
+    '@typescript-eslint/ban-ts-comment': 'off',
+    '@typescript-eslint/ban-types': 'off',
+    '@typescript-eslint/no-non-null-assertion': 'off',
+    '@typescript-eslint/explicit-module-boundary-types': 'off',
+    '@typescript-eslint/no-unused-vars': 'off',
+    'no-unused-vars': 'off',
+    'space-before-function-paren': 'off',
+
+    'vue/attributes-order': 'off',
+    'vue/one-component-per-file': 'off',
+    'vue/html-closing-bracket-newline': 'off',
+    'vue/max-attributes-per-line': 'off',
+    'vue/multiline-html-element-content-newline': 'off',
+    'vue/singleline-html-element-content-newline': 'off',
+    'vue/attribute-hyphenation': 'off',
+    'vue/require-default-prop': 'off',
+    'vue/require-explicit-emits': 'off',
+    'vue/require-toggle-inside-transition': 'off',
+    'vue/html-self-closing': [
+      'error',
+      {
+        html: {
+          void: 'always',
+          normal: 'never',
+          component: 'always'
+        },
+        svg: 'always',
+        math: 'always'
+      }
+    ],
+    'vue/multi-word-component-names': 'off',
+    'vue/no-v-html': 'off',
+    'prettier/prettier': 'off' // 芋艿:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
+  }
+})

+ 11 - 0
.gitignore

@@ -0,0 +1,11 @@
+node_modules
+.DS_Store
+dist
+dist-ssr
+*.local
+/dist*
+*-lock.*
+pnpm-debug
+auto-*.d.ts
+.idea
+.history

BIN
.image/Java监控.jpg


BIN
.image/MySQL.jpg


BIN
.image/OA请假-列表.jpg


BIN
.image/OA请假-发起.jpg


BIN
.image/OA请假-详情.jpg


BIN
.image/Redis.jpg


BIN
.image/admin-uniapp/01.png


BIN
.image/admin-uniapp/02.png


BIN
.image/admin-uniapp/03.png


BIN
.image/admin-uniapp/04.png


BIN
.image/admin-uniapp/05.png


BIN
.image/admin-uniapp/06.png


BIN
.image/admin-uniapp/07.png


BIN
.image/admin-uniapp/08.png


BIN
.image/admin-uniapp/09.png


BIN
.image/common/mall-feature.png


BIN
.image/common/mall-preview.png


BIN
.image/common/project-vs.png


BIN
.image/common/ruoyi-vue-pro-architecture.png


BIN
.image/common/ruoyi-vue-pro-biz.png


BIN
.image/common/yudao-cloud-architecture.png


BIN
.image/common/yudao-roadmap.png


BIN
.image/个人中心.jpg


BIN
.image/代码生成.jpg


BIN
.image/令牌管理.jpg


BIN
.image/任务列表-审批.jpg


BIN
.image/任务列表-已办.jpg


BIN
.image/任务列表-待办.jpg


BIN
.image/任务日志.jpg


BIN
.image/商户信息.jpg


BIN
.image/在线用户.jpg


BIN
.image/大屏设计器-列表.jpg


BIN
.image/大屏设计器-编辑.jpg


BIN
.image/大屏设计器-预览.jpg


BIN
.image/字典数据.jpg


BIN
.image/字典类型.jpg


BIN
.image/定时任务.jpg


BIN
.image/岗位管理.jpg


BIN
.image/应用信息-列表.jpg


BIN
.image/应用信息-编辑.jpg


BIN
.image/应用管理.jpg


BIN
.image/我的流程-列表.jpg


BIN
.image/我的流程-发起.jpg


BIN
.image/我的流程-详情.jpg


BIN
.image/报表设计器-图形报表.jpg


BIN
.image/报表设计器-打印设计.jpg


BIN
.image/报表设计器-数据报表.jpg


BIN
.image/操作日志.jpg


BIN
.image/支付订单.jpg


BIN
.image/敏感词.jpg


BIN
.image/数据库文档.jpg


BIN
.image/文件管理.jpg


BIN
.image/文件管理2.jpg


BIN
.image/文件配置.jpg


BIN
.image/日志中心.jpg


BIN
.image/流程模型-列表.jpg


BIN
.image/流程模型-定义.jpg


BIN
.image/流程模型-设计.jpg


BIN
.image/流程表单.jpg


BIN
.image/生成效果.jpg


BIN
.image/用户分组.jpg


BIN
.image/用户管理.jpg


BIN
.image/登录.jpg


BIN
.image/登录日志.jpg


BIN
.image/短信日志.jpg


BIN
.image/短信模板.jpg


BIN
.image/短信渠道.jpg


BIN
.image/租户套餐.png


BIN
.image/租户管理.jpg


BIN
.image/系统接口.jpg


BIN
.image/菜单管理.jpg


BIN
.image/表单构建.jpg


BIN
.image/角色管理.jpg


BIN
.image/访问日志.jpg


BIN
.image/退款订单.jpg


BIN
.image/通知公告.jpg


BIN
.image/部门管理.jpg


BIN
.image/配置管理.jpg


BIN
.image/链路追踪.jpg


BIN
.image/错误日志.jpg


BIN
.image/错误码管理.jpg


BIN
.image/首页.jpg


+ 11 - 0
.prettierignore

@@ -0,0 +1,11 @@
+/node_modules/**
+/dist/
+/dist*
+/public/*
+/docs/*
+/vite.config.ts
+/src/types/env.d.ts
+/src/types/auto-components.d.ts
+/src/types/auto-imports.d.ts
+/docs/**/*
+CHANGELOG

+ 6 - 0
.stylelintignore

@@ -0,0 +1,6 @@
+/dist/*
+/public/*
+public/*
+/dist*
+/src/types/env.d.ts
+/docs/**/*

+ 19 - 0
.vscode/extensions.json

@@ -0,0 +1,19 @@
+{
+  "recommendations": [
+    "christian-kohler.path-intellisense",
+    "vscode-icons-team.vscode-icons",
+    "davidanson.vscode-markdownlint",
+    "stylelint.vscode-stylelint",
+    "dbaeumer.vscode-eslint",
+    "esbenp.prettier-vscode",
+    "mrmlnc.vscode-less",
+    "lokalise.i18n-ally",
+    "redhat.vscode-yaml",
+    "csstools.postcss",
+    "mikestead.dotenv",
+    "eamodio.gitlens",
+    "antfu.iconify",
+    "antfu.unocss",
+    "Vue.volar"
+  ]
+}

+ 16 - 0
.vscode/launch.json

@@ -0,0 +1,16 @@
+{
+  // Use IntelliSense to learn about possible attributes.
+  // Hover to view descriptions of existing attributes.
+  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "type": "msedge",
+      "request": "launch",
+      "name": "Launch Edge against localhost",
+      "url": "http://localhost",
+      "webRoot": "${workspaceFolder}/src",
+      "sourceMaps": true
+    }
+  ]
+}

+ 144 - 0
.vscode/settings.json

@@ -0,0 +1,144 @@
+{
+  "typescript.tsdk": "node_modules/typescript/lib",
+  "npm.packageManager": "pnpm",
+  "editor.tabSize": 2,
+  "prettier.printWidth": 100, // 超过最大值换行
+  "editor.defaultFormatter": "esbenp.prettier-vscode",
+  "files.eol": "\n",
+  "search.exclude": {
+    "**/node_modules": true,
+    "**/*.log": true,
+    "**/*.log*": true,
+    "**/bower_components": true,
+    "**/dist": true,
+    "**/elehukouben": true,
+    "**/.git": true,
+    "**/.gitignore": true,
+    "**/.svn": true,
+    "**/.DS_Store": true,
+    "**/.idea": true,
+    "**/.vscode": false,
+    "**/yarn.lock": true,
+    "**/tmp": true,
+    "out": true,
+    "dist": true,
+    "node_modules": true,
+    "CHANGELOG.md": true,
+    "examples": true,
+    "res": true,
+    "screenshots": true,
+    "yarn-error.log": true,
+    "**/.yarn": true
+  },
+  "files.exclude": {
+    "**/.cache": true,
+    "**/.editorconfig": true,
+    "**/.eslintcache": true,
+    "**/bower_components": true,
+    "**/.idea": true,
+    "**/tmp": true,
+    "**/.git": true,
+    "**/.svn": true,
+    "**/.hg": true,
+    "**/CVS": true,
+    "**/.DS_Store": true
+  },
+  "files.watcherExclude": {
+    "**/.git/objects/**": true,
+    "**/.git/subtree-cache/**": true,
+    "**/.vscode/**": true,
+    "**/node_modules/**": true,
+    "**/tmp/**": true,
+    "**/bower_components/**": true,
+    "**/dist/**": true,
+    "**/yarn.lock": true
+  },
+  "stylelint.enable": true,
+  "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
+  "path-intellisense.mappings": {
+    "@/": "${workspaceRoot}/src"
+  },
+  "[javascriptreact]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[typescript]": {
+    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+  },
+  "[typescriptreact]": {
+    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+  },
+  "[html]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[css]": {
+    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+  },
+  "[less]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[scss]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[markdown]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "editor.codeActionsOnSave": {
+    "source.fixAll.eslint": "explicit"
+  },
+  "[vue]": {
+    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+  },
+  "i18n-ally.localesPaths": ["src/locales"],
+  "i18n-ally.keystyle": "nested",
+  "i18n-ally.sortKeys": true,
+  "i18n-ally.namespace": false,
+  "i18n-ally.enabledParsers": ["ts"],
+  "i18n-ally.sourceLanguage": "en",
+  "i18n-ally.displayLanguage": "zh-CN",
+  "i18n-ally.enabledFrameworks": ["vue", "react"],
+  "cSpell.words": [
+    "brotli",
+    "browserslist",
+    "codemirror",
+    "commitlint",
+    "cropperjs",
+    "echart",
+    "echarts",
+    "esnext",
+    "esno",
+    "iconify",
+    "INTLIFY",
+    "lintstagedrc",
+    "logicflow",
+    "nprogress",
+    "pinia",
+    "pnpm",
+    "qrcode",
+    "sider",
+    "sortablejs",
+    "stylelint",
+    "svgs",
+    "unocss",
+    "unplugin",
+    "unref",
+    "videojs",
+    "VITE",
+    "vitejs",
+    "vueuse",
+    "wangeditor",
+    "xingyu",
+    "yudao",
+    "zxcvbn"
+  ],
+  // 控制相关文件嵌套展示
+  "explorer.fileNesting.enabled": true,
+  "explorer.fileNesting.expand": false,
+  "explorer.fileNesting.patterns": {
+    "*.ts": "$(capture).test.ts, $(capture).test.tsx",
+    "*.tsx": "$(capture).test.ts, $(capture).test.tsx",
+    "*.env": "$(capture).env.*",
+    "package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
+  },
+  "terminal.integrated.scrollback": 10000,
+  "nuxt.isNuxtApp": false
+}

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021-present Archer
+
+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 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.

+ 246 - 0
README.md

@@ -0,0 +1,246 @@
+**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
+
+**「我喜欢写代码,乐此不疲」**  
+**「我喜欢做开源,以此为乐」**
+
+我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
+
+如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
+
+## 🐶 新手必读
+
+* nodejs > 16.18.0 && pnpm > 8.6.0 (强制使用pnpm)
+* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
+* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
+* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
+* 启动文档:<https://doc.iocoder.cn/quick-start/>
+* 视频教程:<https://doc.iocoder.cn/video/>
+
+## 🐯 平台简介
+
+**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
+
+* 采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) 实现
+* 改换 saas,自动引入等功能
+* 使用 Element Plus 免费开源的中后台模版,具备如下特性:
+
+![首页](public/home.png)
+
+* **最新技术栈**:使用 Vue3、Vite4 等前端前沿技术开发
+* **TypeScript**: 应用程序级 JavaScript 的语言
+* **主题**: 可配置的主题
+* **国际化**:内置完善的国际化方案
+* **权限**:内置完善的动态路由权限生成方案
+* **组件**:二次封装了多个常用的组件
+* **示例**:内置丰富的示例
+
+## 技术栈
+
+| 框架                                                                   | 说明               | 版本     |
+|----------------------------------------------------------------------|------------------|--------|
+| [Vue](https://staging-cn.vuejs.org/)                                 | Vue 框架           | 3.3.8 |
+| [Vite](https://cn.vitejs.dev//)                                      | 开发与构建工具          | 4.5.0  |
+| [Element Plus](https://element-plus.org/zh-CN/)                      | Element Plus     | 2.4.2 |
+| [TypeScript](https://www.typescriptlang.org/docs/)                   | JavaScript 的超集   | 5.2.2  |
+| [pinia](https://pinia.vuejs.org/)                                    | Vue 存储库 替代 vuex5 | 2.1.7 |
+| [vueuse](https://vueuse.org/)                                        | 常用工具集            | 10.6.1 |
+| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化              | 9.6.5  |
+| [vue-router](https://router.vuejs.org/)                              | Vue 路由           | 4.2.5  |
+| [unocss](https://uno.antfu.me/)                                      | 原子 css          | 0.57.4  |
+| [iconify](https://icon-sets.iconify.design/)                         | 在线图标库            | 3.1.1  |
+| [wangeditor](https://www.wangeditor.com/)                            | 富文本编辑器           | 5.1.23 |
+
+## 开发工具
+
+推荐 VS Code 开发,配合插件如下:
+
+| 插件名                           | 功能                       |
+|-------------------------------|--------------------------|
+| TypeScript Vue Plugin (Volar) | 用于 TypeScript 的 Vue 插件  |
+| Vue Language Features (Volar) | Vue3.0 语法支持              |
+| unocss                        | unocss for vscode           |
+| Iconify IntelliSense          | Iconify 预览和搜索           |
+| i18n Ally                     | 国际化智能提示               |
+| Stylelint                     | Css    格式化               |
+| Prettier                      | 代码格式化                   |
+| ESLint                        | 脚本代码检查                  |
+| DotENV                        | env 文件高亮                 |
+
+## 🔥 后端架构
+
+支持 Spring Boot、Spring Cloud 两种架构:
+
+① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
+
+![架构图](/.image/common/ruoyi-vue-pro-architecture.png)
+
+② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
+
+![架构图](/.image/common/yudao-cloud-architecture.png)
+
+## 内置功能
+
+系统内置多种多种业务功能,可以用于快速你的业务系统:
+
+* 系统功能
+* 基础设施
+* 工作流程
+* 支付系统
+* 会员中心
+* 数据报表
+* 商城系统
+* 微信公众号
+
+### 系统功能
+
+|     | 功能    | 描述                              |
+|-----|-------|---------------------------------|
+|     | 用户管理  | 用户是系统操作者,该功能主要完成系统用户配置          |
+| ⭐️  | 在线用户  | 当前系统中活跃用户状态监控,支持手动踢下线           |
+|     | 角色管理  | 角色菜单权限分配、设置角色按机构进行数据范围权限划分      |
+|     | 菜单管理  | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能    |
+|     | 部门管理  | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限  |
+|     | 岗位管理  | 配置系统用户所属担任职务                    |
+| 🚀  | 租户管理  | 配置系统租户,支持 SaaS 场景下的多租户功能        |
+| 🚀  | 租户套餐  | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限       |
+|     | 字典管理  | 对系统中经常使用的一些较为固定的数据进行维护          |
+| 🚀  | 短信管理  | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 |
+| 🚀  | 邮件管理  | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台       |
+| 🚀  | 站内信   | 系统内的消息通知,提供站内信模版、站内信消息          |
+| 🚀  | 操作日志  | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
+| ⭐️  | 登录日志  | 系统登录日志记录查询,包含登录异常               |
+| 🚀  | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务     |
+|     | 通知公告  | 系统通知公告信息发布维护                    |
+| 🚀  | 敏感词   | 配置系统敏感词,支持标签分组                  |
+| 🚀  | 应用管理  | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 |
+| 🚀  | 地区管理  | 展示省份、城市、区镇等城市信息,支持 IP 对应城市      |
+
+### 工作流程
+
+|     | 功能    | 描述                                     |
+|-----|-------|----------------------------------------|
+| 🚀  | 流程模型  | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 |
+| 🚀  | 流程表单  | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 |
+| 🚀  | 用户分组  | 自定义用户分组,可用于工作流的审批分组                    |
+| 🚀  | 我的流程  | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线    |
+| 🚀  | 待办任务  | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作    |
+| 🚀  | 已办任务  | 查看自己【已】审批的工作任务,未来会支持回退操作               |
+| 🚀  | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 |
+
+### 支付系统
+
+|     | 功能   | 描述                        |
+|-----|------|---------------------------|
+| 🚀  | 商户信息 | 管理商户信息,支持 Saas 场景下的多商户功能  |
+| 🚀  | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 |
+| 🚀  | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单     |
+| 🚀  | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单     |
+
+ps:核心功能已经实现,正在对接微信小程序中...
+
+### 基础设施
+
+|     | 功能       | 描述                                           |
+|-----|----------|----------------------------------------------|
+| 🚀  | 代码生成     | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载       |
+| 🚀  | 系统接口     | 基于 Swagger 自动生成相关的 RESTful API 接口文档          |
+| 🚀  | 数据库文档    | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式      |
+|     | 表单构建     | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件         |
+| 🚀  | 配置管理     | 对系统动态配置常用参数,支持 SpringBoot 加载                 |
+| ⭐️  | 定时任务     | 在线(添加、修改、删除)任务调度包含执行结果日志                     |
+| 🚀  | 文件服务     | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等   |
+| 🚀  | API 日志   | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题   |
+|     | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈              |
+|     | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理           |
+| 🚀  | 消息队列     | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |
+| 🚀  | Java 监控  | 基于 Spring Boot Admin 实现 Java 应用的监控           |
+| 🚀  | 链路追踪     | 接入 SkyWalking 组件,实现链路追踪                      |
+| 🚀  | 日志中心     | 接入 SkyWalking 组件,实现日志中心                      |
+| 🚀  | 分布式锁     | 基于 Redis 实现分布式锁,满足并发场景                       |
+| 🚀  | 幂等组件     | 基于 Redis 实现幂等组件,解决重复请求问题                     |
+| 🚀  | 服务保障     | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能          |
+| 🚀  | 日志服务     | 轻量级日志中心,查看远程服务器的日志                           |
+| 🚀  | 单元测试     | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等    |
+
+### 数据报表
+
+|     | 功能    | 描述                 |
+|-----|-------|--------------------|
+| 🚀  | 报表设计器 | 支持数据报表、图形报表、打印设计等  |
+| 🚀  | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 |
+
+### 微信公众号
+
+|     | 功能     | 描述                            |
+|-----|--------|-------------------------------|
+| 🚀  | 账号管理   | 配置接入的微信公众号,可支持多个公众号           |
+| 🚀  | 数据统计   | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据  |
+| 🚀  | 粉丝管理   | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
+| 🚀  | 消息管理   | 查看粉丝发送的消息列表,可主动回复粉丝消息         |
+| 🚀  | 自动回复   | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
+| 🚀  | 标签管理   | 对公众号的标签进行创建、查询、修改、删除等操作       |
+| 🚀  | 菜单管理   | 自定义公众号的菜单,也可以从公众号同步菜单         |
+| 🚀  | 素材管理   | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
+| 🚀  | 图文草稿箱  | 新增常用的图文素材到草稿箱,可发布到公众号         |
+| 🚀  | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作           |
+
+### 商城系统
+
+![功能图](/.image/common/mall-feature.png)
+
+![功能图](/.image/common/mall-preview.png)
+
+_前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋道快速开发平台_
+
+演示地址:<https://doc.iocoder.cn/mall-preview/>
+
+## 🐷 演示图
+
+### 系统功能
+
+| 模块       | biu                         | biu                       | biu                      |
+|----------|-----------------------------|---------------------------|--------------------------|
+| 登录 & 首页  | ![登录](/.image/登录.jpg)       | ![首页](/.image/首页.jpg)     | ![个人中心](/.image/个人中心.jpg) |
+| 用户 & 应用  | ![用户管理](/.image/用户管理.jpg)   | ![令牌管理](/.image/令牌管理.jpg) | ![应用管理](/.image/应用管理.jpg) |
+| 租户 & 套餐  | ![租户管理](/.image/租户管理.jpg)   | ![租户套餐](/.image/租户套餐.png) | -                        |
+| 部门 & 岗位  | ![部门管理](/.image/部门管理.jpg)   | ![岗位管理](/.image/岗位管理.jpg) | -                        |
+| 菜单 & 角色  | ![菜单管理](/.image/菜单管理.jpg)   | ![角色管理](/.image/角色管理.jpg) | -                        |
+| 审计日志     | ![操作日志](/.image/操作日志.jpg)   | ![登录日志](/.image/登录日志.jpg) | -                        |
+| 短信       | ![短信渠道](/.image/短信渠道.jpg)   | ![短信模板](/.image/短信模板.jpg) | ![短信日志](/.image/短信日志.jpg) |
+| 字典 & 敏感词 | ![字典类型](/.image/字典类型.jpg)   | ![字典数据](/.image/字典数据.jpg) | ![敏感词](/.image/敏感词.jpg)  |
+| 错误码 & 通知 | ![错误码管理](/.image/错误码管理.jpg) | ![通知公告](/.image/通知公告.jpg) | -                        |
+
+### 工作流程
+
+| 模块      | biu                             | biu                             | biu                             |
+|---------|---------------------------------|---------------------------------|---------------------------------|
+| 流程模型    | ![流程模型-列表](/.image/流程模型-列表.jpg) | ![流程模型-设计](/.image/流程模型-设计.jpg) | ![流程模型-定义](/.image/流程模型-定义.jpg) |
+| 表单 & 分组 | ![流程表单](/.image/流程表单.jpg)       | ![用户分组](/.image/用户分组.jpg)       | -                               |
+| 我的流程    | ![我的流程-列表](/.image/我的流程-列表.jpg) | ![我的流程-发起](/.image/我的流程-发起.jpg) | ![我的流程-详情](/.image/我的流程-详情.jpg) |
+| 待办 & 已办 | ![任务列表-审批](/.image/任务列表-审批.jpg) | ![任务列表-待办](/.image/任务列表-待办.jpg) | ![任务列表-已办](/.image/任务列表-已办.jpg) |
+| OA 请假   | ![OA请假-列表](/.image/OA请假-列表.jpg) | ![OA请假-发起](/.image/OA请假-发起.jpg) | ![OA请假-详情](/.image/OA请假-详情.jpg) |
+
+### 基础设施
+
+| 模块            | biu                           | biu                         | biu                       |
+|---------------|-------------------------------|-----------------------------|---------------------------|
+| 代码生成          | ![代码生成](/.image/代码生成.jpg)     | ![生成效果](/.image/生成效果.jpg)   | -                         |
+| 文档            | ![系统接口](/.image/系统接口.jpg)     | ![数据库文档](/.image/数据库文档.jpg) | -                         |
+| 文件 & 配置       | ![文件配置](/.image/文件配置.jpg)     | ![文件管理](/.image/文件管理2.jpg)  | ![配置管理](/.image/配置管理.jpg) |
+| 定时任务          | ![定时任务](/.image/定时任务.jpg)     | ![任务日志](/.image/任务日志.jpg)   | -                         |
+| API 日志        | ![访问日志](/.image/访问日志.jpg)     | ![错误日志](/.image/错误日志.jpg)   | -                         |
+| MySQL & Redis | ![MySQL](/.image/MySQL.jpg)   | ![Redis](/.image/Redis.jpg) | -                         |
+| 监控平台          | ![Java监控](/.image/Java监控.jpg) | ![链路追踪](/.image/链路追踪.jpg)   | ![日志中心](/.image/日志中心.jpg) |
+
+### 支付系统
+
+| 模块      | biu                       | biu                             | biu                             |
+|---------|---------------------------|---------------------------------|---------------------------------|
+| 商家 & 应用 | ![商户信息](/.image/商户信息.jpg) | ![应用信息-列表](/.image/应用信息-列表.jpg) | ![应用信息-编辑](/.image/应用信息-编辑.jpg) |
+| 支付 & 退款 | ![支付订单](/.image/支付订单.jpg) | ![退款订单](/.image/退款订单.jpg)       | ---                             |
+### 数据报表
+
+| 模块    | biu                             | biu                             | biu                                   |
+|-------|---------------------------------|---------------------------------|---------------------------------------|
+| 报表设计器 | ![数据报表](/.image/报表设计器-数据报表.jpg) | ![图形报表](/.image/报表设计器-图形报表.jpg) | ![报表设计器-打印设计](/.image/报表设计器-打印设计.jpg) |
+| 大屏设计器 | ![大屏列表](/.image/大屏设计器-列表.jpg)   | ![大屏预览](/.image/大屏设计器-预览.jpg)   | ![大屏编辑](/.image/大屏设计器-编辑.jpg)         |

+ 100 - 0
build/vite/index.ts

@@ -0,0 +1,100 @@
+import { resolve } from 'path'
+import Vue from '@vitejs/plugin-vue'
+import VueJsx from '@vitejs/plugin-vue-jsx'
+import progress from 'vite-plugin-progress'
+import EslintPlugin from 'vite-plugin-eslint'
+import PurgeIcons from 'vite-plugin-purge-icons'
+import { ViteEjsPlugin } from 'vite-plugin-ejs'
+// @ts-ignore
+import ElementPlus from 'unplugin-element-plus/vite'
+import AutoImport from 'unplugin-auto-import/vite'
+import Components from 'unplugin-vue-components/vite'
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
+import viteCompression from 'vite-plugin-compression'
+import topLevelAwait from 'vite-plugin-top-level-await'
+import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
+import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
+import UnoCSS from 'unocss/vite'
+
+export function createVitePlugins() {
+  const root = process.cwd()
+
+  // 路径查找
+  function pathResolve(dir: string) {
+    return resolve(root, '.', dir)
+  }
+
+  return [
+    Vue(),
+    VueJsx(),
+    UnoCSS(),
+    progress(),
+    PurgeIcons(),
+    ElementPlus({}),
+    AutoImport({
+      include: [
+        /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
+        /\.vue$/,
+        /\.vue\?vue/, // .vue
+        /\.md$/ // .md
+      ],
+      imports: [
+        'vue',
+        'vue-router',
+        // 可额外添加需要 autoImport 的组件
+        {
+          '@/hooks/web/useI18n': ['useI18n'],
+          '@/hooks/web/useMessage': ['useMessage'],
+          '@/hooks/web/useTable': ['useTable'],
+          '@/hooks/web/useCrudSchemas': ['useCrudSchemas'],
+          '@/utils/formRules': ['required'],
+          '@/utils/dict': ['DICT_TYPE']
+        }
+      ],
+      dts: 'src/types/auto-imports.d.ts',
+      resolvers: [ElementPlusResolver()],
+      eslintrc: {
+        enabled: false, // Default `false`
+        filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
+        globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
+      }
+    }),
+    Components({
+      // 生成自定义 `auto-components.d.ts` 全局声明
+      dts: 'src/types/auto-components.d.ts',
+      // 自定义组件的解析器
+      resolvers: [ElementPlusResolver()],
+      globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
+    }),
+    EslintPlugin({
+      cache: false,
+      include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
+    }),
+    VueI18nPlugin({
+      runtimeOnly: true,
+      compositionOnly: true,
+      include: [resolve(__dirname, 'src/locales/**')]
+    }),
+    createSvgIconsPlugin({
+      iconDirs: [pathResolve('src/assets/svgs')],
+      symbolId: 'icon-[dir]-[name]',
+      svgoOptions: true
+    }),
+    viteCompression({
+      verbose: true, // 是否在控制台输出压缩结果
+      disable: false, // 是否禁用
+      threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
+      algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
+      ext: '.gz', // 生成的压缩包后缀
+      deleteOriginFile: false //压缩后是否删除源文件
+    }),
+    ViteEjsPlugin(),
+    topLevelAwait({
+      // https://juejin.cn/post/7152191742513512485
+      // The export name of top-level await promise for each chunk module
+      promiseExportName: '__tla',
+      // The function to generate import names of top-level await promise in each chunk module
+      promiseImportName: (i) => `__tla_${i}`
+    })
+  ]
+}

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