From 8191490f39fc011096edd77c3156eb4fe33d4e1c Mon Sep 17 00:00:00 2001 From: Soybean Date: Sat, 12 Mar 2022 17:45:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(projects):=20=E9=87=8D=E6=9E=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=9A=84TS=E7=B1=BB=E5=9E=8B=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E5=8E=BB=E9=99=A4interface=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 7 + src/composables/common/layout.ts | 3 +- src/composables/common/router.ts | 7 +- src/enum/{common/system.ts => business.ts} | 6 - src/enum/business/index.ts | 1 - src/enum/common.ts | 35 +++ src/enum/common/index.ts | 5 - src/enum/common/service.ts | 6 - src/enum/common/storage.ts | 12 - src/enum/common/typeof.ts | 14 - src/enum/index.ts | 2 + src/enum/{common/theme.ts => system.ts} | 6 + src/interface/enum.ts | 26 -- src/interface/expose.ts | 5 - src/interface/index.ts | 5 - src/interface/layout.ts | 9 - src/interface/system.ts | 35 --- src/interface/theme.ts | 150 ---------- .../components/GlobalBreadcrumb.vue | 1 - .../GlobalHeader/components/HeaderMenu.vue | 1 - src/layouts/common/GlobalHeader/index.vue | 1 - .../GlobalSearch/components/SearchModal.vue | 3 +- .../GlobalSearch/components/SearchResult.vue | 5 +- .../components/MixMenuDrawer.vue | 1 - .../components/VerticalMixSider/index.vue | 1 - .../VerticalSider/components/VerticalMenu.vue | 1 - src/layouts/common/GlobalTab/index.vue | 3 +- .../LayoutMode/components/LayoutCheckbox.vue | 5 +- src/router/routes/index.ts | 3 +- src/settings/theme.ts | 5 +- src/store/modules/route/index.ts | 3 +- src/store/modules/tab/helpers.ts | 1 - src/store/modules/tab/index.ts | 1 - src/store/modules/theme/index.ts | 17 +- src/typings/api.d.ts | 23 ++ src/typings/api/auth.d.ts | 10 - src/typings/api/route.d.ts | 10 - .../{business/auth.d.ts => business.d.ts} | 0 src/typings/common/common.d.ts | 8 - src/typings/common/global.d.ts | 2 - src/typings/common/router.d.ts | 7 - src/typings/common/service.d.ts | 66 ----- src/typings/common/window.d.ts | 15 - src/typings/{common => }/env.d.ts | 0 src/typings/expose.d.ts | 6 + src/typings/global.d.ts | 18 ++ src/typings/{common/map.d.ts => package.d.ts} | 0 src/typings/{common => }/route.d.ts | 0 src/typings/router.d.ts | 5 + src/typings/system.d.ts | 271 ++++++++++++++++++ src/utils/router/breadcrumb.ts | 2 - src/utils/router/component.ts | 5 +- src/utils/router/menu.ts | 1 - src/utils/router/regexp.ts | 4 +- src/utils/router/tab.ts | 1 - src/utils/service/transform.ts | 6 +- src/views/plugin/icon/icons.ts | 10 - src/views/system-view/login/index.vue | 5 +- 58 files changed, 400 insertions(+), 461 deletions(-) rename src/enum/{common/system.ts => business.ts} (64%) delete mode 100644 src/enum/business/index.ts create mode 100644 src/enum/common.ts delete mode 100644 src/enum/common/index.ts delete mode 100644 src/enum/common/service.ts delete mode 100644 src/enum/common/storage.ts delete mode 100644 src/enum/common/typeof.ts rename src/enum/{common/theme.ts => system.ts} (85%) delete mode 100644 src/interface/enum.ts delete mode 100644 src/interface/expose.ts delete mode 100644 src/interface/index.ts delete mode 100644 src/interface/layout.ts delete mode 100644 src/interface/system.ts delete mode 100644 src/interface/theme.ts create mode 100644 src/typings/api.d.ts delete mode 100644 src/typings/api/auth.d.ts delete mode 100644 src/typings/api/route.d.ts rename src/typings/{business/auth.d.ts => business.d.ts} (100%) delete mode 100644 src/typings/common/common.d.ts delete mode 100644 src/typings/common/global.d.ts delete mode 100644 src/typings/common/router.d.ts delete mode 100644 src/typings/common/service.d.ts delete mode 100644 src/typings/common/window.d.ts rename src/typings/{common => }/env.d.ts (100%) create mode 100644 src/typings/expose.d.ts create mode 100644 src/typings/global.d.ts rename src/typings/{common/map.d.ts => package.d.ts} (100%) rename src/typings/{common => }/route.d.ts (100%) create mode 100644 src/typings/router.d.ts create mode 100644 src/typings/system.d.ts diff --git a/.eslintrc.js b/.eslintrc.js index 683c04d1..db3e8973 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -171,6 +171,7 @@ module.exports = { ignores: ['index'], }, ], + '@typescript-eslint/ban-types': [ 'error', { @@ -182,6 +183,12 @@ module.exports = { }, }, ], + '@typescript-eslint/no-empty-interface': [ + 'error', + { + allowSingleExtends: true, + }, + ], '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-shadow': 'error', '@typescript-eslint/no-unused-vars': ['warn', { ignoreRestSiblings: true, varsIgnorePattern: '^_' }], diff --git a/src/composables/common/layout.ts b/src/composables/common/layout.ts index 7737b5f5..3324d974 100644 --- a/src/composables/common/layout.ts +++ b/src/composables/common/layout.ts @@ -1,8 +1,7 @@ import { computed } from 'vue'; import { useAppStore, useThemeStore } from '@/store'; -import type { ThemeLayoutMode, GlobalHeaderProps } from '@/interface'; -type LayoutHeaderProps = Record; +type LayoutHeaderProps = Record; export function useBasicLayout() { const app = useAppStore(); diff --git a/src/composables/common/router.ts b/src/composables/common/router.ts index 9afa0815..7f76b45a 100644 --- a/src/composables/common/router.ts +++ b/src/composables/common/router.ts @@ -1,7 +1,6 @@ import { useRouter } from 'vue-router'; import type { RouteLocationRaw } from 'vue-router'; import { router as globalRouter, routeName } from '@/router'; -import type { LoginModuleKey } from '@/interface'; /** * 路由跳转 @@ -43,8 +42,8 @@ export function useRouterPush(inSetup = true) { * @param loginModule - 展示的登录模块 * @param redirectUrl - 重定向地址(登录成功后跳转的地址),默认undefined表示取当前地址为重定向地址 */ - function toLogin(loginModule?: LoginModuleKey, redirectUrl?: string) { - const module: LoginModuleKey = loginModule || 'pwd-login'; + function toLogin(loginModule?: EnumType.LoginModuleKey, redirectUrl?: string) { + const module: EnumType.LoginModuleKey = loginModule || 'pwd-login'; const routeLocation: RouteLocationRaw = { name: routeName('login'), params: { module }, @@ -58,7 +57,7 @@ export function useRouterPush(inSetup = true) { * 登录页切换其他模块 * @param module - 切换后的登录模块 */ - function toLoginModule(module: LoginModuleKey) { + function toLoginModule(module: EnumType.LoginModuleKey) { const { query } = route.value; routerPush({ name: routeName('login'), params: { module }, query }); } diff --git a/src/enum/common/system.ts b/src/enum/business.ts similarity index 64% rename from src/enum/common/system.ts rename to src/enum/business.ts index 475a546c..844d44b5 100644 --- a/src/enum/common/system.ts +++ b/src/enum/business.ts @@ -1,9 +1,3 @@ -/** 布局组件的名称 */ -export enum EnumLayoutComponentName { - basic = 'basic-layout', - blank = 'blank-layout', -} - /** 登录模块 */ export enum EnumLoginModule { 'pwd-login' = '账密登录', diff --git a/src/enum/business/index.ts b/src/enum/business/index.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/src/enum/business/index.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/src/enum/common.ts b/src/enum/common.ts new file mode 100644 index 00000000..2b3f1042 --- /dev/null +++ b/src/enum/common.ts @@ -0,0 +1,35 @@ +/** http请求头的content-type类型 */ +export enum EnumContentType { + json = 'application/json', + formUrlencoded = 'application/x-www-form-urlencoded', + formData = 'multipart/form-data', +} + +/** 缓存的key */ +export enum EnumStorageKey { + /** 主题颜色 */ + 'theme-color' = '__THEME_COLOR__', + /** 用户token */ + 'token' = '__TOKEN__', + /** 用户刷新token */ + 'refresh-koken' = '__REFRESH_TOKEN__', + /** 用户信息 */ + 'user-info' = '__USER_INFO__', + /** 多页签路由信息 */ + 'tab-routes' = '__TAB_ROUTES__', +} + +/** 数据类型 */ +export enum EnumDataType { + number = '[object Number]', + string = '[object String]', + boolean = '[object Boolean]', + null = '[object Null]', + undefined = '[object Undefined]', + object = '[object Object]', + array = '[object Array]', + date = '[object Date]', + regexp = '[object RegExp]', + set = '[object Set]', + map = '[object Map]', +} diff --git a/src/enum/common/index.ts b/src/enum/common/index.ts deleted file mode 100644 index 5eb4ea81..00000000 --- a/src/enum/common/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './typeof'; -export * from './storage'; -export * from './service'; -export * from './system'; -export * from './theme'; diff --git a/src/enum/common/service.ts b/src/enum/common/service.ts deleted file mode 100644 index 7edfa971..00000000 --- a/src/enum/common/service.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** http请求头的content-type类型 */ -export enum ContentType { - json = 'application/json', - formUrlencoded = 'application/x-www-form-urlencoded', - formData = 'multipart/form-data', -} diff --git a/src/enum/common/storage.ts b/src/enum/common/storage.ts deleted file mode 100644 index 43d02538..00000000 --- a/src/enum/common/storage.ts +++ /dev/null @@ -1,12 +0,0 @@ -export enum EnumStorageKey { - /** 主题颜色 */ - 'theme-color' = '__THEME_COLOR__', - /** 用户token */ - 'token' = '__TOKEN__', - /** 用户刷新token */ - 'refresh-koken' = '__REFRESH_TOKEN__', - /** 用户信息 */ - 'user-info' = '__USER_INFO__', - /** 多页签路由信息 */ - 'tab-routes' = '__TAB_ROUTES__', -} diff --git a/src/enum/common/typeof.ts b/src/enum/common/typeof.ts deleted file mode 100644 index 320c2cb8..00000000 --- a/src/enum/common/typeof.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** 数据类型 */ -export enum EnumDataType { - number = '[object Number]', - string = '[object String]', - boolean = '[object Boolean]', - null = '[object Null]', - undefined = '[object Undefined]', - object = '[object Object]', - array = '[object Array]', - date = '[object Date]', - regexp = '[object RegExp]', - set = '[object Set]', - map = '[object Map]', -} diff --git a/src/enum/index.ts b/src/enum/index.ts index d0b93236..d44a269d 100644 --- a/src/enum/index.ts +++ b/src/enum/index.ts @@ -1 +1,3 @@ export * from './common'; +export * from './system'; +export * from './business'; diff --git a/src/enum/common/theme.ts b/src/enum/system.ts similarity index 85% rename from src/enum/common/theme.ts rename to src/enum/system.ts index 7e884013..43bbac8c 100644 --- a/src/enum/common/theme.ts +++ b/src/enum/system.ts @@ -1,3 +1,9 @@ +/** 布局组件的名称 */ +export enum EnumLayoutComponentName { + basic = 'basic-layout', + blank = 'blank-layout', +} + /** 布局模式 */ export enum EnumThemeLayoutMode { 'vertical' = '左侧菜单模式', diff --git a/src/interface/enum.ts b/src/interface/enum.ts deleted file mode 100644 index 8739fc0c..00000000 --- a/src/interface/enum.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { - EnumLayoutComponentName, - EnumThemeLayoutMode, - EnumThemeTabMode, - EnumThemeHorizontalMenuPosition, - EnumThemeAnimateMode, - EnumLoginModule, -} from '@/enum'; - -/** 布局组件名称 */ -export type LayoutComponentName = keyof typeof EnumLayoutComponentName; - -/** 布局模式 */ -export type ThemeLayoutMode = keyof typeof EnumThemeLayoutMode; - -/** 多页签风格 */ -export type ThemeTabMode = keyof typeof EnumThemeTabMode; - -/** 水平模式的菜单位置 */ -export type ThemeHorizontalMenuPosition = keyof typeof EnumThemeHorizontalMenuPosition; - -/** 过渡动画 */ -export type ThemeAnimateMode = keyof typeof EnumThemeAnimateMode; - -/** 登录模块 */ -export type LoginModuleKey = keyof typeof EnumLoginModule; diff --git a/src/interface/expose.ts b/src/interface/expose.ts deleted file mode 100644 index 733b8c56..00000000 --- a/src/interface/expose.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type BScroll from '@better-scroll/core'; - -export interface ExposeBetterScroll { - instance: BScroll; -} diff --git a/src/interface/index.ts b/src/interface/index.ts deleted file mode 100644 index c1c16a68..00000000 --- a/src/interface/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './enum'; -export * from './theme'; -export * from './system'; -export * from './expose'; -export * from './layout'; diff --git a/src/interface/layout.ts b/src/interface/layout.ts deleted file mode 100644 index 2bd99479..00000000 --- a/src/interface/layout.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** 全局头部属性 */ -export interface GlobalHeaderProps { - /** 显示logo */ - showLogo: boolean; - /** 显示头部菜单 */ - showHeaderMenu: boolean; - /** 显示菜单折叠按钮 */ - showMenuCollape: boolean; -} diff --git a/src/interface/system.ts b/src/interface/system.ts deleted file mode 100644 index 08af4263..00000000 --- a/src/interface/system.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { VNodeChild } from 'vue'; -import type { RouteLocationNormalizedLoaded } from 'vue-router'; -import type { DropdownOption } from 'naive-ui'; - -/** 菜单项配置 */ -export type GlobalMenuOption = { - key: string; - label: string; - routeName: string; - routePath: string; - icon?: () => VNodeChild; - children?: GlobalMenuOption[]; -}; - -/** 面包屑 */ -export type GlobalBreadcrumb = DropdownOption & { - key: string; - label: string; - disabled: boolean; - routeName: string; - hasChildren: boolean; - children?: GlobalBreadcrumb[]; -}; - -/** 多页签Tab的路由 */ -export interface GlobalTabRoute extends Pick { - /** 滚动的位置 */ - scrollPosition: { - left: number; - top: number; - }; -} - -/** 搜索的菜单 */ -export type SearchMenu = AuthRoute.Route; diff --git a/src/interface/theme.ts b/src/interface/theme.ts deleted file mode 100644 index bc2bfb20..00000000 --- a/src/interface/theme.ts +++ /dev/null @@ -1,150 +0,0 @@ -import type { - EnumThemeLayoutMode, - EnumThemeTabMode, - EnumThemeHorizontalMenuPosition, - EnumThemeAnimateMode, -} from '@/enum'; -import type { ThemeLayoutMode, ThemeTabMode, ThemeHorizontalMenuPosition, ThemeAnimateMode } from './enum'; - -/** 主题相关类型 */ -export interface ThemeSetting { - /** 暗黑模式 */ - darkMode: boolean; - /** 布局样式 */ - layout: ThemeLayout; - /** 主题颜色 */ - themeColor: string; - /** 主题颜色列表 */ - themeColorList: string[]; - /** 其他颜色 */ - otherColor: ThemeOtherColor; - /** 是否自定义info的颜色(默认取比主题色深一级的颜色) */ - isCustomizeInfoColor: boolean; - /** 固定头部和多页签 */ - fixedHeaderAndTab: boolean; - /** 显示重载按钮 */ - showReload: boolean; - /** 头部样式 */ - header: ThemeHeader; - /** 标多页签样式 */ - tab: ThemeTab; - /** 侧边栏样式 */ - sider: ThemeSider; - /** 菜单样式 */ - menu: ThemeMenu; - /** 底部样式 */ - footer: ThemeFooter; - /** 页面样式 */ - page: ThemePage; -} - -/** 布局样式 */ -interface ThemeLayout { - /** 最小宽度 */ - minWidth: number; - /** 布局模式 */ - mode: ThemeLayoutMode; - /** 布局模式列表 */ - modeList: ThemeLayoutModeList[]; -} -interface ThemeLayoutModeList { - value: ThemeLayoutMode; - label: EnumThemeLayoutMode; -} - -/** 其他主题颜色 */ -interface ThemeOtherColor { - /** 信息 */ - info: string; - /** 成功 */ - success: string; - /** 警告 */ - warning: string; - /** 错误 */ - error: string; -} - -/** 头部样式 */ -interface ThemeHeader { - /** 头部高度 */ - height: number; - /** 面包屑样式 */ - crumb: ThemeCrumb; -} -/** 面包屑样式 */ -interface ThemeCrumb { - /** 面包屑可见 */ - visible: boolean; - /** 显示图标 */ - showIcon: boolean; -} - -/** 标多页签样式 */ -export interface ThemeTab { - /** 多页签可见 */ - visible: boolean; - /** 多页签高度 */ - height: number; - /** 多页签风格 */ - mode: ThemeTabMode; - /** 多页签风格列表 */ - modeList: ThemeTabModeList[]; - /** 开启多页签缓存 */ - isCache: boolean; -} - -/** 多页签风格列表 */ -interface ThemeTabModeList { - value: ThemeTabMode; - label: EnumThemeTabMode; -} - -/** 侧边栏样式 */ -interface ThemeSider { - /** 侧边栏宽度 */ - width: number; - /** 侧边栏折叠时的宽度 */ - collapsedWidth: number; - /** vertical-mix模式下侧边栏宽度 */ - mixWidth: number; - /** vertical-mix模式下侧边栏折叠时的宽度 */ - mixCollapsedWidth: number; - /** vertical-mix模式下侧边栏的子菜单的宽度 */ - mixChildMenuWidth: number; -} - -/** 菜单样式 */ -interface ThemeMenu { - /** 水平模式的菜单的位置 */ - horizontalPosition: ThemeHorizontalMenuPosition; - /** 水平模式的菜单的位置列表 */ - horizontalPositionList: ThemeHorizontalMenuPositionList[]; -} -/** 水平模式的菜单的位置列表 */ -interface ThemeHorizontalMenuPositionList { - value: ThemeHorizontalMenuPosition; - label: EnumThemeHorizontalMenuPosition; -} - -/** 底部样式 */ -interface ThemeFooter { - /** 是否固定底部 */ - fixed: boolean; - /** 底部高度 */ - height: number; -} - -/** 页面样式 */ -interface ThemePage { - /** 页面是否开启动画 */ - animate: boolean; - /** 动画类型 */ - animateMode: ThemeAnimateMode; - /** 动画类型列表 */ - animateModeList: ThemeAnimateModeList[]; -} -/** 动画类型列表 */ -interface ThemeAnimateModeList { - value: ThemeAnimateMode; - label: EnumThemeAnimateMode; -} diff --git a/src/layouts/common/GlobalHeader/components/GlobalBreadcrumb.vue b/src/layouts/common/GlobalHeader/components/GlobalBreadcrumb.vue index d4a682f9..c8ab5e23 100644 --- a/src/layouts/common/GlobalHeader/components/GlobalBreadcrumb.vue +++ b/src/layouts/common/GlobalHeader/components/GlobalBreadcrumb.vue @@ -32,7 +32,6 @@ import { routePath } from '@/router'; import { useThemeStore, useRouteStore } from '@/store'; import { useRouterPush } from '@/composables'; import { getBreadcrumbByRouteKey } from '@/utils'; -import type { GlobalMenuOption } from '@/interface'; const route = useRoute(); const theme = useThemeStore(); diff --git a/src/layouts/common/GlobalHeader/components/HeaderMenu.vue b/src/layouts/common/GlobalHeader/components/HeaderMenu.vue index b464dadd..226cf452 100644 --- a/src/layouts/common/GlobalHeader/components/HeaderMenu.vue +++ b/src/layouts/common/GlobalHeader/components/HeaderMenu.vue @@ -8,7 +8,6 @@ import { useRoute } from 'vue-router'; import type { MenuOption } from 'naive-ui'; import { useRouteStore } from '@/store'; import { useRouterPush } from '@/composables'; -import type { GlobalMenuOption } from '@/interface'; const route = useRoute(); const routeStore = useRouteStore(); diff --git a/src/layouts/common/GlobalHeader/index.vue b/src/layouts/common/GlobalHeader/index.vue index 059bca84..d5ff40a8 100644 --- a/src/layouts/common/GlobalHeader/index.vue +++ b/src/layouts/common/GlobalHeader/index.vue @@ -21,7 +21,6 @@