修改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

})

相关推荐
mc_故事与你8 小时前
前后端分离项目(springboot+vue+mybatis)-教学文档(SpringBoot3+Vue2)-4 (正在编写)
vue.js·spring boot·mybatis
wjhx8 小时前
在Qt Design Studio中进行页面切换
前端·javascript·qt
钱多多先森8 小时前
【Dify】使用 python 调用 Dify 的 API 服务,查看“知识检索”返回内容,用于前端溯源展示
开发语言·前端·python·dify
霍理迪8 小时前
JS—数组
开发语言·前端·javascript
Surplusx8 小时前
运用VS Code前端开发工具完成微博发布案例
前端·html
哪里不会点哪里.8 小时前
Nginx 详解:高性能 Web 服务器与反向代理
服务器·前端·nginx
Ulyanov8 小时前
超越平面:用impress.js打造智能多面棱柱演示器
开发语言·前端·javascript·平面
HWL56798 小时前
vue抽离自定义指令的方法
前端·javascript·vue.js
2601_949575868 小时前
Flutter for OpenHarmony艺考真题题库+个人信息管理实现
java·前端·flutter
CC码码8 小时前
基于WebGPU实现canvas高级滤镜
前端·javascript·webgl·fabric