Przeglądaj źródła

feat: 登录页面及其多模块跳转逻辑

lvkun996 2 lat temu
rodzic
commit
690c0f8f16

+ 1 - 1
src/api/user/index.ts

@@ -1,7 +1,7 @@
 import request from '@/service/request'
 
 export const login = (data: USER.Params.Login) => {
-  return request<string>({
+  return request<USER.Tenant.Detail>({
     url: '/auth/login',
     method: 'POST',
     data

+ 1 - 2
src/controller/user/index.ts

@@ -3,8 +3,7 @@ import { message } from 'ant-design-vue'
 
 export class UserController {
   static async login (data: USER.Params.Login) {
-    await login(data)
-    message.success('登录成功')
+    return await login(data)
   }
 
   static async page (queryState: USER.Params.Query) {

+ 3 - 3
src/hooks/effect.ts

@@ -60,7 +60,7 @@ export const usePort = (title: string) => {
   } else if (title === '用户群组') {
     setBaseUrl('/user')
   } else {
-    setBaseUrl('/')
+    setBaseUrl('/user')
   }
 }
 
@@ -103,7 +103,7 @@ export const useDeviceResolution = (cb: Function) => {
 export const useModule = () => {
   const route = useRoute()
   return {
-    name: route.matched[0].path,
-    path: 'xxx'
+    name: route.matched[0].name,
+    path: route.matched[0].path
   }
 }

+ 1 - 0
src/service/request.ts

@@ -32,6 +32,7 @@ const redirectUrl = () => {
 }
 
 instance.interceptors.request.use(config => {
+  config.headers.Authentication = JSON.parse(window.localStorage.getItem('userInfo') as string).token
   return config
 }, function (error) {
   return Promise.reject(error)

+ 19 - 2
src/store/modules/user/index.ts

@@ -1,25 +1,40 @@
-import { Modal } from 'ant-design-vue'
+import { Modal, message } from 'ant-design-vue'
 import { defineStore } from 'pinia'
 import { reactive, h } from 'vue'
 import { useSchedulerOnce } from 'flicker-vue-hooks'
 import { UserController } from '@/controller'
+import { useRouter, useRoute } from 'vue-router'
 
 export const useUserStore = defineStore('userStore', () => {
+  const router = useRouter()
+  const route = useRoute()
+
   const userInfo = reactive({})
 
   const clearUserInfo = () => {
     return new Promise((resolve) => {
       // 做些什么
+      message.loading('清除用户信息中......')
+      window.localStorage.removeItem('userInfo')
       useSchedulerOnce(() => resolve(true), 500)
     })
   }
 
   const login = async (data: USER.Params.Login) => {
     // 存储用户信息 跳转页面
-    await UserController.login({
+    const { data: tenant, code } = await UserController.login({
       ...data,
       password: encryptPassWord(data.password)
     })
+    if (code === 200) {
+      window.localStorage.setItem('userInfo', JSON.stringify(tenant))
+      message.success('登录成功, 正在为您跳转页面...')
+      if (route.query.redirectUrl) {
+        router.push({ path: route.query.redirectUrl as string })
+      } else {
+        router.push({ path: router.getRoutes()[0].path })
+      }
+    }
   }
 
   const openUserInfoModal = () => {
@@ -44,7 +59,9 @@ export const useUserStore = defineStore('userStore', () => {
       onCancel: () => {},
       onOk: async () => {
         await clearUserInfo()
+        message.success('登出成功')
         // 退出
+        router.push({ path: '/login' })
       }
     })
   }

+ 11 - 0
src/type/user.d.ts

@@ -14,6 +14,17 @@ declare namespace USER {
 
   }
 
+  namespace Tenant {
+    interface Detail {
+      'id':'' // 用户id
+      'account':'' // 用户账号
+      'email':'' // 用户邮箱
+      'label':'' // 用户名称
+      'tenantId':'' // 租户id
+      'token':'' // 用户token
+    }
+  }
+
   namespace User {
     interface Detail {
       id?: string