From 28efbdbc70733d22011a0eee084d35711429d188 Mon Sep 17 00:00:00 2001 From: Soybean Date: Thu, 20 Jan 2022 00:56:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(projects):=20=E8=BF=81=E7=A7=BB=E5=A4=9A?= =?UTF-8?q?=E9=A1=B5=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/api/route.ts | 22 +-- src/components/custom/BetterScroll/index.vue | 46 ++++++ src/components/custom/ButtonTab/index.vue | 71 ++++++++ .../ChromeTab/components/SvgRadiusBg.vue | 79 +++++++++ .../custom/ChromeTab/components/index.ts | 3 + src/components/custom/ChromeTab/index.vue | 66 ++++++++ src/components/custom/IconClose/index.vue | 35 ++++ src/components/custom/index.ts | 5 +- src/enum/common/storage.ts | 4 +- src/interface/expose.ts | 6 +- src/interface/system.ts | 4 + .../components/ReloadButton/index.vue | 23 +++ .../TabDetail/components/ContextMenu.vue | 135 ++++++++++++++++ .../components/TabDetail/components/index.ts | 3 + .../GlobalTab/components/TabDetail/index.vue | 102 ++++++++++++ .../common/GlobalTab/components/index.ts | 4 + src/layouts/common/GlobalTab/index.vue | 55 ++++++- src/store/modules/index.ts | 1 + src/store/modules/route/index.ts | 8 + src/store/modules/tab/helpers.ts | 33 ++++ src/store/modules/tab/index.ts | 153 ++++++++++++++++++ src/typings/api/route.d.ts | 2 +- src/utils/router/index.ts | 1 + src/utils/router/tab.ts | 23 +++ .../analysis/components/TopChart/index.vue | 2 +- vite.config.ts | 2 +- 26 files changed, 868 insertions(+), 20 deletions(-) create mode 100644 src/components/custom/BetterScroll/index.vue create mode 100644 src/components/custom/ButtonTab/index.vue create mode 100644 src/components/custom/ChromeTab/components/SvgRadiusBg.vue create mode 100644 src/components/custom/ChromeTab/components/index.ts create mode 100644 src/components/custom/ChromeTab/index.vue create mode 100644 src/components/custom/IconClose/index.vue create mode 100644 src/layouts/common/GlobalTab/components/ReloadButton/index.vue create mode 100644 src/layouts/common/GlobalTab/components/TabDetail/components/ContextMenu.vue create mode 100644 src/layouts/common/GlobalTab/components/TabDetail/components/index.ts create mode 100644 src/layouts/common/GlobalTab/components/TabDetail/index.vue create mode 100644 src/layouts/common/GlobalTab/components/index.ts create mode 100644 src/store/modules/tab/helpers.ts create mode 100644 src/store/modules/tab/index.ts create mode 100644 src/utils/router/tab.ts diff --git a/mock/api/route.ts b/mock/api/route.ts index 69e3e2b2..0287d90c 100644 --- a/mock/api/route.ts +++ b/mock/api/route.ts @@ -75,19 +75,19 @@ const routes: AuthRoute.Route[] = [ } ]; -const routeHome: AuthRoute.RoutePath = '/dashboard/analysis'; +function dataMiddleware(data: AuthRoute.Route[]): ApiRoute.Route { + const routeHomeName: AuthRoute.RouteKey = 'dashboard_analysis'; -function sortRoutes() { - routes.sort((next, pre) => Number(next.meta?.order) - Number(pre.meta?.order)); + function sortRoutes(sorts: AuthRoute.Route[]) { + return sorts.sort((next, pre) => Number(next.meta?.order) - Number(pre.meta?.order)); + } + + return { + routes: sortRoutes(data), + home: routeHomeName + }; } -sortRoutes(); - -const data: ApiRoute.Route = { - routes, - home: routeHome -}; - const apis: MockMethod[] = [ { url: '/mock/getUserRoutes', @@ -96,7 +96,7 @@ const apis: MockMethod[] = [ return { code: 200, message: 'ok', - data + data: dataMiddleware(routes) }; } } diff --git a/src/components/custom/BetterScroll/index.vue b/src/components/custom/BetterScroll/index.vue new file mode 100644 index 00000000..78ba6009 --- /dev/null +++ b/src/components/custom/BetterScroll/index.vue @@ -0,0 +1,46 @@ + + + + diff --git a/src/components/custom/ButtonTab/index.vue b/src/components/custom/ButtonTab/index.vue new file mode 100644 index 00000000..b06df72a --- /dev/null +++ b/src/components/custom/ButtonTab/index.vue @@ -0,0 +1,71 @@ + + + + diff --git a/src/components/custom/ChromeTab/components/SvgRadiusBg.vue b/src/components/custom/ChromeTab/components/SvgRadiusBg.vue new file mode 100644 index 00000000..66f8f986 --- /dev/null +++ b/src/components/custom/ChromeTab/components/SvgRadiusBg.vue @@ -0,0 +1,79 @@ + + + + diff --git a/src/components/custom/ChromeTab/components/index.ts b/src/components/custom/ChromeTab/components/index.ts new file mode 100644 index 00000000..57d745d0 --- /dev/null +++ b/src/components/custom/ChromeTab/components/index.ts @@ -0,0 +1,3 @@ +import SvgRadiusBg from './SvgRadiusBg.vue'; + +export { SvgRadiusBg }; diff --git a/src/components/custom/ChromeTab/index.vue b/src/components/custom/ChromeTab/index.vue new file mode 100644 index 00000000..6529eba1 --- /dev/null +++ b/src/components/custom/ChromeTab/index.vue @@ -0,0 +1,66 @@ + + + + diff --git a/src/components/custom/IconClose/index.vue b/src/components/custom/IconClose/index.vue new file mode 100644 index 00000000..1c3789aa --- /dev/null +++ b/src/components/custom/IconClose/index.vue @@ -0,0 +1,35 @@ + + + + diff --git a/src/components/custom/index.ts b/src/components/custom/index.ts index 4c51ea89..100794ed 100644 --- a/src/components/custom/index.ts +++ b/src/components/custom/index.ts @@ -1,4 +1,7 @@ +import BetterScroll from './BetterScroll/index.vue'; +import ButtonTab from './ButtonTab/index.vue'; +import ChromeTab from './ChromeTab/index.vue'; import CountTo from './CountTo/index.vue'; import ImageVerify from './ImageVerify/index.vue'; -export { CountTo, ImageVerify }; +export { BetterScroll, ButtonTab, ChromeTab, CountTo, ImageVerify }; diff --git a/src/enum/common/storage.ts b/src/enum/common/storage.ts index 8e5bfb28..319b49d3 100644 --- a/src/enum/common/storage.ts +++ b/src/enum/common/storage.ts @@ -6,5 +6,7 @@ export enum EnumStorageKey { /** 用户刷新token */ 'refresh-koken' = '__REFRESH_TOKEN__', /** 用户信息 */ - 'user-info' = '__USER_INFO__' + 'user-info' = '__USER_INFO__', + /** 多页签路由信息 */ + 'tab-routes' = '__TAB_ROUTES__' } diff --git a/src/interface/expose.ts b/src/interface/expose.ts index 0dcabf0e..bd40eee4 100644 --- a/src/interface/expose.ts +++ b/src/interface/expose.ts @@ -1,3 +1,5 @@ -export interface ExposeLayoutMixMenu { - resetFirstDegreeMenus(): void; +import BScroll from '@better-scroll/core'; + +export interface ExposeBetterScroll { + instance: BScroll; } diff --git a/src/interface/system.ts b/src/interface/system.ts index 550b37b4..438c047c 100644 --- a/src/interface/system.ts +++ b/src/interface/system.ts @@ -1,4 +1,5 @@ import type { VNodeChild } from 'vue'; +import type { RouteLocationNormalizedLoaded } from 'vue-router'; import type { DropdownOption } from 'naive-ui'; /** 菜单项配置 */ @@ -20,3 +21,6 @@ export type GlobalBreadcrumb = DropdownOption & { hasChildren: boolean; children?: GlobalBreadcrumb[]; }; + +/** 多页签Tab的路由 */ +export type GlobalTabRoute = Pick; diff --git a/src/layouts/common/GlobalTab/components/ReloadButton/index.vue b/src/layouts/common/GlobalTab/components/ReloadButton/index.vue new file mode 100644 index 00000000..545f6366 --- /dev/null +++ b/src/layouts/common/GlobalTab/components/ReloadButton/index.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/layouts/common/GlobalTab/components/TabDetail/components/ContextMenu.vue b/src/layouts/common/GlobalTab/components/TabDetail/components/ContextMenu.vue new file mode 100644 index 00000000..dba0c8c3 --- /dev/null +++ b/src/layouts/common/GlobalTab/components/TabDetail/components/ContextMenu.vue @@ -0,0 +1,135 @@ + + + + diff --git a/src/layouts/common/GlobalTab/components/TabDetail/components/index.ts b/src/layouts/common/GlobalTab/components/TabDetail/components/index.ts new file mode 100644 index 00000000..344a7087 --- /dev/null +++ b/src/layouts/common/GlobalTab/components/TabDetail/components/index.ts @@ -0,0 +1,3 @@ +import ContextMenu from './ContextMenu.vue'; + +export { ContextMenu }; diff --git a/src/layouts/common/GlobalTab/components/TabDetail/index.vue b/src/layouts/common/GlobalTab/components/TabDetail/index.vue new file mode 100644 index 00000000..676c2f0f --- /dev/null +++ b/src/layouts/common/GlobalTab/components/TabDetail/index.vue @@ -0,0 +1,102 @@ + + + + diff --git a/src/layouts/common/GlobalTab/components/index.ts b/src/layouts/common/GlobalTab/components/index.ts new file mode 100644 index 00000000..4ff4d516 --- /dev/null +++ b/src/layouts/common/GlobalTab/components/index.ts @@ -0,0 +1,4 @@ +import TabDetail from './TabDetail/index.vue'; +import ReloadButton from './ReloadButton/index.vue'; + +export { TabDetail, ReloadButton }; diff --git a/src/layouts/common/GlobalTab/index.vue b/src/layouts/common/GlobalTab/index.vue index 4b9a3ad1..2f7af9bd 100644 --- a/src/layouts/common/GlobalTab/index.vue +++ b/src/layouts/common/GlobalTab/index.vue @@ -1,9 +1,60 @@ + diff --git a/vite.config.ts b/vite.config.ts index a93afebb..573d01d6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -18,7 +18,7 @@ export default defineConfig(configEnv => { css: { preprocessorOptions: { scss: { - additionalData: `@use "./src/styles/scss/global.scss" as *;` + additionalData: `@use "${fileURLToPath(new URL('./src', import.meta.url))}/styles/scss/global.scss" as *;` } } },