summaryrefslogtreecommitdiff
path: root/lib/shi-signature
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-12-09 03:04:05 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-12-09 03:04:05 +0000
commitb5c174429548a53e5c86a13bdbfc61516e5ee345 (patch)
tree4c3c6102c6e6357c6821446ddfe085bcff2291cf /lib/shi-signature
parent1ea1dfa5c2684838d37ebfc58e3e8fd98c2dc60b (diff)
(최겸) 구매 구매자서명 내 삼성중공업 정보 입력 추가
Diffstat (limited to 'lib/shi-signature')
-rw-r--r--lib/shi-signature/buyer-signature.ts15
-rw-r--r--lib/shi-signature/signature-list.tsx10
-rw-r--r--lib/shi-signature/upload-form.tsx40
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>