Skip to content

Commit 034376f

Browse files
陈鑫陈鑫
authored andcommitted
优化fetch封装
1 parent e59b30f commit 034376f

File tree

6 files changed

+101
-153
lines changed

6 files changed

+101
-153
lines changed

src/api/users.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
1-
import { Post, Get } from "@/utils/fetch"
1+
import service from "@/utils/fetch"
22
import qs from 'qs'
33

44
//用户登录
5-
export const login = (params: any) => {
6-
return Post({
5+
export const login = (params: any): any => {
6+
return service({
7+
method: "post",
78
url: '/login',
89
data: params
910
})
1011
}
1112

1213
//用户登出
1314
export const logout = (params: any) => {
14-
return Get({
15+
return service({
16+
method: "get",
1517
url: '/logout',
1618
data: params
1719
})
1820
}
1921

2022
//获取权限列表
2123
export const getPermissionsList = (params: any) => {
22-
return Get({
24+
return service({
25+
method: "get",
2326
url: "/navPerson",
2427
data: qs.stringify(params)
2528
})

src/layouts/LevelBasicLayout.vue

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
<div class="user-info">
88
<a-dropdown>
99
<div>
10-
<img src="../assets/user.png" class="user-head" />
11-
<a @click="e => e.preventDefault()" class="user-name">{{userName}}</a>
10+
<img src="../assets/user.png"
11+
class="user-head" />
12+
<a @click="e => e.preventDefault()"
13+
class="user-name">{{userName}}</a>
1214
</div>
1315
<a-menu slot="overlay">
1416
<a-menu-item key="0">
@@ -52,7 +54,7 @@ import { Layout, Dropdown, Menu, Icon, Modal } from "ant-design-vue";
5254
AMenu: Menu,
5355
AMenuItem: Menu.Item,
5456
AMenuDivider: Menu.Divider,
55-
}
57+
},
5658
})
5759
export default class LevelBasicLayout extends Vue {
5860
@Ref() readonly updatePass!: UpdatePass;
@@ -79,15 +81,13 @@ export default class LevelBasicLayout extends Vue {
7981
class: "my-modal",
8082
cancelText: "取消",
8183
onOk: async () => {
82-
let { code } = await logout({});
83-
if (code == 200) {
84-
sessionStorage.clear();
85-
this.$router.push("/login");
86-
}
84+
let { data } = await logout({});
85+
sessionStorage.clear();
86+
this.$router.push("/login");
8787
},
8888
onCancel: () => {
8989
console.log("Cancel");
90-
}
90+
},
9191
});
9292
}
9393
}

src/layouts/VerticalBasicLayout.vue

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,20 @@
44
<global-header @goToHome="goToHome">
55
<template slot="rightCon">
66
<div class="user-info">
7-
<a-select :default-value="lang" size="small" @change="toggleChangeLang" class="lang-box">
8-
<a-select-option
9-
v-for="(item, index) in Languages"
10-
:value="item.value"
11-
:key="item.value"
12-
>{{$t(item.label)}}</a-select-option>
7+
<a-select :default-value="lang"
8+
size="small"
9+
@change="toggleChangeLang"
10+
class="lang-box">
11+
<a-select-option v-for="(item, index) in Languages"
12+
:value="item.value"
13+
:key="item.value">{{$t(item.label)}}</a-select-option>
1314
</a-select>
1415
<a-dropdown>
1516
<div>
16-
<img src="../assets/user.png" class="user-head" />
17-
<a @click="e => e.preventDefault()" class="user-name">{{userName}}</a>
17+
<img src="../assets/user.png"
18+
class="user-head" />
19+
<a @click="e => e.preventDefault()"
20+
class="user-name">{{userName}}</a>
1821
</div>
1922
<a-menu slot="overlay">
2023
<a-menu-item key="1">
@@ -28,11 +31,17 @@
2831

2932
<!-- layout content -->
3033
<a-layout-content>
31-
<div class="left-menus" :style="{width:collapsed ? '60px' : '220px'}">
34+
<div class="left-menus"
35+
:style="{width:collapsed ? '60px' : '220px'}">
3236
<Menus mode="inline"></Menus>
33-
<div class="tootip" @click="collapseExpand">
34-
<a-icon v-if="!collapsed" class="icon" type="left" />
35-
<a-icon v-else class="icon" type="right" />
37+
<div class="tootip"
38+
@click="collapseExpand">
39+
<a-icon v-if="!collapsed"
40+
class="icon"
41+
type="left" />
42+
<a-icon v-else
43+
class="icon"
44+
type="right" />
3645
</div>
3746
</div>
3847
<div class="main-con">
@@ -62,8 +71,8 @@ import { GlobalHeader, Menus } from "@/components/GlobalHeader";
6271
AMenuItem: Menu.Item,
6372
AMenuDivider: Menu.Divider,
6473
ASelect: Select,
65-
ASelectOption: Select.Option
66-
}
74+
ASelectOption: Select.Option,
75+
},
6776
})
6877
export default class VerticalBasicLayout extends Vue {
6978
@Inject() reload!: any;
@@ -100,15 +109,13 @@ export default class VerticalBasicLayout extends Vue {
100109
class: "my-modal",
101110
cancelText: "取消",
102111
onOk: async () => {
103-
let { code } = await logout({});
104-
if (code == 200) {
105-
sessionStorage.clear();
106-
this.$router.push("/login");
107-
}
112+
let { data } = await logout({});
113+
sessionStorage.clear();
114+
this.$router.push("/login");
108115
},
109116
onCancel: () => {
110117
console.log("Cancel");
111-
}
118+
},
112119
});
113120
}
114121
}

