| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import { defineStore } from "pinia";
- import { ref } from "vue";
- import {
- login as apiLogin,
- register as apiRegister,
- profile,
- newGuest,
- } from "@/services/api";
- import { useStorage } from "@vueuse/core";
- import { VipLevel } from "@/types/vip";
- // 主页浏览状态接口定义
- interface HomePageState {
- selectedMenu: string;
- currentPage: number;
- selectedSort: string;
- scrollPosition: number;
- isSearchMode: boolean;
- currentSearchKeyword: string;
- videoList?: any[];
- totalPages?: number;
- totalCount?: number;
- }
- export const useUserStore = defineStore("user", () => {
- const token = useStorage("token", "");
- const userInfo = ref<any>({});
- const userManuallyLoggedOut = useStorage("userManuallyLoggedOut", false);
- // 添加主页浏览状态存储
- const homePageState = ref<HomePageState>({
- selectedMenu: "",
- currentPage: 1,
- selectedSort: "time",
- scrollPosition: 0,
- isSearchMode: false,
- currentSearchKeyword: "",
- });
- const setToken = (newToken: string) => {
- token.value = newToken;
- };
- const setUserInfo = (info: any) => {
- userInfo.value = info;
- };
- // 保存主页浏览状态
- const saveHomePageState = (state: Partial<HomePageState>) => {
- homePageState.value = { ...homePageState.value, ...state };
- };
- // 获取主页浏览状态
- const getHomePageState = (): HomePageState => {
- return homePageState.value;
- };
- // 获取用户VIP等级
- const getVipLevel = (): VipLevel => {
- return userInfo.value?.vipLevel || VipLevel.GUEST;
- };
- const login = async (username: string, password: string) => {
- const response = await apiLogin(username, password);
- setToken(response.token);
- setUserInfo(response.user);
- userManuallyLoggedOut.value = false;
- return response;
- };
- const register = async (
- name: string,
- password: string,
- email?: string,
- phone?: string,
- code?: string
- ) => {
- const response = await apiRegister(name, password, email, phone, code);
- setToken(response.token);
- setUserInfo(response.user);
- userManuallyLoggedOut.value = false;
- return response;
- };
- const sync = async () => {
- const response = await profile();
- setUserInfo(response);
- };
- const logout = () => {
- token.value = "";
- userInfo.value = {};
- userManuallyLoggedOut.value = true;
- };
- const createGuest = async (code?: string, ref?: string) => {
- try {
- const response = await newGuest(code, ref);
- setToken(response.token);
- setUserInfo(response.user);
- userManuallyLoggedOut.value = false;
- return response;
- } catch (error) {
- console.error("创建游客账号失败", error);
- return null;
- }
- };
- return {
- token,
- userInfo,
- userManuallyLoggedOut,
- setUserInfo,
- getVipLevel,
- login,
- register,
- logout,
- sync,
- createGuest,
- homePageState,
- saveHomePageState,
- getHomePageState,
- };
- });
|