Ver Fonte

고객센터 완료

DESKTOP-T61HUSC\user há 4 meses atrás
pai
commit
2bab11ab3b

+ 4 - 1
backend/app/Config/Routes.php

@@ -57,9 +57,12 @@
 
 // 고객센터 라우트
   $routes->post('cs/list', 'Cs::csList');
-  $routes->post('cs/detail/(:num)', 'Cs::csDetail/$1');
+  $routes->post('cs/search', 'Cs::csSearch');
+  $routes->get('cs/detail/(:num)', 'Cs::csDetail/$1');
   $routes->post('cs/reg', 'Cs::csRegister');
   $routes->post('cs/answer', 'Cs::csAnswer');
+// 파일 다운로드
+  $routes->get('cs/download/(:segment)', 'Cs::file/$1');
 
 // API 라우트 그룹
   $routes->group('api', ['namespace' => 'App\Controllers'], function($routes) {

+ 78 - 0
backend/app/Controllers/Cs.php

@@ -210,4 +210,82 @@ class Cs extends ResourceController
             ->download($path, null)
             ->setFileName($originalFileName);
     }
+
+    //문의 검색
+    public function csSearch()
+    {
+        $db = \Config\Database::connect();
+
+        // 요청 바디에서 filter와 keyword 추출
+        $request = $this->request->getJSON(true);
+        $userSeq = isset($request['USER_SEQ']) ? $request['USER_SEQ'] : null;
+        $filter = isset($request['filter']) ? $request['filter'] : null;
+        $keyword = isset($request['keyword']) ? $request['keyword'] : null;
+        $startDate = isset($request['startDate']) ? $request['startDate'] : null;
+        $endDate = isset($request['endDate']) ? $request['endDate'] : null;
+
+        $filterMap = [
+            'title' => 'C.TITLE',
+            'content' => 'C.CONTENT',
+            'writer' => 'WRITER',
+        ];
+
+        // CS_BOARD 테이블 검색
+        $builder = $db->table('CS_BOARD C')
+            ->select('C.*, U.NICK_NAME, U.NAME, V.COMPANY_NAME, V.NAME')
+            ->join('USER_LIST U', 'C.USER_SEQ = U.SEQ', 'left')
+            ->join('VENDOR_LIST V', 'C.USER_SEQ = V.SEQ', 'left');
+
+        // userSeq가 0이 아니면 본인이 쓴 글만 조회
+        if ($userSeq !== 0) {
+            $builder->where('C.USER_SEQ', $userSeq);
+        }
+
+        // 키워드 검색
+        if (!empty($keyword)) {
+            if (empty($filter) || $filter === '') {
+                // 필터를 선택 안했으면 전체 검색 (제목 + 내용 + 작성자)
+                $builder->groupStart()
+                    ->like('C.TITLE', $keyword)
+                    ->orLike('C.CONTENT', $keyword)
+                    ->orLike('U.NICK_NAME', $keyword)
+                    ->orLike('U.NAME', $keyword)
+                    ->orLike('V.COMPANY_NAME', $keyword)
+                    ->orLike('V.NAME', $keyword)
+                    ->groupEnd();
+            } elseif (isset($filterMap[$filter])) {
+                if ($filter === 'title') {
+                    // 제목 검색
+                    $builder->like($filterMap[$filter], $keyword);
+                } elseif ($filter === 'content') {
+                    // 내용 검색
+                    $builder->like($filterMap[$filter], $keyword);
+                } elseif ($filter === 'writer') {
+                    // 작성자 검색
+                    $builder->groupStart()
+                        ->like('U.NICK_NAME', $keyword)
+                        ->orLike('U.NAME', $keyword)
+                        ->orLike('V.COMPANY_NAME', $keyword)
+                        ->orLike('V.NAME', $keyword)
+                        ->groupEnd();
+                }
+            }
+        }
+
+        // 날짜 범위 검색
+        if (!empty($startDate)) {
+            $builder->where('DATE(C.REGDATE) >=', $startDate);
+        }
+        if (!empty($endDate)) {
+            $builder->where('DATE(C.REGDATE) <=', $endDate);
+        }
+
+        // 정렬: 최신순
+        $builder->orderBy('C.SEQ', 'DESC');
+
+        // 조회
+        $lists = $builder->get()->getResultArray();
+
+        return $this->respond($lists, 200);
+    }
 }

+ 2 - 2
pages/view/common/cs/index.vue

@@ -227,7 +227,7 @@ import dayjs from 'dayjs';
     { title: "전체", value: "" },
     { title: "제목", value: "title" },
     { title: "내용", value: "content" },
-    { title: "작성자", value: "writer" },
+    { title: "작성자", value: "writer" }
   ]);
   const { $toast, $log, $dayjs, $eventBus } = useNuxtApp();
   const router = useRouter();
@@ -349,7 +349,7 @@ import dayjs from 'dayjs';
     }
 
     useAxios()
-      .post("/cs/list", _req)
+      .post("/cs/search", _req)
       .then((res) => {
         csList.value = res.data;
         currentPage.value = 1; // 검색 후 첫 페이지로 이동