拦截器与其他配置
import axios from 'axios'
import {BASE_URL} from '@/config/api'
import router from '@/routes/index'
import {message} from 'element-ui'
import * as tokenTools from '@/utils/tokenTools.js'
import {getToken} from '@/utils/tokenTools.js'
const service = axios.create({
baseURL: process.env.NODE_ENV === 'production' ? BASE_URL : '/api/',
timeout: 50000,
responseType: 'json',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'token': getToken()
},
})
service.interceptors.request.use(config => {
console.log(tokenTools.getExpiration())
if (!config.headers.token && tokenTools.getToken()) {
config.headers.token = tokenTools.getToken()
}
return config
})
let lastCode = ''
service.interceptors.response.use(res => res, error => {
const code = error.toString().match(/\s\d{3}(\s|$)/)?.[0]?.trim()
if ([401, 402, 403].includes(Number(code))) {
service({
url: 'login/referToken',
method: 'post',
data: {
'refer_token': tokenTools.getReferToken()
}
})
.then(res => {
if (res.data.code === 1) {
tokenTools.setToken(res.data.data.token)
} else {
if (lastCode !== '4xx') {
lastCode = '4xx'
message({
type: 'warning',
message: 'please login'
})
}
tokenTools.setToken('')
router.push({name: 'listlogin'})
}
})
}
})
export default service
config/api.js
export const BASE_URL = process.env.VUE_APP_API_BASE_URL
目录文件下.env文件
VUE_APP_API_BASE_URL=http://du.ys-n.com/api/
接口配置示例
import request from '../axios'
export function history(data) {
return request({
url: 'activity/history',
method: 'post',
data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
})
}
export function index(data) {
return request({
url: 'activity/index',
method: 'post',
data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
})
}
.vue文件中的引用
<template>
<div class="box">
<div class="title">
<span class="el-icon-arrow-left" @click="$router.go(-1)"></span>
我的银行卡
</div>
<!-- 银行卡 -->
<div class="card">
<div v-for="item in cardList"
:key="item.ROW_NUMBER"
:class="checkBank(item.bank_id)" class="jianhang card_YH">
<div>{{ item.bank_name }}</div>
<div>储蓄卡</div>
<div>{{ item.card_number }}</div>
</div>
</div>
<!-- -->
<div class="btn_YH" @click="$router.push({path:'/listAddCard'})">
<span>绑定其它银行卡</span><span class="el-icon-plus"></span>
</div>
</div>
</template>
<script>
import {bankCardList} from '@/api/merbership/member'
export default {
data() {
return {
cardList: []
}
},
mounted() {
this.bankCardList()
},
methods: {
checkBank(id) {
switch (id) {
case '1':
return {
'jianhang': true
}
case '2':
return {
'zhonghang': true
}
default:
break
}
},
// ---------------- axios -----------------
/**
* 银行卡列表
*/
bankCardList() {
const pd = {}
bankCardList(pd)
.then(res => {
this.cardList = res.data.data.list
})
}
}
}
</script>
<style scoped>
/* 标题 */
.title {
background-color: #7ac91b;
color: #fff;
font-size: 18px;
text-align: center;
padding: 15px;
font-weight: bold;
}
.title .el-icon-arrow-left {
float: left;
margin-top: 5px;
}
/* */
/* .card {
margin: 15px;
} */
/* jianhang */
.card_YH {
background-repeat: no-repeat;
background-size: 100% 100%;
color: #FFF;
padding: 15px;
}
.card_YH > div {
margin: 15px;
}
.card_YH > div:nth-child(1) {
font-size: 18px;
}
.card_YH > div:nth-child(2) {
font-size: 14px;
}
.card_YH > div:nth-child(3) {
font-size: 15px;
}
.jianhang {
background-image: url(../../../../assets/static/cardList/q1.png);
}
.zhonghang {
background-image: url(../../../../assets/static/cardList/q2.png);
}
/* */
.btn_YH {
margin: 50px;
background-image: linear-gradient(to right, #FED000, #FFB200);
color: #FFFFFF;
font-size: 14px;
padding: 15px;
text-align: center;
border-radius: 25px;
}
.el-icon-plus {
font-weight: 1000;
margin-left: 5px;
font-size: 10px;
}
</style>