Browse Source

update 调整代码格式

疯狂的狮子Li 1 year ago
parent
commit
1595cb282a
100 changed files with 3765 additions and 3948 deletions
  1. 279 279
      .eslintrc-auto-import.json
  2. 39 39
      .eslintrc.js
  3. 41 41
      .prettierrc.cjs
  4. 54 119
      README.md
  5. 0 24
      Vite/plugins/auto-import.ts
  6. 0 17
      Vite/plugins/components.ts
  7. 0 28
      Vite/plugins/compression.ts
  8. 0 8
      Vite/plugins/icons.ts
  9. 0 10
      Vite/plugins/svg-icon.ts
  10. 0 13
      Vite/plugins/unocss.ts
  11. 20 20
      commitlint.config.js
  12. 0 18
      html/ie.html
  13. 214 214
      index.html
  14. 78 78
      package.json
  15. 3 3
      src/App.vue
  16. 28 28
      src/animate.ts
  17. 28 28
      src/api/demo/demo.ts
  18. 23 23
      src/api/demo/tree.ts
  19. 36 36
      src/api/demo/types.ts
  20. 46 46
      src/api/login.ts
  21. 4 4
      src/api/menu.ts
  22. 28 28
      src/api/monitor/cache/index.ts
  23. 3 3
      src/api/monitor/cache/types.ts
  24. 17 17
      src/api/monitor/loginInfo/index.ts
  25. 15 15
      src/api/monitor/loginInfo/types.ts
  26. 9 9
      src/api/monitor/online/index.ts
  27. 10 10
      src/api/monitor/online/types.ts
  28. 13 13
      src/api/monitor/operlog/index.ts
  29. 44 44
      src/api/monitor/operlog/types.ts
  30. 39 39
      src/api/system/config/index.ts
  31. 15 15
      src/api/system/config/types.ts
  32. 31 31
      src/api/system/dept/index.ts
  33. 28 28
      src/api/system/dept/types.ts
  34. 27 27
      src/api/system/dict/data/index.ts
  35. 21 21
      src/api/system/dict/data/types.ts
  36. 31 31
      src/api/system/dict/type/index.ts
  37. 13 13
      src/api/system/dict/type/types.ts
  38. 35 35
      src/api/system/menu/index.ts
  39. 44 44
      src/api/system/menu/types.ts
  40. 23 23
      src/api/system/notice/index.ts
  41. 18 18
      src/api/system/notice/types.ts
  42. 13 13
      src/api/system/oss/index.ts
  43. 15 15
      src/api/system/oss/types.ts
  44. 33 33
      src/api/system/ossConfig/index.ts
  45. 30 30
      src/api/system/ossConfig/types.ts
  46. 23 23
      src/api/system/post/index.ts
  47. 15 15
      src/api/system/post/types.ts
  48. 66 66
      src/api/system/role/index.ts
  49. 35 35
      src/api/system/role/types.ts
  50. 50 50
      src/api/system/tenant/index.ts
  51. 35 35
      src/api/system/tenant/types.ts
  52. 32 32
      src/api/system/tenantPackage/index.ts
  53. 14 14
      src/api/system/tenantPackage/types.ts
  54. 77 77
      src/api/system/user/index.ts
  55. 51 51
      src/api/system/user/types.ts
  56. 49 49
      src/api/tool/gen/index.ts
  57. 152 152
      src/api/tool/gen/types.ts
  58. 22 22
      src/api/types.ts
  59. 66 66
      src/assets/styles/btn.scss
  60. 45 45
      src/assets/styles/element-ui.scss
  61. 98 98
      src/assets/styles/index.scss
  62. 43 43
      src/assets/styles/mixin.scss
  63. 122 122
      src/assets/styles/ruoyi.scss
  64. 230 230
      src/assets/styles/sidebar.scss
  65. 13 13
      src/assets/styles/transition.scss
  66. 15 15
      src/assets/styles/variables.module.scss
  67. 31 31
      src/components/Breadcrumb/index.vue
  68. 37 37
      src/components/DictTag/index.vue
  69. 128 128
      src/components/Editor/index.vue
  70. 143 143
      src/components/FileUpload/index.vue
  71. 7 7
      src/components/Hamburger/index.vue
  72. 16 16
      src/components/HeaderSearch/index.vue
  73. 25 25
      src/components/IconSelect/index.vue
  74. 2 2
      src/components/IconSelect/requireIcons.ts
  75. 7 7
      src/components/ImagePreview/index.vue
  76. 149 149
      src/components/ImageUpload/index.vue
  77. 82 82
      src/components/Pagination/index.vue
  78. 1 1
      src/components/ParentView/index.vue
  79. 50 50
      src/components/RightToolbar/index.vue
  80. 3 3
      src/components/RuoYiDoc/index.vue
  81. 3 3
      src/components/RuoYiGit/index.vue
  82. 3 3
      src/components/Screenfull/index.vue
  83. 14 14
      src/components/SizeSelect/index.vue
  84. 3 3
      src/components/SvgIcon/index.vue
  85. 20 20
      src/components/TopNav/index.vue
  86. 27 27
      src/components/TreeSelect/index.vue
  87. 3 3
      src/components/iFrame/index.vue
  88. 50 50
      src/directive/common/copyText.ts
  89. 3 3
      src/directive/index.ts
  90. 31 31
      src/directive/permission/index.ts
  91. 12 12
      src/enums/MenuTypeEnum.ts
  92. 88 88
      src/enums/RespEnum.ts
  93. 13 13
      src/enums/SettingTypeEnum.ts
  94. 2 2
      src/enums/layout/LayoutEnum.ts
  95. 23 23
      src/lang/en.ts
  96. 23 23
      src/lang/index.ts
  97. 22 22
      src/lang/zh-cn.ts
  98. 20 20
      src/layout/components/AppMain.vue
  99. 9 9
      src/layout/components/IframeToggle/index.vue
  100. 14 14
      src/layout/components/InnerLink/index.vue

+ 279 - 279
.eslintrc-auto-import.json

@@ -1,281 +1,281 @@
 {
-	"globals": {
-		"useRouter": true,
-		"useRoute": true,
-		"EffectScope": true,
-		"ElTable": true,
-		"ElSelect": true,
-		"ElUpload": true,
-		"ElForm": true,
-		"ElTree": true,
-		"ElMessage": true,
-		"ElMessageBox": true,
-		"asyncComputed": true,
-		"autoResetRef": true,
-		"computed": true,
-		"computedAsync": true,
-		"computedEager": true,
-		"computedInject": true,
-		"computedWithControl": true,
-		"controlledComputed": true,
-		"controlledRef": true,
-		"createApp": true,
-		"createEventHook": true,
-		"createGlobalState": true,
-		"createInjectionState": true,
-		"createReactiveFn": true,
-		"createSharedComposable": true,
-		"createUnrefFn": true,
-		"customRef": true,
-		"debouncedRef": true,
-		"debouncedWatch": true,
-		"defineAsyncComponent": true,
-		"defineComponent": true,
-		"eagerComputed": true,
-		"effectScope": true,
-		"extendRef": true,
-		"getCurrentInstance": true,
-		"getCurrentScope": true,
-		"h": true,
-		"ignorableWatch": true,
-		"inject": true,
-		"isDefined": true,
-		"isProxy": true,
-		"isReactive": true,
-		"isReadonly": true,
-		"isRef": true,
-		"makeDestructurable": true,
-		"markRaw": true,
-		"nextTick": true,
-		"onActivated": true,
-		"onBeforeMount": true,
-		"onBeforeUnmount": true,
-		"onBeforeUpdate": true,
-		"onClickOutside": true,
-		"onDeactivated": true,
-		"onErrorCaptured": true,
-		"onKeyStroke": true,
-		"onLongPress": true,
-		"onMounted": true,
-		"onRenderTracked": true,
-		"onRenderTriggered": true,
-		"onScopeDispose": true,
-		"onServerPrefetch": true,
-		"onStartTyping": true,
-		"onUnmounted": true,
-		"onUpdated": true,
-		"pausableWatch": true,
-		"provide": true,
-		"reactify": true,
-		"reactifyObject": true,
-		"reactive": true,
-		"reactiveComputed": true,
-		"reactiveOmit": true,
-		"reactivePick": true,
-		"readonly": true,
-		"ref": true,
-		"refAutoReset": true,
-		"refDebounced": true,
-		"refDefault": true,
-		"refThrottled": true,
-		"refWithControl": true,
-		"resolveComponent": true,
-		"resolveDirective": true,
-		"resolveRef": true,
-		"resolveUnref": true,
-		"shallowReactive": true,
-		"shallowReadonly": true,
-		"shallowRef": true,
-		"syncRef": true,
-		"syncRefs": true,
-		"templateRef": true,
-		"throttledRef": true,
-		"throttledWatch": true,
-		"toRaw": true,
-		"toReactive": true,
-		"toRef": true,
-		"toRefs": true,
-		"triggerRef": true,
-		"tryOnBeforeMount": true,
-		"tryOnBeforeUnmount": true,
-		"tryOnMounted": true,
-		"tryOnScopeDispose": true,
-		"tryOnUnmounted": true,
-		"unref": true,
-		"unrefElement": true,
-		"until": true,
-		"useActiveElement": true,
-		"useArrayEvery": true,
-		"useArrayFilter": true,
-		"useArrayFind": true,
-		"useArrayFindIndex": true,
-		"useArrayFindLast": 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,
-		"useCloned": true,
-		"useColorMode": true,
-		"useConfirmDialog": true,
-		"useCounter": true,
-		"useCssModule": true,
-		"useCssVar": true,
-		"useCssVars": true,
-		"useCurrentElement": true,
-		"useCycleList": true,
-		"useDark": true,
-		"useDateFormat": true,
-		"useDebounce": true,
-		"useDebounceFn": true,
-		"useDebouncedRefHistory": true,
-		"useDeviceMotion": true,
-		"useDeviceOrientation": true,
-		"useDevicePixelRatio": true,
-		"useDevicesList": true,
-		"useDisplayMedia": true,
-		"useDocumentVisibility": true,
-		"useDraggable": true,
-		"useDropZone": true,
-		"useElementBounding": true,
-		"useElementByPoint": true,
-		"useElementHover": true,
-		"useElementSize": true,
-		"useElementVisibility": true,
-		"useEventBus": true,
-		"useEventListener": true,
-		"useEventSource": true,
-		"useEyeDropper": true,
-		"useFavicon": true,
-		"useFetch": true,
-		"useFileDialog": true,
-		"useFileSystemAccess": true,
-		"useFocus": true,
-		"useFocusWithin": true,
-		"useFps": true,
-		"useFullscreen": true,
-		"useGamepad": true,
-		"useGeolocation": true,
-		"useIdle": true,
-		"useImage": true,
-		"useInfiniteScroll": true,
-		"useIntersectionObserver": true,
-		"useInterval": true,
-		"useIntervalFn": true,
-		"useKeyModifier": true,
-		"useLastChanged": true,
-		"useLocalStorage": true,
-		"useMagicKeys": true,
-		"useManualRefHistory": true,
-		"useMediaControls": true,
-		"useMediaQuery": true,
-		"useMemoize": true,
-		"useMemory": true,
-		"useMounted": true,
-		"useMouse": true,
-		"useMouseInElement": true,
-		"useMousePressed": true,
-		"useMutationObserver": true,
-		"useNavigatorLanguage": true,
-		"useNetwork": true,
-		"useNow": true,
-		"useObjectUrl": true,
-		"useOffsetPagination": true,
-		"useOnline": true,
-		"usePageLeave": true,
-		"useParallax": true,
-		"usePermission": true,
-		"usePointer": true,
-		"usePointerLock": true,
-		"usePointerSwipe": true,
-		"usePreferredColorScheme": true,
-		"usePreferredContrast": true,
-		"usePreferredDark": true,
-		"usePreferredLanguages": true,
-		"usePreferredReducedMotion": true,
-		"usePrevious": true,
-		"useRafFn": true,
-		"useRefHistory": true,
-		"useResizeObserver": 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,
-		"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,
-		"watchEffect": true,
-		"watchIgnorable": true,
-		"watchOnce": true,
-		"watchPausable": true,
-		"watchPostEffect": true,
-		"watchSyncEffect": true,
-		"watchThrottled": true,
-		"watchTriggerable": true,
-		"watchWithFilter": true,
-		"whenever": true,
-		"ImportOption": true,
-		"TreeType": true,
-		"FieldOption": true,
-		"PageData": true,
-		"storeToRefs": true,
-		"DictDataOption": true,
-		"UploadOption": true
-	}
+  "globals": {
+    "useRouter": true,
+    "useRoute": true,
+    "EffectScope": true,
+    "ElTable": true,
+    "ElSelect": true,
+    "ElUpload": true,
+    "ElForm": true,
+    "ElTree": true,
+    "ElMessage": true,
+    "ElMessageBox": true,
+    "asyncComputed": true,
+    "autoResetRef": true,
+    "computed": true,
+    "computedAsync": true,
+    "computedEager": true,
+    "computedInject": true,
+    "computedWithControl": true,
+    "controlledComputed": true,
+    "controlledRef": true,
+    "createApp": true,
+    "createEventHook": true,
+    "createGlobalState": true,
+    "createInjectionState": true,
+    "createReactiveFn": true,
+    "createSharedComposable": true,
+    "createUnrefFn": true,
+    "customRef": true,
+    "debouncedRef": true,
+    "debouncedWatch": true,
+    "defineAsyncComponent": true,
+    "defineComponent": true,
+    "eagerComputed": true,
+    "effectScope": true,
+    "extendRef": true,
+    "getCurrentInstance": true,
+    "getCurrentScope": true,
+    "h": true,
+    "ignorableWatch": true,
+    "inject": true,
+    "isDefined": true,
+    "isProxy": true,
+    "isReactive": true,
+    "isReadonly": true,
+    "isRef": true,
+    "makeDestructurable": true,
+    "markRaw": true,
+    "nextTick": true,
+    "onActivated": true,
+    "onBeforeMount": true,
+    "onBeforeUnmount": true,
+    "onBeforeUpdate": true,
+    "onClickOutside": true,
+    "onDeactivated": true,
+    "onErrorCaptured": true,
+    "onKeyStroke": true,
+    "onLongPress": true,
+    "onMounted": true,
+    "onRenderTracked": true,
+    "onRenderTriggered": true,
+    "onScopeDispose": true,
+    "onServerPrefetch": true,
+    "onStartTyping": true,
+    "onUnmounted": true,
+    "onUpdated": true,
+    "pausableWatch": true,
+    "provide": true,
+    "reactify": true,
+    "reactifyObject": true,
+    "reactive": true,
+    "reactiveComputed": true,
+    "reactiveOmit": true,
+    "reactivePick": true,
+    "readonly": true,
+    "ref": true,
+    "refAutoReset": true,
+    "refDebounced": true,
+    "refDefault": true,
+    "refThrottled": true,
+    "refWithControl": true,
+    "resolveComponent": true,
+    "resolveDirective": true,
+    "resolveRef": true,
+    "resolveUnref": true,
+    "shallowReactive": true,
+    "shallowReadonly": true,
+    "shallowRef": true,
+    "syncRef": true,
+    "syncRefs": true,
+    "templateRef": true,
+    "throttledRef": true,
+    "throttledWatch": true,
+    "toRaw": true,
+    "toReactive": true,
+    "toRef": true,
+    "toRefs": true,
+    "triggerRef": true,
+    "tryOnBeforeMount": true,
+    "tryOnBeforeUnmount": true,
+    "tryOnMounted": true,
+    "tryOnScopeDispose": true,
+    "tryOnUnmounted": true,
+    "unref": true,
+    "unrefElement": true,
+    "until": true,
+    "useActiveElement": true,
+    "useArrayEvery": true,
+    "useArrayFilter": true,
+    "useArrayFind": true,
+    "useArrayFindIndex": true,
+    "useArrayFindLast": 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,
+    "useCloned": true,
+    "useColorMode": true,
+    "useConfirmDialog": true,
+    "useCounter": true,
+    "useCssModule": true,
+    "useCssVar": true,
+    "useCssVars": true,
+    "useCurrentElement": true,
+    "useCycleList": true,
+    "useDark": true,
+    "useDateFormat": true,
+    "useDebounce": true,
+    "useDebounceFn": true,
+    "useDebouncedRefHistory": true,
+    "useDeviceMotion": true,
+    "useDeviceOrientation": true,
+    "useDevicePixelRatio": true,
+    "useDevicesList": true,
+    "useDisplayMedia": true,
+    "useDocumentVisibility": true,
+    "useDraggable": true,
+    "useDropZone": true,
+    "useElementBounding": true,
+    "useElementByPoint": true,
+    "useElementHover": true,
+    "useElementSize": true,
+    "useElementVisibility": true,
+    "useEventBus": true,
+    "useEventListener": true,
+    "useEventSource": true,
+    "useEyeDropper": true,
+    "useFavicon": true,
+    "useFetch": true,
+    "useFileDialog": true,
+    "useFileSystemAccess": true,
+    "useFocus": true,
+    "useFocusWithin": true,
+    "useFps": true,
+    "useFullscreen": true,
+    "useGamepad": true,
+    "useGeolocation": true,
+    "useIdle": true,
+    "useImage": true,
+    "useInfiniteScroll": true,
+    "useIntersectionObserver": true,
+    "useInterval": true,
+    "useIntervalFn": true,
+    "useKeyModifier": true,
+    "useLastChanged": true,
+    "useLocalStorage": true,
+    "useMagicKeys": true,
+    "useManualRefHistory": true,
+    "useMediaControls": true,
+    "useMediaQuery": true,
+    "useMemoize": true,
+    "useMemory": true,
+    "useMounted": true,
+    "useMouse": true,
+    "useMouseInElement": true,
+    "useMousePressed": true,
+    "useMutationObserver": true,
+    "useNavigatorLanguage": true,
+    "useNetwork": true,
+    "useNow": true,
+    "useObjectUrl": true,
+    "useOffsetPagination": true,
+    "useOnline": true,
+    "usePageLeave": true,
+    "useParallax": true,
+    "usePermission": true,
+    "usePointer": true,
+    "usePointerLock": true,
+    "usePointerSwipe": true,
+    "usePreferredColorScheme": true,
+    "usePreferredContrast": true,
+    "usePreferredDark": true,
+    "usePreferredLanguages": true,
+    "usePreferredReducedMotion": true,
+    "usePrevious": true,
+    "useRafFn": true,
+    "useRefHistory": true,
+    "useResizeObserver": 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,
+    "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,
+    "watchEffect": true,
+    "watchIgnorable": true,
+    "watchOnce": true,
+    "watchPausable": true,
+    "watchPostEffect": true,
+    "watchSyncEffect": true,
+    "watchThrottled": true,
+    "watchTriggerable": true,
+    "watchWithFilter": true,
+    "whenever": true,
+    "ImportOption": true,
+    "TreeType": true,
+    "FieldOption": true,
+    "PageData": true,
+    "storeToRefs": true,
+    "DictDataOption": true,
+    "UploadOption": true
+  }
 }

+ 39 - 39
.eslintrc.js

@@ -1,41 +1,41 @@
 module.exports = {
-	env: {
-		browser: true,
-		es2021: true,
-		node: true
-	},
-	parser: 'vue-eslint-parser',
-	extends: [
-		'eslint:recommended',
-		'plugin:vue/vue3-essential',
-		'plugin:@typescript-eslint/recommended',
-		'./.eslintrc-auto-import.json',
-		'plugin:prettier/recommended'
-	],
-	parserOptions: {
-		ecmaVersion: '2020',
-		sourceType: 'module',
-		parser: '@typescript-eslint/parser'
-	},
-	plugins: ['vue', '@typescript-eslint'],
-	rules: {
-		'vue/multi-word-component-names': 'off',
-		'@typescript-eslint/no-empty-function': 'off',
-		'@typescript-eslint/no-explicit-any': 'off',
-		'vue/no-v-model-argument': 'off',
-		'@typescript-eslint/ban-types': [
-			'error',
-			{
-				// 关闭空类型检查 {}
-				extendDefaults: true,
-				types: {
-					'{}': false
-				}
-			}
-		]
-	},
-	globals: {
-		DialogOption: 'readonly',
-		OptionType: 'readonly'
-	}
+  env: {
+    browser: true,
+    es2021: true,
+    node: true
+  },
+  parser: 'vue-eslint-parser',
+  extends: [
+    'eslint:recommended',
+    'plugin:vue/vue3-essential',
+    'plugin:@typescript-eslint/recommended',
+    './.eslintrc-auto-import.json',
+    'plugin:prettier/recommended'
+  ],
+  parserOptions: {
+    ecmaVersion: '2020',
+    sourceType: 'module',
+    parser: '@typescript-eslint/parser'
+  },
+  plugins: ['vue', '@typescript-eslint'],
+  rules: {
+    'vue/multi-word-component-names': 'off',
+    '@typescript-eslint/no-empty-function': 'off',
+    '@typescript-eslint/no-explicit-any': 'off',
+    'vue/no-v-model-argument': 'off',
+    '@typescript-eslint/ban-types': [
+      'error',
+      {
+        // 关闭空类型检查 {}
+        extendDefaults: true,
+        types: {
+          '{}': false
+        }
+      }
+    ]
+  },
+  globals: {
+    DialogOption: 'readonly',
+    OptionType: 'readonly'
+  }
 };

+ 41 - 41
.prettierrc.cjs

@@ -2,45 +2,45 @@
  * 代码格式化配置
  */
 module.exports = {
-	// 一行最多多少个字符
-	printWidth: 150,
-	// 指定每个缩进级别的空格数
-	tabWidth: 2,
-	// 使用制表符而不是空格缩进行
-	useTabs: true,
-	// 在语句末尾是否需要分号
-	semi: true,
-	// 是否使用单引号
-	singleQuote: true,
-	// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
-	quoteProps: 'as-needed',
-	// 在JSX中使用单引号而不是双引号
-	jsxSingleQuote: false,
-	// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
-	trailingComma: 'none',
-	// 在对象文字中的括号之间打印空格
-	bracketSpacing: true,
-	// jsx 标签的反尖括号需要换行
-	jsxBracketSameLine: false,
-	embeddedLanguageFormatting: 'off',
-	// 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
-	arrowParens: 'always',
-	// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
-	rangeStart: 0,
-	rangeEnd: Infinity,
-	// 指定要使用的解析器,不需要写文件开头的 @prettier
-	requirePragma: false,
-	// 不需要自动在文件开头插入 @prettier
-	insertPragma: false,
-	// 使用默认的折行标准 always\never\preserve
-	proseWrap: 'preserve',
-	// 指定HTML文件的全局空格敏感度 css\strict\ignore
-	htmlWhitespaceSensitivity: 'css',
-	// Vue文件脚本和样式标签缩进
-	vueIndentScriptAndStyle: false,
-	//在 windows 操作系统中换行符通常是回车 (CR) 加换行分隔符 (LF),也就是回车换行(CRLF),
-	//然而在 Linux 和 Unix 中只使用简单的换行分隔符 (LF)。
-	//对应的控制字符为 "\n" (LF) 和 "\r\n"(CRLF)。auto意为保持现有的行尾
-	// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
-	endOfLine: 'auto'
+    // 一行最多多少个字符
+    printWidth: 150,
+    // 指定每个缩进级别的空格数
+    tabWidth: 2,
+    // 使用制表符而不是空格缩进行
+    useTabs: false,
+    // 在语句末尾是否需要分号
+    semi: true,
+    // 是否使用单引号
+    singleQuote: true,
+    // 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
+    quoteProps: 'as-needed',
+    // 在JSX中使用单引号而不是双引号
+    jsxSingleQuote: false,
+    // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
+    trailingComma: 'none',
+    // 在对象文字中的括号之间打印空格
+    bracketSpacing: true,
+    // jsx 标签的反尖括号需要换行
+    jsxBracketSameLine: false,
+    embeddedLanguageFormatting: 'off',
+    // 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
+    arrowParens: 'always',
+    // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
+    rangeStart: 0,
+    rangeEnd: Infinity,
+    // 指定要使用的解析器,不需要写文件开头的 @prettier
+    requirePragma: false,
+    // 不需要自动在文件开头插入 @prettier
+    insertPragma: false,
+    // 使用默认的折行标准 always\never\preserve
+    proseWrap: 'preserve',
+    // 指定HTML文件的全局空格敏感度 css\strict\ignore
+    htmlWhitespaceSensitivity: 'css',
+    // Vue文件脚本和样式标签缩进
+    vueIndentScriptAndStyle: false,
+    //在 windows 操作系统中换行符通常是回车 (CR) 加换行分隔符 (LF),也就是回车换行(CRLF),
+    //然而在 Linux 和 Unix 中只使用简单的换行分隔符 (LF)。
+    //对应的控制字符为 "\n" (LF) 和 "\r\n"(CRLF)。auto意为保持现有的行尾
+    // 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
+    endOfLine: 'auto'
 };

+ 54 - 119
README.md

@@ -1,11 +1,9 @@
 ## 平台简介
 
