Ver código fonte

feat: 项目初始化

wanggaokun 11 meses atrás
pai
commit
955fe8618a
100 arquivos alterados com 999 adições e 200 exclusões
  1. 1 1
      .env
  2. 10 4
      .env.development
  3. 10 1
      .env.production
  4. 305 0
      .eslintrc-auto-import.json
  5. 8 1
      .eslintrc.cjs
  6. 1 1
      README.md
  7. 13 46
      build/plugins.ts
  8. 0 1
      build/proxy.ts
  9. 1 1
      index.html
  10. 53 39
      package.json
  11. BIN
      public/eco-1.png
  12. BIN
      public/logo.png
  13. 0 1
      public/vue.svg
  14. 0 1
      src/App.vue
  15. 2 2
      src/api/index.ts
  16. 3 3
      src/api/interface/login.ts
  17. 176 0
      src/api/interface/monitor/logininfor.ts
  18. 266 0
      src/api/interface/monitor/operlog.ts
  19. 96 0
      src/api/interface/system/importExport.ts
  20. 10 46
      src/api/modules/monitor/logininfor.ts
  21. 12 39
      src/api/modules/monitor/operlog.ts
  22. 3 11
      src/api/modules/system/config.ts
  23. 19 0
      src/api/modules/system/importExport.ts
  24. 9 1
      src/api/modules/system/user.ts
  25. 1 1
      src/assets/fonts/font.scss
  26. 0 0
      src/assets/icons/svg/404.svg
  27. 0 0
      src/assets/icons/svg/avatar-user.svg
  28. 0 0
      src/assets/icons/svg/bug.svg
  29. 0 0
      src/assets/icons/svg/build.svg
  30. 0 0
      src/assets/icons/svg/button.svg
  31. 0 0
      src/assets/icons/svg/cascader.svg
  32. 0 0
      src/assets/icons/svg/chart.svg
  33. 0 0
      src/assets/icons/svg/checkbox.svg
  34. 0 0
      src/assets/icons/svg/clipboard.svg
  35. 0 0
      src/assets/icons/svg/code.svg
  36. 0 0
      src/assets/icons/svg/color.svg
  37. 0 0
      src/assets/icons/svg/component.svg
  38. 0 0
      src/assets/icons/svg/dashboard.svg
  39. 0 0
      src/assets/icons/svg/date-range.svg
  40. 0 0
      src/assets/icons/svg/date.svg
  41. 0 0
      src/assets/icons/svg/dict.svg
  42. 0 0
      src/assets/icons/svg/documentation.svg
  43. 0 0
      src/assets/icons/svg/download.svg
  44. 0 0
      src/assets/icons/svg/drag.svg
  45. 0 0
      src/assets/icons/svg/druid.svg
  46. 0 0
      src/assets/icons/svg/edit.svg
  47. 0 0
      src/assets/icons/svg/education.svg
  48. 0 0
      src/assets/icons/svg/email.svg
  49. 0 0
      src/assets/icons/svg/example.svg
  50. 0 0
      src/assets/icons/svg/excel.svg
  51. 0 0
      src/assets/icons/svg/exit-fullscreen.svg
  52. 0 0
      src/assets/icons/svg/eye-open.svg
  53. 0 0
      src/assets/icons/svg/eye.svg
  54. 0 0
      src/assets/icons/svg/form.svg
  55. 0 0
      src/assets/icons/svg/fullscreen.svg
  56. 0 0
      src/assets/icons/svg/github.svg
  57. 0 0
      src/assets/icons/svg/guide.svg
  58. 0 0
      src/assets/icons/svg/icon.svg
  59. 0 0
      src/assets/icons/svg/input.svg
  60. 0 0
      src/assets/icons/svg/international.svg
  61. 0 0
      src/assets/icons/svg/job.svg
  62. 0 0
      src/assets/icons/svg/language.svg
  63. 0 0
      src/assets/icons/svg/link.svg
  64. 0 0
      src/assets/icons/svg/list.svg
  65. 0 0
      src/assets/icons/svg/lock.svg
  66. 0 0
      src/assets/icons/svg/log.svg
  67. 0 0
      src/assets/icons/svg/logininfor.svg
  68. 0 0
      src/assets/icons/svg/message.svg
  69. 0 0
      src/assets/icons/svg/money.svg
  70. 0 0
      src/assets/icons/svg/monitor.svg
  71. 0 0
      src/assets/icons/svg/nested.svg
  72. 0 0
      src/assets/icons/svg/number.svg
  73. 0 0
      src/assets/icons/svg/online.svg
  74. 0 0
      src/assets/icons/svg/password.svg
  75. 0 0
      src/assets/icons/svg/pdf.svg
  76. 0 0
      src/assets/icons/svg/people.svg
  77. 0 0
      src/assets/icons/svg/peoples.svg
  78. 0 0
      src/assets/icons/svg/phone.svg
  79. 0 0
      src/assets/icons/svg/post.svg
  80. 0 0
      src/assets/icons/svg/qq.svg
  81. 0 0
      src/assets/icons/svg/question.svg
  82. 0 0
      src/assets/icons/svg/radio.svg
  83. 0 0
      src/assets/icons/svg/rate.svg
  84. 0 0
      src/assets/icons/svg/redis.svg
  85. 0 0
      src/assets/icons/svg/row.svg
  86. 0 0
      src/assets/icons/svg/search.svg
  87. 0 0
      src/assets/icons/svg/select.svg
  88. 0 0
      src/assets/icons/svg/server.svg
  89. 0 0
      src/assets/icons/svg/shopping.svg
  90. 0 0
      src/assets/icons/svg/size.svg
  91. 0 0
      src/assets/icons/svg/skill.svg
  92. 0 0
      src/assets/icons/svg/slider.svg
  93. 0 0
      src/assets/icons/svg/star.svg
  94. 0 0
      src/assets/icons/svg/swagger.svg
  95. 0 0
      src/assets/icons/svg/switch.svg
  96. 0 0
      src/assets/icons/svg/system.svg
  97. 0 0
      src/assets/icons/svg/tab.svg
  98. 0 0
      src/assets/icons/svg/table.svg
  99. 0 0
      src/assets/icons/svg/textarea.svg
  100. 0 0
      src/assets/icons/svg/theme.svg

+ 1 - 1
.env

@@ -1,5 +1,5 @@
 # title
