From 251d2411f235e23209d57173857e05b637729ce8 Mon Sep 17 00:00:00 2001 From: LiuHao Date: Sun, 2 Apr 2023 01:01:56 +0800 Subject: [PATCH] refactor ts --- .env.development | 1 + .env.production | 4 +- .eslintignore | 17 + .eslintrc-auto-import.json | 281 +++++ .eslintrc.js | 41 + .prettierignore | 9 + .prettierrc.cjs | 46 + README.md | 72 +- Vite/plugins/auto-import.ts | 24 + Vite/plugins/components.ts | 17 + Vite/plugins/icons.ts | 8 + Vite/plugins/index.ts | 18 + Vite/plugins/svg-icon.ts | 9 + Vite/plugins/unocss.ts | 13 + commitlint.config.js | 22 + html/ie.html | 102 +- index.html | 380 +++--- package.json | 119 +- public/favicon.ico | Bin 5663 -> 8131 bytes src/App.vue | 4 +- src/animate.ts | 48 + src/api/demo/demo.js | 54 - src/api/demo/demo.ts | 55 + src/api/demo/tree.js | 44 - src/api/demo/tree.ts | 46 + src/api/demo/types.ts | 55 + src/api/login.js | 83 -- src/api/login.ts | 81 ++ src/api/menu.js | 9 - src/api/menu.ts | 11 + src/api/monitor/cache.js | 57 - src/api/monitor/cache/index.ts | 59 + src/api/monitor/cache/types.ts | 7 + src/api/monitor/loginInfo/index.ts | 36 + src/api/monitor/loginInfo/types.ts | 20 + src/api/monitor/logininfor.js | 34 - src/api/monitor/online.js | 18 - src/api/monitor/online/index.ts | 20 + src/api/monitor/online/types.ts | 15 + src/api/monitor/operlog.js | 26 - src/api/monitor/operlog/index.ts | 28 + src/api/monitor/operlog/types.ts | 52 + src/api/system/config.js | 72 -- src/api/system/config/index.ts | 74 ++ src/api/system/config/types.ts | 23 + src/api/system/dept.js | 52 - src/api/system/dept/index.ts | 62 + src/api/system/dept/types.ts | 45 + src/api/system/dict/data.js | 52 - src/api/system/dict/data/index.ts | 53 + src/api/system/dict/data/types.ts | 29 + src/api/system/dict/type.js | 60 - src/api/system/dict/type/index.ts | 62 + src/api/system/dict/type/types.ts | 21 + src/api/system/menu.js | 68 -- src/api/system/menu/index.ts | 70 ++ src/api/system/menu/types.ts | 69 ++ src/api/system/notice.js | 44 - src/api/system/notice/index.ts | 45 + src/api/system/notice/types.ts | 26 + src/api/system/oss.js | 27 - src/api/system/oss/index.ts | 28 + src/api/system/oss/types.ts | 22 + src/api/system/ossConfig.js | 58 - src/api/system/ossConfig/index.ts | 60 + src/api/system/ossConfig/types.ts | 38 + src/api/system/post.js | 44 - src/api/system/post/index.ts | 46 + src/api/system/post/types.ts | 23 + src/api/system/role.js | 119 -- src/api/system/role/index.ts | 144 +++ src/api/system/role/types.ts | 52 + src/api/system/tenant.js | 88 -- src/api/system/tenant/index.ts | 89 ++ src/api/system/tenant/types.ts | 46 + src/api/system/tenantPackage.js | 58 - src/api/system/tenantPackage/index.ts | 59 + src/api/system/tenantPackage/types.ts | 22 + src/api/system/user.js | 135 --- src/api/system/user/index.ts | 180 +++ src/api/system/user/types.ts | 84 ++ src/api/tool/gen.js | 85 -- src/api/tool/gen/index.ts | 87 ++ src/api/tool/gen/types.ts | 178 +++ src/api/types.ts | 54 + src/assets/images/login-background.jpg | Bin 521275 -> 577784 bytes src/assets/images/profile.jpg | Bin 81131 -> 275351 bytes src/assets/logo/logo.png | Bin 5663 -> 8131 bytes src/assets/styles/btn.scss | 124 +- src/assets/styles/element-ui.scss | 101 +- src/assets/styles/index.scss | 190 +-- src/assets/styles/mixin.scss | 92 +- src/assets/styles/ruoyi.scss | 91 +- src/assets/styles/sidebar.scss | 386 +++--- src/assets/styles/transition.scss | 26 +- src/assets/styles/variables.module.scss | 52 +- src/components/Breadcrumb/index.vue | 56 +- src/components/DictTag/index.vue | 65 +- src/components/Editor/index.vue | 104 +- src/components/FileUpload/index.vue | 155 +-- src/components/Hamburger/index.vue | 29 +- src/components/HeaderSearch/index.vue | 122 +- src/components/IconSelect/index.vue | 155 ++- src/components/IconSelect/requireIcons.js | 8 - src/components/IconSelect/requireIcons.ts | 7 + src/components/ImagePreview/index.vue | 31 +- src/components/ImageUpload/index.vue | 164 +-- src/components/Pagination/index.vue | 59 +- src/components/ParentView/index.vue | 4 +- src/components/RightToolbar/index.vue | 79 +- .../{RuoYi/Doc => RuoYiDoc}/index.vue | 8 +- .../{RuoYi/Git => RuoYiGit}/index.vue | 6 +- src/components/Screenfull/index.vue | 16 +- src/components/SizeSelect/index.vue | 49 +- src/components/SvgIcon/index.vue | 56 +- src/components/SvgIcon/svgicon.js | 10 - src/components/TopNav/index.vue | 101 +- src/components/TreeSelect/index.vue | 88 +- src/components/iFrame/index.vue | 18 +- src/directive/common/copyText.js | 66 - src/directive/common/copyText.ts | 66 + src/directive/index.js | 9 - src/directive/index.ts | 9 + src/directive/permission/hasPermi.js | 28 - src/directive/permission/hasRole.js | 28 - src/directive/permission/index.ts | 44 + src/enums/MenuTypeEnum.ts | 15 + src/enums/RespEnum.ts | 90 ++ src/enums/SettingTypeEnum.ts | 16 + src/enums/layout/LayoutEnum.ts | 4 + src/lang/en.ts | 25 + src/lang/index.ts | 45 + src/lang/zh-cn.ts | 24 + src/layout/components/AppMain.vue | 62 +- src/layout/components/IframeToggle/index.vue | 30 +- src/layout/components/InnerLink/index.vue | 20 +- src/layout/components/Navbar.vue | 228 ++-- src/layout/components/Settings/index.vue | 211 ++-- src/layout/components/Sidebar/Link.vue | 16 +- src/layout/components/Sidebar/Logo.vue | 44 +- src/layout/components/Sidebar/SidebarItem.vue | 81 +- src/layout/components/Sidebar/index.vue | 59 +- src/layout/components/TagsView/ScrollPane.vue | 43 +- src/layout/components/TagsView/index.vue | 236 ++-- src/layout/components/index.js | 4 - src/layout/components/index.ts | 4 + src/layout/index.vue | 51 +- src/main.js | 88 -- src/main.ts | 68 ++ src/permission.js | 63 - src/permission.ts | 61 + src/plugins/auth.js | 60 - src/plugins/auth.ts | 60 + src/plugins/cache.js | 77 -- src/plugins/cache.ts | 77 ++ src/plugins/download.js | 65 - src/plugins/download.ts | 60 + src/plugins/index.js | 18 - src/plugins/index.ts | 24 + src/plugins/modal.js | 82 -- src/plugins/modal.ts | 81 ++ src/plugins/svgicon.ts | 10 + src/plugins/tab.js | 65 - src/plugins/tab.ts | 65 + src/router/index.js | 175 --- src/router/index.ts | 179 +++ src/settings.js | 47 - src/settings.ts | 55 + src/store/index.js | 3 - src/store/index.ts | 3 + src/store/modules/app.js | 46 - src/store/modules/app.ts | 73 ++ src/store/modules/dict.js | 57 - src/store/modules/dict.ts | 78 ++ src/store/modules/permission.js | 138 --- src/store/modules/permission.ts | 144 +++ src/store/modules/settings.js | 38 - src/store/modules/settings.ts | 54 + src/store/modules/tagsView.js | 182 --- src/store/modules/tagsView.ts | 198 +++ src/store/modules/user.js | 73 -- src/store/modules/user.ts | 83 ++ src/types/auto-imports.d.ts | 574 +++++++++ src/types/axios.d.ts | 10 + src/types/components.d.ts | 82 ++ src/types/element.d.ts | 1 + src/types/env.d.ts | 74 ++ src/types/global.d.ts | 83 ++ src/types/module.d.ts | 28 + src/types/router.d.ts | 35 + src/types/setting.d.ts | 70 ++ src/utils/auth.js | 15 - src/utils/auth.ts | 9 + src/utils/dict.js | 24 - src/utils/dict.ts | 27 + src/utils/dynamicTitle.js | 15 - src/utils/dynamicTitle.ts | 14 + src/utils/errorCode.js | 6 - src/utils/errorCode.ts | 7 + src/utils/i18n.ts | 12 + src/utils/index.js | 390 ------ src/utils/index.ts | 318 +++++ src/utils/jsencrypt.js | 30 - src/utils/jsencrypt.ts | 29 + src/utils/permission.js | 51 - src/utils/permission.ts | 51 + src/utils/request.js | 148 --- src/utils/request.ts | 159 +++ src/utils/ruoyi.js | 246 ---- src/utils/ruoyi.ts | 247 ++++ src/utils/scroll-to.js | 58 - src/utils/scroll-to.ts | 65 + src/utils/theme.js | 49 - src/utils/theme.ts | 52 + src/utils/validate.js | 93 -- src/utils/validate.ts | 92 ++ src/views/demo/demo/index.vue | 648 +++++----- src/views/demo/tree/index.vue | 410 ++++--- src/views/error/401.vue | 53 +- src/views/error/404.vue | 46 +- src/views/index.vue | 227 ++-- src/views/login.vue | 265 ++-- src/views/monitor/admin/index.vue | 12 +- src/views/monitor/cache/index.vue | 301 +++-- src/views/monitor/logininfor/index.vue | 328 +++-- src/views/monitor/online/index.vue | 174 ++- src/views/monitor/operlog/index.vue | 492 ++++---- src/views/monitor/xxljob/index.vue | 12 +- src/views/redirect/index.vue | 4 +- src/views/register.vue | 234 ++-- src/views/system/config/index.vue | 447 ++++--- src/views/system/dept/index.vue | 494 ++++---- src/views/system/dict/data.vue | 564 ++++----- src/views/system/dict/index.vue | 455 ++++--- src/views/system/menu/index.vue | 824 +++++++------ src/views/system/notice/index.vue | 461 ++++--- src/views/system/oss/config.vue | 492 ++++---- src/views/system/oss/index.vue | 597 +++++---- src/views/system/post/index.vue | 445 ++++--- src/views/system/role/authUser.vue | 246 ++-- src/views/system/role/index.vue | 826 ++++++------- src/views/system/role/selectUser.vue | 203 ++-- src/views/system/tenant/index.vue | 576 ++++----- src/views/system/tenantPackage/index.vue | 453 ++++--- src/views/system/user/authRole.vue | 179 +-- src/views/system/user/index.vue | 1066 +++++++++-------- src/views/system/user/profile/index.vue | 160 +-- src/views/system/user/profile/resetPwd.vue | 71 +- src/views/system/user/profile/userAvatar.vue | 204 ++-- src/views/system/user/profile/userInfo.vue | 77 +- src/views/tool/build/index.vue | 4 +- src/views/tool/gen/basicInfoForm.vue | 76 +- src/views/tool/gen/editTable.vue | 327 +++-- src/views/tool/gen/genInfoForm.vue | 501 ++++---- src/views/tool/gen/importTable.vue | 146 ++- src/views/tool/gen/index.vue | 460 ++++--- tsconfig.json | 26 + vite.config.js | 57 - vite.config.ts | 112 ++ vite/plugins/auto-import.js | 12 - vite/plugins/compression.js | 28 - vite/plugins/index.js | 15 - vite/plugins/setup-extend.js | 5 - vite/plugins/svg-icon.js | 10 - 264 files changed, 15432 insertions(+), 13015 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc-auto-import.json create mode 100644 .eslintrc.js create mode 100644 .prettierignore create mode 100644 .prettierrc.cjs create mode 100644 Vite/plugins/auto-import.ts create mode 100644 Vite/plugins/components.ts create mode 100644 Vite/plugins/icons.ts create mode 100644 Vite/plugins/index.ts create mode 100644 Vite/plugins/svg-icon.ts create mode 100644 Vite/plugins/unocss.ts create mode 100644 commitlint.config.js create mode 100644 src/animate.ts delete mode 100644 src/api/demo/demo.js create mode 100644 src/api/demo/demo.ts delete mode 100644 src/api/demo/tree.js create mode 100644 src/api/demo/tree.ts create mode 100644 src/api/demo/types.ts delete mode 100644 src/api/login.js create mode 100644 src/api/login.ts delete mode 100644 src/api/menu.js create mode 100644 src/api/menu.ts delete mode 100644 src/api/monitor/cache.js create mode 100644 src/api/monitor/cache/index.ts create mode 100644 src/api/monitor/cache/types.ts create mode 100644 src/api/monitor/loginInfo/index.ts create mode 100644 src/api/monitor/loginInfo/types.ts delete mode 100644 src/api/monitor/logininfor.js delete mode 100644 src/api/monitor/online.js create mode 100644 src/api/monitor/online/index.ts create mode 100644 src/api/monitor/online/types.ts delete mode 100644 src/api/monitor/operlog.js create mode 100644 src/api/monitor/operlog/index.ts create mode 100644 src/api/monitor/operlog/types.ts delete mode 100644 src/api/system/config.js create mode 100644 src/api/system/config/index.ts create mode 100644 src/api/system/config/types.ts delete mode 100644 src/api/system/dept.js create mode 100644 src/api/system/dept/index.ts create mode 100644 src/api/system/dept/types.ts delete mode 100644 src/api/system/dict/data.js create mode 100644 src/api/system/dict/data/index.ts create mode 100644 src/api/system/dict/data/types.ts delete mode 100644 src/api/system/dict/type.js create mode 100644 src/api/system/dict/type/index.ts create mode 100644 src/api/system/dict/type/types.ts delete mode 100644 src/api/system/menu.js create mode 100644 src/api/system/menu/index.ts create mode 100644 src/api/system/menu/types.ts delete mode 100644 src/api/system/notice.js create mode 100644 src/api/system/notice/index.ts create mode 100644 src/api/system/notice/types.ts delete mode 100644 src/api/system/oss.js create mode 100644 src/api/system/oss/index.ts create mode 100644 src/api/system/oss/types.ts delete mode 100644 src/api/system/ossConfig.js create mode 100644 src/api/system/ossConfig/index.ts create mode 100644 src/api/system/ossConfig/types.ts delete mode 100644 src/api/system/post.js create mode 100644 src/api/system/post/index.ts create mode 100644 src/api/system/post/types.ts delete mode 100644 src/api/system/role.js create mode 100644 src/api/system/role/index.ts create mode 100644 src/api/system/role/types.ts delete mode 100644 src/api/system/tenant.js create mode 100644 src/api/system/tenant/index.ts create mode 100644 src/api/system/tenant/types.ts delete mode 100644 src/api/system/tenantPackage.js create mode 100644 src/api/system/tenantPackage/index.ts create mode 100644 src/api/system/tenantPackage/types.ts delete mode 100644 src/api/system/user.js create mode 100644 src/api/system/user/index.ts create mode 100644 src/api/system/user/types.ts delete mode 100644 src/api/tool/gen.js create mode 100644 src/api/tool/gen/index.ts create mode 100644 src/api/tool/gen/types.ts create mode 100644 src/api/types.ts delete mode 100644 src/components/IconSelect/requireIcons.js create mode 100644 src/components/IconSelect/requireIcons.ts rename src/components/{RuoYi/Doc => RuoYiDoc}/index.vue (64%) rename src/components/{RuoYi/Git => RuoYiGit}/index.vue (69%) delete mode 100644 src/components/SvgIcon/svgicon.js delete mode 100644 src/directive/common/copyText.js create mode 100644 src/directive/common/copyText.ts delete mode 100644 src/directive/index.js create mode 100644 src/directive/index.ts delete mode 100644 src/directive/permission/hasPermi.js delete mode 100644 src/directive/permission/hasRole.js create mode 100644 src/directive/permission/index.ts create mode 100644 src/enums/MenuTypeEnum.ts create mode 100644 src/enums/RespEnum.ts create mode 100644 src/enums/SettingTypeEnum.ts create mode 100644 src/enums/layout/LayoutEnum.ts create mode 100644 src/lang/en.ts create mode 100644 src/lang/index.ts create mode 100644 src/lang/zh-cn.ts delete mode 100644 src/layout/components/index.js create mode 100644 src/layout/components/index.ts delete mode 100644 src/main.js create mode 100644 src/main.ts delete mode 100644 src/permission.js create mode 100644 src/permission.ts delete mode 100644 src/plugins/auth.js create mode 100644 src/plugins/auth.ts delete mode 100644 src/plugins/cache.js create mode 100644 src/plugins/cache.ts delete mode 100644 src/plugins/download.js create mode 100644 src/plugins/download.ts delete mode 100644 src/plugins/index.js create mode 100644 src/plugins/index.ts delete mode 100644 src/plugins/modal.js create mode 100644 src/plugins/modal.ts create mode 100644 src/plugins/svgicon.ts delete mode 100644 src/plugins/tab.js create mode 100644 src/plugins/tab.ts delete mode 100644 src/router/index.js create mode 100644 src/router/index.ts delete mode 100644 src/settings.js create mode 100644 src/settings.ts delete mode 100644 src/store/index.js create mode 100644 src/store/index.ts delete mode 100644 src/store/modules/app.js create mode 100644 src/store/modules/app.ts delete mode 100644 src/store/modules/dict.js create mode 100644 src/store/modules/dict.ts delete mode 100644 src/store/modules/permission.js create mode 100644 src/store/modules/permission.ts delete mode 100644 src/store/modules/settings.js create mode 100644 src/store/modules/settings.ts delete mode 100644 src/store/modules/tagsView.js create mode 100644 src/store/modules/tagsView.ts delete mode 100644 src/store/modules/user.js create mode 100644 src/store/modules/user.ts create mode 100644 src/types/auto-imports.d.ts create mode 100644 src/types/axios.d.ts create mode 100644 src/types/components.d.ts create mode 100644 src/types/element.d.ts create mode 100644 src/types/env.d.ts create mode 100644 src/types/global.d.ts create mode 100644 src/types/module.d.ts create mode 100644 src/types/router.d.ts create mode 100644 src/types/setting.d.ts delete mode 100644 src/utils/auth.js create mode 100644 src/utils/auth.ts delete mode 100644 src/utils/dict.js create mode 100644 src/utils/dict.ts delete mode 100644 src/utils/dynamicTitle.js create mode 100644 src/utils/dynamicTitle.ts delete mode 100644 src/utils/errorCode.js create mode 100644 src/utils/errorCode.ts create mode 100644 src/utils/i18n.ts delete mode 100644 src/utils/index.js create mode 100644 src/utils/index.ts delete mode 100644 src/utils/jsencrypt.js create mode 100644 src/utils/jsencrypt.ts delete mode 100644 src/utils/permission.js create mode 100644 src/utils/permission.ts delete mode 100644 src/utils/request.js create mode 100644 src/utils/request.ts delete mode 100644 src/utils/ruoyi.js create mode 100644 src/utils/ruoyi.ts delete mode 100644 src/utils/scroll-to.js create mode 100644 src/utils/scroll-to.ts delete mode 100644 src/utils/theme.js create mode 100644 src/utils/theme.ts delete mode 100644 src/utils/validate.js create mode 100644 src/utils/validate.ts create mode 100644 tsconfig.json delete mode 100644 vite.config.js create mode 100644 vite.config.ts delete mode 100644 vite/plugins/auto-import.js delete mode 100644 vite/plugins/compression.js delete mode 100644 vite/plugins/index.js delete mode 100644 vite/plugins/setup-extend.js delete mode 100644 vite/plugins/svg-icon.js diff --git a/.env.development b/.env.development index 85af030..60496f4 100644 --- a/.env.development +++ b/.env.development @@ -15,3 +15,4 @@ VITE_APP_MONITRO_ADMIN = 'http://localhost:9090/admin/applications' # xxl-job 控制台地址 VITE_APP_XXL_JOB_ADMIN = 'http://localhost:9100/xxl-job-admin' +VITE_APP_PORT = 3000 diff --git a/.env.production b/.env.production index 7b3b042..acc3b1e 100644 --- a/.env.production +++ b/.env.production @@ -17,4 +17,6 @@ VITE_APP_XXL_JOB_ADMIN = '/xxl-job-admin' VITE_APP_BASE_API = '/prod-api' # 是否在打包时开启压缩,支持 gzip 和 brotli -VITE_BUILD_COMPRESS = gzip \ No newline at end of file +VITE_BUILD_COMPRESS = gzip + +VITE_APP_PORT = 3000 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..c4d771a --- /dev/null +++ b/.eslintignore @@ -0,0 +1,17 @@ +*.sh +node_modules +*.md +*.woff +*.ttf +.vscode +.idea +dist +/public +/docs +.husky +.local +/bin +.eslintrc.js +prettier.config.js +src/assets +tailwind.config.js \ No newline at end of file diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json new file mode 100644 index 0000000..d8190fd --- /dev/null +++ b/.eslintrc-auto-import.json @@ -0,0 +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 + } +} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..518d476 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +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' + } +}; diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..d251d2e --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +/dist/* +.local +.output.js +/node_modules/** + +**/*.svg +**/*.sh + +/public/* \ No newline at end of file diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..3df4406 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,46 @@ +/** + * 代码格式化配置 + */ +module.exports = { + // 一行最多多少个字符 + printWidth: 150, + // 指定每个缩进级别的空格数 + tabWidth: 2, + // 使用制表符而不是空格缩进行 + useTabs: true, + // 在语句末尾是否需要分号 + semi: true, + // 是否使用单引号 + singleQuote: true, + // 更改引用对象属性的时间 可选值"" + quoteProps: 'as-needed', + // 在JSX中使用单引号而不是双引号 + jsxSingleQuote: false, + // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"",默认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 结尾是 可选值"" + endOfLine: 'auto' +}; diff --git a/README.md b/README.md index 615a0a3..f1df2bc 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,62 @@ ## 平台简介 -* 本仓库为前端技术栈 [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) + [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 的业务差异 + +| 业务 | 功能说明 | 本框架 | 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) ## 前端运行 @@ -23,6 +76,7 @@ npm run dev ``` ## 后端改造 + 参考后端代码内 `ruoyi-gen/resources/vm/vue/v3/readme.txt` 说明 ## 内置功能 @@ -40,11 +94,11 @@ npm run dev 11. 登录日志:系统登录日志记录查询包含登录异常。 12. 在线用户:当前系统中活跃用户状态监控。 13. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 -14. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 -15. 系统接口:根据业务代码自动生成相关的api接口文档。 -16. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +14. 代码生成:前后端代码的生成(java、html、xml、sql)支持 CRUD 下载 。 +15. 系统接口:根据业务代码自动生成相关的 api 接口文档。 +16. 服务监控:监视当前系统 CPU、内存、磁盘、堆栈等相关信息。 17. 缓存监控:对系统的缓存信息查询,命令统计等。 -18. 在线构建器:拖动表单元素生成相应的HTML代码。 +18. 在线构建器:拖动表单元素生成相应的 HTML 代码。 ## 演示图 @@ -81,4 +135,4 @@ npm run dev - \ No newline at end of file + diff --git a/Vite/plugins/auto-import.ts b/Vite/plugins/auto-import.ts new file mode 100644 index 0000000..c7cee4b --- /dev/null +++ b/Vite/plugins/auto-import.ts @@ -0,0 +1,24 @@ +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') + }); +}; diff --git a/Vite/plugins/components.ts b/Vite/plugins/components.ts new file mode 100644 index 0000000..dbc5b19 --- /dev/null +++ b/Vite/plugins/components.ts @@ -0,0 +1,17 @@ +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') + }); +}; diff --git a/Vite/plugins/icons.ts b/Vite/plugins/icons.ts new file mode 100644 index 0000000..174572c --- /dev/null +++ b/Vite/plugins/icons.ts @@ -0,0 +1,8 @@ +import Icons from 'unplugin-icons/vite'; + +export default () => { + return Icons({ + // 自动安装图标库 + autoInstall: true + }); +}; diff --git a/Vite/plugins/index.ts b/Vite/plugins/index.ts new file mode 100644 index 0000000..001b56c --- /dev/null +++ b/Vite/plugins/index.ts @@ -0,0 +1,18 @@ +import vue from '@vitejs/plugin-vue'; +import createUnoCss from './unocss'; +import createAutoImport from './auto-import'; +import createComponents from './components'; +import createIcons from './icons'; +import createSvgIconsPlugin from './svg-icon'; +import path from 'path'; + +export default (viteEnv, isBuild = false): [] => { + const vitePlusgins: any = []; + vitePlusgins.push(vue()); + vitePlusgins.push(createUnoCss()); + vitePlusgins.push(createAutoImport(path)); + vitePlusgins.push(createComponents(path)); + vitePlusgins.push(createIcons()); + vitePlusgins.push(createSvgIconsPlugin(path)); + return vitePlusgins; +}; diff --git a/Vite/plugins/svg-icon.ts b/Vite/plugins/svg-icon.ts new file mode 100644 index 0000000..0d83ce0 --- /dev/null +++ b/Vite/plugins/svg-icon.ts @@ -0,0 +1,9 @@ +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'; +export default (path: any) => { + return createSvgIconsPlugin({ + // 指定需要缓存的图标文件夹 + iconDirs: [path.resolve(path.resolve(__dirname, '../../src'), 'assets/icons/svg')], + // 指定symbolId格式 + symbolId: 'icon-[dir]-[name]' + }); +}; diff --git a/Vite/plugins/unocss.ts b/Vite/plugins/unocss.ts new file mode 100644 index 0000000..e9e3254 --- /dev/null +++ b/Vite/plugins/unocss.ts @@ -0,0 +1,13 @@ +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' + } + }); +}; diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..21c37d7 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +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] + } +}; diff --git a/html/ie.html b/html/ie.html index 052ffcd..52fdef6 100644 --- a/html/ie.html +++ b/html/ie.html @@ -1,46 +1,60 @@ - - - - 请升级您的浏览器 - - - - - - -

