he wei
2025-04-23 b9bd29a1a81f6f7de479e3cc3fdfe3d85fc660bf
src/store/user.js
@@ -1,21 +1,175 @@
import { defineStore } from "pinia";
import { defineStore, storeToRefs } from "pinia";
import pinia from '@/utils/pinia';
import { ref } from "vue";
import { login as apiLogin, logout as apiLogout, getPermits } from '@/api/user';
import { getToken, removeToken, setToken, getUname, setUname, removeUname, getUrole, setUrole, removeUrole, getSessionId, setSessionId, removeSessionId } from '@/utils/auth';
import router, { resetRouter } from '@/router';
import { useTagsViewStore } from './tagsView';
import { usePermissionStore } from './permission';
console.log('pinia', pinia, '=============');
export const useUserStore = defineStore("user", () => ({
  state() {
    return {
      uid: localStorage.getItem("uid"),
      uname: localStorage.getItem("uname")
const tagsViewStore = useTagsViewStore(pinia);
const permissionStore = usePermissionStore(pinia);
const { delAllViews } = tagsViewStore;
const { generateRoutes } = permissionStore;
export const useUserStore = defineStore("user", () => {
  const uid = ref(localStorage.getItem("uid"));
  const uname = ref(localStorage.getItem("uname"));
  const token = ref(getToken());
  const urole = ref(getUrole());
  const sessionid = ref(getSessionId());
  const introduction = ref("");
  const roles = ref([]);
  const avatar = ref("");
  let _permits = localStorage.getItem("permits");
  const permits = ref(_permits ? JSON.parse(_permits) : []);
  function updateSessionId(_sessionid) {
    setSessionId(_sessionid);
    sessionid.value = _sessionid;
  }
  function setPermits(_data) {
    permits.value = Array.isArray(_data) ? _data : [];
    localStorage.setItem('permits', JSON.stringify(_data));
  }
  function updatePermits() {
    getPermits().then(res => {
      setPermits(res.data2);
    }).catch(error => {
        console.log(error);
    });
  }
  function login(userInfo) {
    const { username, password } = userInfo;
    return new Promise((resolve, reject) => {
      apiLogin(username.trim(), password).then((response) => {
        if (response.code === 1 && response.data) {
          let name = response.data2.uname;
          let role = response.data2.urole;
          uname.value = name;
          setUname(name);
          token.value = 'admin';
          setToken('admin');
          urole.value = role;
          setUrole(role);
          resolve(response);
          updatePermits();
        } else {
          // reject('用户名/密码错误');
          reject(response.msg);
        }
      }).catch(error => {
        reject(error);
      });
    });
  }
  function getInfo() {
    return new Promise((resolve) => {
      const data = {
        roles: ['admin'],
        introduction: 'I am a super administrator',
        avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
        // name: 'Super Admin'
        name: getUname()
    };
  },
  actions: {
    setName(value) {
      this.uname = value;
      const { roles: _roles, name, avatar: _avatar, introduction: _introduction } = data;
      roles.value = _roles;
      uname.value = name;
      avatar.value = _avatar;
      introduction.value = _introduction;
      resolve(data);
    });
  }
  function logout() {
    return new Promise((resolve, reject) => {
      apiLogout().then(() => {
        token.value = '';
        roles.value = [];
        removeToken();
        removeUname();
        removeUrole();
        resetRouter();
        // reset visited views and cached views
        // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
        delAllViews();
        resolve();
      }).catch(error => {
        reject(error);
      });
    });
  }
  function resetToken() {
    token.value = '';
    roles.value = [];
    removeToken();
  }
  async function changeRoles(role) {
    const _token = role + '-token';
    token.value = _token;
    setToken(_token);
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    const infoRes = await getInfo();
    let _roles = [];
    if (infoRes.roles) {
      _roles = infoRes.roles;
    }
    resetRouter();
    // generate accessible routes map based on roles
    console.log('debug', _roles, '=============');
    const accessRoutes = await generateRoutes(_roles);
    // dynamically add accessible routes
    // router.addRoutes(accessRoutes);
    accessRoutes.forEach(item => {
      router.addRoute(item);
    });
    // reset visited views and cached views
    delAllViews();
  }
  function setName(value) {
    uname.value = value;
      localStorage.setItem("uname", value);
    },
    setId(value) {
      this.uid = value;
  }
  function setId(value) {
    uid.value = value;
      localStorage.setItem("uid", value);
    },
  },
  getters: {},
}));
  }
  return {
    uid,
    uname,
    permits,
    token,
    urole,
    sessionid,
    introduction,
    roles,
    avatar,
    login,
    logout,
    getInfo,
    resetToken,
    changeRoles,
    setName,
    setId,
    updateSessionId
  }
});