src/router/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { getToken } from "@/utils/token";
55
import { getPermissionsList } from "@/api/users";
66
import { isURL } from "@/utils/util";
77
import { RouteLayout } from "@/layouts";
8+
import { AxiosResponse } from 'axios';
89

910
//是否需要动态路由 true:是 false:否
1011
const DYNROUTER = true;

src/types/axios.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as axios from 'axios'
2+
3+
declare module 'axios' {
4+
interface AxiosInstance {
5+
(config: AxiosRequestConfig): Promise<any>
6+
}
7+
}

src/utils/fetch.ts

Lines changed: 49 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,24 @@
1-
import axios, { AxiosRequestConfig, AxiosResponse } from "axios";
1+
import axios, { AxiosRequestConfig, AxiosResponse, AxiosInstance } from "axios";
22
import { getToken, removeToken } from "@/utils/token";
33
import { Modal } from "ant-design-vue";
44
import { Message, Notification } from "@/utils/resetMessage";
55
import router from "@/router";
66

7-
/**
8-
* post请求封装
9-
* @param params
10-
*/
11-
export function Post(params: StoreState.FetchParams) {
12-
return axios({
13-
...params,
14-
method: "post",
15-
url: params.url,
16-
data: params.data
17-
})
18-
.then(res => {
19-
return Promise.resolve(res.data);
20-
})
21-
.catch(err => {
22-
return Promise.reject(err.data);
23-
});
24-
}
25-
26-
/**
27-
* delete请求封装
28-
* @param params
29-
*/
30-
export function Delete(params: StoreState.FetchParams) {
31-
return axios({
32-
...params,
33-
method: "delete",
34-
url: params.url,
35-
data: params.data
36-
})
37-
.then(res => {
38-
return Promise.resolve(res.data);
39-
})
40-
.catch(err => {
41-
return Promise.reject(err.data);
42-
});
43-
}
44-
45-
/**
46-
* get请求封装
47-
* @param params
48-
*/
49-
export function Get(params: StoreState.FetchParams) {
50-
return axios({
51-
...params,
52-
method: "get",
53-
url: params.url,
54-
params: params.data
55-
})
56-
.then(res => {
57-
return Promise.resolve(res.data);
58-
})
59-
.catch(err => {
60-
return Promise.reject(err.data);
61-
});
62-
}
63-
64-
/**
65-
* patch请求封装
66-
* @param params
67-
*/
68-
export function Patch(params: StoreState.FetchParams) {
69-
return axios({
70-
...params,
71-
method: "patch",
72-
url: params.url,
73-
data: params.data
74-
})
75-
.then(res => {
76-
return Promise.resolve(res.data);
77-
})
78-
.catch(err => {
79-
return Promise.reject(err.data);
80-
});
81-
}
7+
// create an axios instance
8+
const service: AxiosInstance = axios.create({
9+
baseURL: "/api", // 正式环境
10+
timeout: 60 * 1000,
11+
headers: {}
12+
})
8213

