송용우 4 місяців тому
батько
коміт
c055b887b2

+ 43 - 19
backend/app/Controllers/VendorInfluencerController.php

@@ -440,24 +440,47 @@ class VendorInfluencerController extends BaseController
                 ]);
             }
             
-            // 처리자 벤더사 존재 확인
-            $processingVendor = $this->vendorModel
-              ->where('SEQ', $processedBy)
-              ->first(); // IS_ACT 조건 제거해서 벤더사 존재 여부만 확인
+            // processedBy가 벤더사 SEQ인지 사용자 SEQ인지 확인
+            $processingUser = null;
             
-            if (!$processingVendor) {
-              return $this->response->setStatusCode(400)->setJSON([
-                'success' => false,
-                'message' => "처리자 SEQ {$processedBy}가 VENDOR_LIST 테이블에 존재하지 않습니다."
-              ]);
-            }
+            // 1. 먼저 USER_LIST에서 확인
+            $processingUser = $this->userModel
+                ->where('SEQ', $processedBy)
+                ->where('IS_ACT', 'Y')
+                ->first();
             
-            // 벤더사 활성 상태 확인
-            if ($processingVendor['IS_ACT'] !== 'Y') {
-              return $this->response->setStatusCode(400)->setJSON([
-                'success' => false,
-                'message' => "처리자 SEQ {$processedBy}는 비활성 상태입니다. (IS_ACT: {$processingVendor['IS_ACT']})"
-              ]);
+            if ($processingUser) {
+                // 사용자 SEQ인 경우 바로 사용
+                $approvedByUserSeq = $processedBy;
+            } else {
+                // 2. VENDOR_LIST에서 확인하고 해당 벤더사의 관리자 찾기
+                $processingVendor = $this->vendorModel
+                    ->where('SEQ', $processedBy)
+                    ->where('IS_ACT', 'Y')
+                    ->first();
+                
+                if (!$processingVendor) {
+                    return $this->response->setStatusCode(400)->setJSON([
+                        'success' => false,
+                        'message' => "처리자 SEQ {$processedBy}를 USER_LIST 또는 VENDOR_LIST에서 찾을 수 없습니다."
+                    ]);
+                }
+                
+                // 벤더사의 관리자 사용자 찾기 (COMPANY_ID 또는 다른 연결 필드 사용)
+                $vendorUser = $this->userModel
+                    ->where('COMP_ID', $processingVendor['COMP_ID'])
+                    ->where('MEMBER_TYPE', 'VENDOR')
+                    ->where('IS_ACT', 'Y')
+                    ->first();
+                
+                if (!$vendorUser) {
+                    return $this->response->setStatusCode(400)->setJSON([
+                        'success' => false,
+                        'message' => "벤더사 SEQ {$processedBy}에 해당하는 관리자 사용자를 찾을 수 없습니다."
+                    ]);
+                }
+                
+                $approvedByUserSeq = $vendorUser['SEQ'];
             }
             
             // 기존 요청 확인
@@ -487,7 +510,7 @@ class VendorInfluencerController extends BaseController
             
             $updateData = [
                 'STATUS' => $status,
-                'APPROVED_BY' => $processedBy,
+                'APPROVED_BY' => $approvedByUserSeq,
                 'RESPONSE_MESSAGE' => $responseMessage,
                 'RESPONSE_DATE' => date('Y-m-d H:i:s')
             ];
@@ -515,7 +538,7 @@ class VendorInfluencerController extends BaseController
                 
                 // 2단계: APPROVED_BY만 별도로 업데이트
                 $secondUpdateData = [
-                    'APPROVED_BY' => $processedBy
+                    'APPROVED_BY' => $approvedByUserSeq
                 ];
                 
                 log_message('debug', "2단계 업데이트 시도: " . json_encode($secondUpdateData));
@@ -545,7 +568,8 @@ class VendorInfluencerController extends BaseController
                         'error' => $updateException->getMessage(),
                         'debug_info' => [
                             'processedBy' => $processedBy,
-                            'processingVendor' => $processingVendor,
+                            'approvedByUserSeq' => $approvedByUserSeq,
+                            'processingUser' => $processingUser,
                             'existingMapping' => $existingMapping,
                             'userCheck' => $userCheck,
                             'mappingCheck' => $mappingCheck,

+ 6 - 9
pages/index.vue

@@ -457,21 +457,18 @@
           useAuthStore().setTempData(user);
           useUtil.setPageMove("/auth/join?type=" + loginForm.value.loginType);
         } else {
-          //useAuthStore().setAuth(res.data);
-
-          const result = {
+          // SNS 로그인 성공 시 인증 정보 제대로 설정
+          const authData = {
             refreshToken: refreshToken,
             user: user,
           };
 
-          //console.log(result);
-
-          //return;
-
-          useAuthStore().setTempData(result);
+          // setAuth를 호출하여 auth 스토어에 사용자 정보 저장
+          useAuthStore().setAuth(authData);
+          useAuthStore().setTempData(authData);
           useAuthStore().setAccessToken(accessToken);
           useAuthStore().setRefreshToken(refreshToken);
-          localStorage.setItem("tempAccess", result.user);
+          localStorage.setItem("tempAccess", user.ID || user.id || user.SEQ);
           useUtil.setPageMove("/view/common/item");
           useStore.menuInfo.menuIndex = "0";
           useStore.menuInfo.menuId = "menu02";

+ 63 - 7
pages/view/vendor/search.vue

@@ -411,8 +411,43 @@
 |    computed
 ************************************************************************/
   const currentUser = computed(() => {
-    // 실제로는 인증 스토어에서 가져옴
-    return JSON.parse(localStorage.getItem("authStore"))?.auth || {};
+    // 인증 스토어에서 사용자 정보 가져오기
+    const authStore = useAuthStore();
+    
+    console.log('🔍 currentUser computed 디버깅:', {
+      'authStore.auth': authStore.auth,
+      'snsTempData': authStore.auth.snsTempData,
+      'localStorage': localStorage.getItem("authStore")
+    });
+    
+    // SNS 로그인 시 snsTempData가 있는 경우 해당 데이터 사용
+    if (authStore.auth.snsTempData?.user) {
+      console.log('✅ SNS 로그인 데이터 사용:', authStore.auth.snsTempData.user);
+      return authStore.auth.snsTempData.user;
+    }
+    
+    // 일반 로그인 시 auth 데이터 사용
+    if (authStore.auth.seq) {
+      console.log('✅ 일반 로그인 데이터 사용:', authStore.auth);
+      return authStore.auth;
+    }
+    
+    // 로컬스토리지 백업
+    try {
+      const localAuthData = JSON.parse(localStorage.getItem("authStore"))?.auth;
+      console.log('💾 localStorage 데이터:', localAuthData);
+      
+      if (localAuthData?.snsTempData?.user) {
+        console.log('✅ localStorage SNS 데이터 사용:', localAuthData.snsTempData.user);
+        return localAuthData.snsTempData.user;
+      }
+      
+      console.log('✅ localStorage 일반 데이터 사용:', localAuthData);
+      return localAuthData || {};
+    } catch (e) {
+      console.error('❌ localStorage authStore 파싱 오류:', e);
+      return {};
+    }
   });
 
   /************************************************************************
@@ -445,7 +480,7 @@
         sortBy: sortOption.value,
         page: currentPage.value,
         size: pagination.value.pageSize,
-        influencerSeq: currentUser.value.seq,
+        influencerSeq: currentUser.value.SEQ || currentUser.value.seq || currentUser.value.ID || currentUser.value.id,
       };
 
       useAxios()
@@ -473,7 +508,7 @@
   const loadMyRequests = async () => {
     try {
       const params = {
-        influencerSeq: currentUser.value.seq,
+        influencerSeq: currentUser.value.SEQ || currentUser.value.seq || currentUser.value.ID || currentUser.value.id,
         // status 파라미터 제거하여 모든 상태의 요청을 로드
       };
 
@@ -516,15 +551,36 @@
     try {
       submitting.value = true;
 
+      // 사용자 seq 필드 확인 (SNS 로그인 시 대문자 SEQ, 일반 로그인 시 소문자 seq)
+      console.log('🔍 currentUser.value 전체:', currentUser.value);
+      console.log('🔍 SEQ 후보들:', {
+        'SEQ': currentUser.value.SEQ,
+        'seq': currentUser.value.seq, 
+        'id': currentUser.value.id,
+        'ID': currentUser.value.ID
+      });
+      
+      const userSeq = currentUser.value.SEQ || currentUser.value.seq || currentUser.value.ID || currentUser.value.id;
+      
+      console.log('🎯 최종 선택된 userSeq:', userSeq);
+      
+      if (!userSeq) {
+        console.error('❌ userSeq가 비어있음:', currentUser.value);
+        $toast.error('로그인 정보를 확인할 수 없습니다. 다시 로그인해주세요.');
+        return;
+      }
+      
       const params = {
         vendorSeq: requestModal.value.vendor.SEQ,
-        influencerSeq: currentUser.value.seq,
+        influencerSeq: userSeq,
         requestType: "INFLUENCER_REQUEST",
         requestMessage: requestModal.value.message,
-        requestedBy: currentUser.value.seq,
+        requestedBy: userSeq,
         commissionRate: requestModal.value.commissionRate,
         specialConditions: requestModal.value.specialConditions,
       };
+      
+      console.log('📤 API 호출 파라미터:', params);
 
       useAxios()
         .post("/api/vendor-influencer/request", params)
@@ -556,7 +612,7 @@
     try {
       const params = {
         mappingSeq: requestSeq,
-        cancelledBy: currentUser.value.SEQ,
+        cancelledBy: currentUser.value.SEQ || currentUser.value.seq || currentUser.value.ID || currentUser.value.id,
         cancelReason: "사용자에 의한 취소",
       };