1. 修复(kinit-admin):页面缓存问题修复 2. 更新(kinit-api,kinit-admin):菜单管理新增是否缓存字段 3. 更新(kinit-admin):将缓存默认存储在localStorage中 4. 更新(kinit-api):将python-jose库更换为pyjwt库 5. 优化(kinit-admin,kinit-uni):退出登录方法优化 6. 优化(kinit-admin,kinit-uni):response拦截优化 7. 新增(kinit-api,kinit-admin,kinit-uni):jwt到期时间缩短,加入刷新token功能 8. (kinit-uni)切换到 vscode 开发 uniapp 项目
310 lines
8.5 KiB
TypeScript
310 lines
8.5 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { store } from '../index'
|
|
import { setCssVar, humpToUnderline } from '@/utils'
|
|
import { ElMessage } from 'element-plus'
|
|
import { ElementPlusSize } from '@/types/elementPlus'
|
|
import { useCache } from '@/hooks/web/useCache'
|
|
import { LayoutType } from '@/types/layout'
|
|
import { ThemeTypes } from '@/types/theme'
|
|
|
|
const { wsCache } = useCache()
|
|
|
|
interface AppState {
|
|
breadcrumb: boolean
|
|
breadcrumbIcon: boolean
|
|
collapse: boolean
|
|
uniqueOpened: boolean
|
|
hamburger: boolean
|
|
screenfull: boolean
|
|
size: boolean
|
|
locale: boolean
|
|
tagsView: boolean
|
|
tagsViewIcon: boolean
|
|
logo: boolean
|
|
fixedHeader: boolean
|
|
greyMode: boolean
|
|
dynamicRouter: boolean
|
|
pageLoading: boolean
|
|
layout: LayoutType
|
|
title: string
|
|
userInfo: string
|
|
isDark: boolean
|
|
currentSize: ElementPlusSize
|
|
sizeMap: ElementPlusSize[]
|
|
mobile: boolean
|
|
footer: boolean
|
|
theme: ThemeTypes
|
|
fixedMenu: boolean
|
|
logoImage: string
|
|
footerContent: string
|
|
icpNumber: string
|
|
token: string
|
|
refreshToken: string
|
|
}
|
|
|
|
export const useAppStore = defineStore('app', {
|
|
state: (): AppState => {
|
|
return {
|
|
userInfo: 'userInfo', // 登录信息存储字段-建议每个项目换一个字段,避免与其他项目冲突
|
|
token: 'Token', // 存储Token字段
|
|
refreshToken: 'RefreshToken', // 存储刷新Token字段
|
|
sizeMap: ['default', 'large', 'small'],
|
|
mobile: false, // 是否是移动端
|
|
title: import.meta.env.VITE_APP_TITLE, // 标题
|
|
pageLoading: false, // 路由跳转loading
|
|
|
|
breadcrumb: true, // 面包屑
|
|
breadcrumbIcon: true, // 面包屑图标
|
|
collapse: false, // 折叠菜单
|
|
uniqueOpened: true, // 是否只保持一个子菜单的展开
|
|
hamburger: true, // 折叠图标
|
|
screenfull: true, // 全屏图标
|
|
size: true, // 尺寸图标
|
|
locale: true, // 多语言图标
|
|
tagsView: true, // 标签页
|
|
tagsViewIcon: true, // 是否显示标签图标
|
|
logo: true, // 是否开启logo显示
|
|
logoImage: '', // logo图片
|
|
fixedHeader: true, // 固定toolheader
|
|
footer: true, // 显示页脚
|
|
footerContent: '', // 页脚内容
|
|
icpNumber: '', // 备案号
|
|
greyMode: false, // 是否开始灰色模式,用于特殊悼念日
|
|
dynamicRouter: wsCache.get('dynamicRouter') || true, // 是否动态路由
|
|
fixedMenu: wsCache.get('fixedMenu') || true, // 是否固定菜单
|
|
|
|
layout: wsCache.get('layout') || 'classic', // layout布局
|
|
isDark: wsCache.get('isDark') || false, // 是否是暗黑模式
|
|
currentSize: wsCache.get('default') || 'default', // 组件尺寸
|
|
theme: wsCache.get('theme') || {
|
|
// 主题色
|
|
elColorPrimary: '#409eff',
|
|
// 左侧菜单边框颜色
|
|
leftMenuBorderColor: 'inherit',
|
|
// 左侧菜单背景颜色
|
|
leftMenuBgColor: '#001529',
|
|
// 左侧菜单浅色背景颜色
|
|
leftMenuBgLightColor: '#0f2438',
|
|
// 左侧菜单选中背景颜色
|
|
leftMenuBgActiveColor: 'var(--el-color-primary)',
|
|
// 左侧菜单收起选中背景颜色
|
|
leftMenuCollapseBgActiveColor: 'var(--el-color-primary)',
|
|
// 左侧菜单字体颜色
|
|
leftMenuTextColor: '#bfcbd9',
|
|
// 左侧菜单选中字体颜色
|
|
leftMenuTextActiveColor: '#fff',
|
|
// logo字体颜色
|
|
logoTitleTextColor: '#fff',
|
|
// logo边框颜色
|
|
logoBorderColor: 'inherit',
|
|
// 头部背景颜色
|
|
topHeaderBgColor: '#fff',
|
|
// 头部字体颜色
|
|
topHeaderTextColor: 'inherit',
|
|
// 头部悬停颜色
|
|
topHeaderHoverColor: '#f6f6f6',
|
|
// 头部边框颜色
|
|
topToolBorderColor: '#eee'
|
|
}
|
|
}
|
|
},
|
|
getters: {
|
|
getBreadcrumb(): boolean {
|
|
return this.breadcrumb
|
|
},
|
|
getBreadcrumbIcon(): boolean {
|
|
return this.breadcrumbIcon
|
|
},
|
|
getCollapse(): boolean {
|
|
return this.collapse
|
|
},
|
|
getUniqueOpened(): boolean {
|
|
return this.uniqueOpened
|
|
},
|
|
getHamburger(): boolean {
|
|
return this.hamburger
|
|
},
|
|
getScreenfull(): boolean {
|
|
return this.screenfull
|
|
},
|
|
getSize(): boolean {
|
|
return this.size
|
|
},
|
|
getLocale(): boolean {
|
|
return this.locale
|
|
},
|
|
getTagsView(): boolean {
|
|
return this.tagsView
|
|
},
|
|
getTagsViewIcon(): boolean {
|
|
return this.tagsViewIcon
|
|
},
|
|
getLogo(): boolean {
|
|
return this.logo
|
|
},
|
|
getLogoImage(): string {
|
|
return this.logoImage
|
|
},
|
|
getFixedHeader(): boolean {
|
|
return this.fixedHeader
|
|
},
|
|
getGreyMode(): boolean {
|
|
return this.greyMode
|
|
},
|
|
getDynamicRouter(): boolean {
|
|
return this.dynamicRouter
|
|
},
|
|
getFixedMenu(): boolean {
|
|
return this.fixedMenu
|
|
},
|
|
getPageLoading(): boolean {
|
|
return this.pageLoading
|
|
},
|
|
getLayout(): LayoutType {
|
|
return this.layout
|
|
},
|
|
getTitle(): string {
|
|
return this.title
|
|
},
|
|
getUserInfo(): string {
|
|
return this.userInfo
|
|
},
|
|
getToken(): string {
|
|
return this.token
|
|
},
|
|
getRefreshToken(): string {
|
|
return this.refreshToken
|
|
},
|
|
getIsDark(): boolean {
|
|
return this.isDark
|
|
},
|
|
getCurrentSize(): ElementPlusSize {
|
|
return this.currentSize
|
|
},
|
|
getSizeMap(): ElementPlusSize[] {
|
|
return this.sizeMap
|
|
},
|
|
getMobile(): boolean {
|
|
return this.mobile
|
|
},
|
|
getTheme(): ThemeTypes {
|
|
return this.theme
|
|
},
|
|
getFooter(): boolean {
|
|
return this.footer
|
|
},
|
|
getFooterContent(): string {
|
|
return this.footerContent
|
|
},
|
|
getIcpNumber(): string {
|
|
return this.icpNumber
|
|
}
|
|
},
|
|
actions: {
|
|
setBreadcrumb(breadcrumb: boolean) {
|
|
this.breadcrumb = breadcrumb
|
|
},
|
|
setBreadcrumbIcon(breadcrumbIcon: boolean) {
|
|
this.breadcrumbIcon = breadcrumbIcon
|
|
},
|
|
setCollapse(collapse: boolean) {
|
|
this.collapse = collapse
|
|
},
|
|
setUniqueOpened(uniqueOpened: boolean) {
|
|
this.uniqueOpened = uniqueOpened
|
|
},
|
|
setHamburger(hamburger: boolean) {
|
|
this.hamburger = hamburger
|
|
},
|
|
setScreenfull(screenfull: boolean) {
|
|
this.screenfull = screenfull
|
|
},
|
|
setSize(size: boolean) {
|
|
this.size = size
|
|
},
|
|
setLocale(locale: boolean) {
|
|
this.locale = locale
|
|
},
|
|
setTagsView(tagsView: boolean) {
|
|
this.tagsView = tagsView
|
|
},
|
|
setTagsViewIcon(tagsViewIcon: boolean) {
|
|
this.tagsViewIcon = tagsViewIcon
|
|
},
|
|
setLogo(logo: boolean) {
|
|
this.logo = logo
|
|
},
|
|
setLogoImage(logoImage: string) {
|
|
this.logoImage = logoImage
|
|
},
|
|
setFixedHeader(fixedHeader: boolean) {
|
|
this.fixedHeader = fixedHeader
|
|
},
|
|
setGreyMode(greyMode: boolean) {
|
|
this.greyMode = greyMode
|
|
},
|
|
setDynamicRouter(dynamicRouter: boolean) {
|
|
wsCache.set('dynamicRouter', dynamicRouter)
|
|
this.dynamicRouter = dynamicRouter
|
|
},
|
|
setFixedMenu(fixedMenu: boolean) {
|
|
wsCache.set('fixedMenu', fixedMenu)
|
|
this.fixedMenu = fixedMenu
|
|
},
|
|
setPageLoading(pageLoading: boolean) {
|
|
this.pageLoading = pageLoading
|
|
},
|
|
setLayout(layout: LayoutType) {
|
|
if (this.mobile && layout !== 'classic') {
|
|
ElMessage.warning('移动端模式下不支持切换其他布局')
|
|
return
|
|
}
|
|
this.layout = layout
|
|
wsCache.set('layout', this.layout)
|
|
},
|
|
setTitle(title: string) {
|
|
this.title = title
|
|
},
|
|
setIsDark(isDark: boolean) {
|
|
this.isDark = isDark
|
|
if (this.isDark) {
|
|
document.documentElement.classList.add('dark')
|
|
document.documentElement.classList.remove('light')
|
|
} else {
|
|
document.documentElement.classList.add('light')
|
|
document.documentElement.classList.remove('dark')
|
|
}
|
|
wsCache.set('isDark', this.isDark)
|
|
},
|
|
setCurrentSize(currentSize: ElementPlusSize) {
|
|
this.currentSize = currentSize
|
|
wsCache.set('currentSize', this.currentSize)
|
|
},
|
|
setMobile(mobile: boolean) {
|
|
this.mobile = mobile
|
|
},
|
|
setTheme(theme: ThemeTypes) {
|
|
this.theme = Object.assign(this.theme, theme)
|
|
wsCache.set('theme', this.theme)
|
|
},
|
|
setCssVarTheme() {
|
|
for (const key in this.theme) {
|
|
setCssVar(`--${humpToUnderline(key)}`, this.theme[key])
|
|
}
|
|
},
|
|
setFooter(footer: boolean) {
|
|
this.footer = footer
|
|
},
|
|
setFooterContent(footerContent: string) {
|
|
this.footerContent = footerContent
|
|
},
|
|
setIcpNumber(icpNumber: string) {
|
|
this.icpNumber = icpNumber
|
|
}
|
|
}
|
|
})
|
|
|
|
export const useAppStoreWithOut = () => {
|
|
return useAppStore(store)
|
|
}
|