menu.ts
3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import axios from 'axios'
// API基础配置
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8083'
// 创建axios实例
const api = axios.create({
baseURL: API_BASE_URL,
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
console.log('菜单API实例创建,baseURL:', API_BASE_URL)
// 请求拦截器 - 添加token
api.interceptors.request.use(
(config) => {
console.log('菜单API请求:', {
url: config.url,
baseURL: config.baseURL,
method: config.method,
params: config.params,
fullURL: `${config.baseURL}${config.url}`
})
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => {
return Promise.reject(error)
}
)
// 响应拦截器
api.interceptors.response.use(
(response) => {
return response.data
},
(error) => {
console.error('API请求错误:', error)
return Promise.reject(error)
}
)
// 菜单接口类型定义
export interface Menu {
menuId: number
parentId?: number
menuName: string
menuType: string
menuTypeText: string
path?: string
icon?: string
sort: number
status: number
statusText: string
perms?: string
component?: string
isFrame?: number
remark?: string
level?: number
createTime: string
updateTime: string
children?: Menu[]
}
export interface MenuSearchParams {
menuName?: string
menuType?: string
status?: number
pageNum?: number
pageSize?: number
}
export interface ApiResponse<T = any> {
code: number
message: string
data: T
}
export interface PageResponse<T> {
records: T[]
total: number
size: number
current: number
orders: any[]
optimizeCountSql: boolean
searchCount: boolean
maxLimit: any
countId: any
pages: number
}
// 菜单API接口
export const menuApi = {
// 获取菜单列表
getMenuList: (params: MenuSearchParams): Promise<ApiResponse<PageResponse<Menu>>> => {
return api.get('/api/system/menu/list', { params })
},
// 获取菜单树列表
getMenuTree: (userId?: number): Promise<ApiResponse<Menu[]>> => {
return api.get('/api/system/menu/tree', { params: { userId } })
},
// 根据用户ID获取用户菜单权限树
getUserMenuTree: (userId: number): Promise<ApiResponse<Menu[]>> => {
return api.get('/api/system/menu/tree', { params: { userId } })
},
// 获取菜单详情
getMenuById: (menuId: number): Promise<ApiResponse<Menu>> => {
return api.get(`/api/system/menu/${menuId}`)
},
// 新增菜单
createMenu: (menuData: any): Promise<ApiResponse<any>> => {
return api.post('/api/system/menu', menuData)
},
// 修改菜单
updateMenu: (menuData: any): Promise<ApiResponse<any>> => {
return api.put('/api/system/menu', menuData)
},
// 删除菜单
deleteMenu: (menuIds: number[]): Promise<ApiResponse<any>> => {
return api.delete(`/api/system/menu/${menuIds.join(',')}`)
},
// 获取菜单下拉树选择
getMenuTreeSelect: (): Promise<ApiResponse<Menu[]>> => {
return api.get('/api/system/menu/treeselect')
},
// 根据角色ID获取菜单下拉树选择
getMenuTreeSelectByRole: (roleId: number): Promise<ApiResponse<Menu[]>> => {
return api.get(`/api/system/menu/roleMenuTreeselect/${roleId}`)
}
}
// 单独导出常用方法
export const getUserMenuTree = menuApi.getUserMenuTree
export const getMenuTree = menuApi.getMenuTree
export const getMenuList = menuApi.getMenuList
export default menuApi