-## 平台简介
-
-- 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
-- 配套后端代码仓库地址
-- [RuoYi-Vue-Plus 5.X(注意版本号)](https://gitee.com/dromara/RuoYi-Vue-Plus)
-- [RuoYi-Cloud-Plus 2.X(注意版本号)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
+* 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [TS](https://www.typescriptlang.org/) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
+* 配套后端代码仓库地址
+* [RuoYi-Vue-Plus 5.X(注意版本号)](https://gitee.com/dromara/RuoYi-Vue-Plus)
+* [RuoYi-Cloud-Plus 2.X(注意版本号)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
 
 ## 前端运行
 
@@ -19,120 +17,57 @@ npm install --registry=https://registry.npmmirror.com
 # 启动服务
 npm run dev
 
-# 构建测试环境 yarn build:stage
 # 构建生产环境 yarn build:prod
 # 前端访问地址 http://localhost:80
 ```
 
-## 本框架与 RuoYi 的业务差异
-
-| 业务         | 功能说明                                                        | 本框架 | RuoYi                          |
-| ------------ | --------------------------------------------------------------- | ------ | ------------------------------ |
-| 租户管理     | 系统内租户的管理 如:租户套餐、过期时间、用户数量、企业信息等    | 支持   | 无                             |
-| 租户套餐管理 | 系统内租户所能使用的套餐管理 如:套餐内所包含的菜单等            | 支持   | 无                             |
-| 用户管理     | 用户的管理配置 如:新增用户、分配用户所属部门、角色、岗位等      | 支持   | 支持                           |
-| 部门管理     | 配置系统组织机构(公司、部门、小组) 树结构展现支持数据权限     | 支持   | 支持                           |
-| 岗位管理     | 配置系统用户所属担任职务                                        | 支持   | 支持                           |
-| 菜单管理     | 配置系统菜单、操作权限、按钮权限标识等                          | 支持   | 支持                           |
-| 角色管理     | 角色菜单权限分配、设置角色按机构进行数据范围权限划分            | 支持   | 支持                           |
-| 字典管理     | 对系统中经常使用的一些较为固定的数据进行维护                    | 支持   | 支持                           |
-| 参数管理     | 对系统动态配置常用参数                                          | 支持   | 支持                           |
-| 通知公告     | 系统通知公告信息发布维护                                        | 支持   | 支持                           |
-| 操作日志     | 系统正常操作日志记录和查询 系统异常信息日志记录和查询           | 支持   | 支持                           |
-| 登录日志     | 系统登录日志记录查询包含登录异常                                | 支持   | 支持                           |
-| 文件管理     | 系统文件展示、上传、下载、删除等管理                            | 支持   | 无                             |
-| 文件配置管理 | 系统文件上传、下载所需要的配置信息动态添加、修改、删除等管理    | 支持   | 无                             |
-| 在线用户管理 | 已登录系统的在线用户信息监控与强制踢出操作                      | 支持   | 支持                           |
-| 定时任务     | 运行报表、任务管理(添加、修改、删除)、日志管理、执行器管理等    | 支持   | 仅支持任务与日志管理           |
-| 代码生成     | 多数据源前后端代码的生成(java、html、xml、sql)支持 CRUD 下载  | 支持   | 仅支持单数据源                 |
-| 系统接口     | 根据业务代码自动生成相关的 api 接口文档                         | 支持   | 支持                           |
-| 服务监控     | 监视集群系统 CPU、内存、磁盘、堆栈、在线日志、Spring 相关配置等 | 支持   | 仅支持单机 CPU、内存、磁盘监控 |
-| 缓存监控     | 对系统的缓存信息查询,命令统计等。                              | 支持   | 支持                           |
-| 在线构建器   | 拖动表单元素生成相应的 HTML 代码。                              | 支持   | 支持                           |
-| 使用案例     | 系统的一些功能案例                                              | 支持   | 不支持                         |
-
-## 演示图
-
-- 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
-- 配套后端代码仓库地址
-- [RuoYi-Vue-Plus 5.X(注意版本号)](https://gitee.com/dromara/RuoYi-Vue-Plus)
-- [RuoYi-Cloud-Plus 2.X(注意版本号)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
-
-## 前端运行
-
-```bash
-# 克隆项目
-git clone https://gitee.com/JavaLionLi/plus-ui.git
-
-# 安装依赖
-npm install --registry=https://registry.npmmirror.com
-
-# 启动服务
-npm run dev
-
-# 构建测试环境 yarn build:stage
-# 构建生产环境 yarn build:prod
-# 前端访问地址 http://localhost:80
-```
-
-## 后端改造
-
-参考后端代码内 `ruoyi-gen/resources/vm/vue/v3/readme.txt` 说明
-
-## 内置功能
-
-1. 租户管理:配置系统租户,支持 SaaS 场景下的多租户功能。
-2. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
-3. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
-4. 岗位管理:配置系统用户所属担任职务。
-5. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
-6. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
-7. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
-8. 参数管理:对系统动态配置常用参数。
-9. 通知公告:系统通知公告信息发布维护。
-10. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
-11. 登录日志:系统登录日志记录查询包含登录异常。
-12. 在线用户:当前系统中活跃用户状态监控。
-13. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
-14. 代码生成:前后端代码的生成(java、html、xml、sql)支持 CRUD 下载 。
-15. 系统接口:根据业务代码自动生成相关的 api 接口文档。
-16. 服务监控:监视当前系统 CPU、内存、磁盘、堆栈等相关信息。
-17. 缓存监控:对系统的缓存信息查询,命令统计等。
-18. 在线构建器:拖动表单元素生成相应的 HTML 代码。
-
-## 演示图
-
-<table>
-    <tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
-    </tr>
-    <tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
-    </tr>
-    <tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
-    </tr>
-	<tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
-    </tr>	 
-    <tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
-    </tr>
-	<tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
-    </tr>
-	<tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
-    </tr>
-    <tr>
-        <td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
-        <td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
-    </tr>
-</table>
+## 本框架与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 "屏幕截图") |

+ 0 - 24
Vite/plugins/auto-import.ts

@@ -1,24 +0,0 @@
-import AutoImport from 'unplugin-auto-import/vite';
-import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
-import IconsResolver from 'unplugin-icons/resolver';
-
-export default (path: any) => {
-	return AutoImport({
-		// 自动导入 Vue 相关函数
-		imports: ['vue', 'vue-router', '@vueuse/core', 'pinia'],
-		eslintrc: {
-			enabled: false,
-			filepath: './.eslintrc-auto-import.json',
-			globalsPropValue: true
-		},
-		resolvers: [
-			// 自动导入 Element Plus 相关函数ElMessage, ElMessageBox... (带样式)
-			ElementPlusResolver(),
-			IconsResolver({
-				prefix: 'Icon'
-			})
-		],
-		vueTemplate: true, // 是否在 vue 模板中自动导入
-		dts: path.resolve(path.resolve(__dirname, '../../src'), 'types', 'auto-imports.d.ts')
-	});
-};

+ 0 - 17
Vite/plugins/components.ts

@@ -1,17 +0,0 @@
-import Components from 'unplugin-vue-components/vite';
-import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
-import IconsResolver from 'unplugin-icons/resolver';
-
-export default (path: any) => {
-	return Components({
-		resolvers: [
-			// 自动导入 Element Plus 组件
-			ElementPlusResolver(),
-			// 自动注册图标组件
-			IconsResolver({
-				enabledCollections: ['ep']
-			})
-		],
-		dts: path.resolve(path.resolve(__dirname, '../../src'), 'types', 'components.d.ts')
-	});
-};

+ 0 - 28
Vite/plugins/compression.ts

@@ -1,28 +0,0 @@
-import compression from 'vite-plugin-compression';
-
-export default function createCompression(env: any) {
-	const { VITE_BUILD_COMPRESS } = env;
-	const plugin: any[] = [];
-	if (VITE_BUILD_COMPRESS) {
-		const compressList = VITE_BUILD_COMPRESS.split(',');
-		if (compressList.includes('gzip')) {
-			// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
-			plugin.push(
-				compression({
-					ext: '.gz',
-					deleteOriginFile: false
-				})
-			);
-		}
-		if (compressList.includes('brotli')) {
-			plugin.push(
-				compression({
-					ext: '.br',
-					algorithm: 'brotliCompress',
-					deleteOriginFile: false
-				})
-			);
-		}
-	}
-	return plugin;
-}

+ 0 - 8
Vite/plugins/icons.ts

@@ -1,8 +0,0 @@
-import Icons from 'unplugin-icons/vite';
-
-export default () => {
-	return Icons({
-		// 自动安装图标库
-		autoInstall: true
-	});
-};

+ 0 - 10
Vite/plugins/svg-icon.ts

@@ -1,10 +0,0 @@
-import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
-export default (path: any, isBuild: boolean) => {
-	return createSvgIconsPlugin({
-		// 指定需要缓存的图标文件夹
-		iconDirs: [path.resolve(path.resolve(__dirname, '../../src'), 'assets/icons/svg')],
-		// 指定symbolId格式
-		symbolId: 'icon-[dir]-[name]',
-		svgoOptions: isBuild
-	});
-};

+ 0 - 13
Vite/plugins/unocss.ts

@@ -1,13 +0,0 @@
-import UnoCss from 'unocss/vite';
-import { presetUno, presetAttributify, presetIcons } from 'unocss';
-
-export default () => {
-	return UnoCss({
-		presets: [presetUno(), presetAttributify(), presetIcons()],
-		// rules: [['search', {}]],
-		shortcuts: {
-			'panel-title':
-				'pb-[5px] font-sans leading-[1.1] font-medium text-base text-[#6379bb] border-b border-b-solid border-[var(--el-border-color-light)] mb-5 mt-0'
-		}
-	});
-};

+ 20 - 20
commitlint.config.js

@@ -1,22 +1,22 @@
 module.exports = {
-	extends: ['@commitlint/config-conventional'],
-	rules: {
-		'type-enum': [
-			2,
-			'always',
-			[
-				'feat', // 新功能 feature
-				'fix', // 修复 bug
-				'docs', // 文档注释
-				'style', // 代码格式
-				'refactor', // 重构
-				'perf', // 性能优化
-				'test', // 增加测试
-				'chore', // 构建过程或辅助工具的变动
-				'revert', // 回退
-				'build' // 打包
-			]
-		],
-		'subject-case': [0]
-	}
+  extends: ['@commitlint/config-conventional'],
+  rules: {
+    'type-enum': [
+      2,
+      'always',
+      [
+        'feat', // 新功能 feature
+        'fix', // 修复 bug
+        'docs', // 文档注释
+        'style', // 代码格式
+        'refactor', // 重构
+        'perf', // 性能优化
+        'test', // 增加测试
+        'chore', // 构建过程或辅助工具的变动
+        'revert', // 回退
+        'build' // 打包
+      ]
+    ],
+    'subject-case': [0]
+  }
 };

File diff suppressed because it is too large
+ 0 - 18
html/ie.html


+ 214 - 214
index.html

@@ -1,217 +1,217 @@
 <!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.000);
-			  transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
-			}
-
-			.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.000);
-			  transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
-			}
-
-			.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>
+  <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.000);
+        transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+      }
+
+      .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.000);
+        transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+      }
+
+      .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>

+ 78 - 78
package.json

@@ -1,80 +1,80 @@
 {
-	"name": "ruoyi-vue-plus",
-	"version": "5.0.0-SNAPSHOT",
-	"description": "RuoYi-Vue-Plus多租户管理系统",
-	"author": "LionLi",
-	"license": "MIT",
-	"scripts": {
-		"dev": "vite serve --mode development",
-		"build:prod": "vite build --mode production &&vue-tsc --noEmit",
-		"preview": "vite preview",
-		"lint": "eslint src/**/*.{ts,js,vue} --fix",
-		"prepare": "husky install",
-		"prettier": "prettier --write ."
-	},
-	"repository": {
-		"type": "git",
-		"url": "https://gitee.com/JavaLionLi/plus-ui.git"
-	},
-	"dependencies": {
-		"@element-plus/icons-vue": "2.1.0",
-		"@vueup/vue-quill": "1.1.0",
-		"@vueuse/core": "9.5.0",
-		"animate.css": "4.1.1",
-		"await-to-js": "^3.0.0",
-		"axios": "^1.3.4",
-		"echarts": "5.4.0",
-		"element-plus": "2.2.27",
-		"file-saver": "2.0.5",
-		"fuse.js": "6.6.2",
-		"js-cookie": "3.0.1",
-		"jsencrypt": "3.3.1",
-		"nprogress": "0.2.0",
-		"path-browserify": "1.0.1",
-		"path-to-regexp": "6.2.0",
-		"pinia": "2.0.22",
-		"screenfull": "6.0.0",
-		"vue": "3.2.45",
-		"vue-cropper": "1.0.3",
-		"vue-i18n": "9.2.2",
-		"vue-router": "4.1.4"
-	},
-	"devDependencies": {
-		"@iconify/json": "^2.2.40",
-		"@intlify/unplugin-vue-i18n": "0.8.2",
-		"@types/file-saver": "2.0.5",
-		"@types/js-cookie": "3.0.3",
-		"@types/node": "18.14.2",
-		"@types/nprogress": "0.2.0",
-		"@types/path-browserify": "^1.0.0",
-		"@typescript-eslint/eslint-plugin": "5.56.0",
-		"@typescript-eslint/parser": "5.56.0",
-		"@unocss/preset-attributify": "^0.50.6",
-		"@unocss/preset-icons": "^0.50.6",
-		"@unocss/preset-uno": "^0.50.6",
-		"@vitejs/plugin-vue": "4.0.0",
-		"@vue/compiler-sfc": "3.2.45",
-		"autoprefixer": "10.4.14",
-		"eslint": "8.36.0",
-		"eslint-config-prettier": "8.8.0",
-		"eslint-plugin-prettier": "4.2.1",
-		"eslint-plugin-vue": "9.9.0",
-		"fast-glob": "^3.2.11",
-		"husky": "7.0.4",
-		"postcss": "^8.4.21",
-		"prettier": "2.8.6",
-		"sass": "1.56.1",
-		"typescript": "4.9.5",
-		"unocss": "^0.50.6",
-		"unplugin-auto-import": "0.13.0",
-		"unplugin-icons": "0.15.1",
-		"unplugin-vue-components": "0.23.0",
-		"vite": "4.1.4",
-		"vite-plugin-compression": "0.5.1",
-		"vite-plugin-svg-icons": "2.0.1",
-		"vite-plugin-vue-setup-extend": "0.4.0",
-		"vitest": "^0.29.7",
-		"vue-eslint-parser": "9.1.0",
-		"vue-tsc": "0.35.0"
-	}
+  "name": "ruoyi-vue-plus",
+  "version": "5.0.0-SNAPSHOT",
+  "description": "RuoYi-Vue-Plus多租户管理系统",
+  "author": "LionLi",
+  "license": "MIT",
+  "scripts": {
+    "dev": "vite serve --mode development",
+    "build:prod": "vite build --mode production &&vue-tsc --noEmit",
+    "preview": "vite preview",
+    "lint": "eslint src/**/*.{ts,js,vue} --fix",
+    "prepare": "husky install",
+    "prettier": "prettier --write ."
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://gitee.com/JavaLionLi/plus-ui.git"
+  },
+  "dependencies": {
+    "@element-plus/icons-vue": "2.1.0",
+    "@vueup/vue-quill": "1.1.0",
+    "@vueuse/core": "9.5.0",
+    "animate.css": "4.1.1",
+    "await-to-js": "^3.0.0",
+    "axios": "^1.3.4",
+    "echarts": "5.4.0",
+    "element-plus": "2.2.27",
+    "file-saver": "2.0.5",
+    "fuse.js": "6.6.2",
+    "js-cookie": "3.0.1",
+    "jsencrypt": "3.3.1",
+    "nprogress": "0.2.0",
+    "path-browserify": "1.0.1",
+    "path-to-regexp": "6.2.0",
+    "pinia": "2.0.22",
+    "screenfull": "6.0.0",
+    "vue": "3.2.45",
+    "vue-cropper": "1.0.3",
+    "vue-i18n": "9.2.2",
+    "vue-router": "4.1.4"
+  },
+  "devDependencies": {
+    "@iconify/json": "^2.2.40",
+    "@intlify/unplugin-vue-i18n": "0.8.2",
+    "@types/file-saver": "2.0.5",
+    "@types/js-cookie": "3.0.3",
+    "@types/node": "18.14.2",
+    "@types/nprogress": "0.2.0",
+    "@types/path-browserify": "^1.0.0",
+    "@typescript-eslint/eslint-plugin": "5.56.0",
+    "@typescript-eslint/parser": "5.56.0",
+    "@unocss/preset-attributify": "^0.50.6",
+    "@unocss/preset-icons": "^0.50.6",
+    "@unocss/preset-uno": "^0.50.6",
+    "@vitejs/plugin-vue": "4.0.0",
+    "@vue/compiler-sfc": "3.2.45",
+    "autoprefixer": "10.4.14",
+    "eslint": "8.36.0",
+    "eslint-config-prettier": "8.8.0",
+    "eslint-plugin-prettier": "4.2.1",
+    "eslint-plugin-vue": "9.9.0",
+    "fast-glob": "^3.2.11",
+    "husky": "7.0.4",
+    "postcss": "^8.4.21",
+    "prettier": "2.8.6",
+    "sass": "1.56.1",
+    "typescript": "4.9.5",
+    "unocss": "^0.50.6",
+    "unplugin-auto-import": "0.13.0",
+    "unplugin-icons": "0.15.1",
+    "unplugin-vue-components": "0.23.0",
+    "vite": "4.1.4",
+    "vite-plugin-compression": "0.5.1",
+    "vite-plugin-svg-icons": "2.0.1",
+    "vite-plugin-vue-setup-extend": "0.4.0",
+    "vitest": "^0.29.7",
+    "vue-eslint-parser": "9.1.0",
+    "vue-tsc": "0.35.0"
+  }
 }

+ 3 - 3
src/App.vue

@@ -1,7 +1,7 @@
 <template>
-	<el-config-provider :locale="appStore.locale" :size="size">
-		<router-view />
-	</el-config-provider>
+  <el-config-provider :locale="appStore.locale" :size="size">
+    <router-view />
+  </el-config-provider>
 </template>
 
 <script setup lang="ts">

+ 28 - 28
src/animate.ts

@@ -2,47 +2,47 @@
 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'
+  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: ''
+  enter: '',
+  leave: ''
 };
 
 // 菜单搜索动画
 const menuSearchAnimate = {
-	enter: animatePrefix + 'animate__fadeIn',
-	leave: animatePrefix + 'animate__fadeOut'
+  enter: animatePrefix + 'animate__fadeIn',
+  leave: animatePrefix + 'animate__fadeOut'
 };
 // logo动画
 const logoAnimate = {
-	enter: animatePrefix + 'animate__fadeIn',
-	leave: animatePrefix + 'animate__fadeOut'
+  enter: animatePrefix + 'animate__fadeIn',
+  leave: animatePrefix + 'animate__fadeOut'
 };
 
 export default {
-	animateList,
-	defaultAnimate,
-	searchAnimate,
-	menuSearchAnimate,
-	logoAnimate
+  animateList,
+  defaultAnimate,
+  searchAnimate,
+  menuSearchAnimate,
+  logoAnimate
 };

+ 28 - 28
src/api/demo/demo.ts

@@ -4,52 +4,52 @@ import { AxiosPromise } from 'axios';
 
 // 查询测试单表列表
 export function listDemo(query: DemoQuery): AxiosPromise<DemoVO[]> {
-	return request({
-		url: '/demo/demo/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/demo/demo/list',
+    method: 'get',
+    params: query
+  });
 }
 
 // 自定义分页接口
 export function pageDemo(query: DemoQuery): AxiosPromise<DemoVO[]> {
-	return request({
-		url: '/demo/demo/page',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/demo/demo/page',
+    method: 'get',
+    params: query
+  });
 }
 
 // 查询测试单表详细
 export function getDemo(id: string | number): AxiosPromise<DemoVO> {
-	return request({
-		url: '/demo/demo/' + id,
-		method: 'get'
-	});
+  return request({
+    url: '/demo/demo/' + id,
+    method: 'get'
+  });
 }
 
 // 新增测试单表
 export function addDemo(data: DemoForm) {
-	return request({
-		url: '/demo/demo',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/demo/demo',
+    method: 'post',
+    data: data
+  });
 }
 
 // 修改测试单表
 export function updateDemo(data: DemoForm) {
-	return request({
-		url: '/demo/demo',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/demo/demo',
+    method: 'put',
+    data: data
+  });
 }
 
 // 删除测试单表
 export function delDemo(id: string | number | Array<string | number>) {
-	return request({
-		url: '/demo/demo/' + id,
-		method: 'delete'
-	});
+  return request({
+    url: '/demo/demo/' + id,
+    method: 'delete'
+  });
 }

+ 23 - 23
src/api/demo/tree.ts

@@ -4,43 +4,43 @@ import { DemoTreeForm, DemoTreeVO, DemoTreeQuery } from './types';
 
 // 查询测试树表列表
 export function listTree(query?: DemoTreeQuery): AxiosPromise<DemoTreeVO[]> {
-	return request({
-		url: '/demo/tree/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/demo/tree/list',
+    method: 'get',
+    params: query
+  });
 }
 
 // 查询测试树表详细
 export function getTree(id: string | number): AxiosPromise<DemoTreeVO> {
-	return request({
-		url: '/demo/tree/' + id,
-		method: 'get'
-	});
+  return request({
+    url: '/demo/tree/' + id,
+    method: 'get'
+  });
 }
 
 // 新增测试树表
 export function addTree(data: DemoTreeForm) {
-	return request({
-		url: '/demo/tree',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/demo/tree',
+    method: 'post',
+    data: data
+  });
 }
 
 // 修改测试树表
 export function updateTree(data: DemoTreeForm) {
-	return request({
-		url: '/demo/tree',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/demo/tree',
+    method: 'put',
+    data: data
+  });
 }
 
 // 删除测试树表
 export function delTree(id: string | number | Array<string | number>) {
-	return request({
-		url: '/demo/tree/' + id,
-		method: 'delete'
-	});
+  return request({
+    url: '/demo/tree/' + id,
+    method: 'delete'
+  });
 }

+ 36 - 36
src/api/demo/types.ts

@@ -1,55 +1,55 @@
 export interface DemoVO extends BaseEntity {
-	id: number | string;
-	deptId: number | string;
-	userId: number | string;
-	orderNum: number;
-	testKey: string;
-	value: string;
-	createByName: string;
-	updateByName?: any;
+  id: number | string;
+  deptId: number | string;
+  userId: number | string;
+  orderNum: number;
+  testKey: string;
+  value: string;
+  createByName: string;
+  updateByName?: any;
 }
 
 export interface DemoQuery extends PageQuery {
-	testKey: string;
-	value: string;
-	createTime: string;
+  testKey: string;
+  value: string;
+  createTime: string;
 }
 export interface DemoForm {
-	id: string | number | undefined;
-	deptId: string | number | undefined;
-	userId: string | number | undefined;
-	orderNum: number;
-	testKey: string;
-	value: string;
-	version: string;
-	ossConfigId: string | number | undefined;
-	createTime?: string;
+  id: string | number | undefined;
+  deptId: string | number | undefined;
+  userId: string | number | undefined;
+  orderNum: number;
+  testKey: string;
+  value: string;
+  version: string;
+  ossConfigId: string | number | undefined;
+  createTime?: string;
 }
 
 export interface DemoTreeVO extends BaseEntity {
-	id: number | string;
-	parentId: number | string;
-	deptId: number | string;
-	userId: number | string;
-	treeName: string;
-	children?: DemoTreeVO[];
+  id: number | string;
+  parentId: number | string;
+  deptId: number | string;
+  userId: number | string;
+  treeName: string;
+  children?: DemoTreeVO[];
 }
 
 export interface DemoTreeQuery {
-	treeName: string;
-	createTime: string;
+  treeName: string;
+  createTime: string;
 }
 
 export interface DemoTreeForm {
-	id: string | number | undefined;
-	parentId: string | number | undefined;
-	deptId: string | number | undefined;
-	userId: string | number | undefined;
-	treeName: string;
+  id: string | number | undefined;
+  parentId: string | number | undefined;
+  deptId: string | number | undefined;
+  userId: string | number | undefined;
+  treeName: string;
 }
 
 export interface DemoTreeOptionsType {
-	id: string | number;
-	treeName: string;
-	children?: DemoTreeOptionsType[];
+  id: string | number;
+  treeName: string;
+  children?: DemoTreeOptionsType[];
 }

+ 46 - 46
src/api/login.ts

@@ -8,74 +8,74 @@ import { UserInfo } from '@/api/system/user/types';
  * @returns
  */
 export function login(data: LoginData): AxiosPromise<LoginResult> {
-	const params = {
-		tenantId: data.tenantId,
-		username: data.username.trim(),
-		password: data.password,
-		code: data.code,
-		uuid: data.uuid
-	};
-	return request({
-		url: '/auth/login',
-		headers: {
-			isToken: false
-		},
-		method: 'post',
-		data: params
-	});
+  const params = {
+    tenantId: data.tenantId,
+    username: data.username.trim(),
+    password: data.password,
+    code: data.code,
+    uuid: data.uuid
+  };
+  return request({
+    url: '/auth/login',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: params
+  });
 }
 
 // 注册方法
 export function register(data: any) {
-	return request({
-		url: '/auth/register',
-		headers: {
-			isToken: false
-		},
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/auth/register',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  });
 }
 
 /**
  * 注销
  */
 export function logout() {
-	return request({
-		url: '/auth/logout',
-		method: 'post'
-	});
+  return request({
+    url: '/auth/logout',
+    method: 'post'
+  });
 }
 
 /**
  * 获取验证码
  */
 export function getCodeImg(): AxiosPromise<VerifyCodeResult> {
-	return request({
-		url: '/code',
-		headers: {
-			isToken: false
-		},
-		method: 'get',
-		timeout: 20000
-	});
+  return request({
+    url: '/code',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  });
 }
 
 // 获取用户详细信息
 export function getInfo(): AxiosPromise<UserInfo> {
-	return request({
-		url: '/system/user/getInfo',
-		method: 'get'
-	});
+  return request({
+    url: '/system/user/getInfo',
+    method: 'get'
+  });
 }
 
 // 获取租户列表
 export function getTenantList(): AxiosPromise<TenantInfo> {
-	return request({
-		url: '/auth/tenant/list',
-		headers: {
-			isToken: false
-		},
-		method: 'get'
-	});
+  return request({
+    url: '/auth/tenant/list',
+    headers: {
+      isToken: false
+    },
+    method: 'get'
+  });
 }

+ 4 - 4
src/api/menu.ts

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

+ 28 - 28
src/api/monitor/cache/index.ts

@@ -4,56 +4,56 @@ import { CacheVO } from './types';
 
 // 查询缓存详细
 export function getCache(): AxiosPromise<CacheVO> {
-	return request({
-		url: '/monitor/cache',
-		method: 'get'
-	});
+  return request({
+    url: '/monitor/cache',
+    method: 'get'
+  });
 }
 
 // 查询缓存名称列表
 export function listCacheName() {
-	return request({
-		url: '/monitor/cache/getNames',
-		method: 'get'
-	});
+  return request({
+    url: '/monitor/cache/getNames',
+    method: 'get'
+  });
 }
 
 // 查询缓存键名列表
 export function listCacheKey(cacheName: string) {
-	return request({
-		url: '/monitor/cache/getKeys/' + cacheName,
-		method: 'get'
-	});
+  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'
-	});
+  return request({
+    url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
+    method: 'get'
+  });
 }
 
 // 清理指定名称缓存
 export function clearCacheName(cacheName: string) {
-	return request({
-		url: '/monitor/cache/clearCacheName/' + cacheName,
-		method: 'delete'
-	});
+  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'
-	});
+  return request({
+    url: '/monitor/cache/clearCacheKey/' + cacheName + '/' + cacheKey,
+    method: 'delete'
+  });
 }
 
 // 清理全部缓存
 export function clearCacheAll() {
-	return request({
-		url: '/monitor/cache/clearCacheAll',
-		method: 'delete'
-	});
+  return request({
+    url: '/monitor/cache/clearCacheAll',
+    method: 'delete'
+  });
 }

+ 3 - 3
src/api/monitor/cache/types.ts

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

+ 17 - 17
src/api/monitor/loginInfo/index.ts

@@ -4,33 +4,33 @@ import { AxiosPromise } from 'axios';
 
 // 查询登录日志列表
 export function list(query: LoginInfoQuery): AxiosPromise<LoginInfoVO[]> {
-	return request({
-		url: '/monitor/logininfor/list',
-		method: 'get',
-		params: query
-	});
+  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'
-	});
+  return request({
+    url: '/monitor/logininfor/' + infoId,
+    method: 'delete'
+  });
 }
 
 // 解锁用户登录状态
 export function unlockLoginInfo(userName: string | Array<string>) {
-	return request({
-		url: '/monitor/logininfor/unlock/' + userName,
-		method: 'get'
-	});
+  return request({
+    url: '/monitor/logininfor/unlock/' + userName,
+    method: 'get'
+  });
 }
 
 // 清空登录日志
 export function cleanLoginInfo() {
-	return request({
-		url: '/monitor/logininfor/clean',
-		method: 'delete'
-	});
+  return request({
+    url: '/monitor/logininfor/clean',
+    method: 'delete'
+  });
 }

+ 15 - 15
src/api/monitor/loginInfo/types.ts

@@ -1,20 +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;
+  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;
+  ipaddr: string;
+  userName: string;
+  status: string;
+  orderByColumn: string;
+  isAsc: string;
 }

+ 9 - 9
src/api/monitor/online/index.ts

@@ -4,17 +4,17 @@ import { AxiosPromise } from 'axios';
 
 // 查询在线用户列表
 export function list(query: OnlineQuery): AxiosPromise<OnlineVO[]> {
-	return request({
-		url: '/monitor/online/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/monitor/online/list',
+    method: 'get',
+    params: query
+  });
 }
 
 // 强退用户
 export function forceLogout(tokenId: string) {
-	return request({
-		url: '/monitor/online/' + tokenId,
-		method: 'delete'
-	});
+  return request({
+    url: '/monitor/online/' + tokenId,
+    method: 'delete'
+  });
 }

+ 10 - 10
src/api/monitor/online/types.ts

@@ -1,15 +1,15 @@
 export interface OnlineQuery extends PageQuery {
-	ipaddr: string;
-	userName: string;
+  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;
+  tokenId: string;
+  deptName: string;
+  userName: string;
+  ipaddr: string;
+  loginLocation: string;
+  browser: string;
+  os: string;
+  loginTime: number;
 }

+ 13 - 13
src/api/monitor/operlog/index.ts

@@ -4,25 +4,25 @@ import { AxiosPromise } from 'axios';
 
 // 查询操作日志列表
 export function list(query: OperLogQuery): AxiosPromise<OperLogVO[]> {
-	return request({
-		url: '/monitor/operlog/list',
-		method: 'get',
-		params: query
-	});
+  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'
-	});
+  return request({
+    url: '/monitor/operlog/' + operId,
+    method: 'delete'
+  });
 }
 
 // 清空操作日志
 export function cleanOperlog() {
-	return request({
-		url: '/monitor/operlog/clean',
-		method: 'delete'
-	});
+  return request({
+    url: '/monitor/operlog/clean',
+    method: 'delete'
+  });
 }

+ 44 - 44
src/api/monitor/operlog/types.ts

@@ -1,52 +1,52 @@
 export interface OperLogQuery extends PageQuery {
-	title: string;
-	operName: string;
-	businessType: string;
-	status: string;
-	orderByColumn: string;
-	isAsc: 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;
+  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;
+  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;
 }

+ 39 - 39
src/api/system/config/index.ts

@@ -4,71 +4,71 @@ import { AxiosPromise } from 'axios';
 
 // 查询参数列表
 export function listConfig(query: ConfigQuery): AxiosPromise<ConfigVO[]> {
-	return request({
-		url: '/system/config/list',
-		method: 'get',
-		params: query
-	});
+  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'
-	});
+  return request({
+    url: '/system/config/' + configId,
+    method: 'get'
+  });
 }
 
 // 根据参数键名查询参数值
 export function getConfigKey(configKey: string): AxiosPromise<ConfigVO> {
-	return request({
-		url: '/system/config/configKey/' + configKey,
-		method: 'get'
-	});
+  return request({
+    url: '/system/config/configKey/' + configKey,
+    method: 'get'
+  });
 }
 
 // 新增参数配置
 export function addConfig(data: ConfigForm) {
-	return request({
-		url: '/system/config',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/system/config',
+    method: 'post',
+    data: data
+  });
 }
 
 // 修改参数配置
 export function updateConfig(data: ConfigForm) {
-	return request({
-		url: '/system/config',
-		method: 'put',
-		data: data
-	});
+  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
-		}
-	});
+  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'
-	});
+  return request({
+    url: '/system/config/' + configId,
+    method: 'delete'
+  });
 }
 
 // 刷新参数缓存
 export function refreshCache() {
-	return request({
-		url: '/system/config/refreshCache',
-		method: 'delete'
-	});
+  return request({
+    url: '/system/config/refreshCache',
+    method: 'delete'
+  });
 }

+ 15 - 15
src/api/system/config/types.ts

@@ -1,23 +1,23 @@
 export interface ConfigVO extends BaseEntity {
-	configId: number | string;
-	configName: string;
-	configKey: string;
-	configValue: string;
-	configType: string;
-	remark: string;
+  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;
+  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;
+  configName: string;
+  configKey: string;
+  configType: string;
 }

+ 31 - 31
src/api/system/dept/index.ts

@@ -4,59 +4,59 @@ import { DeptForm, DeptQuery, DeptVO } from './types';
 
 // 查询部门列表
 export const listDept = (query?: DeptQuery) => {
-	return request({
-		url: '/system/dept/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  });
 };
 
 // 查询部门列表(排除节点)
 export const listDeptExcludeChild = (deptId: string | number): AxiosPromise<DeptVO[]> => {
-	return request({
-		url: '/system/dept/list/exclude/' + deptId,
-		method: 'get'
-	});
+  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'
-	});
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'get'
+  });
 };
 
 // 查询部门下拉树结构
 export const treeselect = (): AxiosPromise<DeptVO[]> => {
-	return request({
-		url: '/system/dept/treeselect',
-		method: 'get'
-	});
+  return request({
+    url: '/system/dept/treeselect',
+    method: 'get'
+  });
 };
 
 // 新增部门
 export const addDept = (data: DeptForm) => {
-	return request({
-		url: '/system/dept',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/system/dept',
+    method: 'post',
+    data: data
+  });
 };
 
 // 修改部门
 export const updateDept = (data: DeptForm) => {
-	return request({
-		url: '/system/dept',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/system/dept',
+    method: 'put',
+    data: data
+  });
 };
 
 // 删除部门
 export const delDept = (deptId: number | string) => {
-	return request({
-		url: '/system/dept/' + deptId,
-		method: 'delete'
-	});
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'delete'
+  });
 };

+ 28 - 28
src/api/system/dept/types.ts

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

+ 27 - 27
src/api/system/dict/data/index.ts

@@ -3,51 +3,51 @@ 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'
-	});
+  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
-	});
+  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'
-	});
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'get'
+  });
 }
 
 // 新增字典数据
 export function addData(data: DictDataForm) {
-	return request({
-		url: '/system/dict/data',
-		method: 'post',
-		data: data
-	});
+  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
-	});
+  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'
-	});
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'delete'
+  });
 }

+ 21 - 21
src/api/system/dict/data/types.ts

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

+ 31 - 31
src/api/system/dict/type/index.ts

@@ -4,59 +4,59 @@ import { AxiosPromise } from 'axios';
 
 // 查询字典类型列表
 export function listType(query: DictTypeQuery): AxiosPromise<DictTypeVO[]> {
-	return request({
-		url: '/system/dict/type/list',
-		method: 'get',
-		params: query
-	});
+  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'
-	});
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'get'
+  });
 }
 
 // 新增字典类型
 export function addType(data: DictTypeForm) {
-	return request({
-		url: '/system/dict/type',
-		method: 'post',
-		data: data
-	});
+  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
-	});
+  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'
-	});
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'delete'
+  });
 }
 
 // 刷新字典缓存
 export function refreshCache() {
-	return request({
-		url: '/system/dict/type/refreshCache',
-		method: 'delete'
-	});
+  return request({
+    url: '/system/dict/type/refreshCache',
+    method: 'delete'
+  });
 }
 
 // 获取字典选择框列表
 export function optionselect(): AxiosPromise<DictTypeVO[]> {
-	return request({
-		url: '/system/dict/type/optionselect',
-		method: 'get'
-	});
+  return request({
+    url: '/system/dict/type/optionselect',
+    method: 'get'
+  });
 }

+ 13 - 13
src/api/system/dict/type/types.ts

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

+ 35 - 35
src/api/system/menu/index.ts

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

+ 44 - 44
src/api/system/menu/types.ts

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

+ 23 - 23
src/api/system/notice/index.ts

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

+ 18 - 18
src/api/system/notice/types.ts

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

+ 13 - 13
src/api/system/oss/index.ts

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

+ 15 - 15
src/api/system/oss/types.ts

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

+ 33 - 33
src/api/system/ossConfig/index.ts

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

+ 30 - 30
src/api/system/ossConfig/types.ts

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

+ 23 - 23
src/api/system/post/index.ts

@@ -4,43 +4,43 @@ import { AxiosPromise } from 'axios';
 
 // 查询岗位列表
 export function listPost(query: PostQuery): AxiosPromise<PostVO[]> {
-	return request({
-		url: '/system/post/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/system/post/list',
+    method: 'get',
+    params: query
+  });
 }
 
 // 查询岗位详细
 export function getPost(postId: string | number): AxiosPromise<PostVO> {
-	return request({
-		url: '/system/post/' + postId,
-		method: 'get'
-	});
+  return request({
+    url: '/system/post/' + postId,
+    method: 'get'
+  });
 }
 
 // 新增岗位
 export function addPost(data: PostForm) {
-	return request({
-		url: '/system/post',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/system/post',
+    method: 'post',
+    data: data
+  });
 }
 
 // 修改岗位
 export function updatePost(data: PostForm) {
-	return request({
-		url: '/system/post',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/system/post',
+    method: 'put',
+    data: data
+  });
 }
 
 // 删除岗位
 export function delPost(postId: string | number | (string | number)[]) {
-	return request({
-		url: '/system/post/' + postId,
-		method: 'delete'
-	});
+  return request({
+    url: '/system/post/' + postId,
+    method: 'delete'
+  });
 }

+ 15 - 15
src/api/system/post/types.ts

@@ -1,23 +1,23 @@
 export interface PostVO extends BaseEntity {
-	postId: number | string;
-	postCode: string;
-	postName: string;
-	postSort: number;
-	status: string;
-	remark: string;
+  postId: number | string;
+  postCode: string;
+  postName: string;
+  postSort: number;
+  status: string;
+  remark: string;
 }
 
 export interface PostForm {
-	postId: number | string | undefined;
-	postCode: string;
-	postName: string;
-	postSort: number;
-	status: string;
-	remark: string;
+  postId: number | string | undefined;
+  postCode: string;
+  postName: string;
+  postSort: number;
+  status: string;
+  remark: string;
 }
 
 export interface PostQuery extends PageQuery {
-	postCode: string;
-	postName: string;
-	status: string;
+  postCode: string;
+  postName: string;
+  status: string;
 }

+ 66 - 66
src/api/system/role/index.ts

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

+ 35 - 35
src/api/system/role/types.ts

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

+ 50 - 50
src/api/system/tenant/index.ts

@@ -4,86 +4,86 @@ import { AxiosPromise } from 'axios';
 
 // 查询租户列表
 export function listTenant(query: TenantQuery): AxiosPromise<TenantVO[]> {
-	return request({
-		url: '/system/tenant/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/system/tenant/list',
+    method: 'get',
+    params: query
+  });
 }
 
 // 查询租户详细
 export function getTenant(id: string | number): AxiosPromise<TenantVO> {
-	return request({
-		url: '/system/tenant/' + id,
-		method: 'get'
-	});
+  return request({
+    url: '/system/tenant/' + id,
+    method: 'get'
+  });
 }
 
 // 新增租户
 export function addTenant(data: TenantForm) {
-	return request({
-		url: '/system/tenant',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/system/tenant',
+    method: 'post',
+    data: data
+  });
 }
 
 // 修改租户
 export function updateTenant(data: TenantForm) {
-	return request({
-		url: '/system/tenant',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/system/tenant',
+    method: 'put',
+    data: data
+  });
 }
 
 // 租户状态修改
 export function changeTenantStatus(id: string | number, tenantId: string | number, status: string) {
-	const data = {
-		id,
-		tenantId,
-		status
-	};
-	return request({
-		url: '/system/tenant/changeStatus',
-		method: 'put',
-		data: data
-	});
+  const data = {
+    id,
+    tenantId,
+    status
+  };
+  return request({
+    url: '/system/tenant/changeStatus',
+    method: 'put',
+    data: data
+  });
 }
 
 // 删除租户
 export function delTenant(id: string | number | Array<string | number>) {
-	return request({
-		url: '/system/tenant/' + id,
-		method: 'delete'
-	});
+  return request({
+    url: '/system/tenant/' + id,
+    method: 'delete'
+  });
 }
 
 // 动态切换租户
 export function dynamicTenant(tenantId: string | number) {
-	return request({
-		url: '/system/tenant/dynamic/' + tenantId,
-		method: 'get'
-	});
+  return request({
+    url: '/system/tenant/dynamic/' + tenantId,
+    method: 'get'
+  });
 }
 
 // 清除动态租户
 export function dynamicClear() {
-	return request({
-		url: '/system/tenant/dynamic/clear',
-		method: 'get'
-	});
+  return request({
+    url: '/system/tenant/dynamic/clear',
+    method: 'get'
+  });
 }
 
 // 同步租户套餐
 export function syncTenantPackage(tenantId: string | number, packageId: string | number) {
-	const data = {
-		tenantId,
-		packageId
-	};
-	return request({
-		url: '/system/tenant/syncTenantPackage',
-		method: 'get',
-		params: data
-	});
+  const data = {
+    tenantId,
+    packageId
+  };
+  return request({
+    url: '/system/tenant/syncTenantPackage',
+    method: 'get',
+    params: data
+  });
 }

+ 35 - 35
src/api/system/tenant/types.ts

@@ -1,46 +1,46 @@
 export interface TenantVO extends BaseEntity {
-	id: number | string;
-	tenantId: number | string;
-	username: string;
-	contactUserName: string;
-	contactPhone: string;
-	companyName: string;
-	licenseNumber: string;
-	address: string;
-	domain: string;
-	intro: string;
-	remark: string;
-	packageId: string | number;
-	expireTime: string;
-	accountCount: number;
-	status: string;
+  id: number | string;
+  tenantId: number | string;
+  username: string;
+  contactUserName: string;
+  contactPhone: string;
+  companyName: string;
+  licenseNumber: string;
+  address: string;
+  domain: string;
+  intro: string;
+  remark: string;
+  packageId: string | number;
+  expireTime: string;
+  accountCount: number;
+  status: string;
 }
 
 export interface TenantQuery extends PageQuery {
-	tenantId: string | number;
+  tenantId: string | number;
 
-	contactUserName: string;
+  contactUserName: string;
 
-	contactPhone: string;
+  contactPhone: string;
 
-	companyName: string;
+  companyName: string;
 }
 
 export interface TenantForm {
-	id: number | string | undefined;
-	tenantId: number | string | undefined;
-	username: string;
-	password: string;
-	contactUserName: string;
-	contactPhone: string;
-	companyName: string;
-	licenseNumber: string;
-	domain: string;
-	address: string;
-	intro: string;
-	remark: string;
-	packageId: string | number;
-	expireTime: string;
-	accountCount: number;
-	status: string;
+  id: number | string | undefined;
+  tenantId: number | string | undefined;
+  username: string;
+  password: string;
+  contactUserName: string;
+  contactPhone: string;
+  companyName: string;
+  licenseNumber: string;
+  domain: string;
+  address: string;
+  intro: string;
+  remark: string;
+  packageId: string | number;
+  expireTime: string;
+  accountCount: number;
+  status: string;
 }

+ 32 - 32
src/api/system/tenantPackage/index.ts

@@ -4,56 +4,56 @@ import { AxiosPromise } from 'axios';
 
 // 查询租户套餐列表
 export function listTenantPackage(query?: TenantPkgQuery): AxiosPromise<TenantPkgVO[]> {
-	return request({
-		url: '/system/tenant/package/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/system/tenant/package/list',
+    method: 'get',
+    params: query
+  });
 }
 
 // 查询租户套餐详细
 export function getTenantPackage(packageId: string | number): AxiosPromise<TenantPkgVO> {
-	return request({
-		url: '/system/tenant/package/' + packageId,
-		method: 'get'
-	});
+  return request({
+    url: '/system/tenant/package/' + packageId,
+    method: 'get'
+  });
 }
 
 // 新增租户套餐
 export function addTenantPackage(data: TenantPkgForm) {
-	return request({
-		url: '/system/tenant/package',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/system/tenant/package',
+    method: 'post',
+    data: data
+  });
 }
 
 // 修改租户套餐
 export function updateTenantPackage(data: TenantPkgForm) {
-	return request({
-		url: '/system/tenant/package',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/system/tenant/package',
+    method: 'put',
+    data: data
+  });
 }
 
 // 租户套餐状态修改
 export function changePackageStatus(packageId: number | string, status: string) {
-	const data = {
-		packageId,
-		status
-	};
-	return request({
-		url: '/system/tenant/package/changeStatus',
-		method: 'put',
-		data: data
-	});
+  const data = {
+    packageId,
+    status
+  };
+  return request({
+    url: '/system/tenant/package/changeStatus',
+    method: 'put',
+    data: data
+  });
 }
 
 // 删除租户套餐
 export function delTenantPackage(packageId: string | number | Array<string | number>) {
-	return request({
-		url: '/system/tenant/package/' + packageId,
-		method: 'delete'
-	});
+  return request({
+    url: '/system/tenant/package/' + packageId,
+    method: 'delete'
+  });
 }

+ 14 - 14
src/api/system/tenantPackage/types.ts

@@ -1,22 +1,22 @@
 export interface TenantPkgVO extends BaseEntity {
-	packageId: string | number;
-	packageName: string;
-	menuIds: string;
-	remark: string;
-	menuCheckStrictly: boolean;
-	status: string;
+  packageId: string | number;
+  packageName: string;
+  menuIds: string;
+  remark: string;
+  menuCheckStrictly: boolean;
+  status: string;
 }
 
 export interface TenantPkgQuery extends PageQuery {
-	packageName: string;
-	status: string;
+  packageName: string;
+  status: string;
 }
 
 export interface TenantPkgForm {
-	packageId: string | number | undefined;
-	packageName: string;
-	menuIds: string;
-	remark: string;
-	menuCheckStrictly: boolean;
-	status: string;
+  packageId: string | number | undefined;
+  packageName: string;
+  menuIds: string;
+  remark: string;
+  menuCheckStrictly: boolean;
+  status: string;
 }

+ 77 - 77
src/api/system/user/index.ts

@@ -10,11 +10,11 @@ import { parseStrEmpty } from '@/utils/ruoyi';
  * @param query
  */
 export function listUser(query: UserQuery): AxiosPromise<UserVO[]> {
-	return request({
-		url: '/system/user/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    url: '/system/user/list',
+    method: 'get',
+    params: query
+  });
 }
 
 /**
@@ -22,32 +22,32 @@ export function listUser(query: UserQuery): AxiosPromise<UserVO[]> {
  * @param userId
  */
 export function getUser(userId?: string | number): AxiosPromise<UserInfoVO> {
-	return request({
-		url: '/system/user/' + parseStrEmpty(userId),
-		method: 'get'
-	});
+  return request({
+    url: '/system/user/' + parseStrEmpty(userId),
+    method: 'get'
+  });
 }
 
 /**
  * 新增用户
  */
 export function addUser(data: UserForm) {
-	return request({
-		url: '/system/user',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/system/user',
+    method: 'post',
+    data: data
+  });
 }
 
 /**
  * 修改用户
  */
 export function updateUser(data: UserForm) {
-	return request({
-		url: '/system/user',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/system/user',
+    method: 'put',
+    data: data
+  });
 }
 
 /**
@@ -55,10 +55,10 @@ export function updateUser(data: UserForm) {
  * @param userId 用户ID
  */
 export function delUser(userId: Array<string | number> | string | number) {
-	return request({
-		url: '/system/user/' + userId,
-		method: 'delete'
-	});
+  return request({
+    url: '/system/user/' + userId,
+    method: 'delete'
+  });
 }
 
 /**
@@ -67,15 +67,15 @@ export function delUser(userId: Array<string | number> | string | number) {
  * @param password 密码
  */
 export function resetUserPwd(userId: string | number, password: string) {
-	const data = {
-		userId,
-		password
-	};
-	return request({
-		url: '/system/user/resetPwd',
-		method: 'put',
-		data: data
-	});
+  const data = {
+    userId,
+    password
+  };
+  return request({
+    url: '/system/user/resetPwd',
+    method: 'put',
+    data: data
+  });
 }
 
 /**
@@ -84,25 +84,25 @@ export function resetUserPwd(userId: string | number, password: string) {
  * @param status 用户状态
  */
 export function changeUserStatus(userId: number | string, status: string) {
-	const data = {
-		userId,
-		status
-	};
-	return request({
-		url: '/system/user/changeStatus',
-		method: 'put',
-		data: data
-	});
+  const data = {
+    userId,
+    status
+  };
+  return request({
+    url: '/system/user/changeStatus',
+    method: 'put',
+    data: data
+  });
 }
 
 /**
  * 查询用户个人信息
  */
 export function getUserProfile(): AxiosPromise<UserInfoVO> {
-	return request({
-		url: '/system/user/profile',
-		method: 'get'
-	});
+  return request({
+    url: '/system/user/profile',
+    method: 'get'
+  });
 }
 
 /**
@@ -110,11 +110,11 @@ export function getUserProfile(): AxiosPromise<UserInfoVO> {
  * @param data 用户信息
  */
 export function updateUserProfile(data: UserForm) {
-	return request({
-		url: '/system/user/profile',
-		method: 'put',
-		data: data
-	});
+  return request({
+    url: '/system/user/profile',
+    method: 'put',
+    data: data
+  });
 }
 
 /**
@@ -123,15 +123,15 @@ export function updateUserProfile(data: UserForm) {
  * @param newPassword 新密码
  */
 export function updateUserPwd(oldPassword: string, newPassword: string) {
-	const data = {
-		oldPassword,
-		newPassword
-	};
-	return request({
-		url: '/system/user/profile/updatePwd',
-		method: 'put',
-		params: data
-	});
+  const data = {
+    oldPassword,
+    newPassword
+  };
+  return request({
+    url: '/system/user/profile/updatePwd',
+    method: 'put',
+    params: data
+  });
 }
 
 /**
@@ -139,11 +139,11 @@ export function updateUserPwd(oldPassword: string, newPassword: string) {
  * @param data 头像文件
  */
 export function uploadAvatar(data: FormData) {
-	return request({
-		url: '/system/user/profile/avatar',
-		method: 'post',
-		data: data
-	});
+  return request({
+    url: '/system/user/profile/avatar',
+    method: 'post',
+    data: data
+  });
 }
 
 /**
@@ -151,10 +151,10 @@ export function uploadAvatar(data: FormData) {
  * @param userId 用户ID
  */
 export function getAuthRole(userId: string | number): AxiosPromise<{ user: UserVO; roles: RoleVO[] }> {
-	return request({
-		url: '/system/user/authRole/' + userId,
-		method: 'get'
-	});
+  return request({
+    url: '/system/user/authRole/' + userId,
+    method: 'get'
+  });
 }
 
 /**
@@ -162,19 +162,19 @@ export function getAuthRole(userId: string | number): AxiosPromise<{ user: UserV
  * @param data 用户ID
  */
 export function updateAuthRole(data: { userId: string; roleIds: string }) {
-	return request({
-		url: '/system/user/authRole',
-		method: 'put',
-		params: data
-	});
+  return request({
+    url: '/system/user/authRole',
+    method: 'put',
+    params: data
+  });
 }
 
 /**
  * 查询部门下拉树结构
  */
 export function deptTreeSelect(): AxiosPromise<DeptVO[]> {
-	return request({
-		url: '/system/user/deptTree',
-		method: 'get'
-	});
+  return request({
+    url: '/system/user/deptTree',
+    method: 'get'
+  });
 }

+ 51 - 51
src/api/system/user/types.ts

@@ -6,79 +6,79 @@ import { PostVO } from '@/api/system/post/types';
  * 用户信息
  */
 export interface UserInfo {
-	user: UserVO;
-	roles: string[];
-	permissions: string[];
+  user: UserVO;
+  roles: string[];
+  permissions: string[];
 }
 
 /**
  * 用户查询对象类型
  */
 export interface UserQuery extends PageQuery {
-	userName?: string;
-	phonenumber?: string;
-	status?: string;
-	deptId?: string | number;
-	roleId?: string | number;
+  userName?: string;
+  phonenumber?: string;
+  status?: string;
+  deptId?: string | number;
+  roleId?: string | number;
 }
 
 /**
  * 用户返回对象
  */
 export interface UserVO extends BaseEntity {
-	userId: string | number;
-	deptId: number;
-	userName: string;
-	nickName: string;
-	userType: string;
-	email: string;
-	phonenumber: string;
-	sex: string;
-	avatar: string;
-	status: string;
-	delFlag: string;
-	loginIp: string;
-	loginDate: string;
-	remark: string;
-	dept: DeptVO;
-	roles: RoleVO[];
-	roleIds: any;
-	postIds: any;
-	roleId: any;
-	admin: boolean;
+  userId: string | number;
+  deptId: number;
+  userName: string;
+  nickName: string;
+  userType: string;
+  email: string;
+  phonenumber: string;
+  sex: string;
+  avatar: string;
+  status: string;
+  delFlag: string;
+  loginIp: string;
+  loginDate: string;
+  remark: string;
+  dept: DeptVO;
+  roles: RoleVO[];
+  roleIds: any;
+  postIds: any;
+  roleId: any;
+  admin: boolean;
 }
 
 /**
  * 用户表单类型
  */
 export interface UserForm {
-	id?: string;
-	userId?: string;
-	deptId?: number;
-	userName: string;
-	nickName?: string;
-	password: string;
-	phonenumber?: string;
-	email?: string;
-	sex?: string;
-	status: string;
-	remark?: string;
-	postIds: string[];
-	roleIds: string[];
+  id?: string;
+  userId?: string;
+  deptId?: number;
+  userName: string;
+  nickName?: string;
+  password: string;
+  phonenumber?: string;
+  email?: string;
+  sex?: string;
+  status: string;
+  remark?: string;
+  postIds: string[];
+  roleIds: string[];
 }
 
 export interface UserInfoVO {
-	user: UserVO;
-	roles: RoleVO[];
-	roleIds: string[];
-	posts: PostVO[];
-	postIds: string[];
-	roleGroup: string;
-	postGroup: string;
+  user: UserVO;
+  roles: RoleVO[];
+  roleIds: string[];
+  posts: PostVO[];
+  postIds: string[];
+  roleGroup: string;
+  postGroup: string;
 }
 
 export interface ResetPwdForm {
-	oldPassword: string;
-	newPassword: string;
-	confirmPassword: string;
+  oldPassword: string;
+  newPassword: string;
+  confirmPassword: string;
 }

+ 49 - 49
src/api/tool/gen/index.ts

@@ -4,84 +4,84 @@ import { AxiosPromise } from 'axios';
 
 // 查询生成表数据
 export const listTable = (query: TableQuery): AxiosPromise<TableVO[]> => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/list',
+    method: 'get',
+    params: query
+  });
 };
 // 查询db数据库列表
 export const listDbTable = (query: DbTableQuery): AxiosPromise<DbTableVO[]> => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/db/list',
-		method: 'get',
-		params: query
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/db/list',
+    method: 'get',
+    params: query
+  });
 };
 
 // 查询表详细信息
 export const getGenTable = (tableId: string | number): AxiosPromise<GenTableVO> => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/' + tableId,
-		method: 'get'
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/' + tableId,
+    method: 'get'
+  });
 };
 
 // 修改代码生成信息
 export const updateGenTable = (data: DbTableForm) => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen',
-		method: 'put',
-		data: data
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen',
+    method: 'put',
+    data: data
+  });
 };
 
 // 导入表
 export const importTable = (data: { tables: string }) => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/importTable',
-		method: 'post',
-		params: data
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/importTable',
+    method: 'post',
+    params: data
+  });
 };
 
 // 预览生成代码
 export const previewTable = (tableId: string | number) => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/preview/' + tableId,
-		method: 'get'
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/preview/' + tableId,
+    method: 'get'
+  });
 };
 
 // 删除表数据
 export const delTable = (tableId: string | number | Array<string | number>) => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/' + tableId,
-		method: 'delete'
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/' + tableId,
+    method: 'delete'
+  });
 };
 
 // 生成代码(自定义路径)
 export const genCode = (tableName: string) => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/genCode/' + tableName,
-		method: 'get'
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/genCode/' + tableName,
+    method: 'get'
+  });
 };
 
 // 同步数据库
 export const synchDb = (tableName: string) => {
-	return request({
-		headers: { datasource: localStorage.getItem('dataName') },
-		url: '/tool/gen/synchDb/' + tableName,
-		method: 'get'
-	});
+  return request({
+    headers: { datasource: localStorage.getItem('dataName') },
+    url: '/tool/gen/synchDb/' + tableName,
+    method: 'get'
+  });
 };

+ 152 - 152
src/api/tool/gen/types.ts

@@ -1,178 +1,178 @@
 export interface TableVO extends BaseEntity {
-	createDept: number | string;
-	tableId: string | number;
-	tableName: string;
-	tableComment: string;
-	subTableName?: any;
-	subTableFkName?: any;
-	className: string;
-	tplCategory: string;
-	packageName: string;
-	moduleName: string;
-	businessName: string;
-	functionName: string;
-	functionAuthor: string;
-	genType: string;
-	genPath: string;
-	pkColumn?: any;
-	columns?: any;
-	options?: any;
-	remark?: any;
-	treeCode?: any;
-	treeParentCode?: any;
-	treeName?: any;
-	menuIds?: any;
-	parentMenuId?: any;
-	parentMenuName?: any;
-	tree: boolean;
-	crud: boolean;
+  createDept: number | string;
+  tableId: string | number;
+  tableName: string;
+  tableComment: string;
+  subTableName?: any;
+  subTableFkName?: any;
+  className: string;
+  tplCategory: string;
+  packageName: string;
+  moduleName: string;
+  businessName: string;
+  functionName: string;
+  functionAuthor: string;
+  genType: string;
+  genPath: string;
+  pkColumn?: any;
+  columns?: any;
+  options?: any;
+  remark?: any;
+  treeCode?: any;
+  treeParentCode?: any;
+  treeName?: any;
+  menuIds?: any;
+  parentMenuId?: any;
+  parentMenuName?: any;
+  tree: boolean;
+  crud: boolean;
 }
 
 export interface TableQuery extends PageQuery {
-	tableName: string;
-	tableComment: string;
-	dataName: string;
+  tableName: string;
+  tableComment: string;
+  dataName: string;
 }
 
 export interface DbColumnVO extends BaseEntity {
-	createDept?: any;
-	columnId?: any;
-	tableId?: any;
-	columnName?: any;
-	columnComment?: any;
-	columnType?: any;
-	javaType?: any;
-	javaField?: any;
-	isPk?: any;
-	isIncrement?: any;
-	isRequired?: any;
-	isInsert?: any;
-	isEdit?: any;
-	isList?: any;
-	isQuery?: any;
-	queryType?: any;
-	htmlType?: any;
-	dictType?: any;
-	sort?: any;
-	increment: boolean;
-	capJavaField?: any;
-	usableColumn: boolean;
-	superColumn: boolean;
-	list: boolean;
-	pk: boolean;
-	insert: boolean;
-	edit: boolean;
-	query: boolean;
-	required: boolean;
+  createDept?: any;
+  columnId?: any;
+  tableId?: any;
+  columnName?: any;
+  columnComment?: any;
+  columnType?: any;
+  javaType?: any;
+  javaField?: any;
+  isPk?: any;
+  isIncrement?: any;
+  isRequired?: any;
+  isInsert?: any;
+  isEdit?: any;
+  isList?: any;
+  isQuery?: any;
+  queryType?: any;
+  htmlType?: any;
+  dictType?: any;
+  sort?: any;
+  increment: boolean;
+  capJavaField?: any;
+  usableColumn: boolean;
+  superColumn: boolean;
+  list: boolean;
+  pk: boolean;
+  insert: boolean;
+  edit: boolean;
+  query: boolean;
+  required: boolean;
 }
 
 export interface DbTableVO {
-	createDept?: any;
-	tableId?: any;
-	tableName: string;
-	tableComment: string;
-	subTableName?: any;
-	subTableFkName?: any;
-	className?: any;
-	tplCategory?: any;
-	packageName?: any;
-	moduleName?: any;
-	businessName?: any;
-	functionName?: any;
-	functionAuthor?: any;
-	genType?: any;
-	genPath?: any;
-	pkColumn?: any;
-	columns: DbColumnVO[];
-	options?: any;
-	remark?: any;
-	treeCode?: any;
-	treeParentCode?: any;
-	treeName?: any;
-	menuIds?: any;
-	parentMenuId?: any;
-	parentMenuName?: any;
-	tree: boolean;
-	crud: boolean;
+  createDept?: any;
+  tableId?: any;
+  tableName: string;
+  tableComment: string;
+  subTableName?: any;
+  subTableFkName?: any;
+  className?: any;
+  tplCategory?: any;
+  packageName?: any;
+  moduleName?: any;
+  businessName?: any;
+  functionName?: any;
+  functionAuthor?: any;
+  genType?: any;
+  genPath?: any;
+  pkColumn?: any;
+  columns: DbColumnVO[];
+  options?: any;
+  remark?: any;
+  treeCode?: any;
+  treeParentCode?: any;
+  treeName?: any;
+  menuIds?: any;
+  parentMenuId?: any;
+  parentMenuName?: any;
+  tree: boolean;
+  crud: boolean;
 }
 
 export interface DbTableQuery extends PageQuery {
-	tableName: string;
-	tableComment: string;
+  tableName: string;
+  tableComment: string;
 }
 
 export interface GenTableVO {
-	info: DbTableVO;
-	rows: DbColumnVO[];
-	tables: DbTableVO[];
+  info: DbTableVO;
+  rows: DbColumnVO[];
+  tables: DbTableVO[];
 }
 
 export interface DbColumnForm extends BaseEntity {
-	createDept: number;
-	columnId: string;
-	tableId: string;
-	columnName: string;
-	columnComment: string;
-	columnType: string;
-	javaType: string;
-	javaField: string;
-	isPk: string;
-	isIncrement: string;
-	isRequired: string;
-	isInsert?: any;
-	isEdit: string;
-	isList: string;
-	isQuery?: any;
-	queryType: string;
-	htmlType: string;
-	dictType: string;
-	sort: number;
-	increment: boolean;
-	capJavaField: string;
-	usableColumn: boolean;
-	superColumn: boolean;
-	list: boolean;
-	pk: boolean;
-	insert: boolean;
-	edit: boolean;
-	query: boolean;
-	required: boolean;
+  createDept: number;
+  columnId: string;
+  tableId: string;
+  columnName: string;
+  columnComment: string;
+  columnType: string;
+  javaType: string;
+  javaField: string;
+  isPk: string;
+  isIncrement: string;
+  isRequired: string;
+  isInsert?: any;
+  isEdit: string;
+  isList: string;
+  isQuery?: any;
+  queryType: string;
+  htmlType: string;
+  dictType: string;
+  sort: number;
+  increment: boolean;
+  capJavaField: string;
+  usableColumn: boolean;
+  superColumn: boolean;
+  list: boolean;
+  pk: boolean;
+  insert: boolean;
+  edit: boolean;
+  query: boolean;
+  required: boolean;
 }
 
 export interface DbParamForm {
-	treeCode?: any;
-	treeName?: any;
-	treeParentCode?: any;
-	parentMenuId: string;
+  treeCode?: any;
+  treeName?: any;
+  treeParentCode?: any;
+  parentMenuId: string;
 }
 
 export interface DbTableForm extends BaseEntity {
-	createDept?: any;
-	tableId: string | string;
-	tableName: string;
-	tableComment: string;
-	subTableName?: any;
-	subTableFkName?: any;
-	className: string;
-	tplCategory: string;
-	packageName: string;
-	moduleName: string;
-	businessName: string;
-	functionName: string;
-	functionAuthor: string;
-	genType: string;
-	genPath: string;
-	pkColumn?: any;
-	columns: DbColumnForm[];
-	options: string;
-	remark?: any;
-	treeCode?: any;
-	treeParentCode?: any;
-	treeName?: any;
-	menuIds?: any;
-	parentMenuId: string;
-	parentMenuName?: any;
-	tree: boolean;
-	crud: boolean;
-	params: DbParamForm;
+  createDept?: any;
+  tableId: string | string;
+  tableName: string;
+  tableComment: string;
+  subTableName?: any;
+  subTableFkName?: any;
+  className: string;
+  tplCategory: string;
+  packageName: string;
+  moduleName: string;
+  businessName: string;
+  functionName: string;
+  functionAuthor: string;
+  genType: string;
+  genPath: string;
+  pkColumn?: any;
+  columns: DbColumnForm[];
+  options: string;
+  remark?: any;
+  treeCode?: any;
+  treeParentCode?: any;
+  treeName?: any;
+  menuIds?: any;
+  parentMenuId: string;
+  parentMenuName?: any;
+  tree: boolean;
+  crud: boolean;
+  params: DbParamForm;
 }

+ 22 - 22
src/api/types.ts

@@ -2,53 +2,53 @@
  * 注册
  */
 export type RegisterForm = {
-	tenantId: string;
-	username: string;
-	password: string;
-	confirmPassword?: string;
-	code?: string;
-	uuid?: string;
-	userType?: string;
+  tenantId: string;
+  username: string;
+  password: string;
+  confirmPassword?: string;
+  code?: string;
+  uuid?: string;
+  userType?: string;
 };
 
 /**
  * 登录请求
  */
 export interface LoginData {
-	tenantId: string;
-	username: string;
-	password: string;
-	rememberMe?: boolean;
-	code?: string;
-	uuid?: string;
+  tenantId: string;
+  username: string;
+  password: string;
+  rememberMe?: boolean;
+  code?: string;
+  uuid?: string;
 }
 
 /**
  * 登录响应
  */
 export interface LoginResult {
-	token: string;
+  token: string;
 }
 
 /**
  * 验证码返回
  */
 export interface VerifyCodeResult {
-	captchaEnabled: boolean;
-	uuid?: string;
-	img?: string;
+  captchaEnabled: boolean;
+  uuid?: string;
+  img?: string;
 }
 
 /**
  * 租户
  */
 export interface TenantVO {
-	companyName: string;
-	domain: any;
-	tenantId: string;
+  companyName: string;
+  domain: any;
+  tenantId: string;
 }
 
 export interface TenantInfo {
-	tenantEnabled: boolean;
-	voList: TenantVO[];
+  tenantEnabled: boolean;
+  voList: TenantVO[];
 }

+ 66 - 66
src/assets/styles/btn.scss

@@ -1,99 +1,99 @@
 @import './variables.module.scss';
 
 @mixin colorBtn($color) {
-	background: $color;
+  background: $color;
 
-	&:hover {
-		color: $color;
+  &:hover {
+    color: $color;
 
-		&:before,
-		&:after {
-			background: $color;
-		}
-	}
+    &:before,
+    &:after {
+      background: $color;
+    }
+  }
 }
 
 .blue-btn {
-	@include colorBtn($blue);
+  @include colorBtn($blue);
 }
 
 .light-blue-btn {
-	@include colorBtn($light-blue);
+  @include colorBtn($light-blue);
 }
 
 .red-btn {
-	@include colorBtn($red);
+  @include colorBtn($red);
 }
 
 .pink-btn {
-	@include colorBtn($pink);
+  @include colorBtn($pink);
 }
 
 .green-btn {
-	@include colorBtn($green);
+  @include colorBtn($green);
 }
 
 .tiffany-btn {
-	@include colorBtn($tiffany);
+  @include colorBtn($tiffany);
 }
 
 .yellow-btn {
-	@include colorBtn($yellow);
+  @include colorBtn($yellow);
 }
 
 .pan-btn {
-	font-size: 14px;
-	color: #fff;
-	padding: 14px 36px;
-	border-radius: 8px;
-	border: none;
-	outline: none;
-	transition: 600ms ease all;
-	position: relative;
-	display: inline-block;
-
-	&:hover {
-		background: #fff;
-
-		&:before,
-		&:after {
-			width: 100%;
-			transition: 600ms ease all;
-		}
-	}
-
-	&:before,
-	&:after {
-		content: '';
-		position: absolute;
-		top: 0;
-		right: 0;
-		height: 2px;
-		width: 0;
-		transition: 400ms ease all;
-	}
-
-	&::after {
-		right: inherit;
-		top: inherit;
-		left: 0;
-		bottom: 0;
-	}
+  font-size: 14px;
+  color: #fff;
+  padding: 14px 36px;
+  border-radius: 8px;
+  border: none;
+  outline: none;
+  transition: 600ms ease all;
+  position: relative;
+  display: inline-block;
+
+  &:hover {
+    background: #fff;
+
+    &:before,
+    &:after {
+      width: 100%;
+      transition: 600ms ease all;
+    }
+  }
+
+  &:before,
+  &:after {
+    content: '';
+    position: absolute;
+    top: 0;
+    right: 0;
+    height: 2px;
+    width: 0;
+    transition: 400ms ease all;
+  }
+
+  &::after {
+    right: inherit;
+    top: inherit;
+    left: 0;
+    bottom: 0;
+  }
 }
 
 .custom-button {
-	display: inline-block;
-	line-height: 1;
-	white-space: nowrap;
-	cursor: pointer;
-	background: #fff;
-	color: #fff;
-	-webkit-appearance: none;
-	text-align: center;
-	box-sizing: border-box;
-	outline: 0;
-	margin: 0;
-	padding: 10px 15px;
-	font-size: 14px;
-	border-radius: 4px;
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #fff;
+  color: #fff;
+  -webkit-appearance: none;
+  text-align: center;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  padding: 10px 15px;
+  font-size: 14px;
+  border-radius: 4px;
 }

+ 45 - 45
src/assets/styles/element-ui.scss

@@ -1,97 +1,97 @@
 // cover some element-ui styles
 
 .el-divider--horizontal {
-	margin-bottom: 10px;
-	margin-top: 10px;
+  margin-bottom: 10px;
+  margin-top: 10px;
 }
 
 .el-breadcrumb__inner,
 .el-breadcrumb__inner a {
-	font-weight: 400 !important;
+  font-weight: 400 !important;
 }
 
 .el-upload {
-	input[type='file'] {
-		display: none !important;
-	}
+  input[type='file'] {
+    display: none !important;
+  }
 }
 
 .el-upload__input {
-	display: none;
+  display: none;
 }
 
 .cell {
-	.el-tag {
-		margin-right: 0px;
-	}
+  .el-tag {
+    margin-right: 0px;
+  }
 }
 
 .small-padding {
-	.cell {
-		padding-left: 5px;
-		padding-right: 5px;
-	}
+  .cell {
+    padding-left: 5px;
+    padding-right: 5px;
+  }
 }
 
 .fixed-width {
-	.el-button--mini {
-		padding: 7px 10px;
-		width: 60px;
-	}
+  .el-button--mini {
+    padding: 7px 10px;
+    width: 60px;
+  }
 }
 
 .status-col {
-	.cell {
-		padding: 0 10px;
-		text-align: center;
-
-		.el-tag {
-			margin-right: 0px;
-		}
-	}
+  .cell {
+    padding: 0 10px;
+    text-align: center;
+
+    .el-tag {
+      margin-right: 0px;
+    }
+  }
 }
 
 // to fixed https://github.com/ElemeFE/element/issues/2461
 .el-dialog {
-	transform: none;
-	left: 0;
-	position: relative;
-	margin: 0 auto;
+  transform: none;
+  left: 0;
+  position: relative;
+  margin: 0 auto;
 }
 
 // refine element ui upload
 .upload-container {
-	.el-upload {
-		width: 100%;
-
-		.el-upload-dragger {
-			width: 100%;
-			height: 200px;
-		}
-	}
+  .el-upload {
+    width: 100%;
+
+    .el-upload-dragger {
+      width: 100%;
+      height: 200px;
+    }
+  }
 }
 
 // dropdown
 .el-dropdown-menu {
-	a {
-		display: block;
-	}
+  a {
+    display: block;
+  }
 }
 
 // fix date-picker ui bug in filter-item
 .el-range-editor.el-input__inner {
-	display: inline-flex !important;
+  display: inline-flex !important;
 }
 
 // to fix el-date-picker css style
 .el-range-separator {
-	box-sizing: content-box;
+  box-sizing: content-box;
 }
 
 .el-menu--collapse>div>.el-submenu>.el-submenu__title .el-submenu__icon-arrow {
-	display: none;
+  display: none;
 }
 
 .el-dropdown .el-dropdown-link {
-	color: var(--el-color-primary) !important;
+  color: var(--el-color-primary) !important;
 }

+ 98 - 98
src/assets/styles/index.scss

@@ -9,201 +9,201 @@
 @import 'element-plus/dist/index.css';
 
 body {
-	height: 100%;
-	margin: 0;
-	-moz-osx-font-smoothing: grayscale;
-	-webkit-font-smoothing: antialiased;
-	text-rendering: optimizeLegibility;
-	font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+  height: 100%;
+  margin: 0;
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
+  text-rendering: optimizeLegibility;
+  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
 }
 
 label {
-	font-weight: 700;
+  font-weight: 700;
 }
 
 html {
-	height: 100%;
-	box-sizing: border-box;
+  height: 100%;
+  box-sizing: border-box;
 }
 
 #app {
-	height: 100%;
+  height: 100%;
 }
 
 *,
 *:before,
 *:after {
-	box-sizing: inherit;
+  box-sizing: inherit;
 }
 
 .no-padding {
-	padding: 0px !important;
+  padding: 0px !important;
 }
 
 .padding-content {
-	padding: 4px 0;
+  padding: 4px 0;
 }
 
 a:focus,
 a:active {
-	outline: none;
+  outline: none;
 }
 
 a,
 a:focus,
 a:hover {
-	cursor: pointer;
-	color: inherit;
-	text-decoration: none;
+  cursor: pointer;
+  color: inherit;
+  text-decoration: none;
 }
 
 div:focus {
-	outline: none;
+  outline: none;
 }
 
 .fr {
-	float: right;
+  float: right;
 }
 
 .fl {
-	float: left;
+  float: left;
 }
 
 .pr-5 {
-	padding-right: 5px;
+  padding-right: 5px;
 }
 
 .pl-5 {
-	padding-left: 5px;
+  padding-left: 5px;
 }
 
 .block {
-	display: block;
+  display: block;
 }
 
 .pointer {
-	cursor: pointer;
+  cursor: pointer;
 }
 
 .inlineBlock {
-	display: block;
+  display: block;
 }
 
 .clearfix {
-	&:after {
-		visibility: hidden;
-		display: block;
-		font-size: 0;
-		content: ' ';
-		clear: both;
-		height: 0;
-	}
+  &:after {
+    visibility: hidden;
+    display: block;
+    font-size: 0;
+    content: ' ';
+    clear: both;
+    height: 0;
+  }
 }
 
 aside {
-	background: #eef1f6;
-	padding: 8px 24px;
-	margin-bottom: 20px;
-	border-radius: 2px;
-	display: block;
-	line-height: 32px;
-	font-size: 16px;
-	font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-		sans-serif;
-	color: #2c3e50;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-
-	a {
-		color: #337ab7;
-		cursor: pointer;
-
-		&:hover {
-			color: rgb(32, 160, 255);
-		}
-	}
+  background: #eef1f6;
+  padding: 8px 24px;
+  margin-bottom: 20px;
+  border-radius: 2px;
+  display: block;
+  line-height: 32px;
+  font-size: 16px;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
+    sans-serif;
+  color: #2c3e50;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+  a {
+    color: #337ab7;
+    cursor: pointer;
+
+    &:hover {
+      color: rgb(32, 160, 255);
+    }
+  }
 }
 
 //main-container全局样式
 .app-container {
-	padding: 20px;
+  padding: 20px;
 }
 
 // search面板样式
 .panel,
 .search {
-	margin-bottom: 0.75rem;
-	border-radius: 0.25rem;
-	border: 1px solid var(--el-border-color-light);
-	background-color: var(--el-bg-color-overlay);
-	padding: 0.75rem;
-	--tw-shadow: var(--el-box-shadow-light);
-	--tw-shadow-colored: var(--el-box-shadow-light);
-	box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+  margin-bottom: 0.75rem;
+  border-radius: 0.25rem;
+  border: 1px solid var(--el-border-color-light);
+  background-color: var(--el-bg-color-overlay);
+  padding: 0.75rem;
+  --tw-shadow: var(--el-box-shadow-light);
+  --tw-shadow-colored: var(--el-box-shadow-light);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
 }
 
 .components-container {
-	margin: 30px 50px;
-	position: relative;
+  margin: 30px 50px;
+  position: relative;
 }
 
 .pagination-container {
-	margin-top: 30px;
+  margin-top: 30px;
 }
 
 .text-center {
-	text-align: center;
+  text-align: center;
 }
 
 .sub-navbar {
-	height: 50px;
-	line-height: 50px;
-	position: relative;
-	width: 100%;
-	text-align: right;
-	padding-right: 20px;
-	transition: 600ms ease position;
-	background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
+  height: 50px;
+  line-height: 50px;
+  position: relative;
+  width: 100%;
+  text-align: right;
+  padding-right: 20px;
+  transition: 600ms ease position;
+  background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
 
-	.subtitle {
-		font-size: 20px;
-		color: #fff;
-	}
+  .subtitle {
+    font-size: 20px;
+    color: #fff;
+  }
 
-	&.draft {
-		background: #d0d0d0;
-	}
+  &.draft {
+    background: #d0d0d0;
+  }
 
-	&.deleted {
-		background: #d0d0d0;
-	}
+  &.deleted {
+    background: #d0d0d0;
+  }
 }
 
 .link-type,
 .link-type:focus {
-	color: #337ab7;
-	cursor: pointer;
+  color: #337ab7;
+  cursor: pointer;
 
-	&:hover {
-		color: rgb(32, 160, 255);
-	}
+  &:hover {
+    color: rgb(32, 160, 255);
+  }
 }
 
 .filter-container {
-	padding-bottom: 10px;
+  padding-bottom: 10px;
 
-	.filter-item {
-		display: inline-block;
-		vertical-align: middle;
-		margin-bottom: 10px;
-	}
+  .filter-item {
+    display: inline-block;
+    vertical-align: middle;
+    margin-bottom: 10px;
+  }
 }
 
 //refine vue-multiselect plugin
 .multiselect {
-	line-height: 16px;
+  line-height: 16px;
 }
 
 .multiselect--active {
-	z-index: 1000 !important;
+  z-index: 1000 !important;
 }

+ 43 - 43
src/assets/styles/mixin.scss

@@ -1,60 +1,60 @@
 @mixin clearfix {
-	&:after {
-		content: '';
-		display: table;
-		clear: both;
-	}
+  &:after {
+    content: '';
+    display: table;
+    clear: both;
+  }
 }
 
 @mixin scrollBar {
-	&::-webkit-scrollbar-track-piece {
-		background: #d3dce6;
-	}
+  &::-webkit-scrollbar-track-piece {
+    background: #d3dce6;
+  }
 
-	&::-webkit-scrollbar {
-		width: 6px;
-	}
+  &::-webkit-scrollbar {
+    width: 6px;
+  }
 
-	&::-webkit-scrollbar-thumb {
-		background: #99a9bf;
-		border-radius: 20px;
-	}
+  &::-webkit-scrollbar-thumb {
+    background: #99a9bf;
+    border-radius: 20px;
+  }
 }
 
 @mixin relative {
-	position: relative;
-	width: 100%;
-	height: 100%;
+  position: relative;
+  width: 100%;
+  height: 100%;
 }
 
 @mixin pct($pct) {
-	width: #{$pct};
-	position: relative;
-	margin: 0 auto;
+  width: #{$pct};
+  position: relative;
+  margin: 0 auto;
 }
 
 @mixin triangle($width, $height, $color, $direction) {
-	$width: $width/2;
-	$color-border-style: $height solid $color;
-	$transparent-border-style: $width solid transparent;
-	height: 0;
-	width: 0;
+  $width: $width/2;
+  $color-border-style: $height solid $color;
+  $transparent-border-style: $width solid transparent;
+  height: 0;
+  width: 0;
 
-	@if $direction==up {
-		border-bottom: $color-border-style;
-		border-left: $transparent-border-style;
-		border-right: $transparent-border-style;
-	} @else if $direction==right {
-		border-left: $color-border-style;
-		border-top: $transparent-border-style;
-		border-bottom: $transparent-border-style;
-	} @else if $direction==down {
-		border-top: $color-border-style;
-		border-left: $transparent-border-style;
-		border-right: $transparent-border-style;
-	} @else if $direction==left {
-		border-right: $color-border-style;
-		border-top: $transparent-border-style;
-		border-bottom: $transparent-border-style;
-	}
+  @if $direction==up {
+    border-bottom: $color-border-style;
+    border-left: $transparent-border-style;
+    border-right: $transparent-border-style;
+  } @else if $direction==right {
+    border-left: $color-border-style;
+    border-top: $transparent-border-style;
+    border-bottom: $transparent-border-style;
+  } @else if $direction==down {
+    border-top: $color-border-style;
+    border-left: $transparent-border-style;
+    border-right: $transparent-border-style;
+  } @else if $direction==left {
+    border-right: $color-border-style;
+    border-top: $transparent-border-style;
+    border-bottom: $transparent-border-style;
+  }
 }

+ 122 - 122
src/assets/styles/ruoyi.scss

@@ -5,52 +5,52 @@
 
 /** 基础通用 **/
 .pt5 {
-	padding-top: 5px;
+  padding-top: 5px;
 }
 .pr5 {
-	padding-right: 5px;
+  padding-right: 5px;
 }
 .pb5 {
-	padding-bottom: 5px;
+  padding-bottom: 5px;
 }
 .mt5 {
-	margin-top: 5px;
+  margin-top: 5px;
 }
 .mr5 {
-	margin-right: 5px;
+  margin-right: 5px;
 }
 .mb5 {
-	margin-bottom: 5px;
+  margin-bottom: 5px;
 }
 .mb8 {
-	margin-bottom: 8px;
+  margin-bottom: 8px;
 }
 .ml5 {
-	margin-left: 5px;
+  margin-left: 5px;
 }
 .mt10 {
-	margin-top: 10px;
+  margin-top: 10px;
 }
 .mr10 {
-	margin-right: 10px;
+  margin-right: 10px;
 }
 .mb10 {
-	margin-bottom: 10px;
+  margin-bottom: 10px;
 }
 .ml10 {
-	margin-left: 10px;
+  margin-left: 10px;
 }
 .mt20 {
-	margin-top: 20px;
+  margin-top: 20px;
 }
 .mr20 {
-	margin-right: 20px;
+  margin-right: 20px;
 }
 .mb20 {
-	margin-bottom: 20px;
+  margin-bottom: 20px;
 }
 .ml20 {
-	margin-left: 20px;
+  margin-left: 20px;
 }
 
 .h1,
@@ -65,226 +65,226 @@ h3,
 h4,
 h5,
 h6 {
-	font-family: inherit;
-	font-weight: 500;
-	line-height: 1.1;
-	color: inherit;
+  font-family: inherit;
+  font-weight: 500;
+  line-height: 1.1;
+  color: inherit;
 }
 
 .el-form .el-form-item__label {
-	font-weight: 700;
+  font-weight: 700;
 }
 .el-dialog:not(.is-fullscreen) {
-	margin-top: 6vh !important;
+  margin-top: 6vh !important;
 }
 
 .el-dialog.scrollbar .el-dialog__body {
-	overflow: auto;
-	overflow-x: hidden;
-	max-height: 70vh;
-	padding: 10px 20px 0;
+  overflow: auto;
+  overflow-x: hidden;
+  max-height: 70vh;
+  padding: 10px 20px 0;
 }
 
 .el-table {
-	.el-table__header-wrapper,
-	.el-table__fixed-header-wrapper {
-		th {
-			word-break: break-word;
-			background-color: #f8f8f9 !important;
-			color: #515a6e;
-			height: 40px !important;
-			font-size: 13px;
-		}
-	}
-	.el-table__body-wrapper {
-		.el-button [class*='el-icon-'] + span {
-			margin-left: 1px;
-		}
-	}
+  .el-table__header-wrapper,
+  .el-table__fixed-header-wrapper {
+    th {
+      word-break: break-word;
+      background-color: #f8f8f9 !important;
+      color: #515a6e;
+      height: 40px !important;
+      font-size: 13px;
+    }
+  }
+  .el-table__body-wrapper {
+    .el-button [class*='el-icon-'] + span {
+      margin-left: 1px;
+    }
+  }
 }
 
 /** 表单布局 **/
 .form-header {
-	font-size: 15px;
-	color: #6379bb;
-	border-bottom: 1px solid #ddd;
-	margin: 8px 10px 25px 10px;
-	padding-bottom: 5px;
+  font-size: 15px;
+  color: #6379bb;
+  border-bottom: 1px solid #ddd;
+  margin: 8px 10px 25px 10px;
+  padding-bottom: 5px;
 }
 
 /** 表格布局 **/
 .pagination-container {
-	// position: relative;
-	height: 25px;
-	margin-bottom: 10px;
-	margin-top: 15px;
-	padding: 10px 20px !important;
+  // position: relative;
+  height: 25px;
+  margin-bottom: 10px;
+  margin-top: 15px;
+  padding: 10px 20px !important;
 }
 
 /* tree border */
 .tree-border {
-	margin-top: 5px;
-	border: 1px solid #e5e6e7;
-	background: #ffffff none;
-	border-radius: 4px;
-	width: 100%;
+  margin-top: 5px;
+  border: 1px solid #e5e6e7;
+  background: #ffffff none;
+  border-radius: 4px;
+  width: 100%;
 }
 
 .pagination-container .el-pagination {
-	//right: 0;
-	//position: absolute;
+  //right: 0;
+  //position: absolute;
 }
 
 @media (max-width: 768px) {
-	.pagination-container .el-pagination > .el-pagination__jump {
-		display: none !important;
-	}
-	.pagination-container .el-pagination > .el-pagination__sizes {
-		display: none !important;
-	}
+  .pagination-container .el-pagination > .el-pagination__jump {
+    display: none !important;
+  }
+  .pagination-container .el-pagination > .el-pagination__sizes {
+    display: none !important;
+  }
 }
 
 .el-table .fixed-width .el-button--small {
-	padding-left: 0;
-	padding-right: 0;
-	width: inherit;
+  padding-left: 0;
+  padding-right: 0;
+  width: inherit;
 }
 
 /** 表格更多操作下拉样式 */
 .el-table .el-dropdown-link {
-	cursor: pointer;
-	color: #409eff;
-	margin-left: 10px;
+  cursor: pointer;
+  color: #409eff;
+  margin-left: 10px;
 }
 
 .el-table .el-dropdown,
 .el-icon-arrow-down {
-	font-size: 12px;
+  font-size: 12px;
 }
 
 .el-tree-node__content > .el-checkbox {
-	margin-right: 8px;
+  margin-right: 8px;
 }
 
 .list-group-striped > .list-group-item {
-	border-left: 0;
-	border-right: 0;
-	border-radius: 0;
-	padding-left: 0;
-	padding-right: 0;
+  border-left: 0;
+  border-right: 0;
+  border-radius: 0;
+  padding-left: 0;
+  padding-right: 0;
 }
 
 .list-group {
-	padding-left: 0px;
-	list-style: none;
+  padding-left: 0px;
+  list-style: none;
 }
 
 .list-group-item {
-	border-bottom: 1px solid #e7eaec;
-	border-top: 1px solid #e7eaec;
-	margin-bottom: -1px;
-	padding: 11px 0px;
-	font-size: 13px;
+  border-bottom: 1px solid #e7eaec;
+  border-top: 1px solid #e7eaec;
+  margin-bottom: -1px;
+  padding: 11px 0px;
+  font-size: 13px;
 }
 
 .pull-right {
-	float: right !important;
+  float: right !important;
 }
 
 .el-card__header {
-	padding: 14px 15px 7px !important;
-	min-height: 40px;
+  padding: 14px 15px 7px !important;
+  min-height: 40px;
 }
 
 .el-card__body {
-	padding: 15px 20px 20px 20px !important;
+  padding: 15px 20px 20px 20px !important;
 }
 
 .card-box {
-	padding-right: 15px;
-	padding-left: 15px;
-	margin-bottom: 10px;
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-bottom: 10px;
 }
 
 /* button color */
 .el-button--cyan.is-active,
 .el-button--cyan:active {
-	background: #20b2aa;
-	border-color: #20b2aa;
-	color: #ffffff;
+  background: #20b2aa;
+  border-color: #20b2aa;
+  color: #ffffff;
 }
 
 .el-button--cyan:focus,
 .el-button--cyan:hover {
-	background: #48d1cc;
-	border-color: #48d1cc;
-	color: #ffffff;
+  background: #48d1cc;
+  border-color: #48d1cc;
+  color: #ffffff;
 }
 
 .el-button--cyan {
-	background-color: #20b2aa;
-	border-color: #20b2aa;
-	color: #ffffff;
+  background-color: #20b2aa;
+  border-color: #20b2aa;
+  color: #ffffff;
 }
 
 /* text color */
 .text-navy {
-	color: #1ab394;
+  color: #1ab394;
 }
 
 .text-primary {
-	color: inherit;
+  color: inherit;
 }
 
 .text-success {
-	color: #1c84c6;
+  color: #1c84c6;
 }
 
 .text-info {
-	color: #23c6c8;
+  color: #23c6c8;
 }
 
 .text-warning {
-	color: #f8ac59;
+  color: #f8ac59;
 }
 
 .text-danger {
-	color: #ed5565;
+  color: #ed5565;
 }
 
 .text-muted {
-	color: #888888;
+  color: #888888;
 }
 
 /* image */
 .img-circle {
-	border-radius: 50%;
+  border-radius: 50%;
 }
 
 .img-lg {
-	width: 120px;
-	height: 120px;
+  width: 120px;
+  height: 120px;
 }
 
 .avatar-upload-preview {
-	position: absolute;
-	top: 50%;
-	transform: translate(50%, -50%);
-	width: 200px;
-	height: 200px;
-	border-radius: 50%;
-	box-shadow: 0 0 4px #ccc;
-	overflow: hidden;
+  position: absolute;
+  top: 50%;
+  transform: translate(50%, -50%);
+  width: 200px;
+  height: 200px;
+  border-radius: 50%;
+  box-shadow: 0 0 4px #ccc;
+  overflow: hidden;
 }
 
 /* 拖拽列样式 */
 .sortable-ghost {
-	opacity: 0.8;
-	color: #fff !important;
-	background: #42b983 !important;
+  opacity: 0.8;
+  color: #fff !important;
+  background: #42b983 !important;
 }
 
 /* 表格右侧工具栏样式 */
 .top-right-btn {
-	margin-left: auto;
+  margin-left: auto;
 }

+ 230 - 230
src/assets/styles/sidebar.scss

@@ -1,236 +1,236 @@
 #app {
-	.main-container {
-		min-height: 100%;
-		transition: margin-left 0.28s;
-		margin-left: $base-sidebar-width;
-		position: relative;
-	}
-
-	.sidebarHide {
-		margin-left: 0 !important;
-	}
-
-	.sidebar-container {
-		-webkit-transition: width 0.28s;
-		transition: width 0.28s;
-		width: $base-sidebar-width !important;
-		background-color: $base-menu-background;
-		height: 100%;
-		position: fixed;
-		font-size: 0px;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		z-index: 1001;
-		overflow: hidden;
-		-webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
-		box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
-
-		// reset element-ui css
-		.horizontal-collapse-transition {
-			transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
-		}
-
-		.scrollbar-wrapper {
-			overflow-x: hidden !important;
-		}
-
-		.el-scrollbar__bar.is-vertical {
-			right: 0px;
-		}
-
-		.el-scrollbar {
-			height: 100%;
-		}
-
-		&.has-logo {
-			.el-scrollbar {
-				height: calc(100% - 50px);
-			}
-		}
-
-		.is-horizontal {
-			display: none;
-		}
-
-		a {
-			display: inline-block;
-			width: 100%;
-			overflow: hidden;
-		}
-
-		.svg-icon {
-			margin-right: 16px;
-		}
-
-		.el-menu {
-			border: none;
-			height: 100%;
-			width: 100% !important;
-		}
-
-		.el-menu-item,
-		.menu-title {
-			overflow: hidden !important;
-			text-overflow: ellipsis !important;
-			white-space: nowrap !important;
-		}
-
-		.el-menu-item .el-menu-tooltip__trigger {
-			display: inline-block !important;
-		}
-
-		// menu hover
-		.sub-menu-title-noDropdown,
-		.el-sub-menu__title {
-			&:hover {
-				background-color: rgba(0, 0, 0, 0.06) !important;
-			}
-		}
-
-		& .theme-dark .is-active > .el-sub-menu__title {
-			color: $base-menu-color-active !important;
-		}
-
-		& .nest-menu .el-sub-menu > .el-sub-menu__title,
-		& .el-sub-menu .el-menu-item {
-			min-width: $base-sidebar-width !important;
-
-			&:hover {
-				background-color: rgba(0, 0, 0, 0.06) !important;
-			}
-		}
-
-		& .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
-		& .theme-dark .el-sub-menu .el-menu-item {
-			background-color: $base-sub-menu-background !important;
-
-			&:hover {
-				background-color: $base-sub-menu-hover !important;
-			}
-		}
-	}
-
-	.hideSidebar {
-		.sidebar-container {
-			width: 54px !important;
-		}
-
-		.main-container {
-			margin-left: 54px;
-		}
-
-		.sub-menu-title-noDropdown {
-			padding: 0 !important;
-			position: relative;
-
-			.el-tooltip {
-				padding: 0 !important;
-
-				.svg-icon {
-					margin-left: 20px;
-				}
-			}
-		}
-
-		.el-sub-menu {
-			overflow: hidden;
-
-			& > .el-sub-menu__title {
-				padding: 0 !important;
-
-				.svg-icon {
-					margin-left: 20px;
-				}
-			}
-		}
-
-		.el-menu--collapse {
-			.el-sub-menu {
-				& > .el-sub-menu__title {
-					& > span {
-						height: 0;
-						width: 0;
-						overflow: hidden;
-						visibility: hidden;
-						display: inline-block;
-					}
-					& > i {
-						height: 0;
-						width: 0;
-						overflow: hidden;
-						visibility: hidden;
-						display: inline-block;
-					}
-				}
-			}
-		}
-	}
-
-	.el-menu--collapse .el-menu .el-sub-menu {
-		min-width: $base-sidebar-width !important;
-	}
-
-	// mobile responsive
-	.mobile {
-		.main-container {
-			margin-left: 0px;
-		}
-
-		.sidebar-container {
-			transition: transform 0.28s;
-			width: $base-sidebar-width !important;
-		}
-
-		&.hideSidebar {
-			.sidebar-container {
-				pointer-events: none;
-				transition-duration: 0.3s;
-				transform: translate3d(-$base-sidebar-width, 0, 0);
-			}
-		}
-	}
-
-	.withoutAnimation {
-		.main-container,
-		.sidebar-container {
-			transition: none;
-		}
-	}
+  .main-container {
+    min-height: 100%;
+    transition: margin-left 0.28s;
+    margin-left: $base-sidebar-width;
+    position: relative;
+  }
+
+  .sidebarHide {
+    margin-left: 0 !important;
+  }
+
+  .sidebar-container {
+    -webkit-transition: width 0.28s;
+    transition: width 0.28s;
+    width: $base-sidebar-width !important;
+    background-color: $base-menu-background;
+    height: 100%;
+    position: fixed;
+    font-size: 0px;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1001;
+    overflow: hidden;
+    -webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
+    box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
+
+    // reset element-ui css
+    .horizontal-collapse-transition {
+      transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
+    }
+
+    .scrollbar-wrapper {
+      overflow-x: hidden !important;
+    }
+
+    .el-scrollbar__bar.is-vertical {
+      right: 0px;
+    }
+
+    .el-scrollbar {
+      height: 100%;
+    }
+
+    &.has-logo {
+      .el-scrollbar {
+        height: calc(100% - 50px);
+      }
+    }
+
+    .is-horizontal {
+      display: none;
+    }
+
+    a {
+      display: inline-block;
+      width: 100%;
+      overflow: hidden;
+    }
+
+    .svg-icon {
+      margin-right: 16px;
+    }
+
+    .el-menu {
+      border: none;
+      height: 100%;
+      width: 100% !important;
+    }
+
+    .el-menu-item,
+    .menu-title {
+      overflow: hidden !important;
+      text-overflow: ellipsis !important;
+      white-space: nowrap !important;
+    }
+
+    .el-menu-item .el-menu-tooltip__trigger {
+      display: inline-block !important;
+    }
+
+    // menu hover
+    .sub-menu-title-noDropdown,
+    .el-sub-menu__title {
+      &:hover {
+        background-color: rgba(0, 0, 0, 0.06) !important;
+      }
+    }
+
+    & .theme-dark .is-active > .el-sub-menu__title {
+      color: $base-menu-color-active !important;
+    }
+
+    & .nest-menu .el-sub-menu > .el-sub-menu__title,
+    & .el-sub-menu .el-menu-item {
+      min-width: $base-sidebar-width !important;
+
+      &:hover {
+        background-color: rgba(0, 0, 0, 0.06) !important;
+      }
+    }
+
+    & .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
+    & .theme-dark .el-sub-menu .el-menu-item {
+      background-color: $base-sub-menu-background !important;
+
+      &:hover {
+        background-color: $base-sub-menu-hover !important;
+      }
+    }
+  }
+
+  .hideSidebar {
+    .sidebar-container {
+      width: 54px !important;
+    }
+
+    .main-container {
+      margin-left: 54px;
+    }
+
+    .sub-menu-title-noDropdown {
+      padding: 0 !important;
+      position: relative;
+
+      .el-tooltip {
+        padding: 0 !important;
+
+        .svg-icon {
+          margin-left: 20px;
+        }
+      }
+    }
+
+    .el-sub-menu {
+      overflow: hidden;
+
+      & > .el-sub-menu__title {
+        padding: 0 !important;
+
+        .svg-icon {
+          margin-left: 20px;
+        }
+      }
+    }
+
+    .el-menu--collapse {
+      .el-sub-menu {
+        & > .el-sub-menu__title {
+          & > span {
+            height: 0;
+            width: 0;
+            overflow: hidden;
+            visibility: hidden;
+            display: inline-block;
+          }
+          & > i {
+            height: 0;
+            width: 0;
+            overflow: hidden;
+            visibility: hidden;
+            display: inline-block;
+          }
+        }
+      }
+    }
+  }
+
+  .el-menu--collapse .el-menu .el-sub-menu {
+    min-width: $base-sidebar-width !important;
+  }
+
+  // mobile responsive
+  .mobile {
+    .main-container {
+      margin-left: 0px;
+    }
+
+    .sidebar-container {
+      transition: transform 0.28s;
+      width: $base-sidebar-width !important;
+    }
+
+    &.hideSidebar {
+      .sidebar-container {
+        pointer-events: none;
+        transition-duration: 0.3s;
+        transform: translate3d(-$base-sidebar-width, 0, 0);
+      }
+    }
+  }
+
+  .withoutAnimation {
+    .main-container,
+    .sidebar-container {
+      transition: none;
+    }
+  }
 }
 
 // when menu collapsed
 .el-menu--vertical {
-	& > .el-menu {
-		.svg-icon {
-			margin-right: 16px;
-		}
-	}
-
-	.nest-menu .el-sub-menu > .el-sub-menu__title,
-	.el-menu-item {
-		&:hover {
-			// you can use $sub-menuHover
-			background-color: rgba(0, 0, 0, 0.06) !important;
-		}
-	}
-
-	// the scroll bar appears when the sub-menu is too long
-	> .el-menu--popup {
-		max-height: 100vh;
-		overflow-y: auto;
-
-		&::-webkit-scrollbar-track-piece {
-			background: #d3dce6;
-		}
-
-		&::-webkit-scrollbar {
-			width: 6px;
-		}
-
-		&::-webkit-scrollbar-thumb {
-			background: #99a9bf;
-			border-radius: 20px;
-		}
-	}
+  & > .el-menu {
+    .svg-icon {
+      margin-right: 16px;
+    }
+  }
+
+  .nest-menu .el-sub-menu > .el-sub-menu__title,
+  .el-menu-item {
+    &:hover {
+      // you can use $sub-menuHover
+      background-color: rgba(0, 0, 0, 0.06) !important;
+    }
+  }
+
+  // the scroll bar appears when the sub-menu is too long
+  > .el-menu--popup {
+    max-height: 100vh;
+    overflow-y: auto;
+
+    &::-webkit-scrollbar-track-piece {
+      background: #d3dce6;
+    }
+
+    &::-webkit-scrollbar {
+      width: 6px;
+    }
+
+    &::-webkit-scrollbar-thumb {
+      background: #99a9bf;
+      border-radius: 20px;
+    }
+  }
 }

+ 13 - 13
src/assets/styles/transition.scss

@@ -3,51 +3,51 @@
 /* fade */
 .fade-enter-active,
 .fade-leave-active {
-	transition: opacity 0.28s;
+  transition: opacity 0.28s;
 }
 
 .fade-enter,
 .fade-leave-active {
-	opacity: 0;
+  opacity: 0;
 }
 
 /* fade-transform */
 .fade-transform--move,
 .fade-transform-leave-active,
 .fade-transform-enter-active {
-	transition: all 0.5s;
+  transition: all 0.5s;
 }
 
 .fade-transform-leave-active {
-	position: absolute;
+  position: absolute;
 }
 
 .fade-transform-enter {
-	opacity: 0;
-	transform: translateX(-30px);
+  opacity: 0;
+  transform: translateX(-30px);
 }
 
 .fade-transform-leave-to {
-	opacity: 0;
-	transform: translateX(30px);
+  opacity: 0;
+  transform: translateX(30px);
 }
 
 /* breadcrumb transition */
 .breadcrumb-enter-active,
 .breadcrumb-leave-active {
-	transition: all 0.5s;
+  transition: all 0.5s;
 }
 
 .breadcrumb-enter,
 .breadcrumb-leave-active {
-	opacity: 0;
-	transform: translateX(20px);
+  opacity: 0;
+  transform: translateX(20px);
 }
 
 .breadcrumb-move {
-	transition: all 0.5s;
+  transition: all 0.5s;
 }
 
 .breadcrumb-leave-active {
-	position: absolute;
+  position: absolute;
 }

+ 15 - 15
src/assets/styles/variables.module.scss

@@ -47,19 +47,19 @@ $base-sidebar-width: 200px;
 // the :export directive is the magic sauce for webpack
 // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
 :export {
-	menuColor: $base-menu-color;
-	menuLightColor: $base-menu-light-color;
-	menuColorActive: $base-menu-color-active;
-	menuBackground: $base-menu-background;
-	menuLightBackground: $base-menu-light-background;
-	subMenuBackground: $base-sub-menu-background;
-	subMenuHover: $base-sub-menu-hover;
-	sideBarWidth: $base-sidebar-width;
-	logoTitleColor: $base-logo-title-color;
-	logoLightTitleColor: $base-logo-light-title-color;
-	primaryColor: $--color-primary;
-	successColor: $--color-success;
-	dangerColor: $--color-danger;
-	infoColor: $--color-info;
-	warningColor: $--color-warning;
+  menuColor: $base-menu-color;
+  menuLightColor: $base-menu-light-color;
+  menuColorActive: $base-menu-color-active;
+  menuBackground: $base-menu-background;
+  menuLightBackground: $base-menu-light-background;
+  subMenuBackground: $base-sub-menu-background;
+  subMenuHover: $base-sub-menu-hover;
+  sideBarWidth: $base-sidebar-width;
+  logoTitleColor: $base-logo-title-color;
+  logoLightTitleColor: $base-logo-light-title-color;
+  primaryColor: $--color-primary;
+  successColor: $--color-success;
+  dangerColor: $--color-danger;
+  infoColor: $--color-info;
+  warningColor: $--color-warning;
 }

+ 31 - 31
src/components/Breadcrumb/index.vue

@@ -1,3 +1,15 @@
+<template>
+  <el-breadcrumb class="app-breadcrumb" separator="/">
+    <transition-group name="breadcrumb">
+      <el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
+        <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{
+          item.meta?.title }}</span>
+        <a v-else @click.prevent="handleLink(item)">{{ item.meta?.title }}</a>
+      </el-breadcrumb-item>
+    </transition-group>
+  </el-breadcrumb>
+</template>
+
 <script setup lang="ts">
 import { RouteLocationMatched } from 'vue-router'
 
@@ -6,49 +18,37 @@ const router = useRouter();
 const levelList = ref<RouteLocationMatched[]>([])
 
 const getBreadcrumb = () => {
-  // only show routes with meta.title
-  let matched = route.matched.filter(item => item.meta && item.meta.title);
-  const first = matched[0]
-  // 判断是否为首页
-  if (!isDashboard(first)) {
-    matched = ([{ path: '/index', meta: { title: '首页' } }] as any).concat(matched)
-  }
-  levelList.value = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
+    // only show routes with meta.title
+    let matched = route.matched.filter(item => item.meta && item.meta.title);
+    const first = matched[0]
+    // 判断是否为首页
+    if (!isDashboard(first)) {
+        matched = ([{ path: '/index', meta: { title: '首页' } }] as any).concat(matched)
+    }
+    levelList.value = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
 }
 const isDashboard = (route: RouteLocationMatched) => {
-  const name = route && route.name as string
-  if (!name) {
-    return false
-  }
-  return name.trim() === 'Index'
+    const name = route && route.name as string
+    if (!name) {
+        return false
+    }
+    return name.trim() === 'Index'
 }
 const handleLink = (item: RouteLocationMatched) => {
-  const { redirect, path } = item
-  redirect ? router.push(redirect as string) : router.push(path)
+    const { redirect, path } = item
+    redirect ? router.push(redirect as string) : router.push(path)
 }
 
 watchEffect(() => {
-  // if you go to the redirect page, do not update the breadcrumbs
-  if (route.path.startsWith('/redirect/')) return
-  getBreadcrumb()
+    // if you go to the redirect page, do not update the breadcrumbs
+    if (route.path.startsWith('/redirect/')) return
+    getBreadcrumb()
 })
 onMounted(() => {
-  getBreadcrumb();
+    getBreadcrumb();
 })
 </script>
 
-<template>
-	<el-breadcrumb class="app-breadcrumb" separator="/">
-		<transition-group name="breadcrumb">
-			<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
-				<span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{
-          item.meta?.title }}</span>
-				<a v-else @click.prevent="handleLink(item)">{{ item.meta?.title }}</a>
-			</el-breadcrumb-item>
-		</transition-group>
-	</el-breadcrumb>
-</template>
-
 <style lang="scss" scoped>
 .app-breadcrumb.el-breadcrumb {
   display: inline-block;

+ 37 - 37
src/components/DictTag/index.vue

@@ -1,50 +1,50 @@
+<template>
+  <div>
+    <template v-for="(item, index) in options">
+      <template v-if="values.includes(item.value)">
+        <span
+          v-if="item.elTagType == 'default' || item.elTagType == ''"
+          :key="item.value"
+          :index="index"
+          :class="item.elTagClass"
+          >{{ item.label }}</span
+        >
+        <el-tag
+          v-else
+          :disable-transitions="true"
+          :key="item.value + ''"
+          :index="index"
+          :type="item.elTagType === 'primary' ? '' : item.elTagType"
+          :class="item.elTagClass"
+          >{{ item.label }}</el-tag
+        >
+      </template>
+    </template>
+  </div>
+</template>
+
 <script setup lang="ts">
 import { PropType } from 'vue';
 
 const props = defineProps({
-  // 数据
-  options: {
-    type: Array as PropType<DictDataOption[]>,
-    default: null,
-  },
-  // 当前的值
-  value: [Number, String, Array],
+    // 数据
+    options: {
+        type: Array as PropType<DictDataOption[]>,
+        default: null,
+    },
+    // 当前的值
+    value: [Number, String, Array],
 })
 
 const values = computed(() => {
-	if (props.value !== null && typeof props.value !== 'undefined') {
-		return Array.isArray(props.value) ? props.value : [String(props.value)];
-	} else {
-		return [];
-	}
+    if (props.value !== null && typeof props.value !== 'undefined') {
+        return Array.isArray(props.value) ? props.value : [String(props.value)];
+    } else {
+        return [];
+    }
 })
 </script>
 
-<template>
-	<div>
-		<template v-for="(item, index) in options">
-			<template v-if="values.includes(item.value)">
-				<span
-					v-if="item.elTagType == 'default' || item.elTagType == ''"
-					:key="item.value"
-					:index="index"
-					:class="item.elTagClass"
-					>{{ item.label }}</span
-				>
-				<el-tag
-					v-else
-					:disable-transitions="true"
-					:key="item.value + ''"
-					:index="index"
-					:type="item.elTagType === 'primary' ? '' : item.elTagType"
-					:class="item.elTagClass"
-					>{{ item.label }}</el-tag
-				>
-			</template>
-		</template>
-	</div>
-</template>
-
 <style scoped>
 .el-tag + .el-tag {
   margin-left: 10px;

+ 128 - 128
src/components/Editor/index.vue

@@ -1,3 +1,31 @@
+<template>
+  <div>
+    <el-upload
+      :action="upload.url"
+      :before-upload="handleBeforeUpload"
+      :on-success="handleUploadSuccess"
+      :on-error="handleUploadError"
+      class="editor-img-uploader"
+      name="file"
+      :show-file-list="false"
+      :headers="upload.headers"
+      style="display: none"
+      v-if="type === 'url'"
+    >
+    </el-upload>
+    <div class="editor">
+      <quill-editor
+        ref="myQuillEditor"
+        v-model:content="content"
+        contentType="html"
+        @textChange="(e: any) => $emit('update:modelValue', content)"
+        :options="options"
+        :style="styles"
+      />
+    </div>
+  </div>
+</template>
+
 <script setup lang="ts">
 import { QuillEditor, Quill } from '@vueup/vue-quill';
 import '@vueup/vue-quill/dist/vue-quill.snow.css';
@@ -5,166 +33,138 @@ import { getToken } from "@/utils/auth";
 import { ComponentInternalInstance } from "vue";
 
 const props = defineProps({
-  /* 编辑器的内容 */
-  modelValue: {
-    type: String,
-  },
-  /* 高度 */
-  height: {
-    type: Number,
-    default: null,
-  },
-  /* 最小高度 */
-  minHeight: {
-    type: Number,
-    default: null,
-  },
-  /* 只读 */
-  readOnly: {
-    type: Boolean,
-    default: false,
-  },
-  /* 上传文件大小限制(MB) */
-  fileSize: {
-    type: Number,
-    default: 5,
-  },
-  /* 类型(base64格式、url格式) */
-  type: {
-    type: String,
-    default: "url",
-  }
+    /* 编辑器的内容 */
+    modelValue: {
+        type: String,
+    },
+    /* 高度 */
+    height: {
+        type: Number,
+        default: null,
+    },
+    /* 最小高度 */
+    minHeight: {
+        type: Number,
+        default: null,
+    },
+    /* 只读 */
+    readOnly: {
+        type: Boolean,
+        default: false,
+    },
+    /* 上传文件大小限制(MB) */
+    fileSize: {
+        type: Number,
+        default: 5,
+    },
+    /* 类型(base64格式、url格式) */
+    type: {
+        type: String,
+        default: "url",
+    }
 });
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
 const upload = reactive<UploadOption>({
-  headers: { Authorization: "Bearer " + getToken() },
-  url: import.meta.env.VITE_APP_BASE_API + '/system/oss/upload'
+    headers: { Authorization: "Bearer " + getToken() },
+    url: import.meta.env.VITE_APP_BASE_API + '/system/oss/upload'
 })
 const myQuillEditor = ref();
 
 const options = ref({
-  theme: "snow",
-  bounds: document.body,
-  debug: "warn",
-  modules: {
-    // 工具栏配置
-    toolbar: {
-      container: [
-        ["bold", "italic", "underline", "strike"],       // 加粗 斜体 下划线 删除线
-        ["blockquote", "code-block"],                    // 引用  代码块
-        [{ list: "ordered" }, { list: "bullet"} ],       // 有序、无序列表
-        [{ indent: "-1" }, { indent: "+1" }],            // 缩进
-        [{ size: ["small", false, "large", "huge"] }],   // 字体大小
-        [{ header: [1, 2, 3, 4, 5, 6, false] }],         // 标题
-        [{ color: [] }, { background: [] }],             // 字体颜色、字体背景颜色
-        [{ align: [] }],                                 // 对齐方式
-        ["clean"],                                       // 清除文本格式
-        ["link", "image", "video"]                       // 链接、图片、视频
-      ],
-      handlers: {
-        image: function (value: any) {
-          if (value) {
-            // 调用element图片上传
-            (document.querySelector(".editor-img-uploader>.el-upload") as HTMLDivElement)?.click();
-          } else {
-            Quill.format("image", true);
-          }
-        },
-      },
-    }
-  },
-  placeholder: '请输入内容',
-  readOnly: props.readOnly,
+    theme: "snow",
+    bounds: document.body,
+    debug: "warn",
+    modules: {
+        // 工具栏配置
+        toolbar: {
+            container: [
+                ["bold", "italic", "underline", "strike"],       // 加粗 斜体 下划线 删除线
+                ["blockquote", "code-block"],                    // 引用  代码块
+                [{ list: "ordered" }, { list: "bullet"} ],       // 有序、无序列表
+                [{ indent: "-1" }, { indent: "+1" }],            // 缩进
+                [{ size: ["small", false, "large", "huge"] }],   // 字体大小
+                [{ header: [1, 2, 3, 4, 5, 6, false] }],         // 标题
+                [{ color: [] }, { background: [] }],             // 字体颜色、字体背景颜色
+                [{ align: [] }],                                 // 对齐方式
+                ["clean"],                                       // 清除文本格式
+                ["link", "image", "video"]                       // 链接、图片、视频
+            ],
+            handlers: {
+                image: function (value: any) {
+                    if (value) {
+                        // 调用element图片上传
+                        (document.querySelector(".editor-img-uploader>.el-upload") as HTMLDivElement)?.click();
+                    } else {
+                        Quill.format("image", true);
+                    }
+                },
+            },
+        }
+    },
+    placeholder: '请输入内容',
+    readOnly: props.readOnly,
 });
 
 const styles = computed(() => {
-  let style: any = {};
-  if (props.minHeight) {
-    style.minHeight = `${props.minHeight}px`;
-  }
-  if (props.height) {
-    style.height = `${props.height}px`;
-  }
-  return style;
+    let style: any = {};
+    if (props.minHeight) {
+        style.minHeight = `${props.minHeight}px`;
+    }
+    if (props.height) {
+        style.height = `${props.height}px`;
+    }
+    return style;
 })
 
 const content = ref("");
 watch(() => props.modelValue, (v) => {
-  if (v !== content.value) {
-    content.value = v === undefined ? "<p></p>" : v;
-  }
+    if (v !== content.value) {
+        content.value = v === undefined ? "<p></p>" : v;
+    }
 }, { immediate: true });
 
 // 图片上传成功返回图片地址
 const handleUploadSuccess = (res: any) => {
-  // 获取富文本实例
-  let quill = toRaw(myQuillEditor.value).getQuill();
-  // 如果上传成功
-  if (res.code === 200) {
-    // 获取光标位置
-    let length = quill.selection.savedRange.index;
-    // 插入图片,res为服务器返回的图片链接地址
-    quill.insertEmbed(length, "image", res.data.url);
-    // 调整光标到最后
-    quill.setSelection(length + 1);
-    proxy?.$modal.closeLoading();
-  } else {
-    proxy?.$modal.loading(res.msg);
-    proxy?.$modal.closeLoading();
-  }
+    // 获取富文本实例
+    let quill = toRaw(myQuillEditor.value).getQuill();
+    // 如果上传成功
+    if (res.code === 200) {
+        // 获取光标位置
+        let length = quill.selection.savedRange.index;
+        // 插入图片,res为服务器返回的图片链接地址
+        quill.insertEmbed(length, "image", res.data.url);
+        // 调整光标到最后
+        quill.setSelection(length + 1);
+        proxy?.$modal.closeLoading();
+    } else {
+        proxy?.$modal.loading(res.msg);
+        proxy?.$modal.closeLoading();
+    }
 }
 
 // 图片上传前拦截
 const handleBeforeUpload = (file: any) => {
-  // 校检文件大小
-  if (props.fileSize) {
-    const isLt = file.size / 1024 / 1024 < props.fileSize;
-    if (!isLt) {
-      proxy?.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
-      return false;
+    // 校检文件大小
+    if (props.fileSize) {
+        const isLt = file.size / 1024 / 1024 < props.fileSize;
+        if (!isLt) {
+            proxy?.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
+            return false;
+        }
     }
-  }
-  proxy?.$modal.loading('正在上传文件,请稍候...');
-  return true;
+    proxy?.$modal.loading('正在上传文件,请稍候...');
+    return true;
 }
 
 // 图片失败拦截
 const handleUploadError = (err: any) => {
-  console.error(err);
-  proxy?.$modal.msgError('上传文件失败');
+    console.error(err);
+    proxy?.$modal.msgError('上传文件失败');
 }
 </script>
 
-<template>
-	<div>
-		<el-upload
-			:action="upload.url"
-			:before-upload="handleBeforeUpload"
-			:on-success="handleUploadSuccess"
-			:on-error="handleUploadError"
-			class="editor-img-uploader"
-			name="file"
-			:show-file-list="false"
-			:headers="upload.headers"
-			style="display: none"
-			v-if="type === 'url'"
-		>
-		</el-upload>
-		<div class="editor">
-			<quill-editor
-				ref="myQuillEditor"
-				v-model:content="content"
-				contentType="html"
-				@textChange="(e: any) => $emit('update:modelValue', content)"
-				:options="options"
-				:style="styles"
-			/>
-		</div>
-	</div>
-</template>
-
 <style>
 .editor, .ql-toolbar {
   white-space: pre-wrap !important;

+ 143 - 143
src/components/FileUpload/index.vue

@@ -1,3 +1,47 @@
+<template>
+  <div class="upload-file">
+    <el-upload
+      multiple
+      :action="uploadFileUrl"
+      :before-upload="handleBeforeUpload"
+      :file-list="fileList"
+      :limit="limit"
+      :on-error="handleUploadError"
+      :on-exceed="handleExceed"
+      :on-success="handleUploadSuccess"
+      :show-file-list="false"
+      :headers="headers"
+      class="upload-file-uploader"
+      ref="fileUploadRef"
+    >
+      <!-- 上传按钮 -->
+      <el-button type="primary">选取文件</el-button>
+    </el-upload>
+    <!-- 上传提示 -->
+    <div class="el-upload__tip" v-if="showTip">
+      请上传
+      <template v-if="fileSize">
+        大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
+      </template>
+      <template v-if="fileType">
+        格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
+      </template>
+      的文件
+    </div>
+    <!-- 文件列表 -->
+    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
+      <li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
+        <el-link :href="`${file.url}`" :underline="false" target="_blank">
+          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
+        </el-link>
+        <div class="ele-upload-list__item-content-action">
+          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
+        </div>
+      </li>
+    </transition-group>
+  </div>
+</template>
+
 <script setup lang="ts">
 import { getToken } from "@/utils/auth";
 import { listByIds, delOss } from "@/api/system/oss";
@@ -5,27 +49,27 @@ import { ComponentInternalInstance } from "vue";
 import { ElUpload, UploadFile } from "element-plus";
 
 const props = defineProps({
-  modelValue: [String, Object, Array],
-  // 数量限制
-  limit: {
-    type: Number,
-    default: 5,
-  },
-  // 大小限制(MB)
-  fileSize: {
-    type: Number,
-    default: 5,
-  },
-  // 文件类型, 例如['png', 'jpg', 'jpeg']
-  fileType: {
-    type: Array,
-    default: () => ["doc", "xls", "ppt", "txt", "pdf"],
-  },
-  // 是否显示提示
-  isShowTip: {
-    type: Boolean,
-    default: true
-  }
+    modelValue: [String, Object, Array],
+    // 数量限制
+    limit: {
+        type: Number,
+        default: 5,
+    },
+    // 大小限制(MB)
+    fileSize: {
+        type: Number,
+        default: 5,
+    },
+    // 文件类型, 例如['png', 'jpg', 'jpeg']
+    fileType: {
+        type: Array,
+        default: () => ["doc", "xls", "ppt", "txt", "pdf"],
+    },
+    // 是否显示提示
+    isShowTip: {
+        type: Boolean,
+        default: true
+    }
 });
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -39,172 +83,128 @@ const headers = ref({ Authorization: "Bearer " + getToken() });
 
 const fileList = ref<any[]>([]);
 const showTip = computed(
-  () => props.isShowTip && (props.fileType || props.fileSize)
+    () => props.isShowTip && (props.fileType || props.fileSize)
 );
 
 const fileUploadRef = ref(ElUpload);
 
 watch(() => props.modelValue, async val => {
-  if (val) {
-    let temp = 1;
-    // 首先将值转为数组
-    let list = [];
-    if (Array.isArray(val)) {
-      list = val;
-    } else {
-      const res =  await listByIds(val as string)
-      list = res.data.map((oss) => {
-          const data = { name: oss.originalName, url: oss.url, ossId: oss.ossId };
-          return data;
+    if (val) {
+        let temp = 1;
+        // 首先将值转为数组
+        let list = [];
+        if (Array.isArray(val)) {
+            list = val;
+        } else {
+            const res =  await listByIds(val as string)
+            list = res.data.map((oss) => {
+                const data = { name: oss.originalName, url: oss.url, ossId: oss.ossId };
+                return data;
+            });
+        }
+        // 然后将数组转为对象数组
+        fileList.value = list.map(item => {
+            item = {name: item.name, url: item.url, ossId: item.ossId};
+            item.uid = item.uid || new Date().getTime() + temp++;
+            return item;
         });
+    } else {
+        fileList.value = [];
+        return [];
     }
-    // 然后将数组转为对象数组
-    fileList.value = list.map(item => {
-      item = {name: item.name, url: item.url, ossId: item.ossId};
-      item.uid = item.uid || new Date().getTime() + temp++;
-      return item;
-    });
-  } else {
-    fileList.value = [];
-    return [];
-  }
 },{ deep: true, immediate: true });
 
 // 上传前校检格式和大小
 const handleBeforeUpload = (file: any) => {
-  // 校检文件类型
-  if (props.fileType.length) {
-    const fileName = file.name.split('.');
-    const fileExt = fileName[fileName.length - 1];
-    const isTypeOk = props.fileType.indexOf(fileExt) >= 0;
-    if (!isTypeOk) {
-      proxy?.$modal.msgError(`文件格式不正确, 请上传${props.fileType.join("/")}格式文件!`);
-      return false;
+    // 校检文件类型
+    if (props.fileType.length) {
+        const fileName = file.name.split('.');
+        const fileExt = fileName[fileName.length - 1];
+        const isTypeOk = props.fileType.indexOf(fileExt) >= 0;
+        if (!isTypeOk) {
+            proxy?.$modal.msgError(`文件格式不正确, 请上传${props.fileType.join("/")}格式文件!`);
+            return false;
+        }
     }
-  }
-  // 校检文件大小
-  if (props.fileSize) {
-    const isLt = file.size / 1024 / 1024 < props.fileSize;
-    if (!isLt) {
-      proxy?.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
-      return false;
+    // 校检文件大小
+    if (props.fileSize) {
+        const isLt = file.size / 1024 / 1024 < props.fileSize;
+        if (!isLt) {
+            proxy?.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
+            return false;
+        }
     }
-  }
-  proxy?.$modal.loading("正在上传文件,请稍候...");
-  number.value++;
-  return true;
+    proxy?.$modal.loading("正在上传文件,请稍候...");
+    number.value++;
+    return true;
 }
 
 // 文件个数超出
 const handleExceed = () => {
-  proxy?.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);
+    proxy?.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);
 }
 
 // 上传失败
 const handleUploadError = () => {
-  proxy?.$modal.msgError("上传文件失败");
+    proxy?.$modal.msgError("上传文件失败");
 }
 
 // 上传成功回调
 const handleUploadSuccess = (res:any, file: UploadFile) => {
-  if (res.code === 200) {
-    uploadList.value.push({ name: res.data.fileName, url: res.data.url, ossId: res.data.ossId });
-    uploadedSuccessfully();
-  } else {
-    number.value--;
-    proxy?.$modal.closeLoading();
-    proxy?.$modal.msgError(res.msg);
-    fileUploadRef.value.handleRemove(file);
-    uploadedSuccessfully();
-  }
+    if (res.code === 200) {
+        uploadList.value.push({ name: res.data.fileName, url: res.data.url, ossId: res.data.ossId });
+        uploadedSuccessfully();
+    } else {
+        number.value--;
+        proxy?.$modal.closeLoading();
+        proxy?.$modal.msgError(res.msg);
+        fileUploadRef.value.handleRemove(file);
+        uploadedSuccessfully();
+    }
 }
 
 // 删除文件
 const handleDelete = (index: number) => {
-  let ossId = fileList.value[index].ossId;
-  delOss(ossId);
-  fileList.value.splice(index, 1);
-  emit("update:modelValue", listToString(fileList.value));
+    let ossId = fileList.value[index].ossId;
+    delOss(ossId);
+    fileList.value.splice(index, 1);
+    emit("update:modelValue", listToString(fileList.value));
 }
 
 // 上传结束处理
 const uploadedSuccessfully =() => {
-  if (number.value > 0 && uploadList.value.length === number.value) {
-    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
-    uploadList.value = [];
-    number.value = 0;
-    emit("update:modelValue", listToString(fileList.value));
-    proxy?.$modal.closeLoading();
-  }
+    if (number.value > 0 && uploadList.value.length === number.value) {
+        fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
+        uploadList.value = [];
+        number.value = 0;
+        emit("update:modelValue", listToString(fileList.value));
+        proxy?.$modal.closeLoading();
+    }
 }
 
 // 获取文件名称
 const getFileName = (name: string) => {
-  // 如果是url那么取最后的名字 如果不是直接返回
-  if (name.lastIndexOf("/") > -1) {
-    return name.slice(name.lastIndexOf("/") + 1);
-  } else {
-    return name;
-  }
+    // 如果是url那么取最后的名字 如果不是直接返回
+    if (name.lastIndexOf("/") > -1) {
+        return name.slice(name.lastIndexOf("/") + 1);
+    } else {
+        return name;
+    }
 }
 
 // 对象转成指定字符串分隔
 const listToString = (list: any[], separator?: string) => {
-  let strs = "";
-  separator = separator || ",";
-  list.forEach(item => {
-    if (item.ossId) {
-      strs += item.ossId + separator;
-    }
-  })
-  return strs != "" ? strs.substring(0, strs.length - 1) : "";
+    let strs = "";
+    separator = separator || ",";
+    list.forEach(item => {
+        if (item.ossId) {
+            strs += item.ossId + separator;
+        }
+    })
+    return strs != "" ? strs.substring(0, strs.length - 1) : "";
 }
 </script>
 
-<template>
-	<div class="upload-file">
-		<el-upload
-			multiple
-			:action="uploadFileUrl"
-			:before-upload="handleBeforeUpload"
-			:file-list="fileList"
-			:limit="limit"
-			:on-error="handleUploadError"
-			:on-exceed="handleExceed"
-			:on-success="handleUploadSuccess"
-			:show-file-list="false"
-			:headers="headers"
-			class="upload-file-uploader"
-			ref="fileUploadRef"
-		>
-			<!-- 上传按钮 -->
-			<el-button type="primary">选取文件</el-button>
-		</el-upload>
-		<!-- 上传提示 -->
-		<div class="el-upload__tip" v-if="showTip">
-			请上传
-			<template v-if="fileSize">
-				大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
-			</template>
-			<template v-if="fileType">
-				格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
-			</template>
-			的文件
-		</div>
-		<!-- 文件列表 -->
-		<transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
-			<li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
-				<el-link :href="`${file.url}`" :underline="false" target="_blank">
-					<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
-				</el-link>
-				<div class="ele-upload-list__item-content-action">
-					<el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
-				</div>
-			</li>
-		</transition-group>
-	</div>
-</template>
-
 <style scoped lang="scss">
 .upload-file-uploader {
   margin-bottom: 5px;

+ 7 - 7
src/components/Hamburger/index.vue

@@ -13,13 +13,13 @@ const toggleClick = () => {
 </script>
 
 <template>
-	<div style="padding: 0 15px;" @click="toggleClick">
-		<svg :class="{'is-active':isActive}" class="hamburger" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64">
-			<path
-				d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"
-			/>
-		</svg>
-	</div>
+  <div style="padding: 0 15px;" @click="toggleClick">
+    <svg :class="{'is-active':isActive}" class="hamburger" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64">
+      <path
+        d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"
+      />
+    </svg>
+  </div>
 </template>
 
 <style scoped>

+ 16 - 16
src/components/HeaderSearch/index.vue

@@ -122,22 +122,22 @@ watch(searchPool, (list) => {
 </script>
 
 <template>
-	<div :class="{ 'show': show }" class="header-search">
-		<svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
-		<el-select
-			ref="headerSearchSelectRef"
-			v-model="search"
-			:remote-method="querySearch"
-			filterable
-			default-first-option
-			remote
-			placeholder="Search"
-			class="header-search-select"
-			@change="change"
-		>
-			<el-option v-for="option in options" :key="option.item.path" :value="option.item" :label="option.item.title.join(' > ')" />
-		</el-select>
-	</div>
+  <div :class="{ 'show': show }" class="header-search">
+    <svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
+    <el-select
+      ref="headerSearchSelectRef"
+      v-model="search"
+      :remote-method="querySearch"
+      filterable
+      default-first-option
+      remote
+      placeholder="Search"
+      class="header-search-select"
+      @change="change"
+    >
+      <el-option v-for="option in options" :key="option.item.path" :value="option.item" :label="option.item.title.join(' > ')" />
+    </el-select>
+  </div>
 </template>
 
 <style lang="scss" scoped>

+ 25 - 25
src/components/IconSelect/index.vue

@@ -44,34 +44,34 @@ const selectedIcon = (iconName: string) => {
 </script>
 
 <template>
-	<div class="relative" :style="{ width: width }">
-		<el-input v-model="modelValue" readonly @click="visible = !visible" placeholder="点击选择图标">
-			<template #prepend>
-				<svg-icon :icon-class="modelValue as string"></svg-icon>
-			</template>
-		</el-input>
+  <div class="relative" :style="{ width: width }">
+    <el-input v-model="modelValue" readonly @click="visible = !visible" placeholder="点击选择图标">
+      <template #prepend>
+        <svg-icon :icon-class="modelValue as string"></svg-icon>
+      </template>
+    </el-input>
 
-		<el-popover shadow="none" :visible="visible" placement="bottom-end" trigger="click" :width="450">
-			<template #reference>
-				<div @click="visible = !visible" class="cursor-pointer text-[#999] absolute right-[10px] top-0 height-[32px] leading-[32px]">
-					<i-ep-caret-top v-show="visible"></i-ep-caret-top>
-					<i-ep-caret-bottom v-show="!visible"></i-ep-caret-bottom>
-				</div>
-			</template>
+    <el-popover shadow="none" :visible="visible" placement="bottom-end" trigger="click" :width="450">
+      <template #reference>
+        <div @click="visible = !visible" class="cursor-pointer text-[#999] absolute right-[10px] top-0 height-[32px] leading-[32px]">
+          <i-ep-caret-top v-show="visible"></i-ep-caret-top>
+          <i-ep-caret-bottom v-show="!visible"></i-ep-caret-bottom>
+        </div>
+      </template>
 
-			<el-input class="p-2" v-model="filterValue" placeholder="搜索图标" clearable @input="filterIcons" />
+      <el-input class="p-2" v-model="filterValue" placeholder="搜索图标" clearable @input="filterIcons" />
 
-			<el-scrollbar height="w-[200px]">
-				<ul class="icon-list">
-					<el-tooltip v-for="(iconName, index) in iconNames" :key="index" :content="iconName" placement="bottom" effect="light">
-						<li class="icon-item" @click="selectedIcon(iconName)">
-							<svg-icon color="var(--el-text-color-regular)" :icon-class="iconName" />
-						</li>
-					</el-tooltip>
-				</ul>
-			</el-scrollbar>
-		</el-popover>
-	</div>
+      <el-scrollbar height="w-[200px]">
+        <ul class="icon-list">
+          <el-tooltip v-for="(iconName, index) in iconNames" :key="index" :content="iconName" placement="bottom" effect="light">
+            <li class="icon-item" @click="selectedIcon(iconName)">
+              <svg-icon color="var(--el-text-color-regular)" :icon-class="iconName" />
+            </li>
+          </el-tooltip>
+        </ul>
+      </el-scrollbar>
+    </el-popover>
+  </div>
 </template>
 
 <style scoped lang="scss">

+ 2 - 2
src/components/IconSelect/requireIcons.ts

@@ -1,7 +1,7 @@
 const icons: string[] = [];
 const modules = import.meta.glob('./../../assets/icons/svg/*.svg');
 for (const path in modules) {
-	const p = path.split('assets/icons/svg/')[1].split('.svg')[0];
-	icons.push(p);
+  const p = path.split('assets/icons/svg/')[1].split('.svg')[0];
+  icons.push(p);
 }
 export default icons;

+ 7 - 7
src/components/ImagePreview/index.vue

@@ -44,13 +44,13 @@ const realHeight = computed(() =>
 </script>
 
 <template>
-	<el-image :src="`${realSrc}`" fit="cover" :style="`width:${realWidth};height:${realHeight};`" :preview-src-list="realSrcList" preview-teleported>
-		<template #error>
-			<div class="image-slot">
-				<el-icon><picture-filled /></el-icon>
-			</div>
-		</template>
-	</el-image>
+  <el-image :src="`${realSrc}`" fit="cover" :style="`width:${realWidth};height:${realHeight};`" :preview-src-list="realSrcList" preview-teleported>
+    <template #error>
+      <div class="image-slot">
+        <el-icon><picture-filled /></el-icon>
+      </div>
+    </template>
+  </el-image>
 </template>
 
 <style lang="scss" scoped>

+ 149 - 149
src/components/ImageUpload/index.vue

@@ -1,3 +1,42 @@
+<template>
+  <div class="component-upload-image">
+    <el-upload
+      multiple
+      :action="uploadImgUrl"
+      list-type="picture-card"
+      :on-success="handleUploadSuccess"
+      :before-upload="handleBeforeUpload"
+      :limit="limit"
+      :on-error="handleUploadError"
+      :on-exceed="handleExceed"
+      ref="imageUpload"
+      :before-remove="handleDelete"
+      :show-file-list="true"
+      :headers="headers"
+      :file-list="fileList"
+      :on-preview="handlePictureCardPreview"
+      :class="{ hide: fileList.length >= limit }"
+    >
+      <el-icon class="avatar-uploader-icon"><plus /></el-icon>
+    </el-upload>
+    <!-- 上传提示 -->
+    <div class="el-upload__tip" v-if="showTip">
+      请上传
+      <template v-if="fileSize">
+        大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
+      </template>
+      <template v-if="fileType">
+        格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
+      </template>
+      的文件
+    </div>
+
+    <el-dialog v-model="dialogVisible" title="预览" width="800px" append-to-body>
+      <img :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto" />
+    </el-dialog>
+  </div>
+</template>
+
 <script setup lang="ts">
 import { getToken } from "@/utils/auth";
 import { listByIds, delOss } from "@/api/system/oss";
@@ -6,27 +45,27 @@ import { OssVO } from "@/api/system/oss/types";
 import { ElUpload, UploadFile } from "element-plus";
 
 const props = defineProps({
-  modelValue: [String, Object, Array],
-  // 图片数量限制
-  limit: {
-    type: Number,
-    default: 5,
-  },
-  // 大小限制(MB)
-  fileSize: {
-    type: Number,
-    default: 5,
-  },
-  // 文件类型, 例如['png', 'jpg', 'jpeg']
-  fileType: {
-    type: Array as PropType<string[]>,
-    default: () => ["png", "jpg", "jpeg"],
-  },
-  // 是否显示提示
-  isShowTip: {
-    type: Boolean,
-    default: true
-  },
+    modelValue: [String, Object, Array],
+    // 图片数量限制
+    limit: {
+        type: Number,
+        default: 5,
+    },
+    // 大小限制(MB)
+    fileSize: {
+        type: Number,
+        default: 5,
+    },
+    // 文件类型, 例如['png', 'jpg', 'jpeg']
+    fileType: {
+        type: Array as PropType<string[]>,
+        default: () => ["png", "jpg", "jpeg"],
+    },
+    // 是否显示提示
+    isShowTip: {
+        type: Boolean,
+        default: true
+    },
 });
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -42,179 +81,140 @@ const headers = ref({ Authorization: "Bearer " + getToken() });
 
 const fileList = ref<any[]>([]);
 const showTip = computed(
-  () => props.isShowTip && (props.fileType || props.fileSize)
+    () => props.isShowTip && (props.fileType || props.fileSize)
 );
 
 const imageUploadRef = ref(ElUpload);
 
 watch(() => props.modelValue, async val => {
-  if (val) {
-    // 首先将值转为数组
-    let list:OssVO[] = [];
-    if (Array.isArray(val)) {
-      list = val as OssVO[];
+    if (val) {
+        // 首先将值转为数组
+        let list:OssVO[] = [];
+        if (Array.isArray(val)) {
+            list = val as OssVO[];
+        } else {
+            const res = await listByIds(val as string)
+            list = res.data
+        }
+        // 然后将数组转为对象数组
+        fileList.value = list.map(item => {
+            // 字符串回显处理 如果此处存的是url可直接回显 如果存的是id需要调用接口查出来
+            let itemData;
+            if (typeof item === "string") {
+                itemData = { name: item, url: item };
+            } else {
+                // 此处name使用ossId 防止删除出现重名
+                itemData = { name: item.ossId, url: item.url, ossId: item.ossId };
+            }
+            return itemData;
+        });
     } else {
-      const res = await listByIds(val as string)
-      list = res.data
+        fileList.value = [];
+        return [];
     }
-    // 然后将数组转为对象数组
-    fileList.value = list.map(item => {
-      // 字符串回显处理 如果此处存的是url可直接回显 如果存的是id需要调用接口查出来
-      let itemData;
-      if (typeof item === "string") {
-        itemData = { name: item, url: item };
-      } else {
-        // 此处name使用ossId 防止删除出现重名
-        itemData = { name: item.ossId, url: item.url, ossId: item.ossId };
-      }
-      return itemData;
-    });
-  } else {
-    fileList.value = [];
-    return [];
-  }
 },{ deep: true, immediate: true });
 
 /** 上传前loading加载 */
 const handleBeforeUpload = (file: any) => {
-  let isImg = false;
-  if (props.fileType.length) {
-    let fileExtension = "";
-    if (file.name.lastIndexOf(".") > -1) {
-      fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
+    let isImg = false;
+    if (props.fileType.length) {
+        let fileExtension = "";
+        if (file.name.lastIndexOf(".") > -1) {
+            fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
+        }
+        isImg = props.fileType.some((type) => {
+            if (file.type.indexOf(type) > -1) return true;
+            if (fileExtension && fileExtension.indexOf(type) > -1) return true;
+            return false;
+        });
+    } else {
+        isImg = file.type.indexOf("image") > -1;
     }
-    isImg = props.fileType.some((type) => {
-      if (file.type.indexOf(type) > -1) return true;
-      if (fileExtension && fileExtension.indexOf(type) > -1) return true;
-      return false;
-    });
-  } else {
-    isImg = file.type.indexOf("image") > -1;
-  }
-  if (!isImg) {
-    proxy?.$modal.msgError(
-      `文件格式不正确, 请上传${props.fileType.join("/")}图片格式文件!`
-    );
-    return false;
-  }
-  if (props.fileSize) {
-    const isLt = file.size / 1024 / 1024 < props.fileSize;
-    if (!isLt) {
-      proxy?.$modal.msgError(`上传头像图片大小不能超过 ${props.fileSize} MB!`);
-      return false;
+    if (!isImg) {
+        proxy?.$modal.msgError(
+            `文件格式不正确, 请上传${props.fileType.join("/")}图片格式文件!`
+        );
+        return false;
     }
-  }
-  proxy?.$modal.loading("正在上传图片,请稍候...");
-  number.value++;
+    if (props.fileSize) {
+        const isLt = file.size / 1024 / 1024 < props.fileSize;
+        if (!isLt) {
+            proxy?.$modal.msgError(`上传头像图片大小不能超过 ${props.fileSize} MB!`);
+            return false;
+        }
+    }
+    proxy?.$modal.loading("正在上传图片,请稍候...");
+    number.value++;
 }
 
 // 文件个数超出
 const handleExceed = () => {
-  proxy?.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);
+    proxy?.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);
 }
 
 // 上传成功回调
 const handleUploadSuccess = (res: any, file: UploadFile) => {
-  if (res.code === 200) {
-    uploadList.value.push({ name: res.data.fileName, url: res.data.url, ossId: res.data.ossId });
-    uploadedSuccessfully();
-  } else {
-    number.value--;
-    proxy?.$modal.closeLoading();
-    proxy?.$modal.msgError(res.msg);
-    imageUploadRef.value.handleRemove(file);
-    uploadedSuccessfully();
-  }
+    if (res.code === 200) {
+        uploadList.value.push({ name: res.data.fileName, url: res.data.url, ossId: res.data.ossId });
+        uploadedSuccessfully();
+    } else {
+        number.value--;
+        proxy?.$modal.closeLoading();
+        proxy?.$modal.msgError(res.msg);
+        imageUploadRef.value.handleRemove(file);
+        uploadedSuccessfully();
+    }
 }
 
 // 删除图片
 const handleDelete = (file: UploadFile): boolean => {
-  const findex = fileList.value.map(f => f.name).indexOf(file.name);
-  if (findex > -1 && uploadList.value.length === number.value) {
-    let ossId = fileList.value[findex].ossId;
-    delOss(ossId);
-    fileList.value.splice(findex, 1);
-    emit("update:modelValue", listToString(fileList.value));
-    return false;
-  }
-  return true;
+    const findex = fileList.value.map(f => f.name).indexOf(file.name);
+    if (findex > -1 && uploadList.value.length === number.value) {
+        let ossId = fileList.value[findex].ossId;
+        delOss(ossId);
+        fileList.value.splice(findex, 1);
+        emit("update:modelValue", listToString(fileList.value));
+        return false;
+    }
+    return true;
 }
 
 // 上传结束处理
 const uploadedSuccessfully = () => {
-  if (number.value > 0 && uploadList.value.length === number.value) {
-    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
-    uploadList.value = [];
-    number.value = 0;
-    emit("update:modelValue", listToString(fileList.value));
-    proxy?.$modal.closeLoading();
-  }
+    if (number.value > 0 && uploadList.value.length === number.value) {
+        fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
+        uploadList.value = [];
+        number.value = 0;
+        emit("update:modelValue", listToString(fileList.value));
+        proxy?.$modal.closeLoading();
+    }
 }
 
 // 上传失败
 const handleUploadError = () => {
-  proxy?.$modal.msgError("上传图片失败");
-  proxy?.$modal.closeLoading();
+    proxy?.$modal.msgError("上传图片失败");
+    proxy?.$modal.closeLoading();
 }
 
 // 预览
 const handlePictureCardPreview = (file: any) => {
-  dialogImageUrl.value = file.url;
-  dialogVisible.value = true;
+    dialogImageUrl.value = file.url;
+    dialogVisible.value = true;
 }
 
 // 对象转成指定字符串分隔
 const listToString = (list: any[], separator?: string) => {
-  let strs = "";
-  separator = separator || ",";
-  for (let i in list) {
-    if(undefined !== list[i].ossId && list[i].url.indexOf("blob:") !== 0) {
-      strs += list[i].ossId + separator;
+    let strs = "";
+    separator = separator || ",";
+    for (let i in list) {
+        if(undefined !== list[i].ossId && list[i].url.indexOf("blob:") !== 0) {
+            strs += list[i].ossId + separator;
+        }
     }
-  }
-  return strs != "" ? strs.substring(0, strs.length - 1) : "";
+    return strs != "" ? strs.substring(0, strs.length - 1) : "";
 }
 </script>
 
-<template>
-	<div class="component-upload-image">
-		<el-upload
-			multiple
-			:action="uploadImgUrl"
-			list-type="picture-card"
-			:on-success="handleUploadSuccess"
-			:before-upload="handleBeforeUpload"
-			:limit="limit"
-			:on-error="handleUploadError"
-			:on-exceed="handleExceed"
-			ref="imageUpload"
-			:before-remove="handleDelete"
-			:show-file-list="true"
-			:headers="headers"
-			:file-list="fileList"
-			:on-preview="handlePictureCardPreview"
-			:class="{ hide: fileList.length >= limit }"
-		>
-			<el-icon class="avatar-uploader-icon"><plus /></el-icon>
-		</el-upload>
-		<!-- 上传提示 -->
-		<div class="el-upload__tip" v-if="showTip">
-			请上传
-			<template v-if="fileSize">
-				大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
-			</template>
-			<template v-if="fileType">
-				格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
-			</template>
-			的文件
-		</div>
-
-		<el-dialog v-model="dialogVisible" title="预览" width="800px" append-to-body>
-			<img :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto" />
-		</el-dialog>
-	</div>
-</template>
-
 <style scoped lang="scss">
 // .el-upload--picture-card 控制加号部分
 :deep(.hide .el-upload--picture-card) {

+ 82 - 82
src/components/Pagination/index.vue

@@ -1,6 +1,22 @@
+<template>
+  <div :class="{ 'hidden': hidden }" class="pagination-container">
+    <el-pagination
+      :background="background"
+      v-model:current-page="currentPage"
+      v-model:page-size="pageSize"
+      :layout="layout"
+      :page-sizes="pageSizes"
+      :pager-count="pagerCount"
+      :total="total"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+    />
+  </div>
+</template>
+
 <script lang="ts">
 export default {
-  name: 'Pagination'
+    name: 'Pagination'
 }
 </script>
 
@@ -9,101 +25,85 @@ import { scrollTo } from '@/utils/scroll-to'
 import { PropType } from "vue";
 
 const props = defineProps({
-  total: {
-    required: true,
-    type: Number
-  },
-  page: {
-    type: Number,
-    default: 1
-  },
-  limit: {
-    type: Number,
-    default: 20
-  },
-  pageSizes: {
-    type: Array as PropType<number[]>,
-    default() {
-      return [10, 20, 30, 50]
+    total: {
+        required: true,
+        type: Number
+    },
+    page: {
+        type: Number,
+        default: 1
+    },
+    limit: {
+        type: Number,
+        default: 20
+    },
+    pageSizes: {
+        type: Array as PropType<number[]>,
+        default() {
+            return [10, 20, 30, 50]
+        }
+    },
+    // 移动端页码按钮的数量端默认值5
+    pagerCount: {
+        type: Number,
+        default: document.body.clientWidth < 992 ? 5 : 7
+    },
+    layout: {
+        type: String,
+        default: 'total, sizes, prev, pager, next, jumper'
+    },
+    background: {
+        type: Boolean,
+        default: true
+    },
+    autoScroll: {
+        type: Boolean,
+        default: true
+    },
+    hidden: {
+        type: Boolean,
+        default: false
+    },
+    float: {
+        type: String,
+        default: 'right'
     }
-  },
-  // 移动端页码按钮的数量端默认值5
-  pagerCount: {
-    type: Number,
-    default: document.body.clientWidth < 992 ? 5 : 7
-  },
-  layout: {
-    type: String,
-    default: 'total, sizes, prev, pager, next, jumper'
-  },
-  background: {
-    type: Boolean,
-    default: true
-  },
-  autoScroll: {
-    type: Boolean,
-    default: true
-  },
-  hidden: {
-    type: Boolean,
-    default: false
-  },
-  float: {
-    type: String,
-    default: 'right'
-  }
 })
 
 const emit = defineEmits(['update:page', 'update:limit', 'pagination']);
 const currentPage = computed({
-  get() {
-    return props.page
-  },
-  set(val) {
-    emit('update:page', val)
-  }
+    get() {
+        return props.page
+    },
+    set(val) {
+        emit('update:page', val)
+    }
 })
 const pageSize = computed({
-  get() {
-    return props.limit
-  },
-  set(val){
-    emit('update:limit', val)
-  }
+    get() {
+        return props.limit
+    },
+    set(val){
+        emit('update:limit', val)
+    }
 })
 function handleSizeChange(val: number) {
-  if (currentPage.value * val > props.total) {
-    currentPage.value = 1
-  }
-  emit('pagination', { page: currentPage.value, limit: val })
-  if (props.autoScroll) {
-    scrollTo(0, 800)
-  }
+    if (currentPage.value * val > props.total) {
+        currentPage.value = 1
+    }
+    emit('pagination', { page: currentPage.value, limit: val })
+    if (props.autoScroll) {
+        scrollTo(0, 800)
+    }
 }
 function handleCurrentChange(val: number) {
-  emit('pagination', { page: val, limit: pageSize.value })
-  if (props.autoScroll) {
-    scrollTo(0, 800)
-  }
+    emit('pagination', { page: val, limit: pageSize.value })
+    if (props.autoScroll) {
+        scrollTo(0, 800)
+    }
 }
 </script>
 
-<template>
-	<div :class="{ 'hidden': hidden }" class="pagination-container">
-		<el-pagination
-			:background="background"
-			v-model:current-page="currentPage"
-			v-model:page-size="pageSize"
-			:layout="layout"
-			:page-sizes="pageSizes"
-			:pager-count="pagerCount"
-			:total="total"
-			@size-change="handleSizeChange"
-			@current-change="handleCurrentChange"
-		/>
-	</div>
-</template>
-
 <style lang="scss" scoped>
 .pagination-container {
   background: #fff;

+ 1 - 1
src/components/ParentView/index.vue

@@ -1,3 +1,3 @@
 <template>
-	<router-view />
+  <router-view />
 </template>

+ 50 - 50
src/components/RightToolbar/index.vue

@@ -1,23 +1,42 @@
+<template>
+  <div class="top-right-btn" :style="style">
+    <el-row>
+      <el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search">
+        <el-button circle icon="Search" @click="toggleSearch()" />
+      </el-tooltip>
+      <el-tooltip class="item" effect="dark" content="刷新" placement="top">
+        <el-button circle icon="Refresh" @click="refresh()" />
+      </el-tooltip>
+      <el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
+        <el-button circle icon="Menu" @click="showColumn()" />
+      </el-tooltip>
+    </el-row>
+    <el-dialog :title="title" v-model="open" append-to-body>
+      <el-transfer :titles="['显示', '隐藏']" v-model="value" :data="columns" @change="dataChange"></el-transfer>
+    </el-dialog>
+  </div>
+</template>
+
 <script setup lang="ts">
 import { TransferKey } from "element-plus";
 import { PropType } from "vue";
 
 const props = defineProps({
-  showSearch: {
-    type: Boolean,
-    default: true,
-  },
-  columns: {
-    type: Array as PropType<FieldOption[]>,
-  },
-  search: {
-    type: Boolean,
-    default: true,
-  },
-  gutter: {
-    type: Number,
-    default: 10,
-  },
+    showSearch: {
+        type: Boolean,
+        default: true,
+    },
+    columns: {
+        type: Array as PropType<FieldOption[]>,
+    },
+    search: {
+        type: Boolean,
+        default: true,
+    },
+    gutter: {
+        type: Number,
+        default: 10,
+    },
 })
 
 const emits = defineEmits(['update:showSearch', 'queryTable']);
@@ -30,64 +49,45 @@ const title = ref("显示/隐藏");
 const open = ref(false);
 
 const style = computed(() => {
-  const ret: any = {};
-  if (props.gutter) {
-    ret.marginRight = `${props.gutter / 2}px`;
-  }
-  return ret;
+    const ret: any = {};
+    if (props.gutter) {
+        ret.marginRight = `${props.gutter / 2}px`;
+    }
+    return ret;
 });
 
 // 搜索
 function toggleSearch() {
-  emits("update:showSearch", !props.showSearch);
+    emits("update:showSearch", !props.showSearch);
 }
 
 // 刷新
 function refresh() {
-  emits("queryTable");
+    emits("queryTable");
 }
 
 // 右侧列表元素变化
 function dataChange(data: TransferKey[]) {
-  props.columns?.forEach((item) => {
-    item.visible = !data.includes(item.key);
-  })
+    props.columns?.forEach((item) => {
+        item.visible = !data.includes(item.key);
+    })
 }
 
 // 打开显隐列dialog
 const showColumn = () => {
-  open.value = true;
+    open.value = true;
 }
 
 // 显隐列初始默认隐藏列
 onMounted(() => {
-  props.columns?.forEach((item) => {
-    if (!item.visible) {
-      value.value.push(item.key);
-    }
-  })
+    props.columns?.forEach((item) => {
+        if (!item.visible) {
+            value.value.push(item.key);
+        }
+    })
 })
 </script>
 
-<template>
-	<div class="top-right-btn" :style="style">
-		<el-row>
-			<el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search">
-				<el-button circle icon="Search" @click="toggleSearch()" />
-			</el-tooltip>
-			<el-tooltip class="item" effect="dark" content="刷新" placement="top">
-				<el-button circle icon="Refresh" @click="refresh()" />
-			</el-tooltip>
-			<el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
-				<el-button circle icon="Menu" @click="showColumn()" />
-			</el-tooltip>
-		</el-row>
-		<el-dialog :title="title" v-model="open" append-to-body>
-			<el-transfer :titles="['显示', '隐藏']" v-model="value" :data="columns" @change="dataChange"></el-transfer>
-		</el-dialog>
-	</div>
-</template>
-
 <style lang="scss" scoped>
 :deep(.el-transfer__button) {
   border-radius: 50%;

+ 3 - 3
src/components/RuoYiDoc/index.vue

@@ -1,7 +1,7 @@
 <template>
-	<div>
-		<svg-icon icon-class="question" @click="goto" />
-	</div>
+  <div>
+    <svg-icon icon-class="question" @click="goto" />
+  </div>
 </template>
 
 <script setup>

+ 3 - 3
src/components/RuoYiGit/index.vue

@@ -1,7 +1,7 @@
 <template>
-	<div>
-		<svg-icon icon-class="github" @click="goto" />
-	</div>
+  <div>
+    <svg-icon icon-class="github" @click="goto" />
+  </div>
 </template>
 
 <script setup>

+ 3 - 3
src/components/Screenfull/index.vue

@@ -1,7 +1,7 @@
 <template>
-	<div>
-		<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'" @click="toggle" />
-	</div>
+  <div>
+    <svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'" @click="toggle" />
+  </div>
 </template>
 
 <script setup lang="ts">

+ 14 - 14
src/components/SizeSelect/index.vue

@@ -16,20 +16,20 @@ const handleSetSize = (size: string) => {
 </script>
 
 <template>
-	<div>
-		<el-dropdown trigger="click" @command="handleSetSize">
-			<div class="size-icon--style">
-				<svg-icon class-name="size-icon" icon-class="size" />
-			</div>
-			<template #dropdown>
-				<el-dropdown-menu>
-					<el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size === item.value" :command="item.value">
-						{{ item.label }}
-					</el-dropdown-item>
-				</el-dropdown-menu>
-			</template>
-		</el-dropdown>
-	</div>
+  <div>
+    <el-dropdown trigger="click" @command="handleSetSize">
+      <div class="size-icon--style">
+        <svg-icon class-name="size-icon" icon-class="size" />
+      </div>
+      <template #dropdown>
+        <el-dropdown-menu>
+          <el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size === item.value" :command="item.value">
+            {{ item.label }}
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </template>
+    </el-dropdown>
+  </div>
 </template>
 
 <style lang="scss" scoped>

+ 3 - 3
src/components/SvgIcon/index.vue

@@ -23,9 +23,9 @@ const svgClass = computed(() => {
 </script>
 
 <template>
-	<svg :class="svgClass" aria-hidden="true">
-		<use :xlink:href="iconName" :fill="color" />
-	</svg>
+  <svg :class="svgClass" aria-hidden="true">
+    <use :xlink:href="iconName" :fill="color" />
+  </svg>
 </template>
 
 <style scope lang="scss">

+ 20 - 20
src/components/TopNav/index.vue

@@ -1,3 +1,23 @@
+<template>
+    <el-menu :default-active="activeMenu" mode="horizontal" @select="handleSelect" :ellipsis="false">
+        <template v-for="(item, index) in topMenus">
+            <el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index" v-if="index < visibleNumber"
+            ><svg-icon :icon-class="item.meta ? item.meta.icon : '' " /> {{ item.meta?.title }}</el-menu-item
+            >
+        </template>
+
+        <!-- 顶部菜单超出数量折叠 -->
+        <el-sub-menu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">
+            <template #title>更多菜单</template>
+            <template v-for="(item, index) in topMenus">
+                <el-menu-item :index="item.path" :key="index" v-if="index >= visibleNumber"
+                ><svg-icon :icon-class="item.meta ? item.meta.icon : '' " /> {{ item.meta?.title }}</el-menu-item
+                >
+            </template>
+        </el-sub-menu>
+    </el-menu>
+</template>
+
 <script setup lang="ts">
 import { constantRoutes } from '@/router';
 import { isHttp } from '@/utils/validate';
@@ -130,26 +150,6 @@ onMounted(() => {
 })
 </script>
 
-<template>
-	<el-menu :default-active="activeMenu" mode="horizontal" @select="handleSelect" :ellipsis="false">
-		<template v-for="(item, index) in topMenus">
-			<el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index" v-if="index < visibleNumber"
-				><svg-icon :icon-class="item.meta ? item.meta.icon : '' " /> {{ item.meta?.title }}</el-menu-item
-			>
-		</template>
-
-		<!-- 顶部菜单超出数量折叠 -->
-		<el-sub-menu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">
-			<template #title>更多菜单</template>
-			<template v-for="(item, index) in topMenus">
-				<el-menu-item :index="item.path" :key="index" v-if="index >= visibleNumber"
-					><svg-icon :icon-class="item.meta ? item.meta.icon : '' " /> {{ item.meta?.title }}</el-menu-item
-				>
-			</template>
-		</el-sub-menu>
-	</el-menu>
-</template>
-
 <style lang="scss">
 .topmenu-container.el-menu--horizontal > .el-menu-item {
   float: left;

+ 27 - 27
src/components/TreeSelect/index.vue

@@ -128,31 +128,31 @@ ul li .el-tree .el-tree-node__content {
 </style>
 
 <template>
-	<div class="el-tree-select">
-		<el-select
-			style="width: 100%"
-			v-model="valueId"
-			ref="treeSelect"
-			:filterable="true"
-			:clearable="true"
-			@clear="clearHandle"
-			:filter-method="selectFilterData"
-			:placeholder="placeholder"
-		>
-			<el-option :value="valueId" :label="valueTitle">
-				<el-tree
-					id="tree-option"
-					ref="selectTree"
-					:accordion="accordion"
-					:data="options"
-					:props="objMap"
-					:node-key="objMap.value"
-					:expand-on-click-node="false"
-					:default-expanded-keys="defaultExpandedKey"
-					:filter-node-method="filterNode"
-					@node-click="handleNodeClick"
-				></el-tree>
-			</el-option>
-		</el-select>
-	</div>
+  <div class="el-tree-select">
+    <el-select
+      style="width: 100%"
+      v-model="valueId"
+      ref="treeSelect"
+      :filterable="true"
+      :clearable="true"
+      @clear="clearHandle"
+      :filter-method="selectFilterData"
+      :placeholder="placeholder"
+    >
+      <el-option :value="valueId" :label="valueTitle">
+        <el-tree
+          id="tree-option"
+          ref="selectTree"
+          :accordion="accordion"
+          :data="options"
+          :props="objMap"
+          :node-key="objMap.value"
+          :expand-on-click-node="false"
+          :default-expanded-keys="defaultExpandedKey"
+          :filter-node-method="filterNode"
+          @node-click="handleNodeClick"
+        ></el-tree>
+      </el-option>
+    </el-select>
+  </div>
 </template>

+ 3 - 3
src/components/iFrame/index.vue

@@ -21,7 +21,7 @@ onMounted(() => {
 </script>
 
 <template>
-	<div v-loading="loading" :style="'height:' + height">
-		<iframe :src="url" frameborder="no" style="width: 100%; height: 100%" scrolling="auto" />
-	</div>
+  <div v-loading="loading" :style="'height:' + height">
+    <iframe :src="url" frameborder="no" style="width: 100%; height: 100%" scrolling="auto" />
+  </div>
 </template>

+ 50 - 50
src/directive/common/copyText.ts

@@ -4,63 +4,63 @@
  */
 
 export default {
-	beforeMount(el: any, { value, arg }: any) {
-		if (arg === 'callback') {
-			el.$copyCallback = value;
-		} else {
-			el.$copyValue = value;
-			const handler = () => {
-				copyTextToClipboard(el.$copyValue);
-				if (el.$copyCallback) {
-					el.$copyCallback(el.$copyValue);
-				}
-			};
-			el.addEventListener('click', handler);
-			el.$destroyCopy = () => el.removeEventListener('click', handler);
-		}
-	}
+  beforeMount(el: any, { value, arg }: any) {
+    if (arg === 'callback') {
+      el.$copyCallback = value;
+    } else {
+      el.$copyValue = value;
+      const handler = () => {
+        copyTextToClipboard(el.$copyValue);
+        if (el.$copyCallback) {
+          el.$copyCallback(el.$copyValue);
+        }
+      };
+      el.addEventListener('click', handler);
+      el.$destroyCopy = () => el.removeEventListener('click', handler);
+    }
+  }
 };
 
 function copyTextToClipboard(input: string, { target = document.body } = {}) {
-	const element = document.createElement('textarea');
-	const previouslyFocusedElement = document.activeElement as HTMLInputElement;
-	element.value = input;
-	// Prevent keyboard from showing on mobile
-	element.setAttribute('readonly', '');
+  const element = document.createElement('textarea');
+  const previouslyFocusedElement = document.activeElement as HTMLInputElement;
+  element.value = input;
+  // Prevent keyboard from showing on mobile
+  element.setAttribute('readonly', '');
 
-	element.style.contain = 'strict';
-	element.style.position = 'absolute';
-	element.style.left = '-9999px';
-	element.style.fontSize = '12pt'; // Prevent zooming on iOS
+  element.style.contain = 'strict';
+  element.style.position = 'absolute';
+  element.style.left = '-9999px';
+  element.style.fontSize = '12pt'; // Prevent zooming on iOS
 
-	const selection = document.getSelection();
-	let originalRange;
-	if (selection) {
-		originalRange = selection?.rangeCount > 0 && selection.getRangeAt(0);
-	}
-	target.append(element);
-	element.select();
+  const selection = document.getSelection();
+  let originalRange;
+  if (selection) {
+    originalRange = selection?.rangeCount > 0 && selection.getRangeAt(0);
+  }
+  target.append(element);
+  element.select();
 
-	// Explicit selection workaround for iOS
-	element.selectionStart = 0;
-	element.selectionEnd = input.length;
+  // Explicit selection workaround for iOS
+  element.selectionStart = 0;
+  element.selectionEnd = input.length;
 
-	let isSuccess = false;
-	try {
-		isSuccess = document.execCommand('copy');
-	} catch (err) {
-		console.error(err);
-	}
-	element.remove();
+  let isSuccess = false;
+  try {
+    isSuccess = document.execCommand('copy');
+  } catch (err) {
+    console.error(err);
+  }
+  element.remove();
 
-	if (originalRange) {
-		selection?.removeAllRanges();
-		selection?.addRange(originalRange);
-	}
+  if (originalRange) {
+    selection?.removeAllRanges();
+    selection?.addRange(originalRange);
+  }
 
-	// Get the focus back on the previously focused element, if any
-	if (previouslyFocusedElement) {
-		previouslyFocusedElement.focus();
-	}
-	return isSuccess;
+  // Get the focus back on the previously focused element, if any
+  if (previouslyFocusedElement) {
+    previouslyFocusedElement.focus();
+  }
+  return isSuccess;
 }

+ 3 - 3
src/directive/index.ts

@@ -3,7 +3,7 @@ import { hasPermi, hasRoles } from './permission';
 import { App } from 'vue';
 
 export default (app: App) => {
-	app.directive('copyText', copyText);
-	app.directive('hasPermi', hasPermi);
-	app.directive('hasRoles', hasRoles);
+  app.directive('copyText', copyText);
+  app.directive('hasPermi', hasPermi);
+  app.directive('hasRoles', hasRoles);
 };

+ 31 - 31
src/directive/permission/index.ts

@@ -4,41 +4,41 @@ import useUserStore from '@/store/modules/user';
  * 操作权限处理
  */
 export const hasPermi: Directive = {
-	mounted(el: HTMLElement, binding: DirectiveBinding) {
-		const { permissions } = useUserStore();
-		// 「其他角色」按钮权限校验
-		const { value } = binding;
-		if (value && value instanceof Array && value.length > 0) {
-			const hasPermission = permissions.some((permi) => {
-				return permi === '*:*:*' || value.includes(permi);
-			});
-			if (!hasPermission) {
-				el.parentNode && el.parentNode.removeChild(el);
-				return false;
-			}
-		} else {
-			throw new Error("check perms! Like v-has-permi=\"['sys:user:add','sys:user:edit']\"");
-		}
-	}
+  mounted(el: HTMLElement, binding: DirectiveBinding) {
+    const { permissions } = useUserStore();
+    // 「其他角色」按钮权限校验
+    const { value } = binding;
+    if (value && value instanceof Array && value.length > 0) {
+      const hasPermission = permissions.some((permi) => {
+        return permi === '*:*:*' || value.includes(permi);
+      });
+      if (!hasPermission) {
+        el.parentNode && el.parentNode.removeChild(el);
+        return false;
+      }
+    } else {
+      throw new Error("check perms! Like v-has-permi=\"['sys:user:add','sys:user:edit']\"");
+    }
+  }
 };
 
 /**
  * 角色权限处理
  */
 export const hasRoles: Directive = {
-	mounted(el: HTMLElement, binding: DirectiveBinding) {
-		const { value } = binding;
-		const { roles } = useUserStore();
-		if (value && value instanceof Array && value.length > 0) {
-			const hasRole = roles.some((role) => {
-				return role === 'admin' || value.includes(role);
-			});
-			if (!hasRole) {
-				el.parentNode && el.parentNode.removeChild(el);
-				return false;
-			}
-		} else {
-			throw new Error("check roles! Like v-has-roles=\"['admin','test']\"");
-		}
-	}
+  mounted(el: HTMLElement, binding: DirectiveBinding) {
+    const { value } = binding;
+    const { roles } = useUserStore();
+    if (value && value instanceof Array && value.length > 0) {
+      const hasRole = roles.some((role) => {
+        return role === 'admin' || value.includes(role);
+      });
+      if (!hasRole) {
+        el.parentNode && el.parentNode.removeChild(el);
+        return false;
+      }
+    } else {
+      throw new Error("check roles! Like v-has-roles=\"['admin','test']\"");
+    }
+  }
 };

+ 12 - 12
src/enums/MenuTypeEnum.ts

@@ -1,15 +1,15 @@
 export enum MenuTypeEnum {
-	/**
-	 * 目录
-	 */
-	M = 'M',
-	/**
-	 * 菜单
-	 */
-	C = 'C',
+  /**
+   * 目录
+   */
+  M = 'M',
+  /**
+   * 菜单
+   */
+  C = 'C',
 
-	/**
-	 * 按钮
-	 */
-	F = 'F'
+  /**
+   * 按钮
+   */
+  F = 'F'
 }

+ 88 - 88
src/enums/RespEnum.ts

@@ -1,90 +1,90 @@
 export enum HttpStatus {
-	/**
-	 * 操作成功
-	 */
-	SUCCESS = 200,
-	/**
-	 * 对象创建成功
-	 */
-	CREATED = 201,
-	/**
-	 * 请求已经被接受
-	 */
-	ACCEPTED = 202,
-	/**
-	 * 操作已经执行成功,但是没有返回数据
-	 */
-	NO_CONTENT = 204,
-	/**
-	 * 资源已经被移除
-	 */
-	MOVED_PERM = 301,
-	/**
-	 * 重定向
-	 */
-	SEE_OTHER = 303,
-	/**
-	 * 资源没有被修改
-	 */
-	NOT_MODIFIED = 304,
-	/**
-	 * 参数列表错误(缺少,格式不匹配)
-	 */
-	PARAM_ERROR = 400,
-	/**
-	 * 未授权
-	 */
-	UNAUTHORIZED = 401,
-	/**
-	 * 访问受限,授权过期
-	 */
-	FORBIDDEN = 403,
-	/**
-	 * 资源,服务未找到
-	 */
-	NOT_FOUND = 404,
-	/**
-	 * 不允许的http方法
-	 */
-	BAD_METHOD = 405,
-	/**
-	 * 资源冲突,或者资源被锁
-	 */
-	CONFLICT = 409,
-	/**
-	 * 不支持的数据,媒体类型
-	 */
-	UNSUPPORTED_TYPE = 415,
-	/**
-	 * 系统内部错误
-	 */
-	SERVER_ERROR = 500,
-	/**
-	 * 接口未实现
-	 */
-	NOT_IMPLEMENTED = 501,
-	/**
-	 * 服务不可用,过载或者维护
-	 */
-	BAD_GATEWAY = 502,
-	/**
-	 * 网关超时
-	 */
-	GATEWAY_TIMEOUT = 504,
-	/**
-	 * 未知错误
-	 */
-	UNKNOWN_ERROR = 520,
-	/**
-	 * 服务未知错误
-	 */
-	SERVICE_ERROR = 521,
-	/**
-	 * 数据库未知错误
-	 */
-	DATABASE_ERROR = 522,
-	/**
-	 * 系统警告消息
-	 */
-	WARN = 601
+  /**
+   * 操作成功
+   */
+  SUCCESS = 200,
+  /**
+   * 对象创建成功
+   */
+  CREATED = 201,
+  /**
+   * 请求已经被接受
+   */
+  ACCEPTED = 202,
+  /**
+   * 操作已经执行成功,但是没有返回数据
+   */
+  NO_CONTENT = 204,
+  /**
+   * 资源已经被移除
+   */
+  MOVED_PERM = 301,
+  /**
+   * 重定向
+   */
+  SEE_OTHER = 303,
+  /**
+   * 资源没有被修改
+   */
+  NOT_MODIFIED = 304,
+  /**
+   * 参数列表错误(缺少,格式不匹配)
+   */
+  PARAM_ERROR = 400,
+  /**
+   * 未授权
+   */
+  UNAUTHORIZED = 401,
+  /**
+   * 访问受限,授权过期
+   */
+  FORBIDDEN = 403,
+  /**
+   * 资源,服务未找到
+   */
+  NOT_FOUND = 404,
+  /**
+   * 不允许的http方法
+   */
+  BAD_METHOD = 405,
+  /**
+   * 资源冲突,或者资源被锁
+   */
+  CONFLICT = 409,
+  /**
+   * 不支持的数据,媒体类型
+   */
+  UNSUPPORTED_TYPE = 415,
+  /**
+   * 系统内部错误
+   */
+  SERVER_ERROR = 500,
+  /**
+   * 接口未实现
+   */
+  NOT_IMPLEMENTED = 501,
+  /**
+   * 服务不可用,过载或者维护
+   */
+  BAD_GATEWAY = 502,
+  /**
+   * 网关超时
+   */
+  GATEWAY_TIMEOUT = 504,
+  /**
+   * 未知错误
+   */
+  UNKNOWN_ERROR = 520,
+  /**
+   * 服务未知错误
+   */
+  SERVICE_ERROR = 521,
+  /**
+   * 数据库未知错误
+   */
+  DATABASE_ERROR = 522,
+  /**
+   * 系统警告消息
+   */
+  WARN = 601
 }

+ 13 - 13
src/enums/SettingTypeEnum.ts

@@ -1,16 +1,16 @@
 export enum SettingTypeEnum {
-	TITLE = 'title',
-	THEME = 'theme',
-	SIDE_THEME = 'sideTheme',
-	SHOW_SETTINGS = 'showSettings',
-	TOP_NAV = 'topNav',
-	TAGS_VIEW = 'tagsView',
-	FIXED_HEADER = 'fixedHeader',
-	SIDEBAR_LOGO = 'sidebarLogo',
-	DYNAMIC_TITLE = 'dynamicTitle',
-	ANIMATION_ENABLE = 'animationEnable',
-	LAYOUT = 'layout',
-	DARK = 'dark',
+  TITLE = 'title',
+  THEME = 'theme',
+  SIDE_THEME = 'sideTheme',
+  SHOW_SETTINGS = 'showSettings',
+  TOP_NAV = 'topNav',
+  TAGS_VIEW = 'tagsView',
+  FIXED_HEADER = 'fixedHeader',
+  SIDEBAR_LOGO = 'sidebarLogo',
+  DYNAMIC_TITLE = 'dynamicTitle',
+  ANIMATION_ENABLE = 'animationEnable',
+  LAYOUT = 'layout',
+  DARK = 'dark',
 
-	LAYOUT_SETTING = 'layout-setting'
+  LAYOUT_SETTING = 'layout-setting'
 }

+ 2 - 2
src/enums/layout/LayoutEnum.ts

@@ -1,4 +1,4 @@
 export enum ThemeEnum {
-	DARK = 'theme-dark',
-	LIGHT = 'theme-light'
+  DARK = 'theme-dark',
+  LIGHT = 'theme-light'
 }

+ 23 - 23
src/lang/en.ts

@@ -1,25 +1,25 @@
 export default {
-	// 路由国际化
-	route: {
-		dashboard: 'Dashboard',
-		document: 'Document'
-	},
-	// 登录页面国际化
-	login: {
-		title: 'vue3-element-admin',
-		username: 'Username',
-		password: 'Password',
-		login: 'Login',
-		code: 'Verification Code',
-		copyright: '',
-		icp: '',
-		thirdPartyLogin: 'third-party login'
-	},
-	// 导航栏国际化
-	navbar: {
-		dashboard: 'Dashboard',
-		logout: 'Logout',
-		document: 'Document',
-		gitee: 'Gitee'
-	}
+  // 路由国际化
+  route: {
+    dashboard: 'Dashboard',
+    document: 'Document'
+  },
+  // 登录页面国际化
+  login: {
+    title: 'vue3-element-admin',
+    username: 'Username',
+    password: 'Password',
+    login: 'Login',
+    code: 'Verification Code',
+    copyright: '',
+    icp: '',
+    thirdPartyLogin: 'third-party login'
+  },
+  // 导航栏国际化
+  navbar: {
+    dashboard: 'Dashboard',
+    logout: 'Logout',
+    document: 'Document',
+    gitee: 'Gitee'
+  }
 };

+ 23 - 23
src/lang/index.ts

@@ -6,12 +6,12 @@ import enLocale from './en';
 import zhCnLocale from './zh-cn';
 
 const messages = {
-	'zh-cn': {
-		...zhCnLocale
-	},
-	en: {
-		...enLocale
-	}
+  'zh-cn': {
+    ...zhCnLocale
+  },
+  en: {
+    ...enLocale
+  }
 };
 
 /**
@@ -20,26 +20,26 @@ const messages = {
  * @returns zh-cn|en ...
  */
 export const getLanguage = () => {
-	// 本地缓存获取
-	let language = localStorage.getItem('language');
-	if (language) {
-		return language;
-	}
-	// 浏览器使用语言
-	language = navigator.language.toLowerCase();
-	const locales = Object.keys(messages);
-	for (const locale of locales) {
-		if (language.indexOf(locale) > -1) {
-			return locale;
-		}
-	}
-	return 'zh-cn';
+  // 本地缓存获取
+  let language = localStorage.getItem('language');
+  if (language) {
+    return language;
+  }
+  // 浏览器使用语言
+  language = navigator.language.toLowerCase();
+  const locales = Object.keys(messages);
+  for (const locale of locales) {
+    if (language.indexOf(locale) > -1) {
+      return locale;
+    }
+  }
+  return 'zh-cn';
 };
 
 const i18n = createI18n({
-	legacy: false,
-	locale: getLanguage(),
-	messages: messages
+  legacy: false,
+  locale: getLanguage(),
+  messages: messages
 });
 
 export default i18n;

+ 22 - 22
src/lang/zh-cn.ts

@@ -1,24 +1,24 @@
 export default {
-	// 路由国际化
-	route: {
-		dashboard: '首页',
-		document: '项目文档'
-	},
-	// 登录页面国际化
-	login: {
-		title: 'vue3-element-admin',
-		username: '用户名',
-		password: '密码',
-		login: '登 录',
-		code: '请输入验证码',
-		copyright: '',
-		icp: '',
-		thirdPartyLogin: '第三方登录'
-	},
-	navbar: {
-		dashboard: '首页',
-		logout: '注销',
-		document: '项目文档',
-		gitee: '码云'
-	}
+  // 路由国际化
+  route: {
+    dashboard: '首页',
+    document: '项目文档'
+  },
+  // 登录页面国际化
+  login: {
+    title: 'vue3-element-admin',
+    username: '用户名',
+    password: '密码',
+    login: '登 录',
+    code: '请输入验证码',
+    copyright: '',
+    icp: '',
+    thirdPartyLogin: '第三方登录'
+  },
+  navbar: {
+    dashboard: '首页',
+    logout: '注销',
+    document: '项目文档',
+    gitee: '码云'
+  }
 };

+ 20 - 20
src/layout/components/AppMain.vue

@@ -1,6 +1,19 @@
+<template>
+  <section class="app-main">
+    <router-view v-slot="{ Component, route }">
+      <transition :enter-active-class="animante" mode="out-in">
+        <keep-alive :include="tagsViewStore.cachedViews">
+          <component v-if="!route.meta.link" :is="Component" :key="route.path" />
+        </keep-alive>
+      </transition>
+    </router-view>
+    <iframe-toggle />
+  </section>
+</template>
+
 <script lang="ts">
 export default {
-  name: 'AppMin'
+    name: 'AppMin'
 }
 </script>
 
@@ -16,28 +29,15 @@ const tagsViewStore = useTagsViewStore();
 const animante = ref<string>('');
 const animationEnable = ref(useSettingsStore().animationEnable);
 watch(()=> useSettingsStore().animationEnable, (val) => {
-  animationEnable.value = val;
-  if (val) {
-    animante.value = proxy?.animate.animateList[Math.round(Math.random() * proxy?.animate.animateList.length)] as string;
-  } else {
-    animante.value = proxy?.animate.defaultAnimate as string;
-  }
+    animationEnable.value = val;
+    if (val) {
+        animante.value = proxy?.animate.animateList[Math.round(Math.random() * proxy?.animate.animateList.length)] as string;
+    } else {
+        animante.value = proxy?.animate.defaultAnimate as string;
+    }
 }, { immediate: true });
 </script>
 
-<template>
-	<section class="app-main">
-		<router-view v-slot="{ Component, route }">
-			<transition :enter-active-class="animante" mode="out-in">
-				<keep-alive :include="tagsViewStore.cachedViews">
-					<component v-if="!route.meta.link" :is="Component" :key="route.path" />
-				</keep-alive>
-			</transition>
-		</router-view>
-		<iframe-toggle />
-	</section>
-</template>
-
 <style lang="scss" scoped>
 .app-main {
   /* 50= navbar  50  */

+ 9 - 9
src/layout/components/IframeToggle/index.vue

@@ -7,13 +7,13 @@ const tagsViewStore = useTagsViewStore()
 </script>
 
 <template>
-	<transition-group name="fade-transform" mode="out-in">
-		<inner-link
-			v-for="(item, index) in tagsViewStore.iframeViews"
-			:key="item.path"
-			:iframeId="'iframe' + index"
-			v-show="route.path === item.path"
-			:src="item.meta ? item.meta.link : ''"
-		></inner-link>
-	</transition-group>
+  <transition-group name="fade-transform" mode="out-in">
+    <inner-link
+      v-for="(item, index) in tagsViewStore.iframeViews"
+      :key="item.path"
+      :iframeId="'iframe' + index"
+      v-show="route.path === item.path"
+      :src="item.meta ? item.meta.link : ''"
+    ></inner-link>
+  </transition-group>
 </template>

+ 14 - 14
src/layout/components/InnerLink/index.vue

@@ -1,18 +1,18 @@
+<template>
+  <div :style="'height:' + height">
+    <iframe :id="iframeId" style="width: 100%; height: 100%" :src="src" frameborder="no"></iframe>
+  </div>
+</template>
+
 <script setup lang="ts">
 const props = defineProps({
-  src: {
-    type: String,
-    default: "/"
-  },
-  iframeId: {
-    type: String
-  }
+    src: {
+        type: String,
+        default: "/"
+    },
+    iframeId: {
+        type: String
+    }
 });
 const height = ref(document.documentElement.clientHeight - 94.5 + "px");
-</script>
-
-<template>
-	<div :style="'height:' + height">
-		<iframe :id="iframeId" style="width: 100%; height: 100%" :src="src" frameborder="no"></iframe>
-	</div>
-</template>
+</script>

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