diff options
Diffstat (limited to 'lib/shi-signature')
| -rw-r--r-- | lib/shi-signature/buyer-signature.ts | 15 | ||||
| -rw-r--r-- | lib/shi-signature/signature-list.tsx | 10 | ||||
| -rw-r--r-- | lib/shi-signature/upload-form.tsx | 40 |
3 files changed, 61 insertions, 4 deletions
diff --git a/lib/shi-signature/buyer-signature.ts b/lib/shi-signature/buyer-signature.ts index d464ae54..1055fdd2 100644 --- a/lib/shi-signature/buyer-signature.ts +++ b/lib/shi-signature/buyer-signature.ts @@ -8,6 +8,9 @@ import { writeFile, mkdir } from 'fs/promises'; import path from 'path'; import { v4 as uuidv4 } from 'uuid'; +const DEFAULT_SHI_ADDRESS = '경기도 성남시 분당구 판교로 227번길 23'; +const DEFAULT_SHI_CEO_NAME = '최성안'; + export async function uploadBuyerSignature(formData: FormData) { try { const file = formData.get('file') as File; @@ -25,6 +28,16 @@ export async function uploadBuyerSignature(formData: FormData) { return { success: false, error: '이미지 파일만 업로드 가능합니다.' }; } + const addressInput = formData.get('shiAddress'); + const ceoNameInput = formData.get('shiCeoName'); + + const shiAddress = typeof addressInput === 'string' && addressInput.trim() + ? addressInput.trim() + : DEFAULT_SHI_ADDRESS; + const shiCeoName = typeof ceoNameInput === 'string' && ceoNameInput.trim() + ? ceoNameInput.trim() + : DEFAULT_SHI_CEO_NAME; + const bytes = await file.arrayBuffer(); const buffer = Buffer.from(bytes); @@ -50,6 +63,8 @@ export async function uploadBuyerSignature(formData: FormData) { const [newSignature] = await db.insert(buyerSignatures) .values({ name: '삼성중공업', + shiAddress, + shiCeoName, imageUrl: `/uploads/signatures/${fileName}`, dataUrl: base64, mimeType: file.type, diff --git a/lib/shi-signature/signature-list.tsx b/lib/shi-signature/signature-list.tsx index 93cd3dbe..2d47589a 100644 --- a/lib/shi-signature/signature-list.tsx +++ b/lib/shi-signature/signature-list.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState } from 'react'; -import { BuyerSignature } from '@/db/schemae'; +import { BuyerSignature } from '@/db/schema'; import { setActiveSignature, deleteSignature } from './buyer-signature'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; @@ -93,6 +93,12 @@ export function SignatureList({ signatures }: SignatureListProps) { )} </div> <p className="text-sm text-muted-foreground"> + 주소: {signature.shiAddress} + </p> + <p className="text-sm text-muted-foreground"> + 대표이사: {signature.shiCeoName} + </p> + <p className="text-xs text-muted-foreground"> {new Date(signature.createdAt).toLocaleDateString()} </p> </div> @@ -120,7 +126,7 @@ export function SignatureList({ signatures }: SignatureListProps) { <Button variant="outline" size="sm" - disabled={signature.isActive} + disabled={!!signature.isActive} > <Trash2 className="h-4 w-4" /> </Button> diff --git a/lib/shi-signature/upload-form.tsx b/lib/shi-signature/upload-form.tsx index 642cd1a5..4aa1c442 100644 --- a/lib/shi-signature/upload-form.tsx +++ b/lib/shi-signature/upload-form.tsx @@ -7,12 +7,22 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Alert, AlertDescription } from '@/components/ui/alert'; -import { Upload, Loader2, CheckCircle } from 'lucide-react'; +import { Upload, Loader2 } from 'lucide-react'; import { toast } from 'sonner'; +import { BuyerSignature } from '@/db/schema'; -export function BuyerSignatureUploadForm() { +const DEFAULT_SHI_ADDRESS = '경기도 성남시 분당구 판교로 227번길 23'; +const DEFAULT_SHI_CEO_NAME = '최성안'; + +interface BuyerSignatureUploadFormProps { + initialSignature?: BuyerSignature | null; +} + +export function BuyerSignatureUploadForm({ initialSignature }: BuyerSignatureUploadFormProps) { const [isUploading, setIsUploading] = useState(false); const [preview, setPreview] = useState<string | null>(null); + const [shiAddress, setShiAddress] = useState(initialSignature?.shiAddress ?? DEFAULT_SHI_ADDRESS); + const [shiCeoName, setShiCeoName] = useState(initialSignature?.shiCeoName ?? DEFAULT_SHI_CEO_NAME); const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => { const file = e.target.files?.[0]; @@ -30,6 +40,8 @@ export function BuyerSignatureUploadForm() { setIsUploading(true); const formData = new FormData(e.currentTarget); + formData.set('shiAddress', shiAddress); + formData.set('shiCeoName', shiCeoName); try { const result = await uploadBuyerSignature(formData); @@ -74,6 +86,30 @@ export function BuyerSignatureUploadForm() { </p> </div> + <div className="space-y-2"> + <Label htmlFor="shiAddress">삼성중공업 주소</Label> + <Input + id="shiAddress" + name="shiAddress" + value={shiAddress} + onChange={(event) => setShiAddress(event.target.value)} + required + disabled={isUploading} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="shiCeoName">대표이사 이름</Label> + <Input + id="shiCeoName" + name="shiCeoName" + value={shiCeoName} + onChange={(event) => setShiCeoName(event.target.value)} + required + disabled={isUploading} + /> + </div> + {preview && ( <div className="border rounded-lg p-4 bg-gray-50"> <Label className="text-sm font-medium mb-2 block">미리보기</Label> |
