YOS-DRVOGPU6U78\Administrator
2023-07-17 66f2bb78ae330785cdf2e04829ebd036e92edb92
增加utils工具
已添加6个文件
已修改4个文件
347 ■■■■ 文件已修改
api/login.js 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/login.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/auth.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/common.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/constant.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/errorCode.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/permission.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/request.js 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/storage.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/upload.js 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/login.js
@@ -1,8 +1,16 @@
import request from "request";
export function login(account,passward) {
import request from '@/utils/request.js'
export function login(account, password) {
    return request({
        'url': '/login',
        'method' : 'post'
        'method': 'post',
        'data': {
            'username': account,
            'password': password
        },
        'header': {
            'Content-Type': 'application/json',
            'dataType': 'json',
            'Accept': 'application/json'
        }
    })
}
pages/login/login.vue
@@ -8,8 +8,8 @@
                <u-form-item label="用户名" labelWidth=65 prop="userInfo.account" borderBottom>
                    <u--input v-model="userInfo.account" border="none" placeholder="请输入用户名"></u--input>
                </u-form-item>
                <u-form-item label="密码" labelWidth=65 prop="userInfo.passward">
                    <u--input v-model="userInfo.passward" placeholder="请输入用户密码" border="none" :password="showPassward"
                <u-form-item label="密码" labelWidth=65 prop="userInfo.password">
                    <u--input v-model="userInfo.password" placeholder="请输入用户密码" border="none" :password="showPassward"
                        @click="this.showPassward = !this.showPassward " suffixIcon="eye-fill"
                        suffixIconStyle="color: #909399"></u--input>
                </u-form-item>
@@ -21,13 +21,16 @@
</template>
<script>
    import {
        login
    } from '../../api/login'
    export default {
        data() {
            return {
                showPassward: true,
                userInfo: {
                    account: '',
                    passward: ''
                    password: ''
                }
            }
        },
@@ -41,21 +44,32 @@
                    })
                    return
                }
                if (this.userInfo.passward == null || this.userInfo.passward == '') {
                if (this.userInfo.password == null || this.userInfo.password == '') {
                    this.$refs.uToast.show({
                        message: '密码为空',
                        type: 'error'
                    })
                    return
                }
                console.log(this.userInfo)
                uni.navigateTo({
                    url:'/pages/index/index'
                login(this.userInfo.account, this.userInfo.password).then(response => {
                    console.log(response)
                    if (!response.result) {
                        this.$refs.uToast.show({
                            message: response.msg,
                            type: 'error'
                        })
                        return
                    }
                    uni.navigateTo({
                        url:'/pages/index/index'
                    })
                })
            }
        }
    }
utils/auth.js
¶Ô±ÈÐÂÎļþ
@@ -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)
}
utils/common.js
@@ -1,6 +1,54 @@
/**
* æ˜¾ç¤ºæ¶ˆæ¯æç¤ºæ¡†
* @param content æç¤ºçš„æ ‡é¢˜
*/
export function toast(content) {
    uni.showToast({
        icon:'none',
        title: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
}
utils/constant.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
const constant = {
   avatar: 'vuex_avatar',
   name: 'vuex_name',
   roles: 'vuex_roles',
   permissions: 'vuex_permissions'
 }
 export default constant
utils/errorCode.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
export default {
  '401': '认证失败,无法访问系统资源',
  '403': '当前操作没有权限',
  '404': '访问资源不存在',
  'default': '系统未知错误,请反馈给管理员'
}
utils/permission.js
¶Ô±ÈÐÂÎļþ
@@ -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
  }
}
utils/request.js
@@ -1,42 +1,57 @@
const { error } = require("jquery")
const { toast } = require("./common")
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 => {
    return new Promise((resolve,reject) => {
    // æ˜¯å¦éœ€è¦è®¾ç½® 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.request({
            method:config.method || 'GET',
            timeout:config.timeoue || timeout,
            url:config.baseUrl || baseUrl + config.url,
            data:config.data,
            header: config.header || {'Content-Type': 'application/json'},
            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('网络异常,请稍后重试')
                return
            if (response.statusCode === 200) {
                resolve(response.data)
            }
            const result = res.data.result || true
            const msg = errorCode[code] || res.data.msg || ErrorCode['defalut']
            if(!res) {
                toast(msg)
                return
            }
            resolve(res.data)
        }).catch(error => {
            let {message} = error
            if(message === 'Network Error') {
            let {
                message
            } = error
            if (message === 'Network Error') {
                message = '后端接口连接异常'
            } else if(message.includes('timeout')) {
            } 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 request
utils/storage.js
¶Ô±ÈÐÂÎļþ
@@ -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
utils/upload.js
¶Ô±ÈÐÂÎļþ
@@ -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/login/login' })
                })
              }
            })
            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