Skip to content

Commit 4bff3cf

Browse files
author
sunshine824
committed
升级封装fetch.js,更好支持typescript
1 parent 00eb0e3 commit 4bff3cf

File tree

7 files changed

+102
-34
lines changed

7 files changed

+102
-34
lines changed

src/api/types/user.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { AxiosPromise } from 'axios'
2+
3+
// 登录参数
4+
export interface ILoginApiParams {
5+
username: string // 用户名
6+
password: string // 密码
7+
captcha: string // 验证码
8+
uuid: string // 验证码uuid
9+
}
10+
11+
// 登录返回结果
12+
export interface ILoginData {
13+
token: string
14+
userInfo: {
15+
address: string
16+
username: string
17+
}
18+
}
19+
20+
// 注销登录参数
21+
export interface ILogoutParams {}
22+
23+
// 获取用户权限参数
24+
export interface IPermissionsParams {}
25+
26+
export interface IUserApi {
27+
login: (params: ILoginApiParams) => Promise<StoreState.ResType<ILoginData>>
28+
logout: (params: ILogoutParams) => Promise<StoreState.ResType<any>>
29+
getPermissionsList: (
30+
params: IPermissionsParams,
31+
) => Promise<StoreState.ResType<any>>
32+
}

src/api/user.ts

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
1-
import service from '@/utils/fetch';
1+
import fetch from '@/utils/fetch'
22
import qs from 'qs'
3+
import { IUserApi } from './types/user'
34

4-
// 用户登录
5-
export const login = (params: any): any => service({
6-
method: 'post',
7-
url: '/login',
8-
data: params,
9-
});
5+
const UserApi: IUserApi = {
6+
// 登录
7+
login: (params) =>
8+
fetch({
9+
method: 'post',
10+
url: '/login',
11+
data: params,
12+
}),
13+
// 注销登录
14+
logout: (params) =>
15+
fetch({
16+
method: 'get',
17+
url: '/logout',
18+
data: params,
19+
}),
20+
// 获取权限列表
21+
getPermissionsList: (params) =>
22+
fetch({
23+
method: 'get',
24+
url: '/navPerson',
25+
data: qs.stringify(params),
26+
}),
27+
}
1028

11-
// 用户登出
12-
export const logout = (params: any) => service({
13-
method: 'get',
14-
url: '/logout',
15-
data: params,
16-
});
17-
18-
// 获取权限列表
19-
export const getPermissionsList = (params: any) => service({
20-
method: 'get',
21-
url: '/navPerson',
22-
data: qs.stringify(params),
23-
});
29+
export default UserApi

src/router/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from 'vue-router'
1010
import { mainRoutes, baseRoutes, Routes } from './router.config'
1111
import { getToken } from '@/utils/util'
12-
import { getPermissionsList } from '@/api/user'
12+
import UserApi from '@/api/user'
1313
import { RouteLayout, BlankLayout } from '@/layouts'
1414

1515
let isAddDynamicMenuRoutes = false // 是否请求路由表
@@ -69,7 +69,7 @@ router.beforeEach(
6969
if (!isAddDynamicMenuRoutes) {
7070
try {
7171
//获取动态路由表
72-
const res: any = await getPermissionsList({})
72+
const res: any = await UserApi.getPermissionsList({})
7373
if (res.code == 200) {
7474
isAddDynamicMenuRoutes = true
7575
const menu = res.data

src/store/modules/common.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
11
import { defineStore } from 'pinia'
22

3+
interface IUserInfoProps {
4+
token: string
5+
userInfo: {
6+
address: string
7+
username: string
8+
}
9+
}
10+
11+
interface CommonState {
12+
userInfo: IUserInfoProps | null
13+
}
14+
315
export const CommonStore = defineStore('common', {
416
// 状态库
5-
state: () => ({
6-
userInfo: {}, //用户信息
17+
state: (): CommonState => ({
18+
userInfo: null, //用户信息
719
}),
820
getters: {
921
getUserInfo: (state) => state.userInfo?.userInfo,
1022
},
1123
actions: {
12-
setUserInfo<T>(data: T) {
24+
setUserInfo(data: NonNullable<IUserInfoProps>) {
1325
this.userInfo = data
1426
},
1527
},

src/types/interfaces.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
*/
88
declare namespace StoreState {
99
// 接口返回结构
10-
export interface Result {
10+
export interface ResType<T> {
1111
code: number
12-
data: any
12+
data?: T
13+
msg?: string
1314
status: boolean
14-
msg: string
1515
}
1616

1717
// 请求参数结构

src/utils/fetch.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ service.interceptors.response.use(
4444
if (status) {
4545
// 接口请求成功
4646
msg && Message.success(msg) // 后台如果返回了msg,则将msg提示出来
47-
return Promise.resolve(response.data) // 返回成功数据
47+
return Promise.resolve(response) // 返回成功数据
4848
}
4949
// 接口异常
5050
msg && Message.warning(msg) // 后台如果返回了msg,则将msg提示出来
51-
return Promise.reject(response.data) // 返回异常数据
51+
return Promise.reject(response) // 返回异常数据
5252
} else {
5353
// 接口异常
5454
msg && Message.error(msg)
55-
return Promise.reject(response.data)
55+
return Promise.reject(response)
5656
}
5757
}
5858
return response
@@ -96,4 +96,22 @@ service.interceptors.response.use(
9696
},
9797
)
9898

99-
export default service
99+
interface Http {
100+
fetch<T>(params: AxiosRequestConfig): Promise<StoreState.ResType<T>>
101+
}
102+
103+
const http: Http = {
104+
fetch(params) {
105+
return new Promise((resolve, reject) => {
106+
service(params)
107+
.then((res) => {
108+
resolve(res.data)
109+
})
110+
.catch((err) => {
111+
reject(err.data)
112+
})
113+
})
114+
},
115+
}
116+
117+
export default http['fetch']

src/views/user/login/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { uuid } from '@/utils/util'
44
import { Form, Input, Button, message } from 'ant-design-vue'
55
import { CommonStore } from '@/store/modules/common'
66
import GlobalBg from '@/components/GlobalBg'
7-
import { login } from '@/api/user.ts'
7+
import UserApi from '@/api/user.ts'
88

99
import styles from './index.module.less'
1010

@@ -48,7 +48,7 @@ const Login = defineComponent({
4848
await formRef.value.validate()
4949
loading.value = true
5050
try {
51-
const { data } = await login(formData)
51+
const { data } = await UserApi.login(formData)
5252
common.setUserInfo(data)
5353
router.push('/dataProtal')
5454
loading.value = false

0 commit comments

Comments
 (0)