修改pinia数据

数据定义

在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

})

相关推荐
用户2181697049304 分钟前
Flutter(九)StatelessWidget StatefullWidget
前端
paopaokaka_luck4 分钟前
基于springboot3+vue3的乡村医生诊疗管理系统(AI助手、协同过滤算法、webSocket实时聊天、Echarts图形化分析)
前端·网络·人工智能·spring boot·websocket·网络协议·echarts
编程风暴5 分钟前
3类人群的数据分析实习类型选择+4条选错红线
java·前端·数据分析
其美杰布-富贵-李5 分钟前
Vue 3 模块导入教程:import、export 与文件组织
前端·javascript·vue.js
Bigger16 分钟前
堆了 20 套主题、10+ 组件,用户还是用不出来?我给设计 Skill 加了「自动驾驶」
前端·ai编程·视觉设计
weipt20 分钟前
springboot项目运行的几种方式
javascript·css·html
前端技术官25 分钟前
前端真的比后端简单吗?
javascript·webview·dom·前端工程化·浏览器兼容性
vx-程序开发31 分钟前
【java项目分享】springboot农产品销售平台14952
java·javascript·spring boot·python·eclipse·django·php
贾天佑忆月 迷失的昵32 分钟前
.NET Web开发技术简单整理
前端·.net
布兰妮甜40 分钟前
Vue 路由进阶:路由守卫权限控制、动态路由、懒加载、路由缓存
vue.js·懒加载·动态路由·路由守卫权限控制·路由缓存