fix(admin): sync moderation status dropdown

This commit is contained in:
iamxvbaba 2026-07-26 22:44:01 +08:00
parent 8b866b2bb2
commit b742450938
8 changed files with 41 additions and 11 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -21,8 +21,8 @@
}
})();
</script>
<script type="module" crossorigin src="/assets/index-DRjvnVte.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BwxAoLbQ.css">
<script type="module" crossorigin src="/assets/index-DJw3UpEg.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-D5Lc7N2D.css">
</head>
<body>
<div id="root"></div>

View file

@ -459,7 +459,9 @@ const translations: Record<Language, Record<string, string>> = {
"moderation.currentQueue": "Current queue",
"moderation.criticalCases": "Critical cases",
"moderation.pendingOrFailed": "Pending / failed actions",
"moderation.statusFilter": "Case status filter (comma-separated identifiers)",
"moderation.statusFilter": "Case status filter",
"moderation.statusFilter.active": "Active queue",
"moderation.statusFilter.all": "All statuses",
"moderation.assignee": "Reviewer",
"moderation.allAssignees": "Leave blank for all",
"moderation.case": "Case",
@ -1043,7 +1045,9 @@ const translations: Record<Language, Record<string, string>> = {
"moderation.currentQueue": "当前队列",
"moderation.criticalCases": "关键案件",
"moderation.pendingOrFailed": "处置待完成 / 失败",
"moderation.statusFilter": "案件状态筛选(英文标识以逗号分隔)",
"moderation.statusFilter": "案件状态筛选",
"moderation.statusFilter.active": "活跃队列",
"moderation.statusFilter.all": "全部状态",
"moderation.assignee": "审核人",
"moderation.allAssignees": "留空为全部",
"moderation.case": "案件",
@ -1627,7 +1631,9 @@ const translations: Record<Language, Record<string, string>> = {
"moderation.currentQueue": "Текущая очередь",
"moderation.criticalCases": "Критические обращения",
"moderation.pendingOrFailed": "Ожидающие / неудачные действия",
"moderation.statusFilter": "Фильтр по статусу (идентификаторы через запятую)",
"moderation.statusFilter": "Фильтр по статусу обращения",
"moderation.statusFilter.active": "Активная очередь",
"moderation.statusFilter.all": "Все статусы",
"moderation.assignee": "Модератор",
"moderation.allAssignees": "Оставьте пустым для всех",
"moderation.case": "Обращение",

View file

@ -8,6 +8,18 @@ import type { Navigate } from "../routing";
import type { ModerationCaseRow } from "../types";
const defaultStatuses = "open,in_review,action_pending,action_failed,appeal_review";
const allStatuses = "open,in_review,action_pending,action_failed,resolved,dismissed,appeal_review";
const statusFilterOptions = [
{ value: defaultStatuses, labelKey: "moderation.statusFilter.active" },
{ value: allStatuses, labelKey: "moderation.statusFilter.all" },
{ value: "open", labelKey: "moderation.status.open" },
{ value: "in_review", labelKey: "moderation.status.in_review" },
{ value: "action_pending", labelKey: "moderation.status.action_pending" },
{ value: "action_failed", labelKey: "moderation.status.action_failed" },
{ value: "appeal_review", labelKey: "moderation.status.appeal_review" },
{ value: "resolved", labelKey: "moderation.status.resolved" },
{ value: "dismissed", labelKey: "moderation.status.dismissed" }
];
export function ModerationCasesPage({ navigate }: { navigate: Navigate }) {
const { t } = useI18n();
@ -58,11 +70,15 @@ export function ModerationCasesPage({ navigate }: { navigate: Navigate }) {
<form className="toolbar" onSubmit={(event) => { event.preventDefault(); void load(); }}>
<label className="field-inline">
<span>{t("common.status")}</span>
<input
<select
aria-label={t("moderation.statusFilter")}
value={statuses}
onChange={(event) => setStatuses(event.target.value)}
/>
>
{statusFilterOptions.map((option) => (
<option key={option.value} value={option.value}>{t(option.labelKey)}</option>
))}
</select>
</label>
<label className="field-inline">
<span>{t("moderation.assignee")}</span>

View file

@ -174,6 +174,7 @@ body {
button,
input,
select,
textarea {
font: inherit;
}

View file

@ -325,6 +325,7 @@
}
input,
select,
textarea {
color: var(--text);
background: var(--input-bg);
@ -339,12 +340,17 @@ textarea::placeholder {
color: var(--muted-2);
}
input {
input,
select {
width: 190px;
height: 34px;
padding: 0 10px;
}
select {
min-width: 220px;
}
textarea {
width: 100%;
padding: 9px 10px;
@ -352,6 +358,7 @@ textarea {
}
input:focus,
select:focus,
textarea:focus {
border-color: var(--brand);
box-shadow: 0 0 0 3px var(--focus);