From b206eeeb2d0acdb060bf8eda5f68c1602fcf2069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Fri, 13 Feb 2026 07:20:41 +0900 Subject: [PATCH] =?UTF-8?q?feat:E-Sign=20=ED=95=84=EB=93=9C=20=EC=97=90?= =?UTF-8?q?=EB=94=94=ED=84=B0=EC=97=90=20=ED=8F=B0=ED=8A=B8=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EC=86=8D=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 --- .../Controllers/ESign/EsignApiController.php | 9 +++++++ app/Models/ESign/EsignFieldTemplateItem.php | 2 ++ app/Models/ESign/EsignSignField.php | 2 ++ resources/views/esign/fields.blade.php | 25 ++++++++++++++----- .../views/esign/template-fields.blade.php | 22 +++++++++++----- 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/ESign/EsignApiController.php b/app/Http/Controllers/ESign/EsignApiController.php index b39441bb..b5c54385 100644 --- a/app/Http/Controllers/ESign/EsignApiController.php +++ b/app/Http/Controllers/ESign/EsignApiController.php @@ -383,6 +383,7 @@ public function configureFields(Request $request, int $id): JsonResponse 'fields.*.height' => 'required|numeric', 'fields.*.field_type' => 'required|in:signature,stamp,text,date,checkbox', 'fields.*.field_label' => 'nullable|string|max:100', + 'fields.*.font_size' => 'nullable|integer|min:6|max:72', 'fields.*.is_required' => 'nullable|boolean', ]); @@ -404,6 +405,7 @@ public function configureFields(Request $request, int $id): JsonResponse 'height' => $field['height'], 'field_type' => $field['field_type'], 'field_label' => $field['field_label'] ?? null, + 'font_size' => $field['font_size'] ?? null, 'is_required' => $field['is_required'] ?? true, 'sort_order' => $i, ]); @@ -621,6 +623,7 @@ public function storeTemplate(Request $request): JsonResponse 'items.*.height' => 'required|numeric', 'items.*.field_type' => 'required|in:signature,stamp,text,date,checkbox', 'items.*.field_label' => 'nullable|string|max:100', + 'items.*.font_size' => 'nullable|integer|min:6|max:72', 'items.*.is_required' => 'nullable|boolean', ]); @@ -680,6 +683,7 @@ public function storeTemplate(Request $request): JsonResponse 'height' => $item['height'], 'field_type' => $item['field_type'], 'field_label' => $item['field_label'] ?? null, + 'font_size' => $item['font_size'] ?? null, 'is_required' => $item['is_required'] ?? true, 'sort_order' => $i, ]); @@ -833,6 +837,7 @@ public function updateTemplateItems(Request $request, int $templateId): JsonResp 'items.*.height' => 'required|numeric', 'items.*.field_type' => 'required|in:signature,stamp,text,date,checkbox', 'items.*.field_label' => 'nullable|string|max:100', + 'items.*.font_size' => 'nullable|integer|min:6|max:72', 'items.*.is_required' => 'nullable|boolean', ]); @@ -857,6 +862,7 @@ public function updateTemplateItems(Request $request, int $templateId): JsonResp 'height' => round($itemData['height'], 2), 'field_type' => $itemData['field_type'], 'field_label' => $itemData['field_label'] ?? '', + 'font_size' => $itemData['font_size'] ?? null, 'is_required' => $itemData['is_required'] ?? true, 'sort_order' => $i, ]); @@ -922,6 +928,7 @@ public function duplicateTemplate(int $id): JsonResponse 'height' => $item->height, 'field_type' => $item->field_type, 'field_label' => $item->field_label, + 'font_size' => $item->font_size, 'is_required' => $item->is_required, 'sort_order' => $item->sort_order, ]); @@ -1001,6 +1008,7 @@ public function applyTemplate(Request $request, int $id): JsonResponse 'height' => $item->height, 'field_type' => $item->field_type, 'field_label' => $item->field_label, + 'font_size' => $item->font_size, 'is_required' => $item->is_required, 'sort_order' => $item->sort_order, ]); @@ -1065,6 +1073,7 @@ public function copyFieldsFromContract(Request $request, int $id, int $sourceId) 'height' => $field->height, 'field_type' => $field->field_type, 'field_label' => $field->field_label, + 'font_size' => $field->font_size, 'is_required' => $field->is_required, 'sort_order' => $field->sort_order, ]); diff --git a/app/Models/ESign/EsignFieldTemplateItem.php b/app/Models/ESign/EsignFieldTemplateItem.php index e7b3fe41..9535cb34 100644 --- a/app/Models/ESign/EsignFieldTemplateItem.php +++ b/app/Models/ESign/EsignFieldTemplateItem.php @@ -19,6 +19,7 @@ class EsignFieldTemplateItem extends Model 'height', 'field_type', 'field_label', + 'font_size', 'is_required', 'sort_order', ]; @@ -30,6 +31,7 @@ class EsignFieldTemplateItem extends Model 'position_y' => 'decimal:2', 'width' => 'decimal:2', 'height' => 'decimal:2', + 'font_size' => 'integer', 'is_required' => 'boolean', 'sort_order' => 'integer', ]; diff --git a/app/Models/ESign/EsignSignField.php b/app/Models/ESign/EsignSignField.php index ad9dfdfa..4cb93083 100644 --- a/app/Models/ESign/EsignSignField.php +++ b/app/Models/ESign/EsignSignField.php @@ -20,6 +20,7 @@ class EsignSignField extends Model 'height', 'field_type', 'field_label', + 'font_size', 'field_value', 'is_required', 'sort_order', @@ -31,6 +32,7 @@ class EsignSignField extends Model 'position_y' => 'decimal:4', 'width' => 'decimal:4', 'height' => 'decimal:4', + 'font_size' => 'integer', 'is_required' => 'boolean', 'sort_order' => 'integer', ]; diff --git a/resources/views/esign/fields.blade.php b/resources/views/esign/fields.blade.php index 8590f2dc..69788501 100644 --- a/resources/views/esign/fields.blade.php +++ b/resources/views/esign/fields.blade.php @@ -364,11 +364,19 @@ className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> -
- - onUpdateField(selectedFieldIndex, { page_number: parseInt(e.target.value) || 1 })} - className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> +
+
+ + onUpdateField(selectedFieldIndex, { page_number: parseInt(e.target.value) || 1 })} + className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> +
+
+ + onUpdateField(selectedFieldIndex, { font_size: e.target.value ? parseInt(e.target.value) : null })} + className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> +
-
- - onUpdateField(selectedFieldIndex, { page_number: parseInt(e.target.value) || 1 })} - className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> +
+
+ + onUpdateField(selectedFieldIndex, { page_number: parseInt(e.target.value) || 1 })} + className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> +
+
+ + onUpdateField(selectedFieldIndex, { font_size: e.target.value ? parseInt(e.target.value) : null })} + className="w-full border rounded px-2 py-1 text-xs mt-0.5" /> +