-VITE_GLOB_APP_TITLE = als-Admin
+VITE_GLOB_APP_TITLE = eco
 
 # 本地运行端口号
 VITE_PORT = 8848

+ 10 - 4
.env.development

@@ -25,7 +25,13 @@ VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3C
 VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
 
 # 开发环境跨域代理,支持配置多个
-VITE_PROXY = [["/api","http://localhost:8849"]]
-# VITE_PROXY = [["/api","https://mock.mengxuegu.com/mock/629d727e6163854a32e8307e"]]
-# VITE_PROXY = [["/api","https://www.fastmock.site/mock/f81e8333c1a9276214bcdbc170d9e0a0"]]
-# VITE_PROXY = [["/api-easymock","https://mock.mengxuegu.com"],["/api-fastmock","https://www.fastmock.site"]]
+VITE_PROXY = [["/api","http://localhost:9090"]]
+
+# websocket 开关
+VITE_APP_WEBSOCKET = true
+
+# 监控地址
+VITE_APP_MONITOR_ADMIN = 'http://localhost:9099/admin/applications'
+
+# powerjob 控制台地址
+VITE_APP_POWERJOB_ADMIN = 'http://localhost:7700/'

+ 10 - 1
.env.production

@@ -33,4 +33,13 @@ VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
 VITE_API_URL = /api-pro
 
 # 开发环境跨域代理,支持配置多个
-VITE_PROXY = [["/api-pro","http://localhost:8849"]]
+VITE_PROXY = [["/api-pro","http://localhost:9090"]]
+
+# websocket 开关
+VITE_APP_WEBSOCKET = true
+
+# 监控地址
+VITE_APP_MONITOR_ADMIN = '/admin/applications'
+
+# powerjob 控制台地址
+VITE_APP_POWERJOB_ADMIN = '/powerjob'

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

@@ -0,0 +1,305 @@
+{
+  "globals": {
+    "Component": true,
+    "ComponentPublicInstance": true,
+    "ComputedRef": true,
+    "EffectScope": true,
+    "ExtractDefaultPropTypes": true,
+    "ExtractPropTypes": true,
+    "ExtractPublicPropTypes": true,
+    "InjectionKey": true,
+    "PropType": true,
+    "Ref": true,
+    "VNode": true,
+    "WritableComputedRef": true,
+    "acceptHMRUpdate": true,
+    "asyncComputed": true,
+    "autoResetRef": true,
+    "computed": true,
+    "computedAsync": true,
+    "computedEager": true,
+    "computedInject": true,
+    "computedWithControl": true,
+    "controlledComputed": true,
+    "controlledRef": true,
+    "createApp": true,
+    "createEventHook": true,
+    "createGlobalState": true,
+    "createInjectionState": true,
+    "createPinia": true,
+    "createReactiveFn": true,
+    "createReusableTemplate": true,
+    "createSharedComposable": true,
+    "createTemplatePromise": true,
+    "createUnrefFn": true,
+    "customRef": true,
+    "debouncedRef": true,
+    "debouncedWatch": true,
+    "defineAsyncComponent": true,
+    "defineComponent": true,
+    "defineStore": true,
+    "eagerComputed": true,
+    "effectScope": true,
+    "extendRef": true,
+    "getActivePinia": true,
+    "getCurrentInstance": true,
+    "getCurrentScope": true,
+    "h": true,
+    "ignorableWatch": true,
+    "inject": true,
+    "injectLocal": true,
+    "isDefined": true,
+    "isProxy": true,
+    "isReactive": true,
+    "isReadonly": true,
+    "isRef": true,
+    "makeDestructurable": true,
+    "mapActions": true,
+    "mapGetters": true,
+    "mapState": true,
+    "mapStores": true,
+    "mapWritableState": true,
+    "markRaw": true,
+    "nextTick": true,
+    "onActivated": true,
+    "onBeforeMount": true,
+    "onBeforeRouteLeave": true,
+    "onBeforeRouteUpdate": true,
+    "onBeforeUnmount": true,
+    "onBeforeUpdate": true,
+    "onClickOutside": true,
+    "onDeactivated": true,
+    "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,
+    "provideLocal": true,
+    "reactify": true,
+    "reactifyObject": true,
+    "reactive": true,
+    "reactiveComputed": true,
+    "reactiveOmit": true,
+    "reactivePick": true,
+    "readonly": true,
+    "ref": true,
+    "refAutoReset": true,
+    "refDebounced": true,
+    "refDefault": true,
+    "refThrottled": true,
+    "refWithControl": true,
+    "resolveComponent": true,
+    "resolveRef": true,
+    "resolveUnref": true,
+    "setActivePinia": true,
+    "setMapStoreSuffix": true,
+    "shallowReactive": true,
+    "shallowReadonly": true,
+    "shallowRef": true,
+    "storeToRefs": true,
+    "syncRef": true,
+    "syncRefs": true,
+    "templateRef": true,
+    "throttledRef": true,
+    "throttledWatch": true,
+    "toRaw": true,
+    "toReactive": true,
+    "toRef": true,
+    "toRefs": true,
+    "toValue": true,
+    "triggerRef": true,
+    "tryOnBeforeMount": true,
+    "tryOnBeforeUnmount": true,
+    "tryOnMounted": true,
+    "tryOnScopeDispose": true,
+    "tryOnUnmounted": true,
+    "unref": true,
+    "unrefElement": true,
+    "until": true,
+    "useActiveElement": true,
+    "useAnimate": true,
+    "useArrayDifference": true,
+    "useArrayEvery": true,
+    "useArrayFilter": true,
+    "useArrayFind": true,
+    "useArrayFindIndex": true,
+    "useArrayFindLast": true,
+    "useArrayIncludes": true,
+    "useArrayJoin": true,
+    "useArrayMap": true,
+    "useArrayReduce": true,
+    "useArraySome": true,
+    "useArrayUnique": true,
+    "useAsyncQueue": true,
+    "useAsyncState": true,
+    "useAttrs": true,
+    "useBase64": true,
+    "useBattery": true,
+    "useBluetooth": true,
+    "useBreakpoints": true,
+    "useBroadcastChannel": true,
+    "useBrowserLocation": true,
+    "useCached": true,
+    "useClipboard": true,
+    "useClipboardItems": true,
+    "useCloned": true,
+    "useColorMode": true,
+    "useConfirmDialog": true,
+    "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,
+    "useLink": 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,
+    "useParentElement": true,
+    "usePerformanceObserver": 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,
+    "useRoute": true,
+    "useRouter": 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,
+    "watchDeep": true,
+    "watchEffect": true,
+    "watchIgnorable": true,
+    "watchImmediate": true,
+    "watchOnce": true,
+    "watchPausable": true,
+    "watchPostEffect": true,
+    "watchSyncEffect": true,
+    "watchThrottled": true,
+    "watchTriggerable": true,
+    "watchWithFilter": true,
+    "whenever": true
+  }
+}

