HuRongxin 1 сар өмнө
commit
c450919a3f
100 өөрчлөгдсөн 8984 нэмэгдсэн , 0 устгасан
  1. 21 0
      .editorconfig
  2. 35 0
      .env.development
  3. 38 0
      .env.production
  4. 323 0
      .eslintrc-auto-import.json
  5. 29 0
      .gitignore
  6. 9 0
      .prettierignore
  7. 20 0
      .prettierrc
  8. 20 0
      LICENSE
  9. 83 0
      README.md
  10. 12 0
      bin/build.bat
  11. 12 0
      bin/package.bat
  12. 12 0
      bin/run-web.bat
  13. 44 0
      eslint.config.ts
  14. 191 0
      html/ie.html
  15. 214 0
      index.html
  16. 98 0
      package.json
  17. BIN
      public/favicon.ico
  18. 20 0
      src/App.vue
  19. 48 0
      src/animate.ts
  20. 84 0
      src/api/agent/merchant/index.ts
  21. 197 0
      src/api/agent/merchant/types.ts
  22. 75 0
      src/api/agent/withdrawalOrders/index.ts
  23. 291 0
      src/api/agent/withdrawalOrders/types.ts
  24. 62 0
      src/api/demo/demo/index.ts
  25. 90 0
      src/api/demo/demo/types.ts
  26. 62 0
      src/api/demo/tree/index.ts
  27. 80 0
      src/api/demo/tree/types.ts
  28. 104 0
      src/api/file/category/index.ts
  29. 199 0
      src/api/file/category/types.ts
  30. 125 0
      src/api/file/info/index.ts
  31. 319 0
      src/api/file/info/types.ts
  32. 113 0
      src/api/login.ts
  33. 11 0
      src/api/menu.ts
  34. 59 0
      src/api/monitor/cache/index.ts
  35. 7 0
      src/api/monitor/cache/types.ts
  36. 36 0
      src/api/monitor/loginInfo/index.ts
  37. 20 0
      src/api/monitor/loginInfo/types.ts
  38. 36 0
      src/api/monitor/online/index.ts
  39. 15 0
      src/api/monitor/online/types.ts
  40. 28 0
      src/api/monitor/operlog/index.ts
  41. 53 0
      src/api/monitor/operlog/types.ts
  42. 63 0
      src/api/setting/codeSetting/index.ts
  43. 119 0
      src/api/setting/codeSetting/types.ts
  44. 70 0
      src/api/setting/messageSetting/index.ts
  45. 122 0
      src/api/setting/messageSetting/types.ts
  46. 80 0
      src/api/setting/msgSignSetting/index.ts
  47. 145 0
      src/api/setting/msgSignSetting/types.ts
  48. 70 0
      src/api/setting/openPlatformSetting/index.ts
  49. 146 0
      src/api/setting/openPlatformSetting/types.ts
  50. 70 0
      src/api/setting/siteSetting/index.ts
  51. 212 0
      src/api/setting/siteSetting/types.ts
  52. 63 0
      src/api/setting/templateSetting/index.ts
  53. 111 0
      src/api/setting/templateSetting/types.ts
  54. 74 0
      src/api/store/sysService/index.ts
  55. 110 0
      src/api/store/sysService/types.ts
  56. 72 0
      src/api/store/sysShop/index.ts
  57. 553 0
      src/api/store/sysShop/types.ts
  58. 72 0
      src/api/store/sysStore/index.ts
  59. 374 0
      src/api/store/sysStore/types.ts
  60. 63 0
      src/api/system/agentGroup/index.ts
  61. 116 0
      src/api/system/agentGroup/types.ts
  62. 80 0
      src/api/system/client/index.ts
  63. 135 0
      src/api/system/client/types.ts
  64. 74 0
      src/api/system/config/index.ts
  65. 23 0
      src/api/system/config/types.ts
  66. 73 0
      src/api/system/dept/index.ts
  67. 60 0
      src/api/system/dept/types.ts
  68. 53 0
      src/api/system/dict/data/index.ts
  69. 26 0
      src/api/system/dict/data/types.ts
  70. 62 0
      src/api/system/dict/type/index.ts
  71. 18 0
      src/api/system/dict/type/types.ts
  72. 63 0
      src/api/system/functionMenu/index.ts
  73. 156 0
      src/api/system/functionMenu/types.ts
  74. 63 0
      src/api/system/group/index.ts
  75. 96 0
      src/api/system/group/types.ts
  76. 63 0
      src/api/system/groupFunctionMenu/index.ts
  77. 36 0
      src/api/system/groupFunctionMenu/types.ts
  78. 78 0
      src/api/system/menu/index.ts
  79. 69 0
      src/api/system/menu/types.ts
  80. 160 0
      src/api/system/merchantGroup/index.ts
  81. 52 0
      src/api/system/merchantGroup/types.ts
  82. 45 0
      src/api/system/notice/index.ts
  83. 26 0
      src/api/system/notice/types.ts
  84. 28 0
      src/api/system/oss/index.ts
  85. 22 0
      src/api/system/oss/types.ts
  86. 60 0
      src/api/system/ossConfig/index.ts
  87. 38 0
      src/api/system/ossConfig/types.ts
  88. 63 0
      src/api/system/package/index.ts
  89. 136 0
      src/api/system/package/types.ts
  90. 58 0
      src/api/system/post/index.ts
  91. 31 0
      src/api/system/post/types.ts
  92. 160 0
      src/api/system/role/index.ts
  93. 52 0
      src/api/system/role/types.ts
  94. 63 0
      src/api/system/shopBusinessHours/index.ts
  95. 96 0
      src/api/system/shopBusinessHours/types.ts
  96. 56 0
      src/api/system/shopManager/index.ts
  97. 128 0
      src/api/system/shopManager/types.ts
  98. 28 0
      src/api/system/social/auth.ts
  99. 114 0
      src/api/system/sysAgent/index.ts
  100. 340 0
      src/api/system/sysAgent/types.ts

+ 21 - 0
.editorconfig

@@ -0,0 +1,21 @@
+# 告诉EditorConfig插件,这是根文件,不用继续往上查找
+root = true
+
+# 匹配全部文件
+[*]
+# 缩进风格,可选space、tab
+indent_style = space
+# 缩进的空格数
+indent_size = 2
+# 设置字符集
+charset = utf-8
+# 结尾换行符,可选lf、cr、crlf
+end_of_line = lf
+# 在文件结尾插入新行
+trim_trailing_whitespace = true
+# 删除一行中的前后空格
+insert_final_newline = true
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false

+ 35 - 0
.env.development

@@ -0,0 +1,35 @@
+# 页面标题
+VITE_APP_TITLE = RuoYi-Vue-Plus多租户管理系统
+
+# 开发环境配置
+VITE_APP_ENV = 'development'
+
+# 开发环境
+VITE_APP_BASE_API = '/dev-api'
+
+# 应用访问路径 例如使用前缀 /admin/
+VITE_APP_CONTEXT_PATH = '/'
+
+# 监控地址
+VITE_APP_MONITOR_ADMIN = 'http://localhost:9090/admin/applications'
+
+# SnailJob 控制台地址
+VITE_APP_SNAILJOB_ADMIN = 'http://localhost:8800/snail-job'
+
+VITE_APP_PORT = 80
+
+# 接口加密功能开关(如需关闭 后端也必须对应关闭)
+VITE_APP_ENCRYPT = true
+# 接口加密传输 RSA 公钥与后端解密私钥对应 如更换需前后端一同更换
+VITE_APP_RSA_PUBLIC_KEY = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
+# 接口响应解密 RSA 私钥与后端加密公钥对应 如更换需前后端一同更换
+VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE='
+
+# 客户端id
+VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
+
+# websocket 开关 默认使用sse推送
+VITE_APP_WEBSOCKET = false
+
+# sse 开关
+VITE_APP_SSE = true

+ 38 - 0
.env.production

@@ -0,0 +1,38 @@
+# 页面标题
+VITE_APP_TITLE = RuoYi-Vue-Plus多租户管理系统
+
+# 生产环境配置
+VITE_APP_ENV = 'production'
+
+# 应用访问路径 例如使用前缀 /admin/
+VITE_APP_CONTEXT_PATH = '/'
+
+# 监控地址
+VITE_APP_MONITOR_ADMIN = '/admin/applications'
+
+# SnailJob 控制台地址
+VITE_APP_SNAILJOB_ADMIN = '/snail-job'
+
+# 生产环境
+VITE_APP_BASE_API = '/prod-api'
+
+# 是否在打包时开启压缩,支持 gzip 和 brotli
+VITE_BUILD_COMPRESS = gzip
+
+VITE_APP_PORT = 80
+
+# 接口加密功能开关(如需关闭 后端也必须对应关闭)
+VITE_APP_ENCRYPT = true
+# 接口加密传输 RSA 公钥与后端解密私钥对应 如更换需前后端一同更换
+VITE_APP_RSA_PUBLIC_KEY = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
+# 接口响应解密 RSA 私钥与后端加密公钥对应 如更换需前后端一同更换
+VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE='
+
+# 客户端id
+VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
+
+# websocket 开关 默认使用sse推送
+VITE_APP_WEBSOCKET = false
+
+# sse 开关
+VITE_APP_SSE = true

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

@@ -0,0 +1,323 @@
+{
+  "globals": {
+    "Component": true,
+    "ComponentPublicInstance": true,
+    "ComputedRef": true,
+    "DirectiveBinding": true,
+    "EffectScope": true,
+    "ElLoading": true,
+    "ElMessage": true,
+    "ElMessageBox": true,
+    "ElNotification": true,
+    "ExtractDefaultPropTypes": true,
+    "ExtractPropTypes": true,
+    "ExtractPublicPropTypes": true,
+    "InjectionKey": true,
+    "MaybeRef": true,
+    "MaybeRefOrGetter": true,
+    "PropType": true,
+    "Ref": true,
+    "VNode": true,
+    "WritableComputedRef": true,
+    "acceptHMRUpdate": 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,
+    "createPinia": true,
+    "createReactiveFn": true,
+    "createReusableTemplate": true,
+    "createSharedComposable": true,
+    "createTemplatePromise": true,
+    "createUnrefFn": true,
+    "customRef": true,
+    "debouncedRef": true,
+    "debouncedWatch": true,
+    "defineAsyncComponent": true,
+    "defineComponent": true,
+    "defineStore": true,
+    "eagerComputed": true,
+    "effectScope": true,
+    "extendRef": true,
+    "getActivePinia": true,
+    "getCurrentInstance": true,
+    "getCurrentScope": true,
+    "h": true,
+    "ignorableWatch": true,
+    "inject": true,
+    "injectLocal": true,
+    "isDefined": true,
+    "isProxy": true,
+    "isReactive": true,
+    "isReadonly": true,
+    "isRef": true,
+    "makeDestructurable": true,
+    "mapActions": true,
+    "mapGetters": true,
+    "mapState": true,
+    "mapStores": true,
+    "mapWritableState": true,
+    "markRaw": true,
+    "nextTick": true,
+    "onActivated": true,
+    "onBeforeMount": true,
+    "onBeforeRouteLeave": true,
+    "onBeforeRouteUpdate": true,
+    "onBeforeUnmount": true,
+    "onBeforeUpdate": true,
+    "onClickOutside": true,
+    "onDeactivated": true,
+    "onElementRemoval": true,
+    "onErrorCaptured": true,
+    "onKeyStroke": true,
+    "onLongPress": true,
+    "onMounted": true,
+    "onRenderTracked": true,
+    "onRenderTriggered": true,
+    "onScopeDispose": true,
+    "onServerPrefetch": true,
+    "onStartTyping": true,
+    "onUnmounted": true,
+    "onUpdated": true,
+    "onWatcherCleanup": true,
+    "pausableWatch": true,
+    "provide": true,
+    "provideLocal": 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,
+    "setActivePinia": true,
+    "setMapStoreSuffix": true,
+    "shallowReactive": true,
+    "shallowReadonly": true,
+    "shallowRef": true,
+    "storeToRefs": true,
+    "syncRef": true,
+    "syncRefs": true,
+    "templateRef": true,
+    "throttledRef": true,
+    "throttledWatch": true,
+    "toRaw": true,
+    "toReactive": true,
+    "toRef": true,
+    "toRefs": true,
+    "toValue": true,
+    "triggerRef": true,
+    "tryOnBeforeMount": true,
+    "tryOnBeforeUnmount": true,
+    "tryOnMounted": true,
+    "tryOnScopeDispose": true,
+    "tryOnUnmounted": true,
+    "unref": true,
+    "unrefElement": true,
+    "until": true,
+    "useActiveElement": true,
+    "useAnimate": true,
+    "useArrayDifference": true,
+    "useArrayEvery": true,
+    "useArrayFilter": true,
+    "useArrayFind": true,
+    "useArrayFindIndex": true,
+    "useArrayFindLast": true,
+    "useArrayIncludes": true,
+    "useArrayJoin": true,
+    "useArrayMap": true,
+    "useArrayReduce": true,
+    "useArraySome": true,
+    "useArrayUnique": true,
+    "useAsyncQueue": true,
+    "useAsyncState": true,
+    "useAttrs": true,
+    "useBase64": true,
+    "useBattery": true,
+    "useBluetooth": true,
+    "useBreakpoints": true,
+    "useBroadcastChannel": true,
+    "useBrowserLocation": true,
+    "useCached": true,
+    "useClipboard": true,
+    "useClipboardItems": true,
+    "useCloned": true,
+    "useColorMode": true,
+    "useConfirmDialog": true,
+    "useCountdown": 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,
+    "useId": true,
+    "useIdle": true,
+    "useImage": true,
+    "useInfiniteScroll": true,
+    "useIntersectionObserver": true,
+    "useInterval": true,
+    "useIntervalFn": true,
+    "useKeyModifier": true,
+    "useLastChanged": true,
+    "useLink": true,
+    "useLocalStorage": true,
+    "useMagicKeys": true,
+    "useManualRefHistory": true,
+    "useMediaControls": true,
+    "useMediaQuery": true,
+    "useMemoize": true,
+    "useMemory": true,
+    "useModel": 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,
+    "useParentElement": true,
+    "usePerformanceObserver": true,
+    "usePermission": true,
+    "usePointer": true,
+    "usePointerLock": true,
+    "usePointerSwipe": true,
+    "usePreferredColorScheme": true,
+    "usePreferredContrast": true,
+    "usePreferredDark": true,
+    "usePreferredLanguages": true,
+    "usePreferredReducedMotion": true,
+    "usePreferredReducedTransparency": true,
+    "usePrevious": true,
+    "useRafFn": true,
+    "useRefHistory": true,
+    "useResizeObserver": true,
+    "useRoute": true,
+    "useRouter": true,
+    "useSSRWidth": true,
+    "useScreenOrientation": true,
+    "useScreenSafeArea": true,
+    "useScriptTag": true,
+    "useScroll": true,
+    "useScrollLock": true,
+    "useSessionStorage": true,
+    "useShare": true,
+    "useSlots": true,
+    "useSorted": true,
+    "useSpeechRecognition": true,
+    "useSpeechSynthesis": true,
+    "useStepper": true,
+    "useStorage": true,
+    "useStorageAsync": true,
+    "useStyleTag": true,
+    "useSupported": true,
+    "useSwipe": true,
+    "useTemplateRef": 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,
+    "useToNumber": true,
+    "useToString": 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,
+    "watchDeep": true,
+    "watchEffect": true,
+    "watchIgnorable": true,
+    "watchImmediate": true,
+    "watchOnce": true,
+    "watchPausable": true,
+    "watchPostEffect": true,
+    "watchSyncEffect": true,
+    "watchThrottled": true,
+    "watchTriggerable": true,
+    "watchWithFilter": true,
+    "whenever": true,
+    "Slot": true,
+    "Slots": true,
+    "createRef": true
+  }
+}

+ 29 - 0
.gitignore

@@ -0,0 +1,29 @@
+.DS_Store
+.history
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock
+pnpm-lock.yaml
+
+# 编译生成的文件
+auto-imports.d.ts
+components.d.ts

+ 9 - 0
.prettierignore

@@ -0,0 +1,9 @@
+/dist/*
+.local
+.output.js
+/node_modules/**
+
+**/*.svg
+**/*.sh
+
+/public/*

+ 20 - 0
.prettierrc

@@ -0,0 +1,20 @@
+{
+  "printWidth": 150,
+  "tabWidth": 2,
+  "useTabs": false,
+  "semi": true,
+  "singleQuote": true,
+  "quoteProps": "preserve",
+  "jsxSingleQuote": false,
+  "bracketSameLine": false,
+  "trailingComma": "none",
+  "bracketSpacing": true,
+  "embeddedLanguageFormatting": "auto",
+  "arrowParens": "always",
+  "requirePragma": false,
+  "insertPragma": false,
+  "proseWrap": "preserve",
+  "htmlWhitespaceSensitivity": "css",
+  "vueIndentScriptAndStyle": false,
+  "endOfLine": "auto"
+}

+ 20 - 0
LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2019 RuoYi-Vue-Plus
+
+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.

+ 83 - 0
README.md

@@ -0,0 +1,83 @@
+## 平台简介
+
+- 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [TS](https://www.typescriptlang.org/) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
+- 成员项目: 基于 vben5(ant-design-vue) 的前端项目 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5)
+- 成员项目: 基于soybean 的前端项目 [ruoyi-plus-soybean](https://gitee.com/xlsea/ruoyi-plus-soybean)
+
+## 配套后端代码仓库地址
+
+| 介绍         | 项目名              | 项目地址                                                                                                                                                                           |
+|------------|:-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| 🔥 分布式集群框架 | RuoYi-Vue-Plus   | - [Gitee](https://gitee.com/dromara/RuoYi-Vue-Plus)<br> - [GitHub](https://github.com/dromara/RuoYi-Vue-Plus)<br> - [GitCode](https://gitcode.com/dromara/RuoYi-Vue-Plus)      |
+| 🔥 微服务框架   | RuoYi-Cloud-Plus | - [Gitee](https://gitee.com/dromara/RuoYi-Cloud-Plus)<br>- [GitHub](https://github.com/dromara/RuoYi-Cloud-Plus)<br> - [GitCode](https://gitcode.com/dromara/RuoYi-Cloud-Plus) |
+
+## 分支说明
+
+- ts分支(稳定发布主分支 生产可用)
+- dev分支(开发分支 开发过程中使用)
+
+## 前端运行
+
+```bash
+# 安装依赖
+npm install --registry=https://registry.npmmirror.com
+
+# 启动服务
+npm run dev
+
+# 构建生产环境
+npm run build:prod
+
+# 前端访问地址 http://localhost:80
+```
+
+## 本框架与RuoYi的业务差异
+
+| 业务         | 功能说明                                                      | 本框架 | RuoYi                         |
+| ------------ | ------------------------------------------------------------- | ------ | ----------------------------- |
+| 租户管理     | 系统内租户的管理 如:租户套餐、过期时间、用户数量、企业信息等  | 支持   | 无                            |
+| 租户套餐管理 | 系统内租户所能使用的套餐管理 如:套餐内所包含的菜单等          | 支持   | 无                            |
+| 用户管理     | 用户的管理配置 如:新增用户、分配用户所属部门、角色、岗位等    | 支持   | 支持                          |
+| 部门管理     | 配置系统组织机构(公司、部门、小组) 树结构展现支持数据权限   | 支持   | 支持                          |
+| 岗位管理     | 配置系统用户所属担任职务                                      | 支持   | 支持                          |
+| 菜单管理     | 配置系统菜单、操作权限、按钮权限标识等                        | 支持   | 支持                          |
+| 角色管理     | 角色菜单权限分配、设置角色按机构进行数据范围权限划分          | 支持   | 支持                          |
+| 字典管理     | 对系统中经常使用的一些较为固定的数据进行维护                  | 支持   | 支持                          |
+| 参数管理     | 对系统动态配置常用参数                                        | 支持   | 支持                          |
+| 通知公告     | 系统通知公告信息发布维护                                      | 支持   | 支持                          |
+| 操作日志     | 系统正常操作日志记录和查询 系统异常信息日志记录和查询         | 支持   | 支持                          |
+| 登录日志     | 系统登录日志记录查询包含登录异常                              | 支持   | 支持                          |
+| 文件管理     | 系统文件展示、上传、下载、删除等管理                          | 支持   | 无                            |
+| 文件配置管理 | 系统文件上传、下载所需要的配置信息动态添加、修改、删除等管理  | 支持   | 无                            |
+| 在线用户管理 | 已登录系统的在线用户信息监控与强制踢出操作                    | 支持   | 支持                          |
+| 定时任务     | 运行报表、任务管理(添加、修改、删除)、日志管理、执行器管理等  | 支持   | 仅支持任务与日志管理          |
+| 代码生成     | 多数据源前后端代码的生成(java、html、xml、sql)支持CRUD下载  | 支持   | 仅支持单数据源                |
+| 系统接口     | 根据业务代码自动生成相关的api接口文档                         | 支持   | 支持                          |
+| 服务监控     | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等 | 支持   | 仅支持单机CPU、内存、磁盘监控 |
+| 缓存监控     | 对系统的缓存信息查询,命令统计等。                            | 支持   | 支持                          |
+| 在线构建器   | 拖动表单元素生成相应的HTML代码。                              | 支持   | 支持                          |
+| 使用案例     | 系统的一些功能案例                                            | 支持   | 不支持                        |
+
+## 演示图例
+
+|                                                                                                      |                                                                                                      |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| ![输入图片说明](https://foruda.gitee.com/images/1680077524361362822/270bb429_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680077619939771291/989bf9b6_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680077681751513929/1c27c5bd_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680077721559267315/74d63e23_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680077765638904515/1b75d4a6_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078026375951297/eded7a4b_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078237104531207/0eb1b6a7_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078254306078709/5931e22f_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078287971528493/0b9af60a_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078308138770249/8d3b6696_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078352553634393/db5ef880_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078378238393374/601e4357_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078414983206024/2aae27c1_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078446738419874/ecce7d59_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078475971341775/149e8634_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078491666717143/3fadece7_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078558863188826/fb8ced2a_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078574561685461/ae68a0b2_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078594932772013/9d8bfec6_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078626493093532/fcfe4ff6_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078643608812515/0295bd4f_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078685196286463/d7612c81_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078703877318597/56fce0bc_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078716586545643/b6dbd68f_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078734103217688/eb1e6aa6_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078759131415480/73c525d8_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078779416197879/75e3ed02_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078802329118061/77e10915_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078893627848351/34a1c342_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078928175016986/f126ec4a_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078941718318363/b68a0f72_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078963175518631/3bb769a1_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078982294090567/b31c343d_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680079000642440444/77ca82a9_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680079020995074177/03b7d52e_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680079039367822173/76811806_1766278.png '屏幕截图') |
+| ![输入图片说明](https://foruda.gitee.com/images/1680079274333484664/4dfdc7c0_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680079290467458224/d6715fcf_1766278.png '屏幕截图') |

+ 12 - 0
bin/build.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 打包Web工程,生成dist文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+yarn build:prod
+
+pause

+ 12 - 0
bin/package.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 安装Web工程,生成node_modules文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+yarn --registry=https://registry.npmmirror.com
+
+pause

+ 12 - 0
bin/run-web.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 使用 Vite 命令运行 Web 工程。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+yarn dev
+
+pause

+ 44 - 0
eslint.config.ts

@@ -0,0 +1,44 @@
+import pluginVue from 'eslint-plugin-vue';
+import globals from 'globals';
+import prettier from 'eslint-plugin-prettier';
+import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript';
+import skipFormatting from '@vue/eslint-config-prettier/skip-formatting';
+
+export default defineConfigWithVueTs(
+  {
+    name: 'app/files-to-lint',
+    files: ['**/*.{js,cjs,ts,mts,tsx,vue}']
+  },
+
+  {
+    name: 'app/files-to-ignore',
+    ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**']
+  },
+  {
+    languageOptions: {
+      globals: globals.browser
+    }
+  },
+  pluginVue.configs['flat/essential'],
+  vueTsConfigs.recommended,
+  skipFormatting,
+  {
+    plugins: { prettier },
+    rules: {
+      '@typescript-eslint/no-empty-function': 'off',
+      '@typescript-eslint/no-explicit-any': 'off',
+      '@typescript-eslint/no-unused-vars': 'off',
+      '@typescript-eslint/no-this-alias': 'off',
+      // vue
+      'vue/multi-word-component-names': 'off',
+      'vue/valid-define-props': 'off',
+      'vue/no-v-model-argument': 'off',
+      'prefer-rest-params': 'off',
+      // prettier
+      'prettier/prettier': 'error',
+      // 允许使用空Object类型 {}
+      '@typescript-eslint/no-empty-object-type': 'off',
+      '@typescript-eslint/no-unused-expressions': 'off'
+    }
+  }
+);

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 191 - 0
html/ie.html


