一、axios封装
1.首先新建一个utils文件夹里面新建一个request.js文件中写入:
import axios from 'axios'
import qs from 'qs'
import router from '../router/index'
import { Toast } from 'vant'
const request = axios.create({
baseURL: process.env.NODE_ENV === 'production' ? process.env.BASE_API : '/api',
timeout: 10000
})
request.interceptors.request.use(
config=> {
const token = JSON.parse(window.sessionStorage.getItem('token'))
if (token) {
config.headers.Authorization = token
}
if (config.method === 'post' && config.data !== undefined) {
config.data = qs.stringify(config.data.params);
}
return config
},
error=> {
return Promise.reject(error)
}
)
request.interceptors.response.use(
response => {
return response;
},
error => {
console.log('errcode', error.response.data.msg)
const errcode = error.response.data.msg * 1
if (errcode === 4600 || errcode === 4601 || errcode === 4602) {
console.log('token错误')
Toast('登录状态失效,即将跳转至登录页面')
setTimeout(() => {
router.replace('/login')
}, 3000)
}
return Promise.reject(error)
}
)
export default request
2.在api中新建一个re.js
import request from '../untils/request.js'
import qs from 'qs';
export const boot= () => {
return request({
method: 'GET',
url: '/abc/bbb',
})
}
export const onload= params => {
return request({
method: 'GET',
url: '/aaa/bbb',
params
})
}
export const delList = data => {
return request({
method: 'POST',
url: '/aaa/bbb',
headers: {
"Content-Type": "application/json;charset=utf-8"
},
data
})
}
export const queryClassifyList = data => {
let formData = new FormData();
Object.keys(data).forEach((key) => {
formData.append(key, data[key]);
});
return request({
method: 'POST',
url: '/aaa/bbb',
headers: {
'Content-Type': 'multipart/form-data'
},
data:formData
})
}
export const doReturn = data => {
let formData = new URLSearchParams();
Object.keys(data).forEach((key) => {
formData.append(key, data[key]);
});
return request({
method: 'POST',
url: '/xxx/xxx/xxx',
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
},
data:formData
})
}
export const createComment = data => {
function handleData(obj) {
const arr = [];
for (let key in obj) {
arr.push(
`${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`
);
}
return arr.join(";");
}
return request({
method: 'POST',
url: '/lsg-aiplat-doclink/comment/create',
headers: {
"Content-Type": "application/x-www-urlencoded"
},
data:handleData(data)
})
}
3.组件中直接使用
<script>
import { onload } from "@/api/re";
export default {
data() {
return {
leader : [],
};
},
methods: {
load() {
const params = { paramName: param, data: data, id: id };
Object.keys(params).forEach(key => params[key] || delete params[key]);
boot(params).then((res) => {
console.log(res);
this.leader = res.data;
});
},
},
mounted() {
this.load();
},
};
</script>
二、入参过滤(filterQuery)
1.新建filterQuery.js
export function cleanQuery(query) {
const copyQuery = { ...query };
const cleanedEntries = Object.entries(copyQuery).filter(([key, value]) => {
if (value === null || value === "") return false;
if (Array.isArray(value) && value.length === 0) return false;
if (typeof value === 'object' && value !== null && Object.keys(value).length === 0) return false;
return true;
});
return Object.fromEntries(cleanedEntries);
}
2.在main.js中全局挂载
import { cleanQuery } from '@/utils/filterQuery';
Vue.prototype.$filterQuery = cleanQuery;
3.组件使用
const query = {a:'',ID:""}
const params = this.$filterQuery(query)