数据定义
在store中新建文件夹 user.ts
代码为
cpp
import { defineStore } from "pinia";
import { store } from "@/store";
import { userType } from "./types";
import { routerArrays } from "@/layout/types";
import { router, resetRouter } from "@/router";
import { storageSession } from "@pureadmin/utils";
import { getLogin, refreshTokenApi } from "@/api/user";
import { UserResult, RefreshTokenResult } from "@/api/user";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
import { type DataInfo, setToken, removeToken, sessionKey } from "@/utils/auth";
export const useUserStore = defineStore({
id: "pure-user",
state: (): userType => ({
userid: "1",
// 用户名
username:
storageSession().getItem<DataInfo<number>>(sessionKey)?.username ?? "",
// 页面级别权限
roles: storageSession().getItem<DataInfo<number>>(sessionKey)?.roles ?? [],
// 前端生成的验证码(按实际需求替换)
// 判断登录页面显示哪个组件(0:登录(默认)、1:手机登录、2:二维码登录、3:注册、4:忘记密码)
currentPage: 0
}),
actions: {
/** 存储用户名 */
SET_USERNAME(username: string) {
this.username = username;
},
/** 存储角色 */
SET_ROLES(roles: Array<string>) {
this.roles = roles;
},
/** 存储前端生成的验证码 */
SET_VERIFYCODE(verifyCode: string) {
this.verifyCode = verifyCode;
},
/** 存储登录页面显示哪个组件 */
SET_CURRENTPAGE(value: number) {
this.currentPage = value;
},
/** 登入 */
async loginByUsername(data) {
return new Promise<UserResult>((resolve, reject) => {
getLogin(data)
.then(data => {
if (data) {
setToken(data.data);
resolve(data);
}
})
.catch(error => {
reject(error);
});
});
},
/** 前端登出(不调用接口) */
logOut() {
this.username = "";
this.roles = [];
removeToken();
useMultiTagsStoreHook().handleTags("equal", [...routerArrays]);
resetRouter();
router.push("/login");
},
/** 刷新`token` */
async handRefreshToken(data) {
return new Promise<RefreshTokenResult>((resolve, reject) => {
refreshTokenApi(data)
.then(data => {
if (data) {
setToken(data.data);
resolve(data);
}
})
.catch(error => {
reject(error);
});
});
}
}
});
export function useUserStoreHook() {
return useUserStore(store);
}
主要是定义pinia存入什么数据并且定义了一些修改方法,方便后续调用
页面调用
import { useUserStoreHook,useUserStore } from "@/store/modules/user"
调用里面的数据有很多方式
使用计算属性 通过useUserStoreHook().currentPage直接调用
const currentPage = computed(() => {
return useUserStoreHook().currentPage;
});
通过定义store,从store中获取数据
const store = useUserStore();
console.log(store.username)//输出存储的用户名
修改
同样引入
import { useUserStoreHook,useUserStore } from "@/store/modules/user"
之后
可以使用很多方法修改pinia里面的值
使用定义的方法
useUserStoreHook().SET_CURRENTPAGE(1);
使用定义的store
const store = useUserStore();
store.$patch({
currentPage: 1,//将数据修改为1
})