Browse Source

251031上传gogs

HuRongxin 1 month ago
commit
e0da0ca7e7
100 changed files with 9717 additions and 0 deletions
  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. 97 0
      package.json
  17. BIN
      public/favicon.ico
  18. 20 0
      src/App.vue
  19. 48 0
      src/animate.ts
  20. 63 0
      src/api/commodity/photoAlbum/index.ts
  21. 231 0
      src/api/commodity/photoAlbum/types.ts
  22. 63 0
      src/api/commodity/photoAlbumStore/index.ts
  23. 46 0
      src/api/commodity/photoAlbumStore/types.ts
  24. 63 0
      src/api/commodity/segmentedPriceFixe/index.ts
  25. 101 0
      src/api/commodity/segmentedPriceFixe/types.ts
  26. 63 0
      src/api/commodity/segmentedPriceSpecial/index.ts
  27. 116 0
      src/api/commodity/segmentedPriceSpecial/types.ts
  28. 63 0
      src/api/commodity/server/index.ts
  29. 441 0
      src/api/commodity/server/types.ts
  30. 63 0
      src/api/commodity/serverAttr/index.ts
  31. 86 0
      src/api/commodity/serverAttr/types.ts
  32. 63 0
      src/api/commodity/serverAttrValue/index.ts
  33. 210 0
      src/api/commodity/serverAttrValue/types.ts
  34. 63 0
      src/api/commodity/type/index.ts
  35. 70 0
      src/api/commodity/type/types.ts
  36. 63 0
      src/api/commodity/typeTheme/index.ts
  37. 96 0
      src/api/commodity/typeTheme/types.ts
  38. 62 0
      src/api/demo/demo/index.ts
  39. 90 0
      src/api/demo/demo/types.ts
  40. 62 0
      src/api/demo/tree/index.ts
  41. 80 0
      src/api/demo/tree/types.ts
  42. 104 0
      src/api/file/category/index.ts
  43. 199 0
      src/api/file/category/types.ts
  44. 125 0
      src/api/file/info/index.ts
  45. 319 0
      src/api/file/info/types.ts
  46. 113 0
      src/api/login.ts
  47. 70 0
      src/api/member/growthRule/index.ts
  48. 131 0
      src/api/member/growthRule/types.ts
  49. 70 0
      src/api/member/integralRule/index.ts
  50. 248 0
      src/api/member/integralRule/types.ts
  51. 63 0
      src/api/member/levelCustomBenefits/index.ts
  52. 96 0
      src/api/member/levelCustomBenefits/types.ts
  53. 63 0
      src/api/member/levelServiceDiscounts/index.ts
  54. 126 0
      src/api/member/levelServiceDiscounts/types.ts
  55. 71 0
      src/api/member/memberInfo/index.ts
  56. 169 0
      src/api/member/memberInfo/types.ts
  57. 63 0
      src/api/member/memberLevels/index.ts
  58. 215 0
      src/api/member/memberLevels/types.ts
  59. 69 0
      src/api/member/memberTag/index.ts
  60. 111 0
      src/api/member/memberTag/types.ts
  61. 70 0
      src/api/member/rechargeSetting/index.ts
  62. 266 0
      src/api/member/rechargeSetting/types.ts
  63. 11 0
      src/api/menu.ts
  64. 59 0
      src/api/monitor/cache/index.ts
  65. 7 0
      src/api/monitor/cache/types.ts
  66. 36 0
      src/api/monitor/loginInfo/index.ts
  67. 20 0
      src/api/monitor/loginInfo/types.ts
  68. 36 0
      src/api/monitor/online/index.ts
  69. 15 0
      src/api/monitor/online/types.ts
  70. 28 0
      src/api/monitor/operlog/index.ts
  71. 53 0
      src/api/monitor/operlog/types.ts
  72. 63 0
      src/api/setting/commentItemSetting/index.ts
  73. 126 0
      src/api/setting/commentItemSetting/types.ts
  74. 63 0
      src/api/setting/commentSetting/index.ts
  75. 126 0
      src/api/setting/commentSetting/types.ts
  76. 63 0
      src/api/setting/ladderRule/index.ts
  77. 111 0
      src/api/setting/ladderRule/types.ts
  78. 63 0
      src/api/setting/platformSetting/index.ts
  79. 96 0
      src/api/setting/platformSetting/types.ts
  80. 63 0
      src/api/setting/reservationSetting/index.ts
  81. 276 0
      src/api/setting/reservationSetting/types.ts
  82. 74 0
      src/api/store/sysService/index.ts
  83. 114 0
      src/api/store/sysService/types.ts
  84. 72 0
      src/api/store/sysShop/index.ts
  85. 578 0
      src/api/store/sysShop/types.ts
  86. 72 0
      src/api/store/sysStore/index.ts
  87. 374 0
      src/api/store/sysStore/types.ts
  88. 80 0
      src/api/system/client/index.ts
  89. 135 0
      src/api/system/client/types.ts
  90. 74 0
      src/api/system/config/index.ts
  91. 23 0
      src/api/system/config/types.ts
  92. 73 0
      src/api/system/dept/index.ts
  93. 60 0
      src/api/system/dept/types.ts
  94. 53 0
      src/api/system/dict/data/index.ts
  95. 26 0
      src/api/system/dict/data/types.ts
  96. 62 0
      src/api/system/dict/type/index.ts
  97. 18 0
      src/api/system/dict/type/types.ts
  98. 63 0
      src/api/system/mailTemplate/index.ts
  99. 141 0
      src/api/system/mailTemplate/types.ts
  100. 63 0
      src/api/system/mailbox/index.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'
+    }
+  }
+);

File diff suppressed because it is too large
+ 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>

+ 97 - 0
package.json

@@ -0,0 +1,97 @@
+{
+  "$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",
+    "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
+};

