From eafd81d97a67e6a9016b996052b6a1f40173f756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 14 Feb 2026 18:07:16 +0900 Subject: [PATCH] =?UTF-8?q?feat:=ED=8C=8C=ED=8A=B8=EB=84=88=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=EC=97=90=20=ED=8F=AC=EC=A7=80=EC=85=98(=EC=97=AD?= =?UTF-8?q?=ED=95=A0)=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - searchPartners 역할 필터를 sales만 → sales/manager 모두 포함하도록 확장 - 사용자 역할(영업파트너/상담매니저)을 position 필드로 API 응답에 추가 - handlePartnerSelect에 position 매핑 추가 (key: position, label: 포지션/직책/역할) - PartnerSearchModal 검색 결과에 position 배지 표시 Co-Authored-By: Claude Opus 4.6 --- app/Http/Controllers/ESign/EsignApiController.php | 12 +++++++++--- resources/views/esign/create.blade.php | 9 ++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ESign/EsignApiController.php b/app/Http/Controllers/ESign/EsignApiController.php index 59bf0da6..ad071884 100644 --- a/app/Http/Controllers/ESign/EsignApiController.php +++ b/app/Http/Controllers/ESign/EsignApiController.php @@ -37,9 +37,11 @@ public function searchPartners(Request $request): JsonResponse $query = User::where('is_active', true) ->whereHas('userRoles', function ($w) use ($tenantId) { $w->where('tenant_id', $tenantId) - ->whereHas('role', fn($r) => $r->where('name', 'sales')); + ->whereHas('role', fn($r) => $r->whereIn('name', ['sales', 'manager'])); }) - ->with('salesPartner'); + ->with(['salesPartner', 'userRoles' => function ($q) use ($tenantId) { + $q->where('tenant_id', $tenantId)->with('role'); + }]); if ($q !== '') { $query->where(function ($w) use ($q) { @@ -51,8 +53,11 @@ public function searchPartners(Request $request): JsonResponse $users = $query->orderBy('name')->limit(20)->get(); - $data = $users->map(function ($user) { + $roleLabels = ['sales' => '영업파트너', 'manager' => '상담매니저']; + + $data = $users->map(function ($user) use ($roleLabels) { $sp = $user->salesPartner; + $roles = $user->userRoles->map(fn($ur) => $roleLabels[$ur->role?->name] ?? null)->filter()->values(); return [ 'id' => $user->id, 'name' => $user->name, @@ -61,6 +66,7 @@ public function searchPartners(Request $request): JsonResponse 'company_name' => $sp?->company_name, 'biz_no' => $sp?->biz_no, 'address' => $sp?->address, + 'position' => $roles->implode('/'), ]; }); diff --git a/resources/views/esign/create.blade.php b/resources/views/esign/create.blade.php index 8a950249..46bd23e8 100644 --- a/resources/views/esign/create.blade.php +++ b/resources/views/esign/create.blade.php @@ -328,7 +328,10 @@ className="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:ring onMouseEnter={() => setActiveIdx(i)} className={`w-full text-left px-3 py-2.5 rounded-lg mb-1 transition-colors ${i === activeIdx ? 'bg-blue-50 ring-1 ring-blue-200' : 'hover:bg-gray-50'}`}>
- {p.name} +
+ {p.name} + {p.position && {p.position}} +
{p.company_name && {p.company_name}}
@@ -450,6 +453,7 @@ className={`w-full text-left px-3 py-2.5 rounded-lg mb-1 transition-colors ${i = address: partner.address, biz_no: partner.biz_no, company_name: partner.company_name, + position: partner.position, }; // label 기반 fallback 매핑 const labelMap = { @@ -458,6 +462,9 @@ className={`w-full text-left px-3 py-2.5 rounded-lg mb-1 transition-colors ${i = '주소': partner.address, '사업자등록번호': partner.biz_no, '상호': partner.company_name, + '포지션': partner.position, + '직책': partner.position, + '역할': partner.position, }; setMetadata(prev => {