Преглед на файлове

登录相关功能,除了真正的登录流程

任一存 преди 1 година
родител
ревизия
3f6757d34a
променени са 3 файла, в които са добавени 69 реда и са изтрити 6 реда
  1. 9 3
      src/App.vue
  2. 36 0
      src/api.js
  3. 24 3
      src/store/index.js

+ 9 - 3
src/App.vue

@@ -115,7 +115,9 @@ const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
-// todo: 检查持久化保存的登录状态
+// api.checkLoginStatusAndProcess()
+api.getUserFromStorageIfNeed()
+
 if (store.state.loginStatus === store.getters.loginStatusEnum.notLogin && route.name !== 'LoginView') {
   router.push({
     name: 'LoginView',
@@ -147,7 +149,9 @@ function onClickFeedBack() {
 
 function onClickShop() {
   if (store.state.loginStatus === store.getters.loginStatusEnum.wxUser) {
-    isShowFeedBack.value = true
+    router.push({
+      name: 'ShopView'
+    })
   } else {
     ElMessageBox.confirm(
       '需登录后才能体验',
@@ -158,7 +162,9 @@ function onClickShop() {
         type: 'message',
       }
     ).then(() => {
-      isShowFeedBack.value = true
+      router.push({
+        name: 'ShopView'
+      })
     }).catch(() => {
     })
   }

+ 36 - 0
src/api.js

@@ -1,6 +1,42 @@
 import axios from "axios"
 
 export default {
+  checkLoginStatusAndProcess: async function() {
+    const lastToken = localStorage.getItem('token')
+    const lastUserInfoStr = localStorage.getItem('userInfo')
+    if (lastToken && lastUserInfoStr) {
+      const res = await axios({
+        method: 'get',
+        url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/show/checkLogin`,
+        headers: {
+          token: lastToken,
+        }
+      })
+      if (res?.data?.code === 0 && res?.data?.data) {
+        store.commit('setLoginStatus', store.getters.loginStatusEnum.notLogin)
+        store.commit('setToken', lastToken)
+        store.commit('setUserInfo', JSON.parse(lastUserInfoStr))
+        return true
+      } else {
+        store.commit('logoutCallback')
+        return false
+      }
+    } else {
+      store.commit('logoutCallback')
+      return false
+    }
+  },
+  getUserFromStorageIfNeed: function() {
+    if (!store.state.token || !store.state.userInfo) {
+      const lastToken = localStorage.getItem('token')
+      const lastUserInfoStr = localStorage.getItem('userInfo')
+      if (lastToken && lastUserInfoStr) {
+        store.commit('setLoginStatus', store.getters.loginStatusEnum.wxUser)
+        store.commit('setToken', lastToken)
+        store.commit('setUserInfo', JSON.parse(lastUserInfoStr))
+      }
+    }
+  },
   getRelicList: function(searchKey, region) {
     return axios({
       method: 'get',

+ 24 - 3
src/store/index.js

@@ -10,7 +10,10 @@ export default createStore({
   state: {
     haveShownStartUp: true, // 暂定不使用加载页
     loginStatus: loginStatusEnum.notLogin,
-    userName: '',
+    token: '',
+    userInfo: {
+      userName: '',
+    },
   },
   getters: {
     loginStatusEnum() {
@@ -25,8 +28,26 @@ export default createStore({
       state.loginStatus = value
     },
     setUserName(state, value) {
-      state.userName = value
-    }
+      state.uerInfo.userName = value
+    },
+    setToken(state, value) {
+      state.token = value
+      localStorage.setItem('token', value)
+    },
+    setUserInfo(state, value) {
+      state.userInfo = value
+      localStorage.setItem('userInfo', JSON.stringify(value))
+      if (state.userInfo.score === null) {
+        state.userInfo.score = 0
+      }
+    },
+    logoutCallback(state) {
+      state.loginStatus = loginStatusEnum.notLogin
+      state.token = ''
+      localStorage.removeItem('token')
+      state.userInfo = {}
+      localStorage.removeItem('userInfo')
+    },
   },
   actions: {
   },