请升级您的浏览器,以便我们更好的为您提供服务!

-

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

-
-

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

-

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

-
-

您可以选择更先进的浏览器

-

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

- -
- - \ No newline at end of file + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

+ 自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 + 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 + 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明 + 。 +

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + diff --git a/index.html b/index.html index 7e47963..e641b01 100644 --- a/index.html +++ b/index.html @@ -1,215 +1,217 @@ + + + + + + + RuoYi-Vue-Plus多租户管理系统 + + - + #loader-wrapper .load_title span { + font-weight: normal; + font-style: italic; + font-size: 13px; + color: #FFF; + opacity: 0.5; + } + + - -
-
-
-
-
-
正在加载系统资源,请耐心等待
-
-
- - - - \ No newline at end of file + +
+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + + diff --git a/package.json b/package.json index 65e9ef0..c71573e 100644 --- a/package.json +++ b/package.json @@ -1,43 +1,80 @@ { - "name": "ruoyi-vue-plus", - "version": "5.0.0-SNAPSHOT", - "description": "RuoYi-Vue-Plus多租户管理系统", - "author": "LionLi", - "license": "MIT", - "scripts": { - "dev": "vite", - "build:prod": "vite build", - "preview": "vite preview" - }, - "repository": { - "type": "git", - "url": "https://gitee.com/JavaLionLi/plus-ui.git" - }, - "dependencies": { - "@element-plus/icons-vue": "2.0.10", - "@vueup/vue-quill": "1.1.0", - "@vueuse/core": "9.5.0", - "axios": "0.27.2", - "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", - "pinia": "2.0.22", - "vue": "3.2.45", - "vue-cropper": "1.0.3", - "vue-router": "4.1.4" - }, - "devDependencies": { - "@vitejs/plugin-vue": "3.1.0", - "@vue/compiler-sfc": "3.2.45", - "sass": "1.56.1", - "unplugin-auto-import": "0.11.4", - "vite": "3.2.3", - "vite-plugin-compression": "0.5.1", - "vite-plugin-svg-icons": "2.0.1", - "vite-plugin-vue-setup-extend": "0.4.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" + } } diff --git a/public/favicon.ico b/public/favicon.ico index e26376026420542212ed58d90d0ed34f554fa4ae..3f919d85a5d1e093fd8d80ebcbe9987a3bdbb54f 100644 GIT binary patch literal 8131 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 - + - - \ No newline at end of file + diff --git a/src/components/DictTag/index.vue b/src/components/DictTag/index.vue index c03a1a6..7b7a657 100644 --- a/src/components/DictTag/index.vue +++ b/src/components/DictTag/index.vue @@ -1,31 +1,10 @@ - + + + \ No newline at end of file + diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue index bc8da7b..b7c18c3 100644 --- a/src/components/Editor/index.vue +++ b/src/components/Editor/index.vue @@ -1,36 +1,8 @@ - - - + + \ No newline at end of file + diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue index 5b06806..97c601e 100644 --- a/src/components/IconSelect/index.vue +++ b/src/components/IconSelect/index.vue @@ -1,74 +1,105 @@ - + - \ No newline at end of file + diff --git a/src/components/IconSelect/requireIcons.js b/src/components/IconSelect/requireIcons.js deleted file mode 100644 index ac22fd7..0000000 --- a/src/components/IconSelect/requireIcons.js +++ /dev/null @@ -1,8 +0,0 @@ -let icons = [] -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); -} - -export default icons \ No newline at end of file diff --git a/src/components/IconSelect/requireIcons.ts b/src/components/IconSelect/requireIcons.ts new file mode 100644 index 0000000..31ed49c --- /dev/null +++ b/src/components/IconSelect/requireIcons.ts @@ -0,0 +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); +} +export default icons; diff --git a/src/components/ImagePreview/index.vue b/src/components/ImagePreview/index.vue index 1dfe123..45f8326 100644 --- a/src/components/ImagePreview/index.vue +++ b/src/components/ImagePreview/index.vue @@ -1,21 +1,4 @@ - - - + + \ No newline at end of file + diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue index 38de953..40bc584 100644 --- a/src/components/Pagination/index.vue +++ b/src/components/Pagination/index.vue @@ -1,21 +1,12 @@ - + - - \ No newline at end of file + diff --git a/src/components/ParentView/index.vue b/src/components/ParentView/index.vue index 7bf6148..4437b0a 100644 --- a/src/components/ParentView/index.vue +++ b/src/components/ParentView/index.vue @@ -1,3 +1,3 @@ -