- axios OO 封装(src/api/http.ts):请求拦截鉴权头、拆 {code,message,data}、401 刷新重放
- useRequest composable(manual/refreshDeps/cancel/mutate)
- ty-crud 列表加载改用 useRequest,修复分页切换不重新请求
- 用户管理对接真实接口(列表/增删改/重置密码/组织下拉),ty-table 日期兼容 ISO
- 菜单真实渲染:GET /auth/menus + 菜单 store,布局/页签/面包屑从接口取
- 登录/注册/忘记密码去掉租户编码字段(用配置默认租户),暗黑模式品牌区背景适配
- 退出登录清空菜单 + 页签
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
85 lines
2.1 KiB
TypeScript
85 lines
2.1 KiB
TypeScript
import { http } from '@/api/http'
|
||
|
||
export type UserStatus = 'enabled' | 'disabled' | 'locked'
|
||
|
||
export interface User {
|
||
id: string
|
||
tenantCode: string
|
||
username: string
|
||
nickname: string | null
|
||
email: string | null
|
||
phone: string | null
|
||
avatar: string | null
|
||
status: UserStatus
|
||
orgCode: string | null
|
||
createdAt: string
|
||
updatedAt: string
|
||
}
|
||
|
||
export interface UserListQuery {
|
||
page: number
|
||
pageSize: number
|
||
username?: string
|
||
nickname?: string
|
||
phone?: string
|
||
status?: UserStatus | ''
|
||
}
|
||
|
||
export interface UserListResult {
|
||
list: User[]
|
||
total: number
|
||
page: number
|
||
pageSize: number
|
||
}
|
||
|
||
export interface UserUpsertData {
|
||
username?: string
|
||
password?: string
|
||
nickname?: string
|
||
email?: string
|
||
phone?: string
|
||
orgCode?: string | null
|
||
status?: UserStatus
|
||
}
|
||
|
||
export interface Org {
|
||
id: string
|
||
code: string
|
||
name: string
|
||
}
|
||
|
||
/** 用户分页列表。 */
|
||
export function listUsers(query: UserListQuery, signal?: AbortSignal): Promise<UserListResult> {
|
||
const params: Record<string, unknown> = { page: query.page, pageSize: query.pageSize }
|
||
if (query.username) params.username = query.username
|
||
if (query.nickname) params.nickname = query.nickname
|
||
if (query.phone) params.phone = query.phone
|
||
if (query.status) params.status = query.status
|
||
return http.get<UserListResult>('/users', { params, signal })
|
||
}
|
||
|
||
/** 新增用户。 */
|
||
export function createUser(data: UserUpsertData): Promise<User> {
|
||
return http.post<User>('/users', data)
|
||
}
|
||
|
||
/** 更新用户(username 不可改)。 */
|
||
export function updateUser(id: string, data: UserUpsertData): Promise<User> {
|
||
return http.patch<User>(`/users/${id}`, data)
|
||
}
|
||
|
||
/** 删除用户(软删)。 */
|
||
export function deleteUser(id: string): Promise<unknown> {
|
||
return http.delete(`/users/${id}`)
|
||
}
|
||
|
||
/** 重置密码。 */
|
||
export function resetPassword(id: string, password: string): Promise<unknown> {
|
||
return http.patch(`/users/${id}/password`, { password })
|
||
}
|
||
|
||
/** 组织列表(用于组织下拉)。 */
|
||
export function listOrgs(signal?: AbortSignal): Promise<Org[]> {
|
||
return http.get<Org[]>('/orgs', { signal })
|
||
}
|