You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
SOP/sop-admin/sop-admin-vue/src/utils/global.js

135 lines
3.6 KiB

/*
注册全局方法
*/
import Vue from 'vue'
import axios from 'axios'
import { getToken, removeToken } from './auth'
// 创建axios实例
const client = axios.create({
baseURL: process.env.VUE_APP_BASE_API + '/api', // api 的 base_url
timeout: 60000 // 请求超时时间,60秒
})
Object.assign(Vue.prototype, {
/**
* 请求接口
* @param uri uri,如:goods.get,goods.get/1.0
* @param data 请求数据
* @param callback 成功时回调
* @param errorCallback 错误时回调
*/
post: function(uri, data, callback, errorCallback) {
const that = this
const paramStr = JSON.stringify(data)
if (!uri.endsWith('/')) {
uri = uri + '/'
}
if (!uri.startsWith('/')) {
uri = '/' + uri
}
client.post(uri, {
data: encodeURIComponent(paramStr),
access_token: getToken()
}).then(function(response) {
const resp = response.data
const code = resp.code
if (!code || code === '-9') {
that.$message.error(resp.msg || '系统错误')
return
}
if (code === '-100' || code === '18' || code === '21') { // 未登录
that.logout()
return
}
if (code === '0') { // 成功
callback && callback.call(that, resp)
} else {
that.$message.error(resp.msg)
}
}).catch(function(error) {
console.error('err' + error) // for debug
errorCallback && errorCallback(error)
that.$message.error(error.message)
})
},
/**
* tip,使用方式:this.tip('操作成功'),this.tip('错误', 'error')
* @param msg 内容
* @param type success / info / warning / error
* @param stay 停留几秒,默认3秒
*/
tip: function(msg, type, stay) {
stay = parseInt(stay) || 3
this.$message({
message: msg,
type: type || 'success',
duration: stay * 1000
})
},
/**
* 提醒框
* @param msg 消息
* @param okHandler 成功回调
* @param cancelHandler
*/
confirm: function(msg, okHandler, cancelHandler) {
const that = this
this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
okHandler.call(that, done)
} else if (action === 'cancel') {
if (cancelHandler) {
cancelHandler.call(that, done)
} else {
done()
}
} else {
done()
}
}
}).catch(function() {})
},
/**
* 文件必须放在public下面
* @param path 相对于public文件夹路径,如文件在public/static/sign.md,填:static/sign.md
* @param callback 回调函数,函数参数是文件内容
*/
getFile: function(path, callback) {
axios.get(path)
.then(function(response) {
callback.call(this, response.data)
})
},
downloadText(filename, text) {
const element = document.createElement('a')
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text))
element.setAttribute('download', filename)
element.style.display = 'none'
document.body.appendChild(element)
element.click()
document.body.removeChild(element);
},
/**
* 重置表单
* @param formName 表单元素的ref
*/
resetForm(formName) {
const frm = this.$refs[formName]
frm && frm.resetFields()
},
logout: function() {
removeToken()
const fullPath = this.$route.fullPath
if (fullPath.indexOf('login?redirect') === -1) {
this.$router.push({ path: `/login?redirect=${fullPath}` })
}
}
})