root vor 3 Jahren
Ursprung
Commit
45382193d6
4 geänderte Dateien mit 401 neuen und 8 gelöschten Zeilen
  1. 6 6
      src/store/modules/user.js
  2. 166 0
      src/utils/localUserInfo.js
  3. 225 0
      src/utils/tool.js
  4. 4 2
      src/views/login/index.vue

+ 6 - 6
src/store/modules/user.js

@@ -1,6 +1,7 @@
 import { login, logout, getInfo, isLoginVerify } from '@/api/user'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 import router, { resetRouter } from '@/router'
+import { updateLoginAllInfo, clear } from '@/utils/localUserInfo'
 
 const state = {
   token: getToken(),
@@ -42,15 +43,15 @@ const actions = {
         password: userInfo.password
       }
     }
-    console.log('111',pageId)
     return new Promise((resolve, reject) => {
       login(requestData, pageId).then(response => {
-        const { data } = response
-        console.log('resp----->', response)
-        commit('SET_TOKEN', data.token)
-        setToken(data.token)
+        // 更新本地accessToken
+        updateLoginAllInfo(response.data)
+        commit('SET_TOKEN', response.data.accessToken)
+        setToken(response.data.accessToken)
         resolve()
       }).catch(error => {
+        clear()
         reject(error)
       })
     })
@@ -126,7 +127,6 @@ const actions = {
       })
     })
   },
-
   // remove token
   resetToken({ commit }) {
     return new Promise(resolve => {

+ 166 - 0
src/utils/localUserInfo.js

@@ -0,0 +1,166 @@
+import tool from './tool'
+import router from '@/router'
+
+export function accessToken (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('accessToken')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('accessToken')
+    return
+  }
+  localStorage.setItem('accessToken', arg[0])
+}
+
+export function accessTokenUpdateAt (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('accessTokenUpdateAt')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('accessTokenUpdateAt')
+    return
+  }
+  localStorage.setItem('accessTokenUpdateAt', arg[0])
+}
+
+export function accessTokenExpiresIn (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('accessTokenExpiresIn')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('accessTokenExpiresIn')
+    return
+  }
+  localStorage.setItem('accessTokenExpiresIn', arg[0])
+}
+
+export function refreshToken (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('refreshToken')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('refreshToken')
+    return
+  }
+  localStorage.setItem('refreshToken', arg[0])
+}
+
+export function refreshTokenUpdateAt (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('refreshTokenUpdateAt')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('refreshTokenUpdateAt')
+    return
+  }
+  localStorage.setItem('refreshTokenUpdateAt', arg[0])
+}
+
+export function refreshTokenExpiresIn (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('refreshTokenExpiresIn')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('refreshTokenExpiresIn')
+    return
+  }
+  localStorage.setItem('refreshTokenExpiresIn', arg[0])
+}
+
+export function loginTimestamp (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('loginTimestamp')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('loginTimestamp')
+    return
+  }
+  localStorage.setItem('loginTimestamp', arg[0])
+}
+
+export function baseData (...arg) {
+  if (arg.length === 0) {
+    return JSON.parse(localStorage.getItem('baseData'))
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('baseData')
+    return
+  }
+  localStorage.setItem('baseData', JSON.stringify(arg[0]))
+}
+
+export function clear() {
+  localStorage.removeItem('userId')
+  localStorage.removeItem('userName')
+  localStorage.removeItem('accessToken')
+  localStorage.removeItem('accessTokenExpiresIn')
+  localStorage.removeItem('accessTokenUpdateAt')
+  localStorage.removeItem('refreshToken')
+  localStorage.removeItem('refreshTokenExpiresIn')
+  localStorage.removeItem('refreshTokenUpdateAt')
+  localStorage.removeItem('loginTimestamp')
+  localStorage.removeItem('baseData')
+  localStorage.removeItem('baseInfo')
+}
+
+export function userId(...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('userId')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('userId')
+    return
+  }
+  localStorage.setItem('userId', arg[0])
+}
+
+export function userName (...arg) {
+  if (arg.length === 0) {
+    return localStorage.getItem('userName')
+  }
+  if (arg[0] === '') {
+    localStorage.removeItem('userName')
+    return
+  }
+  localStorage.setItem('userName', arg[0])
+}
+
+export function updateLoginAllInfo (response) {
+  // 更新本地accessToken
+  accessToken(response.accessToken)
+  accessTokenExpiresIn(response.accessTokenExpiresIn)
+  accessTokenUpdateAt(response.accessTokenUpdateAt)
+  refreshToken(response.refreshToken)
+  refreshTokenExpiresIn(response.refreshTokenExpiresIn)
+  refreshTokenUpdateAt(response.refreshTokenUpdateAt)
+  loginTimestamp(response.accessTokenUpdateAt)
+}
+
+export function hasLogin() {
+  let accessToken = accessToken()
+  if (!accessToken) {
+    return false
+  }
+  // 检测会员的refreshToken是否已经失效,如果已经失效,那么则清空登录信息,返回失败
+  let refreshToken = refreshToken()
+  let refreshTokenExpiresIn = refreshTokenExpiresIn()
+  let refreshTokenUpdateAt = refreshTokenUpdateAt()
+  if (refreshToken && refreshTokenExpiresIn && parseInt(refreshTokenExpiresIn) - 30 + parseInt(refreshTokenUpdateAt) > parseInt(tool.getTimestamp())) {
+    return true
+  } else {
+    clear()
+    // 跳转到登录页
+    if (router.currentRoute.path !== '/login') {
+      router.push('/login')
+    }
+    return false
+  }
+}
+
+export function logout() {
+  clear()
+  // 跳转到登录页
+  if (router.currentRoute.path !== '/login') {
+    router.push('/login')
+  }
+}

