fix(分组): 候选人排除已在本组的成员
反馈:某人明明已经在成员名单里,点「添加成员」却还能再选他一次 ——
界面自相矛盾,看着就像分组没生效。
member-candidates 新增 group_id 参数:传了就把该组已有成员排除掉。
⚠️ MOM 与 Track 是**两个独立的库**,没法 JOIN,所以先在本库查出该组成员
集合,再在内存里排掉。LICA 只有十几人,这个取舍是划算的(已加注释)。
前端配合:
· openAddMember 传 selectedId —— 面板一打开,候选就是干净的
· 添加成功后**保持面板打开并重拉候选**:刚加进去的人立刻从方块里消失,
既能连续加人,也不会出现「刚加完还能再选他一次」
实测:
生产小组(成员=魏会军):不带 group_id 17 人含他;带 group_id=3 → 16 人已排除
维修大组同理排除齐海建
加「李婧」后她立即从候选方块消失;测试数据已清理
This commit is contained in:
@ -207,7 +207,8 @@ export default function AdminGroupsPage() {
|
||||
async function openAddMember() {
|
||||
if (selectedId == null) return;
|
||||
try {
|
||||
setCandidates(await fetchMemberCandidates());
|
||||
// 传 selectedId:后端会把已在本组的人排除掉,避免"已经加了还能再选"
|
||||
setCandidates(await fetchMemberCandidates(selectedId));
|
||||
setPicked([]);
|
||||
setPickedLeader(false);
|
||||
setCandidateKeyword("");
|
||||
@ -234,7 +235,9 @@ export default function AdminGroupsPage() {
|
||||
}
|
||||
setPicked([]);
|
||||
setPickedLeader(false);
|
||||
setCandidates([]);
|
||||
// 面板保持打开并重拉候选 —— 刚加进去的人会从方块里消失,
|
||||
// 这样既能连续加人,也不会出现"刚加完还能再选他一次"
|
||||
setCandidates(await fetchMemberCandidates(selectedId));
|
||||
await Promise.all([loadDetail(selectedId), load()]);
|
||||
} catch (err) {
|
||||
message.error(extractErrorMessage(err, "添加失败"));
|
||||
|
||||
@ -131,10 +131,21 @@ export async function setGroupLeader(
|
||||
return data;
|
||||
}
|
||||
|
||||
/** 候选人下拉 —— 数据源是 MOM 的 LICA 部门人员 */
|
||||
export async function fetchMemberCandidates(keyword?: string): Promise<MemberCandidate[]> {
|
||||
/**
|
||||
* 候选人列表 —— 数据源是 MOM 的 LICA 部门人员。
|
||||
*
|
||||
* ⚠️ 传 groupId 时后端会**排除已在该组的人** —— 否则会出现
|
||||
* 「他明明已经在成员名单里,选人时却还能再选一次」的矛盾。
|
||||
*/
|
||||
export async function fetchMemberCandidates(
|
||||
groupId?: number,
|
||||
keyword?: string
|
||||
): Promise<MemberCandidate[]> {
|
||||
const { data } = await api.get<MemberCandidate[]>("/groups/member-candidates", {
|
||||
params: keyword ? { keyword } : {},
|
||||
params: {
|
||||
...(groupId != null ? { group_id: groupId } : {}),
|
||||
...(keyword ? { keyword } : {}),
|
||||
},
|
||||
});
|
||||
return data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user