管理后台前后端逻辑、UI美化

This commit is contained in:
Cheng Zhou
2026-01-16 13:50:08 +08:00
parent 05c1f9579a
commit 7fdcfdaadd
82 changed files with 3210 additions and 549 deletions
+6 -4
View File
@@ -5,7 +5,6 @@
<div>
<h3>{{ TEXT.modules.adminProjectMembers.title }}</h3>
<div class="sub" v-if="project">{{ TEXT.modules.adminProjectMembers.projectPrefix }}{{ project.code }} - {{ project.name }}</div>
<div class="sub">{{ TEXT.modules.adminProjectMembers.subtitle }}</div>
</div>
<el-button type="primary" @click="openAdd">{{ TEXT.common.actions.add }}{{ TEXT.modules.adminProjectMembers.memberLabel }}</el-button>
</div>
@@ -39,7 +38,7 @@
v-model="scope.row.role_in_study"
size="small"
style="width: 120px"
@change="(val) => updateRole(scope.row.id, val)"
@change="(val: string) => updateRole(scope.row.id, val)"
:disabled="!scope.row.is_active || scope.row.effectiveStatus === 'DISABLED_GLOBAL'"
>
<el-option :label="TEXT.enums.userRole.PM" value="PM" />
@@ -144,7 +143,7 @@ const loadMembers = async () => {
if (!projectId.value) return;
loading.value = true;
try {
const { data } = await listMembers(projectId.value, { limit: 500 });
const { data } = await listMembers(projectId.value, { limit: 500, include_inactive: true });
members.value = Array.isArray(data) ? data : data.items || [];
} catch (e: any) {
ElMessage.error(e?.response?.data?.message || TEXT.modules.adminProjectMembers.loadFailed);
@@ -382,7 +381,10 @@ const onDelete = async (row: StudyMember) => {
}
};
const availableUsers = computed(() => users.value);
const availableUsers = computed(() => {
const memberUserIds = new Set(members.value.map((m) => m.user_id));
return users.value.filter((u) => !memberUserIds.has(u.id));
});
onMounted(async () => {
await Promise.all([loadProject(), loadUsers()]);