diff --git a/app/pages/admin/arrange.vue b/app/pages/admin/arrange.vue index ef1a496..94dffa2 100644 --- a/app/pages/admin/arrange.vue +++ b/app/pages/admin/arrange.vue @@ -100,6 +100,12 @@ const { data: reviewAll, suspense: reviewAllSuspense } = useQuery({ }); await reviewAllSuspense(); +const { data: timeCurrently, suspense: timeSuspense } = useQuery({ + queryFn: () => $trpc.time.currently.query(), + queryKey: ['time.currently'], +}); +await timeSuspense(); + const { copy: useCopy } = useClipboard({ legacy: true }); async function copySongInfo(day: RouterOutput['arrangements']['list'][0]) { if (!day.songs.length) { @@ -143,6 +149,10 @@ const requirementList = computed<{ label: '审核全部歌曲', value: reviewAll.value ?? true, }, + { + label: '投稿截止', + value: timeCurrently.value ?? true, + }, ]; }); diff --git a/server/trpc/routers/arrangements.ts b/server/trpc/routers/arrangements.ts index e6d21d0..b954387 100644 --- a/server/trpc/routers/arrangements.ts +++ b/server/trpc/routers/arrangements.ts @@ -5,6 +5,7 @@ import { arrangements, songs } from '~~/server/db/schema'; import { desc, eq, sql } from 'drizzle-orm'; import { z } from 'zod'; import { adminProcedure, protectedProcedure, requirePermission, router } from '../trpc'; +import { fitsInTime } from './time'; async function reviewAll() { return (await db.query.songs.findMany({ @@ -79,6 +80,9 @@ export const arrangementsRouter = router({ if (!(await reviewAll())) throw new TRPCError({ code: 'FORBIDDEN', message: '请审核全部歌曲' }); + if (!(await fitsInTime(new Date()))) + throw new TRPCError({ code: 'FORBIDDEN', message: '请在投稿截止后排歌' }); + const start = parseDate(input.start); const end = parseDate(input.end);