+ 225 - 0
src/utils/tool.js

@@ -0,0 +1,225 @@
+// import errorCode from './errorCode'
+// import baseInfo from './baseInfo'
+// import {PRICE_IS_ROUND,SERVER_API_HTTP_TYPE,SERVER_API_DOMAIN,CDN_BASE_URL} from './config'
+import localUserInfo from "@/utils/localUserInfo";
+
+let tool = {
+  /**
+   * 设置JS存在客户端的Storage值
+   * @param key
+   * @param value
+   */
+  setStorage(key, value) {
+    localStorage.setItem(key, value)
+  },
+  /**
+   * 获取Storage值
+   * @param key
+   * @returns {string | null}
+   */
+  getStorage(key) {
+    return localStorage.getItem(key)
+  },
+  /**
+   * 移除Storage值
+   * @param key
+   */
+  removeStorage(key) {
+    localStorage.removeItem(key)
+  },
+  /**
+   * 获取当前时间戳(精确到秒)
+   * @returns {number}
+   */
+  getTimestamp(date = null) {
+    let days = baseInfo.daysDiff()
+    let dateObj
+    if (date !== null) {
+      dateObj = new Date(date)
+    } else {
+      dateObj = new Date()
+    }
+    return Math.round(dateObj.getTime() / 1000 + (days * 86400))
+  },
+  formatDate(timestamp, withTime = true) {
+    let newDate = new Date()
+    timestamp = parseInt(timestamp)
+    if (timestamp) {
+      newDate.setTime(timestamp * 1000)
+    } else {
+      return ''
+    }
+    let Y = newDate.getFullYear() + '-'
+    let M = (newDate.getMonth() + 1 < 10 ? '0' + (newDate.getMonth() + 1) : newDate.getMonth() + 1) + '-'
+    let D = (newDate.getDate() < 10 ? '0' + (newDate.getDate()) : newDate.getDate()) + ' '
+    let h = (newDate.getHours() < 10 ? '0' + newDate.getHours() : newDate.getHours()) + ':'
+    let m = (newDate.getMinutes() < 10 ? '0' + newDate.getMinutes() : newDate.getMinutes()) + ':'
+    let s = (newDate.getSeconds() < 10 ? '0' + newDate.getSeconds() : newDate.getSeconds())
+    if (withTime) return Y + M + D + h + m + s
+    return Y + M + D
+  },
+  /**
+   * 处理错误结果
+   * @param error
+   * @returns {{message: string, todo: *}}
+   */
+  errorHandle(error) {
+    let message = ''
+    let status = 0
+    let todo
+    if (errorCode.has(error)) {
+      let errorResult = errorCode.get(error)
+      message = errorResult.message
+      status = errorResult.status ? errorResult.status : 0
+      todo = errorResult.todo
+    } else {
+      message = error.message
+      todo = null
+      status = error.data.status ? error.data.status : 0
+    }
+    if (todo || status === 401) {
+      message = todo?'未获得授权,请重新登录':(message==='Your request was made with invalid credentials.'?'未获得授权,请重新登录':message)
+      localUserInfo.logout()
+    }
+    if (todo || status === 402) {
+      message = todo?'长时间未进行操作,请重新登录':(message==='Connection not operated for too long' ?'长时间未进行操作,请重新登录' :message)
+      localUserInfo.logout()
+    }
+    return {message, todo, status}
+  },
+  /**
+   * 解析URL地址
+   * @param url
+   * var myURL = parseURL('http://abc.com:8080/dir/index.html?id=255&m=hello#top');
+   myURL.file; // = 'index.html'
+   myURL.hash; // = 'top'
+   myURL.host; // = 'abc.com'
+   myURL.query; // = '?id=255&m=hello'
+   myURL.params; // = Object = { id: 255, m: hello }
+   myURL.path; // = '/dir/index.html'
+   myURL.segments; // = Array = ['dir', 'index.html']
+   myURL.port; // = '8080'
+   myURL.protocol; // = 'http'
+   myURL.source; // = 'http://abc.com:8080/dir/index.html?id=255&m=hello#top'
+   * @returns {{source: *, protocol: string, host: string, port: string, query: string, params, file: string | *, hash: string, path: string, relative: string | *, segments: string[]}}
+   */
+  parseURL(url) {
+    let a = document.createElement('a')
+    a.href = url
+    return {
+      source: url,
+      protocol: a.protocol.replace(':', ''),
+      host: a.hostname,
+      port: a.port,
+      query: a.search,
+      params: (function () {
+        let waitUrl = a.hash.replace(/^#\/[\-_a-zA-Z0-9]+\?/, '\?') || a.search
+        let ret = {},
+          seg = waitUrl.replace(/^\?/, '').split('&'),
+          len = seg.length,
+          i = 0,
+          s
+        for (; i < len; i++) {
+          if (!seg[i]) {
+            continue
+          }
+          s = seg[i].split('=')
+          ret[s[0]] = s[1]
+        }
+        return ret
+      })(),
+      file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],
+      hash: a.hash.replace('#', ''),
+      path: a.pathname.replace(/^([^\/])/, '/$1'),
+      relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],
+      segments: a.pathname.replace(/^\//, '').split('/')
+    }
+  },
+  removeFromArr(arr, item) {
+    for (let i = arr.length - 1; i >= 0; i--) {
+      if (arr[i] === item) {
+        arr.splice(i, 1)
+        return arr
+      }
+    }
+  },
+  isInArray(arr, value) {
+    for (let i in arr) {
+      if (value === arr[i]) {
+        return true
+      }
+    }
+    return false
+  },
+  isString(val) {
+    return typeof val === 'string' || val instanceof String
+  },
+  /**
+   * 格式化金额数值为两位小数,是否四舍五入
+   * @param val
+   * @returns {string}
+   */
+  formatPrice(val) {
+    val = Number.parseFloat(val)
+    if (PRICE_IS_ROUND) {
+      return val.toFixed(2)
+    } else {
+      val = val.toFixed(3)
+      return val.substring(0, val.lastIndexOf('.') + 3)
+    }
+  },
+  /**
+   * 根据状态返回颜色
+   * @param val
+   * @returns {string}
+   */
+  statusType(val) {
+    switch (val) {
+      case '0':
+        return 'info'
+        break
+      case '1':
+        return ''
+        break
+      case '2':
+        return 'danger'
+        break
+      case '3':
+        return 'warning'
+        break
+      case '4':
+        return 'success'
+        break
+      default:
+        return 'info'
+    }
+  },
+  sum(arr) {//求数组总和
+    var s = 0;
+    for (var i=arr.length-1; i>=0; i--) {
+        s += arr[i];
+    }
+    return s;
+  },
+    /**
+     * 获取table显示高度
+     * @param hasStatusBar
+     * @returns {number}
+     */
+    getTableHeight(hasStatusBar = false) {
+        if (hasStatusBar) return window.innerHeight - 320
+        return window.innerHeight - 260
+    },
+
+  /**
+   * 拼装图片地址.
+   * @param imageUrl
+   * @param path
+   * @returns {string}
+   */
+  getLocaleLink(imageUrl, path = '') {
+      return imageUrl.indexOf('http') > -1 ? imageUrl : `${CDN_BASE_URL}${path}${imageUrl}`;
+  },
+}
+
+export default tool

+ 4 - 2
src/views/login/index.vue

@@ -156,7 +156,6 @@ export default {
   },
   created() {
     // window.addEventListener('storage', this.afterQRScan)
-    console.log('created')
     this.siteConfig()
   },
   mounted() {
@@ -195,11 +194,14 @@ export default {
             pageId: this.pageId,
             isLoginVerify: this.isLoginVerify
           }
-          console.log('form---->',loginData)
           this.$store.dispatch('user/login', loginData)
             .then((response) => {
               this.$router.push({ path: this.redirect || '/', query: this.otherQuery })
               this.loading = false
+              // getUserInfo
+              // getBaseInfo
+              // getData
+              // 
             })
             .catch(error => {
               this.refreshLoginVerifyStatus();