mirror of
http://36.133.248.69:3088/admin/RentWeAppFront.git
synced 2026-03-08 09:52:26 +08:00
78 lines
2.5 KiB
JavaScript
78 lines
2.5 KiB
JavaScript
let realAtob
|
||
|
||
const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
|
||
const b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/
|
||
|
||
if (typeof atob !== 'function') {
|
||
realAtob = function (str) {
|
||
str = String(str).replace(/[\t\n\f\r ]+/g, '')
|
||
if (!b64re.test(str)) { throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.") }
|
||
|
||
// Adding the padding if missing, for semplicity
|
||
str += '=='.slice(2 - (str.length & 3))
|
||
var bitmap; var result = ''; var r1; var r2; var i = 0
|
||
for (; i < str.length;) {
|
||
bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 |
|
||
(r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++)))
|
||
|
||
result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255)
|
||
: r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255)
|
||
: String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255)
|
||
}
|
||
return result
|
||
}
|
||
} else {
|
||
// 注意atob只能在全局对象上调用,例如:`const Base64 = {atob};Base64.atob('xxxx')`是错误的用法
|
||
realAtob = atob
|
||
}
|
||
|
||
function b64DecodeUnicode (str) {
|
||
return decodeURIComponent(realAtob(str).split('').map(function (c) {
|
||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
|
||
}).join(''))
|
||
}
|
||
|
||
function getCurrentUserInfo () {
|
||
const token = (__PLATFORM__ === 'h5' || __PLATFORM__ === 'app-plus' ? uni : __GLOBAL__).getStorageSync('uni_id_token') || ''
|
||
const tokenArr = token.split('.')
|
||
if (!token || tokenArr.length !== 3) {
|
||
return {
|
||
uid: null,
|
||
role: [],
|
||
permission: [],
|
||
tokenExpired: 0
|
||
}
|
||
}
|
||
let userInfo
|
||
try {
|
||
userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]))
|
||
} catch (error) {
|
||
throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message)
|
||
}
|
||
userInfo.tokenExpired = userInfo.exp * 1000
|
||
delete userInfo.exp
|
||
delete userInfo.iat
|
||
return userInfo
|
||
}
|
||
|
||
export function uniIdMixin (Vue) {
|
||
Vue.prototype.uniIDHasRole = function (roleId) {
|
||
const {
|
||
role
|
||
} = getCurrentUserInfo()
|
||
return role.indexOf(roleId) > -1
|
||
}
|
||
Vue.prototype.uniIDHasPermission = function (permissionId) {
|
||
const {
|
||
permission
|
||
} = getCurrentUserInfo()
|
||
return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1
|
||
}
|
||
Vue.prototype.uniIDTokenValid = function () {
|
||
const {
|
||
tokenExpired
|
||
} = getCurrentUserInfo()
|
||
return tokenExpired > Date.now()
|
||
}
|
||
}
|