diff --git a/src/app/(admin)/admin/announcements/announcement-form.tsx b/src/app/(admin)/admin/announcements/announcement-form.tsx index 016ce3a..5de5acb 100644 --- a/src/app/(admin)/admin/announcements/announcement-form.tsx +++ b/src/app/(admin)/admin/announcements/announcement-form.tsx @@ -15,6 +15,7 @@ import { BooleanToggle } from "@/components/ui/boolean-toggle"; import { Button } from "@/components/ui/button"; import { Dialog, + DialogBody, DialogContent, DialogHeader, DialogTitle, @@ -22,6 +23,13 @@ import { } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { getErrorMessage } from "@/lib/errors"; @@ -43,6 +51,32 @@ interface AnnouncementFormData { endAt: Date | string | null; } +const audienceLabels: Record = { + PUBLIC: "公开", + USERS: "全部用户", + ADMINS: "全部管理员", + SPECIFIC_USER: "指定用户", +}; + +const displayTypeLabels: Record = { + INLINE: "普通公告", + BIG: "大公告", + POPUP: "弹窗公告", +}; + +function getAudienceLabel(value: unknown) { + return audienceLabels[value as AnnouncementAudience] ?? "选择范围"; +} + +function getDisplayTypeLabel(value: unknown) { + return displayTypeLabels[value as AnnouncementDisplayType] ?? "选择展示方式"; +} + +function getTargetUserLabel(users: AnnouncementOptionUser[], value: unknown) { + if (!value) return "不指定"; + return users.find((user) => user.id === value)?.email ?? "选择用户"; +} + function toDateTimeLocalValue(value: Date | string | null) { if (!value) { return ""; @@ -94,48 +128,55 @@ export function AnnouncementForm({ }> {triggerLabel ?? "编辑"} - - + + 编辑公告 -
-
-
+ + +
+
-
+
- + + {(value) => getAudienceLabel(value)} + + + 公开(登录/注册页可见) + 全部用户 + 全部管理员 + 指定用户 + +
-
-
+
+
- + + {(value) => getDisplayTypeLabel(value)} + + + 普通公告 + 大公告 + 弹窗公告 + +
-
+
-
+
- + + {(value) => getTargetUserLabel(users, value)} + + + 不指定 + {users.map((user) => ( + + {user.email} + + ))} + +
-
+