xiongzhu 2 年之前
父節點
當前提交
288c92885b

+ 9 - 1
src/App.vue

@@ -4,7 +4,7 @@ import { NaiveProvider } from '@/components/common'
 import { useTheme } from '@/hooks/useTheme'
 import { useLanguage } from '@/hooks/useLanguage'
 import { emitter } from '@/plugins'
-import { onMounted, ref } from 'vue'
+import { onMounted, ref, provide } from 'vue'
 import { useRouter } from 'vue-router'
 import { useBasicLayout } from '@/hooks/useBasicLayout'
 
@@ -21,6 +21,14 @@ emitter.on('changeVipShow', res => {
         emitter.emit('vipShowChat', !!res)
     }
 })
+function login() {
+    if (isMobile.value) {
+        router.replace({ name: 'login' })
+    } else {
+        router.replace({ name: 'home', query: { login: 'true' } })
+    }
+}
+provide('login', login)
 </script>
 
 <template>

+ 1 - 14
src/components/common/UserAvatar.vue

@@ -1,12 +1,11 @@
 <script setup lang="ts">
 import { computed } from 'vue'
-import { NAvatar, avatarProps, NButton } from 'naive-ui'
+import { NAvatar, avatarProps } from 'naive-ui'
 import { useUserStore, useUserMemberStore } from '@/store'
 import defaultAvatar from '@/assets/avatar.png'
 import { isString } from '@/utils/is'
 import { useBasicLayout } from '@/hooks/useBasicLayout'
 import { useRouter } from 'vue-router'
-import { emitter } from '@/plugins'
 
 const userStore = useUserStore()
 const userMemberStore = useUserMemberStore()
@@ -24,21 +23,9 @@ const props = defineProps({
     }
 })
 
-const { isMobile } = useBasicLayout()
-const router = useRouter()
 const isVip = computed(() => {
     return userMemberStore.isVip()
 })
-function goVip() {
-    emitter.emit('changeVipShow', true)
-    // if (isMobile.value) {
-    //     router.push({
-    //         name: 'vip'
-    //     })
-    // } else {
-
-    // }
-}
 </script>
 
 <template>

+ 1 - 1
src/router/permission.ts

@@ -17,7 +17,7 @@ export function setupPageGuard(router: Router) {
                 await userStore.fetch()
                 next()
             } catch (error) {
-                next({ name: isMobile ? 'home' : 'login' })
+                next({ name: isMobile ? 'home' : 'login', query: { login: 'true' } })
             }
         } else if (!userMemberStore.userMember.planId) {
             try {

+ 4 - 1
src/utils/request/axios.ts

@@ -1,5 +1,5 @@
 import axios, { type AxiosResponse } from 'axios'
-import { useAuthStore } from '@/store'
+import { useAuthStore, useUserStore } from '@/store'
 
 const service = axios.create({
     baseURL: import.meta.env.VITE_GLOB_API_URL
@@ -25,6 +25,9 @@ service.interceptors.response.use(
         throw new Error(response.status.toString())
     },
     error => {
+        if (error.response.status === 401) {
+            useUserStore().resetUserInfo()
+        }
         if (error.response && error.response.data) {
             return Promise.reject(error.response.data)
         } else {

+ 11 - 4
src/views/chat/layout/sider/Footer.vue

@@ -4,17 +4,24 @@ import { HoverButton, SvgIcon, UserAvatar } from '@/components/common'
 import { NButton } from 'naive-ui'
 import { useRouter } from 'vue-router'
 import { useBasicLayout } from '@/hooks/useBasicLayout'
-import { useAppStore } from '@/store'
+import { useAppStore, useUserStore } from '@/store'
 import { emitter } from '@/plugins'
-
-const Setting = defineAsyncComponent(() => import('@/components/common/Setting/SettingIndex.vue'))
+import { storeToRefs } from 'pinia'
+import Setting from '@/components/common/Setting/SettingIndex.vue'
+import { inject } from 'vue'
 
 const show = ref(false)
 
 const { isMobile } = useBasicLayout()
 const router = useRouter()
 const appStore = useAppStore()
+const { userInfo } = storeToRefs(useUserStore())
+const login: any = inject('login')
 function goMine() {
+    if (!userInfo.value?.id) {
+        login()
+        return
+    }
     if (isMobile.value) {
         router.push({
             name: 'mine'
@@ -39,6 +46,6 @@ function goMine() {
             </span>
         </HoverButton>
 
-        <Setting v-if="show" v-model:visible="show" />
+        <Setting v-model:visible="show" />
     </footer>
 </template>

+ 9 - 1
src/views/page/HomeView.vue

@@ -146,7 +146,7 @@ import h5Bg from '@/assets/bg_mobile.jpg'
 import pcBg from '@/assets/bg_desktop.jpg'
 import logo from '@/assets/logo.png'
 import { useUserStore } from '@/store'
-import { useRouter } from 'vue-router'
+import { useRouter, useRoute } from 'vue-router'
 import { ref, computed } from 'vue'
 import { UserAvatar, LoginForm } from '@/components/common'
 import { useBasicLayout } from '@/hooks/useBasicLayout'
@@ -164,6 +164,7 @@ import { useStorage } from '@vueuse/core'
 const { isMobile } = useBasicLayout()
 
 const router = useRouter()
+const route = useRoute()
 const userStore = useUserStore()
 const showLogin = ref(false)
 const items = [
@@ -272,6 +273,13 @@ function showConsoleEve() {
         }, 1000)
     }
 }
+
+setTimeout(() => {
+    if (route.query.login) {
+        showLogin.value = true
+        router.replace({ query: {} }).catch(() => {})
+    }
+}, 300)
 </script>
 
 <style lang="less" scoped>