init
This commit is contained in:
		
							
								
								
									
										13
									
								
								utils/auth.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								utils/auth.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
const TokenKey = 'App-Token'
 | 
			
		||||
 | 
			
		||||
export function getToken() {
 | 
			
		||||
  return uni.getStorageSync(TokenKey)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function setToken(token) {
 | 
			
		||||
  return uni.setStorageSync(TokenKey, token)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function removeToken() {
 | 
			
		||||
  return uni.removeStorageSync(TokenKey)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										54
									
								
								utils/common.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								utils/common.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/**
 | 
			
		||||
* 显示消息提示框
 | 
			
		||||
* @param content 提示的标题
 | 
			
		||||
*/
 | 
			
		||||
export function toast(content) {
 | 
			
		||||
  uni.showToast({
 | 
			
		||||
    icon: 'none',
 | 
			
		||||
    title: content
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* 显示模态弹窗
 | 
			
		||||
* @param content 提示的标题
 | 
			
		||||
*/
 | 
			
		||||
export function showConfirm(content) {
 | 
			
		||||
  return new Promise((resolve, reject) => {
 | 
			
		||||
    uni.showModal({
 | 
			
		||||
      title: '提示',
 | 
			
		||||
      content: content,
 | 
			
		||||
      cancelText: '取消',
 | 
			
		||||
      confirmText: '确定',
 | 
			
		||||
      success: function(res) {
 | 
			
		||||
        resolve(res)
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* 参数处理
 | 
			
		||||
* @param params 参数
 | 
			
		||||
*/
 | 
			
		||||
export function tansParams(params) {
 | 
			
		||||
  let result = ''
 | 
			
		||||
  for (const propName of Object.keys(params)) {
 | 
			
		||||
    const value = params[propName]
 | 
			
		||||
    var part = encodeURIComponent(propName) + "="
 | 
			
		||||
    if (value !== null && value !== "" && typeof (value) !== "undefined") {
 | 
			
		||||
      if (typeof value === 'object') {
 | 
			
		||||
        for (const key of Object.keys(value)) {
 | 
			
		||||
          if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
 | 
			
		||||
            let params = propName + '[' + key + ']'
 | 
			
		||||
            var subPart = encodeURIComponent(params) + "="
 | 
			
		||||
            result += subPart + encodeURIComponent(value[key]) + "&"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        result += part + encodeURIComponent(value) + "&"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return result
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								utils/constant.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								utils/constant.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
const constant = {
 | 
			
		||||
   avatar: 'vuex_avatar',
 | 
			
		||||
   name: 'vuex_name',
 | 
			
		||||
   roles: 'vuex_roles',
 | 
			
		||||
   permissions: 'vuex_permissions'
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 export default constant
 | 
			
		||||
							
								
								
									
										6
									
								
								utils/errorCode.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								utils/errorCode.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
export default {
 | 
			
		||||
  '401': '认证失败,无法访问系统资源',
 | 
			
		||||
  '403': '当前操作没有权限',
 | 
			
		||||
  '404': '访问资源不存在',
 | 
			
		||||
  'default': '系统未知错误,请反馈给管理员'
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										51
									
								
								utils/permission.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								utils/permission.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
import store from '@/store'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 字符权限校验
 | 
			
		||||
 * @param {Array} value 校验值
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function checkPermi(value) {
 | 
			
		||||
  if (value && value instanceof Array && value.length > 0) {
 | 
			
		||||
    const permissions = store.getters && store.getters.permissions
 | 
			
		||||
    const permissionDatas = value
 | 
			
		||||
    const all_permission = "*:*:*"
 | 
			
		||||
 | 
			
		||||
    const hasPermission = permissions.some(permission => {
 | 
			
		||||
      return all_permission === permission || permissionDatas.includes(permission)
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    if (!hasPermission) {
 | 
			
		||||
      return false
 | 
			
		||||
    }
 | 
			
		||||
    return true
 | 
			
		||||
  } else {
 | 
			
		||||
    console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 角色权限校验
 | 
			
		||||
 * @param {Array} value 校验值
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function checkRole(value) {
 | 
			
		||||
  if (value && value instanceof Array && value.length > 0) {
 | 
			
		||||
    const roles = store.getters && store.getters.roles
 | 
			
		||||
    const permissionRoles = value
 | 
			
		||||
    const super_admin = "admin"
 | 
			
		||||
 | 
			
		||||
    const hasRole = roles.some(role => {
 | 
			
		||||
      return super_admin === role || permissionRoles.includes(role)
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    if (!hasRole) {
 | 
			
		||||
      return false
 | 
			
		||||
    }
 | 
			
		||||
    return true
 | 
			
		||||
  } else {
 | 
			
		||||
    console.error(`need roles! Like checkRole="['admin','editor']"`)
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										78
									
								
								utils/request.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								utils/request.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
import store from '@/store'
 | 
			
		||||
import config from '@/config'
 | 
			
		||||
import { getToken } from '@/utils/auth'
 | 
			
		||||
import errorCode from '@/utils/errorCode'
 | 
			
		||||
import { toast, showConfirm, tansParams } from '@/utils/common'
 | 
			
		||||
 | 
			
		||||
let timeout = 10000
 | 
			
		||||
const baseUrl = config.baseUrl
 | 
			
		||||
 | 
			
		||||
const request = config => {
 | 
			
		||||
  // 是否需要设置 token
 | 
			
		||||
  const isToken = (config.headers || {}).isToken === false
 | 
			
		||||
  config.header = config.header || {}
 | 
			
		||||
  if (getToken() && !isToken) {
 | 
			
		||||
    config.header['Authorization'] = 'Bearer ' + getToken()
 | 
			
		||||
  }
 | 
			
		||||
  // get请求映射params参数
 | 
			
		||||
  if (config.params) {
 | 
			
		||||
    let url = config.url + '?' + tansParams(config.params)
 | 
			
		||||
    url = url.slice(0, -1)
 | 
			
		||||
    config.url = url
 | 
			
		||||
  }
 | 
			
		||||
  return new Promise((resolve, reject) => {
 | 
			
		||||
	  uni.showLoading({
 | 
			
		||||
	  	title:'加载中'
 | 
			
		||||
	  })
 | 
			
		||||
    uni.request({
 | 
			
		||||
        method: config.method || 'get',
 | 
			
		||||
        timeout: config.timeout ||  timeout,
 | 
			
		||||
        url: config.baseUrl || baseUrl + config.url,
 | 
			
		||||
        data: config.data,
 | 
			
		||||
        header: config.header,
 | 
			
		||||
        dataType: 'json'
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        let [error, res] = response
 | 
			
		||||
        if (error) {
 | 
			
		||||
          toast('后端接口连接异常')
 | 
			
		||||
          reject('后端接口连接异常')
 | 
			
		||||
          return
 | 
			
		||||
        }
 | 
			
		||||
        const code = res.data.code || 200
 | 
			
		||||
        const msg = errorCode[code] || res.data.msg || errorCode['default']
 | 
			
		||||
        if (code === 401) {
 | 
			
		||||
          showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
 | 
			
		||||
            if (res.confirm) {
 | 
			
		||||
              store.dispatch('LogOut').then(res => {
 | 
			
		||||
                uni.reLaunch({ url: '/pages/index' })
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
          reject('无效的会话,或者会话已过期,请重新登录。')
 | 
			
		||||
        } else if (code === 500) {
 | 
			
		||||
          toast(msg)
 | 
			
		||||
          reject('500')
 | 
			
		||||
        } else if (code !== 200) {
 | 
			
		||||
          toast(msg)
 | 
			
		||||
          reject(code)
 | 
			
		||||
        }
 | 
			
		||||
        resolve(res.data)
 | 
			
		||||
		uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
      .catch(error => {
 | 
			
		||||
        let { message } = error
 | 
			
		||||
        if (message === 'Network Error') {
 | 
			
		||||
          message = '后端接口连接异常'
 | 
			
		||||
        } else if (message.includes('timeout')) {
 | 
			
		||||
          message = '系统接口请求超时'
 | 
			
		||||
        } else if (message.includes('Request failed with status code')) {
 | 
			
		||||
          message = '系统接口' + message.substr(message.length - 3) + '异常'
 | 
			
		||||
        }
 | 
			
		||||
        toast(message)
 | 
			
		||||
        reject(error)
 | 
			
		||||
		uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default request
 | 
			
		||||
							
								
								
									
										32
									
								
								utils/storage.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								utils/storage.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
import constant from './constant'
 | 
			
		||||
 | 
			
		||||
// 存储变量名
 | 
			
		||||
let storageKey = 'storage_data'
 | 
			
		||||
 | 
			
		||||
// 存储节点变量名
 | 
			
		||||
let storageNodeKeys = [constant.avatar, constant.name, constant.roles, constant.permissions]
 | 
			
		||||
 | 
			
		||||
const storage = {
 | 
			
		||||
  set: function(key, value) {
 | 
			
		||||
    if (storageNodeKeys.indexOf(key) != -1) {
 | 
			
		||||
      let tmp = uni.getStorageSync(storageKey)
 | 
			
		||||
      tmp = tmp ? tmp : {}
 | 
			
		||||
      tmp[key] = value
 | 
			
		||||
      uni.setStorageSync(storageKey, tmp)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  get: function(key) {
 | 
			
		||||
    let storageData = uni.getStorageSync(storageKey) || {}
 | 
			
		||||
    return storageData[key] || ""
 | 
			
		||||
  },
 | 
			
		||||
  remove: function(key) {
 | 
			
		||||
    let storageData = uni.getStorageSync(storageKey) || {}
 | 
			
		||||
    delete storageData[key]
 | 
			
		||||
    uni.setStorageSync(storageKey, storageData)
 | 
			
		||||
  },
 | 
			
		||||
  clean: function() {
 | 
			
		||||
    uni.removeStorageSync(storageKey)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default storage
 | 
			
		||||
							
								
								
									
										70
									
								
								utils/upload.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								utils/upload.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
import store from '@/store'
 | 
			
		||||
import config from '@/config'
 | 
			
		||||
import { getToken } from '@/utils/auth'
 | 
			
		||||
import errorCode from '@/utils/errorCode'
 | 
			
		||||
import { toast, showConfirm, tansParams } from '@/utils/common'
 | 
			
		||||
 | 
			
		||||
let timeout = 10000
 | 
			
		||||
const baseUrl = config.baseUrl
 | 
			
		||||
 | 
			
		||||
const upload = config => {
 | 
			
		||||
  // 是否需要设置 token
 | 
			
		||||
  const isToken = (config.headers || {}).isToken === false
 | 
			
		||||
  config.header = config.header || {}
 | 
			
		||||
  if (getToken() && !isToken) {
 | 
			
		||||
    config.header['Authorization'] = 'Bearer ' + getToken()
 | 
			
		||||
  }
 | 
			
		||||
  // get请求映射params参数
 | 
			
		||||
  if (config.params) {
 | 
			
		||||
    let url = config.url + '?' + tansParams(config.params)
 | 
			
		||||
    url = url.slice(0, -1)
 | 
			
		||||
    config.url = url
 | 
			
		||||
  }
 | 
			
		||||
  return new Promise((resolve, reject) => {
 | 
			
		||||
      uni.uploadFile({
 | 
			
		||||
        timeout: config.timeout || timeout,
 | 
			
		||||
        url: baseUrl + config.url,
 | 
			
		||||
        filePath: config.filePath,
 | 
			
		||||
        name: config.name || 'file',
 | 
			
		||||
        header: config.header,
 | 
			
		||||
        formData: config.formData,
 | 
			
		||||
        success: (res) => {
 | 
			
		||||
          let result = JSON.parse(res.data)
 | 
			
		||||
          const code = result.code || 200
 | 
			
		||||
          const msg = errorCode[code] || result.msg || errorCode['default']
 | 
			
		||||
          if (code === 200) {
 | 
			
		||||
            resolve(result)
 | 
			
		||||
          } else if (code == 401) {
 | 
			
		||||
            showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => {
 | 
			
		||||
              if (res.confirm) {
 | 
			
		||||
                store.dispatch('LogOut').then(res => {
 | 
			
		||||
                  uni.reLaunch({ url: '/pages/index' })
 | 
			
		||||
                })
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
            reject('无效的会话,或者会话已过期,请重新登录。')
 | 
			
		||||
          } else if (code === 500) {
 | 
			
		||||
            toast(msg)
 | 
			
		||||
            reject('500')
 | 
			
		||||
          } else if (code !== 200) {
 | 
			
		||||
            toast(msg)
 | 
			
		||||
            reject(code)
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        fail: (error) => {
 | 
			
		||||
          let { message } = error
 | 
			
		||||
          if (message == 'Network Error') {
 | 
			
		||||
            message = '后端接口连接异常'
 | 
			
		||||
          } else if (message.includes('timeout')) {
 | 
			
		||||
            message = '系统接口请求超时'
 | 
			
		||||
          } else if (message.includes('Request failed with status code')) {
 | 
			
		||||
            message = '系统接口' + message.substr(message.length - 3) + '异常'
 | 
			
		||||
          }
 | 
			
		||||
          toast(message)
 | 
			
		||||
          reject(error)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default upload
 | 
			
		||||
		Reference in New Issue
	
	Block a user