// stores/user.js import { defineStore } from "pinia"; import { ref, computed } from "vue"; import { myfuncs } from "@/myfunc.js"; import { my_network_func } from "@/my_network_func"; // 组合式 API 写法 (推荐) export const useUserStore = defineStore("user", () => { // 状态 (State) const userInfo = ref(null); const user = ref(null); const userCookie = ref(null); const isLoggedIn = ref(false); const cookiesQualified = () => { //返回一个合格的cookie 就是没过期的cookie //如果cookie没过期直接返回,如果过期 顺便logout var cookieTimeout = userCookie.value.ExpiresAt; if (new Date(cookieTimeout) < new Date()) { //过期了 logout(); } return userCookie.value; }; const getUserBirthday = () => { if (userInfo.value != null) { const date = new Date(userInfo.value.Birthdate); // 获取年月日并格式化 const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); const formattedDate = `${year}-${month}-${day}`; return formattedDate; } return ""; }; const getUserAvatarPath = () => { if (userInfo.value != null) { if (userInfo.value.AvatarPath != "") { return "/api/static/avatar/"+userInfo.value.AvatarPath; } } return "/ava.svg"; }; const getUserInfoFromCookie = () => { my_network_func.postJson("/users/getinfo", {}, (r) => { //console.log(r); switch (r.statusCode) { case 200: switch (r.data.err_code) { case 0: user.value = r.data.return.user; if (r.data.return.userInfo) { userInfo.value = r.data.return.userInfo; } else { userInfo.value = null; } break; default: break; } break; default: break; } }); }; const logout = () => { userCookie.value = null; isLoggedIn.value = false; myfuncs.dele("userCookie"); myfuncs.deleT("userCookie"); }; const login = (cookie) => { userCookie.value = cookie; isLoggedIn.value = true; //这里应该判读cookie的实效性 userCookie.value = cookiesQualified(); //到这里cookie应该是有效的,尝试获取用户info,因为有的info可能是隐藏的 所以用post携带当前cookie去请求用户info getUserInfoFromCookie(); }; const cookieUpdata = (cookie) => { userCookie.value = cookie; myfuncs.saveJsonT("userCookie", cookie); if (cookie.Remember) { //长期保存cookie myfuncs.saveJson("userCookie", cookie); } }; const loginFromStoreCookie = () => { //从store获取cookie var cookie = myfuncs.loadJsonT("userCookie"); if (cookie) { login(cookie); } else { cookie = myfuncs.loadJson("userCookie"); if (cookie) { login(cookie); } else { logout(); } } }; return { user, userInfo, userCookie, isLoggedIn, getUserAvatarPath, getUserBirthday, getUserInfoFromCookie, logout, login, loginFromStoreCookie, cookieUpdata, }; });