feat(subject): 参与者状态依赖筛选日期并支持后续编辑

- 未填写筛选日期的参与者不再默认进入 SCREENING,状态显示为占位符。
- SubjectUpdate 不再开放 status 入参,改由后端依据日期推导,并新增
  screening_date 字段允许 PM/CRA 后续补录筛选日期。
- 参与者管理页与详情页同步:详情页支持编辑筛选日期,列表页与详情页
  在没有筛选日期时显示占位符而非旧 enum 值。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Cheng Zhou
2026-05-25 12:36:33 +08:00
parent f40e979c53
commit a2add43fa5
6 changed files with 47 additions and 8 deletions
+5 -1
View File
@@ -85,7 +85,7 @@
<template #default="scope">{{ displayDate(scope.row.consent_date) }}</template>
</el-table-column>
<el-table-column prop="status" :label="TEXT.common.fields.status">
<template #default="scope">{{ displayEnum(TEXT.enums.subjectStatus, scope.row.status) }}</template>
<template #default="scope">{{ displaySubjectStatus(scope.row) }}</template>
</el-table-column>
<el-table-column prop="enrollment_date" :label="TEXT.common.fields.enrollmentDate">
<template #default="scope">{{ displayDate(scope.row.enrollment_date) }}</template>
@@ -227,6 +227,10 @@ const getAeBadges = (row: any) => {
}
return badges;
};
const displaySubjectStatus = (subject: any) => {
if (!subject?.screening_date) return TEXT.common.fallback;
return displayEnum(TEXT.enums.subjectStatus, subject.status);
};
const filteredItems = computed(() => {
const keyword = filters.value.keyword.trim().toLowerCase();
return items.value.filter((item) => {