8314
/**
8415
* 请求拦截
8516
*/
86-
axios.interceptors.request.use(
87-
(config: AxiosRequestConfig) => {
88-
config.headers.common["Authorization"] = getToken(); // 请求头带上token
89-
config.headers.common["token"] = getToken();
90-
config.baseURL = "/api";
91-
return config;
92-
},
17+
service.interceptors.request.use((config: AxiosRequestConfig) => {
18+
config.headers.common["Authorization"] = getToken(); // 请求头带上token
19+
config.headers.common["token"] = getToken();
20+
return config;
21+
},
9322
error => {
9423
return Promise.reject(error);
9524
}
@@ -98,72 +27,73 @@ axios.interceptors.request.use(
9827
/**
9928
* 响应拦截
10029
*/
101-
axios.interceptors.response.use(
102-
(response: AxiosResponse) => {
103-
if (response.status == 201 || response.status == 200) {
104-
let { code, status, msg, data } = response.data;
105-
if (code == 401) {
106-
Modal.warning({
107-
title: "token出错",
108-
content: "token失效,请重新登录!",
109-
onOk: () => {
110-
removeToken();
111-
router.push("/login");
112-
}
113-
});
114-
} else if (code == 200) {
115-
if (status) {
116-
//接口请求成功
117-
msg && Message.success(msg); //后台如果返回了msg,则将msg提示出来
118-
return Promise.resolve(response); //返回成功数据
119-
} else {
120-
//接口异常
121-
msg && Message.warning(msg); //后台如果返回了msg,则将msg提示出来
122-
return Promise.reject(response); //返回异常数据
30+
service.interceptors.response.use((response: AxiosResponse) => {
31+
if (response.status == 201 || response.status == 200) {
32+
let { code, status, msg } = response.data;
33+
if (code == 401) {
34+
Modal.warning({
35+
title: "token出错",
36+
content: "token失效,请重新登录!",
37+
onOk: () => {
38+
removeToken();
39+
router.push("/login");
12340
}
41+
});
42+
} else if (code == 200) {
43+
if (status) {
44+
//接口请求成功
45+
msg && Message.success(msg); //后台如果返回了msg,则将msg提示出来
46+
return Promise.resolve(response.data); //返回成功数据
12447
} else {
12548
//接口异常
126-
msg && Message.error(msg);
127-
return Promise.reject(response);
49+
msg && Message.warning(msg); //后台如果返回了msg,则将msg提示出来
50+
return Promise.reject(response.data); //返回异常数据
12851
}
52+
} else {
53+
//接口异常
54+
msg && Message.error(msg);
55+
return Promise.reject(response.data);
12956
}
130-
return response;
131-
},
57+
}
58+
return response;
59+
},
13260
error => {
13361
if (error.response.status) {
13462
switch (error.response.status) {
13563
case 500:
13664
Notification.error({
137-
message: "Forbidden",
138-
description: error.response.data
65+
message: "温馨提示",
66+
description: "服务异常,请重启服务器!"
13967
});
14068
break;
14169
case 401:
14270
Notification.error({
143-
message: "Forbidden",
144-
description: "暂无权限"
71+
message: "温馨提示",
72+
description: "服务异常,请重启服务器!"
14573
});
14674
break;
14775
case 403:
14876
Notification.error({
149-
message: "Forbidden",
150-
description: "登录过期,请重新登录"
77+
message: "温馨提示",
78+
description: "服务异常,请重启服务器!"
15179
});
15280
break;
15381
// 404请求不存在
15482
case 404:
15583
Notification.error({
156-
message: "Forbidden",
157-
description: "网络请求不存在"
84+
message: "温馨提示",
85+
description: "服务异常,请重启服务器!"
15886
});
15987
break;
16088
default:
16189
Notification.error({
162-
message: "Forbidden",
163-
description: error.response.data.msg
90+
message: "温馨提示",
91+
description: "服务异常,请重启服务器!"
16492
});
16593
}
16694
}
16795
return Promise.reject(error.response);
16896
}
16997
);
98+
99+
export default service

0 commit comments

Comments
 (0)