+ 63 - 0
src/api/commodity/photoAlbum/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { PhotoAlbumVO, PhotoAlbumForm, PhotoAlbumQuery } from '@/api/commodity/photoAlbum/types';
+
+/**
+ * 查询入册产品列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listPhotoAlbum = (query?: PhotoAlbumQuery): AxiosPromise<any> => {
+  return request({
+    url: '/commodity/photoAlbum/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询入册产品详细
+ * @param photoAlbumId
+ */
+export const getPhotoAlbum = (photoAlbumId: string | number): AxiosPromise<any> => {
+  return request({
+    url: '/commodity/photoAlbum/' + photoAlbumId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增入册产品
+ * @param data
+ */
+export const addPhotoAlbum = (data: PhotoAlbumForm) => {
+  return request({
+    url: '/commodity/photoAlbum',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改入册产品
+ * @param data
+ */
+export const updatePhotoAlbum = (data: PhotoAlbumForm) => {
+  return request({
+    url: '/commodity/photoAlbum',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除入册产品
+ * @param photoAlbumId
+ */
+export const delPhotoAlbum = (photoAlbumId: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/photoAlbum/' + photoAlbumId,
+    method: 'delete'
+  });
+};

+ 231 - 0
src/api/commodity/photoAlbum/types.ts

@@ -0,0 +1,231 @@
+export interface PhotoAlbumVO {
+  /**
+   * 入册产品主键id
+   */
+  photoAlbumId: number;
+
+  /**
+   * 入册产品名字
+   */
+  name: string;
+
+  /**
+   * 类型
+   */
+  type: number;
+
+  /**
+   * 入册产品编号
+   */
+  number: string;
+
+  /**
+   * 尺寸
+   */
+  size: string;
+
+  /**
+   * 库存预警
+   */
+  inventoryWarning: number;
+
+  /**
+   * 单位
+   */
+  unit: string;
+
+  /**
+   * 商品图片
+   */
+  picture: string;
+
+  /**
+   * 商品图片Url
+   */
+  pictureUrl: string;
+  
+  /**
+   * 可入册相片数
+   */
+  canPictureNumber: number;
+
+  /**
+   * 价格
+   */
+  price: number;
+
+  /**
+   * 适用门店类型(0全部适用;1部分适用)
+   */
+  applicableStoreType: number;
+
+  /**
+   * 状态(0草稿,1发布)
+   */
+  status: number;
+
+  /**
+   * 详情
+   */
+  remark: string;
+
+  /**
+   * 入册产品门店关联
+   */
+  commodityPhotoAlbumStoreList?: CommodityPhotoAlbumStoreVO[];
+}
+
+export interface CommodityPhotoAlbumStoreVO {
+  /**
+   * 入册产品id
+   */
+  photoAlbumId: number;
+
+  /**
+   * 门店id
+   */
+  storeId: number;
+
+  /**
+   * 门店名称
+   */
+  storeName: string;
+}
+
+export interface PhotoAlbumForm {
+  /**
+   * 入册产品主键id
+   */
+  photoAlbumId?: number;
+
+  /**
+   * 入册产品名字
+   */
+  name?: string;
+
+  /**
+   * 类型
+   */
+  type?: number;
+
+  /**
+   * 入册产品编号
+   */
+  number?: string;
+
+  /**
+   * 尺寸
+   */
+  size?: string;
+
+  /**
+   * 库存预警
+   */
+  inventoryWarning?: number;
+
+  /**
+   * 单位
+   */
+  unit?: string;
+
+  /**
+   * 商品图片
+   */
+  picture?: string;
+
+  /**
+   * 可入册相片数
+   */
+  canPictureNumber?: number;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+  /**
+   * 适用门店类型(0全部适用;1部分适用)
+   */
+  applicableStoreType?: number;
+
+  /**
+   * 状态(0草稿,1发布)
+   */
+  status?: number;
+
+  /**
+   * 详情
+   */
+  remark?: string;
+
+  /**
+   * 门店id列表(用于部分门店)
+   */
+  storeIds?: string[];
+}
+
+export interface PhotoAlbumQuery extends PageQuery {
+
+  /**
+   * 入册产品名字
+   */
+  name?: string;
+
+  /**
+   * 类型
+   */
+  type?: number;
+
+  /**
+   * 入册产品编号
+   */
+  number?: string;
+
+  /**
+   * 尺寸
+   */
+  size?: string;
+
+  /**
+   * 库存预警
+   */
+  inventoryWarning?: number;
+
+  /**
+   * 单位
+   */
+  unit?: string;
+
+  /**
+   * 商品图片
+   */
+  picture?: string;
+
+  /**
+   * 可入册相片数
+   */
+  canPictureNumber?: number;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+  /**
+   * 适用门店类型(0全部适用;1部分适用)
+   */
+  applicableStoreType?: number;
+
+  /**
+   * 状态(0草稿,1发布)
+   */
+  status?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/photoAlbumStore/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { PhotoAlbumStoreVO, PhotoAlbumStoreForm, PhotoAlbumStoreQuery } from '@/api/commodity/photoAlbumStore/types';
+
+/**
+ * 查询入册产品与门店关联列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listPhotoAlbumStore = (query?: PhotoAlbumStoreQuery): AxiosPromise<PhotoAlbumStoreVO[]> => {
+  return request({
+    url: '/commodity/photoAlbumStore/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询入册产品与门店关联详细
+ * @param photoAlbumId
+ */
+export const getPhotoAlbumStore = (photoAlbumId: string | number): AxiosPromise<PhotoAlbumStoreVO> => {
+  return request({
+    url: '/commodity/photoAlbumStore/' + photoAlbumId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增入册产品与门店关联
+ * @param data
+ */
+export const addPhotoAlbumStore = (data: PhotoAlbumStoreForm) => {
+  return request({
+    url: '/commodity/photoAlbumStore',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改入册产品与门店关联
+ * @param data
+ */
+export const updatePhotoAlbumStore = (data: PhotoAlbumStoreForm) => {
+  return request({
+    url: '/commodity/photoAlbumStore',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除入册产品与门店关联
+ * @param photoAlbumId
+ */
+export const delPhotoAlbumStore = (photoAlbumId: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/photoAlbumStore/' + photoAlbumId,
+    method: 'delete'
+  });
+};

+ 46 - 0
src/api/commodity/photoAlbumStore/types.ts

@@ -0,0 +1,46 @@
+export interface PhotoAlbumStoreVO {
+  /**
+   * 入册产品id
+   */
+  photoAlbumId: string | number;
+
+  /**
+   * 门店id
+   */
+  storeId: string | number;
+
+}
+
+export interface PhotoAlbumStoreForm extends BaseEntity {
+  /**
+   * 入册产品id
+   */
+  photoAlbumId?: string | number;
+
+  /**
+   * 门店id
+   */
+  storeId?: string | number;
+
+}
+
+export interface PhotoAlbumStoreQuery extends PageQuery {
+
+  /**
+   * 入册产品id
+   */
+  photoAlbumId?: string | number;
+
+  /**
+   * 门店id
+   */
+  storeId?: string | number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/segmentedPriceFixe/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SegmentedPriceFixeVO, SegmentedPriceFixeForm, SegmentedPriceFixeQuery } from '@/api/commodity/segmentedPriceFixe/types';
+
+/**
+ * 查询分段价格-固定日期列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSegmentedPriceFixe = (query?: SegmentedPriceFixeQuery): AxiosPromise<SegmentedPriceFixeVO[]> => {
+  return request({
+    url: '/commodity/segmentedPriceFixe/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询分段价格-固定日期详细
+ * @param segmentedPriceFixeId
+ */
+export const getSegmentedPriceFixe = (segmentedPriceFixeId: string | number): AxiosPromise<SegmentedPriceFixeVO> => {
+  return request({
+    url: '/commodity/segmentedPriceFixe/' + segmentedPriceFixeId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增分段价格-固定日期
+ * @param data
+ */
+export const addSegmentedPriceFixe = (data: SegmentedPriceFixeForm) => {
+  return request({
+    url: '/commodity/segmentedPriceFixe',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改分段价格-固定日期
+ * @param data
+ */
+export const updateSegmentedPriceFixe = (data: SegmentedPriceFixeForm) => {
+  return request({
+    url: '/commodity/segmentedPriceFixe',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除分段价格-固定日期
+ * @param segmentedPriceFixeId
+ */
+export const delSegmentedPriceFixe = (segmentedPriceFixeId: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/segmentedPriceFixe/' + segmentedPriceFixeId,
+    method: 'delete'
+  });
+};

+ 101 - 0
src/api/commodity/segmentedPriceFixe/types.ts

@@ -0,0 +1,101 @@
+export interface SegmentedPriceFixeVO {
+  /**
+   * 分段价格主键id
+   */
+  segmentedPriceFixeId: string | number;
+
+  /**
+   * 服务产品id
+   */
+  commodityServerId: string | number;
+
+  /**
+   * 星期(1->星期一)
+   */
+  week: number;
+
+  /**
+   * 开始时间
+   */
+  startTime: string;
+
+  /**
+   * 结束时间
+   */
+  endTime: string;
+
+  /**
+   * 价格
+   */
+  price: number;
+
+}
+
+export interface SegmentedPriceFixeForm extends BaseEntity {
+  /**
+   * 分段价格主键id
+   */
+  segmentedPriceFixeId?: string | number;
+
+  /**
+   * 服务产品id
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 星期(1->星期一)
+   */
+  week?: number;
+
+  /**
+   * 开始时间
+   */
+  startTime?: string;
+
+  /**
+   * 结束时间
+   */
+  endTime?: string;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+}
+
+export interface SegmentedPriceFixeQuery extends PageQuery {
+
+  /**
+   * 服务产品id
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 星期(1->星期一)
+   */
+  week?: number;
+
+  /**
+   * 开始时间
+   */
+  startTime?: string;
+
+  /**
+   * 结束时间
+   */
+  endTime?: string;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/segmentedPriceSpecial/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SegmentedPriceSpecialVO, SegmentedPriceSpecialForm, SegmentedPriceSpecialQuery } from '@/api/commodity/segmentedPriceSpecial/types';
+
+/**
+ * 查询分段价格-特殊列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSegmentedPriceSpecial = (query?: SegmentedPriceSpecialQuery): AxiosPromise<SegmentedPriceSpecialVO[]> => {
+  return request({
+    url: '/commodity/segmentedPriceSpecial/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询分段价格-特殊详细
+ * @param segmentedPriceSpecialId
+ */
+export const getSegmentedPriceSpecial = (segmentedPriceSpecialId: string | number): AxiosPromise<SegmentedPriceSpecialVO> => {
+  return request({
+    url: '/commodity/segmentedPriceSpecial/' + segmentedPriceSpecialId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增分段价格-特殊
+ * @param data
+ */
+export const addSegmentedPriceSpecial = (data: SegmentedPriceSpecialForm) => {
+  return request({
+    url: '/commodity/segmentedPriceSpecial',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改分段价格-特殊
+ * @param data
+ */
+export const updateSegmentedPriceSpecial = (data: SegmentedPriceSpecialForm) => {
+  return request({
+    url: '/commodity/segmentedPriceSpecial',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除分段价格-特殊
+ * @param segmentedPriceSpecialId
+ */
+export const delSegmentedPriceSpecial = (segmentedPriceSpecialId: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/segmentedPriceSpecial/' + segmentedPriceSpecialId,
+    method: 'delete'
+  });
+};

+ 116 - 0
src/api/commodity/segmentedPriceSpecial/types.ts

@@ -0,0 +1,116 @@
+export interface SegmentedPriceSpecialVO {
+  /**
+   * 分段价格-特殊,主键id
+   */
+  segmentedPriceSpecialId: string | number;
+
+  /**
+   * 服务产品id
+   */
+  commodityServerId: string | number;
+
+  /**
+   * 开始日期(YYYY-MM-DD)
+   */
+  startDate: string;
+
+  /**
+   * 结束日期(YYYY-MM-DD)
+   */
+  endDate: string;
+
+  /**
+   * 开始时间(HH:MM:SS)
+   */
+  startTime: string;
+
+  /**
+   * 结束时间(HH:MM:SS)
+   */
+  endTime: string;
+
+  /**
+   * 价格
+   */
+  price: number;
+
+}
+
+export interface SegmentedPriceSpecialForm extends BaseEntity {
+  /**
+   * 分段价格-特殊,主键id
+   */
+  segmentedPriceSpecialId?: string | number;
+
+  /**
+   * 服务产品id
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 开始日期(YYYY-MM-DD)
+   */
+  startDate?: string;
+
+  /**
+   * 结束日期(YYYY-MM-DD)
+   */
+  endDate?: string;
+
+  /**
+   * 开始时间(HH:MM:SS)
+   */
+  startTime?: string;
+
+  /**
+   * 结束时间(HH:MM:SS)
+   */
+  endTime?: string;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+}
+
+export interface SegmentedPriceSpecialQuery extends PageQuery {
+
+  /**
+   * 服务产品id
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 开始日期(YYYY-MM-DD)
+   */
+  startDate?: string;
+
+  /**
+   * 结束日期(YYYY-MM-DD)
+   */
+  endDate?: string;
+
+  /**
+   * 开始时间(HH:MM:SS)
+   */
+  startTime?: string;
+
+  /**
+   * 结束时间(HH:MM:SS)
+   */
+  endTime?: string;
+
+  /**
+   * 价格
+   */
+  price?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/server/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ServerVO, ServerForm, ServerQuery } from '@/api/commodity/server/types';
+
+/**
+ * 查询服务产品列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listServer = (query?: ServerQuery): AxiosPromise<ServerVO[]> => {
+  return request({
+    url: '/commodity/server/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询服务产品详细
+ * @param commodityServerId
+ */
+export const getServer = (commodityServerId: string | number): AxiosPromise<ServerVO> => {
+  return request({
+    url: '/commodity/server/' + commodityServerId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增服务产品
+ * @param data
+ */
+export const addServer = (data: ServerForm) => {
+  return request({
+    url: '/commodity/server',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改服务产品
+ * @param data
+ */
+export const updateServer = (data: ServerForm) => {
+  return request({
+    url: '/commodity/server',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除服务产品
+ * @param commodityServerId
+ */
+export const delServer = (commodityServerId: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/server/' + commodityServerId,
+    method: 'delete'
+  });
+};

+ 441 - 0
src/api/commodity/server/types.ts

@@ -0,0 +1,441 @@
+export interface ServerVO {
+  /**
+   * 服务产品主键id
+   */
+  commodityServerId: string | number;
+
+  /**
+   * 门店id
+   */
+  shopId: string | number;
+
+  /**
+   * 服务产品名称
+   */
+  name: string;
+
+  /**
+   * 服务产品昵称
+   */
+  nickName: string;
+
+  /**
+   * 产品渠道(0微信、1抖音、2小红书、3美团)
+   */
+  channel: number;
+
+  /**
+   * 产品分类id
+   */
+  typeId: string | number;
+
+  /**
+   * 预约制(0允许顾客在线自助预约)
+   */
+  appointmentSystem: number;
+
+  /**
+   * 显示制(0在预约端产品列表显示)
+   */
+  displaySystem: number;
+
+  /**
+   * 是否允许顾客到店,线下下单(0是,1否)
+   */
+  offlineOrder: number;
+
+  /**
+   * 自助收款方式(0收全款,1不收款)
+   */
+  selfGathering: number;
+
+  /**
+   * 档期满时是否可以下单(0可正常下单,1不可下单)
+   */
+  fullSchedule: number;
+
+  /**
+   * 预计耗时,如1小时内,30分钟左右
+   */
+  predictTime: string;
+
+  /**
+   * 服务产品图标
+   */
+  picture: string;
+
+  /**
+   * 条状图片
+   */
+  stripPicture: string;
+
+  /**
+   * 半条状图片
+   */
+  halfStripPicture: string;
+
+  /**
+   * 产品详情主图,多张使用英文逗号隔开
+   */
+  detailsPicture: string;
+
+  /**
+   * 是否支持在线选片(0支持,1不支持)
+   */
+  onlineSelect: number;
+
+  /**
+   * 是否赠送入册产品(0是,1否)
+   */
+  haveGift: number;
+
+  /**
+   * 原价展示(0原价,1市场价)
+   */
+  originalPriceShow: number;
+
+  /**
+   * 现价展示(0现价,1折扣价,2优惠价)
+   */
+  currentPriceShow: number;
+
+  /**
+   * 预付模式(0按品牌统一设置收取,1无需预付费,2收取全款,3订单比例,4固定金额)
+   */
+  advanceModel: number;
+
+  /**
+   * 产品简介
+   */
+  remark: string;
+
+  /**
+   * 产品页面详情按钮(0立即预约(默认),1自定义,2不展现按钮,3立即预约和立即支付同时展示)
+   */
+  pageDetailsButton: number;
+
+  /**
+   * 按钮文字
+   */
+  buttonText: string;
+
+  /**
+   * 弹框内容
+   */
+  popText: string;
+
+  /**
+   * 产品详情-基本设置-编辑模式(0富文本模式,1组件模式)
+   */
+  editModel: number;
+
+  /**
+   * 富文本模式的编辑内容
+   */
+  editModelTxt: string;
+
+  /**
+   * 组件模式的编辑内容
+   */
+  editModelModule: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+}
+
+export interface ServerForm extends BaseEntity {
+  /**
+   * 服务产品主键id
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 门店id
+   */
+  shopId?: string | number;
+
+  /**
+   * 服务产品名称
+   */
+  name?: string;
+
+  /**
+   * 服务产品昵称
+   */
+  nickName?: string;
+
+  /**
+   * 产品渠道(0微信、1抖音、2小红书、3美团)
+   */
+  channel?: number;
+
+  /**
+   * 产品分类id
+   */
+  typeId?: string | number;
+
+  /**
+   * 预约制(0允许顾客在线自助预约)
+   */
+  appointmentSystem?: number;
+
+  /**
+   * 显示制(0在预约端产品列表显示)
+   */
+  displaySystem?: number;
+
+  /**
+   * 是否允许顾客到店,线下下单(0是,1否)
+   */
+  offlineOrder?: number;
+
+  /**
+   * 自助收款方式(0收全款,1不收款)
+   */
+  selfGathering?: number;
+
+  /**
+   * 档期满时是否可以下单(0可正常下单,1不可下单)
+   */
+  fullSchedule?: number;
+
+  /**
+   * 预计耗时,如1小时内,30分钟左右
+   */
+  predictTime?: string;
+
+  /**
+   * 服务产品图标
+   */
+  picture?: string;
+
+  /**
+   * 条状图片
+   */
+  stripPicture?: string;
+
+  /**
+   * 半条状图片
+   */
+  halfStripPicture?: string;
+
+  /**
+   * 产品详情主图,多张使用英文逗号隔开
+   */
+  detailsPicture?: string;
+
+  /**
+   * 是否支持在线选片(0支持,1不支持)
+   */
+  onlineSelect?: number;
+
+  /**
+   * 是否赠送入册产品(0是,1否)
+   */
+  haveGift?: number;
+
+  /**
+   * 原价展示(0原价,1市场价)
+   */
+  originalPriceShow?: number;
+
+  /**
+   * 现价展示(0现价,1折扣价,2优惠价)
+   */
+  currentPriceShow?: number;
+
+  /**
+   * 预付模式(0按品牌统一设置收取,1无需预付费,2收取全款,3订单比例,4固定金额)
+   */
+  advanceModel?: number;
+
+  /**
+   * 产品简介
+   */
+  remark?: string;
+
+  /**
+   * 产品页面详情按钮(0立即预约(默认),1自定义,2不展现按钮,3立即预约和立即支付同时展示)
+   */
+  pageDetailsButton?: number;
+
+  /**
+   * 按钮文字
+   */
+  buttonText?: string;
+
+  /**
+   * 弹框内容
+   */
+  popText?: string;
+
+  /**
+   * 产品详情-基本设置-编辑模式(0富文本模式,1组件模式)
+   */
+  editModel?: number;
+
+  /**
+   * 富文本模式的编辑内容
+   */
+  editModelTxt?: string;
+
+  /**
+   * 组件模式的编辑内容
+   */
+  editModelModule?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+}
+
+export interface ServerQuery extends PageQuery {
+
+  /**
+   * 服务产品名称
+   */
+  name?: string;
+
+  /**
+   * 门店id
+   */
+  shopId?: string;
+
+  /**
+   * 服务产品昵称
+   */
+  nickName?: string;
+
+  /**
+   * 产品渠道(0微信、1抖音、2小红书、3美团)
+   */
+  channel?: number;
+
+  /**
+   * 产品分类id
+   */
+  typeId?: string | number;
+
+  /**
+   * 预约制(0允许顾客在线自助预约)
+   */
+  appointmentSystem?: number;
+
+  /**
+   * 显示制(0在预约端产品列表显示)
+   */
+  displaySystem?: number;
+
+  /**
+   * 是否允许顾客到店,线下下单(0是,1否)
+   */
+  offlineOrder?: number;
+
+  /**
+   * 自助收款方式(0收全款,1不收款)
+   */
+  selfGathering?: number;
+
+  /**
+   * 档期满时是否可以下单(0可正常下单,1不可下单)
+   */
+  fullSchedule?: number;
+
+  /**
+   * 预计耗时,如1小时内,30分钟左右
+   */
+  predictTime?: string;
+
+  /**
+   * 服务产品图标
+   */
+  picture?: string;
+
+  /**
+   * 条状图片
+   */
+  stripPicture?: string;
+
+  /**
+   * 半条状图片
+   */
+  halfStripPicture?: string;
+
+  /**
+   * 产品详情主图,多张使用英文逗号隔开
+   */
+  detailsPicture?: string;
+
+  /**
+   * 是否支持在线选片(0支持,1不支持)
+   */
+  onlineSelect?: number;
+
+  /**
+   * 是否赠送入册产品(0是,1否)
+   */
+  haveGift?: number;
+
+  /**
+   * 原价展示(0原价,1市场价)
+   */
+  originalPriceShow?: number;
+
+  /**
+   * 现价展示(0现价,1折扣价,2优惠价)
+   */
+  currentPriceShow?: number;
+
+  /**
+   * 预付模式(0按品牌统一设置收取,1无需预付费,2收取全款,3订单比例,4固定金额)
+   */
+  advanceModel?: number;
+
+  /**
+   * 产品页面详情按钮(0立即预约(默认),1自定义,2不展现按钮,3立即预约和立即支付同时展示)
+   */
+  pageDetailsButton?: number;
+
+  /**
+   * 按钮文字
+   */
+  buttonText?: string;
+
+  /**
+   * 弹框内容
+   */
+  popText?: string;
+
+  /**
+   * 产品详情-基本设置-编辑模式(0富文本模式,1组件模式)
+   */
+  editModel?: number;
+
+  /**
+   * 富文本模式的编辑内容
+   */
+  editModelTxt?: string;
+
+  /**
+   * 组件模式的编辑内容
+   */
+  editModelModule?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/serverAttr/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ServerAttrVO, ServerAttrForm, ServerAttrQuery } from '@/api/commodity/serverAttr/types';
+
+/**
+ * 查询服务产品规格属性列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listServerAttr = (query?: ServerAttrQuery): AxiosPromise<ServerAttrVO[]> => {
+  return request({
+    url: '/commodity/serverAttr/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询服务产品规格属性详细
+ * @param id
+ */
+export const getServerAttr = (id: string | number): AxiosPromise<ServerAttrVO> => {
+  return request({
+    url: '/commodity/serverAttr/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增服务产品规格属性
+ * @param data
+ */
+export const addServerAttr = (data: ServerAttrForm) => {
+  return request({
+    url: '/commodity/serverAttr',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改服务产品规格属性
+ * @param data
+ */
+export const updateServerAttr = (data: ServerAttrForm) => {
+  return request({
+    url: '/commodity/serverAttr',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除服务产品规格属性
+ * @param id
+ */
+export const delServerAttr = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/serverAttr/' + id,
+    method: 'delete'
+  });
+};

+ 86 - 0
src/api/commodity/serverAttr/types.ts

@@ -0,0 +1,86 @@
+export interface ServerAttrVO {
+  /**
+   * 主键
+   */
+  id: string | number;
+
+  /**
+   * 服务产品ID
+   */
+  commodityServerId: string | number;
+
+  /**
+   * 属性名
+   */
+  attrName: string;
+
+  /**
+   * 属性值(数组)
+   */
+  attrValues: string;
+
+  /**
+   * 是否删除,0-否,1-是
+   */
+  isDel: number;
+
+}
+
+export interface ServerAttrForm extends BaseEntity {
+  /**
+   * 主键
+   */
+  id?: string | number;
+
+  /**
+   * 服务产品ID
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 属性名
+   */
+  attrName?: string;
+
+  /**
+   * 属性值(数组)
+   */
+  attrValues?: string;
+
+  /**
+   * 是否删除,0-否,1-是
+   */
+  isDel?: number;
+
+}
+
+export interface ServerAttrQuery extends PageQuery {
+
+  /**
+   * 服务产品ID
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 属性名
+   */
+  attrName?: string;
+
+  /**
+   * 属性值(数组)
+   */
+  attrValues?: string;
+
+  /**
+   * 是否删除,0-否,1-是
+   */
+  isDel?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/serverAttrValue/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ServerAttrValueVO, ServerAttrValueForm, ServerAttrValueQuery } from '@/api/commodity/serverAttrValue/types';
+
+/**
+ * 查询服务产品属性值列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listServerAttrValue = (query?: ServerAttrValueQuery): AxiosPromise<ServerAttrValueVO[]> => {
+  return request({
+    url: '/commodity/serverAttrValue/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询服务产品属性值详细
+ * @param id
+ */
+export const getServerAttrValue = (id: string | number): AxiosPromise<ServerAttrValueVO> => {
+  return request({
+    url: '/commodity/serverAttrValue/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增服务产品属性值
+ * @param data
+ */
+export const addServerAttrValue = (data: ServerAttrValueForm) => {
+  return request({
+    url: '/commodity/serverAttrValue',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改服务产品属性值
+ * @param data
+ */
+export const updateServerAttrValue = (data: ServerAttrValueForm) => {
+  return request({
+    url: '/commodity/serverAttrValue',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除服务产品属性值
+ * @param id
+ */
+export const delServerAttrValue = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/serverAttrValue/' + id,
+    method: 'delete'
+  });
+};

+ 210 - 0
src/api/commodity/serverAttrValue/types.ts

@@ -0,0 +1,210 @@
+export interface ServerAttrValueVO {
+  /**
+   * 主键
+   */
+  id: string | number;
+
+  /**
+   * 服务产品ID
+   */
+  commodityServerId: string | number;
+
+  /**
+   * 商品属性sku
+   */
+  sku: string;
+
+  /**
+   * 图片
+   */
+  image: string;
+
+  /**
+   * 图片Url
+   */
+  imageUrl: string;
+  /**
+   * 消耗工位
+   */
+  expendStation: number;
+
+  /**
+   * 现价
+   */
+  nowPrice: number;
+
+  /**
+   * 原价
+   */
+  otPrice: number;
+
+  /**
+   * 加片单价
+   */
+  addPrice: number;
+
+  /**
+   * attr_values 创建更新时的属性对应
+   */
+  attrValue: string;
+
+  /**
+   * 是否删除,0-否,1-是
+   */
+  isDel: number;
+
+  /**
+   * 主商品attrValueID
+   */
+  masterId: string | number;
+
+  /**
+   * 是否显示
+   */
+  isShow: number;
+
+  /**
+   * 是否默认
+   */
+  isDefault: number;
+
+}
+
+export interface ServerAttrValueForm extends BaseEntity {
+  /**
+   * 主键
+   */
+  id?: string | number;
+
+  /**
+   * 服务产品ID
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 商品属性sku
+   */
+  sku?: string;
+
+  /**
+   * 图片
+   */
+  image?: string;
+
+  /**
+   * 消耗工位
+   */
+  expendStation?: number;
+
+  /**
+   * 现价
+   */
+  nowPrice?: number;
+
+  /**
+   * 原价
+   */
+  otPrice?: number;
+
+  /**
+   * 加片单价
+   */
+  addPrice?: number;
+
+  /**
+   * attr_values 创建更新时的属性对应
+   */
+  attrValue?: string;
+
+  /**
+   * 是否删除,0-否,1-是
+   */
+  isDel?: number;
+
+  /**
+   * 主商品attrValueID
+   */
+  masterId?: string | number;
+
+  /**
+   * 是否显示
+   */
+  isShow?: number;
+
+  /**
+   * 是否默认
+   */
+  isDefault?: number;
+
+}
+
+export interface ServerAttrValueQuery extends PageQuery {
+
+  /**
+   * 服务产品ID
+   */
+  commodityServerId?: string | number;
+
+  /**
+   * 商品属性sku
+   */
+  sku?: string;
+
+  /**
+   * 图片
+   */
+  image?: string;
+
+  /**
+   * 消耗工位
+   */
+  expendStation?: number;
+
+  /**
+   * 现价
+   */
+  nowPrice?: number;
+
+  /**
+   * 原价
+   */
+  otPrice?: number;
+
+  /**
+   * 加片单价
+   */
+  addPrice?: number;
+
+  /**
+   * attr_values 创建更新时的属性对应
+   */
+  attrValue?: string;
+
+  /**
+   * 是否删除,0-否,1-是
+   */
+  isDel?: number;
+
+  /**
+   * 主商品attrValueID
+   */
+  masterId?: string | number;
+
+  /**
+   * 是否显示
+   */
+  isShow?: number;
+
+  /**
+   * 是否默认
+   */
+  isDefault?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/type/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { TypeVO, TypeForm, TypeQuery } from '@/api/commodity/type/types';
+
+/**
+ * 查询产品类型列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listType = (query?: TypeQuery): AxiosPromise<TypeVO[]> => {
+  return request({
+    url: '/commodity/type/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询产品类型详细
+ * @param id
+ */
+export const getType = (id: string | number): AxiosPromise<TypeVO> => {
+  return request({
+    url: '/commodity/type/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增产品类型
+ * @param data
+ */
+export const addType = (data: TypeForm) => {
+  return request({
+    url: '/commodity/type',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改产品类型
+ * @param data
+ */
+export const updateType = (data: TypeForm) => {
+  return request({
+    url: '/commodity/type',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除产品类型
+ * @param id
+ */
+export const delType = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/type/' + id,
+    method: 'delete'
+  });
+};

+ 70 - 0
src/api/commodity/type/types.ts

@@ -0,0 +1,70 @@
+export interface TypeVO {
+  /**
+   * 商品类型id
+   */
+  id: string | number;
+
+  /**
+   * 类型名字
+   */
+  name: string;
+
+  /**
+   * 类型图片
+   */
+  picture: string;
+
+  /**
+   * 类型图片Url
+   */
+  pictureUrl: string;
+  /**
+   * 类型简介
+   */
+  remark: string;
+
+}
+
+export interface TypeForm extends BaseEntity {
+  /**
+   * 商品类型id
+   */
+  id?: string | number;
+
+  /**
+   * 类型名字
+   */
+  name?: string;
+
+  /**
+   * 类型图片
+   */
+  picture?: string;
+
+  /**
+   * 类型简介
+   */
+  remark?: string;
+
+}
+
+export interface TypeQuery extends PageQuery {
+
+  /**
+   * 类型名字
+   */
+  name?: string;
+
+  /**
+   * 类型图片
+   */
+  picture?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/commodity/typeTheme/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { TypeThemeVO, TypeThemeForm, TypeThemeQuery } from '@/api/commodity/typeTheme/types';
+
+/**
+ * 查询服务产品-分类-主题列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listTypeTheme = (query?: TypeThemeQuery): AxiosPromise<TypeThemeVO[]> => {
+  return request({
+    url: '/commodity/typeTheme/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询服务产品-分类-主题详细
+ * @param id
+ */
+export const getTypeTheme = (id: string | number): AxiosPromise<TypeThemeVO> => {
+  return request({
+    url: '/commodity/typeTheme/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增服务产品-分类-主题
+ * @param data
+ */
+export const addTypeTheme = (data: TypeThemeForm) => {
+  return request({
+    url: '/commodity/typeTheme',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改服务产品-分类-主题
+ * @param data
+ */
+export const updateTypeTheme = (data: TypeThemeForm) => {
+  return request({
+    url: '/commodity/typeTheme',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除服务产品-分类-主题
+ * @param id
+ */
+export const delTypeTheme = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/commodity/typeTheme/' + id,
+    method: 'delete'
+  });
+};

+ 96 - 0
src/api/commodity/typeTheme/types.ts

@@ -0,0 +1,96 @@
+export interface TypeThemeVO {
+  /**
+   * 服务产品分类-主题id
+   */
+  id: string | number;
+
+  /**
+   * 父级id
+   */
+  parentId: string | number;
+
+  /**
+   * 名字
+   */
+  name: string;
+
+  /**
+   * 图片
+   */
+  picture: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface TypeThemeForm extends BaseEntity {
+  /**
+   * 服务产品分类-主题id
+   */
+  id?: string | number;
+
+  /**
+   * 父级id
+   */
+  parentId?: string | number;
+
+  /**
+   * 名字
+   */
+  name?: string;
+
+  /**
+   * 图片
+   */
+  picture?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface TypeThemeQuery extends PageQuery {
+
+  /**
+   * 父级id
+   */
+  parentId?: string | number;
+
+  /**
+   * 名字
+   */
+  name?: string;
+
+  /**
+   * 图片
+   */
+  picture?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: 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'
+  });
+}

+ 70 - 0
src/api/member/growthRule/index.ts

@@ -0,0 +1,70 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { GrowthRuleVO, GrowthRuleForm, GrowthRuleQuery } from '@/api/member/growthRule/types';
+
+/**
+ * 查询成长规则列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listGrowthRule = (query?: GrowthRuleQuery): AxiosPromise<GrowthRuleVO[]> => {
+  return request({
+    url: '/member/growthRule/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询成长规则详细
+ * @param id
+ */
+export const getGrowthRule = (id: string | number): AxiosPromise<GrowthRuleVO> => {
+  return request({
+    url: '/member/growthRule/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增成长规则
+ * @param data
+ */
+export const addGrowthRule = (data: GrowthRuleForm) => {
+  return request({
+    url: '/member/growthRule',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改成长规则
+ * @param data
+ */
+export const updateGrowthRule = (data: GrowthRuleForm) => {
+  return request({
+    url: '/member/growthRule',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除成长规则
+ * @param id
+ */
+export const delGrowthRule = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/member/growthRule/' + id,
+    method: 'delete'
+  });
+};
+
+export const getGrowthRuleData = (): AxiosPromise<GrowthRuleVO> => {
+  return request({
+    url: '/member/growthRule/getGrowthRuleData',
+    method: 'get'
+  });
+};

+ 131 - 0
src/api/member/growthRule/types.ts

@@ -0,0 +1,131 @@
+export interface GrowthRuleVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 购卡服务
+   */
+  purchaseService: number;
+
+  /**
+   * 购卡次卡
+   */
+  purchaseCard: number;
+
+  /**
+   * 参与活动
+   */
+  takePartActive: number;
+
+  /**
+   * 评论
+   */
+  review: number;
+
+  /**
+   * 签到
+   */
+  signIn: number;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface GrowthRuleForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 购卡服务
+   */
+  purchaseService?: number;
+
+  /**
+   * 购卡次卡
+   */
+  purchaseCard?: number;
+
+  /**
+   * 参与活动
+   */
+  takePartActive?: number;
+
+  /**
+   * 评论
+   */
+  review?: number;
+
+  /**
+   * 签到
+   */
+  signIn?: number;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface GrowthRuleQuery extends PageQuery {
+
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 购卡服务
+   */
+  purchaseService?: number;
+
+  /**
+   * 购卡次卡
+   */
+  purchaseCard?: number;
+
+  /**
+   * 参与活动
+   */
+  takePartActive?: number;
+
+  /**
+   * 评论
+   */
+  review?: number;
+
+  /**
+   * 签到
+   */
+  signIn?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 70 - 0
src/api/member/integralRule/index.ts

@@ -0,0 +1,70 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { IntegralRuleVO, IntegralRuleForm, IntegralRuleQuery } from '@/api/member/integralRule/types';
+
+/**
+ * 查询积分规则列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listIntegralRule = (query?: IntegralRuleQuery): AxiosPromise<IntegralRuleVO[]> => {
+  return request({
+    url: '/member/integralRule/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询积分规则详细
+ * @param id
+ */
+export const getIntegralRule = (id: string | number): AxiosPromise<IntegralRuleVO> => {
+  return request({
+    url: '/member/integralRule/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增积分规则
+ * @param data
+ */
+export const addIntegralRule = (data: IntegralRuleForm) => {
+  return request({
+    url: '/member/integralRule',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改积分规则
+ * @param data
+ */
+export const updateIntegralRule = (data: IntegralRuleForm) => {
+  return request({
+    url: '/member/integralRule',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除积分规则
+ * @param id
+ */
+export const delIntegralRule = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/member/integralRule/' + id,
+    method: 'delete'
+  });
+};
+
+export const getIntegralRuleData = (): AxiosPromise<IntegralRuleVO> => {
+  return request({
+    url: '/member/integralRule/getIntegralRuleData',
+    method: 'get'
+  });
+};

+ 248 - 0
src/api/member/integralRule/types.ts

@@ -0,0 +1,248 @@
+export interface IntegralRuleVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 积分设置
+   */
+  status: string;
+
+  /**
+   * 积分有效期 0永久有效 
+   */
+  integralExpireStatus: string;
+
+  /**
+   * 积分过期时间
+   */
+  integralIndate: string;
+
+  expireYearType:string
+
+  expireMonth:number
+
+  expireDay:number
+
+  /**
+   * 积分抵扣 0 启用   1不启用
+   */
+  integralDeductionStatus: string;
+
+  /**
+   * 每使用积分
+   */
+  useIntegral: number;
+
+  /**
+   * 每使用积分抵扣
+   */
+  useIntegralDeduction: number;
+
+  /**
+   * 单次上限 0限制 1 不限制
+   */
+  singleLimitStatus: string;
+
+  /**
+   * 每次最多使用积分数
+   */
+  singleLimit: number;
+
+  /**
+   * 购卡服务
+   */
+  purchaseService: number;
+
+  /**
+   * 购卡次卡
+   */
+  purchaseCard: number;
+
+  /**
+   * 参与活动
+   */
+  takePartActive: number;
+
+  /**
+   * 评论
+   */
+  review: number;
+
+  /**
+   * 签到
+   */
+  signIn: number;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface IntegralRuleForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 积分设置
+   */
+  status?: string;
+
+  /**
+   * 积分有效期 0永久有效 
+   */
+  integralExpireStatus?: string;
+
+  /**
+   * 积分过期时间
+   */
+  integralIndate?: string;
+
+  expireYearType?:string
+
+  expireMonth?:number
+  
+  expireDay?:number
+
+  /**
+   * 积分抵扣 0 启用   1不启用
+   */
+  integralDeductionStatus?: string;
+
+  /**
+   * 每使用积分
+   */
+  useIntegral?: number;
+
+  /**
+   * 每使用积分抵扣
+   */
+  useIntegralDeduction?: number;
+
+  /**
+   * 单次上限 0限制 1 不限制
+   */
+  singleLimitStatus?: string;
+
+  /**
+   * 每次最多使用积分数
+   */
+  singleLimit?: number;
+
+  /**
+   * 购卡服务
+   */
+  purchaseService?: number;
+
+  /**
+   * 购卡次卡
+   */
+  purchaseCard?: number;
+
+  /**
+   * 参与活动
+   */
+  takePartActive?: number;
+
+  /**
+   * 评论
+   */
+  review?: number;
+
+  /**
+   * 签到
+   */
+  signIn?: number;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface IntegralRuleQuery extends PageQuery {
+
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 积分设置
+   */
+  status?: string;
+
+  /**
+   * 积分有效期 0永久有效 
+   */
+  integralExpireStatus?: string;
+
+  /**
+   * 积分过期时间
+   */
+  integralIndate?: string;
+
+  /**
+   * 积分抵扣 0 启用   1不启用
+   */
+  integralDeductionStatus?: string;
+
+  /**
+   * 每使用积分
+   */
+  useIntegral?: number;
+
+  /**
+   * 每使用积分抵扣
+   */
+  useIntegralDeduction?: number;
+
+  /**
+   * 单次上限 0限制 1 不限制
+   */
+  singleLimitStatus?: string;
+
+  /**
+   * 每次最多使用积分数
+   */
+  singleLimit?: number;
+
+  /**
+   * 购卡服务
+   */
+  purchaseService?: number;
+
+  /**
+   * 购卡次卡
+   */
+  purchaseCard?: number;
+
+  /**
+   * 参与活动
+   */
+  takePartActive?: number;
+
+  /**
+   * 评论
+   */
+  review?: number;
+
+  /**
+   * 签到
+   */
+  signIn?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/member/levelCustomBenefits/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { LevelCustomBenefitsVO, LevelCustomBenefitsForm, LevelCustomBenefitsQuery } from '@/api/member/levelCustomBenefits/types';
+
+/**
+ * 查询会员等级自定义权益列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listLevelCustomBenefits = (query?: LevelCustomBenefitsQuery): AxiosPromise<LevelCustomBenefitsVO[]> => {
+  return request({
+    url: '/member/levelCustomBenefits/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询会员等级自定义权益详细
+ * @param id
+ */
+export const getLevelCustomBenefits = (id: string | number): AxiosPromise<LevelCustomBenefitsVO> => {
+  return request({
+    url: '/member/levelCustomBenefits/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增会员等级自定义权益
+ * @param data
+ */
+export const addLevelCustomBenefits = (data: LevelCustomBenefitsForm) => {
+  return request({
+    url: '/member/levelCustomBenefits',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改会员等级自定义权益
+ * @param data
+ */
+export const updateLevelCustomBenefits = (data: LevelCustomBenefitsForm) => {
+  return request({
+    url: '/member/levelCustomBenefits',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除会员等级自定义权益
+ * @param id
+ */
+export const delLevelCustomBenefits = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/member/levelCustomBenefits/' + id,
+    method: 'delete'
+  });
+};

+ 96 - 0
src/api/member/levelCustomBenefits/types.ts

@@ -0,0 +1,96 @@
+export interface LevelCustomBenefitsVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 所属等级ID
+   */
+  levelId: string | number;
+
+  /**
+   * 权益图标URL
+   */
+  benefitLogoUrl: string;
+
+  /**
+   * 权益说明
+   */
+  benefitDescription: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface LevelCustomBenefitsForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 所属等级ID
+   */
+  levelId?: string | number;
+
+  /**
+   * 权益图标URL
+   */
+  benefitLogoUrl?: string;
+
+  /**
+   * 权益说明
+   */
+  benefitDescription?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface LevelCustomBenefitsQuery extends PageQuery {
+
+  /**
+   * 所属等级ID
+   */
+  levelId?: string | number;
+
+  /**
+   * 权益图标URL
+   */
+  benefitLogoUrl?: string;
+
+  /**
+   * 权益说明
+   */
+  benefitDescription?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 63 - 0
src/api/member/levelServiceDiscounts/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { LevelServiceDiscountsVO, LevelServiceDiscountsForm, LevelServiceDiscountsQuery } from '@/api/member/levelServiceDiscounts/types';
+
+/**
+ * 查询会员等级指定服务折扣列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listLevelServiceDiscounts = (query?: LevelServiceDiscountsQuery): AxiosPromise<LevelServiceDiscountsVO[]> => {
+  return request({
+    url: '/member/levelServiceDiscounts/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询会员等级指定服务折扣详细
+ * @param id
+ */
+export const getLevelServiceDiscounts = (id: string | number): AxiosPromise<LevelServiceDiscountsVO> => {
+  return request({
+    url: '/member/levelServiceDiscounts/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增会员等级指定服务折扣
+ * @param data
+ */
+export const addLevelServiceDiscounts = (data: LevelServiceDiscountsForm) => {
+  return request({
+    url: '/member/levelServiceDiscounts',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改会员等级指定服务折扣
+ * @param data
+ */
+export const updateLevelServiceDiscounts = (data: LevelServiceDiscountsForm) => {
+  return request({
+    url: '/member/levelServiceDiscounts',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除会员等级指定服务折扣
+ * @param id
+ */
+export const delLevelServiceDiscounts = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/member/levelServiceDiscounts/' + id,
+    method: 'delete'
+  });
+};

+ 126 - 0
src/api/member/levelServiceDiscounts/types.ts

@@ -0,0 +1,126 @@
+export interface LevelServiceDiscountsVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 所属等级ID
+   */
+  levelId: string | number;
+
+  /**
+   * 服务名称
+   */
+  serviceName: string;
+
+  /**
+   * 服务折扣(例如95.00表示9.5折)
+   */
+  discount: number;
+
+  /**
+   * 该服务是否可使用会员余额支付
+   */
+  canUseBalancePaymentService: number;
+
+  /**
+   * 服务图标URL
+   */
+  serviceLogoUrl: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface LevelServiceDiscountsForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 所属等级ID
+   */
+  levelId?: string | number;
+
+  /**
+   * 服务名称
+   */
+  serviceName?: string;
+
+  /**
+   * 服务折扣(例如95.00表示9.5折)
+   */
+  discount?: number;
+
+  /**
+   * 该服务是否可使用会员余额支付
+   */
+  canUseBalancePaymentService?: number;
+
+  /**
+   * 服务图标URL
+   */
+  serviceLogoUrl?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface LevelServiceDiscountsQuery extends PageQuery {
+
+  /**
+   * 所属等级ID
+   */
+  levelId?: string | number;
+
+  /**
+   * 服务名称
+   */
+  serviceName?: string;
+
+  /**
+   * 服务折扣(例如95.00表示9.5折)
+   */
+  discount?: number;
+
+  /**
+   * 该服务是否可使用会员余额支付
+   */
+  canUseBalancePaymentService?: number;
+
+  /**
+   * 服务图标URL
+   */
+  serviceLogoUrl?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 71 - 0
src/api/member/memberInfo/index.ts

@@ -0,0 +1,71 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MemberInfoVO, MemberInfoForm, MemberInfoQuery, AddTagParams } from '@/api/member/memberInfo/types';
+
+/**
+ * 查询会员信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMemberInfo = (query?: MemberInfoQuery): AxiosPromise<MemberInfoVO[]> => {
+  return request({
+    url: '/member/memberInfo/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询会员信息详细
+ * @param id
+ */
+export const getMemberInfo = (id: string | number): AxiosPromise<MemberInfoVO> => {
+  return request({
+    url: '/member/memberInfo/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增会员信息
+ * @param data
+ */
+export const addMemberInfo = (data: MemberInfoForm) => {
+  return request({
+    url: '/member/memberInfo',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改会员信息
+ * @param data
+ */
+export const updateMemberInfo = (data: MemberInfoForm) => {
+  return request({
+    url: '/member/memberInfo',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除会员信息
+ * @param id
+ */
+export const delMemberInfo = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/member/memberInfo/' + id,
+    method: 'delete'
+  });
+};
+
+export const addTag = (params: AddTagParams) => {
+  return request({
+    url: '/member/memberInfo/addTag', // 建议的接口路径
+    method: 'post',
+    data: params // 
+  });
+};

+ 169 - 0
src/api/member/memberInfo/types.ts

@@ -0,0 +1,169 @@
+import { MemberTagVO } from '@/api/member/memberTag/types';
+export interface MemberInfoVO {
+  /**
+   * ID
+   */
+  infoId: string | number;
+
+  /**
+   * 客户姓名
+   */
+  memberName: string;
+
+  memberNickName: string;
+
+  source: string;
+
+  /**
+   * 国家区号
+   */
+  countryCode: string;
+
+  /**
+   * 手机号
+   */
+  phonenumber: string;
+
+  /**
+   * 性别(0 男 1 女)
+   */
+  sex: string;
+
+  /**
+   * 客户邮箱
+   */
+  email: string;
+
+  /**
+   * 客户生日
+   */
+  birthDay: string;
+
+  /**
+   * 客户备注
+   */
+  remark: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  tags: MemberTagVO[];
+
+  tagIdIds: any;
+
+  tagId: any;
+}
+
+// 定义请求参数类型
+export interface AddTagParams {
+  infoIds: (string | number)[];
+  tagIds: (string | number)[];
+}
+
+export interface MemberInfoForm extends BaseEntity {
+  /**
+   * ID
+   */
+  infoId?: string | number;
+
+  /**
+   * 客户姓名
+   */
+  memberName?: string;
+
+  memberNickName?: string;
+
+  source?: string;
+
+  /**
+   * 国家区号
+   */
+  countryCode?: string;
+
+  /**
+   * 手机号
+   */
+  phonenumber?: string;
+
+  /**
+   * 性别(0 男 1 女)
+   */
+  sex?: string;
+
+  /**
+   * 客户邮箱
+   */
+  email?: string;
+
+  /**
+   * 客户生日
+   */
+  birthDay?: string;
+
+  /**
+   * 客户备注
+   */
+  remark?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  tagIds?: string[];
+}
+
+export interface MemberInfoQuery extends PageQuery {
+  /**
+   * 客户姓名
+   */
+  memberName?: string;
+
+  memberNickName?: string;
+
+  source?: string;
+
+  /**
+   * 国家区号
+   */
+  countryCode?: string;
+
+  /**
+   * 手机号
+   */
+  phonenumber?: string;
+
+  /**
+   * 性别(0 男 1 女)
+   */
+  sex?: string;
+
+  /**
+   * 客户邮箱
+   */
+  email?: string;
+
+  /**
+   * 客户生日
+   */
+  birthDay?: string;
+
+  /**
+   * 客户标签
+   */
+  memberTag?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  remark: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 63 - 0
src/api/member/memberLevels/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MemberLevelsVO, MemberLevelsForm, MemberLevelsQuery } from '@/api/member/memberLevels/types';
+
+/**
+ * 查询会员等级列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMemberLevels = (query?: MemberLevelsQuery): AxiosPromise<MemberLevelsVO[]> => {
+  return request({
+    url: '/member/memberLevels/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询会员等级详细
+ * @param id
+ */
+export const getMemberLevels = (id: string | number): AxiosPromise<MemberLevelsVO> => {
+  return request({
+    url: '/member/memberLevels/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增会员等级
+ * @param data
+ */
+export const addMemberLevels = (data: MemberLevelsForm) => {
+  return request({
+    url: '/member/memberLevels',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改会员等级
+ * @param data
+ */
+export const updateMemberLevels = (data: MemberLevelsForm) => {
+  return request({
+    url: '/member/memberLevels',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除会员等级
+ * @param id
+ */
+export const delMemberLevels = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/member/memberLevels/' + id,
+    method: 'delete'
+  });
+};

+ 215 - 0
src/api/member/memberLevels/types.ts

@@ -0,0 +1,215 @@
+export interface MemberLevelsVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  levelSort: number; // 等级排序
+
+  /**
+   * 等级名称
+   */
+  levelName: string;
+
+  /**
+   * 等级图标URL (建议尺寸100x100)
+   */
+  levelIconUrl: string;
+
+  /**
+   * 等级背景颜色 (HEX格式,如#RRGGBB)
+   */
+  backgroundColor: string;
+
+  /**
+   * 有效期(月),0或NULL表示永久有效
+   */
+  validityPeriodMonths: number;
+
+  /**
+   * 升级所需成长值
+   */
+  upgradeGrowthValue: number;
+
+  /**
+   * 保级所需成长值
+   */
+  retentionGrowthValue: number;
+
+  /**
+   * 是否享受所有服务 (0=否, 1=是)
+   */
+  enjoyAllServices: string;
+
+  /**
+   * 通用折扣(例如95.00表示9.5折,100.00表示无折扣)
+   */
+  generalDiscount: number;
+
+  /**
+   * 是否可使用会员余额支付 (0=否, 1=是)
+   */
+  canUseBalancePayment: string;
+
+  /**
+   * 通用权益描述("logo"旁的输入框内容)
+   */
+  benefitDescriptionGeneral: string;
+
+  /**
+   * 等级详细说明(富文本内容)
+   */
+  levelDescription: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface MemberLevelsForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  levelSort?: number; // 等级排序
+
+  /**
+   * 等级名称
+   */
+  levelName?: string;
+
+  /**
+   * 等级图标URL (建议尺寸100x100)
+   */
+  levelIconUrl?: string;
+
+  /**
+   * 等级背景颜色 (HEX格式,如#RRGGBB)
+   */
+  backgroundColor?: string;
+
+  /**
+   * 有效期(月),0或NULL表示永久有效
+   */
+  validityPeriodMonths?: number;
+
+  /**
+   * 升级所需成长值
+   */
+  upgradeGrowthValue?: number;
+
+  /**
+   * 保级所需成长值
+   */
+  retentionGrowthValue?: number;
+
+  /**
+   * 是否享受所有服务 (0=否, 1=是)
+   */
+  enjoyAllServices?: string;
+
+  /**
+   * 通用折扣(例如95.00表示9.5折,100.00表示无折扣)
+   */
+  generalDiscount?: number;
+
+  /**
+   * 是否可使用会员余额支付 (0=否, 1=是)
+   */
+  canUseBalancePayment?: string;
+
+  /**
+   * 通用权益描述("logo"旁的输入框内容)
+   */
+  benefitDescriptionGeneral?: string;
+
+  /**
+   * 等级详细说明(富文本内容)
+   */
+  levelDescription?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface MemberLevelsQuery extends PageQuery {
+  levelSort?: number; // 等级排序
+  /**
+   * 等级名称
+   */
+  levelName?: string;
+
+  /**
+   * 等级图标URL (建议尺寸100x100)
+   */
+  levelIconUrl?: string;
+
+  /**
+   * 等级背景颜色 (HEX格式,如#RRGGBB)
+   */
+  backgroundColor?: string;
+
+  /**
+   * 有效期(月),0或NULL表示永久有效
+   */
+  validityPeriodMonths?: number;
+
+  /**
+   * 升级所需成长值
+   */
+  upgradeGrowthValue?: number;
+
+  /**
+   * 保级所需成长值
+   */
+  retentionGrowthValue?: number;
+
+  /**
+   * 是否享受所有服务 (0=否, 1=是)
+   */
+  enjoyAllServices?: string;
+
+  /**
+   * 通用折扣(例如95.00表示9.5折,100.00表示无折扣)
+   */
+  generalDiscount?: number;
+
+  /**
+   * 是否可使用会员余额支付 (0=否, 1=是)
+   */
+  canUseBalancePayment?: string;
+
+  /**
+   * 通用权益描述("logo"旁的输入框内容)
+   */
+  benefitDescriptionGeneral?: string;
+
+  /**
+   * 等级详细说明(富文本内容)
+   */
+  levelDescription?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 69 - 0
src/api/member/memberTag/index.ts

@@ -0,0 +1,69 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MemberTagVO, MemberTagForm, MemberTagQuery } from '@/api/member/memberTag/types';
+
+/**
+ * 查询会员标签列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMemberTag = (query?: MemberTagQuery): AxiosPromise<MemberTagVO[]> => {
+  return request({
+    url: '/member/memberTag/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询会员标签详细
+ * @param id
+ */
+export const getMemberTag = (id: string | number): AxiosPromise<MemberTagVO> => {
+  return request({
+    url: '/member/memberTag/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增会员标签
+ * @param data
+ */
+export const addMemberTag = (data: MemberTagForm) => {
+  return request({
+    url: '/member/memberTag',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改会员标签
+ * @param data
+ */
+export const updateMemberTag = (data: MemberTagForm) => {
+  return request({
+    url: '/member/memberTag',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除会员标签
+ * @param id
+ */
+export const delMemberTag = (
+  id: string | number | Array<string | number>,
+  type: string | number // 新增 type 参数
+) => {
+  return request({
+    url: '/member/memberTag/' + id,
+    method: 'delete',
+    params: {
+      type: type // 添加 type 参数
+    }
+  });
+};

+ 111 - 0
src/api/member/memberTag/types.ts

@@ -0,0 +1,111 @@
+export interface MemberTagVO {
+  /**
+   * ID
+   */
+  tagId: string | number;
+
+  /**
+   * 标签名
+   */
+  tagName: string;
+
+  /**
+   * 标签类型
+   */
+  tagType: string;
+
+  /**
+   * 所属门店
+   */
+  storeId: string | number;
+
+  /**
+   * 标签条件
+   */
+  tagCondition: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface MemberTagForm extends BaseEntity {
+  /**
+   * ID
+   */
+  tagId?: string | number;
+
+  /**
+   * 标签名
+   */
+  tagName?: string;
+
+  /**
+   * 标签类型
+   */
+  tagType?: string;
+
+  /**
+   * 所属门店
+   */
+  storeId?: string | number;
+
+  /**
+   * 标签条件
+   */
+  tagCondition?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface MemberTagQuery extends PageQuery {
+  /**
+   * ID
+   */
+  tagId?: string | number;
+
+  /**
+   * 标签名
+   */
+  tagName?: string;
+
+  /**
+   * 标签类型
+   */
+  tagType?: string;
+
+  /**
+   * 所属门店
+   */
+  storeId?: string | number;
+
+  /**
+   * 标签条件
+   */
+  tagCondition?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 70 - 0
src/api/member/rechargeSetting/index.ts

@@ -0,0 +1,70 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { RechargeSettingVO, RechargeSettingForm, RechargeSettingQuery } from '@/api/member/rechargeSetting/types';
+
+/**
+ * 查询充值设置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listRechargeSetting = (query?: RechargeSettingQuery): AxiosPromise<RechargeSettingVO[]> => {
+  return request({
+    url: '/member/rechargeSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询充值设置详细
+ * @param id
+ */
+export const getRechargeSetting = (id: string | number): AxiosPromise<RechargeSettingVO> => {
+  return request({
+    url: '/member/rechargeSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增充值设置
+ * @param data
+ */
+export const addRechargeSetting = (data: RechargeSettingForm) => {
+  return request({
+    url: '/member/rechargeSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改充值设置
+ * @param data
+ */
+export const updateRechargeSetting = (data: RechargeSettingForm) => {
+  return request({
+    url: '/member/rechargeSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除充值设置
+ * @param id
+ */
+export const delRechargeSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/member/rechargeSetting/' + id,
+    method: 'delete'
+  });
+};
+
+export const getRechargeSettingData = (): AxiosPromise<RechargeSettingVO> => {
+  return request({
+    url: '/member/rechargeSetting/getRechargeSettingData',
+    method: 'get'
+  });
+};

+ 266 - 0
src/api/member/rechargeSetting/types.ts

@@ -0,0 +1,266 @@
+export interface RechargeSettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+  /**
+   * 微信按充值规则充值(0支持 1不支持)
+   */
+  wxRechargeRule: string;
+
+  /**
+   * 微信自定义金额充值(0支持 1不支持)
+   */
+  wxCustomAmount: string;
+
+  /**
+   * 微信自定义金额最少充值
+   */
+  wxCustomMin: number;
+
+  /**
+   * 微信自定义金额最大充值
+   */
+  wxCustomMax: number;
+
+  /**
+   * 后台按充值规则充值(0支持 1不支持)
+   */
+  backRechargeRule: string;
+
+  /**
+   * 后台自定义金额充值(0支持 1不支持)
+   */
+  backCustomAmount: string;
+
+  /**
+   * 后台自定义金额最少充值
+   */
+  backCustomMin: number;
+
+  /**
+   * 后台自定义金额最大充值
+   */
+  backCustomMax: number;
+
+  /**
+   * 后台会员余额提现(0开启 1关闭)
+   */
+  memberBalanceWithdraw: string;
+
+  /**
+   * 后台会员余额独立支付(0开启 1关闭)
+   */
+  memberBalancePay: string;
+
+  /**
+   * 微信储值卡充值(0支持 1不支持)
+   */
+  wxCardRecharge: string;
+
+  /**
+   * 后台储值卡充值(0支持 1不支持)
+   */
+  backCardRecharge: string;
+
+  /**
+   * 后台储值卡提现(0开启 1关闭)
+   */
+  backCardWithdraw: string;
+
+  /**
+   * 余额提现人员
+   */
+  balanceWithdrawStaff?: string;
+
+  /**
+   * 储值卡提现人员
+   */
+  cardWithdrawStaff?: string;
+
+}
+
+export interface RechargeSettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+  /**
+   * 微信按充值规则充值(0支持 1不支持)
+   */
+  wxRechargeRule?: string;
+
+  /**
+   * 微信自定义金额充值(0支持 1不支持)
+   */
+  wxCustomAmount?: string;
+
+  /**
+   * 微信自定义金额最少充值
+   */
+  wxCustomMin?: number;
+
+  /**
+   * 微信自定义金额最大充值
+   */
+  wxCustomMax?: number;
+
+  /**
+   * 后台按充值规则充值(0支持 1不支持)
+   */
+  backRechargeRule?: string;
+
+  /**
+   * 后台自定义金额充值(0支持 1不支持)
+   */
+  backCustomAmount?: string;
+
+  /**
+   * 后台自定义金额最少充值
+   */
+  backCustomMin?: number;
+
+  /**
+   * 后台自定义金额最大充值
+   */
+  backCustomMax?: number;
+
+  /**
+   * 后台会员余额提现(0开启 1关闭)
+   */
+  memberBalanceWithdraw?: string;
+
+  /**
+   * 后台会员余额独立支付(0开启 1关闭)
+   */
+  memberBalancePay?: string;
+
+  /**
+   * 微信储值卡充值(0支持 1不支持)
+   */
+  wxCardRecharge?: string;
+
+  /**
+   * 后台储值卡充值(0支持 1不支持)
+   */
+  backCardRecharge?: string;
+
+  /**
+   * 后台储值卡提现(0开启 1关闭)
+   */
+  backCardWithdraw?: string;
+
+  /**
+   * 余额提现人员
+   */
+  balanceWithdrawStaff?: string;
+
+  /**
+   * 储值卡提现人员
+   */
+  cardWithdrawStaff?: string;
+
+}
+
+export interface RechargeSettingQuery extends PageQuery {
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 微信按充值规则充值(0支持 1不支持)
+   */
+  wxRechargeRule?: string;
+
+  /**
+   * 微信自定义金额充值(0支持 1不支持)
+   */
+  wxCustomAmount?: string;
+
+  /**
+   * 微信自定义金额最少充值
+   */
+  wxCustomMin?: number;
+
+  /**
+   * 微信自定义金额最大充值
+   */
+  wxCustomMax?: number;
+
+  /**
+   * 后台按充值规则充值(0支持 1不支持)
+   */
+  backRechargeRule?: string;
+
+  /**
+   * 后台自定义金额充值(0支持 1不支持)
+   */
+  backCustomAmount?: string;
+
+  /**
+   * 后台自定义金额最少充值
+   */
+  backCustomMin?: number;
+
+  /**
+   * 后台自定义金额最大充值
+   */
+  backCustomMax?: number;
+
+  /**
+   * 后台会员余额提现(0开启 1关闭)
+   */
+  memberBalanceWithdraw?: string;
+
+  /**
+   * 后台会员余额独立支付(0开启 1关闭)
+   */
+  memberBalancePay?: string;
+
+  /**
+   * 微信储值卡充值(0支持 1不支持)
+   */
+  wxCardRecharge?: string;
+
+  /**
+   * 后台储值卡充值(0支持 1不支持)
+   */
+  backCardRecharge?: string;
+
+  /**
+   * 后台储值卡提现(0开启 1关闭)
+   */
+  backCardWithdraw?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 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/commentItemSetting/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ItemSettingVO, ItemSettingForm, ItemSettingQuery } from '@/api/setting/commentItemSetting/types';
+
+/**
+ * 查询评论项配置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listItemSetting = (query?: ItemSettingQuery): AxiosPromise<ItemSettingVO[]> => {
+  return request({
+    url: '/system/commentItemSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询评论项配置详细
+ * @param id
+ */
+export const getItemSetting = (id: string | number): AxiosPromise<ItemSettingVO> => {
+  return request({
+    url: '/system/commentItemSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增评论项配置
+ * @param data
+ */
+export const addItemSetting = (data: ItemSettingForm) => {
+  return request({
+    url: '/system/commentItemSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改评论项配置
+ * @param data
+ */
+export const updateItemSetting = (data: ItemSettingForm) => {
+  return request({
+    url: '/system/commentItemSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除评论项配置
+ * @param id
+ */
+export const delItemSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/commentItemSetting/' + id,
+    method: 'delete'
+  });
+};

+ 126 - 0
src/api/setting/commentItemSetting/types.ts

@@ -0,0 +1,126 @@
+export interface ItemSettingVO {
+  /**
+   * 主键id
+   */
+  id: string | number;
+
+  /**
+   * 评论项名称
+   */
+  commentItemName: string;
+
+  /**
+   * 评论项类型
+   */
+  commentItemType: string;
+
+  /**
+   * 是否必填
+   */
+  isNull: string;
+
+  /**
+   * 协作环节
+   */
+  collaboration: string;
+
+  /**
+   * 排序
+   */
+  sort: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface ItemSettingForm extends BaseEntity {
+  /**
+   * 主键id
+   */
+  id?: string | number;
+
+  /**
+   * 评论项名称
+   */
+  commentItemName?: string;
+
+  /**
+   * 评论项类型
+   */
+  commentItemType?: string;
+
+  /**
+   * 是否必填
+   */
+  isNull?: string;
+
+  /**
+   * 协作环节
+   */
+  collaboration?: string;
+
+  /**
+   * 排序
+   */
+  sort?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface ItemSettingQuery extends PageQuery {
+
+  /**
+   * 评论项名称
+   */
+  commentItemName?: string;
+
+  /**
+   * 评论项类型
+   */
+  commentItemType?: string;
+
+  /**
+   * 是否必填
+   */
+  isNull?: string;
+
+  /**
+   * 协作环节
+   */
+  collaboration?: string;
+
+  /**
+   * 排序
+   */
+  sort?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

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

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SettingVO, SettingForm, SettingQuery } from '@/api/setting/commentSetting/types';
+
+/**
+ * 查询评论设置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSetting = (query?: SettingQuery): AxiosPromise<SettingVO[]> => {
+  return request({
+    url: '/system/commentSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询评论设置详细
+ * @param id
+ */
+export const getSetting = (id: string | number): AxiosPromise<SettingVO> => {
+  return request({
+    url: '/system/commentSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增评论设置
+ * @param data
+ */
+export const addSetting = (data: SettingForm) => {
+  return request({
+    url: '/system/commentSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改评论设置
+ * @param data
+ */
+export const updateSetting = (data: SettingForm) => {
+  return request({
+    url: '/system/commentSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除评论设置
+ * @param id
+ */
+export const delSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/commentSetting/' + id,
+    method: 'delete'
+  });
+};

+ 126 - 0
src/api/setting/commentSetting/types.ts

@@ -0,0 +1,126 @@
+export interface SettingVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 是否启用评论功能
+   */
+  isStartFunction: string;
+
+  /**
+   * 是否启用强制评论
+   */
+  isStartForce: string;
+
+  /**
+   * 是否启用通知
+   */
+  isStartNotice: string;
+
+  /**
+   * 差评发送最大触发时间(min)
+   */
+  negativeNoticeLimit: string;
+
+  /**
+   * 通知对象(仅限于创建者,品牌管理员,店长,店员)
+   */
+  roleIds: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface SettingForm extends BaseEntity {
+  /**
+   * ID
+   */
+  id?: string | number;
+
+  /**
+   * 是否启用评论功能
+   */
+  isStartFunction?: string;
+
+  /**
+   * 是否启用强制评论
+   */
+  isStartForce?: string;
+
+  /**
+   * 是否启用通知
+   */
+  isStartNotice?: string;
+
+  /**
+   * 差评发送最大触发时间(min)
+   */
+  negativeNoticeLimit?: string;
+
+  /**
+   * 通知对象(仅限于创建者,品牌管理员,店长,店员)
+   */
+  roleIds?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface SettingQuery extends PageQuery {
+
+  /**
+   * 是否启用评论功能
+   */
+  isStartFunction?: string;
+
+  /**
+   * 是否启用强制评论
+   */
+  isStartForce?: string;
+
+  /**
+   * 是否启用通知
+   */
+  isStartNotice?: string;
+
+  /**
+   * 差评发送最大触发时间(min)
+   */
+  negativeNoticeLimit?: string;
+
+  /**
+   * 通知对象(仅限于创建者,品牌管理员,店长,店员)
+   */
+  roleIds?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

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

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { LadderRuleVO, LadderRuleForm, LadderRuleQuery } from '@/api/setting/ladderRule/types';
+
+/**
+ * 查询退单阶梯规则列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listLadderRule = (query?: LadderRuleQuery): AxiosPromise<LadderRuleVO[]> => {
+  return request({
+    url: '/system/ladderRule/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询退单阶梯规则详细
+ * @param id
+ */
+export const getLadderRule = (id: string | number): AxiosPromise<LadderRuleVO> => {
+  return request({
+    url: '/system/ladderRule/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增退单阶梯规则
+ * @param data
+ */
+export const addLadderRule = (data: LadderRuleForm) => {
+  return request({
+    url: '/system/ladderRule',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改退单阶梯规则
+ * @param data
+ */
+export const updateLadderRule = (data: LadderRuleForm) => {
+  return request({
+    url: '/system/ladderRule',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除退单阶梯规则
+ * @param id
+ */
+export const delLadderRule = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/ladderRule/' + id,
+    method: 'delete'
+  });
+};

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

@@ -0,0 +1,111 @@
+export interface LadderRuleVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 预约配置ID,外键关联reservation_config.id
+   */
+  reservationId: string | number;
+
+  /**
+   * 提前小时数(如48、24、12)
+   */
+  hoursBefore: number;
+
+  /**
+   * 退款比例(如100.00表示100%,90.00表示90%)
+   */
+  refundPercentage: number;
+
+  /**
+   * 排序(数值越小越靠前)
+   */
+  sort: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface LadderRuleForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 预约配置ID,外键关联reservation_config.id
+   */
+  reservationId?: string | number;
+
+  /**
+   * 提前小时数(如48、24、12)
+   */
+  hoursBefore?: number;
+
+  /**
+   * 退款比例(如100.00表示100%,90.00表示90%)
+   */
+  refundPercentage?: number;
+
+  /**
+   * 排序(数值越小越靠前)
+   */
+  sort?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface LadderRuleQuery extends PageQuery {
+
+  /**
+   * 预约配置ID,外键关联reservation_config.id
+   */
+  reservationId?: string | number;
+
+  /**
+   * 提前小时数(如48、24、12)
+   */
+  hoursBefore?: number;
+
+  /**
+   * 退款比例(如100.00表示100%,90.00表示90%)
+   */
+  refundPercentage?: number;
+
+  /**
+   * 排序(数值越小越靠前)
+   */
+  sort?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

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

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { PlatformSettingVO, PlatformSettingForm, PlatformSettingQuery } from '@/api/setting/platformSetting/types';
+
+/**
+ * 查询平台设置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listPlatformSetting = (query?: PlatformSettingQuery): AxiosPromise<PlatformSettingVO[]> => {
+  return request({
+    url: '/system/platformSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询平台设置详细
+ * @param id
+ */
+export const getPlatformSetting = (id: string | number): AxiosPromise<PlatformSettingVO> => {
+  return request({
+    url: '/system/platformSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增平台设置
+ * @param data
+ */
+export const addPlatformSetting = (data: PlatformSettingForm) => {
+  return request({
+    url: '/system/platformSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改平台设置
+ * @param data
+ */
+export const updatePlatformSetting = (data: PlatformSettingForm) => {
+  return request({
+    url: '/system/platformSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除平台设置
+ * @param id
+ */
+export const delPlatformSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/platformSetting/' + id,
+    method: 'delete'
+  });
+};

+ 96 - 0
src/api/setting/platformSetting/types.ts

@@ -0,0 +1,96 @@
+export interface PlatformSettingVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 平台名称(微信、抖音、小红书、美团)
+   */
+  name: string;
+
+  /**
+   * 平台代码(wechat、douyin、xiaohongshu、meituan)
+   */
+  code: string;
+
+  /**
+   * 平台图标
+   */
+  icon: string;
+
+  /**
+   * 排序
+   */
+  sort: number;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface PlatformSettingForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 平台名称(微信、抖音、小红书、美团)
+   */
+  name?: string;
+
+  /**
+   * 平台代码(wechat、douyin、xiaohongshu、meituan)
+   */
+  code?: string;
+
+  /**
+   * 平台图标
+   */
+  icon?: string;
+
+  /**
+   * 排序
+   */
+  sort?: number;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface PlatformSettingQuery extends PageQuery {
+
+  /**
+   * 平台名称(微信、抖音、小红书、美团)
+   */
+  name?: string;
+
+  /**
+   * 平台代码(wechat、douyin、xiaohongshu、meituan)
+   */
+  code?: string;
+
+  /**
+   * 平台图标
+   */
+  icon?: string;
+
+  /**
+   * 排序
+   */
+  sort?: number;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

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

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ReservationSettingVO, ReservationSettingForm, ReservationSettingQuery } from '@/api/setting/reservationSetting/types';
+
+/**
+ * 查询预约配置主表列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listReservationSetting = (query?: ReservationSettingQuery): AxiosPromise<ReservationSettingVO[]> => {
+  return request({
+    url: '/system/reservationSetting/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询预约配置主表详细
+ * @param id
+ */
+export const getReservationSetting = (id: string | number): AxiosPromise<ReservationSettingVO> => {
+  return request({
+    url: '/system/reservationSetting/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增预约配置主表
+ * @param data
+ */
+export const addReservationSetting = (data: ReservationSettingForm) => {
+  return request({
+    url: '/system/reservationSetting',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改预约配置主表
+ * @param data
+ */
+export const updateReservationSetting = (data: ReservationSettingForm) => {
+  return request({
+    url: '/system/reservationSetting',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除预约配置主表
+ * @param id
+ */
+export const delReservationSetting = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/reservationSetting/' + id,
+    method: 'delete'
+  });
+};

+ 276 - 0
src/api/setting/reservationSetting/types.ts

@@ -0,0 +1,276 @@
+export interface ReservationSettingVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 平台ID,外键关联platform.id
+   */
+  platformId: string | number;
+
+  /**
+   * 预约费用开关:0-不需要,1-需要
+   */
+  feeEnabled: number;
+
+  /**
+   * 未支付订单自动取消时间(分钟)
+   */
+  autoCancelMinutes: number;
+
+  /**
+   * 费用模式:full-收取全款, percentage-订单比例, fixed-固定金额
+   */
+  feeMode: string;
+
+  /**
+   * 订单比例(如10.00表示10%)
+   */
+  feePercentage: number;
+
+  /**
+   * 固定金额(如0.01)
+   */
+  feeFixedAmount: number;
+
+  /**
+   * 自助改期开关:0-不允许,1-允许
+   */
+  rescheduleEnabled: number;
+
+  /**
+   * 改期最大次数(NULL表示不限次数)
+   */
+  rescheduleMaxTimes: number;
+
+  /**
+   * 改期时间类型:anytime-到期前都可修改, before-特定时间前
+   */
+  rescheduleTimeType: string;
+
+  /**
+   * 可改期时间(小时,如1小时)
+   */
+  rescheduleBeforeHours: number;
+
+  /**
+   * 优惠权益限制:allow-允许改期, disallow-不允许改期
+   */
+  rescheduleLimitCondition: string;
+
+  /**
+   * 改期时提醒用户:0-不提醒,1-提醒
+   */
+  rescheduleReminder: number;
+
+  /**
+   * 退单模式:disallow-不允许, ladder-阶梯退款, full-全额退款
+   */
+  refundMode: string;
+
+  /**
+   * 不允许退单的时间(小时,如12小时内)
+   */
+  refundDisallowHours: number;
+
+  /**
+   * 改期后退单:disallow-不允许, allow-允许
+   */
+  afterRescheduleRefund: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface ReservationSettingForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 平台ID,外键关联platform.id
+   */
+  platformId?: string | number;
+
+  /**
+   * 预约费用开关:0-不需要,1-需要
+   */
+  feeEnabled?: number;
+
+  /**
+   * 未支付订单自动取消时间(分钟)
+   */
+  autoCancelMinutes?: number;
+
+  /**
+   * 费用模式:full-收取全款, percentage-订单比例, fixed-固定金额
+   */
+  feeMode?: string;
+
+  /**
+   * 订单比例(如10.00表示10%)
+   */
+  feePercentage?: number;
+
+  /**
+   * 固定金额(如0.01)
+   */
+  feeFixedAmount?: number;
+
+  /**
+   * 自助改期开关:0-不允许,1-允许
+   */
+  rescheduleEnabled?: number;
+
+  /**
+   * 改期最大次数(NULL表示不限次数)
+   */
+  rescheduleMaxTimes?: number;
+
+  /**
+   * 改期时间类型:anytime-到期前都可修改, before-特定时间前
+   */
+  rescheduleTimeType?: string;
+
+  /**
+   * 可改期时间(小时,如1小时)
+   */
+  rescheduleBeforeHours?: number;
+
+  /**
+   * 优惠权益限制:allow-允许改期, disallow-不允许改期
+   */
+  rescheduleLimitCondition?: string;
+
+  /**
+   * 改期时提醒用户:0-不提醒,1-提醒
+   */
+  rescheduleReminder?: number;
+
+  /**
+   * 退单模式:disallow-不允许, ladder-阶梯退款, full-全额退款
+   */
+  refundMode?: string;
+
+  /**
+   * 不允许退单的时间(小时,如12小时内)
+   */
+  refundDisallowHours?: number;
+
+  /**
+   * 改期后退单:disallow-不允许, allow-允许
+   */
+  afterRescheduleRefund?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface ReservationSettingQuery extends PageQuery {
+
+  /**
+   * 平台ID,外键关联platform.id
+   */
+  platformId?: string | number;
+
+  /**
+   * 预约费用开关:0-不需要,1-需要
+   */
+  feeEnabled?: number;
+
+  /**
+   * 未支付订单自动取消时间(分钟)
+   */
+  autoCancelMinutes?: number;
+
+  /**
+   * 费用模式:full-收取全款, percentage-订单比例, fixed-固定金额
+   */
+  feeMode?: string;
+
+  /**
+   * 订单比例(如10.00表示10%)
+   */
+  feePercentage?: number;
+
+  /**
+   * 固定金额(如0.01)
+   */
+  feeFixedAmount?: number;
+
+  /**
+   * 自助改期开关:0-不允许,1-允许
+   */
+  rescheduleEnabled?: number;
+
+  /**
+   * 改期最大次数(NULL表示不限次数)
+   */
+  rescheduleMaxTimes?: number;
+
+  /**
+   * 改期时间类型:anytime-到期前都可修改, before-特定时间前
+   */
+  rescheduleTimeType?: string;
+
+  /**
+   * 可改期时间(小时,如1小时)
+   */
+  rescheduleBeforeHours?: number;
+
+  /**
+   * 优惠权益限制:allow-允许改期, disallow-不允许改期
+   */
+  rescheduleLimitCondition?: string;
+
+  /**
+   * 改期时提醒用户:0-不提醒,1-提醒
+   */
+  rescheduleReminder?: number;
+
+  /**
+   * 退单模式:disallow-不允许, ladder-阶梯退款, full-全额退款
+   */
+  refundMode?: string;
+
+  /**
+   * 不允许退单的时间(小时,如12小时内)
+   */
+  refundDisallowHours?: number;
+
+  /**
+   * 改期后退单:disallow-不允许, allow-允许
+   */
+  afterRescheduleRefund?: 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'
+  });
+};

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

@@ -0,0 +1,114 @@
+export interface SysServiceVO {
+  /**
+   * ID
+   */
+  id: string | number;
+
+  /**
+   * 客服名称
+   */
+  serviceName: string;
+
+  /**
+   * 二维码
+   */
+  qrCode: string;
+
+  qrCodeUrl: 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;
+
+  qrCodeUrl?: 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/tenant/sysShop/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询门店详细
+ * @param id
+ */
+export const getSysShop = (id: string | number): AxiosPromise<SysShopVO> => {
+  return request({
+    url: '/system/tenant/sysShop/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增门店
+ * @param data
+ */
+export const addSysShop = (data: SysShopForm) => {
+  return request({
+    url: '/system/tenant/sysShop',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改门店
+ * @param data
+ */
+export const updateSysShop = (data: SysShopForm) => {
+  return request({
+    url: '/system/tenant/sysShop',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除门店
+ * @param id
+ */
+export const delSysShop = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/tenant/sysShop/' + id,
+    method: 'delete'
+  });
+};
+
+// 指定服务
+export const assignService = (data: SysShopForm) => {
+  return request({
+    url: '/system/tenant/sysShop/assignService',
+    method: 'post',
+    data: data
+  });
+};

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

@@ -0,0 +1,578 @@
+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[];
+
+  /**
+   * 邮箱ID
+   */
+  mailboxId?: string | number;
+
+  /**
+   * 邮箱账号
+   */
+  boxAccount?: string;
+
+  /**
+   * 邮箱设置(后端返回的字符串)
+   */
+  mailbox?: string;
+}
+
+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[];
+
+  /**
+   * 邮箱ID
+   */
+  mailboxId?: string | number;
+
+  /**
+   * 邮箱设置(后端返回的字符串)
+   */
+  mailbox?: string;
+}
+
+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;
+}

+ 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/mailTemplate/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MailTemplateVO, MailTemplateForm, MailTemplateQuery } from '@/api/system/mailTemplate/types';
+
+/**
+ * 查询邮箱模板列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMailTemplate = (query?: MailTemplateQuery): AxiosPromise<MailTemplateVO[]> => {
+  return request({
+    url: '/system/mailTemplate/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询邮箱模板详细
+ * @param id
+ */
+export const getMailTemplate = (id: string | number): AxiosPromise<MailTemplateVO> => {
+  return request({
+    url: '/system/mailTemplate/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增邮箱模板
+ * @param data
+ */
+export const addMailTemplate = (data: MailTemplateForm) => {
+  return request({
+    url: '/system/mailTemplate',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改邮箱模板
+ * @param data
+ */
+export const updateMailTemplate = (data: MailTemplateForm) => {
+  return request({
+    url: '/system/mailTemplate',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除邮箱模板
+ * @param id
+ */
+export const delMailTemplate = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/mailTemplate/' + id,
+    method: 'delete'
+  });
+};

+ 141 - 0
src/api/system/mailTemplate/types.ts

@@ -0,0 +1,141 @@
+export interface MailTemplateVO {
+  /**
+   * 主键id
+   */
+  id: string | number;
+
+  /**
+   * 模板编码(唯一标识)
+   */
+  templateCode: string;
+
+  /**
+   * 模板名称
+   */
+  templateName: string;
+
+  /**
+   * 邮件标题模板
+   */
+  templateTitle: string;
+
+  /**
+   * 邮件内容模板(支持HTML)
+   */
+  templateContent: string;
+
+  /**
+   * 模板类型(order:订单,service:服务,notify:通知等)
+   */
+  templateType: string;
+
+  /**
+   * 模板变量说明(JSON格式)
+   */
+  templateVars: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface MailTemplateForm extends BaseEntity {
+  /**
+   * 主键id
+   */
+  id?: string | number;
+
+  /**
+   * 模板编码(唯一标识)
+   */
+  templateCode?: string;
+
+  /**
+   * 模板名称
+   */
+  templateName?: string;
+
+  /**
+   * 邮件标题模板
+   */
+  templateTitle?: string;
+
+  /**
+   * 邮件内容模板(支持HTML)
+   */
+  templateContent?: string;
+
+  /**
+   * 模板类型(order:订单,service:服务,notify:通知等)
+   */
+  templateType?: string;
+
+  /**
+   * 模板变量说明(JSON格式)
+   */
+  templateVars?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface MailTemplateQuery extends PageQuery {
+
+  /**
+   * 模板编码(唯一标识)
+   */
+  templateCode?: string;
+
+  /**
+   * 模板名称
+   */
+  templateName?: string;
+
+  /**
+   * 邮件标题模板
+   */
+  templateTitle?: string;
+
+  /**
+   * 邮件内容模板(支持HTML)
+   */
+  templateContent?: string;
+
+  /**
+   * 模板类型(order:订单,service:服务,notify:通知等)
+   */
+  templateType?: string;
+
+  /**
+   * 模板变量说明(JSON格式)
+   */
+  templateVars?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

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

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MailboxVO, MailboxForm, MailboxQuery } from '@/api/system/mailbox/types';
+
+/**
+ * 查询邮箱列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMailbox = (query?: MailboxQuery): AxiosPromise<MailboxVO[]> => {
+  return request({
+    url: '/system/mailbox/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询邮箱详细
+ * @param id
+ */
+export const getMailbox = (id: string | number): AxiosPromise<MailboxVO> => {
+  return request({
+    url: '/system/mailbox/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增邮箱
+ * @param data
+ */
+export const addMailbox = (data: MailboxForm) => {
+  return request({
+    url: '/system/mailbox',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改邮箱
+ * @param data
+ */
+export const updateMailbox = (data: MailboxForm) => {
+  return request({
+    url: '/system/mailbox',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除邮箱
+ * @param id
+ */
+export const delMailbox = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/mailbox/' + id,
+    method: 'delete'
+  });
+};

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