初始化提交
This commit is contained in:
18
src/store/index.ts
Normal file
18
src/store/index.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import { createPinia } from 'pinia'
|
||||
import { createPersistedState } from 'pinia-plugin-persistedstate' // 数据持久化
|
||||
|
||||
const store = createPinia()
|
||||
store.use(
|
||||
createPersistedState({
|
||||
storage: {
|
||||
getItem: uni.getStorageSync,
|
||||
setItem: uni.setStorageSync,
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
export default store
|
||||
|
||||
// 模块统一导出
|
||||
export * from './user'
|
||||
export * from './store'
|
||||
48
src/store/store.ts
Normal file
48
src/store/store.ts
Normal file
@ -0,0 +1,48 @@
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
interface IDefaultStoreVo {
|
||||
id: number
|
||||
name: string
|
||||
index: number
|
||||
}
|
||||
|
||||
const defaultStoreState: IDefaultStoreVo = {
|
||||
id: 0,
|
||||
name: '',
|
||||
index: 0,
|
||||
}
|
||||
|
||||
export const useStoreStore = defineStore(
|
||||
'store',
|
||||
() => {
|
||||
// 这里后续可添加店铺管理相关 state、action
|
||||
const storeList = ref<Array<any>>([])
|
||||
const defaultStore = ref<IDefaultStoreVo>({...defaultStoreState})
|
||||
|
||||
/**
|
||||
* 设置门店列表
|
||||
* @param stores
|
||||
*/
|
||||
const setStoreList = (stores: Array<any>) => {
|
||||
storeList.value = stores
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认选择的门店
|
||||
* @param store
|
||||
*/
|
||||
const setDefaultStore = (store: IDefaultStoreVo) => {
|
||||
defaultStore.value = store
|
||||
}
|
||||
|
||||
return {
|
||||
setStoreList,
|
||||
storeList,
|
||||
defaultStore,
|
||||
setDefaultStore
|
||||
}
|
||||
},
|
||||
{
|
||||
persist: true,
|
||||
},
|
||||
)
|
||||
159
src/store/user.ts
Normal file
159
src/store/user.ts
Normal file
@ -0,0 +1,159 @@
|
||||
import type { IUserInfoVo } from '@/api/types/login'
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
import {
|
||||
getUserInfo as _getUserInfo,
|
||||
login as _login,
|
||||
logout as _logout,
|
||||
wxLogin as _wxLogin,
|
||||
getWxCode,
|
||||
mobileLogin as _mobileLogin
|
||||
} from '@/api/login'
|
||||
import { toast } from '@/utils/toast'
|
||||
|
||||
const defaultAvatar = 'https://shchazhi.oss-cn-hangzhou.aliyuncs.com/fronted/icon/icon_avatar.png'
|
||||
|
||||
// 初始化状态
|
||||
const userInfoState: IUserInfoVo = {
|
||||
id: 0,
|
||||
nickname: '',
|
||||
avatar: defaultAvatar,
|
||||
token: '',
|
||||
sn: '',
|
||||
account: '',
|
||||
channel: 0,
|
||||
is_new_user: 1,
|
||||
mobile: '',
|
||||
username: '',
|
||||
}
|
||||
export const useUserStore = defineStore(
|
||||
'user',
|
||||
() => {
|
||||
// 定义用户余额
|
||||
const userMoney = ref<number>(0)
|
||||
|
||||
// 默认未登录
|
||||
const isLoggedIn = ref<boolean>(false)
|
||||
// 定义用户信息
|
||||
const userInfo = ref<IUserInfoVo>({ ...userInfoState })
|
||||
// 设置用户信息
|
||||
const setUserInfo = (val: IUserInfoVo) => {
|
||||
console.log('设置用户信息', val)
|
||||
// 若头像为空 则使用默认头像
|
||||
if (!val.avatar) {
|
||||
val.avatar = userInfoState.avatar
|
||||
}
|
||||
else {
|
||||
val.avatar = defaultAvatar
|
||||
}
|
||||
userInfo.value = val
|
||||
}
|
||||
|
||||
const setUserAvatar = (avatar: string) => {
|
||||
userInfo.value.avatar = avatar
|
||||
}
|
||||
|
||||
// 删除用户信息
|
||||
const removeUserInfo = () => {
|
||||
isLoggedIn.value = false
|
||||
userInfo.value = { ...userInfoState }
|
||||
userMoney.value = 0
|
||||
|
||||
// 清除缓存
|
||||
uni.removeStorageSync('userInfo')
|
||||
uni.removeStorageSync('token')
|
||||
}
|
||||
/**
|
||||
* 获取用户信息
|
||||
*/
|
||||
const getUserInfo = async () => {
|
||||
const res = await _getUserInfo()
|
||||
const userInfo = res
|
||||
setUserInfo(userInfo)
|
||||
uni.setStorageSync('userInfo', userInfo)
|
||||
// TODO 这里可以增加获取用户路由的方法 根据用户的角色动态生成路由
|
||||
return res
|
||||
}
|
||||
/**
|
||||
* 用户登录
|
||||
* @param credentials 登录参数
|
||||
* @returns R<IUserLogin>
|
||||
*/
|
||||
const login = async (credentials: {
|
||||
username: string
|
||||
password: string
|
||||
code: string
|
||||
uuid: string
|
||||
}) => {
|
||||
const res = await _login(credentials)
|
||||
console.log('登录信息', res)
|
||||
toast.success('登录成功')
|
||||
await getUserInfo()
|
||||
return res
|
||||
}
|
||||
|
||||
/**
|
||||
* 账号密码登录
|
||||
*/
|
||||
const mobileLogin = async (account: string, password: string, scene: number, terminal: number, channel: number) => {
|
||||
const res = await _mobileLogin({ account, password, scene, terminal, channel })
|
||||
uni.setStorageSync('token', res.token)
|
||||
|
||||
await getUserInfo()
|
||||
isLoggedIn.value = true
|
||||
return res
|
||||
}
|
||||
|
||||
/**
|
||||
* 退出登录 并 删除用户信息
|
||||
*/
|
||||
const logout = async () => {
|
||||
const res = await _logout()
|
||||
removeUserInfo()
|
||||
return res
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信登录
|
||||
*/
|
||||
const wxLogin = async () => {
|
||||
// 获取微信小程序登录的code
|
||||
const data = await getWxCode()
|
||||
console.log('微信登录code', data)
|
||||
|
||||
const res = await _wxLogin(data)
|
||||
uni.setStorageSync('token', res.token)
|
||||
|
||||
const user = await getUserInfo()
|
||||
|
||||
isLoggedIn.value = true
|
||||
return res && user
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置用户余额
|
||||
* @param money
|
||||
*/
|
||||
const setUserMoney = (money: number) => {
|
||||
userMoney.value = money
|
||||
}
|
||||
|
||||
return {
|
||||
userInfo,
|
||||
login,
|
||||
wxLogin,
|
||||
getUserInfo,
|
||||
setUserAvatar,
|
||||
logout,
|
||||
setUserInfo,
|
||||
removeUserInfo,
|
||||
isLoggedIn,
|
||||
mobileLogin,
|
||||
setUserMoney,
|
||||
userMoney,
|
||||
}
|
||||
},
|
||||
{
|
||||
persist: true,
|
||||
},
|
||||
)
|
||||
Reference in New Issue
Block a user