帐号治理-帐号管理--更新

This commit is contained in:
Cheng Zhou
2025-12-18 19:14:38 +08:00
parent f6b89cb8c4
commit eed83cec5a
23 changed files with 233 additions and 30 deletions
+50 -2
View File
@@ -23,7 +23,7 @@
</template>
</el-table-column>
<el-table-column prop="added_at" label="加入时间" width="200" />
<el-table-column label="操作" width="260" fixed="right">
<el-table-column label="操作" width="320" fixed="right">
<template #default="scope">
<el-select
v-model="scope.row.role_in_study"
@@ -38,6 +38,7 @@
<el-option label="IMP" value="IMP" />
<el-option label="ADMIN" value="ADMIN" />
</el-select>
<el-button link type="danger" size="small" @click="onDelete(scope.row)">删除</el-button>
<el-button
link
:type="scope.row.is_active ? 'danger' : 'primary'"
@@ -271,7 +272,7 @@ const toggleActive = async (row: StudyMember) => {
}).catch(() => null);
if (!ok) return;
try {
await removeMember(projectId.value, row.id);
await updateMember(projectId.value, row.id, { is_active: false });
ElMessage.success("成员已停用");
loadMembers();
logAudit("PROJECT_MEMBER_UPDATED", {
@@ -318,6 +319,53 @@ const toggleActive = async (row: StudyMember) => {
}
};
const onDelete = async (row: StudyMember) => {
if (!projectId.value) return;
const decision = evaluateAction({
actorRole: auth.user?.role || null,
requiredPermission: "project.members.manage",
target: { projectId: projectId.value, memberId: row.id },
});
if (!decision.allowed) {
ElMessage.warning(decision.reason || "无权限执行该操作");
logAudit(decision.auditType, {
targetId: projectId.value,
targetName: project.value?.name,
reason: decision.reason,
severity: decision.severity,
});
return;
}
const ok = await ElMessageBox.confirm("确认将该账号从本项目移除?账号本身不会被删除。", "删除成员", {
type: "warning",
confirmButtonText: "确认",
cancelButtonText: "取消",
}).catch(() => null);
if (!ok) return;
try {
await removeMember(projectId.value, row.id);
members.value = members.value.filter((m) => m.id !== row.id);
ElMessage.success("已从项目移除");
logAudit("PROJECT_MEMBER_UPDATED", {
targetId: projectId.value,
targetName: project.value?.name,
before: { is_active: row.is_active },
after: { removed_member_id: row.id },
severity: "normal",
});
} catch (e: any) {
ElMessage.error(e?.response?.data?.message || "删除失败");
logAudit("PROJECT_MEMBER_UPDATED", {
targetId: projectId.value,
targetName: project.value?.name,
before: { is_active: row.is_active },
after: { removed_member_id: row.id },
severity: "warning",
reason: e?.response?.data?.message,
});
}
};
const availableUsers = computed(() => users.value);
onMounted(async () => {