mes-vue/src/api/system.ts
2026-07-28 09:00:22 +08:00

494 lines
13 KiB
TypeScript

import { request } from '@/utils/request'
// 分页结果
export interface PageResult<T> {
list: T[]
total: number
page: number
pageSize: number
}
// ==================== 首页统计 ====================
export interface DashboardStats {
userCount: number
roleCount: number
menuCount: number
permissionCount: number
}
export const dashboardApi = {
getStats(): Promise<DashboardStats> {
return request({ url: '/dashboard/stats', method: 'get' })
}
}
// ==================== 用户管理 ====================
export interface SysUser {
id?: number
deptId?: number | null
deptName?: string
username: string
password?: string
nickname: string
avatar?: string
email?: string
phone?: string
gender?: number
status: number
remark?: string
userType?: string // 用户类型: admin-后台管理员 pc-PC前台用户 app-App/小程序用户
openId?: string // 微信openId
isQuit?: number // 是否离职(0-否 1-是)
postNames?: string // 岗位名称列表
createTime?: string
}
export interface UserDetailResult {
user: SysUser
roleIds: number[]
postIds: number[]
}
export const userApi = {
page(params: { page: number; pageSize: number; username?: string; status?: number; userType?: string; deptId?: number; postId?: number }): Promise<PageResult<SysUser>> {
return request({ url: '/sys/user/page', method: 'get', params })
},
detail(id: number): Promise<UserDetailResult> {
return request({ url: `/sys/user/${id}`, method: 'get' })
},
create(data: { user: SysUser; roleIds: number[]; postIds: number[] }): Promise<void> {
return request({ url: '/sys/user', method: 'post', data })
},
update(data: { user: SysUser; roleIds: number[]; postIds: number[] }): Promise<void> {
return request({ url: '/sys/user', method: 'put', data })
},
delete(id: number): Promise<void> {
return request({ url: `/sys/user/${id}`, method: 'delete' })
},
deleteBatch(ids: number[]): Promise<void> {
return request({ url: '/sys/user/batch', method: 'delete', data: ids })
},
resetPassword(id: number): Promise<void> {
return request({ url: `/sys/user/${id}/reset-password`, method: 'post' })
},
approve(id: number): Promise<void> {
return request({ url: `/sys/user/${id}/approve`, method: 'post' })
},
reject(id: number): Promise<void> {
return request({ url: `/sys/user/${id}/reject`, method: 'post' })
},
toggleQuit(id: number): Promise<void> {
return request({ url: `/sys/user/${id}/quit`, method: 'post' })
},
// 导出用户
exportUsers(params?: { username?: string; status?: number; userType?: string; deptId?: number; ids?: number[] }): Promise<Blob> {
const searchParams: Record<string, any> = {}
if (params?.username) searchParams.username = params.username
if (params?.status !== undefined && params?.status !== null) searchParams.status = params.status
if (params?.userType) searchParams.userType = params.userType
if (params?.deptId) searchParams.deptId = params.deptId
// 数组转逗号分隔字符串
if (params?.ids && params.ids.length > 0) searchParams.ids = params.ids.join(',')
return request({
url: '/sys/user/export',
method: 'get',
params: searchParams,
responseType: 'blob'
})
},
// 导入用户
importUsers(file: File): Promise<{ success: number; fail: number; errors: string[] }> {
const formData = new FormData()
formData.append('file', file)
return request({
url: '/sys/user/import',
method: 'post',
data: formData,
headers: { 'Content-Type': 'multipart/form-data' }
})
},
// 下载导入模板
downloadTemplate(): Promise<Blob> {
return request({
url: '/sys/user/template',
method: 'get',
responseType: 'blob'
})
},
//查询全部用户
getPathList() {
return request({
url:"sys/user/list",
method:'get'
})
},
}
// ==================== 角色管理 ====================
export interface SysRole {
id?: number
name: string
code: string
sort: number
status: number
dataScope?: number // 数据范围: 1-全部, 2-自定义, 3-本部门, 4-本部门及下级, 5-仅本人
remark?: string
createTime?: string
}
export interface RoleDetailResult {
role: SysRole
menuIds: number[]
deptIds: number[]
}
// ==================== 岗位管理 ====================
export interface SysPost {
id?: number
parentId?: number
postCode: string
postName: string
sort: number
status: number
remark?: string
createTime?: string
children?: SysPost[]
}
export const postApi = {
page(params: { page: number; pageSize: number; postCode?: string; postName?: string; status?: number }): Promise<PageResult<SysPost>> {
return request({ url: '/sys/post/page', method: 'get', params })
},
list(): Promise<SysPost[]> {
return request({ url: '/sys/post/list', method: 'get' })
},
tree(): Promise<SysPost[]> {
return request({ url: '/sys/post/tree', method: 'get' })
},
detail(id: number): Promise<SysPost> {
return request({ url: `/sys/post/${id}`, method: 'get' })
},
create(data: SysPost): Promise<void> {
return request({ url: '/sys/post', method: 'post', data })
},
update(data: SysPost): Promise<void> {
return request({ url: '/sys/post', method: 'put', data })
},
delete(id: number): Promise<void> {
return request({ url: `/sys/post/${id}`, method: 'delete' })
},
move(id: number, parentId: number): Promise<void> {
return request({ url: `/sys/post/${id}/move`, method: 'post', params: { parentId } })
}
}
// ==================== 角色管理 ====================
export const roleApi = {
page(params: { page: number; pageSize: number; name?: string; status?: number }): Promise<PageResult<SysRole>> {
return request({ url: '/sys/role/page', method: 'get', params })
},
list(): Promise<SysRole[]> {
return request({ url: '/sys/role/list', method: 'get' })
},
detail(id: number): Promise<RoleDetailResult> {
return request({ url: `/sys/role/${id}`, method: 'get' })
},
create(data: { role: SysRole; menuIds: number[]; deptIds?: number[] }): Promise<void> {
return request({ url: '/sys/role', method: 'post', data })
},
update(data: { role: SysRole; menuIds: number[]; deptIds?: number[] }): Promise<void> {
return request({ url: '/sys/role', method: 'put', data })
},
delete(id: number): Promise<void> {
return request({ url: `/sys/role/${id}`, method: 'delete' })
}
}
// ==================== 部门管理 ====================
export interface SysDept {
id?: number
parentId: number
deptName: string
sort: number
leader?: string
phone?: string
email?: string
status: number
children?: SysDept[]
}
export const deptApi = {
tree(): Promise<SysDept[]> {
return request({ url: '/sys/dept/tree', method: 'get' })
},
list(): Promise<SysDept[]> {
return request({ url: '/sys/dept/list', method: 'get' })
}
}
// ==================== 菜单管理 ====================
export interface SysMenu {
id?: number
parentId: number
name: string
type: number
path?: string
component?: string
permission?: string
icon?: string
sort: number
visible: number
status: number
isFrame?: number // 是否外链(0-否 1-是)
children?: SysMenu[]
}
export const menuApi = {
tree(params?: { name?: string; status?: number }): Promise<SysMenu[]> {
return request({ url: '/sys/menu/tree', method: 'get', params })
},
list(): Promise<SysMenu[]> {
return request({ url: '/sys/menu/list', method: 'get' })
},
detail(id: number): Promise<SysMenu> {
return request({ url: `/sys/menu/${id}`, method: 'get' })
},
create(data: SysMenu): Promise<void> {
return request({ url: '/sys/menu', method: 'post', data })
},
update(data: SysMenu): Promise<void> {
return request({ url: '/sys/menu', method: 'put', data })
},
delete(id: number): Promise<void> {
return request({ url: `/sys/menu/${id}`, method: 'delete' })
}
}
// ==================== 文件分组管理 ====================
export interface SysFileGroup {
id?: number
name: string
sort?: number
fileCount?: number
createBy?: string
createTime?: string
}
export interface FileGroupListResult {
groups: SysFileGroup[]
ungroupedCount: number
}
export const fileGroupApi = {
list(): Promise<FileGroupListResult> {
return request({ url: '/sys/file-group/list', method: 'get' })
},
detail(id: number): Promise<SysFileGroup> {
return request({ url: `/sys/file-group/${id}`, method: 'get' })
},
create(data: SysFileGroup): Promise<void> {
return request({ url: '/sys/file-group', method: 'post', data })
},
update(data: SysFileGroup): Promise<void> {
return request({ url: '/sys/file-group', method: 'put', data })
},
delete(id: number): Promise<void> {
return request({ url: `/sys/file-group/${id}`, method: 'delete' })
}
}
// ==================== 文件管理 ====================
export interface SysFile {
id?: number
originalName: string
fileName: string
filePath: string
url: string
fileSize: number
fileType: string
fileSuffix: string
storageType: string
bucketName?: string
groupId?: number
createBy?: string
createTime?: string
remark?: string
}
export const fileApi = {
page(params: { page: number; pageSize: number; originalName?: string; fileType?: string }): Promise<PageResult<SysFile>> {
return request({ url: '/sys/file/page', method: 'get', params })
},
pageByGroup(params: {
page: number
pageSize: number
groupId?: number | null
fileCategory?: string
originalName?: string
}): Promise<PageResult<SysFile>> {
return request({ url: '/sys/file/page-by-group', method: 'get', params })
},
detail(id: number): Promise<SysFile> {
return request({ url: `/sys/file/${id}`, method: 'get' })
},
upload(file: File, path?: string, groupId?: number | null): Promise<SysFile> {
const formData = new FormData()
formData.append('file', file)
if (path) {
formData.append('path', path)
}
if (groupId !== undefined && groupId !== null && groupId > 0) {
formData.append('groupId', groupId.toString())
}
return request({
url: '/sys/file/upload',
method: 'post',
data: formData,
headers: { 'Content-Type': 'multipart/form-data' }
})
},
uploadImage(file: File): Promise<SysFile> {
const formData = new FormData()
formData.append('file', file)
return request({
url: '/sys/file/upload/image',
method: 'post',
data: formData,
headers: { 'Content-Type': 'multipart/form-data' }
})
},
getDownloadUrl(id: number): string {
return `/api/sys/file/download/${id}`
},
getPreviewUrl(id: number): string {
return `/api/sys/file/preview/${id}`
},
getTextContent(id: number): Promise<string> {
return request({ url: `/sys/file/text/${id}`, method: 'get' })
},
delete(id: number): Promise<void> {
return request({ url: `/sys/file/${id}`, method: 'delete' })
},
deleteBatch(ids: number[]): Promise<void> {
return request({ url: '/sys/file/batch', method: 'delete', data: ids })
},
moveToGroup(fileIds: number[], groupId: number | null): Promise<void> {
return request({ url: '/sys/file/move', method: 'post', data: { fileIds, groupId } })
},
rename(id: number, newName: string): Promise<void> {
return request({ url: `/sys/file/${id}/rename`, method: 'put', data: { newName } })
},
downloadPlanFile(id:number) {
return request({
url:`/sys/file/download/${id}`,
method:"get",
responseType: 'blob'
})
}
}
// ==================== 文件配置管理 ====================
export interface SysFileConfig {
id?: number
name: string
storageType: string
master: number
domain: string
basePath?: string
bucketName?: string
accessKey?: string
secretKey?: string
endpoint?: string
region?: string
status: number
remark?: string
createTime?: string
}
export const fileConfigApi = {
page(params: { page: number; pageSize: number; name?: string; storageType?: string }): Promise<PageResult<SysFileConfig>> {
return request({ url: '/sys/file-config/page', method: 'get', params })
},
list(): Promise<SysFileConfig[]> {
return request({ url: '/sys/file-config/list', method: 'get' })
},
detail(id: number): Promise<SysFileConfig> {
return request({ url: `/sys/file-config/${id}`, method: 'get' })
},
getMaster(): Promise<SysFileConfig> {
return request({ url: '/sys/file-config/master', method: 'get' })
},
create(data: SysFileConfig): Promise<void> {
return request({ url: '/sys/file-config', method: 'post', data })
},
update(data: SysFileConfig): Promise<void> {
return request({ url: '/sys/file-config', method: 'put', data })
},
delete(id: number): Promise<void> {
return request({ url: `/sys/file-config/${id}`, method: 'delete' })
},
setMaster(id: number): Promise<void> {
return request({ url: `/sys/file-config/master/${id}`, method: 'put' })
},
testConfig(data: SysFileConfig): Promise<boolean> {
return request({ url: '/sys/file-config/test', method: 'post', data })
}
}