feat(@vben/web-antd): 项目成员管理改 Drawer + 分页 + 增量

从 Modal 多选改为 Drawer 分页表,更接近"成员管理"语义:
- 原 assign-user-form.vue 重写为 Drawer + Vxe 分页表
- 新增 add-user-modal.vue 子弹窗用于添加用户(过滤已是成员)
- 每行一个"移除"popConfirm 按钮,调 removeProjectUser 单删
- 顶部 keyword 搜索,按 username/nickname/mobile 模糊
- 底部提示:超管不在此列表(后端已过滤)
- data.ts 新增 useProjectMemberGridColumns
- api 新增 getProjectUserPage / addProjectUsers / removeProjectUser
- project/index.vue 接入点改 useVbenDrawer

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-04-23 15:48:43 +08:00
parent b15b6b4f4d
commit 09538b03cb
5 changed files with 342 additions and 78 deletions

View File

@@ -1,3 +1,7 @@
import type { PageParam, PageResult } from '@vben/request';
import type { SystemUserApi } from '#/api/system/user';
import { requestClient } from '#/api/request';
export namespace SystemUserProjectApi {
@@ -9,6 +13,14 @@ export namespace SystemUserProjectApi {
projectId: number;
userIds: number[];
}
export interface AddProjectUsersReq {
projectId: number;
userIds: number[];
}
export interface ProjectUserPageReq extends PageParam {
projectId: number;
keyword?: string;
}
}
/** 给用户覆盖式分配项目 */
@@ -44,3 +56,26 @@ export function getUserIdsByProjectId(projectId: number) {
`/system/user-project/list-user-ids-by-project?projectId=${projectId}`,
);
}
/** 分页查询项目成员(已自动过滤超级管理员) */
export function getProjectUserPage(params: SystemUserProjectApi.ProjectUserPageReq) {
return requestClient.get<PageResult<SystemUserApi.User>>(
'/system/user-project/project-user-page',
{ params },
);
}
/** 增量给项目添加成员 */
export function addProjectUsers(data: SystemUserProjectApi.AddProjectUsersReq) {
return requestClient.post<boolean>(
'/system/user-project/add-project-users',
data,
);
}
/** 从项目中移除单个成员 */
export function removeProjectUser(projectId: number, userId: number) {
return requestClient.delete<boolean>(
`/system/user-project/remove-project-user?projectId=${projectId}&userId=${userId}`,
);
}