+ 214 - 0
index.html

@@ -0,0 +1,214 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+    <meta name="renderer" content="webkit" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
+    <link rel="icon" href="/favicon.ico" />
+    <title>RuoYi-Vue-Plus多租户管理系统</title>
+    <!--[if lt IE 11
+      ]><script>
+        window.location.href = '/html/ie.html';
+      </script><!
+    [endif]-->
+    <style>
+      html,
+      body,
+      #app {
+        height: 100%;
+        margin: 0px;
+        padding: 0px;
+      }
+
+      .chromeframe {
+        margin: 0.2em 0;
+        background: #ccc;
+        color: #000;
+        padding: 0.2em 0;
+      }
+
+      #loader-wrapper {
+        position: fixed;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        z-index: 999999;
+      }
+
+      #loader {
+        display: block;
+        position: relative;
+        left: 50%;
+        top: 50%;
+        width: 150px;
+        height: 150px;
+        margin: -75px 0 0 -75px;
+        border-radius: 50%;
+        border: 3px solid transparent;
+        border-top-color: #fff;
+        -webkit-animation: spin 2s linear infinite;
+        -ms-animation: spin 2s linear infinite;
+        -moz-animation: spin 2s linear infinite;
+        -o-animation: spin 2s linear infinite;
+        animation: spin 2s linear infinite;
+        z-index: 1001;
+      }
+
+      #loader:before {
+        content: '';
+        position: absolute;
+        top: 5px;
+        left: 5px;
+        right: 5px;
+        bottom: 5px;
+        border-radius: 50%;
+        border: 3px solid transparent;
+        border-top-color: #fff;
+        -webkit-animation: spin 3s linear infinite;
+        -moz-animation: spin 3s linear infinite;
+        -o-animation: spin 3s linear infinite;
+        -ms-animation: spin 3s linear infinite;
+        animation: spin 3s linear infinite;
+      }
+
+      #loader:after {
+        content: '';
+        position: absolute;
+        top: 15px;
+        left: 15px;
+        right: 15px;
+        bottom: 15px;
+        border-radius: 50%;
+        border: 3px solid transparent;
+        border-top-color: #fff;
+        -moz-animation: spin 1.5s linear infinite;
+        -o-animation: spin 1.5s linear infinite;
+        -ms-animation: spin 1.5s linear infinite;
+        -webkit-animation: spin 1.5s linear infinite;
+        animation: spin 1.5s linear infinite;
+      }
+
+      @-webkit-keyframes spin {
+        0% {
+          -webkit-transform: rotate(0deg);
+          -ms-transform: rotate(0deg);
+          transform: rotate(0deg);
+        }
+
+        100% {
+          -webkit-transform: rotate(360deg);
+          -ms-transform: rotate(360deg);
+          transform: rotate(360deg);
+        }
+      }
+
+      @keyframes spin {
+        0% {
+          -webkit-transform: rotate(0deg);
+          -ms-transform: rotate(0deg);
+          transform: rotate(0deg);
+        }
+
+        100% {
+          -webkit-transform: rotate(360deg);
+          -ms-transform: rotate(360deg);
+          transform: rotate(360deg);
+        }
+      }
+
+      #loader-wrapper .loader-section {
+        position: fixed;
+        top: 0;
+        width: 51%;
+        height: 100%;
+        background: #7171c6;
+        z-index: 1000;
+        -webkit-transform: translateX(0);
+        -ms-transform: translateX(0);
+        transform: translateX(0);
+      }
+
+      #loader-wrapper .loader-section.section-left {
+        left: 0;
+      }
+
+      #loader-wrapper .loader-section.section-right {
+        right: 0;
+      }
+
+      .loaded #loader-wrapper .loader-section.section-left {
+        -webkit-transform: translateX(-100%);
+        -ms-transform: translateX(-100%);
+        transform: translateX(-100%);
+        -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+        transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+      }
+
+      .loaded #loader-wrapper .loader-section.section-right {
+        -webkit-transform: translateX(100%);
+        -ms-transform: translateX(100%);
+        transform: translateX(100%);
+        -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+        transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+      }
+
+      .loaded #loader {
+        opacity: 0;
+        -webkit-transition: all 0.3s ease-out;
+        transition: all 0.3s ease-out;
+      }
+
+      .loaded #loader-wrapper {
+        visibility: hidden;
+        -webkit-transform: translateY(-100%);
+        -ms-transform: translateY(-100%);
+        transform: translateY(-100%);
+        -webkit-transition: all 0.3s 1s ease-out;
+        transition: all 0.3s 1s ease-out;
+      }
+
+      .no-js #loader-wrapper {
+        display: none;
+      }
+
+      .no-js h1 {
+        color: #222222;
+      }
+
+      #loader-wrapper .load_title {
+        font-family: 'Open Sans';
+        color: #fff;
+        font-size: 19px;
+        width: 100%;
+        text-align: center;
+        z-index: 9999999999999;
+        position: absolute;
+        top: 60%;
+        opacity: 1;
+        line-height: 30px;
+      }
+
+      #loader-wrapper .load_title span {
+        font-weight: normal;
+        font-style: italic;
+        font-size: 13px;
+        color: #fff;
+        opacity: 0.5;
+      }
+    </style>
+  </head>
+
+  <body>
+    <div id="app">
+      <div id="loader-wrapper">
+        <div id="loader"></div>
+        <div class="loader-section section-left"></div>
+        <div class="loader-section section-right"></div>
+        <div class="load_title">正在加载系统资源,请耐心等待</div>
+      </div>
+    </div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

+ 98 - 0
package.json

@@ -0,0 +1,98 @@
+{
+  "$schema": "https://json.schemastore.org/package",
+  "name": "ruoyi-vue-plus",
+  "version": "5.4.1-2.4.1",
+  "description": "RuoYi-Vue-Plus多租户管理系统",
+  "author": "LionLi",
+  "license": "MIT",
+  "type": "module",
+  "scripts": {
+    "dev": "vite serve --mode development",
+    "build:prod": "vite build --mode production",
+    "build:dev": "vite build --mode development",
+    "preview": "vite preview",
+    "lint:eslint": "eslint",
+    "lint:eslint:fix": "eslint --fix",
+    "prettier": "prettier --write ."
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://gitee.com/JavaLionLi/plus-ui.git"
+  },
+  "dependencies": {
+    "@element-plus/icons-vue": "2.3.1",
+    "@highlightjs/vue-plugin": "2.1.0",
+    "@vueup/vue-quill": "1.2.0",
+    "@vueuse/core": "13.1.0",
+    "animate.css": "4.1.1",
+    "await-to-js": "3.0.0",
+    "axios": "1.8.4",
+    "crypto-js": "4.2.0",
+    "echarts": "^5.6.0",
+    "element-china-area-data": "^6.1.0",
+    "element-plus": "2.9.8",
+    "file-saver": "2.0.5",
+    "highlight.js": "11.9.0",
+    "image-conversion": "2.1.1",
+    "js-cookie": "3.0.5",
+    "jsencrypt": "3.3.2",
+    "mitt": "^3.0.1",
+    "nprogress": "0.2.0",
+    "pinia": "3.0.2",
+    "screenfull": "6.0.2",
+    "vue": "3.5.13",
+    "vue-cropper": "1.1.1",
+    "vue-i18n": "11.1.3",
+    "vue-json-pretty": "2.4.0",
+    "vue-router": "4.5.0",
+    "vue-types": "6.0.0",
+    "vxe-table": "4.13.7"
+  },
+  "devDependencies": {
+    "@iconify/json": "^2.2.276",
+    "@types/crypto-js": "4.2.2",
+    "@types/file-saver": "2.0.7",
+    "@types/js-cookie": "3.0.6",
+    "@types/node": "^22.13.4",
+    "@types/nprogress": "0.2.3",
+    "@unocss/preset-attributify": "66.0.0",
+    "@unocss/preset-icons": "66.0.0",
+    "@unocss/preset-uno": "66.0.0",
+    "@vitejs/plugin-vue": "5.2.3",
+    "@vue/compiler-sfc": "3.5.13",
+    "@vue/eslint-config-prettier": "10.2.0",
+    "@vue/eslint-config-typescript": "14.4.0",
+    "autoprefixer": "10.4.20",
+    "eslint": "9.21.0",
+    "eslint-plugin-prettier": "5.2.3",
+    "eslint-plugin-vue": "9.32.0",
+    "globals": "16.0.0",
+    "prettier": "3.5.2",
+    "sass": "1.87.0",
+    "typescript": "~5.8.3",
+    "unocss": "66.0.0",
+    "unplugin-auto-import": "19.1.2",
+    "unplugin-icons": "22.1.0",
+    "unplugin-vue-components": "28.5.0",
+    "unplugin-vue-setup-extend-plus": "1.0.1",
+    "vite": "6.3.2",
+    "vite-plugin-compression": "0.5.1",
+    "vite-plugin-svg-icons-ng": "^1.4.0",
+    "vite-plugin-vue-devtools": "7.7.5",
+    "vitest": "3.1.2",
+    "vue-tsc": "^2.2.8"
+  },
+  "overrides": {
+    "quill": "2.0.2"
+  },
+  "engines": {
+    "node": ">=18.18.0",
+    "npm": ">=8.9.0"
+  },
+  "browserslist": [
+    "Chrome >= 87",
+    "Edge >= 88",
+    "Safari >= 14",
+    "Firefox >= 78"
+  ]
+}

BIN
public/favicon.ico


+ 20 - 0
src/App.vue

@@ -0,0 +1,20 @@
+<template>
+  <el-config-provider :locale="appStore.locale" :size="appStore.size">
+    <router-view />
+  </el-config-provider>
+</template>
+
+<script setup lang="ts">
+import { useSettingsStore } from '@/store/modules/settings';
+import { handleThemeStyle } from '@/utils/theme';
+import { useAppStore } from '@/store/modules/app';
+
+const appStore = useAppStore();
+
+onMounted(() => {
+  nextTick(() => {
+    // 初始化主题样式
+    handleThemeStyle(useSettingsStore().theme);
+  });
+});
+</script>

+ 48 - 0
src/animate.ts

@@ -0,0 +1,48 @@
+// 前缀
+const animatePrefix = 'animate__animated ';
+// 开启随机动画 随机动画值
+const animateList: string[] = [
+  animatePrefix + 'animate__pulse',
+  animatePrefix + 'animate__rubberBand',
+  animatePrefix + 'animate__bounceIn',
+  animatePrefix + 'animate__bounceInLeft',
+  animatePrefix + 'animate__fadeIn',
+  animatePrefix + 'animate__fadeInLeft',
+  animatePrefix + 'animate__fadeInDown',
+  animatePrefix + 'animate__fadeInUp',
+  animatePrefix + 'animate__flipInX',
+  animatePrefix + 'animate__lightSpeedInLeft',
+  animatePrefix + 'animate__rotateInDownLeft',
+  animatePrefix + 'animate__rollIn',
+  animatePrefix + 'animate__rotateInDownLeft',
+  animatePrefix + 'animate__zoomIn',
+  animatePrefix + 'animate__zoomInDown',
+  animatePrefix + 'animate__slideInLeft',
+  animatePrefix + 'animate__lightSpeedIn'
+];
+// 关闭随机动画后的默认效果
+const defaultAnimate = animatePrefix + 'animate__fadeIn';
+// 搜索隐藏显示动画
+const searchAnimate = {
+  enter: '',
+  leave: ''
+};
+
+// 菜单搜索动画
+const menuSearchAnimate = {
+  enter: animatePrefix + 'animate__fadeIn',
+  leave: animatePrefix + 'animate__fadeOut'
+};
+// logo动画
+const logoAnimate = {
+  enter: animatePrefix + 'animate__fadeIn',
+  leave: animatePrefix + 'animate__fadeOut'
+};
+
+export default {
+  animateList,
+  defaultAnimate,
+  searchAnimate,
+  menuSearchAnimate,
+  logoAnimate
+};

+ 84 - 0
src/api/agent/merchant/index.ts

