From c1cdc3a9ed673d0fd84aa1eaa9fc72468bd5aaf9 Mon Sep 17 00:00:00 2001 From: Soybean <2570172956@qq.com> Date: Thu, 16 Sep 2021 08:25:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(components):=20=E6=B7=BB=E5=8A=A0=E9=9D=A2?= =?UTF-8?q?=E5=8C=85=E5=B1=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cz-config.js | 4 +- README.md | 1 + build/plugins/html.ts | 2 +- index.html | 20 +++- public/resource/loading.css | 90 ++++++++++++++++++ public/resource/logo.png | Bin 0 -> 11341 bytes src/interface/common.ts | 4 +- .../components/GlobalBreadcrumb.vue | 66 +++++++++++++ .../GlobalHeader/components/index.ts | 3 +- .../components/GlobalHeader/index.vue | 7 +- src/router/menus.ts | 2 +- src/router/routes.ts | 19 ++-- 12 files changed, 195 insertions(+), 23 deletions(-) create mode 100644 public/resource/loading.css create mode 100644 public/resource/logo.png create mode 100644 src/layouts/BasicLayout/components/GlobalHeader/components/GlobalBreadcrumb.vue diff --git a/.cz-config.js b/.cz-config.js index d51aaae8..42a3e376 100644 --- a/.cz-config.js +++ b/.cz-config.js @@ -2,7 +2,7 @@ module.exports = { // type 类型(定义之后,可通过上下键选择) types: [ { value: 'feat', name: 'feat: 新增功能' }, - { value: 'fix', name: 'fix: 修复 bug' }, + { value: 'fix', name: 'fix: 修复bug' }, { value: 'docs', name: 'docs: 文档变更' }, { value: 'style', name: 'style: 代码格式(不影响功能,例如空格、分号等格式修正)' }, { value: 'refactor', name: 'refactor: 代码重构(不包括 bug 修复、功能新增)' }, @@ -20,7 +20,7 @@ module.exports = { ['components', '组件相关'], ['hooks', 'hook 相关'], ['utils', 'utils 相关'], - ['element-ui', '对 element-ui 的调整'], + ['types', 'ts类型相关'], ['styles', '样式相关'], ['deps', '项目依赖'], ['auth', '对 auth 修改'], diff --git a/README.md b/README.md index 53577a38..ca5caee9 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ soybean-admin │ │ ├── dark-mode.ts //windicss暗黑模式插件 │ │ └── smooth-scroll.ts //滚动平滑插件 │ ├── router //vue路由 +│ │ ├── menus.ts //菜单 │ │ ├── permission.ts //路由守卫相关函数 │ │ └── routes.ts //声明的路由 │ ├── service //网络请求 diff --git a/build/plugins/html.ts b/build/plugins/html.ts index 05f9581b..b992212c 100644 --- a/build/plugins/html.ts +++ b/build/plugins/html.ts @@ -6,7 +6,7 @@ export default [ injectHtml({ injectData: { title: viteEnv.VITE_APP_TITLE, - appName: viteEnv.VITE_APP_TITLE_Label + appName: viteEnv.VITE_APP_TITLE_LABEL } }) ]; diff --git a/index.html b/index.html index 5a9c3245..1efb0097 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,25 @@ -
+
+ +
+ +
+
+ + + + +
+
+

<%= appName %>

+ +
+ +
diff --git a/public/resource/loading.css b/public/resource/loading.css new file mode 100644 index 00000000..b990f450 --- /dev/null +++ b/public/resource/loading.css @@ -0,0 +1,90 @@ +.app-loading { + position: fixed; + left: 0; + top: 0; + z-index: -1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} +.app-loading_logo { + width: 128px; + height: 128px; +} +.app-loading__dot-wrapper { + width: 56px; + height: 56px; + margin: 36px 0; +} +.app-loading__dot { + position: relative; + height: 100%; + transform: rotate(45deg); + animation-name: loadingRotate; + animation-duration: 1.2s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} +@keyframes loadingRotate { + to { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); + } +} +@-webkit-keyframes loadingRotate { + to { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); + } +} +.app-loading__dot > i { + position: absolute; + display: block; + width: 18px; + height: 18px; + background: #1890ff; + border-radius: 50%; + -webkit-transform: scale(0.75); + transform: scale(0.75); + transform-origin: 50% 50%; + opacity: 0.3; + animation: spinOpacity 1s infinite linear alternate; +} +@keyframes spinOpacity { + to { + opacity: 1; + } +} +@-webkit-keyframes spinOpacity { + to { + opacity: 1; + } +} +.delay-400 { + animation-delay: 0.4s !important; +} +.delay-800 { + animation-delay: 0.8s !important; +} +.delay-1200 { + animation-delay: 1.2s !important; +} +.left { + left: 0; +} +.right { + right: 0; +} +.top { + top: 0; +} +.bottom { + bottom: 0; +} +.app-loading_title { + font-size: 28px; + color: #646464; +} diff --git a/public/resource/logo.png b/public/resource/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6641c8273c22557208827ac4c1e8c60dd6314920 GIT binary patch literal 11341 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 literal 0 HcmV?d00001 diff --git a/src/interface/common.ts b/src/interface/common.ts index a0c63f86..7989e64c 100644 --- a/src/interface/common.ts +++ b/src/interface/common.ts @@ -9,8 +9,8 @@ interface RouteMeta { title?: string; /** 页面100%视高 */ fullPage?: boolean; - /** 作为菜单 */ - asMenu?: boolean; + /** 不作为菜单 */ + isNotMenu?: boolean; /** 菜单和面包屑对应的图标 */ icon?: Component; } diff --git a/src/layouts/BasicLayout/components/GlobalHeader/components/GlobalBreadcrumb.vue b/src/layouts/BasicLayout/components/GlobalHeader/components/GlobalBreadcrumb.vue new file mode 100644 index 00000000..203c81d6 --- /dev/null +++ b/src/layouts/BasicLayout/components/GlobalHeader/components/GlobalBreadcrumb.vue @@ -0,0 +1,66 @@ + + + + diff --git a/src/layouts/BasicLayout/components/GlobalHeader/components/index.ts b/src/layouts/BasicLayout/components/GlobalHeader/components/index.ts index 5937cc97..d86b6749 100644 --- a/src/layouts/BasicLayout/components/GlobalHeader/components/index.ts +++ b/src/layouts/BasicLayout/components/GlobalHeader/components/index.ts @@ -1,3 +1,4 @@ +import GlobalBreadcrumb from './GlobalBreadcrumb.vue'; import UserAvatar from './UserAvatar.vue'; import MenuCollapse from './MenuCollapse.vue'; import FullScreen from './FullScreen.vue'; @@ -5,4 +6,4 @@ import SettingDrawerButton from './SettingDrawerButton.vue'; import GihubSite from './GihubSite.vue'; import HeaderItem from './HeaderItem.vue'; -export { UserAvatar, MenuCollapse, FullScreen, SettingDrawerButton, GihubSite, HeaderItem }; +export { GlobalBreadcrumb, UserAvatar, MenuCollapse, FullScreen, SettingDrawerButton, GihubSite, HeaderItem }; diff --git a/src/layouts/BasicLayout/components/GlobalHeader/index.vue b/src/layouts/BasicLayout/components/GlobalHeader/index.vue index 964ff445..5a020afa 100644 --- a/src/layouts/BasicLayout/components/GlobalHeader/index.vue +++ b/src/layouts/BasicLayout/components/GlobalHeader/index.vue @@ -5,7 +5,10 @@ - +
+ + +
@@ -20,7 +23,7 @@ import { computed } from 'vue'; import { NLayoutHeader } from 'naive-ui'; import { useThemeStore } from '@/store'; -import { UserAvatar, MenuCollapse, FullScreen, GihubSite, SettingDrawerButton } from './components'; +import { GlobalBreadcrumb, UserAvatar, MenuCollapse, FullScreen, GihubSite, SettingDrawerButton } from './components'; import { GlobalLogo } from '../common'; defineProps({ diff --git a/src/router/menus.ts b/src/router/menus.ts index 0ff90f65..5057093f 100644 --- a/src/router/menus.ts +++ b/src/router/menus.ts @@ -31,7 +31,7 @@ export function transformRouteToMenu(routes: CustomRoute[]) { /** 判断路由是否作为菜单 */ function asMenu(route: CustomRoute) { - return Boolean(route.meta?.asMenu); + return !route.meta?.isNotMenu; } /** 给菜单添加可选属性 */ diff --git a/src/router/routes.ts b/src/router/routes.ts index 7732fbae..b0480320 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -91,7 +91,7 @@ export const customRoutes: CustomRoute[] = [ path: EnumRoutePath.root, redirect: { name: RouteNameMap.get('dashboard-analysis') }, meta: { - asMenu: false + isNotMenu: true } }, { @@ -101,7 +101,6 @@ export const customRoutes: CustomRoute[] = [ redirect: { name: RouteNameMap.get('dashboard-analysis') }, meta: { title: EnumRouteTitle.dashboard, - asMenu: true, icon: Dashboard }, children: [ @@ -110,8 +109,7 @@ export const customRoutes: CustomRoute[] = [ path: EnumRoutePath['dashboard-analysis'], component: () => import('@/views/dashboard/analysis/index.vue'), meta: { - title: EnumRouteTitle['dashboard-analysis'], - asMenu: true + title: EnumRouteTitle['dashboard-analysis'] } }, { @@ -119,8 +117,7 @@ export const customRoutes: CustomRoute[] = [ path: EnumRoutePath['dashboard-workbench'], component: () => import('@/views/dashboard/workbench/index.vue'), meta: { - title: EnumRouteTitle['dashboard-workbench'], - asMenu: true + title: EnumRouteTitle['dashboard-workbench'] } } ] @@ -131,7 +128,6 @@ export const customRoutes: CustomRoute[] = [ component: BasicLayout, meta: { title: EnumRouteTitle.exception, - asMenu: true, icon: ExceptionOutlined }, children: [ @@ -141,8 +137,7 @@ export const customRoutes: CustomRoute[] = [ component: () => import('@/views/system/exception/403.vue'), meta: { title: EnumRouteTitle['exception-403'], - fullPage: true, - asMenu: true + fullPage: true } }, { @@ -151,8 +146,7 @@ export const customRoutes: CustomRoute[] = [ component: () => import('@/views/system/exception/404.vue'), meta: { title: EnumRouteTitle['exception-404'], - fullPage: true, - asMenu: true + fullPage: true } }, { @@ -161,8 +155,7 @@ export const customRoutes: CustomRoute[] = [ component: () => import('@/views/system/exception/500.vue'), meta: { title: EnumRouteTitle['exception-500'], - fullPage: true, - asMenu: true + fullPage: true } } ]