首页 > 其他分享 >若依框架 -------- vue3+element-plus(二)

若依框架 -------- vue3+element-plus(二)

时间:2023-02-20 14:05:45浏览次数:33  
标签:-------- return res element plus error params message data


后端管理系统,前后端分离的框架若依管理后台,来看下vue3+element-plus版本。

API 后台接口请求

user.js

// 查询用户列表
export function listUser(query) {
return request({
url: adminApi + '/api/system/user/list',
method: 'get',
params: query
})
}

// 查询用户详细
export function getUser(userId) {
return request({
url: adminApi + '/api/system/user/' + praseStrEmpty(userId),
method: 'get'
})
}

// 新增用户
export function addUser(data) {
return request({
url: adminApi + '/api/system/user',
method: 'post',
data: data
})
}

get请求

参数params: query params格式提交

post请求

参数data: data json格式提交

Request 请求

import axios from 'axios'
import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams, blobValidate } from '@/utils/ruoyi'
import { saveAs } from 'file-saver'
import { uuid } from '@/utils/uuid'

let downloadLoadingInstance;

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: import.meta.env.VITE_APP_BASE_API,
// 超时
timeout: 10000
})



// request拦截器
service.interceptors.request.use(config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers['token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}

config.headers['request-id']= uuid();
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params);
url = url.slice(0, -1);
config.params = {};
config.url = url;
}
return config
}, error => {
console.log(error)
Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
// 二进制数据则直接返回
if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer'){
return res.data
}
if (code === 401) {
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
store.dispatch('LogOut').then(() => {
location.href = '/index';
})
}).catch(() => {});
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
} else if (code === 500) {
ElMessage({
message: msg,
type: 'error'
})
return Promise.reject(new Error(msg))
} else if (code !== 200) {
ElNotification.error({
title: msg
})
return Promise.reject('error')
} else {
return Promise.resolve(res.data)
}
},
error => {
console.log('err' + 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) + "异常";
}
ElMessage({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)

// 通用下载方法
export function download(url, params, filename) {
downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
return service.post(url, params, {
transformRequest: [(params) => { return tansParams(params) }],
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob'
}).then(async (data) => {
const isLogin = await blobValidate(data);
if (isLogin) {
const blob = new Blob([data])
saveAs(blob, filename)
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
ElMessage.error(errMsg);
}
downloadLoadingInstance.close();
}).catch((r) => {
console.error(r)
ElMessage.error('下载文件出现错误,请联系管理员!')
downloadLoadingInstance.close();
})
}

export default service

请求拦截器 设置通用header信息

设置请求token

config.headers['token'] = getToken()

请求uuid

config.headers['request-id']= uuid();

响应拦截器 处理响应码​​const code = res.data.code || 200;​

指定超时时间: timeout: 10000

接口使用 

user/index.js

import { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser,exportXlsUrl,importTemplateUrl } from "@/api/system/user";

/** 查询用户列表 */
function getList() {
loading.value = true;
listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => {
loading.value = false;
userList.value = res.rows;
total.value = res.total;
});
};

api请求过程完成。

标签:--------,return,res,element,plus,error,params,message,data
From: https://blog.51cto.com/u_15949848/6068470

相关文章

  • Docker-全面详解(学习总结---从入门到深化)
    一、什么是Docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。 什么是"集装箱技术"我们都知道码头里的集装箱是运载货物用的,它是一种按规......
  • HTML5+CSS3(十)-全面详解(学习总结---从入门到深化)
    ​​Display​​​​编辑 元素隐藏属性对比​​​​学习效果反馈 ​​​​文档流 ​​​​文档流产生的问题 ​​​​空格折叠​​​​元素无空隙​​​​脱离文档流​......
  • 若依框架---PageHelper分页(四)
    我们通过下载并查看​​PageHelper-Spring-Boot-Starter​​​源码,了解到​​PageHelper​​​是通过实现​​MyBatis​​​拦截器接口​​org.apache.ibatis.plugin.Interc......
  • 若依框架---PageHelper分页(三)
    在上一篇文章“​​若依系统分页工具学习-PageHelper篇二​​”中,我们阐述了PageHelper使用ThreadLocal来将分页参数保存在当前线程中。那么我们为什么却找不到若依项目中后......
  • 若依框架---PageHelper分页(十三)
      我们介绍了PageHelper中的cache包以及简单介绍了包中各个类的属性与方法;还介绍了Java中一种加载类的方式:​​Class.forName​​​,并且通过查看​​com.mysql.jdbc.Drive......
  • 若依框架---PageHelper分页(十四)
     在前几篇文章中,我们查看了PageHeler中的包 ​​com.github.pagehelper​​​以及子包​​com.github.pagehelper.cache​​​中的类与结构,并且借着​​cache​​​包......
  • 对JS代码中的每个函数单独进行混淆加密
    自动化脚本:单独对JS代码中的每个函数进行混淆加密用自动化脚本工具,对JS代码中的每个函数分别进行单独混淆加密。这样加密得到的JS代码,比直接对整个JS代码进行混淆加密,效果要......
  • linux利用source命令导入sql文件
    1.创建数据库2.设置编码3.进入sql文件目录,使用msyql的source命令如下:source文件路径mysql>useg6monitor;mysql>source/app/t_sta_high_emission_vehicle.sql; ......
  • Win10应用商店提示“重试该操作 无法加载页面”
    试了好几种方法都没有效果,大家可以都试一下:方法1.按住Windows键+R键,输入“wsreset”,按下回车键重置应用商店 等待一段时间,会自动重置打开商店方法2.在Windows键+X键,点......
  • linux进阶命令
     1.linux中>表示覆盖原文件内容(文件的日期也会自动更新),>>表示追加内容(会另起一行,文件的日期也会自动更新)。  catid_rsa.pub >>authorized_keys  把id_rsa.pub追......