@@ -0,0 +1,84 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SysMerchantVO, SysMerchantForm, SysMerchantQuery, SysUserMerchantForm } from './types';
+
+/**
+ * 查询商户信息拓展列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSysMerchant = (query?: SysMerchantQuery): AxiosPromise<SysMerchantVO[]> => {
+  return request({
+    url: '/system/merchant/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询商户信息拓展详细
+ * @param userId
+ */
+export const getSysMerchant = (userId: string | number): AxiosPromise<SysMerchantVO> => {
+  return request({
+    url: '/system/merchant/' + userId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增商户信息拓展
+ * @param data
+ */
+export const addSysMerchant = (data: SysUserMerchantForm) => {
+  return request({
+    url: '/system/merchant',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改商户信息拓展
+ * @param data
+ */
+export const updateSysMerchant = (data: SysUserMerchantForm) => {
+  return request({
+    url: '/system/merchant',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除商户信息拓展
+ * @param userId
+ */
+export const delSysMerchant = (userId: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/merchant/' + userId,
+    method: 'delete'
+  });
+};
+
+/**
+ * 商户用户密码重置
+ * @param userId 用户ID
+ * @param password 密码
+ */
+export const resetMerchantPwd = (userId: string | number, password: string) => {
+  const data = {
+    userId,
+    password
+  };
+  return request({
+    url: '/system/merchant/resetPwd',
+    method: 'put',
+    headers: {
+      isEncrypt: true,
+      repeatSubmit: false
+    },
+    data: data
+  });
+};

+ 197 - 0
src/api/agent/merchant/types.ts

@@ -0,0 +1,197 @@
+import { RoleVO } from '@/api/system/role/types';
+import { PostVO } from '@/api/system/post/types';
+
+/**
+ * 用户信息
+ */
+export interface UserInfo {
+  user: UserVO;
+  roles: string[];
+  permissions: string[];
+}
+
+/**
+ * 用户查询对象类型
+ */
+export interface UserQuery extends PageQuery {
+  userName?: string;
+  nickName?: string;
+  phonenumber?: string;
+  status?: string;
+  deptId?: string | number;
+  roleId?: string | number;
+  userIds?: string;
+}
+
+/**
+ * 用户返回对象
+ */
+export interface UserVO extends BaseEntity {
+  userId: string | number;
+  tenantId: string;
+  deptId: number;
+  userName: string;
+  nickName: string;
+  userType: string;
+  email: string;
+  phonenumber: string;
+  sex: string;
+  avatar: string;
+  status: string;
+  delFlag: string;
+  loginIp: string;
+  loginDate: string;
+  remark: string;
+  deptName: string;
+  roles: RoleVO[];
+  roleIds: any;
+  postIds: any;
+  roleId: any;
+  admin: boolean;
+}
+
+/**
+ * 用户表单类型
+ */
+export interface UserForm {
+  id?: string;
+  userId?: string;
+  deptId?: number;
+  userName: string;
+  nickName?: string;
+  password: string;
+  phonenumber?: string;
+  email?: string;
+  sex?: string;
+  status: string;
+  remark?: string;
+  postIds: string[];
+  roleIds: string[];
+}
+
+export interface UserInfoVO {
+  user: UserVO;
+  roles: RoleVO[];
+  roleIds: string[];
+  posts: PostVO[];
+  postIds: string[];
+  roleGroup: string;
+  postGroup: string;
+}
+
+export interface ResetPwdForm {
+  oldPassword: string;
+  newPassword: string;
+  confirmPassword: string;
+}
+
+/**
+ * 商户信息VO
+ */
+export interface SysMerchantVO extends BaseEntity {
+  // 商户信息(顶层)
+  userId: string | number;
+  agentId?: string | number;
+  agentName?: string;
+  lastActiveTime?: string;
+  expireDate?: string;
+  status: string;
+  remark?: string;
+  
+  // 用户基本信息(嵌套对象)
+  userInfo?: {
+    userId: string | number;
+    tenantId?: string;
+    deptId?: string | number;
+    userName?: string;
+    nickName?: string;
+    userType?: string;
+    email?: string;
+    phonenumber?: string;
+    sex?: string;
+    avatar?: string;
+    status?: string;
+    loginIp?: string;
+    loginDate?: string;
+    createTime?: string;
+    remark?: string;
+    deptName?: string;
+    roles?: any;
+    roleIds?: number[];
+    postIds?: number[];
+    roleId?: number;
+    areaCode?: string;
+    province?: string;
+    city?: string;
+    district?: string;
+  };
+}
+
+/**
+ * 商户信息表单
+ */
+export interface SysMerchantForm extends BaseEntity {
+  userId?: string | number;
+  areaCode?: string;
+  province?: string;
+  city?: string;
+  district?: string;
+  lastActiveTime?: string;
+  expireDate?: string;
+  status?: string;
+  remark?: string;
+  agentId?: string | number;
+  codeArr?: string[];
+}
+
+/**
+ * 商户查询对象
+ */
+export interface SysMerchantQuery extends PageQuery {
+  userId?: string | number;
+  tenantId?: string | number;
+  userName?: string;
+  phonenumber?: string;
+  areaCode?: string;
+  province?: string;
+  city?: string;
+  district?: string;
+  lastActiveTime?: string;
+  expireDate?: string;
+  status?: string;
+  agentId?: string | number;
+  params?: any;
+}
+
+/**
+ * 系统用户表单
+ */
+export interface SysUserForm extends BaseEntity {
+  userId?: string | number;
+  deptId?: string | number;
+  userName?: string;
+  nickName?: string;
+  userType?: string;
+  identity?: string;
+  email?: string;
+  phonenumber?: string;
+  sex?: string;
+  password?: string;
+  status?: string;
+  remark?: string;
+  roleIds?: number[];
+  postIds?: number[];
+  areaCode?: string;
+  province?: string;
+  city?: string;
+  district?: string;
+  codeArr?: string[];
+}
+
+/**
+ * 用户商户组合表单
+ */
+export interface SysUserMerchantForm {
+  user?: SysUserForm;
+  merchant?: SysMerchantForm;
+}

+ 75 - 0
src/api/agent/withdrawalOrders/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { WithdrawalOrdersVO, WithdrawalOrdersForm, WithdrawalOrdersQuery } from '@/api/agent/withdrawalOrders/types';
+
+/**
+ * 查询提现申请记录列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listWithdrawalOrders = (query?: WithdrawalOrdersQuery): AxiosPromise<WithdrawalOrdersVO[]> => {
+  return request({
+    url: '/order/withdrawalOrders/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询提现申请记录详细
+ * @param id
+ */
+export const getWithdrawalOrders = (id: string | number): AxiosPromise<WithdrawalOrdersVO> => {
+  return request({
+    url: '/order/withdrawalOrders/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增提现申请记录
+ * @param data
+ */
+export const addWithdrawalOrders = (data: WithdrawalOrdersForm) => {
+  return request({
+    url: '/order/withdrawalOrders',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改提现申请记录
+ * @param data
+ */
+export const updateWithdrawalOrders = (data: WithdrawalOrdersForm) => {
+  return request({
+    url: '/order/withdrawalOrders',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 修改代理提现订单状态
+ * @param data
+ */
+export const changeOrderStatus = (data: WithdrawalOrdersForm) => {
+  return request({
+    url: '/order/withdrawalOrders/changeOrderStatus',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除提现申请记录
+ * @param id
+ */
+export const delWithdrawalOrders = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/order/withdrawalOrders/' + id,
+    method: 'delete'
+  });
+};

+ 291 - 0
src/api/agent/withdrawalOrders/types.ts

@@ -0,0 +1,291 @@
+export interface WithdrawalOrdersVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 提现单号,如:TX20220315165009
+   */
+  withdrawalSn: string;
+
+  /**
+   * 代理ID
+   */
+  agentId: string | number;
+
+  /**
+   * 代理名称(冗余存储)
+   */
+  agentName: string;
+
+  /**
+   * 账户类型:支付宝/银行卡/微信
+   */
+  accountType: string;
+
+  /**
+   * 打款账号
+   */
+  payoutAccount: string;
+
+  /**
+   * 账户实名
+   */
+  accountName: string;
+
+  /**
+   * 提现金额
+   */
+  amount: number;
+
+  /**
+   * 手续费
+   */
+  fee: number;
+
+  /**
+   * 实际打款金额
+   */
+  actualAmount: number;
+
+  /**
+   * 状态:待打款/处理中/已打款/打款失败/已退回
+   */
+  pendStatus: string;
+
+  /**
+   * 打款接口
+   */
+  payoutGateway: string;
+
+  /**
+   * 打款接口返回信息
+   */
+  gatewayResponse: string;
+
+  /**
+   * 提交时间
+   */
+  submitTime: string;
+
+  /**
+   * 打款时间
+   */
+  payoutTime: string;
+
+  /**
+   * 操作员ID
+   */
+  operatorId: string | number;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface WithdrawalOrdersForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 提现单号,如:TX20220315165009
+   */
+  withdrawalSn?: string;
+
+  /**
+   * 代理ID
+   */
+  agentId?: string | number;
+
+  /**
+   * 代理名称(冗余存储)
+   */
+  agentName?: string;
+
+  /**
+   * 账户类型:支付宝/银行卡/微信
+   */
+  accountType?: string;
+
+  /**
+   * 打款账号
+   */
+  payoutAccount?: string;
+
+  /**
+   * 账户实名
+   */
+  accountName?: string;
+
+  /**
+   * 提现金额
+   */
+  amount?: number;
+
+  /**
+   * 手续费
+   */
+  fee?: number;
+
+  /**
+   * 实际打款金额
+   */
+  actualAmount?: number;
+
+  /**
+   * 状态:待打款/处理中/已打款/打款失败/已退回
+   */
+  pendStatus?: string;
+
+  /**
+   * 打款接口
+   */
+  payoutGateway?: string;
+
+  /**
+   * 打款接口返回信息
+   */
+  gatewayResponse?: string;
+
+  /**
+   * 提交时间
+   */
+  submitTime?: string;
+
+  /**
+   * 打款时间
+   */
+  payoutTime?: string;
+
+  /**
+   * 操作员ID
+   */
+  operatorId?: string | number;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface WithdrawalOrdersQuery extends PageQuery {
+
+  /**
+   * 提现单号,如:TX20220315165009
+   */
+  withdrawalSn?: string;
+
+  /**
+   * 代理ID
+   */
+  agentId?: string | number;
+
+  /**
+   * 代理名称(冗余存储)
+   */
+  agentName?: string;
+
+  /**
+   * 账户类型:支付宝/银行卡/微信
+   */
+  accountType?: string;
+
+  /**
+   * 打款账号
+   */
+  payoutAccount?: string;
+
+  /**
+   * 账户实名
+   */
+  accountName?: string;
+
+  /**
+   * 提现金额
+   */
+  amount?: number;
+
+  /**
+   * 手续费
+   */
+  fee?: number;
+
+  /**
+   * 实际打款金额
+   */
+  actualAmount?: number;
+
+  /**
+   * 状态:待打款/处理中/已打款/打款失败/已退回
+   */
+  pendStatus?: string;
+
+  /**
+   * 打款接口
+   */
+  payoutGateway?: string;
+
+  /**
+   * 打款接口返回信息
+   */
+  gatewayResponse?: string;
+
+  /**
+   * 提交时间
+   */
+  submitTime?: string;
+
+  /**
+   * 打款时间
+   */
+  payoutTime?: string;
+
+  /**
+   * 操作员ID
+   */
+  operatorId?: string | number;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 提交时间范围(前端用)
+   */
+  submitTimeRange?: string[];
+
+  /**
+   * 提交开始时间
+   */
+  submitTimeStart?: string;
+
+  /**
+   * 提交结束时间
+   */
+  submitTimeEnd?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 62 - 0
src/api/demo/demo/index.ts

@@ -0,0 +1,62 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { DemoVO, DemoForm, DemoQuery } from '@/api/demo/demo/types';
+
+/**
+ * 查询测试单列表
+ * @param query
+ * @returns {*}
+ */
+export const listDemo = (query?: DemoQuery): AxiosPromise<DemoVO[]> => {
+  return request({
+    url: '/demo/demo/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询测试单详细
+ * @param id
+ */
+export const getDemo = (id: string | number): AxiosPromise<DemoVO> => {
+  return request({
+    url: '/demo/demo/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增测试单
+ * @param data
+ */
+export const addDemo = (data: DemoForm) => {
+  return request({
+    url: '/demo/demo',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改测试单
+ * @param data
+ */
+export const updateDemo = (data: DemoForm) => {
+  return request({
+    url: '/demo/demo',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除测试单
+ * @param id
+ */
+export const delDemo = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/demo/demo/' + id,
+    method: 'delete'
+  });
+};

+ 90 - 0
src/api/demo/demo/types.ts

@@ -0,0 +1,90 @@
+export interface DemoVO {
+  /**
+   * 主键
+   */
+  id: string | number;
+
+  /**
+   * 部门id
+   */
+  deptId: string | number;
+
+  /**
+   * 用户id
+   */
+  userId: string | number;
+
+  /**
+   * 排序号
+   */
+  orderNum: number;
+
+  /**
+   * key键
+   */
+  testKey: string;
+
+  /**
+   * 值
+   */
+  value: string;
+}
+
+export interface DemoForm extends BaseEntity {
+  /**
+   * 主键
+   */
+  id?: string | number;
+
+  /**
+   * 部门id
+   */
+  deptId?: string | number;
+
+  /**
+   * 用户id
+   */
+  userId?: string | number;
+
+  /**
+   * 排序号
+   */
+  orderNum?: number;
+
+  /**
+   * key键
+   */
+  testKey?: string;
+
+  /**
+   * 值
+   */
+  value?: string;
+}
+
+export interface DemoQuery extends PageQuery {
+  /**
+   * 部门id
+   */
+  deptId?: string | number;
+
+  /**
+   * 用户id
+   */
+  userId?: string | number;
+
+  /**
+   * 排序号
+   */
+  orderNum?: number;
+
+  /**
+   * key键
+   */
+  testKey?: string;
+
+  /**
+   * 值
+   */
+  value?: string;
+}

+ 62 - 0
src/api/demo/tree/index.ts

@@ -0,0 +1,62 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { TreeVO, TreeForm, TreeQuery } from '@/api/demo/tree/types';
+
+/**
+ * 查询测试树列表
+ * @param query
+ * @returns {*}
+ */
+export const listTree = (query?: TreeQuery): AxiosPromise<TreeVO[]> => {
+  return request({
+    url: '/demo/tree/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询测试树详细
+ * @param id
+ */
+export const getTree = (id: string | number): AxiosPromise<TreeVO> => {
+  return request({
+    url: '/demo/tree/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增测试树
+ * @param data
+ */
+export const addTree = (data: TreeForm) => {
+  return request({
+    url: '/demo/tree',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改测试树
+ * @param data
+ */
+export const updateTree = (data: TreeForm) => {
+  return request({
+    url: '/demo/tree',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除测试树
+ * @param id
+ */
+export const delTree = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/demo/tree/' + id,
+    method: 'delete'
+  });
+};

+ 80 - 0
src/api/demo/tree/types.ts

@@ -0,0 +1,80 @@
+export interface TreeVO {
+  /**
+   * 主键
+   */
+  id: string | number;
+
+  /**
+   * 父id
+   */
+  parentId: string | number;
+
+  /**
+   * 部门id
+   */
+  deptId: string | number;
+
+  /**
+   * 用户id
+   */
+  userId: string | number;
+
+  /**
+   * 值
+   */
+  treeName: string;
+
+  /**
+   * 子对象
+   */
+  children: TreeVO[];
+}
+
+export interface TreeForm extends BaseEntity {
+  /**
+   * 主键
+   */
+  id?: string | number;
+
+  /**
+   * 父id
+   */
+  parentId?: string | number;
+
+  /**
+   * 部门id
+   */
+  deptId?: string | number;
+
+  /**
+   * 用户id
+   */
+  userId?: string | number;
+
+  /**
+   * 值
+   */
+  treeName?: string;
+}
+
+export interface TreeQuery {
+  /**
+   * 父id
+   */
+  parentId?: string | number;
+
+  /**
+   * 部门id
+   */
+  deptId?: string | number;
+
+  /**
+   * 用户id
+   */
+  userId?: string | number;
+
+  /**
+   * 值
+   */
+  treeName?: string;
+}

+ 104 - 0
src/api/file/category/index.ts

@@ -0,0 +1,104 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { FileCategoryVO, FileCategoryForm, FileCategoryQuery, TableDataInfo } from './types';
+
+/**
+ * 查询文件分类列表
+ * @param query 查询参数
+ * @returns Promise<TableDataInfo<FileCategoryVO>>
+ */
+export const listFileCategory = (query?: FileCategoryQuery): AxiosPromise<TableDataInfo<FileCategoryVO>> => {
+  // 移除空值
+  const cleanQuery: Record<string, any> = {};
+  if (query) {
+    Object.keys(query).forEach((key) => {
+      if (
+        query[key as keyof FileCategoryQuery] !== undefined &&
+        query[key as keyof FileCategoryQuery] !== null &&
+        query[key as keyof FileCategoryQuery] !== ''
+      ) {
+        cleanQuery[key] = query[key as keyof FileCategoryQuery];
+      }
+    });
+  }
+
+  return request({
+    url: '/resource/file/category/list',
+    method: 'get',
+    params: cleanQuery
+  });
+};
+
+/**
+ * 查询文件分类详细
+ * @param id 分类ID
+ * @returns Promise<FileCategoryVO>
+ */
+export const getFileCategory = (id: number): AxiosPromise<FileCategoryVO> => {
+  return request({
+    url: `/resource/file/category/${id}`,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增文件分类
+ * @param data 分类数据
+ * @returns Promise<any>
+ */
+export const addFileCategory = (data: FileCategoryForm): AxiosPromise<any> => {
+  return request({
+    url: '/resource/file/category',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改文件分类
+ * @param data 分类数据
+ * @returns Promise<any>
+ */
+export const updateFileCategory = (data: FileCategoryForm): AxiosPromise<any> => {
+  return request({
+    url: '/resource/file/category',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除文件分类
+ * @param id 分类ID
+ * @returns Promise<any>
+ */
+export const delFileCategory = (id: number | number[]): AxiosPromise<any> => {
+  const ids = Array.isArray(id) ? id.join(',') : id;
+  return request({
+    url: `/resource/file/category/${ids}`,
+    method: 'delete'
+  });
+};
+
+/**
+ * 查询文件分类树结构
+ * @returns Promise<FileCategoryVO[]>
+ */
+export const listFileCategoryTree = (): AxiosPromise<FileCategoryVO[]> => {
+  return request({
+    url: '/resource/file/category/tree',
+    method: 'get'
+  });
+};
+
+/**
+ * 根据类型查询分类列表
+ * @param type 分类类型
+ * @returns Promise<FileCategoryVO[]>
+ */
+export const listFileCategoryByType = (type: number): AxiosPromise<FileCategoryVO[]> => {
+  return request({
+    url: `/resource/file/category/type/${type}`,
+    method: 'get'
+  });
+};

+ 199 - 0
src/api/file/category/types.ts

@@ -0,0 +1,199 @@
+/**
+ * 文件分类VO
+ */
+export interface FileCategoryVO {
+  /**
+   * 分类ID
+   */
+  id: number;
+
+  /**
+   * 分类名称
+   */
+  name: string;
+
+  /**
+   * 分类编码
+   */
+  code: string;
+
+  /**
+   * 父分类ID(0表示顶级分类)
+   */
+  parentId: number;
+
+  /**
+   * 分类类型(1图片 2视频 3音频 4文档 5其他)
+   */
+  type: number;
+
+  /**
+   * 排序号
+   */
+  sort: number;
+
+  /**
+   * 分类图标
+   */
+  icon?: string;
+
+  /**
+   * 分类描述
+   */
+  description?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: number;
+
+  /**
+   * 删除标志(0代表存在 2代表删除)
+   */
+  delFlag: number;
+
+  /**
+   * 创建时间
+   */
+  createTime: string;
+
+  /**
+   * 更新时间
+   */
+  updateTime: string;
+
+  /**
+   * 子分类列表
+   */
+  children?: FileCategoryVO[];
+}
+
+/**
+ * 文件分类表单
+ */
+export interface FileCategoryForm {
+  /**
+   * 分类ID
+   */
+  id?: number;
+
+  /**
+   * 分类名称
+   */
+  name: string;
+
+  /**
+   * 分类编码
+   */
+  code: string;
+
+  /**
+   * 父分类ID(0表示顶级分类)
+   */
+  parentId: number;
+
+  /**
+   * 分类类型(1图片 2视频 3音频 4文档 5其他)
+   */
+  type: number;
+
+  /**
+   * 排序号
+   */
+  sort?: number;
+
+  /**
+   * 分类图标
+   */
+  icon?: string;
+
+  /**
+   * 分类描述
+   */
+  description?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: number;
+}
+
+/**
+ * 文件分类查询参数
+ */
+export interface FileCategoryQuery {
+  /**
+   * 分类名称
+   */
+  name?: string;
+
+  /**
+   * 分类编码
+   */
+  code?: string;
+
+  /**
+   * 父分类ID
+   */
+  parentId?: number;
+
+  /**
+   * 分类类型
+   */
+  type?: number;
+
+  /**
+   * 状态
+   */
+  status?: number;
+
+  /**
+   * 页码
+   */
+  pageNum?: number;
+
+  /**
+   * 每页大小
+   */
+  pageSize?: number;
+}
+
+/**
+ * 分页查询参数
+ */
+export interface PageQuery {
+  /**
+   * 页码
+   */
+  pageNum?: number;
+
+  /**
+   * 每页大小
+   */
+  pageSize?: number;
+}
+
+/**
+ * 分页响应结果
+ */
+export interface TableDataInfo<T> {
+  /**
+   * 总记录数
+   */
+  total: number;
+
+  /**
+   * 数据列表
+   */
+  rows: T[];
+
+  /**
+   * 页码
+   */
+  pageNum: number;
+
+  /**
+   * 每页大小
+   */
+  pageSize: number;
+} 

+ 125 - 0
src/api/file/info/index.ts

@@ -0,0 +1,125 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { FileInfoVO, FileInfoForm, FileInfoQuery, TableDataInfo } from './types';
+
+/**
+ * 查询文件信息列表
+ * @param query 查询参数
+ * @returns Promise<TableDataInfo<FileInfoVO>>
+ */
+export const listFileInfo = (query?: FileInfoQuery): AxiosPromise<TableDataInfo<FileInfoVO>> => {
+  // 移除空值
+  const cleanQuery: Record<string, any> = {};
+  if (query) {
+    Object.keys(query).forEach((key) => {
+      if (query[key as keyof FileInfoQuery] !== undefined && query[key as keyof FileInfoQuery] !== null && query[key as keyof FileInfoQuery] !== '') {
+        cleanQuery[key] = query[key as keyof FileInfoQuery];
+      }
+    });
+  }
+
+  return request({
+    url: '/resource/file/info/list',
+    method: 'get',
+    params: cleanQuery
+  });
+};
+
+/**
+ * 查询文件信息详细
+ * @param id 文件ID
+ * @returns Promise<FileInfoVO>
+ */
+export const getFileInfo = (id: number): AxiosPromise<FileInfoVO> => {
+  return request({
+    url: `/resource/file/info/${id}`,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增文件信息
+ * @param data 文件数据
+ * @returns Promise<any>
+ */
+export const addFileInfo = (data: FileInfoForm): AxiosPromise<any> => {
+  return request({
+    url: '/resource/file/info',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改文件信息
+ * @param data 文件数据
+ * @returns Promise<any>
+ */
+export const updateFileInfo = (data: FileInfoForm): AxiosPromise<any> => {
+  return request({
+    url: '/resource/file/info',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除文件信息
+ * @param id 文件ID
+ * @returns Promise<any>
+ */
+export const delFileInfo = (id: number | number[]): AxiosPromise<any> => {
+  const ids = Array.isArray(id) ? id.join(',') : id;
+  return request({
+    url: `/resource/file/info/${ids}`,
+    method: 'delete'
+  });
+};
+
+/**
+ * 根据分类ID查询文件列表
+ * @param categoryId 分类ID
+ * @returns Promise<FileInfoVO[]>
+ */
+export const listFileInfoByCategory = (categoryId: number): AxiosPromise<FileInfoVO[]> => {
+  return request({
+    url: `/resource/file/info/category/${categoryId}`,
+    method: 'get'
+  });
+};
+
+/**
+ * 根据文件类型查询文件列表
+ * @param type 文件类型
+ * @returns Promise<FileInfoVO[]>
+ */
+export const listFileInfoByType = (type: string): AxiosPromise<FileInfoVO[]> => {
+  return request({
+    url: `/resource/file/info/type/${type}`,
+    method: 'get'
+  });
+};
+
+/**
+ * 更新文件下载次数
+ * @param id 文件ID
+ * @returns Promise<any>
+ */
+export const updateDownloadCount = (id: number): AxiosPromise<any> => {
+  return request({
+    url: `/resource/file/info/download/${id}`,
+    method: 'put'
+  });
+};
+
+/**
+ * 更新文件查看次数
+ * @param id 文件ID
+ * @returns Promise<any>
+ */
+export const updateViewCount = (id: number): AxiosPromise<any> => {
+  return request({
+    url: `/resource/file/info/view/${id}`,
+    method: 'put'
+  });
+};

+ 319 - 0
src/api/file/info/types.ts

@@ -0,0 +1,319 @@
+/**
+ * 文件信息VO
+ */
+export interface FileInfoVO {
+  /**
+   * 文件ID
+   */
+  id: number;
+
+  /**
+   * 文件名称
+   */
+  name: string;
+
+  /**
+   * 原始文件名
+   */
+  originalName: string;
+
+  /**
+   * 文件路径
+   */
+  path: string;
+
+  /**
+   * 文件URL
+   */
+  url?: string;
+
+  /**
+   * 文件大小(字节)
+   */
+  size: number;
+
+  /**
+   * 文件类型
+   */
+  type: string;
+
+  /**
+   * 文件扩展名
+   */
+  extension?: string;
+
+  /**
+   * 分类ID
+   */
+  categoryId?: number;
+
+  /**
+   * 分类名称
+   */
+  categoryName?: string;
+
+  /**
+   * 文件哈希值
+   */
+  hash?: string;
+
+  /**
+   * 图片宽度
+   */
+  width?: number;
+
+  /**
+   * 图片高度
+   */
+  height?: number;
+
+  /**
+   * 视频时长(秒)
+   */
+  duration?: number;
+
+  /**
+   * OSS存储桶
+   */
+  ossBucket?: string;
+
+  /**
+   * OSS对象键
+   */
+  ossKey?: string;
+
+  /**
+   * 上传状态(0上传中 1上传完成 2上传失败)
+   */
+  uploadStatus: number;
+
+  /**
+   * 下载次数
+   */
+  downloadCount: number;
+
+  /**
+   * 查看次数
+   */
+  viewCount: number;
+
+  /**
+   * 是否公开(0私有 1公开)
+   */
+  isPublic: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: number;
+
+  /**
+   * 文件描述
+   */
+  description?: string;
+
+  /**
+   * 创建时间
+   */
+  createTime: string;
+
+  /**
+   * 更新时间
+   */
+  updateTime: string;
+}
+
+/**
+ * 文件信息表单
+ */
+export interface FileInfoForm {
+  /**
+   * 文件ID
+   */
+  id?: number;
+
+  /**
+   * 文件名称
+   */
+  name: string;
+
+  /**
+   * 原始文件名
+   */
+  originalName: string;
+
+  /**
+   * 文件路径
+   */
+  path: string;
+
+  /**
+   * 文件URL
+   */
+  url?: string;
+
+  /**
+   * 文件大小(字节)
+   */
+  size?: number;
+
+  /**
+   * 文件类型
+   */
+  type?: string;
+
+  /**
+   * 文件扩展名
+   */
+  extension?: string;
+
+  /**
+   * 分类ID
+   */
+  categoryId?: number;
+
+  /**
+   * 文件主分类
+   */
+  categoryType?: number;
+
+  /**
+   * 文件哈希值
+   */
+  hash?: string;
+
+  /**
+   * 图片宽度
+   */
+  width?: number;
+
+  /**
+   * 图片高度
+   */
+  height?: number;
+
+  /**
+   * 视频时长(秒)
+   */
+  duration?: number;
+
+  /**
+   * OSS存储桶
+   */
+  ossBucket?: string;
+
+  /**
+   * OSS对象键
+   */
+  ossKey?: string;
+
+  /**
+   * 上传状态(0上传中 1上传完成 2上传失败)
+   */
+  uploadStatus?: number;
+
+  /**
+   * 是否公开(0私有 1公开)
+   */
+  isPublic?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: number;
+
+  /**
+   * 文件描述
+   */
+  description?: string;
+}
+
+/**
+ * 文件信息查询参数
+ */
+export interface FileInfoQuery {
+  /**
+   * 文件名称
+   */
+  name?: string;
+
+  /**
+   * 文件主分类
+   */
+  categoryType?: number;
+
+  /**
+   * 原始文件名
+   */
+  originalName?: string;
+
+  /**
+   * 分类ID
+   */
+  categoryId?: number;
+
+  /**
+   * 文件类型
+   */
+  type?: string;
+
+  /**
+   * 上传状态
+   */
+  uploadStatus?: number;
+
+  /**
+   * 是否公开
+   */
+  isPublic?: number;
+
+  /**
+   * 页码
+   */
+  pageNum?: number;
+
+  /**
+   * 每页大小
+   */
+  pageSize?: number;
+}
+
+/**
+ * 分页查询参数
+ */
+export interface PageQuery {
+  /**
+   * 页码
+   */
+  pageNum?: number;
+
+  /**
+   * 每页大小
+   */
+  pageSize?: number;
+}
+
+/**
+ * 分页响应结果
+ */
+export interface TableDataInfo<T> {
+  /**
+   * 总记录数
+   */
+  total: number;
+
+  /**
+   * 数据列表
+   */
+  rows: T[];
+
+  /**
+   * 页码
+   */
+  pageNum: number;
+
+  /**
+   * 每页大小
+   */
+  pageSize: number;
+} 

+ 113 - 0
src/api/login.ts

@@ -0,0 +1,113 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { LoginData, LoginResult, VerifyCodeResult, TenantInfo } from './types';
+import { UserInfo } from '@/api/system/user/types';
+
+// pc端固定客户端授权id
+const clientId = import.meta.env.VITE_APP_CLIENT_ID;
+
+/**
+ * @param data {LoginData}
+ * @returns
+ */
+export function login(data: LoginData): AxiosPromise<LoginResult> {
+  const params = {
+    ...data,
+    clientId: data.clientId || clientId,
+    grantType: data.grantType || 'password'
+  };
+  return request({
+    url: '/auth/login',
+    headers: {
+      isToken: false,
+      isEncrypt: true,
+      repeatSubmit: false
+    },
+    method: 'post',
+    data: params
+  });
+}
+
+// 注册方法
+export function register(data: any) {
+  const params = {
+    ...data,
+    clientId: clientId,
+    grantType: 'password'
+  };
+  return request({
+    url: '/auth/register',
+    headers: {
+      isToken: false,
+      isEncrypt: true,
+      repeatSubmit: false
+    },
+    method: 'post',
+    data: params
+  });
+}
+
+/**
+ * 注销
+ */
+export function logout() {
+  if (import.meta.env.VITE_APP_SSE === 'true') {
+    request({
+      url: '/resource/sse/close',
+      method: 'get'
+    });
+  }
+  return request({
+    url: '/auth/logout',
+    method: 'post'
+  });
+}
+
+/**
+ * 获取验证码
+ */
+export function getCodeImg(): AxiosPromise<VerifyCodeResult> {
+  return request({
+    url: '/auth/code',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  });
+}
+
+/**
+ * 第三方登录
+ */
+export function callback(data: LoginData): AxiosPromise<any> {
+  const LoginData = {
+    ...data,
+    clientId: clientId,
+    grantType: 'social'
+  };
+  return request({
+    url: '/auth/social/callback',
+    method: 'post',
+    data: LoginData
+  });
+}
+
+// 获取用户详细信息
+export function getInfo(): AxiosPromise<UserInfo> {
+  return request({
+    url: '/system/user/getInfo',
+    method: 'get'
+  });
+}
+
+// 获取租户列表
+export function getTenantList(isToken: boolean): AxiosPromise<TenantInfo> {
+  return request({
+    url: '/auth/tenant/list',
+    headers: {
+      isToken: isToken
+    },
+    method: 'get'
+  });
+}

+ 11 - 0
src/api/menu.ts

@@ -0,0 +1,11 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { RouteRecordRaw } from 'vue-router';
+
+// 获取路由
+export function getRouters(): AxiosPromise<RouteRecordRaw[]> {
+  return request({
+    url: '/system/menu/getRouters',
+    method: 'get'
+  });
+}

+ 59 - 0
src/api/monitor/cache/index.ts

@@ -0,0 +1,59 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { CacheVO } from './types';
+
+// 查询缓存详细
+export function getCache(): AxiosPromise<CacheVO> {
+  return request({
+    url: '/monitor/cache',
+    method: 'get'
+  });
+}
+
+// 查询缓存名称列表
+export function listCacheName() {
+  return request({
+    url: '/monitor/cache/getNames',
+    method: 'get'
+  });
+}
+
+// 查询缓存键名列表
+export function listCacheKey(cacheName: string) {
+  return request({
+    url: '/monitor/cache/getKeys/' + cacheName,
+    method: 'get'
+  });
+}
+
+// 查询缓存内容
+export function getCacheValue(cacheName: string, cacheKey: string) {
+  return request({
+    url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
+    method: 'get'
+  });
+}
+
+// 清理指定名称缓存
+export function clearCacheName(cacheName: string) {
+  return request({
+    url: '/monitor/cache/clearCacheName/' + cacheName,
+    method: 'delete'
+  });
+}
+
+// 清理指定键名缓存
+export function clearCacheKey(cacheName: string, cacheKey: string) {
+  return request({
+    url: '/monitor/cache/clearCacheKey/' + cacheName + '/' + cacheKey,
+    method: 'delete'
+  });
+}
+
+// 清理全部缓存
+export function clearCacheAll() {
+  return request({
+    url: '/monitor/cache/clearCacheAll',
+    method: 'delete'
+  });
+}

+ 7 - 0
src/api/monitor/cache/types.ts

@@ -0,0 +1,7 @@
+export interface CacheVO {
+  commandStats: Array<{ name: string; value: string }>;
+
+  dbSize: number;
+
+  info: { [key: string]: string };
+}

+ 36 - 0
src/api/monitor/loginInfo/index.ts

@@ -0,0 +1,36 @@
+import request from '@/utils/request';
+import { LoginInfoQuery, LoginInfoVO } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询登录日志列表
+export function list(query: LoginInfoQuery): AxiosPromise<LoginInfoVO[]> {
+  return request({
+    url: '/monitor/logininfor/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 删除登录日志
+export function delLoginInfo(infoId: string | number | Array<string | number>) {
+  return request({
+    url: '/monitor/logininfor/' + infoId,
+    method: 'delete'
+  });
+}
+
+// 解锁用户登录状态
+export function unlockLoginInfo(userName: string | Array<string>) {
+  return request({
+    url: '/monitor/logininfor/unlock/' + userName,
+    method: 'get'
+  });
+}
+
+// 清空登录日志
+export function cleanLoginInfo() {
+  return request({
+    url: '/monitor/logininfor/clean',
+    method: 'delete'
+  });
+}

+ 20 - 0
src/api/monitor/loginInfo/types.ts

@@ -0,0 +1,20 @@
+export interface LoginInfoVO {
+  infoId: string | number;
+  tenantId: string | number;
+  userName: string;
+  status: string;
+  ipaddr: string;
+  loginLocation: string;
+  browser: string;
+  os: string;
+  msg: string;
+  loginTime: string;
+}
+
+export interface LoginInfoQuery extends PageQuery {
+  ipaddr: string;
+  userName: string;
+  status: string;
+  orderByColumn: string;
+  isAsc: string;
+}

+ 36 - 0
src/api/monitor/online/index.ts

@@ -0,0 +1,36 @@
+import request from '@/utils/request';
+import { OnlineQuery, OnlineVO } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询在线用户列表
+export function list(query: OnlineQuery): AxiosPromise<OnlineVO[]> {
+  return request({
+    url: '/monitor/online/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 强退用户
+export function forceLogout(tokenId: string) {
+  return request({
+    url: '/monitor/online/' + tokenId,
+    method: 'delete'
+  });
+}
+
+// 获取当前用户登录在线设备
+export function getOnline() {
+  return request({
+    url: '/monitor/online',
+    method: 'get'
+  });
+}
+
+// 删除当前在线设备
+export function delOnline(tokenId: string) {
+  return request({
+    url: '/monitor/online/myself/' + tokenId,
+    method: 'delete'
+  });
+}

+ 15 - 0
src/api/monitor/online/types.ts

@@ -0,0 +1,15 @@
+export interface OnlineQuery extends PageQuery {
+  ipaddr: string;
+  userName: string;
+}
+
+export interface OnlineVO extends BaseEntity {
+  tokenId: string;
+  deptName: string;
+  userName: string;
+  ipaddr: string;
+  loginLocation: string;
+  browser: string;
+  os: string;
+  loginTime: number;
+}

+ 28 - 0
src/api/monitor/operlog/index.ts

@@ -0,0 +1,28 @@
+import request from '@/utils/request';
+import { OperLogQuery, OperLogVO } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询操作日志列表
+export function list(query: OperLogQuery): AxiosPromise<OperLogVO[]> {
+  return request({
+    url: '/monitor/operlog/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 删除操作日志
+export function delOperlog(operId: string | number | Array<string | number>) {
+  return request({
+    url: '/monitor/operlog/' + operId,
+    method: 'delete'
+  });
+}
+
+// 清空操作日志
+export function cleanOperlog() {
+  return request({
+    url: '/monitor/operlog/clean',
+    method: 'delete'
+  });
+}

+ 53 - 0
src/api/monitor/operlog/types.ts

@@ -0,0 +1,53 @@
+export interface OperLogQuery extends PageQuery {
+  operIp: string;
+  title: string;
+  operName: string;
+  businessType: string;
+  status: string;
+  orderByColumn: string;
+  isAsc: string;
+}
+
+export interface OperLogVO extends BaseEntity {
+  operId: string | number;
+  tenantId: string;
+  title: string;
+  businessType: number;
+  businessTypes: number[] | undefined;
+  method: string;
+  requestMethod: string;
+  operatorType: number;
+  operName: string;
+  deptName: string;
+  operUrl: string;
+  operIp: string;
+  operLocation: string;
+  operParam: string;
+  jsonResult: string;
+  status: number;
+  errorMsg: string;
+  operTime: string;
+  costTime: number;
+}
+
+export interface OperLogForm {
+  operId: number | string | undefined;
+  tenantId: string | number | undefined;
+  title: string;
+  businessType: number;
+  businessTypes: number[] | undefined;
+  method: string;
+  requestMethod: string;
+  operatorType: number;
+  operName: string;
+  deptName: string;
+  operUrl: string;
+  operIp: string;
+  operLocation: string;
+  operParam: string;
+  jsonResult: string;
+  status: number;
+  errorMsg: string;
+  operTime: string;
+  costTime: number;
+}

+ 63 - 0
src/api/setting/codeSetting/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { CodeSettingVO, CodeSettingForm, CodeSettingQuery } from '@/api/setting/codeSetting/types';
+
+/**
+ * 查询激活码列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listCodeSetting = (query?: CodeSettingQuery): AxiosPromise<CodeSettingVO[]> => {
+  return request({
+    url: '/system/codeSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询激活码详细
+ * @param id
+ */
+export const getCodeSetting = (id: string | number): AxiosPromise<CodeSettingVO> => {
+  return request({
+    url: '/system/codeSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增激活码
+ * @param data
+ */
+export const addCodeSetting = (data: CodeSettingForm) => {
+  return request({
+    url: '/system/codeSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改激活码
+ * @param data
+ */
+export const updateCodeSetting = (data: CodeSettingForm) => {
+  return request({
+    url: '/system/codeSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除激活码
+ * @param id
+ */
+export const delCodeSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/codeSetting/' + id,
+    method: 'delete'
+  });
+};

+ 119 - 0
src/api/setting/codeSetting/types.ts

@@ -0,0 +1,119 @@
+export interface CodeSettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 激活码
+   */
+  activationCode: string;
+
+  /**
+   * 状态(0待使用 1已使用 2 已失效)
+   */
+  status: string;
+
+  /**
+   * 作用天数
+   */
+  effectDays: number;
+
+  /**
+   * 价格
+   */
+  price: number;
+
+  /**
+   * 过期日期
+   */
+  expiryDate: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface CodeSettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 激活码
+   */
+  activationCode?: string;
+
+  // 有效天数
+  indate?: number | string;
+
+  //生成条数
+  buildNum?: number | string;
+
+  /**
+   * 状态(0待使用 1已使用 2 已失效)
+   */
+  status?: string;
+
+  /**
+   * 作用天数
+   */
+  effectDays?: number;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+  /**
+   * 过期日期
+   */
+  expiryDate?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  createTimeRange?: [];
+
+  expiryDateRange?: [];
+}
+
+export interface CodeSettingQuery extends PageQuery {
+  /**
+   * 激活码
+   */
+  activationCode?: string;
+
+  /**
+   * 状态(0待使用 1已使用 2 已失效)
+   */
+  status?: string;
+
+  /**
+   * 作用天数
+   */
+  effectDays?: number;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+  /**
+   * 过期日期
+   */
+  expiryDate?: string;
+
+  createTimeRange?: [];
+
+  expiryDateRange?: [];
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 70 - 0
src/api/setting/messageSetting/index.ts

@@ -0,0 +1,70 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MessageSettingVO, MessageSettingForm, MessageSettingQuery } from '@/api/setting/messageSetting/types';
+
+/**
+ * 查询短信设置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMessageSetting = (query?: MessageSettingQuery): AxiosPromise<MessageSettingVO[]> => {
+  return request({
+    url: '/system/messageSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询短信设置详细
+ * @param id
+ */
+export const getMessageSetting = (id: string | number): AxiosPromise<MessageSettingVO> => {
+  return request({
+    url: '/system/messageSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增短信设置
+ * @param data
+ */
+export const addMessageSetting = (data: MessageSettingForm) => {
+  return request({
+    url: '/system/messageSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改短信设置
+ * @param data
+ */
+export const updateMessageSetting = (data: MessageSettingForm) => {
+  return request({
+    url: '/system/messageSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除短信设置
+ * @param id
+ */
+export const delMessageSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/messageSetting/' + id,
+    method: 'delete'
+  });
+};
+
+export const getMsgSettingData = (): AxiosPromise<MessageSettingVO> => {
+  return request({
+    url: '/system/messageSetting/getOneMsgSetting',
+    method: 'get'
+  });
+};

+ 122 - 0
src/api/setting/messageSetting/types.ts

@@ -0,0 +1,122 @@
+export interface MessageSettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 短信设置
+   */
+  msgSetting: string;
+
+  /**
+   * 验证码模版ID
+   */
+  codeId: string | number;
+
+  /**
+   * 配置信息
+   */
+  configInfo: string;
+
+  /**
+   * 赠送短信条数
+   */
+  giveNum: number;
+
+  /**
+   * 购买设置id
+   */
+  buySettingId: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface MessageSettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 短信设置
+   */
+  msgSetting?: string;
+
+  /**
+   * 验证码模版ID
+   */
+  codeId?: string | number;
+
+  /**
+   * 配置信息
+   */
+  configInfo?: string;
+
+  /**
+   * 赠送短信条数
+   */
+  giveNum?: number;
+
+  /**
+   * 购买设置id
+   */
+  buySettingId?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  // buyPackages: any[];
+}
+
+export interface MessageSettingQuery extends PageQuery {
+  /**
+   * 短信设置
+   */
+  msgSetting?: string;
+
+  /**
+   * 验证码模版ID
+   */
+  codeId?: string | number;
+
+  /**
+   * 配置信息
+   */
+  configInfo?: string;
+
+  /**
+   * 赠送短信条数
+   */
+  giveNum?: number;
+
+  /**
+   * 购买设置id
+   */
+  buySettingId?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 80 - 0
src/api/setting/msgSignSetting/index.ts

@@ -0,0 +1,80 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MsgSignSettingVO, MsgSignSettingForm, MsgSignSettingQuery } from '@/api/setting/msgSignSetting/types';
+
+/**
+ * 查询短信签名管理列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMsgSignSetting = (query?: MsgSignSettingQuery): AxiosPromise<MsgSignSettingVO[]> => {
+  return request({
+    url: '/system/msgSignSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询短信签名管理详细
+ * @param id
+ */
+export const getMsgSignSetting = (id: string | number): AxiosPromise<MsgSignSettingVO> => {
+  return request({
+    url: '/system/msgSignSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增短信签名管理
+ * @param data
+ */
+export const addMsgSignSetting = (data: MsgSignSettingForm) => {
+  return request({
+    url: '/system/msgSignSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改短信签名管理
+ * @param data
+ */
+export const updateMsgSignSetting = (data: MsgSignSettingForm) => {
+  return request({
+    url: '/system/msgSignSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除短信签名管理
+ * @param id
+ */
+export const delMsgSignSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/msgSignSetting/' + id,
+    method: 'delete'
+  });
+};
+
+/**
+ * 状态修改
+ * @param id 短信签名ID
+ * @param status 状态
+ */
+export const changeStatus = (id: number | string, status: string) => {
+  const data = {
+    id,
+    status
+  };
+  return request({
+    url: '/system/msgSignSetting/changeStatus',
+    method: 'put',
+    data: data
+  });
+};

+ 145 - 0
src/api/setting/msgSignSetting/types.ts

@@ -0,0 +1,145 @@
+export interface MsgSignSettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 签名名称
+   */
+  signName: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+  /**
+   * 主门店id
+   */
+  storeId: string | number;
+
+  /**
+   * 主门店名称
+   */
+  storeName: string;
+
+  /**
+   * 资质类目
+   */
+  qualificationCategory: string;
+
+  /**
+   * 资质图片
+   */
+  qualificationPic: string;
+
+  /**
+   * 资质图片Url
+   */
+  qualificationPicUrl: string;
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 状态
+   */
+  checkStatus: string;
+
+}
+
+export interface MsgSignSettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 签名名称
+   */
+  signName?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 主门店id
+   */
+  storeId?: string | number;
+
+  /**
+   * 主门店名称
+   */
+  storeName?: string;
+
+  /**
+   * 资质类目
+   */
+  qualificationCategory?: string;
+
+  /**
+   * 资质图片
+   */
+  qualificationPic?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 状态
+   */
+  checkStatus?: string;
+
+}
+
+export interface MsgSignSettingQuery extends PageQuery {
+
+  /**
+   * 签名名称
+   */
+  signName?: string;
+
+  /**
+   * 主门店id
+   */
+  storeId?: string | number;
+
+  /**
+   * 主门店名称
+   */
+  storeName?: string;
+
+  /**
+   * 资质类目
+   */
+  qualificationCategory?: string;
+
+  /**
+   * 资质图片
+   */
+  qualificationPic?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 状态
+   */
+  checkStatus?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 70 - 0
src/api/setting/openPlatformSetting/index.ts

@@ -0,0 +1,70 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { OpenPlatformSettingVO, OpenPlatformSettingForm, OpenPlatformSettingQuery } from '@/api/setting/openPlatformSetting/types';
+
+/**
+ * 查询开放平台设置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listOpenPlatformSetting = (query?: OpenPlatformSettingQuery): AxiosPromise<OpenPlatformSettingVO[]> => {
+  return request({
+    url: '/system/openPlatformSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询开放平台设置详细
+ * @param id
+ */
+export const getOpenPlatformSetting = (id: string | number): AxiosPromise<OpenPlatformSettingVO> => {
+  return request({
+    url: '/system/openPlatformSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增开放平台设置
+ * @param data
+ */
+export const addOpenPlatformSetting = (data: OpenPlatformSettingForm) => {
+  return request({
+    url: '/system/openPlatformSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+export const getOpenPlatformSettingData = (): AxiosPromise<OpenPlatformSettingVO> => {
+  return request({
+    url: '/system/openPlatformSetting/getOpenPlatformSettingData',
+    method: 'get'
+  });
+};
+
+/**
+ * 修改开放平台设置
+ * @param data
+ */
+export const updateOpenPlatformSetting = (data: OpenPlatformSettingForm) => {
+  return request({
+    url: '/system/openPlatformSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除开放平台设置
+ * @param id
+ */
+export const delOpenPlatformSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/openPlatformSetting/' + id,
+    method: 'delete'
+  });
+};

+ 146 - 0
src/api/setting/openPlatformSetting/types.ts

@@ -0,0 +1,146 @@
+export interface OpenPlatformSettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 开放平台AppId
+   */
+  appId: string | number;
+
+  /**
+   * 开放平台AppSecret
+   */
+  appSecret: string;
+
+  /**
+   * 消息通知TOKEN
+   */
+  infoToken: string;
+
+  /**
+   * 消息通知秘钥
+   */
+  infoSecretKey: string;
+
+  /**
+   * 开发小程序ID
+   */
+  miniId: string | number;
+
+  /**
+   * 开发小程序上传秘钥
+   */
+  miniSecretKey: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface OpenPlatformSettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 开放平台AppId
+   */
+  appId?: string | number;
+
+  /**
+   * 开放平台AppSecret
+   */
+  appSecret?: string;
+
+  /**
+   * 消息通知TOKEN
+   */
+  infoToken?: string;
+
+  /**
+   * 消息通知秘钥
+   */
+  infoSecretKey?: string;
+
+  /**
+   * 开发小程序ID
+   */
+  miniId?: string | number;
+
+  /**
+   * 开发小程序上传秘钥
+   */
+  miniSecretKey?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface OpenPlatformSettingQuery extends PageQuery {
+
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 开放平台AppId
+   */
+  appId?: string | number;
+
+  /**
+   * 开放平台AppSecret
+   */
+  appSecret?: string;
+
+  /**
+   * 消息通知TOKEN
+   */
+  infoToken?: string;
+
+  /**
+   * 消息通知秘钥
+   */
+  infoSecretKey?: string;
+
+  /**
+   * 开发小程序ID
+   */
+  miniId?: string | number;
+
+  /**
+   * 开发小程序上传秘钥
+   */
+  miniSecretKey?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 70 - 0
src/api/setting/siteSetting/index.ts

@@ -0,0 +1,70 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SiteSettingVO, SiteSettingForm, SiteSettingQuery } from '@/api/setting/siteSetting/types';
+
+/**
+ * 查询站点设置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSiteSetting = (query?: SiteSettingQuery): AxiosPromise<SiteSettingVO[]> => {
+  return request({
+    url: '/system/siteSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询站点设置详细
+ * @param id
+ */
+export const getSiteSetting = (id: string | number): AxiosPromise<SiteSettingVO> => {
+  return request({
+    url: '/system/siteSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增站点设置
+ * @param data
+ */
+export const addSiteSetting = (data: SiteSettingForm) => {
+  return request({
+    url: '/system/siteSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改站点设置
+ * @param data
+ */
+export const updateSiteSetting = (data: SiteSettingForm) => {
+  return request({
+    url: '/system/siteSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+export const getSiteSettingData = (): AxiosPromise<SiteSettingVO> => {
+  return request({
+    url: '/system/siteSetting/getSiteSettingData',
+    method: 'get'
+  });
+};
+
+/**
+ * 删除站点设置
+ * @param id
+ */
+export const delSiteSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/siteSetting/' + id,
+    method: 'delete'
+  });
+};

+ 212 - 0
src/api/setting/siteSetting/types.ts

@@ -0,0 +1,212 @@
+export interface SiteSettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 总控后台名称
+   */
+  generalBackstageName: string;
+
+  /**
+   * 门店后台名称
+   */
+  storeBackstageName: string;
+
+  /**
+   * 电话号码
+   */
+  phonenumber: string;
+
+  /**
+   * 商城提现手续费
+   */
+  serviceCharge: number;
+
+  /**
+   * 总控域名
+   */
+  domainName: string;
+
+  /**
+   * 圆形logo
+   */
+  roundLogo: string;
+
+  roundLogoUrl: string;
+
+  /**
+   * 用户后台登录
+   */
+  userBackstageLogin: string;
+
+  userBackstageLoginUrl: string;
+
+  /**
+   * 用户后台应用
+   */
+  userBackstageApp: string;
+
+  userBackstageAppUrl: string;
+
+  /**
+   * 总后台登录
+   */
+  generalBackstageLogin: string;
+
+
+  /**
+   * 总后台应用
+   */
+  generalBackstageApp: string;
+
+  generalBackstageAppUrl: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface SiteSettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 总控后台名称
+   */
+  generalBackstageName?: string;
+
+  /**
+   * 门店后台名称
+   */
+  storeBackstageName?: string;
+
+  /**
+   * 电话号码
+   */
+  phonenumber?: string;
+
+  /**
+   * 商城提现手续费
+   */
+  serviceCharge?: number;
+
+  /**
+   * 总控域名
+   */
+  domainName?: string;
+
+  /**
+   * 圆形logo
+   */
+  roundLogo?: string;
+
+  roundLogoUrl?: string;
+
+  /**
+   * 用户后台登录
+   */
+  userBackstageLogin?: string;
+
+  /**
+   * 用户后台应用
+   */
+  userBackstageApp?: string;
+
+  /**
+   * 总后台登录
+   */
+  generalBackstageLogin?: string;
+
+
+  /**
+   * 总后台应用
+   */
+  generalBackstageApp?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface SiteSettingQuery extends PageQuery {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 总控后台名称
+   */
+  generalBackstageName?: string;
+
+  /**
+   * 门店后台名称
+   */
+  storeBackstageName?: string;
+
+  /**
+   * 电话号码
+   */
+  phonenumber?: string;
+
+  /**
+   * 商城提现手续费
+   */
+  serviceCharge?: number;
+
+  /**
+   * 总控域名
+   */
+  domainName?: string;
+
+  /**
+   * 圆形logo
+   */
+  roundLogo?: string;
+
+  /**
+   * 用户后台登录
+   */
+  userBackstageLogin?: string;
+
+  /**
+   * 用户后台应用
+   */
+  userBackstageApp?: string;
+
+  /**
+   * 总后台登录
+   */
+  generalBackstageLogin?: string;
+
+  /**
+   * 总后台应用
+   */
+  generalBackstageApp?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 63 - 0
src/api/setting/templateSetting/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { TemplateSettingVO, TemplateSettingForm, TemplateSettingQuery } from '@/api/setting/templateSetting/types';
+
+/**
+ * 查询短信模板配置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listTemplateSetting = (query?: TemplateSettingQuery): AxiosPromise<TemplateSettingVO[]> => {
+  return request({
+    url: '/system/templateSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询短信模板配置详细
+ * @param id
+ */
+export const getTemplateSetting = (id: string | number): AxiosPromise<TemplateSettingVO> => {
+  return request({
+    url: '/system/templateSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增短信模板配置
+ * @param data
+ */
+export const addTemplateSetting = (data: TemplateSettingForm) => {
+  return request({
+    url: '/system/templateSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改短信模板配置
+ * @param data
+ */
+export const updateTemplateSetting = (data: TemplateSettingForm) => {
+  return request({
+    url: '/system/templateSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除短信模板配置
+ * @param id
+ */
+export const delTemplateSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/templateSetting/' + id,
+    method: 'delete'
+  });
+};

+ 111 - 0
src/api/setting/templateSetting/types.ts

@@ -0,0 +1,111 @@
+export interface TemplateSettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 模板id
+   */
+  templateId: string | number;
+
+  /**
+   * 模板内容
+   */
+  templateContent: string;
+
+  /**
+   * 发送英文KEY
+   */
+  sendKey: string;
+
+  /**
+   * 作用
+   */
+  effect: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface TemplateSettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 模板id
+   */
+  templateId?: string | number;
+
+  /**
+   * 模板内容
+   */
+  templateContent?: string;
+
+  /**
+   * 发送英文KEY
+   */
+  sendKey?: string;
+
+  /**
+   * 作用
+   */
+  effect?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface TemplateSettingQuery extends PageQuery {
+
+  /**
+   * 模板id
+   */
+  templateId?: string | number;
+
+  /**
+   * 模板内容
+   */
+  templateContent?: string;
+
+  /**
+   * 发送英文KEY
+   */
+  sendKey?: string;
+
+  /**
+   * 作用
+   */
+  effect?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 74 - 0
src/api/store/sysService/index.ts

@@ -0,0 +1,74 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SysServiceVO, SysServiceForm, SysServiceQuery } from '@/api/store/sysService/types';
+
+/**
+ * 查询客服信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSysService = (query?: SysServiceQuery): AxiosPromise<SysServiceVO[]> => {
+  return request({
+    url: '/system/sysService/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询客服信息详细
+ * @param id
+ */
+export const getSysService = (id: string | number): AxiosPromise<SysServiceVO> => {
+  return request({
+    url: '/system/sysService/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 设为默认客服
+ * @param id
+ */
+export const setDefault = (id: string | number): AxiosPromise<SysServiceVO> => {
+  return request({
+    url: '/system/sysService/setDefault/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增客服信息
+ * @param data
+ */
+export const addSysService = (data: SysServiceForm) => {
+  return request({
+    url: '/system/sysService',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改客服信息
+ * @param data
+ */
+export const updateSysService = (data: SysServiceForm) => {
+  return request({
+    url: '/system/sysService',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除客服信息
+ * @param id
+ */
+export const delSysService = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/sysService/' + id,
+    method: 'delete'
+  });
+};

+ 110 - 0
src/api/store/sysService/types.ts

@@ -0,0 +1,110 @@
+export interface SysServiceVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 客服名称
+   */
+  serviceName: string;
+
+  /**
+   * 二维码
+   */
+  qrCode: string;
+
+  /**
+   * 手机号
+   */
+  phonenumber: string;
+
+  /**
+   * 默认  0否  1默认
+   */
+  isDefault: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface SysServiceForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 客服名称
+   */
+  serviceName?: string;
+
+  /**
+   * 二维码
+   */
+  qrCode?: string;
+
+  /**
+   * 手机号
+   */
+  phonenumber?: string;
+
+  /**
+   * 默认  0否  1默认
+   */
+  isDefault?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface SysServiceQuery extends PageQuery {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 客服名称
+   */
+  serviceName?: string;
+
+  /**
+   * 二维码
+   */
+  qrCode?: string;
+
+  /**
+   * 手机号
+   */
+  phonenumber?: string;
+
+  /**
+   * 默认  0否  1默认
+   */
+  isDefault?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 72 - 0
src/api/store/sysShop/index.ts

@@ -0,0 +1,72 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SysShopVO, SysShopForm, SysShopQuery } from '@/api/store/sysShop/types';
+
+/**
+ * 查询门店列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSysShop = (query?: SysShopQuery): AxiosPromise<SysShopVO[]> => {
+  return request({
+    url: '/system/sysShop/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询门店详细
+ * @param id
+ */
+export const getSysShop = (id: string | number): AxiosPromise<SysShopVO> => {
+  return request({
+    url: '/system/sysShop/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增门店
+ * @param data
+ */
+export const addSysShop = (data: SysShopForm) => {
+  return request({
+    url: '/system/sysShop',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改门店
+ * @param data
+ */
+export const updateSysShop = (data: SysShopForm) => {
+  return request({
+    url: '/system/sysShop',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除门店
+ * @param id
+ */
+export const delSysShop = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/sysShop/' + id,
+    method: 'delete'
+  });
+};
+
+// 指定服务
+export const assignService = (data: SysShopForm) => {
+  return request({
+    url: '/system/sysShop/assignService',
+    method: 'post',
+    data: data
+  });
+};

+ 553 - 0
src/api/store/sysShop/types.ts

@@ -0,0 +1,553 @@
+export interface SysShopVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 店铺logo
+   */
+  storeLogo: string;
+
+  /**
+   * 店铺名称
+   */
+  storeName: string;
+
+  /**
+   * 店铺描述
+   */
+  storeDescribe: string;
+
+  /**
+   * 区域代码
+   */
+  areaCode: string;
+
+  /**
+   * 省份
+   */
+  province: string;
+
+  /**
+   * 市
+   */
+  city: string;
+
+  /**
+   * 区
+   */
+  district: string;
+
+  /**
+   * 所属用户id
+   */
+  vestInUserId: string | number;
+
+  /**
+   * 所属用户
+   */
+  vestInUser: string | number;
+
+  /**
+   * 所属品牌id
+   */
+  brandId: string | number;
+
+  /**
+   * 品牌名称
+   */
+  brandName: string;
+
+  /**
+   * 店铺排序
+   */
+  storeSort: number;
+
+  /**
+   * 店铺电话
+   */
+  storePhonenumber: string;
+
+  /**
+   * 小程序分享图
+   */
+  miniSharePic: string;
+
+  /**
+   * 店铺地址
+   */
+  storeAddress: string;
+
+  /**
+   * 商户套餐
+   */
+  packageId: string | number;
+
+  /**
+   * 套餐名称
+   */
+  packageName: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate: string;
+
+  /**
+   * 商户状态
+   */
+  storeStatus: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+  serviceId: string | number;
+
+  /**
+   * 店铺人气
+   */
+  population: number;
+
+  /**
+   * 人均消费
+   */
+  consume: number;
+
+  /**
+   * 虚拟销量
+   */
+  virtualSalesVolume: number;
+
+  /**
+   * 评分等级
+   */
+  ranking: number;
+
+  /**
+   * 店铺分类
+   */
+  classify: number;
+
+  /**
+   * 商户幻灯片
+   */
+  lanternSlide: string;
+
+  /**
+   * 幻灯片大小比例-宽
+   */
+  lanternSlideSizeWide: number;
+
+  /**
+   * 幻灯片大小比例-高
+   */
+  lanternSlideSizeHigh: number;
+
+  /**
+   * 店铺相册
+   */
+  photoAlbum: string;
+
+  /**
+   * 店铺详情
+   */
+  shopDetails: string;
+
+  /**
+   * 营业时间
+   */
+  businessHours: string;
+
+  /**
+   * 营业时间段列表
+   */
+  businessHoursList?: Array<{ startTime: string; endTime: string; }>;
+
+  codeArr: string[];
+
+  /**
+   * 所属区域
+   */
+  belongArea: string;
+
+  /**
+   * 地理位置
+   */
+  geographicPosition: string;
+
+  /**
+   * 营业时间列表(用于提交)
+   */
+  shopBusinessHoursBoList?: Array<{
+    id?: string | number;
+    name: string;
+    shopId: string | number;
+    startTime: string;
+    endTime: string;
+    remark: string;
+  }>;
+
+  /**
+   * 营业时间列表(用于接收)
+   */
+  businessHoursVoList?: Array<{
+    id?: string | number;
+    name?: string;
+    shopId?: string | number;
+    startTime?: string;
+    endTime?: string;
+  }>;
+
+  /**
+   * 门店logo文件数组
+   */
+  storeLogoFiles?: any[];
+
+  /**
+   * 小程序分享图文件数组
+   */
+  miniSharePicFiles?: any[];
+
+  /**
+   * 店铺幻灯片文件数组
+   */
+  lanternSlideFiles?: any[];
+
+  /**
+   * 店铺相册文件数组
+   */
+  photoAlbumFiles?: any[];
+}
+
+export interface SysShopForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 店铺logo
+   */
+  storeLogo?: string;
+
+  /**
+   * 店铺名称
+   */
+  storeName?: string;
+
+  /**
+   * 店铺描述
+   */
+  storeDescribe?: string;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 省份
+   */
+  province?: string;
+
+  /**
+   * 市
+   */
+  city?: string;
+
+  /**
+   * 区
+   */
+  district?: string;
+
+  /**
+   * 所属用户id
+   */
+  vestInUserId?: string | number;
+
+  /**
+   * 所属用户
+   */
+  vestInUser?: string;
+
+  /**
+   * 所属品牌id
+   */
+  brandId?: string | number;
+
+  /**
+   * 品牌名称
+   */
+  brandName?: string;
+
+  /**
+   * 店铺排序
+   */
+  storeSort?: number;
+
+  /**
+   * 店铺电话
+   */
+  storePhonenumber?: string;
+
+  /**
+   * 小程序分享图
+   */
+  miniSharePic?: string;
+
+  /**
+   * 店铺地址
+   */
+  storeAddress?: string;
+
+  /**
+   * 商户套餐
+   */
+  packageId?: string | number;
+
+  /**
+   * 套餐名称
+   */
+  packageName?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 商户状态
+   */
+  storeStatus?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  serviceId?: string | number;
+
+  /**
+   * 店铺人气
+   */
+  population?: number;
+
+  /**
+   * 人均消费
+   */
+  consume?: number;
+
+  /**
+   * 虚拟销量
+   */
+  virtualSalesVolume?: number;
+
+  /**
+   * 评分等级
+   */
+  ranking?: number;
+
+  /**
+   * 店铺分类
+   */
+  classify?: number;
+
+  /**
+   * 商户幻灯片
+   */
+  lanternSlide?: string;
+
+  /**
+   * 幻灯片大小比例-宽
+   */
+  lanternSlideSizeWide?: number;
+
+  /**
+   * 幻灯片大小比例-高
+   */
+  lanternSlideSizeHigh?: number;
+
+  /**
+   * 店铺相册
+   */
+  photoAlbum?: string;
+
+  /**
+   * 店铺详情
+   */
+  shopDetails?: string;
+
+  /**
+   * 营业时间
+   */
+  businessHours?: string;
+
+  /**
+   * 营业时间段列表
+   */
+  businessHoursList?: Array<{ startTime: string; endTime: string; }>;
+
+  codeArr?: string[];
+
+  /**
+   * 所属区域
+   */
+  belongArea?: string;
+
+  /**
+   * 地理位置
+   */
+  geographicPosition?: string;
+
+  /**
+   * 营业时间列表
+   */
+  shopBusinessHoursBoList?: Array<{
+    id?: string | number;
+    name?: string;
+    shopId?: string | number;
+    startTime?: string;
+    endTime?: string;
+    remark?: string;
+  }>;
+
+  /**
+   * 门店logo文件数组
+   */
+  storeLogoFiles?: any[];
+
+  /**
+   * 小程序分享图文件数组
+   */
+  miniSharePicFiles?: any[];
+
+  /**
+   * 店铺幻灯片文件数组
+   */
+  lanternSlideFiles?: any[];
+
+  /**
+   * 店铺相册文件数组
+   */
+  photoAlbumFiles?: any[];
+}
+
+export interface SysShopQuery extends PageQuery {
+  /**
+   * 店铺logo
+   */
+  storeLogo?: string;
+
+  /**
+   * 店铺名称
+   */
+  storeName?: string;
+
+  /**
+   * 店铺描述
+   */
+  storeDescribe?: string;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 省份
+   */
+  province?: string;
+
+  /**
+   * 市
+   */
+  city?: string;
+
+  /**
+   * 区
+   */
+  district?: string;
+
+  /**
+   * 所属用户id
+   */
+  vestInUserId?: string | number;
+
+  /**
+   * 所属用户
+   */
+  vestInUser?: string;
+
+  /**
+   * 所属品牌id
+   */
+  brandId?: string | number;
+
+  /**
+   * 品牌名称
+   */
+  brandName?: string;
+
+  /**
+   * 店铺排序
+   */
+  storeSort?: number;
+
+  /**
+   * 店铺电话
+   */
+  storePhonenumber?: string;
+
+  /**
+   * 小程序分享图
+   */
+  miniSharePic?: string;
+
+  /**
+   * 店铺地址
+   */
+  storeAddress?: string;
+
+  /**
+   * 商户套餐
+   */
+  packageId?: string | number;
+
+  /**
+   * 套餐名称
+   */
+  packageName?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 商户状态
+   */
+  storeStatus?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 72 - 0
src/api/store/sysStore/index.ts

@@ -0,0 +1,72 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SysStoreVO, SysStoreForm, SysStoreQuery } from '@/api/store/sysStore/types';
+
+/**
+ * 查询门店信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSysStore = (query?: SysStoreQuery): AxiosPromise<SysStoreVO[]> => {
+  return request({
+    url: '/system/sysStore/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询门店信息详细
+ * @param id
+ */
+export const getSysStore = (id: string | number): AxiosPromise<SysStoreVO> => {
+  return request({
+    url: '/system/sysStore/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增门店信息
+ * @param data
+ */
+export const addSysStore = (data: SysStoreForm) => {
+  return request({
+    url: '/system/sysStore',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改门店信息
+ * @param data
+ */
+export const updateSysStore = (data: SysStoreForm) => {
+  return request({
+    url: '/system/sysStore',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除门店信息
+ * @param id
+ */
+export const delSysStore = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/sysStore/' + id,
+    method: 'delete'
+  });
+};
+
+// 指定服务
+export const assignService = (data: SysStoreForm) => {
+  return request({
+    url: '/system/sysStore/assignService',
+    method: 'post',
+    data: data
+  });
+};

+ 374 - 0
src/api/store/sysStore/types.ts

@@ -0,0 +1,374 @@
+export interface SysStoreVO {
+  /**
+   * id
+   */
+  id: string | number;
+
+  /**
+   * 门店logo
+   */
+  storeLogo: string;
+
+  brandId: string | number;
+
+  brandName: string;
+
+  /**
+   * 门店类型
+   */
+  storeType: string;
+
+  /**
+   * 区域代码
+   */
+  areaCode: string;
+
+  /**
+   * 省份
+   */
+  province: string;
+
+  /**
+   * 市
+   */
+  city: string;
+
+  /**
+   * 区
+   */
+  district: string;
+
+  /**
+   * 归属用户id
+   */
+  vestInUserId: string | number;
+
+  /**
+   * 归属用户
+   */
+  vestInUser: string;
+
+  /**
+   * 上级门店id
+   */
+  parentStoreId: string | number;
+
+  /**
+   * 上级门店
+   */
+  parentStore: string;
+
+  /**
+   * 门店编号
+   */
+  storeCode: string;
+
+  /**
+   * 门店全称
+   */
+  storeFullName: string;
+
+  /**
+   * 门店简称
+   */
+  storeShortName: string;
+
+  /**
+   * 连锁代码
+   */
+  chainCode: string;
+
+  /**
+   * 电话
+   */
+  phonenumber: string;
+
+  /**
+   * 地址
+   */
+  address: string;
+
+  /**
+   * 门店级别
+   */
+  storeLevel: string;
+
+  /**
+   * 使用类型
+   */
+  usageType: string;
+
+  /**
+   * 有效期起
+   */
+  startDate: string;
+
+  /**
+   * 有效期止
+   */
+  endDate: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+  serviceId: string | number;
+
+  dateRange: [];
+
+  codeArr: [];
+}
+
+export interface SysStoreForm extends BaseEntity {
+  /**
+   * id
+   */
+  id?: string | number;
+
+  /**
+   * 门店logo
+   */
+  storeLogo?: string;
+
+  brandId?: string | number;
+
+  brandName?: string;
+
+  serviceId?: string | number;
+
+  /**
+   * 门店类型
+   */
+  storeType?: string;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 省份
+   */
+  province?: string;
+
+  /**
+   * 市
+   */
+  city?: string;
+
+  /**
+   * 区
+   */
+  district?: string;
+
+  /**
+   * 归属用户id
+   */
+  vestInUserId?: string | number;
+
+  /**
+   * 归属用户
+   */
+  vestInUser?: string;
+
+  /**
+   * 上级门店id
+   */
+  parentStoreId?: string | number;
+
+  /**
+   * 上级门店
+   */
+  parentStore?: string;
+
+  /**
+   * 门店编号
+   */
+  storeCode?: string;
+
+  /**
+   * 门店全称
+   */
+  storeFullName?: string;
+
+  /**
+   * 门店简称
+   */
+  storeShortName?: string;
+
+  /**
+   * 连锁代码
+   */
+  chainCode?: string;
+
+  /**
+   * 电话
+   */
+  phonenumber?: string;
+
+  /**
+   * 地址
+   */
+  address?: string;
+
+  /**
+   * 门店级别
+   */
+  storeLevel?: string;
+
+  /**
+   * 使用类型
+   */
+  usageType?: string;
+
+  /**
+   * 有效期起
+   */
+  startDate?: string;
+
+  /**
+   * 有效期止
+   */
+  endDate?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  dateRange?: [];
+
+  codeArr?: String[];
+}
+
+export interface SysStoreQuery extends PageQuery {
+  /**
+   * id
+   */
+  id?: string | number;
+
+  /**
+   * 门店logo
+   */
+  storeLogo?: string;
+
+  brandId?: string | number;
+
+  brandName?: string;
+
+  /**
+   * 门店类型
+   */
+  storeType?: string;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 省份
+   */
+  province?: string;
+
+  /**
+   * 市
+   */
+  city?: string;
+
+  /**
+   * 区
+   */
+  district?: string;
+
+  /**
+   * 归属用户id
+   */
+  vestInUserId?: string | number;
+
+  /**
+   * 归属用户
+   */
+  vestInUser?: string;
+
+  /**
+   * 上级门店id
+   */
+  parentStoreId?: string | number;
+
+  /**
+   * 上级门店
+   */
+  parentStore?: string;
+
+  /**
+   * 门店编号
+   */
+  storeCode?: string;
+
+  /**
+   * 门店全称
+   */
+  storeFullName?: string;
+
+  /**
+   * 门店简称
+   */
+  storeShortName?: string;
+
+  /**
+   * 连锁代码
+   */
+  chainCode?: string;
+
+  /**
+   * 电话
+   */
+  phonenumber?: string;
+
+  /**
+   * 地址
+   */
+  address?: string;
+
+  /**
+   * 门店级别
+   */
+  storeLevel?: string;
+
+  /**
+   * 使用类型
+   */
+  usageType?: string;
+
+  /**
+   * 有效期起
+   */
+  startDate?: string;
+
+  /**
+   * 有效期止
+   */
+  endDate?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 63 - 0
src/api/system/agentGroup/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { GroupVO, GroupForm, GroupQuery } from '@/api/system/agentGroup/types';
+
+/**
+ * 查询分组列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listGroup = (query?: GroupQuery): AxiosPromise<GroupVO[]> => {
+  return request({
+    url: '/system/agentGroup/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询分组详细
+ * @param id
+ */
+export const getGroup = (id: string | number): AxiosPromise<GroupVO> => {
+  return request({
+    url: '/system/agentGroup/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增分组
+ * @param data
+ */
+export const addGroup = (data: GroupForm) => {
+  return request({
+    url: '/system/agentGroup',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改分组
+ * @param data
+ */
+export const updateGroup = (data: GroupForm) => {
+  return request({
+    url: '/system/agentGroup',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除分组
+ * @param id
+ */
+export const delGroup = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/agentGroup/' + id,
+    method: 'delete'
+  });
+};

+ 116 - 0
src/api/system/agentGroup/types.ts

@@ -0,0 +1,116 @@
+export interface GroupVO {
+  /**
+   * 角色ID
+   */
+  id: string | number;
+
+  /**
+   * 角色名称
+   */
+  groupName: string;
+
+  /**
+   * 显示顺序
+   */
+  sort: number;
+
+  /**
+   * 角色状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+  /**
+   * 角色分组类型(代理分组,商户分组)
+   */
+  groupType: string;
+
+  /**
+   * 菜单列表
+   */
+  menus?: any[];
+
+  /**
+   * 是否默认
+   */
+  isDefault?: string;
+
+}
+
+export interface GroupForm extends BaseEntity {
+  /**
+   * 角色ID
+   */
+  id?: string | number;
+
+  /**
+   * 角色名称
+   */
+  groupName?: string;
+
+  /**
+   * 显示顺序
+   */
+  sort?: number;
+
+  /**
+   * 角色状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 角色分组类型(代理分组,商户分组)
+   */
+  groupType?: string;
+
+  /**
+   * 菜单ID列表
+   */
+  menuIds?: Array<string | number>;
+
+  /**
+   * 是否默认
+   */
+  isDefault?: string;
+
+}
+
+export interface GroupQuery extends PageQuery {
+
+  /**
+   * 角色名称
+   */
+  groupName?: string;
+
+  /**
+   * 显示顺序
+   */
+  sort?: number;
+
+  /**
+   * 角色状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 角色分组类型(代理分组,商户分组)
+   */
+  groupType?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}
+
+
+

+ 80 - 0
src/api/system/client/index.ts

@@ -0,0 +1,80 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ClientVO, ClientForm, ClientQuery } from '@/api/system/client/types';
+
+/**
+ * 查询客户端管理列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listClient = (query?: ClientQuery): AxiosPromise<ClientVO[]> => {
+  return request({
+    url: '/system/client/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询客户端管理详细
+ * @param id
+ */
+export const getClient = (id: string | number): AxiosPromise<ClientVO> => {
+  return request({
+    url: '/system/client/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增客户端管理
+ * @param data
+ */
+export const addClient = (data: ClientForm) => {
+  return request({
+    url: '/system/client',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改客户端管理
+ * @param data
+ */
+export const updateClient = (data: ClientForm) => {
+  return request({
+    url: '/system/client',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除客户端管理
+ * @param id
+ */
+export const delClient = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/client/' + id,
+    method: 'delete'
+  });
+};
+
+/**
+ * 状态修改
+ * @param clientId 客户端id
+ * @param status 状态
+ */
+export function changeStatus(clientId: string, status: string) {
+  const data = {
+    clientId,
+    status
+  };
+  return request({
+    url: '/system/client/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 135 - 0
src/api/system/client/types.ts

@@ -0,0 +1,135 @@
+export interface ClientVO {
+  /**
+   * id
+   */
+  id: string | number;
+
+  /**
+   * 客户端id
+   */
+  clientId: string;
+
+  /**
+   * 客户端key
+   */
+  clientKey: string;
+
+  /**
+   * 客户端秘钥
+   */
+  clientSecret: string;
+
+  /**
+   * 授权类型
+   */
+  grantTypeList: string[];
+
+  /**
+   * 设备类型
+   */
+  deviceType: string;
+
+  /**
+   * token活跃超时时间
+   */
+  activeTimeout: number;
+
+  /**
+   * token固定超时
+   */
+  timeout: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+}
+
+export interface ClientForm extends BaseEntity {
+  /**
+   * id
+   */
+  id?: string | number;
+
+  /**
+   * 客户端id
+   */
+  clientId?: string | number;
+
+  /**
+   * 客户端key
+   */
+  clientKey?: string;
+
+  /**
+   * 客户端秘钥
+   */
+  clientSecret?: string;
+
+  /**
+   * 授权类型
+   */
+  grantTypeList?: string[];
+
+  /**
+   * 设备类型
+   */
+  deviceType?: string;
+
+  /**
+   * token活跃超时时间
+   */
+  activeTimeout?: number;
+
+  /**
+   * token固定超时
+   */
+  timeout?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+}
+
+export interface ClientQuery extends PageQuery {
+  /**
+   * 客户端id
+   */
+  clientId?: string | number;
+
+  /**
+   * 客户端key
+   */
+  clientKey?: string;
+
+  /**
+   * 客户端秘钥
+   */
+  clientSecret?: string;
+
+  /**
+   * 授权类型
+   */
+  grantType?: string;
+
+  /**
+   * 设备类型
+   */
+  deviceType?: string;
+
+  /**
+   * token活跃超时时间
+   */
+  activeTimeout?: number;
+
+  /**
+   * token固定超时
+   */
+  timeout?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+}

+ 74 - 0
src/api/system/config/index.ts

@@ -0,0 +1,74 @@
+import request from '@/utils/request';
+import { ConfigForm, ConfigQuery, ConfigVO } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询参数列表
+export function listConfig(query: ConfigQuery): AxiosPromise<ConfigVO[]> {
+  return request({
+    url: '/system/config/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 查询参数详细
+export function getConfig(configId: string | number): AxiosPromise<ConfigVO> {
+  return request({
+    url: '/system/config/' + configId,
+    method: 'get'
+  });
+}
+
+// 根据参数键名查询参数值
+export function getConfigKey(configKey: string): AxiosPromise<string> {
+  return request({
+    url: '/system/config/configKey/' + configKey,
+    method: 'get'
+  });
+}
+
+// 新增参数配置
+export function addConfig(data: ConfigForm) {
+  return request({
+    url: '/system/config',
+    method: 'post',
+    data: data
+  });
+}
+
+// 修改参数配置
+export function updateConfig(data: ConfigForm) {
+  return request({
+    url: '/system/config',
+    method: 'put',
+    data: data
+  });
+}
+
+// 修改参数配置
+export function updateConfigByKey(key: string, value: any) {
+  return request({
+    url: '/system/config/updateByKey',
+    method: 'put',
+    data: {
+      configKey: key,
+      configValue: value
+    }
+  });
+}
+
+// 删除参数配置
+export function delConfig(configId: string | number | Array<string | number>) {
+  return request({
+    url: '/system/config/' + configId,
+    method: 'delete'
+  });
+}
+
+// 刷新参数缓存
+export function refreshCache() {
+  return request({
+    url: '/system/config/refreshCache',
+    method: 'delete'
+  });
+}

+ 23 - 0
src/api/system/config/types.ts

@@ -0,0 +1,23 @@
+export interface ConfigVO extends BaseEntity {
+  configId: number | string;
+  configName: string;
+  configKey: string;
+  configValue: string;
+  configType: string;
+  remark: string;
+}
+
+export interface ConfigForm {
+  configId: number | string | undefined;
+  configName: string;
+  configKey: string;
+  configValue: string;
+  configType: string;
+  remark: string;
+}
+
+export interface ConfigQuery extends PageQuery {
+  configName: string;
+  configKey: string;
+  configType: string;
+}

+ 73 - 0
src/api/system/dept/index.ts

@@ -0,0 +1,73 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { DeptForm, DeptQuery, DeptTreeVO, DeptVO } from './types';
+
+// 查询部门列表
+export const listDept = (query?: DeptQuery) => {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 通过deptIds查询部门
+ * @param deptIds
+ */
+export const optionSelect = (deptIds: (number | string)[]): AxiosPromise<DeptVO[]> => {
+  return request({
+    url: '/system/dept/optionselect?deptIds=' + deptIds,
+    method: 'get'
+  });
+};
+
+// 查询部门列表(排除节点)
+export const listDeptExcludeChild = (deptId: string | number): AxiosPromise<DeptVO[]> => {
+  return request({
+    url: '/system/dept/list/exclude/' + deptId,
+    method: 'get'
+  });
+};
+
+// 查询部门详细
+export const getDept = (deptId: string | number): AxiosPromise<DeptVO> => {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'get'
+  });
+};
+
+// 查询部门下拉树结构
+export const treeselect = (): AxiosPromise<DeptTreeVO[]> => {
+  return request({
+    url: '/system/dept/treeselect',
+    method: 'get'
+  });
+};
+
+// 新增部门
+export const addDept = (data: DeptForm) => {
+  return request({
+    url: '/system/dept',
+    method: 'post',
+    data: data
+  });
+};
+
+// 修改部门
+export const updateDept = (data: DeptForm) => {
+  return request({
+    url: '/system/dept',
+    method: 'put',
+    data: data
+  });
+};
+
+// 删除部门
+export const delDept = (deptId: number | string) => {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'delete'
+  });
+};

+ 60 - 0
src/api/system/dept/types.ts

@@ -0,0 +1,60 @@
+/**
+ * 部门查询参数
+ */
+export interface DeptQuery extends PageQuery {
+  deptName?: string;
+  deptCategory?: string;
+  status?: number;
+}
+
+/**
+ * 部门类型
+ */
+export interface DeptVO extends BaseEntity {
+  id: number | string;
+  parentName: string;
+  parentId: number | string;
+  children: DeptVO[];
+  deptId: number | string;
+  deptName: string;
+  deptCategory: string;
+  orderNum: number;
+  leader: string;
+  phone: string;
+  email: string;
+  status: string;
+  delFlag: string;
+  ancestors: string;
+  menuId: string | number;
+}
+
+/**
+ * 部门类型
+ */
+export interface DeptTreeVO extends BaseEntity {
+  id: number | string;
+  label: string;
+  parentId: number | string;
+  weight: number;
+  children: DeptTreeVO[];
+  disabled: boolean;
+}
+
+/**
+ * 部门表单类型
+ */
+export interface DeptForm {
+  parentName?: string;
+  parentId?: number | string;
+  children?: DeptForm[];
+  deptId?: number | string;
+  deptName?: string;
+  deptCategory?: string;
+  orderNum?: number;
+  leader?: string;
+  phone?: string;
+  email?: string;
+  status?: string;
+  delFlag?: string;
+  ancestors?: string;
+}

+ 53 - 0
src/api/system/dict/data/index.ts

@@ -0,0 +1,53 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { DictDataForm, DictDataQuery, DictDataVO } from './types';
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType: string): AxiosPromise<DictDataVO[]> {
+  return request({
+    url: '/system/dict/data/type/' + dictType,
+    method: 'get'
+  });
+}
+
+// 查询字典数据列表
+export function listData(query: DictDataQuery): AxiosPromise<DictDataVO[]> {
+  return request({
+    url: '/system/dict/data/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 查询字典数据详细
+export function getData(dictCode: string | number): AxiosPromise<DictDataVO> {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'get'
+  });
+}
+
+// 新增字典数据
+export function addData(data: DictDataForm) {
+  return request({
+    url: '/system/dict/data',
+    method: 'post',
+    data: data
+  });
+}
+
+// 修改字典数据
+export function updateData(data: DictDataForm) {
+  return request({
+    url: '/system/dict/data',
+    method: 'put',
+    data: data
+  });
+}
+
+// 删除字典数据
+export function delData(dictCode: string | number | Array<string | number>) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'delete'
+  });
+}

+ 26 - 0
src/api/system/dict/data/types.ts

@@ -0,0 +1,26 @@
+export interface DictDataQuery extends PageQuery {
+  dictName: string;
+  dictType: string;
+  dictLabel: string;
+}
+
+export interface DictDataVO extends BaseEntity {
+  dictCode: string;
+  dictLabel: string;
+  dictValue: string;
+  cssClass: string;
+  listClass: ElTagType;
+  dictSort: number;
+  remark: string;
+}
+
+export interface DictDataForm {
+  dictType?: string;
+  dictCode: string | undefined;
+  dictLabel: string;
+  dictValue: string;
+  cssClass: string;
+  listClass: ElTagType;
+  dictSort: number;
+  remark: string;
+}

+ 62 - 0
src/api/system/dict/type/index.ts

@@ -0,0 +1,62 @@
+import request from '@/utils/request';
+import { DictTypeForm, DictTypeVO, DictTypeQuery } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询字典类型列表
+export function listType(query: DictTypeQuery): AxiosPromise<DictTypeVO[]> {
+  return request({
+    url: '/system/dict/type/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 查询字典类型详细
+export function getType(dictId: number | string): AxiosPromise<DictTypeVO> {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'get'
+  });
+}
+
+// 新增字典类型
+export function addType(data: DictTypeForm) {
+  return request({
+    url: '/system/dict/type',
+    method: 'post',
+    data: data
+  });
+}
+
+// 修改字典类型
+export function updateType(data: DictTypeForm) {
+  return request({
+    url: '/system/dict/type',
+    method: 'put',
+    data: data
+  });
+}
+
+// 删除字典类型
+export function delType(dictId: string | number | Array<string | number>) {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'delete'
+  });
+}
+
+// 刷新字典缓存
+export function refreshCache() {
+  return request({
+    url: '/system/dict/type/refreshCache',
+    method: 'delete'
+  });
+}
+
+// 获取字典选择框列表
+export function optionselect(): AxiosPromise<DictTypeVO[]> {
+  return request({
+    url: '/system/dict/type/optionselect',
+    method: 'get'
+  });
+}

+ 18 - 0
src/api/system/dict/type/types.ts

@@ -0,0 +1,18 @@
+export interface DictTypeVO extends BaseEntity {
+  dictId: number | string;
+  dictName: string;
+  dictType: string;
+  remark: string;
+}
+
+export interface DictTypeForm {
+  dictId: number | string | undefined;
+  dictName: string;
+  dictType: string;
+  remark: string;
+}
+
+export interface DictTypeQuery extends PageQuery {
+  dictName: string;
+  dictType: string;
+}

+ 63 - 0
src/api/system/functionMenu/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { FunctionMenuVO, FunctionMenuForm, FunctionMenuQuery } from '@/api/system/functionMenu/types';
+
+/**
+ * 查询功能菜单列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listFunctionMenu = (query?: FunctionMenuQuery): AxiosPromise<FunctionMenuVO[]> => {
+  return request({
+    url: '/system/functionMenu/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询功能菜单详细
+ * @param id
+ */
+export const getFunctionMenu = (id: string | number): AxiosPromise<FunctionMenuVO> => {
+  return request({
+    url: '/system/functionMenu/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增功能菜单
+ * @param data
+ */
+export const addFunctionMenu = (data: FunctionMenuForm) => {
+  return request({
+    url: '/system/functionMenu',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改功能菜单
+ * @param data
+ */
+export const updateFunctionMenu = (data: FunctionMenuForm) => {
+  return request({
+    url: '/system/functionMenu',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除功能菜单
+ * @param id
+ */
+export const delFunctionMenu = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/functionMenu/' + id,
+    method: 'delete'
+  });
+};

+ 156 - 0
src/api/system/functionMenu/types.ts

@@ -0,0 +1,156 @@
+export interface FunctionMenuVO {
+  /**
+   * 主键id
+   */
+  id: string | number;
+
+  /**
+   * 菜单名称
+   */
+  menuName: string;
+
+  /**
+   * 显示顺序
+   */
+  orderNum: number;
+
+  /**
+   * 路由地址
+   */
+  path: string;
+
+  /**
+   * 组件路径
+   */
+  component: string;
+
+  /**
+   * 是否为外链(0是 1否)
+   */
+  isFrame: number;
+
+  /**
+   * 显示状态(0显示 1隐藏)
+   */
+  visible: string;
+
+  /**
+   * 菜单状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 菜单图标
+   */
+  icon: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface FunctionMenuForm extends BaseEntity {
+  /**
+   * 主键id
+   */
+  id?: string | number;
+
+  /**
+   * 菜单名称
+   */
+  menuName?: string;
+
+  /**
+   * 显示顺序
+   */
+  orderNum?: number;
+
+  /**
+   * 路由地址
+   */
+  path?: string;
+
+  /**
+   * 组件路径
+   */
+  component?: string;
+
+  /**
+   * 是否为外链(0是 1否)
+   */
+  isFrame?: number;
+
+  /**
+   * 显示状态(0显示 1隐藏)
+   */
+  visible?: string;
+
+  /**
+   * 菜单状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 菜单图标
+   */
+  icon?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface FunctionMenuQuery extends PageQuery {
+
+  /**
+   * 菜单名称
+   */
+  menuName?: string;
+
+  /**
+   * 显示顺序
+   */
+  orderNum?: number;
+
+  /**
+   * 路由地址
+   */
+  path?: string;
+
+  /**
+   * 组件路径
+   */
+  component?: string;
+
+  /**
+   * 是否为外链(0是 1否)
+   */
+  isFrame?: number;
+
+  /**
+   * 显示状态(0显示 1隐藏)
+   */
+  visible?: string;
+
+  /**
+   * 菜单状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 菜单图标
+   */
+  icon?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/system/group/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { GroupVO, GroupForm, GroupQuery } from '@/api/system/group/types';
+
+/**
+ * 查询分组列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listGroup = (query?: GroupQuery): AxiosPromise<GroupVO[]> => {
+  return request({
+    url: '/system/group/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询分组详细
+ * @param id
+ */
+export const getGroup = (id: string | number): AxiosPromise<GroupVO> => {
+  return request({
+    url: '/system/group/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增分组
+ * @param data
+ */
+export const addGroup = (data: GroupForm) => {
+  return request({
+    url: '/system/group',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改分组
+ * @param data
+ */
+export const updateGroup = (data: GroupForm) => {
+  return request({
+    url: '/system/group',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除分组
+ * @param id
+ */
+export const delGroup = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/group/' + id,
+    method: 'delete'
+  });
+};

+ 96 - 0
src/api/system/group/types.ts

@@ -0,0 +1,96 @@
+export interface GroupVO {
+  /**
+   * 角色ID
+   */
+  id: string | number;
+
+  /**
+   * 角色名称
+   */
+  groupName: string;
+
+  /**
+   * 显示顺序
+   */
+  sort: number;
+
+  /**
+   * 角色状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+  /**
+   * 角色分组类型(代理分组,商户分组)
+   */
+  groupType: string;
+
+}
+
+export interface GroupForm extends BaseEntity {
+  /**
+   * 角色ID
+   */
+  id?: string | number;
+
+  /**
+   * 角色名称
+   */
+  groupName?: string;
+
+  /**
+   * 显示顺序
+   */
+  sort?: number;
+
+  /**
+   * 角色状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 角色分组类型(代理分组,商户分组)
+   */
+  groupType?: string;
+
+}
+
+export interface GroupQuery extends PageQuery {
+
+  /**
+   * 角色名称
+   */
+  groupName?: string;
+
+  /**
+   * 显示顺序
+   */
+  sort?: number;
+
+  /**
+   * 角色状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 角色分组类型(代理分组,商户分组)
+   */
+  groupType?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/system/groupFunctionMenu/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { GroupFunctionMenuVO, GroupFunctionMenuForm, GroupFunctionMenuQuery } from '@/api/system/groupFunctionMenu/types';
+
+/**
+ * 查询组和功能菜单关联列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listGroupFunctionMenu = (query?: GroupFunctionMenuQuery): AxiosPromise<GroupFunctionMenuVO[]> => {
+  return request({
+    url: '/system/groupFunctionMenu/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询组和功能菜单关联详细
+ * @param groupId
+ */
+export const getGroupFunctionMenu = (groupId: string | number): AxiosPromise<GroupFunctionMenuVO> => {
+  return request({
+    url: '/system/groupFunctionMenu/' + groupId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增组和功能菜单关联
+ * @param data
+ */
+export const addGroupFunctionMenu = (data: GroupFunctionMenuForm) => {
+  return request({
+    url: '/system/groupFunctionMenu',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改组和功能菜单关联
+ * @param data
+ */
+export const updateGroupFunctionMenu = (data: GroupFunctionMenuForm) => {
+  return request({
+    url: '/system/groupFunctionMenu',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除组和功能菜单关联
+ * @param groupId
+ */
+export const delGroupFunctionMenu = (groupId: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/groupFunctionMenu/' + groupId,
+    method: 'delete'
+  });
+};

+ 36 - 0
src/api/system/groupFunctionMenu/types.ts

@@ -0,0 +1,36 @@
+export interface GroupFunctionMenuVO {
+  /**
+   * 组ID
+   */
+  groupId: string | number;
+
+  /**
+   * 功能菜单ID
+   */
+  functionMenuId: string | number;
+
+}
+
+export interface GroupFunctionMenuForm extends BaseEntity {
+  /**
+   * 组ID
+   */
+  groupId?: string | number;
+
+  /**
+   * 功能菜单ID
+   */
+  functionMenuId?: string | number;
+
+}
+
+export interface GroupFunctionMenuQuery extends PageQuery {
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 78 - 0
src/api/system/menu/index.ts

@@ -0,0 +1,78 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MenuQuery, MenuVO, MenuForm, MenuTreeOption, RoleMenuTree } from './types';
+
+// 查询菜单列表
+export const listMenu = (query?: MenuQuery): AxiosPromise<MenuVO[]> => {
+  return request({
+    url: '/system/menu/list',
+    method: 'get',
+    params: query
+  });
+};
+
+// 查询菜单详细
+export const getMenu = (menuId: string | number): AxiosPromise<MenuVO> => {
+  return request({
+    url: '/system/menu/' + menuId,
+    method: 'get'
+  });
+};
+
+// 查询菜单下拉树结构
+export const treeselect = (): AxiosPromise<MenuTreeOption[]> => {
+  return request({
+    url: '/system/menu/treeselect',
+    method: 'get'
+  });
+};
+
+// 根据角色ID查询菜单下拉树结构
+export const roleMenuTreeselect = (roleId: string | number): AxiosPromise<RoleMenuTree> => {
+  return request({
+    url: '/system/menu/roleMenuTreeselect/' + roleId,
+    method: 'get'
+  });
+};
+
+// 根据角色ID查询菜单下拉树结构
+export const tenantPackageMenuTreeselect = (packageId: string | number): AxiosPromise<RoleMenuTree> => {
+  return request({
+    url: '/system/menu/tenantPackageMenuTreeselect/' + packageId,
+    method: 'get'
+  });
+};
+
+// 新增菜单
+export const addMenu = (data: MenuForm) => {
+  return request({
+    url: '/system/menu',
+    method: 'post',
+    data: data
+  });
+};
+
+// 修改菜单
+export const updateMenu = (data: MenuForm) => {
+  return request({
+    url: '/system/menu',
+    method: 'put',
+    data: data
+  });
+};
+
+// 删除菜单
+export const delMenu = (menuId: string | number) => {
+  return request({
+    url: '/system/menu/' + menuId,
+    method: 'delete'
+  });
+};
+
+// 级联删除菜单
+export const cascadeDelMenu = (menuIds: Array<string | number>) => {
+  return request({
+    url: '/system/menu/cascade/' + menuIds,
+    method: 'delete'
+  });
+};

+ 69 - 0
src/api/system/menu/types.ts

@@ -0,0 +1,69 @@
+import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
+
+/**
+ * 菜单树形结构类型
+ */
+export interface MenuTreeOption {
+  id: string | number;
+  label: string;
+  parentId: string | number;
+  weight: number;
+  children?: MenuTreeOption[];
+}
+
+export interface RoleMenuTree {
+  menus: MenuTreeOption[];
+  checkedKeys: string[];
+}
+
+/**
+ * 菜单查询参数类型
+ */
+export interface MenuQuery {
+  keywords?: string;
+  menuName?: string;
+  status?: string;
+}
+
+/**
+ * 菜单视图对象类型
+ */
+export interface MenuVO extends BaseEntity {
+  parentName: string;
+  parentId: string | number;
+  children: MenuVO[];
+  menuId: string | number;
+  menuName: string;
+  orderNum: number;
+  path: string;
+  component: string;
+  queryParam: string;
+  isFrame: string;
+  isCache: string;
+  menuType: MenuTypeEnum;
+  visible: string;
+  status: string;
+  icon: string;
+  remark: string;
+}
+
+export interface MenuForm {
+  parentName?: string;
+  parentId?: string | number;
+  children?: MenuForm[];
+  menuId?: string | number;
+  menuName: string;
+  orderNum: number;
+  path: string;
+  component?: string;
+  queryParam?: string;
+  isFrame?: string;
+  isCache?: string;
+  menuType?: MenuTypeEnum;
+  visible?: string;
+  status?: string;
+  icon?: string;
+  remark?: string;
+  query?: string;
+  perms?: string;
+}

+ 160 - 0
src/api/system/merchantGroup/index.ts

@@ -0,0 +1,160 @@
+import { UserVO } from '@/api/system/user/types';
+import { UserQuery } from '@/api/system/user/types';
+import { AxiosPromise } from 'axios';
+import { RoleQuery, RoleVO, RoleDeptTree } from './types';
+import request from '@/utils/request';
+
+export const listRole = (query: RoleQuery): AxiosPromise<RoleVO[]> => {
+  return request({
+    url: '/system/merchantGroup/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 通过roleIds查询角色
+ * @param roleIds
+ */
+export const optionSelect = (roleIds: (number | string)[]): AxiosPromise<RoleVO[]> => {
+  return request({
+    url: '/system/merchantGroup/optionselect?roleIds=' + roleIds,
+    method: 'get'
+  });
+};
+
+/**
+ * 查询角色详细
+ */
+export const getRole = (roleId: string | number): AxiosPromise<RoleVO> => {
+  return request({
+    url: '/system/merchantGroup/' + roleId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增角色
+ */
+export const addRole = (data: any) => {
+  return request({
+    url: '/system/merchantGroup',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改角色
+ * @param data
+ */
+export const updateRole = (data: any) => {
+  return request({
+    url: '/system/merchantGroup',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 角色数据权限
+ */
+export const dataScope = (data: any) => {
+  return request({
+    url: '/system/merchantGroup/dataScope',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 角色状态修改
+ */
+export const changeRoleStatus = (roleId: string | number, status: string) => {
+  const data = {
+    roleId,
+    status
+  };
+  return request({
+    url: '/system/merchantGroup/changeStatus',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除角色
+ */
+export const delRole = (roleId: Array<string | number> | string | number) => {
+  return request({
+    url: '/system/merchantGroup/' + roleId,
+    method: 'delete'
+  });
+};
+
+/**
+ * 查询角色已授权用户列表
+ */
+export const allocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => {
+  return request({
+    url: '/system/merchantGroup/authUser/allocatedList',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询角色未授权用户列表
+ */
+export const unallocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => {
+  return request({
+    url: '/system/merchantGroup/authUser/unallocatedList',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 取消用户授权角色
+ */
+export const authUserCancel = (data: any) => {
+  return request({
+    url: '/system/merchantGroup/authUser/cancel',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 批量取消用户授权角色
+ */
+export const authUserCancelAll = (data: any) => {
+  return request({
+    url: '/system/merchantGroup/authUser/cancelAll',
+    method: 'put',
+    params: data
+  });
+};
+
+/**
+ * 授权用户选择
+ */
+export const authUserSelectAll = (data: any) => {
+  return request({
+    url: '/system/merchantGroup/authUser/selectAll',
+    method: 'put',
+    params: data
+  });
+};
+// 根据角色ID查询部门树结构
+export const deptTreeSelect = (roleId: string | number): AxiosPromise<RoleDeptTree> => {
+  return request({
+    url: '/system/merchantGroup/deptTree/' + roleId,
+    method: 'get'
+  });
+};
+
+export default {
+  optionSelect,
+  listRole
+};

+ 52 - 0
src/api/system/merchantGroup/types.ts

@@ -0,0 +1,52 @@
+/**
+ * 菜单树形结构类型
+ */
+export interface DeptTreeOption {
+  id: string;
+  label: string;
+  parentId: string;
+  weight: number;
+  children?: DeptTreeOption[];
+}
+
+export interface RoleDeptTree {
+  checkedKeys: string[];
+  depts: DeptTreeOption[];
+}
+
+export interface RoleVO extends BaseEntity {
+  roleId: string | number;
+  roleName: string;
+  roleKey: string;
+  roleSort: number;
+  dataScope: string;
+  menuCheckStrictly: boolean;
+  deptCheckStrictly: boolean;
+  status: string;
+  delFlag: string;
+  remark?: any;
+  flag: boolean;
+  menuIds?: Array<string | number>;
+  deptIds?: Array<string | number>;
+  admin: boolean;
+}
+
+export interface RoleQuery extends PageQuery {
+  roleName: string;
+  roleKey: string;
+  status: string;
+}
+
+export interface RoleForm {
+  roleName: string;
+  roleKey: string;
+  roleSort: number;
+  status: string;
+  menuCheckStrictly: boolean;
+  deptCheckStrictly: boolean;
+  remark: string;
+  dataScope?: string;
+  roleId: string | undefined;
+  menuIds: Array<string | number>;
+  deptIds: Array<string | number>;
+}

+ 45 - 0
src/api/system/notice/index.ts

@@ -0,0 +1,45 @@
+import request from '@/utils/request';
+import { NoticeForm, NoticeQuery, NoticeVO } from './types';
+import { AxiosPromise } from 'axios';
+// 查询公告列表
+export function listNotice(query: NoticeQuery): AxiosPromise<NoticeVO[]> {
+  return request({
+    url: '/system/notice/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 查询公告详细
+export function getNotice(noticeId: string | number): AxiosPromise<NoticeVO> {
+  return request({
+    url: '/system/notice/' + noticeId,
+    method: 'get'
+  });
+}
+
+// 新增公告
+export function addNotice(data: NoticeForm) {
+  return request({
+    url: '/system/notice',
+    method: 'post',
+    data: data
+  });
+}
+
+// 修改公告
+export function updateNotice(data: NoticeForm) {
+  return request({
+    url: '/system/notice',
+    method: 'put',
+    data: data
+  });
+}
+
+// 删除公告
+export function delNotice(noticeId: string | number | Array<string | number>) {
+  return request({
+    url: '/system/notice/' + noticeId,
+    method: 'delete'
+  });
+}

+ 26 - 0
src/api/system/notice/types.ts

@@ -0,0 +1,26 @@
+export interface NoticeVO extends BaseEntity {
+  noticeId: number;
+  noticeTitle: string;
+  noticeType: string;
+  noticeContent: string;
+  status: string;
+  remark: string;
+  createByName: string;
+}
+
+export interface NoticeQuery extends PageQuery {
+  noticeTitle: string;
+  createByName: string;
+  status: string;
+  noticeType: string;
+}
+
+export interface NoticeForm {
+  noticeId: number | string | undefined;
+  noticeTitle: string;
+  noticeType: string;
+  noticeContent: string;
+  status: string;
+  remark: string;
+  createByName: string;
+}

+ 28 - 0
src/api/system/oss/index.ts

@@ -0,0 +1,28 @@
+import request from '@/utils/request';
+import { OssQuery, OssVO } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询OSS对象存储列表
+export function listOss(query: OssQuery): AxiosPromise<OssVO[]> {
+  return request({
+    url: '/resource/oss/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 查询OSS对象基于id串
+export function listByIds(ossId: string | number): AxiosPromise<OssVO[]> {
+  return request({
+    url: '/resource/oss/listByIds/' + ossId,
+    method: 'get'
+  });
+}
+
+// 删除OSS对象存储
+export function delOss(ossId: string | number | Array<string | number>) {
+  return request({
+    url: '/resource/oss/' + ossId,
+    method: 'delete'
+  });
+}

+ 22 - 0
src/api/system/oss/types.ts

@@ -0,0 +1,22 @@
+export interface OssVO extends BaseEntity {
+  ossId: string | number;
+  fileName: string;
+  originalName: string;
+  fileSuffix: string;
+  url: string;
+  createByName: string;
+  service: string;
+}
+
+export interface OssQuery extends PageQuery {
+  fileName: string;
+  originalName: string;
+  fileSuffix: string;
+  createTime: string;
+  service: string;
+  orderByColumn: string;
+  isAsc: string;
+}
+export interface OssForm {
+  file: undefined | string;
+}

+ 60 - 0
src/api/system/ossConfig/index.ts

@@ -0,0 +1,60 @@
+import request from '@/utils/request';
+import { OssConfigForm, OssConfigQuery, OssConfigVO } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询对象存储配置列表
+export function listOssConfig(query: OssConfigQuery): AxiosPromise<OssConfigVO[]> {
+  return request({
+    url: '/resource/oss/config/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 查询对象存储配置详细
+export function getOssConfig(ossConfigId: string | number): AxiosPromise<OssConfigVO> {
+  return request({
+    url: '/resource/oss/config/' + ossConfigId,
+    method: 'get'
+  });
+}
+
+// 新增对象存储配置
+export function addOssConfig(data: OssConfigForm) {
+  return request({
+    url: '/resource/oss/config',
+    method: 'post',
+    data: data
+  });
+}
+
+// 修改对象存储配置
+export function updateOssConfig(data: OssConfigForm) {
+  return request({
+    url: '/resource/oss/config',
+    method: 'put',
+    data: data
+  });
+}
+
+// 删除对象存储配置
+export function delOssConfig(ossConfigId: string | number | Array<string | number>) {
+  return request({
+    url: '/resource/oss/config/' + ossConfigId,
+    method: 'delete'
+  });
+}
+
+// 对象存储状态修改
+export function changeOssConfigStatus(ossConfigId: string | number, status: string, configKey: string) {
+  const data = {
+    ossConfigId,
+    status,
+    configKey
+  };
+  return request({
+    url: '/resource/oss/config/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 38 - 0
src/api/system/ossConfig/types.ts

@@ -0,0 +1,38 @@
+export interface OssConfigVO extends BaseEntity {
+  ossConfigId: number | string;
+  configKey: string;
+  accessKey: string;
+  secretKey: string;
+  bucketName: string;
+  prefix: string;
+  endpoint: string;
+  domain: string;
+  isHttps: string;
+  region: string;
+  status: string;
+  ext1: string;
+  remark: string;
+  accessPolicy: string;
+}
+
+export interface OssConfigQuery extends PageQuery {
+  configKey: string;
+  bucketName: string;
+  status: string;
+}
+
+export interface OssConfigForm {
+  ossConfigId: string | number | undefined;
+  configKey: string;
+  accessKey: string;
+  secretKey: string;
+  bucketName: string;
+  prefix: string;
+  endpoint: string;
+  domain: string;
+  isHttps: string;
+  accessPolicy: string;
+  region: string;
+  status: string;
+  remark: string;
+}

+ 63 - 0
src/api/system/package/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { PackageVO, PackageForm, PackageQuery } from '@/api/system/package/types';
+
+/**
+ * 查询品牌套餐列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listPackage = (query?: PackageQuery): AxiosPromise<PackageVO[]> => {
+  return request({
+    url: '/system/package/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询品牌套餐详细
+ * @param id
+ */
+export const getPackage = (id: string | number): AxiosPromise<PackageVO> => {
+  return request({
+    url: '/system/package/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增品牌套餐
+ * @param data
+ */
+export const addPackage = (data: PackageForm) => {
+  return request({
+    url: '/system/package',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改品牌套餐
+ * @param data
+ */
+export const updatePackage = (data: PackageForm) => {
+  return request({
+    url: '/system/package',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除品牌套餐
+ * @param id
+ */
+export const delPackage = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/package/' + id,
+    method: 'delete'
+  });
+};

+ 136 - 0
src/api/system/package/types.ts

@@ -0,0 +1,136 @@
+export interface PackageVO {
+  /**
+   * 套餐id
+   */
+  id: string | number;
+
+  /**
+   * 套餐名称
+   */
+  packageName: string;
+
+  /**
+   * 日期单位:1年 2月 3日
+   */
+  dateUnit: string;
+
+  /**
+   * 日期值
+   */
+  dateValue: number;
+
+  /**
+   * 天数
+   */
+  dayValue: number;
+
+  /**
+   * 门店数量
+   */
+  storeNum: number;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+}
+
+export interface PackageForm extends BaseEntity {
+  /**
+   * 套餐id
+   */
+  id?: string | number;
+
+  /**
+   * 套餐名称
+   */
+  packageName?: string;
+
+  /**
+   * 日期单位:1年 2月 3日
+   */
+  dateUnit?: string;
+
+  /**
+   * 日期值
+   */
+  dateValue?: number;
+
+  /**
+   * 天数
+   */
+  dayValue?: number;
+
+  /**
+   * 门店数量
+   */
+  storeNum?: number;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+}
+
+export interface PackageQuery extends PageQuery {
+
+  /**
+   * 套餐id
+   */
+  id?: string | number;
+
+  /**
+   * 套餐名称
+   */
+  packageName?: string;
+
+  /**
+   * 日期单位:1年 2月 3日
+   */
+  dateUnit?: string;
+
+  /**
+   * 日期值
+   */
+  dateValue?: number;
+
+  /**
+   * 天数
+   */
+  dayValue?: number;
+
+  /**
+   * 门店数量
+   */
+  storeNum?: number;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 58 - 0
src/api/system/post/index.ts

@@ -0,0 +1,58 @@
+import request from '@/utils/request';
+import { PostForm, PostQuery, PostVO } from './types';
+import { AxiosPromise } from 'axios';
+
+// 查询岗位列表
+export function listPost(query: PostQuery): AxiosPromise<PostVO[]> {
+  return request({
+    url: '/system/post/list',
+    method: 'get',
+    params: query
+  });
+}
+
+// 查询岗位详细
+export function getPost(postId: string | number): AxiosPromise<PostVO> {
+  return request({
+    url: '/system/post/' + postId,
+    method: 'get'
+  });
+}
+
+// 获取岗位选择框列表
+export function optionselect(deptId?: number | string, postIds?: (number | string)[]): AxiosPromise<PostVO[]> {
+  return request({
+    url: '/system/post/optionselect',
+    method: 'get',
+    params: {
+      postIds: postIds,
+      deptId: deptId
+    }
+  });
+}
+
+// 新增岗位
+export function addPost(data: PostForm) {
+  return request({
+    url: '/system/post',
+    method: 'post',
+    data: data
+  });
+}
+
+// 修改岗位
+export function updatePost(data: PostForm) {
+  return request({
+    url: '/system/post',
+    method: 'put',
+    data: data
+  });
+}
+
+// 删除岗位
+export function delPost(postId: string | number | (string | number)[]) {
+  return request({
+    url: '/system/post/' + postId,
+    method: 'delete'
+  });
+}

+ 31 - 0
src/api/system/post/types.ts

@@ -0,0 +1,31 @@
+export interface PostVO extends BaseEntity {
+  postId: number | string;
+  deptId: number | string;
+  postCode: string;
+  postName: string;
+  postCategory: string;
+  deptName: string;
+  postSort: number;
+  status: string;
+  remark: string;
+}
+
+export interface PostForm {
+  postId: number | string | undefined;
+  deptId: number | string | undefined;
+  postCode: string;
+  postName: string;
+  postCategory: string;
+  postSort: number;
+  status: string;
+  remark: string;
+}
+
+export interface PostQuery extends PageQuery {
+  deptId: number | string;
+  belongDeptId: number | string;
+  postCode: string;
+  postName: string;
+  postCategory: string;
+  status: string;
+}

+ 160 - 0
src/api/system/role/index.ts

@@ -0,0 +1,160 @@
+import { UserVO } from '@/api/system/user/types';
+import { UserQuery } from '@/api/system/user/types';
+import { AxiosPromise } from 'axios';
+import { RoleQuery, RoleVO, RoleDeptTree } from './types';
+import request from '@/utils/request';
+
+export const listRole = (query: RoleQuery): AxiosPromise<RoleVO[]> => {
+  return request({
+    url: '/system/role/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 通过roleIds查询角色
+ * @param roleIds
+ */
+export const optionSelect = (roleIds: (number | string)[]): AxiosPromise<RoleVO[]> => {
+  return request({
+    url: '/system/role/optionselect?roleIds=' + roleIds,
+    method: 'get'
+  });
+};
+
+/**
+ * 查询角色详细
+ */
+export const getRole = (roleId: string | number): AxiosPromise<RoleVO> => {
+  return request({
+    url: '/system/role/' + roleId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增角色
+ */
+export const addRole = (data: any) => {
+  return request({
+    url: '/system/role',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改角色
+ * @param data
+ */
+export const updateRole = (data: any) => {
+  return request({
+    url: '/system/role',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 角色数据权限
+ */
+export const dataScope = (data: any) => {
+  return request({
+    url: '/system/role/dataScope',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 角色状态修改
+ */
+export const changeRoleStatus = (roleId: string | number, status: string) => {
+  const data = {
+    roleId,
+    status
+  };
+  return request({
+    url: '/system/role/changeStatus',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除角色
+ */
+export const delRole = (roleId: Array<string | number> | string | number) => {
+  return request({
+    url: '/system/role/' + roleId,
+    method: 'delete'
+  });
+};
+
+/**
+ * 查询角色已授权用户列表
+ */
+export const allocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => {
+  return request({
+    url: '/system/role/authUser/allocatedList',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询角色未授权用户列表
+ */
+export const unallocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => {
+  return request({
+    url: '/system/role/authUser/unallocatedList',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 取消用户授权角色
+ */
+export const authUserCancel = (data: any) => {
+  return request({
+    url: '/system/role/authUser/cancel',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 批量取消用户授权角色
+ */
+export const authUserCancelAll = (data: any) => {
+  return request({
+    url: '/system/role/authUser/cancelAll',
+    method: 'put',
+    params: data
+  });
+};
+
+/**
+ * 授权用户选择
+ */
+export const authUserSelectAll = (data: any) => {
+  return request({
+    url: '/system/role/authUser/selectAll',
+    method: 'put',
+    params: data
+  });
+};
+// 根据角色ID查询部门树结构
+export const deptTreeSelect = (roleId: string | number): AxiosPromise<RoleDeptTree> => {
+  return request({
+    url: '/system/role/deptTree/' + roleId,
+    method: 'get'
+  });
+};
+
+export default {
+  optionSelect,
+  listRole
+};

+ 52 - 0
src/api/system/role/types.ts

@@ -0,0 +1,52 @@
+/**
+ * 菜单树形结构类型
+ */
+export interface DeptTreeOption {
+  id: string;
+  label: string;
+  parentId: string;
+  weight: number;
+  children?: DeptTreeOption[];
+}
+
+export interface RoleDeptTree {
+  checkedKeys: string[];
+  depts: DeptTreeOption[];
+}
+
+export interface RoleVO extends BaseEntity {
+  roleId: string | number;
+  roleName: string;
+  roleKey: string;
+  roleSort: number;
+  dataScope: string;
+  menuCheckStrictly: boolean;
+  deptCheckStrictly: boolean;
+  status: string;
+  delFlag: string;
+  remark?: any;
+  flag: boolean;
+  menuIds?: Array<string | number>;
+  deptIds?: Array<string | number>;
+  admin: boolean;
+}
+
+export interface RoleQuery extends PageQuery {
+  roleName: string;
+  roleKey: string;
+  status: string;
+}
+
+export interface RoleForm {
+  roleName: string;
+  roleKey: string;
+  roleSort: number;
+  status: string;
+  menuCheckStrictly: boolean;
+  deptCheckStrictly: boolean;
+  remark: string;
+  dataScope?: string;
+  roleId: string | undefined;
+  menuIds: Array<string | number>;
+  deptIds: Array<string | number>;
+}

+ 63 - 0
src/api/system/shopBusinessHours/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ShopBusinessHoursVO, ShopBusinessHoursForm, ShopBusinessHoursQuery } from '@/api/system/shopBusinessHours/types';
+
+/**
+ * 查询门店营业时间列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listShopBusinessHours = (query?: ShopBusinessHoursQuery): AxiosPromise<ShopBusinessHoursVO[]> => {
+  return request({
+    url: '/system/shopBusinessHours/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询门店营业时间详细
+ * @param id
+ */
+export const getShopBusinessHours = (id: string | number): AxiosPromise<ShopBusinessHoursVO> => {
+  return request({
+    url: '/system/shopBusinessHours/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增门店营业时间
+ * @param data
+ */
+export const addShopBusinessHours = (data: ShopBusinessHoursForm) => {
+  return request({
+    url: '/system/shopBusinessHours',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改门店营业时间
+ * @param data
+ */
+export const updateShopBusinessHours = (data: ShopBusinessHoursForm) => {
+  return request({
+    url: '/system/shopBusinessHours',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除门店营业时间
+ * @param id
+ */
+export const delShopBusinessHours = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/shopBusinessHours/' + id,
+    method: 'delete'
+  });
+};

+ 96 - 0
src/api/system/shopBusinessHours/types.ts

@@ -0,0 +1,96 @@
+export interface ShopBusinessHoursVO {
+  /**
+   * 主键id
+   */
+  id: string | number;
+
+  /**
+   * 名称
+   */
+  name: string;
+
+  /**
+   * 店铺id
+   */
+  shopId: string | number;
+
+  /**
+   * 开始营业时间
+   */
+  startTime: string;
+
+  /**
+   * 结束营业时间
+   */
+  endTime: string;
+
+}
+
+export interface ShopBusinessHoursForm extends BaseEntity {
+  /**
+   * 主键id
+   */
+  id?: string | number;
+
+  /**
+   * 名称
+   */
+  name?: string;
+
+  /**
+   * 店铺id
+   */
+  shopId?: string | number;
+
+  /**
+   * 开始营业时间
+   */
+  startTime?: string;
+
+  /**
+   * 结束营业时间
+   */
+  endTime?: string;
+
+  /**
+   * 描述
+   */
+  remark?: string;
+
+}
+
+export interface ShopBusinessHoursQuery extends PageQuery {
+
+  /**
+   * 主键id
+   */
+  id?: string | number;
+
+  /**
+   * 名称
+   */
+  name?: string;
+
+  /**
+   * 店铺id
+   */
+  shopId?: string | number;
+
+  /**
+   * 开始营业时间
+   */
+  startTime?: string;
+
+  /**
+   * 结束营业时间
+   */
+  endTime?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 56 - 0
src/api/system/shopManager/index.ts

@@ -0,0 +1,56 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SysShopManagerVO, SysShopManagerQuery } from './types';
+
+/**
+ * 查询门店管理员拓展信息列表
+ */
+export function listShopManager(query?: SysShopManagerQuery): AxiosPromise<SysShopManagerVO[]> {
+  return request({
+    url: '/system/shopManager/list',
+    method: 'get',
+    params: query
+  });
+}
+
+/**
+ * 查询门店管理员拓展信息详细
+ */
+export function getShopManager(userId: string | number): AxiosPromise<SysShopManagerVO> {
+  return request({
+    url: '/system/shopManager/' + userId,
+    method: 'get'
+  });
+}
+
+/**
+ * 新增门店管理员拓展信息
+ */
+export function addShopManager(data: SysShopManagerVO) {
+  return request({
+    url: '/system/shopManager',
+    method: 'post',
+    data: data
+  });
+}
+
+/**
+ * 修改门店管理员拓展信息
+ */
+export function updateShopManager(data: SysShopManagerVO) {
+  return request({
+    url: '/system/shopManager',
+    method: 'put',
+    data: data
+  });
+}
+
+/**
+ * 删除门店管理员拓展信息
+ */
+export function delShopManager(userId: string | number | Array<string | number>) {
+  return request({
+    url: '/system/shopManager/' + userId,
+    method: 'delete'
+  });
+}

+ 128 - 0
src/api/system/shopManager/types.ts

@@ -0,0 +1,128 @@
+// import { BaseEntity } from '@/api/types';
+
+/**
+ * 门店管理员拓展信息对象 sys_shop_manager
+ */
+export interface SysShopManagerVO {
+  /**
+   * 用户id
+   */
+  userId?: number;
+
+  /**
+   * 商户id
+   */
+  merchantId?: string;
+
+  /**
+   * 最后活跃时间
+   */
+  lastActiveTime?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 用户基本信息
+   */
+  userInfo?: {
+    userId?: number;
+    nickName?: string;
+    userName?: string;
+    email?: string;
+    phonenumber?: string;
+    sex?: string;
+    avatar?: string;
+    status?: string;
+    delFlag?: string;
+    loginIp?: string;
+    loginDate?: string;
+    createBy?: string;
+    createTime?: string;
+    updateBy?: string;
+    updateTime?: string;
+    remark?: string;
+  };
+}
+
+/**
+ * 门店管理员拓展信息查询对象 sys_shop_manager
+ */
+export interface SysShopManagerQuery {
+  /**
+   * 用户id
+   */
+  userId?: number;
+
+  /**
+   * 商户id
+   */
+  merchantId?: string;
+
+  /**
+   * 最后活跃时间
+   */
+  lastActiveTime?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+/**
+ * 门店管理员拓展信息表单对象 sys_shop_manager
+ */
+export interface SysShopManagerForm {
+  /**
+   * 用户id
+   */
+  userId?: number;
+
+  /**
+   * 商户id
+   */
+  merchantId?: string;
+
+  /**
+   * 最后活跃时间
+   */
+  lastActiveTime?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}

+ 28 - 0
src/api/system/social/auth.ts

@@ -0,0 +1,28 @@
+import request from '@/utils/request';
+
+// 绑定账号
+export function authBinding(source: string, tenantId: string) {
+  return request({
+    url: '/auth/binding/' + source,
+    method: 'get',
+    params: {
+      tenantId: tenantId,
+      domain: window.location.host
+    }
+  });
+}
+
+// 解绑账号
+export function authUnlock(authId: string) {
+  return request({
+    url: '/auth/unlock/' + authId,
+    method: 'delete'
+  });
+}
+//获取授权列表
+export function getAuthList() {
+  return request({
+    url: '/system/social/list',
+    method: 'get'
+  });
+}

+ 114 - 0
src/api/system/sysAgent/index.ts

@@ -0,0 +1,114 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SysAgentVO, SysAgentForm, SysAgentQuery, SysUserAgentForm } from '@/api/system/sysAgent/types';
+
+/**
+ * 查询代理信息拓展列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSysAgent = (query?: SysAgentQuery): AxiosPromise<SysAgentVO[]> => {
+  return request({
+    url: '/system/agent/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询代理信息拓展详细
+ * @param userId
+ */
+export const getSysAgent = (userId: string | number): AxiosPromise<SysAgentVO> => {
+  return request({
+    url: '/system/agent/' + userId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增代理信息拓展
+ * @param data
+ */
+export const addSysAgent = (data: SysUserAgentForm) => {
+  return request({
+    url: '/system/agent',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改代理信息拓展
+ * @param data
+ */
+export const updateSysAgent = (data: SysUserAgentForm) => {
+  return request({
+    url: '/system/agent',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除代理信息拓展
+ * @param userId
+ */
+export const delSysAgent = (userId: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/agent/' + userId,
+    method: 'delete'
+  });
+};
+
+/**
+ * 批量更新用户状态
+ * @param userIds
+ * @param status
+ */
+export const updateBatchUserStatus = (userIds: (string | number)[], status: string) => {
+  return request({
+    url: '/system/agent/batchChangeStatus',
+    method: 'put',
+    params: {
+      userIds: userIds,
+      status: status
+    }
+  });
+};
+
+/**
+ * 导出代理用户列表
+ * @param query
+ */
+export const exportSysAgent = (query?: SysAgentQuery) => {
+  return request({
+    url: '/system/agent/export',
+    method: 'post',
+    data: query,
+    responseType: 'blob'
+  });
+};
+
+/**
+ * 代理用户密码重置
+ * @param userId 用户ID
+ * @param password 密码
+ */
+export const resetAgentPwd = (userId: string | number, password: string) => {
+  const data = {
+    userId,
+    password
+  };
+  return request({
+    url: '/system/agent/resetPwd',
+    method: 'put',
+    headers: {
+      isEncrypt: true,
+      repeatSubmit: false
+    },
+    data: data
+  });
+};
+

+ 340 - 0
src/api/system/sysAgent/types.ts

@@ -0,0 +1,340 @@
+export interface SysAgentVO {
+  /**
+   * 用户ID
+   */
+  userId: string | number;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 来源渠道
+   */
+  sourceChannel?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 级联选择器数组
+   */
+  codeArr?: string[];
+
+  /**
+   * 用户基本信息
+   */
+  userInfo?: {
+    userId: string | number;
+    tenantId?: string;
+    deptId?: string | number;
+    userName?: string;
+    nickName?: string;
+    userType?: string;
+    email?: string;
+    phonenumber?: string;
+    sex?: string;
+    avatar?: string;
+    status?: string;
+    loginIp?: string;
+    loginDate?: string;
+    remark?: string;
+    createTime?: string;
+    deptName?: string;
+    roles?: any;
+    roleIds?: number[];
+    postIds?: number[];
+    roleId?: number;
+    groupId?: string | number;
+    areaCode?: string;
+    province?: string;
+    city?: string;
+    district?: string;
+  };
+
+  /**
+   * 创建时间
+   */
+  createTime?: string;
+
+  // 保持向后兼容的字段 - 用于列表显示
+  userName?: string;
+  nickName?: string;
+  phonenumber?: string;
+  province?: string;
+  city?: string;
+  district?: string;
+}
+
+export interface SysAgentForm extends BaseEntity {
+  /**
+   * 用户ID
+   */
+  userId?: string | number;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 省份
+   */
+  province?: string;
+
+  /**
+   * 市
+   */
+  city?: string;
+
+  /**
+   * 区
+   */
+  district?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 来源渠道
+   */
+  sourceChannel?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  codeArr?: string[];
+}
+
+export interface SysAgentQuery extends PageQuery {
+  /**
+   * 用户ID
+   */
+  userId?: string | number;
+
+  /**
+   * 租户编号
+   */
+  tenantId?: string | number;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 省份
+   */
+  province?: string;
+
+  /**
+   * 市
+   */
+  city?: string;
+
+  /**
+   * 区
+   */
+  district?: string;
+
+  /**
+   * 到期时间
+   */
+  expireDate?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 授权到期日期范围
+   */
+  expireDateRange?: string[];
+
+  /**
+   * 是否到期
+   */
+  isExpired?: string;
+
+  /**
+   * 创建时间范围
+   */
+  createTimeRange?: string[];
+
+  /**
+   * 授权到期开始时间
+   */
+  expireDateStart?: string;
+
+  /**
+   * 授权到期结束时间
+   */
+  expireDateEnd?: string;
+
+  /**
+   * 创建开始时间
+   */
+  createTimeStart?: string;
+
+  /**
+   * 创建结束时间
+   */
+  createTimeEnd?: string;
+
+  /**
+   * 搜索关键词
+   */
+  searchKeyword?: string;
+
+  /**
+   * 用户状态 (通过user.status传递)
+   */
+  'user.status'?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}
+
+export interface SysUserForm extends BaseEntity {
+  /**
+   * 用户ID
+   */
+  userId?: string | number;
+
+  /**
+   * 部门ID
+   */
+  deptId?: string | number;
+
+  /**
+   * 用户账号
+   */
+  userName?: string;
+
+  /**
+   * 用户昵称
+   */
+  nickName?: string;
+
+  /**
+   * 用户类型
+   */
+  userType?: string;
+
+  /**
+   * 用户身份
+   */
+  identity?: string;
+
+  /**
+   * 用户邮箱
+   */
+  email?: string;
+
+  /**
+   * 手机号码
+   */
+  phonenumber?: string;
+
+  /**
+   * 用户性别(0男 1女 2未知)
+   */
+  sex?: string;
+
+  /**
+   * 密码
+   */
+  password?: string;
+
+  /**
+   * 帐号状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 角色组
+   */
+  roleIds?: number[];
+
+  /**
+   * 岗位组
+   */
+  postIds?: number[];
+
+  /**
+   * 角色ID (用于表单选择)
+   */
+  roleId?: string | number;
+
+  /**
+   * 代理分组ID
+   */
+  groupId?: string | number;
+
+  /**
+   * 区域代码
+   */
+  areaCode?: string;
+
+  /**
+   * 省份
+   */
+  province?: string;
+
+  /**
+   * 市
+   */
+  city?: string;
+
+  /**
+   * 区
+   */
+  district?: string;
+
+  /**
+   * 级联选择器数组
+   */
+  codeArr?: string[];
+}
+
+export interface SysUserAgentForm {
+  /**
+   * 用户信息
+   */
+  user?: SysUserForm;
+
+  /**
+   * 代理信息
+   */
+  agent?: SysAgentForm;
+}

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно