gameSeriveUniapp/src/store/modules/role.ts
2026-01-12 16:48:28 +08:00

92 lines
2.1 KiB
TypeScript

/**
* 角色 Store
*/
import { defineStore } from 'pinia'
import type { UserType } from '@/types'
import { useUserStore } from './user'
import { mockUsers } from '@/mock'
interface RoleState {
currentRole: UserType
availableRoles: UserType[]
}
export const useRoleStore = defineStore('role', {
state: (): RoleState => ({
currentRole: (uni.getStorageSync('mock_user_type') || 'customer') as UserType,
availableRoles: ['customer', 'merchant', 'player']
}),
getters: {
// 是否是用户
isCustomer: (state) => state.currentRole === 'customer',
// 是否是商家
isMerchant: (state) => state.currentRole === 'merchant',
// 是否是代练
isPlayer: (state) => state.currentRole === 'player',
// 角色名称
roleName: (state) => {
const roleMap: Record<UserType, string> = {
customer: '用户',
merchant: '商家',
player: '代练'
}
return roleMap[state.currentRole]
},
// 首页路径
homePagePath: (state) => {
const pathMap: Record<UserType, string> = {
customer: '/pages-user/home/index',
merchant: '/pages-merchant/home/index',
player: '/pages-player/home/index'
}
return pathMap[state.currentRole]
}
},
actions: {
/**
* 切换角色
*/
async switchRole(role: UserType): Promise<void> {
this.currentRole = role
// 保存到本地存储
uni.setStorageSync('mock_user_type', role)
// 更新用户信息
const userStore = useUserStore()
const user = mockUsers.find(u => u.userType === role)
if (user) {
userStore.userInfo = user
uni.setStorageSync('userInfo', user)
}
// 跳转到对应首页
uni.reLaunch({
url: this.homePagePath
})
},
/**
* 检查角色权限
*/
hasRole(role: UserType): boolean {
return this.currentRole === role
},
/**
* 检查是否有任一角色权限
*/
hasAnyRole(roles: UserType[]): boolean {
return roles.includes(this.currentRole)
}
}
})