diff --git a/app/api/materials/[id]/route.ts b/app/api/materials/[id]/route.ts index cb4c217..fb6c98e 100644 --- a/app/api/materials/[id]/route.ts +++ b/app/api/materials/[id]/route.ts @@ -169,7 +169,7 @@ export async function GET( reportKind: true, certificateTestedOn: true, certificateNumber: true, - certificateUsageInstructions: true, + certificateExpiresOn: true, reportUsageRules: true, liveDate: true, liveHost: true, @@ -251,7 +251,7 @@ export async function GET( reportKind: true, certificateTestedOn: true, certificateNumber: true, - certificateUsageInstructions: true, + certificateExpiresOn: true, reportUsageRules: true, liveDate: true, liveHost: true, @@ -387,7 +387,7 @@ export async function GET( reportKind: materialWithUser.reportKind || null, certificateTestedOn: materialWithUser.certificateTestedOn || null, certificateNumber: materialWithUser.certificateNumber || null, - certificateUsageInstructions: materialWithUser.certificateUsageInstructions || null, + certificateExpiresOn: materialWithUser.certificateExpiresOn || null, reportUsageRules: materialWithUser.reportUsageRules || null, categoryName: materialWithUser.categoryName, sceneName: materialWithUser.sceneName, @@ -481,7 +481,7 @@ export async function GET( reportKind: materialWithUser.reportKind || null, certificateTestedOn: materialWithUser.certificateTestedOn || null, certificateNumber: materialWithUser.certificateNumber || null, - certificateUsageInstructions: materialWithUser.certificateUsageInstructions || null, + certificateExpiresOn: materialWithUser.certificateExpiresOn || null, reportUsageRules: materialWithUser.reportUsageRules || null, categoryName: materialWithUser.categoryName, sceneName: materialWithUser.sceneName, @@ -617,7 +617,7 @@ export async function PUT( ...(formData.has('reportKind') ? { reportKind: formData.get('reportKind') as string | null } : {}), ...(formData.has('certificateTestedOn') ? { certificateTestedOn: formData.get('certificateTestedOn') as string | null } : {}), ...(formData.has('certificateNumber') ? { certificateNumber: formData.get('certificateNumber') as string | null } : {}), - ...(formData.has('certificateUsageInstructions') ? { certificateUsageInstructions: formData.get('certificateUsageInstructions') as string | null } : {}), + ...(formData.has('certificateExpiresOn') ? { certificateExpiresOn: formData.get('certificateExpiresOn') as string | null } : {}), ...(formData.has('reportUsageRules') ? { reportUsageRules: formData.get('reportUsageRules') as string | null } : {}), categoryName: formData.get('categoryName') as string | null, sceneName: formData.get('sceneName') as string | null, diff --git a/app/api/materials/share/route.ts b/app/api/materials/share/route.ts index a570f58..714725a 100644 --- a/app/api/materials/share/route.ts +++ b/app/api/materials/share/route.ts @@ -128,7 +128,7 @@ export async function GET(request: NextRequest) { reportKind: true, certificateTestedOn: true, certificateNumber: true, - certificateUsageInstructions: true, + certificateExpiresOn: true, reportUsageRules: true, liveDate: true, liveHost: true, @@ -364,7 +364,7 @@ export async function GET(request: NextRequest) { reportKind: (material as any).reportKind || null, certificateTestedOn: (material as any).certificateTestedOn || null, certificateNumber: (material as any).certificateNumber || null, - certificateUsageInstructions: (material as any).certificateUsageInstructions || null, + certificateExpiresOn: (material as any).certificateExpiresOn || null, reportUsageRules: (material as any).reportUsageRules || null, isAiGenerated: Boolean((material as any).isAiGenerated), taskDetailSourceType: (material as any).taskDetailSourceType || null, diff --git a/app/api/materials/update/route.ts b/app/api/materials/update/route.ts index 87d80af..59aab30 100644 --- a/app/api/materials/update/route.ts +++ b/app/api/materials/update/route.ts @@ -48,7 +48,7 @@ export async function PUT(request: NextRequest) { ...(formData.has('reportKind') ? { reportKind: formData.get('reportKind') as string | null } : {}), ...(formData.has('certificateTestedOn') ? { certificateTestedOn: formData.get('certificateTestedOn') as string | null } : {}), ...(formData.has('certificateNumber') ? { certificateNumber: formData.get('certificateNumber') as string | null } : {}), - ...(formData.has('certificateUsageInstructions') ? { certificateUsageInstructions: formData.get('certificateUsageInstructions') as string | null } : {}), + ...(formData.has('certificateExpiresOn') ? { certificateExpiresOn: formData.get('certificateExpiresOn') as string | null } : {}), ...(formData.has('reportUsageRules') ? { reportUsageRules: formData.get('reportUsageRules') as string | null } : {}), categoryName: formData.get('categoryName') as string | null, sceneName: formData.get('sceneName') as string | null, diff --git a/app/api/materials/upload/certificate-report/init/route.test.ts b/app/api/materials/upload/certificate-report/init/route.test.ts index e2f47af..59f2d64 100644 --- a/app/api/materials/upload/certificate-report/init/route.test.ts +++ b/app/api/materials/upload/certificate-report/init/route.test.ts @@ -22,7 +22,7 @@ const input = { platformName: '品牌', certificateTestedOn: '2027-09-23', certificateNumber: 'CMA-2026-001', - certificateUsageInstructions: '使用前核对送检主体', + certificateExpiresOn: '2028-09-23', reportUsageRules: '完整说明\n第二行', } @@ -50,7 +50,7 @@ describe('检测报告初始化', () => { reportKind: '原材料', certificateTestedOn: new Date('2027-09-23T00:00:00.000Z'), certificateNumber: 'CMA-2026-001', - certificateUsageInstructions: '使用前核对送检主体', + certificateExpiresOn: new Date('2028-09-23T00:00:00.000Z'), reportUsageRules: '完整说明\n第二行', platformName: '品牌', }), @@ -62,4 +62,10 @@ describe('检测报告初始化', () => { expect(response.status).toBe(400) expect(prisma.material.create).not.toHaveBeenCalled() }) + + test('到期时间早于检测日期时不写入素材', async () => { + const response = await POST(request({ ...input, certificateExpiresOn: '2027-09-22' })) + expect(response.status).toBe(400) + expect(prisma.material.create).not.toHaveBeenCalled() + }) }) diff --git a/app/api/materials/upload/certificate-report/init/route.ts b/app/api/materials/upload/certificate-report/init/route.ts index f5b5c36..c5baa8a 100644 --- a/app/api/materials/upload/certificate-report/init/route.ts +++ b/app/api/materials/upload/certificate-report/init/route.ts @@ -23,7 +23,7 @@ export async function POST(request: NextRequest) { reportTitle, certificateTestedOn: body.certificateTestedOn, certificateNumber: body.certificateNumber, - certificateUsageInstructions: body.certificateUsageInstructions, + certificateExpiresOn: body.certificateExpiresOn, reportUsageRules: body.reportUsageRules, platformName, }) diff --git a/app/edit/[id]/page.tsx b/app/edit/[id]/page.tsx index 2b60632..b8495a1 100644 --- a/app/edit/[id]/page.tsx +++ b/app/edit/[id]/page.tsx @@ -7,7 +7,7 @@ import Header from '@/components/Header' import SearchableUserSelect from '@/components/SearchableUserSelect' import { useConfirmActionDialog } from '@/components/ConfirmActionDialog' import TaskReferenceFields from '@/components/upload/TaskReferenceFields' -import CertificateTestDatePicker from '@/components/upload/CertificateTestDatePicker' +import CertificateDatePicker from '@/components/upload/CertificateDatePicker' import { canManuallyReplacePreview, getSelectableMaterialTypeOptions, @@ -38,7 +38,7 @@ interface Material { reportKind?: string | null certificateTestedOn?: string | Date | null certificateNumber?: string | null - certificateUsageInstructions?: string | null + certificateExpiresOn?: string | null reportUsageRules?: string | null liveDate?: Date | string | null liveHost?: string | null @@ -111,7 +111,7 @@ export default function EditMaterialPage({ params }: { params: { id: string } }) const [reportKind, setReportKind] = useState('') const [certificateTestedOn, setCertificateTestedOn] = useState('') const [certificateNumber, setCertificateNumber] = useState('') - const [certificateUsageInstructions, setCertificateUsageInstructions] = useState('') + const [certificateExpiresOn, setCertificateExpiresOn] = useState('') const [reportUsageRules, setReportUsageRules] = useState('') const [liveDate, setLiveDate] = useState('') const [liveHost, setLiveHost] = useState('') @@ -163,7 +163,7 @@ export default function EditMaterialPage({ params }: { params: { id: string } }) reportKind, certificateTestedOn, certificateNumber, - certificateUsageInstructions, + certificateExpiresOn, reportUsageRules, categoryName, sceneName, @@ -191,7 +191,7 @@ export default function EditMaterialPage({ params }: { params: { id: string } }) reportKind, certificateTestedOn, certificateNumber, - certificateUsageInstructions, + certificateExpiresOn, reportUsageRules, sceneName, taskDetailRequesterUserId, @@ -306,7 +306,7 @@ export default function EditMaterialPage({ params }: { params: { id: string } }) setReportKind(data.reportKind || '') setCertificateTestedOn(data.certificateTestedOn ? String(data.certificateTestedOn).slice(0, 10) : '') setCertificateNumber(data.certificateNumber || '') - setCertificateUsageInstructions(data.certificateUsageInstructions || '') + setCertificateExpiresOn(data.certificateExpiresOn ? String(data.certificateExpiresOn).slice(0, 10) : '') setReportUsageRules(data.reportUsageRules || (isCertificateReportMaterialType(data.materialType) ? DEFAULT_CERTIFICATE_REPORT_USAGE_RULES : '')) setLiveDate(data.liveDate ? String(data.liveDate).slice(0, 10) : '') setLiveHost(data.liveHost || '') @@ -349,7 +349,7 @@ export default function EditMaterialPage({ params }: { params: { id: string } }) reportKind: data.reportKind || '', certificateTestedOn: data.certificateTestedOn ? String(data.certificateTestedOn).slice(0, 10) : '', certificateNumber: data.certificateNumber || '', - certificateUsageInstructions: data.certificateUsageInstructions || '', + certificateExpiresOn: data.certificateExpiresOn ? String(data.certificateExpiresOn).slice(0, 10) : '', reportUsageRules: data.reportUsageRules || (isCertificateReportMaterialType(data.materialType) ? DEFAULT_CERTIFICATE_REPORT_USAGE_RULES : ''), categoryName: data.categoryName || '', sceneName: data.sceneName || '', @@ -526,7 +526,7 @@ export default function EditMaterialPage({ params }: { params: { id: string } }) reportTitle, certificateTestedOn, certificateNumber, - certificateUsageInstructions, + certificateExpiresOn, reportUsageRules, platformName, }, material?.materialType === materialType ? material?.platformName || '' : '') @@ -592,7 +592,7 @@ export default function EditMaterialPage({ params }: { params: { id: string } }) formData.append('reportKind', reportKind) formData.append('certificateTestedOn', certificateTestedOn) formData.append('certificateNumber', certificateNumber) - formData.append('certificateUsageInstructions', certificateUsageInstructions) + formData.append('certificateExpiresOn', certificateExpiresOn) formData.append('reportUsageRules', reportUsageRules) } if (materialType === '直播切片') { @@ -1065,17 +1065,17 @@ export default function EditMaterialPage({ params }: { params: { id: string } })
- +

请按报告标注的检测日期选择

- - setCertificateNumber(event.target.value)} maxLength={120} className="input-apple" required /> + +
- -