初始化提交

This commit is contained in:
wangxiaowei
2025-12-27 13:33:44 +08:00
commit 833fd1bb66
311 changed files with 53086 additions and 0 deletions

18
src/store/index.ts Normal file
View 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
View 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
View 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,
},
)