/** * 角色 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 = { customer: '用户', merchant: '商家', player: '代练' } return roleMap[state.currentRole] }, // 首页路径 homePagePath: (state) => { const pathMap: Record = { 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 { 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) } } })