浏览代码

mod:登录

panqiuyao 9 月之前
父节点
当前提交
f293aaec58

+ 0 - 2
frontend/src/apis/user.ts

@@ -33,8 +33,6 @@ export function sendCode(data:UserRequest) {
 
 // 获取用户组织
 export function getAccountCompany() {
-    console.log('getAccountCompany');
-    console.log('/api/backend/account/get_account_company');
     return GET('/api/backend/account/get_account_company')
 }
 

+ 1 - 9
frontend/src/components/login/index.vue

@@ -192,29 +192,21 @@ const loginRules = reactive({
 
 const handleLogin = async () => {
 
-  const  res = await  useUserInfoStore.login({
+  const  res = await  useUserInfoStore.loginAction({
     "site":1,
     "username":loginForm.username,
     "password":loginForm.password,
     "type": activeTab.value,
     "device":"aigc-photo"
   })
-  console.log('handleLogin');
-  console.log(res);
-  console.log(res.data.is_need_select_company);
   switch(res.data.is_need_select_company){
     case 40006:
-
-      console.log(40006);
       showCompany()
       break;
     case 40007:
-      console.log(40007);
       ElMessage.error('当前没有所属组织')
       break;
     default:
-
-      console.log("default");
       await  useUserInfoStore.getInfo()
       useUserInfoStore.updateLoginShow(false)
         break;

+ 1 - 1
frontend/src/router/index.ts

@@ -6,7 +6,7 @@ import { authGuard } from './plugins/authGuard'
 const routes: RouteRecordRaw[] = [
     {
         path: "/",
-        redirect: "/home"
+        redirect: "/photography/check"
     },
     {
         path: "/home",

+ 7 - 2
frontend/src/router/plugins/authGuard.ts

@@ -1,5 +1,6 @@
 import { Router, useRoute } from 'vue-router'
 import useUserInfo from "@/stores/modules/user";
+import tokenInfo from "@/stores/modules/token";
 const route = useRoute()
 /**
  * 除了注册页,当没有 token 则跳转至注册页
@@ -8,11 +9,15 @@ const route = useRoute()
 
 
 export function authGuard(router: Router) {
-  router.beforeEach((to, from, next) => {
+  router.beforeEach(async (to, from, next) => {
     /* 跳过路由守卫 */
 
     const useUserInfoStore = useUserInfo();
-    if (useUserInfoStore.token /* 已登录 */) {
+    const tokenInfoStore = tokenInfo();
+    if (tokenInfoStore.getToken /* 已登录 */) {
+      if(!useUserInfoStore.userInfo.id){
+          await useUserInfoStore.getInfo()
+      }
       return next()
     } else {
       if(to.meta.noAuth)  return next()

+ 22 - 0
frontend/src/stores/modules/token.ts

@@ -0,0 +1,22 @@
+import { defineStore } from 'pinia';
+import { ref, computed } from 'vue';
+
+
+
+export const tokenInfo = defineStore('tokenInfo',()=>{
+  const token = ref('')
+  const getToken = computed(()=>token.value)
+  const updateToken = (data:string)=>{
+    token.value = data
+  }
+  return {
+    token,
+    getToken,
+    updateToken
+  }
+},{
+  persist:true,
+})
+
+
+export default tokenInfo;

+ 86 - 55
frontend/src/stores/modules/user.ts

@@ -1,64 +1,95 @@
-// src/stores/index.ts
 import { defineStore } from 'pinia';
-import { getUserInfo,login } from '@/apis/user'
+import { ref, computed } from 'vue';
+import { getUserInfo, login } from '@/apis/user';
+import tokenInfo from '@/stores/modules/token';
 
 
-const useUserInfo = defineStore('userInfo', {
-    state: () => ({
-        token: '',
-        loginShow:false,
-        userInfo: {},
-    }),
-    actions: {
-        // 添加必要的 actions
-        updateUserInfo(data: any ) {
-            this.userInfo = data;
-        },
-        // 添加必要的 actions
-        updateToken(data: string ) {
-            this.token = data;
-        },
-        updateLoginShow(data: boolean) {
-            this.loginShow = data;
-        },
-        async login(data: any ) {
-            return new Promise(async (resolve, reject) => {
-                const res = await login(data).catch(error => {
-                    reject(error)
-                })
-               await this.updateToken(res.data.token)
-             //  this.updateLoginShow(false)
-               resolve(res)
-            })
-        },
-        async getInfo(){
-            return new Promise(async (resolve, reject) => {
-                const res = await  getUserInfo()
-                const { data } = res
-                if (!data) {
-                    this.updateToken({})
-                    reject('请重新登录!')
-                }
-                this.updateUserInfo(data)
-                resolve(data)
+export const useUserInfo = defineStore('userInfo', () => {
+  // 状态(State)
 
-            })
-        },
-        loginExtra(){
+  const tokenInfoStore = new tokenInfo()
 
-        }
-    },
-    getters: {
-        // 添加必要的 getters
-        getToken(state): string {
-            return state.token;
-        }
-    },
-    persist: {
-        key: 'userinfo',
-        storage: localStorage,
-        paths: ['token']
+  const loginShow = ref(false); // 控制登录弹窗的显示状态
+  const userInfo = ref({}); // 用户的详细信息
+
+  // Actions(操作)
+
+  /**
+   * 更新用户信息。
+   *
+   * @param {any} data - 新的用户信息数据。
+   */
+  const updateUserInfo = (data: any) => {
+    userInfo.value = data;
+  };
+
+  /**
+   * 更新用户的登录令牌。
+   *
+   * @param {string} data - 新的登录令牌。
+   */
+  const updateToken = (data: string) => {
+    tokenInfoStore.updateToken(data)
+  };
+
+  /**
+   * 更新登录弹窗的显示状态。
+   *
+   * @param {boolean} data - 是否显示登录弹窗。
+   */
+  const updateLoginShow = (data: boolean) => {
+    loginShow.value = data;
+  };
+
+  /**
+   * 执行用户登录操作。
+   *
+   * @param {any} data - 登录所需的用户凭据。
+   * @returns {Promise<any>} 登录接口返回的结果。
+   * @throws {Error} 如果登录失败,抛出错误。
+   */
+  const loginAction = async (data: any) => {
+    try {
+      const res = await login(data); // 调用登录接口
+      await updateToken(res.data.token); // 更新登录令牌
+      await getInfo(); // 获取用户信息
+      return res;
+    } catch (error) {
+      console.error('登录失败:', error);
+      throw error;
+    }
+  };
+
+  /**
+   * 获取用户信息并更新状态。
+   *
+   * @returns {Promise<any>} 用户信息数据。
+   * @throws {Error} 如果获取用户信息失败,抛出错误。
+   */
+  const getInfo = async () => {
+    try {
+      const res = await getUserInfo(); // 调用获取用户信息接口
+      const { data } = res;
+      if (!data) {
+        updateToken(''); // 如果没有数据,清空令牌
+        throw new Error('请重新登录!');
+      }
+      updateUserInfo(data); // 更新用户信息
+      return data;
+    } catch (error) {
+      console.error('获取用户信息失败:', error);
+      throw error;
     }
+  };
+
+  return {
+    loginShow,
+    userInfo,
+    updateUserInfo,
+    updateLoginShow,
+    loginAction,
+    getInfo,
+  };
 });
 
 export default useUserInfo;

+ 3 - 3
frontend/src/utils/http.ts

@@ -1,6 +1,6 @@
 import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
 import { ElMessage as Message, ElMessageBox as MessageBox, ElLoading as Loading } from 'element-plus';
-import  useUserInfo  from '@/stores/modules/user'; // 引入 useUserInfo store
+import  tokenInfo  from '@/stores/modules/token';
 
 // 加载动画的并发管理
 const activeRequests = new Set<string>();
@@ -29,8 +29,8 @@ const service = axios.create({
 service.interceptors.request.use(
     (config: AxiosRequestConfig) => {
         // 在发送请求之前做些什么,例如添加 token
-        const userInfoStore = useUserInfo();
-        const token = userInfoStore.getToken; // 使用 getToken() 获取 token
+        const tokenInfoStore = tokenInfo();
+        const token = tokenInfoStore.getToken; // 使用 getToken() 获取 token
         if (token) {
             config.headers['Authorization'] = `Bearer ${token}`;
         }