197 lines
5.1 KiB
TypeScript
197 lines
5.1 KiB
TypeScript
// 导出所有API服务
|
|
import * as client from "./client"
|
|
export * from "./card"
|
|
export * from "./upload"
|
|
export * from "./food"
|
|
|
|
// 用户API
|
|
export const usersApi = {
|
|
// 获取用户列表
|
|
getUsers: async (params: any) => {
|
|
await client.simulateDelay()
|
|
|
|
let filteredUsers = [...client.mockUsers]
|
|
|
|
// 搜索过滤
|
|
if (params?.search) {
|
|
const search = params.search.toLowerCase()
|
|
filteredUsers = filteredUsers.filter(
|
|
(user) =>
|
|
user.name.toLowerCase().includes(search) ||
|
|
user.email.toLowerCase().includes(search) ||
|
|
user.role.toLowerCase().includes(search),
|
|
)
|
|
}
|
|
|
|
// 排序
|
|
if (params?.sortBy) {
|
|
filteredUsers.sort((a, b) => {
|
|
const aValue = (a as any)[params.sortBy]
|
|
const bValue = (b as any)[params.sortBy]
|
|
|
|
if (typeof aValue === "string" && typeof bValue === "string") {
|
|
return params.sortOrder === "desc" ? bValue.localeCompare(aValue) : aValue.localeCompare(bValue)
|
|
}
|
|
|
|
return params.sortOrder === "desc" ? bValue - aValue : aValue - bValue
|
|
})
|
|
}
|
|
|
|
// 分页
|
|
const page = params?.page || 1
|
|
const pageSize = params?.pageSize || 10
|
|
const startIndex = (page - 1) * pageSize
|
|
const paginatedUsers = filteredUsers.slice(startIndex, startIndex + pageSize)
|
|
|
|
return {
|
|
items: paginatedUsers,
|
|
total: filteredUsers.length,
|
|
page,
|
|
pageSize,
|
|
totalPages: Math.ceil(filteredUsers.length / pageSize),
|
|
}
|
|
},
|
|
|
|
// 获取单个用户
|
|
getUser: async (id: string) => {
|
|
await client.simulateDelay()
|
|
const user = client.mockUsers.find((user) => user.id === id)
|
|
|
|
if (!user) {
|
|
throw new Error("用户不存在")
|
|
}
|
|
|
|
return user
|
|
},
|
|
|
|
// 创建用户
|
|
createUser: async (userData: any) => {
|
|
await client.simulateDelay()
|
|
|
|
// 检查邮箱是否已存在
|
|
if (client.mockUsers.some((user) => user.email === userData.email)) {
|
|
throw new Error("该邮箱已被注册")
|
|
}
|
|
|
|
const newUser = {
|
|
id: String(client.mockUsers.length + 1),
|
|
name: userData.name || "",
|
|
email: userData.email || "",
|
|
role: userData.role || "查看者",
|
|
status: userData.status || "未激活",
|
|
registeredAt: new Date().toISOString().split("T")[0],
|
|
lastLogin: "",
|
|
phone: userData.phone,
|
|
address: userData.address,
|
|
permissions: [],
|
|
loginHistory: [],
|
|
}
|
|
|
|
client.mockUsers.push(newUser)
|
|
|
|
return newUser
|
|
},
|
|
|
|
// 更新用户
|
|
updateUser: async (id: string, userData: any) => {
|
|
await client.simulateDelay()
|
|
|
|
const userIndex = client.mockUsers.findIndex((user) => user.id === id)
|
|
|
|
if (userIndex === -1) {
|
|
throw new Error("用户不存在")
|
|
}
|
|
|
|
// 检查邮箱是否已被其他用户使用
|
|
if (userData.email && userData.email !== client.mockUsers[userIndex].email) {
|
|
const emailExists = client.mockUsers.some((user) => user.email === userData.email && user.id !== id)
|
|
if (emailExists) {
|
|
throw new Error("该邮箱已被其他用户使用")
|
|
}
|
|
}
|
|
|
|
const updatedUser = {
|
|
...client.mockUsers[userIndex],
|
|
...userData,
|
|
}
|
|
|
|
client.mockUsers[userIndex] = updatedUser
|
|
|
|
return updatedUser
|
|
},
|
|
|
|
// 删除用户
|
|
deleteUser: async (id: string) => {
|
|
await client.simulateDelay()
|
|
|
|
const userIndex = client.mockUsers.findIndex((user) => user.id === id)
|
|
|
|
if (userIndex === -1) {
|
|
throw new Error("用户不存在")
|
|
}
|
|
|
|
// 超级管理员不能删除
|
|
if (client.mockUsers[userIndex].role === "超级管理员") {
|
|
throw new Error("不能删除超级管理员")
|
|
}
|
|
|
|
client.mockUsers.splice(userIndex, 1)
|
|
|
|
return true
|
|
},
|
|
}
|
|
|
|
// 角色API
|
|
export const rolesApi = {
|
|
// 获取角色列表
|
|
getRoles: async (params: any) => {
|
|
await client.simulateDelay()
|
|
|
|
let filteredRoles = [...client.mockRoles]
|
|
|
|
// 搜索过滤
|
|
if (params?.search) {
|
|
const search = params.search.toLowerCase()
|
|
filteredRoles = filteredRoles.filter(
|
|
(role) => role.name.toLowerCase().includes(search) || role.description.toLowerCase().includes(search),
|
|
)
|
|
}
|
|
|
|
// 排序
|
|
if (params?.sortBy) {
|
|
filteredRoles.sort((a, b) => {
|
|
const aValue = (a as any)[params.sortBy]
|
|
const bValue = (b as any)[params.sortBy]
|
|
|
|
if (typeof aValue === "string" && typeof bValue === "string") {
|
|
return params.sortOrder === "desc" ? bValue.localeCompare(aValue) : aValue.localeCompare(bValue)
|
|
}
|
|
|
|
return params.sortOrder === "desc" ? bValue - aValue : aValue - bValue
|
|
})
|
|
}
|
|
|
|
// 分页
|
|
const page = params?.page || 1
|
|
const pageSize = params?.pageSize || 10
|
|
const startIndex = (page - 1) * pageSize
|
|
const paginatedRoles = filteredRoles.slice(startIndex, startIndex + pageSize)
|
|
|
|
return {
|
|
items: paginatedRoles,
|
|
total: filteredRoles.length,
|
|
page,
|
|
pageSize,
|
|
totalPages: Math.ceil(filteredRoles.length / pageSize),
|
|
}
|
|
},
|
|
}
|
|
|
|
// 导出错误处理函数
|
|
export const handleApiError = (error: any) => {
|
|
if (error instanceof Error) {
|
|
return error.message
|
|
}
|
|
return "发生未知错误,请重试"
|
|
}
|