+ 8 - 1
.eslintrc.cjs

@@ -7,6 +7,7 @@ module.exports = {
     node: true,
     es6: true
   },
+  plugins: ['vue', '@typescript-eslint', 'import', 'promise', 'node', 'prettier'],
   // 指定如何解析语法
   parser: 'vue-eslint-parser',
   // 优先级低于 parse 的语法解析配置
@@ -20,7 +21,13 @@ module.exports = {
     }
   },
   // 继承某些已有的规则
-  extends: ['plugin:vue/vue3-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
+  extends: [
+    'plugin:vue/vue3-recommended',
+    'plugin:@typescript-eslint/recommended',
+    'plugin:prettier/recommended',
+    './.eslintrc-auto-import.json',
+    'prettier'
+  ],
   /**
    * "off" 或 0    ==>  关闭规则
    * "warn" 或 1   ==>  打开的规则作为警告(不影响代码执行)

+ 1 - 1
README.md

@@ -1,4 +1,4 @@
-# als-web
+# eco-web
 
 ```
 yarn install

+ 13 - 46
build/plugins.ts

@@ -1,21 +1,22 @@
-import { resolve } from 'path'
 import { PluginOption } from 'vite'
 import { VitePWA } from 'vite-plugin-pwa'
 import { visualizer } from 'rollup-plugin-visualizer'
-import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
 import vue from '@vitejs/plugin-vue'
 import vueJsx from '@vitejs/plugin-vue-jsx'
 import eslintPlugin from 'vite-plugin-eslint'
-import viteCompression from 'vite-plugin-compression'
 import simpleHtmlPlugin from 'vite-plugin-simple-html'
 import vueSetupExtend from 'unplugin-vue-setup-extend-plus/vite'
-import { prismjsPlugin } from 'vite-plugin-prismjs'
-
+import createAutoImport from '../vite/plugins/auto-import'
+import createComponents from '../vite/plugins/components'
+import prismjsPlugin from '../vite/plugins/prismjs-plugin'
+import createCompression from '../vite/plugins/compression'
+import createIcons from '../vite/plugins/icons'
+import createSvgIconsPlugin from '../vite/plugins/svg-icon'
 /**
  * 创建 vite 插件
  * @param viteEnv
  */
-export const createVitePlugins = (viteEnv: ViteEnv): (PluginOption | PluginOption[])[] => {
+export const createVitePlugins = (viteEnv: ViteEnv, isBuild = false): (PluginOption | PluginOption[])[] => {
   const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv
   return [
     vue(),
@@ -25,6 +26,11 @@ export const createVitePlugins = (viteEnv: ViteEnv): (PluginOption | PluginOptio
     eslintPlugin(),
     // name 可以写在 script 标签上
     vueSetupExtend({}),
+    // vue api
+    createAutoImport(),
+    createComponents(),
+    createIcons(),
+    createSvgIconsPlugin(isBuild),
     // 创建打包压缩配置
     createCompression(viteEnv),
     // 注入变量到 html 文件
@@ -34,18 +40,8 @@ export const createVitePlugins = (viteEnv: ViteEnv): (PluginOption | PluginOptio
         data: { title: VITE_GLOB_APP_TITLE }
       }
     }),
-    // 使用 svg 图标
-    createSvgIconsPlugin({
-      iconDirs: [resolve(process.cwd(), 'src/assets/icons')],
-      symbolId: 'icon-[dir]-[name]'
-    }),
     // 代码高亮
-    prismjsPlugin({
-      languages: ['json', 'js', 'xml', 'java', 'sql', 'ts'], //  languages: 'all',
-      plugins: ['line-numbers', 'copy-to-clipboard', 'inline-color'], //配置显示行号插件
-      theme: 'tomorrow', //主题名称
-      css: true
-    }),
+    prismjsPlugin(),
     // vitePWA
     VITE_PWA && createVitePwa(viteEnv),
     // 是否生成包预览,分析依赖包大小做优化处理
@@ -53,35 +49,6 @@ export const createVitePlugins = (viteEnv: ViteEnv): (PluginOption | PluginOptio
   ]
 }
 
-/**
- * @description 根据 compress 配置,生成不同的压缩规则
- * @param viteEnv
- */
-const createCompression = (viteEnv: ViteEnv): PluginOption | PluginOption[] => {
-  const { VITE_BUILD_COMPRESS = 'none', VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv
-  const compressList = VITE_BUILD_COMPRESS.split(',')
-  const plugins: PluginOption[] = []
-  if (compressList.includes('gzip')) {
-    plugins.push(
-      viteCompression({
-        ext: '.gz',
-        algorithm: 'gzip',
-        deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE
-      })
-    )
-  }
-  if (compressList.includes('brotli')) {
-    plugins.push(
-      viteCompression({
-        ext: '.br',
-        algorithm: 'brotliCompress',
-        deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE
-      })
-    )
-  }
-  return plugins
-}
-
 /**
  * @description VitePwa
  * @param viteEnv

+ 0 - 1
build/proxy.ts

@@ -16,7 +16,6 @@ export function createProxy(list: ProxyList = []) {
     const httpsRE = /^https:\/\//
     const isHttps = httpsRE.test(target)
     console.log('list', list)
-
     // https://github.com/http-party/node-http-proxy#options
     ret[prefix] = {
       target: target,

+ 1 - 1
index.html

@@ -2,7 +2,7 @@
 <html lang="en">
   <head>
     <meta charset="UTF-8" />
-    <link rel="icon" type="image/svg+xml" href="/vue.svg" />
+    <link rel="icon" type="image/svg+xml" href="/eco-1.png" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title><%= title %></title>
   </head>

+ 53 - 39
package.json

@@ -1,14 +1,22 @@
 {
-  "name": "als-admin",
+  "name": "eco",
   "private": true,
   "version": "1.2.0",
   "type": "module",
-  "description": "als-admin open source management system",
+  "description": "eco open source management system",
   "author": {
     "name": "gaokunw",
     "email": "wanggaokun@wo.cn"
   },
   "license": "MIT",
+  "homepage": "https://gitee.com/gaokunw/eco-web",
+  "repository": {
+    "type": "git",
+    "url": "git@gitee.com:gaokunw/eco-web.git"
+  },
+  "bugs": {
+    "url": "https://gitee.com/gaokunw/eco-web/issues"
+  },
   "scripts": {
     "dev": "vite",
     "serve": "vite",
@@ -29,16 +37,16 @@
     "@element-plus/icons-vue": "^2.3.1",
     "@types/file-saver": "^2.0.7",
     "@types/js-cookie": "^3.0.6",
-    "@vueuse/core": "^10.6.1",
+    "@vueuse/core": "^10.11.0",
     "@wangeditor/editor": "^5.1.23",
     "@wangeditor/editor-for-vue": "^5.1.12",
-    "axios": "^1.6.2",
+    "axios": "^1.7.2",
     "crypto-js": "^4.2.0",
-    "dayjs": "^1.11.10",
+    "dayjs": "^1.11.11",
     "driver.js": "^1.3.1",
-    "echarts": "^5.4.3",
+    "echarts": "^5.5.0",
     "echarts-liquidfill": "^3.1.0",
-    "element-plus": "^2.4.3",
+    "element-plus": "^2.7.6",
     "file-saver": "^2.0.5",
     "image-conversion": "^2.1.1",
     "js-cookie": "^3.0.5",
@@ -48,15 +56,15 @@
     "nanoid": "^5.0.4",
     "nprogress": "^0.2.0",
     "pinia": "^2.1.7",
-    "pinia-plugin-persistedstate": "^3.2.0",
+    "pinia-plugin-persistedstate": "^3.2.1",
     "prismjs": "^1.29.0",
-    "qs": "^6.11.2",
+    "qs": "^6.12.1",
     "screenfull": "^6.0.2",
     "sortablejs": "^1.15.1",
-    "vue": "^3.3.11",
+    "vue": "^3.4.30",
     "vue-cropper": "^1.1.2",
-    "vue-i18n": "^9.6.4",
-    "vue-router": "^4.2.5",
+    "vue-i18n": "^9.13.1",
+    "vue-router": "^4.4.0",
     "vue-types": "^5.1.1",
     "vuedraggable": "^4.1.0"
   },
@@ -66,44 +74,50 @@
     "@types/md5": "^2.3.5",
     "@types/nprogress": "^0.2.3",
     "@types/prismjs": "^1.26.3",
-    "@types/qs": "^6.9.10",
-    "@types/sortablejs": "^1.15.7",
-    "@typescript-eslint/eslint-plugin": "^6.14.0",
-    "@typescript-eslint/parser": "^6.14.0",
-    "@vitejs/plugin-vue": "^4.5.2",
+    "@types/qs": "^6.9.15",
+    "@types/sortablejs": "^1.15.8",
+    "@typescript-eslint/eslint-plugin": "^7.9.0",
+    "@typescript-eslint/parser": "^7.9.0",
+    "@vitejs/plugin-vue": "^5.0.4",
     "@vitejs/plugin-vue-jsx": "^3.1.0",
-    "autoprefixer": "^10.4.16",
-    "cz-git": "^1.7.1",
-    "czg": "^1.7.1",
-    "eslint": "^8.55.0",
+    "autoprefixer": "^10.4.19",
+    "cz-git": "1.9.2",
+    "czg": "^1.9.2",
+    "eslint": "^8.57.0",
     "eslint-config-prettier": "^9.1.0",
-    "eslint-plugin-prettier": "^5.0.1",
-    "eslint-plugin-vue": "^9.19.2",
-    "husky": "^8.0.3",
-    "lint-staged": "^15.1.0",
-    "postcss": "^8.4.32",
-    "postcss-html": "^1.5.0",
-    "prettier": "^3.1.0",
-    "rollup-plugin-visualizer": "^5.9.3",
-    "sass": "^1.69.5",
+    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-node": "^11.1.0",
+    "eslint-plugin-prettier": "^5.1.3",
+    "eslint-plugin-promise": "^6.2.0",
+    "eslint-plugin-vue": "^9.26.0",
+    "husky": "^9.0.11",
+    "lint-staged": "^15.2.5",
+    "postcss": "^8.4.38",
+    "postcss-html": "^1.7.0",
+    "prettier": "^3.2.5",
+    "rollup-plugin-visualizer": "^5.12.0",
+    "sass": "^1.77.3",
     "standard-version": "^9.5.0",
-    "stylelint": "^16.0.2",
+    "stylelint": "^16.6.1",
     "stylelint-config-html": "^1.1.0",
-    "stylelint-config-recess-order": "^4.4.0",
+    "stylelint-config-recess-order": "^5.0.1",
     "stylelint-config-recommended-scss": "^14.0.0",
     "stylelint-config-recommended-vue": "^1.5.0",
-    "stylelint-config-standard": "^35.0.0",
-    "stylelint-config-standard-scss": "^12.0.0",
-    "typescript": "4.9.5",
-    "unplugin-vue-setup-extend-plus": "^1.0.0",
-    "vite": "^5.0.8",
+    "stylelint-config-standard": "^36.0.0",
+    "stylelint-config-standard-scss": "^13.1.0",
+    "typescript": "^5.5.2",
+    "unplugin-auto-import": "^0.17.6",
+    "unplugin-icons": "^0.19.0",
+    "unplugin-vue-components": "^0.27.0",
+    "unplugin-vue-setup-extend-plus": "^1.0.1",
+    "vite": "^5.3.1",
     "vite-plugin-compression": "^0.5.1",
     "vite-plugin-eslint": "^1.8.1",
     "vite-plugin-prismjs": "^0.0.8",
-    "vite-plugin-pwa": "^0.17.2",
+    "vite-plugin-pwa": "^0.20.0",
     "vite-plugin-simple-html": "^0.1.0",
     "vite-plugin-svg-icons": "^2.0.1",
-    "vue-tsc": "^1.8.25"
+    "vue-tsc": "^2.0.22"
   },
   "engines": {
     "node": ">=16.0.0"

BIN
public/eco-1.png


BIN
public/logo.png


+ 0 - 1
public/vue.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

+ 0 - 1
src/App.vue

@@ -5,7 +5,6 @@
 </template>
 
 <script setup lang="ts">
-import { onMounted, reactive, computed } from 'vue'
 import { useI18n } from 'vue-i18n'
 import { getBrowserLang } from '@/utils'
 import { useTheme } from '@/hooks/useTheme'

+ 2 - 2
src/api/index.ts

@@ -35,11 +35,11 @@ export let isReLogin = { show: false }
 export const globalHeaders = () => {
   return {
     Authorization: 'Bearer ' + getToken(),
-    clientid: import.meta.env.VITE_APP_CLIENT_ID
+    clientId: import.meta.env.VITE_APP_CLIENT_ID
   }
 }
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
-axios.defaults.headers['clientid'] = import.meta.env.VITE_APP_CLIENT_ID
+axios.defaults.headers['clientId'] = import.meta.env.VITE_APP_CLIENT_ID
 const axiosCanceler = new AxiosCanceler()
 
 class RequestHttp {

+ 3 - 3
src/api/interface/login.ts

@@ -15,9 +15,9 @@ export type RegisterForm = {
  * 登录请求
  */
 export interface LoginData {
-  tenantId?: number
-  username?: string
-  password?: string
+  tenantId?: number | string
+  username: string
+  password: string
   rememberMe?: boolean
   socialCode?: string
   socialState?: string

+ 176 - 0
src/api/interface/monitor/logininfor.ts

@@ -0,0 +1,176 @@
+import { PageQuery, BaseEntity } from '@/api/interface/index'
+export interface LogininforVO extends BaseEntity {
+  /**
+   * 访问ID
+   */
+  infoId: string | number
+
+  /**
+   * 用户账号
+   */
+  userName: string
+
+  /**
+   * 客户端
+   */
+  clientKey: string
+
+  /**
+   * 设备类型
+   */
+  deviceType: string
+
+  /**
+   * 登录IP地址
+   */
+  ipaddr: string
+
+  /**
+   * 登录地点
+   */
+  loginLocation: string
+
+  /**
+   * 浏览器类型
+   */
+  browser: string
+
+  /**
+   * 操作系统
+   */
+  os: string
+
+  /**
+   * 登录状态(1成功 0失败)
+   */
+  status: string
+
+  /**
+   * 提示消息
+   */
+  msg: string
+
+  /**
+   * 访问时间
+   */
+  loginTime: string
+}
+
+export interface LogininforForm {
+  /**
+   * 访问ID
+   */
+  infoId?: string | number
+
+  /**
+   * 用户账号
+   */
+  userName?: string
+
+  /**
+   * 客户端
+   */
+  clientKey?: string
+
+  /**
+   * 设备类型
+   */
+  deviceType?: string
+
+  /**
+   * 登录IP地址
+   */
+  ipaddr?: string
+
+  /**
+   * 登录地点
+   */
+  loginLocation?: string
+
+  /**
+   * 浏览器类型
+   */
+  browser?: string
+
+  /**
+   * 操作系统
+   */
+  os?: string
+
+  /**
+   * 登录状态(1成功 0失败)
+   */
+  status?: string
+
+  /**
+   * 提示消息
+   */
+  msg?: string
+
+  /**
+   * 访问时间
+   */
+  loginTime?: string
+}
+
+export interface LogininforQuery extends PageQuery {
+  /**
+   * 访问ID
+   */
+  infoId?: string | number
+
+  /**
+   * 用户账号
+   */
+  userName?: string
+
+  /**
+   * 客户端
+   */
+  clientKey?: string
+
+  /**
+   * 设备类型
+   */
+  deviceType?: string
+
+  /**
+   * 登录IP地址
+   */
+  ipaddr?: string
+
+  /**
+   * 登录地点
+   */
+  loginLocation?: string
+
+  /**
+   * 浏览器类型
+   */
+  browser?: string
+
+  /**
+   * 操作系统
+   */
+  os?: string
+
+  /**
+   * 登录状态(1成功 0失败)
+   */
+  status?: string
+
+  /**
+   * 提示消息
+   */
+  msg?: string
+
+  /**
+   * 访问时间
+   */
+  loginTime?: string
+
+  /**
+   * 日期范围参数
+   */
+  params?: any
+}

+ 266 - 0
src/api/interface/monitor/operlog.ts

@@ -0,0 +1,266 @@
+import { PageQuery, BaseEntity } from '@/api/interface/index'
+export interface OperLogVO extends BaseEntity {
+  /**
+   * 日志主键
+   */
+  operId: string | number
+
+  /**
+   * 模块标题
+   */
+  title: string
+
+  /**
+   * 业务类型(0其它 1新增 2修改 3删除)
+   */
+  businessType: number
+
+  /**
+   * 方法名称
+   */
+  method: string
+
+  /**
+   * 请求方式
+   */
+  requestMethod: string
+
+  /**
+   * 操作类别(0其它 1后台用户 2手机端用户)
+   */
+  operatorType: number
+
+  /**
+   * 操作人员
+   */
+  operName: string
+
+  /**
+   * 部门名称
+   */
+  deptName: string
+
+  /**
+   * 请求URL
+   */
+  operUrl: string
+
+  /**
+   * 主机地址
+   */
+  operIp: string
+
+  /**
+   * 操作地点
+   */
+  operLocation: string
+
+  /**
+   * 请求参数
+   */
+  operParam: string
+
+  /**
+   * 返回参数
+   */
+  jsonResult: string
+
+  /**
+   * 操作状态(1正常 0异常)
+   */
+  status: number
+
+  /**
+   * 错误消息
+   */
+  errorMsg: string
+
+  /**
+   * 操作时间
+   */
+  operTime: string
+
+  /**
+   * 消耗时间
+   */
+  costTime: number
+}
+
+export interface OperLogForm {
+  /**
+   * 日志主键
+   */
+  operId?: string | number
+
+  /**
+   * 模块标题
+   */
+  title?: string
+
+  /**
+   * 业务类型(0其它 1新增 2修改 3删除)
+   */
+  businessType?: number
+
+  /**
+   * 方法名称
+   */
+  method?: string
+
+  /**
+   * 请求方式
+   */
+  requestMethod?: string
+
+  /**
+   * 操作类别(0其它 1后台用户 2手机端用户)
+   */
+  operatorType?: number
+
+  /**
+   * 操作人员
+   */
+  operName?: string
+
+  /**
+   * 部门名称
+   */
+  deptName?: string
+
+  /**
+   * 请求URL
+   */
+  operUrl?: string
+
+  /**
+   * 主机地址
+   */
+  operIp?: string
+
+  /**
+   * 操作地点
+   */
+  operLocation?: string
+
+  /**
+   * 请求参数
+   */
+  operParam?: string
+
+  /**
+   * 返回参数
+   */
+  jsonResult?: string
+
+  /**
+   * 操作状态(1正常 0异常)
+   */
+  status?: number
+
+  /**
+   * 错误消息
+   */
+  errorMsg?: string
+
+  /**
+   * 操作时间
+   */
+  operTime?: string
+
+  /**
+   * 消耗时间
+   */
+  costTime?: number
+}
+
+export interface OperLogQuery extends PageQuery {
+  /**
+   * 日志主键
+   */
+  operId?: string | number
+
+  /**
+   * 模块标题
+   */
+  title?: string
+
+  /**
+   * 业务类型(0其它 1新增 2修改 3删除)
+   */
+  businessType?: number
+
+  /**
+   * 方法名称
+   */
+  method?: string
+
+  /**
+   * 请求方式
+   */
+  requestMethod?: string
+
+  /**
+   * 操作类别(0其它 1后台用户 2手机端用户)
+   */
+  operatorType?: number
+
+  /**
+   * 操作人员
+   */
+  operName?: string
+
+  /**
+   * 部门名称
+   */
+  deptName?: string
+
+  /**
+   * 请求URL
+   */
+  operUrl?: string
+
+  /**
+   * 主机地址
+   */
+  operIp?: string
+
+  /**
+   * 操作地点
+   */
+  operLocation?: string
+
+  /**
+   * 请求参数
+   */
+  operParam?: string
+
+  /**
+   * 返回参数
+   */
+  jsonResult?: string
+
+  /**
+   * 操作状态(1正常 0异常)
+   */
+  status?: number
+
+  /**
+   * 错误消息
+   */
+  errorMsg?: string
+
+  /**
+   * 操作时间
+   */
+  operTime?: string
+
+  /**
+   * 消耗时间
+   */
+  costTime?: number
+
+  /**
+   * 日期范围参数
+   */
+  params?: any
+}

+ 96 - 0
src/api/interface/system/importExport.ts

@@ -0,0 +1,96 @@
+import { PageQuery, BaseEntity } from '@/api/interface/index'
+export interface ImportExportVO extends BaseEntity {
+  /**
+   * 唯一编码
+   */
+  id: string | number
+
+  /**
+   * 文件名称
+   */
+  name: string
+
+  /**
+   * 文件地址
+   */
+  url: string
+
+  /**
+   * 日志信息
+   */
+  logInfo: string
+
+  /**
+   * 状态(1正常  0异常)
+   */
+  status: string
+
+  /**
+   * 文件Id
+   */
+  ossId: number
+}
+
+export interface ImportExportForm {
+  /**
+   * 唯一编码
+   */
+  id?: string | number
+
+  /**
+   * 文件名称
+   */
+  name?: string
+
+  /**
+   * 文件地址
+   */
+  url?: string
+
+  /**
+   * 文件地址
+   */
+  ossId?: number
+
+  /**
+   * 日志信息
+   */
+  logInfo?: string
+
+  /**
+   * 状态(1正常  0异常)
+   */
+  status?: number
+
+  /**
+   * 乐观锁
+   */
+  version?: number
+}
+
+export interface ImportExportQuery extends PageQuery {
+  /**
+   * 文件名称
+   */
+  name?: string
+
+  /**
+   * 文件地址
+   */
+  url?: string
+
+  /**
+   * 日志信息
+   */
+  logInfo?: string
+
+  /**
+   * 状态(1正常  0异常)
+   */
+  status?: number
+
+  /**
+   * 日期范围参数
+   */
+  params?: any
+}

+ 10 - 46
src/api/modules/monitor/logininfor.ts

@@ -1,39 +1,12 @@
 import http from '@/api'
-
+import { LogininforVO, LogininforQuery } from '@/api/interface/monitor/logininfor'
 /**
  * @name 查询系统访问记录列表
  * @param query 参数
  * @returns 返回列表
  */
-export const listLogininforApi = (query: any) => {
-  return http.get<any>('/monitor/logininfor/list', query, { loading: true })
-}
-
-/**
- * @name 查询系统访问记录详细
- * @param infoId infoId
- * @returns returns
- */
-export const getLogininforApi = (infoId: any) => {
-  return http.get<any>(`/monitor/logininfor/${infoId}`)
-}
-
-/**
- * @name 新增系统访问记录
- * @param data data
- * @returns returns
- */
-export const addLogininforApi = (data: any) => {
-  return http.post<any>('/monitor/logininfor', data, { loading: false })
-}
-
-/**
- * @name 修改系统访问记录
- * @param data data
- * @returns returns
- */
-export const updateLogininforApi = (data: any) => {
-  return http.put<any>('/monitor/logininfor', data, { loading: false })
+export const listLogininforApi = (query: LogininforQuery) => {
+  return http.get<LogininforVO[]>('/monitor/logininfor/list', query, { loading: true })
 }
 
 /**
@@ -41,30 +14,21 @@ export const updateLogininforApi = (data: any) => {
  * @param infoId infoId
  * @returns returns
  */
-export const delLogininforApi = (infoId: any) => {
+export const delLogininforApi = (infoId: string | number | Array<string | number>) => {
   return http.delete<any>(`/monitor/logininfor/${infoId}`)
 }
 
 /**
- * @name 下载模板
- * @returns returns
- */
-export const importTemplateApi = () => {
-  return http.downloadPost('/monitor/logininfor/importTemplate', {})
-}
-
-/**
- * @name 导入数据
+ * @name 导出数据
  * @returns returns
  */
-export const importDataApi = (data: any) => {
-  return http.post('/monitor/logininfor/importData', data)
+export const exportLogininforApi = (data: any) => {
+  return http.downloadPost('/monitor/logininfor/export', data)
 }
 
 /**
- * @name 导出数据
- * @returns returns
+ * @name 清空日志
  */
-export const exportApi = (data: any) => {
-  return http.downloadPost('/monitor/logininfor/export', data)
+export const cleanLoginInfoApi = () => {
+  return http.delete<any>(`/monitor/logininfor/clean`)
 }

+ 12 - 39
src/api/modules/monitor/operlog.ts

@@ -1,12 +1,12 @@
 import http from '@/api'
-
+import { OperLogVO, OperLogQuery } from '@/api/interface/monitor/operlog'
 /**
  * @name 查询操作日志记录列表
  * @param query 参数
  * @returns 返回列表
  */
-export const listOperlogApi = (query: any) => {
-  return http.get<any>('/monitor/operlog/list', query, { loading: true })
+export const listOperLogApi = (query: OperLogQuery) => {
+  return http.get<OperLogVO[]>('/monitor/operlog/list', query, { loading: true })
 }
 
 /**
@@ -14,26 +14,8 @@ export const listOperlogApi = (query: any) => {
  * @param operId operId
  * @returns returns
  */
-export const getOperlogApi = (operId: any) => {
-  return http.get<any>(`/monitor/operlog/${operId}`)
-}
-
-/**
- * @name 新增操作日志记录
- * @param data data
- * @returns returns
- */
-export const addOperlogApi = (data: any) => {
-  return http.post<any>('/monitor/operlog', data, { loading: false })
-}
-
-/**
- * @name 修改操作日志记录
- * @param data data
- * @returns returns
- */
-export const updateOperlogApi = (data: any) => {
-  return http.put<any>('/monitor/operlog', data, { loading: false })
+export const getOperLogApi = (operId: string | number) => {
+  return http.get<OperLogVO>(`/monitor/operlog/${operId}`)
 }
 
 /**
@@ -41,30 +23,21 @@ export const updateOperlogApi = (data: any) => {
  * @param operId operId
  * @returns returns
  */
-export const delOperlogApi = (operId: any) => {
+export const delOperLogApi = (operId: string | number | Array<string | number>) => {
   return http.delete<any>(`/monitor/operlog/${operId}`)
 }
 
 /**
- * @name 下载模板
- * @returns returns
- */
-export const importTemplateApi = () => {
-  return http.downloadPost('/monitor/operlog/importTemplate', {})
-}
-
-/**
- * @name 导入数据
+ * @name 导出数据
  * @returns returns
  */
-export const importDataApi = (data: any) => {
-  return http.post('/monitor/operlog/importData', data)
+export const exportOperLogApi = (data: any) => {
+  return http.downloadPost('/monitor/operlog/export', data)
 }
 
 /**
- * @name 导出数据
- * @returns returns
+ * @name 清空操作日志
  */
-export const exportApi = (data: any) => {
-  return http.downloadPost('/monitor/operlog/export', data)
+export const cleanOperlogApi = () => {
+  return http.delete<any>(`/monitor/operlog/clean`)
 }

+ 3 - 11
src/api/modules/system/config.ts

@@ -62,19 +62,11 @@ export const delConfigApi = (configId: any) => {
 }
 
 /**
- * @name 下载模板
+ * @name 刷新参数缓存
  * @returns returns
  */
-export const importTemplateApi = () => {
-  return http.downloadPost('/system/config/importTemplate', {})
-}
-
-/**
- * @name 导入数据
- * @returns returns
- */
-export const importConfigDataApi = (data: any) => {
-  return http.post('/system/config/importData', data)
+export const refreshCacheApi = () => {
+  return http.delete<any>(`/system/config/refreshCache`)
 }
 
 /**

+ 19 - 0
src/api/modules/system/importExport.ts

@@ -0,0 +1,19 @@
+import http from '@/api'
+import { ImportExportVO, ImportExportQuery } from '@/api/interface/system/importExport'
+/**
+ * @name 查询导入导出日志列表
+ * @param query 参数
+ * @returns 返回列表
+ */
+export const listImportExportApi = (query: ImportExportQuery) => {
+  return http.get<ImportExportVO[]>('/system/importExport/list', query, { loading: true })
+}
+
+/**
+ * @name 查询导入导出日志详细
+ * @param id id
+ * @returns returns
+ */
+export const getImportExportApi = (id: string | number) => {
+  return http.get<ImportExportVO>(`/system/importExport/${id}`)
+}

+ 9 - 1
src/api/modules/system/user.ts

@@ -87,12 +87,20 @@ export const importDataApi = (params: FormData) => {
   return http.post('/system/user/importData', params)
 }
 
+/**
+ * @name 导出下载数据
+ * @returns returns
+ */
+export const exportDownApi = (data: any) => {
+  return http.downloadPost('/system/user/export', data, { loading: false })
+}
+
 /**
  * @name 导出数据
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.downloadPost('/system/user/export', data)
+  return http.post('/system/user/export', data)
 }
 
 /**

+ 1 - 1
src/assets/fonts/font.scss

@@ -10,5 +10,5 @@
 
 @font-face {
   font-family: DIN;
-  src: url('./DIN.Otf');
+  src: url('./DIN.otf');
 }

+ 0 - 0
src/assets/icons/404.svg → src/assets/icons/svg/404.svg


+ 0 - 0
src/assets/icons/avatar-user.svg → src/assets/icons/svg/avatar-user.svg


+ 0 - 0
src/assets/icons/bug.svg → src/assets/icons/svg/bug.svg


+ 0 - 0
src/assets/icons/build.svg → src/assets/icons/svg/build.svg


+ 0 - 0
src/assets/icons/button.svg → src/assets/icons/svg/button.svg


+ 0 - 0
src/assets/icons/cascader.svg → src/assets/icons/svg/cascader.svg


+ 0 - 0
src/assets/icons/chart.svg → src/assets/icons/svg/chart.svg


+ 0 - 0
src/assets/icons/checkbox.svg → src/assets/icons/svg/checkbox.svg


+ 0 - 0
src/assets/icons/clipboard.svg → src/assets/icons/svg/clipboard.svg


+ 0 - 0
src/assets/icons/code.svg → src/assets/icons/svg/code.svg


+ 0 - 0
src/assets/icons/color.svg → src/assets/icons/svg/color.svg


+ 0 - 0
src/assets/icons/component.svg → src/assets/icons/svg/component.svg


+ 0 - 0
src/assets/icons/dashboard.svg → src/assets/icons/svg/dashboard.svg


+ 0 - 0
src/assets/icons/date-range.svg → src/assets/icons/svg/date-range.svg


+ 0 - 0
src/assets/icons/date.svg → src/assets/icons/svg/date.svg


+ 0 - 0
src/assets/icons/dict.svg → src/assets/icons/svg/dict.svg


+ 0 - 0
src/assets/icons/documentation.svg → src/assets/icons/svg/documentation.svg


+ 0 - 0
src/assets/icons/download.svg → src/assets/icons/svg/download.svg


+ 0 - 0
src/assets/icons/drag.svg → src/assets/icons/svg/drag.svg


+ 0 - 0
src/assets/icons/druid.svg → src/assets/icons/svg/druid.svg


+ 0 - 0
src/assets/icons/edit.svg → src/assets/icons/svg/edit.svg


+ 0 - 0
src/assets/icons/education.svg → src/assets/icons/svg/education.svg


+ 0 - 0
src/assets/icons/email.svg → src/assets/icons/svg/email.svg


+ 0 - 0
src/assets/icons/example.svg → src/assets/icons/svg/example.svg


+ 0 - 0
src/assets/icons/excel.svg → src/assets/icons/svg/excel.svg


+ 0 - 0
src/assets/icons/exit-fullscreen.svg → src/assets/icons/svg/exit-fullscreen.svg


+ 0 - 0
src/assets/icons/eye-open.svg → src/assets/icons/svg/eye-open.svg


+ 0 - 0
src/assets/icons/eye.svg → src/assets/icons/svg/eye.svg


+ 0 - 0
src/assets/icons/form.svg → src/assets/icons/svg/form.svg


+ 0 - 0
src/assets/icons/fullscreen.svg → src/assets/icons/svg/fullscreen.svg


+ 0 - 0
src/assets/icons/github.svg → src/assets/icons/svg/github.svg


+ 0 - 0
src/assets/icons/guide.svg → src/assets/icons/svg/guide.svg


+ 0 - 0
src/assets/icons/icon.svg → src/assets/icons/svg/icon.svg


+ 0 - 0
src/assets/icons/input.svg → src/assets/icons/svg/input.svg


+ 0 - 0
src/assets/icons/international.svg → src/assets/icons/svg/international.svg


+ 0 - 0
src/assets/icons/job.svg → src/assets/icons/svg/job.svg


+ 0 - 0
src/assets/icons/language.svg → src/assets/icons/svg/language.svg


+ 0 - 0
src/assets/icons/link.svg → src/assets/icons/svg/link.svg


+ 0 - 0
src/assets/icons/list.svg → src/assets/icons/svg/list.svg


+ 0 - 0
src/assets/icons/lock.svg → src/assets/icons/svg/lock.svg


+ 0 - 0
src/assets/icons/log.svg → src/assets/icons/svg/log.svg


+ 0 - 0
src/assets/icons/logininfor.svg → src/assets/icons/svg/logininfor.svg


+ 0 - 0
src/assets/icons/message.svg → src/assets/icons/svg/message.svg


+ 0 - 0
src/assets/icons/money.svg → src/assets/icons/svg/money.svg


+ 0 - 0
src/assets/icons/monitor.svg → src/assets/icons/svg/monitor.svg


+ 0 - 0
src/assets/icons/nested.svg → src/assets/icons/svg/nested.svg


+ 0 - 0
src/assets/icons/number.svg → src/assets/icons/svg/number.svg


+ 0 - 0
src/assets/icons/online.svg → src/assets/icons/svg/online.svg


+ 0 - 0
src/assets/icons/password.svg → src/assets/icons/svg/password.svg


+ 0 - 0
src/assets/icons/pdf.svg → src/assets/icons/svg/pdf.svg


+ 0 - 0
src/assets/icons/people.svg → src/assets/icons/svg/people.svg


+ 0 - 0
src/assets/icons/peoples.svg → src/assets/icons/svg/peoples.svg


+ 0 - 0
src/assets/icons/phone.svg → src/assets/icons/svg/phone.svg


+ 0 - 0
src/assets/icons/post.svg → src/assets/icons/svg/post.svg


+ 0 - 0
src/assets/icons/qq.svg → src/assets/icons/svg/qq.svg


+ 0 - 0
src/assets/icons/question.svg → src/assets/icons/svg/question.svg


+ 0 - 0
src/assets/icons/radio.svg → src/assets/icons/svg/radio.svg


+ 0 - 0
src/assets/icons/rate.svg → src/assets/icons/svg/rate.svg


+ 0 - 0
src/assets/icons/redis.svg → src/assets/icons/svg/redis.svg


+ 0 - 0
src/assets/icons/row.svg → src/assets/icons/svg/row.svg


+ 0 - 0
src/assets/icons/search.svg → src/assets/icons/svg/search.svg


+ 0 - 0
src/assets/icons/select.svg → src/assets/icons/svg/select.svg


+ 0 - 0
src/assets/icons/server.svg → src/assets/icons/svg/server.svg


+ 0 - 0
src/assets/icons/shopping.svg → src/assets/icons/svg/shopping.svg


+ 0 - 0
src/assets/icons/size.svg → src/assets/icons/svg/size.svg


+ 0 - 0
src/assets/icons/skill.svg → src/assets/icons/svg/skill.svg


+ 0 - 0
src/assets/icons/slider.svg → src/assets/icons/svg/slider.svg


+ 0 - 0
src/assets/icons/star.svg → src/assets/icons/svg/star.svg


+ 0 - 0
src/assets/icons/swagger.svg → src/assets/icons/svg/swagger.svg


+ 0 - 0
src/assets/icons/switch.svg → src/assets/icons/svg/switch.svg


+ 0 - 0
src/assets/icons/system.svg → src/assets/icons/svg/system.svg


+ 0 - 0
src/assets/icons/tab.svg → src/assets/icons/svg/tab.svg


+ 0 - 0
src/assets/icons/table.svg → src/assets/icons/svg/table.svg


+ 0 - 0
src/assets/icons/textarea.svg → src/assets/icons/svg/textarea.svg


+ 0 - 0
src/assets/icons/theme.svg → src/assets/icons/svg/theme.svg


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff