140 次代碼提交 7942765e08 ... ecd41152e6

作者 SHA1 備註 提交日期
  hokky ecd41152e6 240809-1752-Kim 3 月之前
  hokky 46a8df21e8 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 3 月之前
  hokky 725b6fb435 240805-1710-Kim 3 月之前
  System User for kbgolf 2eebdd8989 240805-1706-Kim 3 月之前
  hokky 6cae860d6b 240805-1650-Kim 3 月之前
  System User for kbgolf 2629720e54 240805-1633-Kim 3 月之前
  hokky 37135eb8f6 240805-1633-Kim 3 月之前
  hokky 8d9a8c9c1e 240805-1552-Kim 3 月之前
  hokky 750ecc164c 240805-1527-Kim 3 月之前
  hokky 2951a6f479 240805-1523-Kim 3 月之前
  hokky df12bcf320 240805-1522-Kim 3 月之前
  hokky 235a8fc0be 240805-1516-Kim 3 月之前
  hokky b89f297d24 240805-1515-Kim 3 月之前
  System User for kbgolf b05587754d 240805-1507-Kim 3 月之前
  hokky b33758f323 commit 3 月之前
  hokky ecf2506582 240801-1504-Kim 3 月之前
  hokky 7a27882a85 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 3 月之前
  System User for kbgolf 03975f932f 240801-1501-Kim 3 月之前
  hokky 87750c5f78 240801-1501-Kim 3 月之前
  hokky 0c241da2bd 240801-1457-Kim 3 月之前
  hokky 393ec9b3df Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 3 月之前
  System User for kbgolf de33510675 240801-1427-Kim 3 月之前
  hokky 6baf90ad59 240801-1424-Kim 3 月之前
  hokky 46dad7b078 240731-2145-Kim 3 月之前
  hokky 47e42a5efd 240731-2138-Kim 3 月之前
  hokky 4777703c3c 240725-1512-Kim 4 月之前
  hokky c8721c3934 240725-1510-Kim 4 月之前
  hokky 5ed14fc08f 240725-1509-Kim 4 月之前
  hokky 62ed12ddd4 240725-1508-Kim 4 月之前
  System User for kbgolf 67898fbeea 240725-1505-Kim 4 月之前
  hokky a272500339 240725-1505-Kim 4 月之前
  hokky 562fe636c0 240725-1414-Kim 4 月之前
  System User for kbgolf 1ee81f050b 240725-1358-Kim 4 月之前
  hokky 792cea770b 240725-1340-Kim 4 月之前
  hokky 935fa987b4 240725-1213-Kim 4 月之前
  hokky 5ee347996f 240725-1209-Kim 4 月之前
  System User for kbgolf 2b32fc0417 240725-1206-Kim 4 月之前
  hokky ab20c8ada0 240725-1205-Kim 4 月之前
  hokky f4cf390992 240724-2318-Kim 4 月之前
  hokky d9a80e322d 240724-2318-Kim 4 月之前
  hokky e43c3dc189 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  System User for kbgolf 6e4dc7b7dd 240724-2317-Kim 4 月之前
  hokky 6632c5c66e 240724-2316-Kim 4 月之前
  hokky 96a3b8d049 240724-1922-Kim 4 月之前
  hokky 8f25e8a9e4 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  hokky 66d49d155d 240724-1914-Kim 4 月之前
  System User for kbgolf 8b4c19595f 240724-1910-Kim 4 月之前
  hokky f7b151080b 240724-1910-Kim 4 月之前
  System User for kbgolf 426ce23572 240724-1909-Kim 4 月之前
  hokky d76c963aca 240724-1909-Kim 4 月之前
  hokky 29cf890a18 240724-1841-Kim 4 月之前
  hokky fc3aadc331 240724-1749-Kim 4 月之前
  hokky b4e29804b4 240724-1737-Kim 4 月之前
  hokky 404dadc30a 240724-1732-Kim 4 月之前
  hokky 800d1b8284 240724-1453-Kim 4 月之前
  hokky 687f380d2f 240724-1452-Kim 4 月之前
  hokky 54b7baf717 240724-1451-Kim 4 月之前
  System User for kbgolf af99b75d73 240724-1358-Kim 4 月之前
  hokky 974f912c0c 240724-1358-Kim 4 月之前
  System User for kbgolf b142ce4ba8 240724-1310-Kim 4 月之前
  hokky 8183727b90 240724-1310-Kim 4 月之前
  System User for kbgolf 73d015dcf9 240724-1259-Kim 4 月之前
  hokky c6395e6db6 240724-1259-Kim 4 月之前
  hokky 6a0cbe5d67 240719-1427-Kim 4 月之前
  hokky 0496dea3cd 240717-1705-Kim 4 月之前
  hokky eee8062e72 commit 4 月之前
  hokky 511214dd13 240716-1916-Kim 4 月之前
  hokky 3d85be262e 240716-1741-Kim 4 月之前
  hokky a5ec3bc04c 240716-1735-Kim 4 月之前
  hokky 652679cba7 240716-1724-Kim 4 月之前
  hokky 47b37a62f3 240716-1721-Kim 4 月之前
  hokky 04a087a243 240716-1714-Kim 4 月之前
  hokky 249ff65db8 240716-1709-Kim 4 月之前
  hokky dfd04987d8 240716-1705-Kim 4 月之前
  hokky 7abe4e7771 240716-1704-Kim 4 月之前
  hokky 34429b2ac9 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  hokky 75028927dd 240716-1654-Kim 4 月之前
  System User for kbgolf 1927dbc3ab 240716-1629-Kim 4 月之前
  System User for kbgolf 26313b4868 240716-1615-Kim 4 月之前
  hokky b735e10092 240716-1613-Kim 4 月之前
  hokky 92d9f867cc 240716-1316-Kim 4 月之前
  hokky 9a629578ed 240716-1247-Kim 4 月之前
  hokky 7d06b635d2 240716-1206-Kim 4 月之前
  hokky ba13ee90f1 240716-1143-Kim 4 月之前
  hokky bf82d8bff3 240715-1605-Kim 4 月之前
  System User for kbgolf 0ad9f17b9b 240715-1604-Kim 4 月之前
  hokky 4435625e92 240715-1603-Kim 4 月之前
  System User for kbgolf ab5e96dd3f 240712-1530-Kim 4 月之前
  hokky c6ee6dd729 240712-1528-Kim 4 月之前
  hokky 95f5c6f435 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  System User for kbgolf c2419f8b33 240712-1402-Kim 4 月之前
  hokky 621feb35eb 240712-1402-Kim 4 月之前
  hokky 07efc50a2a commit 4 月之前
  hokky 6b3b139196 commit 4 月之前
  hokky 3da01ba968 240711-1716-Kim 4 月之前
  hokky f89c7b1a9e 240711-1714-Kim 4 月之前
  hokky d3b47c4c6c 240711-1713-Kim 4 月之前
  hokky 702c924ab2 240711-1712-Kim 4 月之前
  System User for kbgolf d399e2d2a6 240711-1711-Kim 4 月之前
  hokky a1e063c42d 240711-1711-Kim 4 月之前
  System User for kbgolf 1051783f48 240711-1635-Kim 4 月之前
  hokky ea71b41906 240711-1634-Kim 4 月之前
  hokky 1b158e9d84 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  hokky 02e0f5e270 commit 4 月之前
  System User for kbgolf eab5816801 240710-1138-Kim 4 月之前
  hokky 5fa0923fac 240710-1138-Kim 4 月之前
  hokky 029899c431 240710-1135-Kim 4 月之前
  hokky 4a1dffd1f2 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  System User for kbgolf cb1e2b8c17 240710-1133-Kim 4 月之前
  hokky d6b5bcccb6 240710-1132-Kim 4 月之前
  hokky a1a564ae14 240709-1646-Kim 4 月之前
  hokky f3683fe752 240709-1644-Kim 4 月之前
  hokky 2d5a6f4b16 240709-1644-Kim 4 月之前
  System User for kbgolf 1cf0dd1d7f 240709-1616-Kim 4 月之前
  hokky 5fce9ab41b 240709-1616-Kim 4 月之前
  hokky 0af9722c81 240709-1613-Kim 4 月之前
  hokky 46b488a5c4 240709-1605-Kim 4 月之前
  hokky 21c5de0a86 240709-1601-Kim 4 月之前
  hokky bdca3d6c84 240709-1601-Kim 4 月之前
  hokky d1647efa03 240709-1600-Kim 4 月之前
  wngur6076 16a468dd46 t 4 月之前
  hokky 744102dc25 240709-0947-Kim 4 月之前
  hokky 9d7780196f 240709-0921-Kim 4 月之前
  hokky d6496ed105 240708-2116-Kim 4 月之前
  hokky 00837937c7 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  hokky e56a681b41 commit 4 月之前
  hokky 95b48e0a9c 240708-1829-Kim 4 月之前
  hokky 80899f5618 240708-1818-Kim 4 月之前
  hokky f4571cd439 240708-1816-Kim 4 月之前
  hokky 2eaa7394a2 240708-1756-Kim 4 月之前
  hokky e8d2bf798f Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  System User for kbgolf c26a9e8549 240708-1754-Kim 4 月之前
  hokky 730c19d6f0 240708-1752-Kim 4 月之前
  hokky 9abac4a1c8 240708-1103-Kim 4 月之前
  hokky 5917aafb6d 240708-1101-Kim 4 月之前
  hokky 1832fe44fe commit 4 月之前
  hokky c6ca0ec1d8 Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  hokky e02e7b1929 240705-1550-Kim 4 月之前
  hokky 63a6f42e0d Merge branch 'master' of http://git.daboryhost.com:10880/dbrerp-themes/kbgolf 4 月之前
  hokky bbb53643b7 commit 4 月之前
共有 37 個文件被更改,包括 2523 次插入1000 次删除
  1. 17 11
      erp/para/ko_KR/list/list-type1/post/contactus-custom-input.json
  2. 9 4
      erp/para/ko_KR/popup/popup-form1/form-a/post/sise.json
  3. 114 10
      erp/resources/views/popup/popup-form1/form-a/post/sise-form.blade.php
  4. 82 0
      pro/app/Http/Controllers/Auth/SocialTalkController copy 2.php
  5. 136 0
      pro/app/Http/Controllers/Auth/SocialTalkController copy.php
  6. 48 3
      pro/app/Http/Controllers/Auth/SocialTalkController.php
  7. 146 38
      pro/app/Http/Controllers/IndexController.php
  8. 43 1
      pro/app/Http/Controllers/Page/ContactUsCustomController.php
  9. 63 22
      pro/app/Http/Controllers/Page/SiseController.php
  10. 286 0
      pro/app/Http/Controllers/dbrbbs/PostController.php
  11. 13 0
      pro/para/ko_KR/request/list-type1/home-book.json
  12. 0 0
      pro/para/ko_KR/response/list-type1/home-book.json
  13. 89 83
      pro/resources/css/responsive.css
  14. 22 10
      pro/resources/css/style.css
  15. 1 1
      pro/resources/js/jquery-ui.js
  16. 114 0
      pro/resources/js/jquery.cookie.js
  17. 184 0
      pro/resources/views/bbs/details.blade.php
  18. 85 0
      pro/resources/views/bbs/gallery.blade.php
  19. 37 0
      pro/resources/views/bbs/img.blade.php
  20. 118 0
      pro/resources/views/bbs/list.blade.php
  21. 50 0
      pro/resources/views/bbs/text.blade.php
  22. 1 1
      pro/resources/views/etc/paq.blade.php
  23. 382 151
      pro/resources/views/index.blade.php
  24. 1 1
      pro/resources/views/layouts/footer.blade.php
  25. 194 0
      pro/resources/views/layouts/master.blade copy.php
  26. 33 49
      pro/resources/views/layouts/master.blade.php
  27. 0 210
      pro/resources/views/page/condo.blade.php
  28. 3 2
      pro/resources/views/page/contactus-custom-list.blade.php
  29. 1 89
      pro/resources/views/page/contactus-custom.blade.php
  30. 0 213
      pro/resources/views/page/golf.blade.php
  31. 4 2
      pro/resources/views/page/map.blade.php
  32. 179 76
      pro/resources/views/page/sise.blade.php
  33. 1 0
      pro/resources/views/partial/site/scripts.blade.php
  34. 2 1
      pro/resources/views/policy-or-privacy.blade.php
  35. 12 10
      pro/routes/web.php
  36. 44 5
      qry/erp/list/list-type1-insert/post/sise/insert2.sql
  37. 9 7
      qry/erp/list/list-type1/post/contactus-custom-input/plain.sql

+ 17 - 11
erp/para/ko_KR/list/list-type1/post/contactus-custom-input.json

@@ -207,13 +207,15 @@
             "$Check": "$Check",
             "No": "번호",
             "C1": "신청자",
-            "C2": "연락처",
-            "C3": "거래구분",
-            "C4": "회원권 구분",
-            "C5": "회원권명",
-            "C6": "희망가격",
-            "C7": "요청사항",
-            "C8": "상태"
+            "C2": "등록일",
+            "C3": "등록시간",
+            "C4": "연락처",
+            "C5": "거래구분",
+            "C6": "회원권 구분",
+            "C7": "회원권명",
+            "C8": "희망가격",
+            "C9": "요청사항",
+            "C10": "상태"
         },
         {
             "$Radio": "2",
@@ -221,12 +223,14 @@
             "No": "2",
             "C1": "5",
             "C2": "4",
-            "C3": "4",
+            "C3": "3",
             "C4": "5",
-            "C5": "5",
+            "C5": "3",
             "C6": "5",
             "C7": "7",
-            "C8": "4"
+            "C8": "4",
+            "C9": "6",
+            "C10": "4"
         },
         {
             "$Radio": "center",
@@ -239,7 +243,9 @@
             "C5": "center",
             "C6": "center",
             "C7": "center",
-            "C8": "center"
+            "C8": "center",
+            "C9": "center",
+            "C10": "center"
         }
     ]
 }

+ 9 - 4
erp/para/ko_KR/popup/popup-form1/form-a/post/sise.json

@@ -1,6 +1,7 @@
 {
     "General": {
         "Title": "회원권 입력",
+        "PageApi": "post-page",
         "PickApi": "post-pick",
         "ActApi": "post-act"
     },
@@ -22,7 +23,8 @@
             "MembershipName": "회원권명*",
             "MembershipCode": "회원권코드*",
             "TodayPrice": "금일시세*",
-            "YesterdayPrice": "전일시세*"
+            "YesterdayPrice": "전일시세*",
+            "SiseDate": "시세일자*"
         },
         {
             "SaveButton": "",
@@ -31,7 +33,8 @@
             "MembershipName": "left",
             "MembershipCode": "left",
             "TodayPrice": "left",
-            "YesterdayPrice": "left"
+            "YesterdayPrice": "left",
+            "SiseDate": "left"
         },
         {
             "SaveButton": "0",
@@ -40,7 +43,8 @@
             "MembershipName": "5000",
             "MembershipCode": "5000",
             "TodayPrice": "5000",
-            "YesterdayPrice": "5000"
+            "YesterdayPrice": "5000",
+            "SiseDate": "5000"
         },
         {
             "SaveButton": "required",
@@ -49,7 +53,8 @@
             "MembershipName": "required",
             "MembershipCode": "required",
             "TodayPrice": "required",
-            "YesterdayPrice": "required"
+            "YesterdayPrice": "required",
+            "SiseDate": "required"
         }
     ]
 }

+ 114 - 10
erp/resources/views/popup/popup-form1/form-a/post/sise-form.blade.php

@@ -76,13 +76,41 @@
     </div>
 </div>
 
+<div class="mb-1 pt-2 text-right btn-groups">
+    <div class="btn-group" id="item-btn-group">
+        <button type="button" class="btn btn-sm btn-primary sise-act" data-value="del2">삭제</button>
+    </div>
+</div>
+
+<div class="card p-2" id="sise-del-form">
+    <button type="button" id="modal-media-btn" hidden
+            class="btn btn-success btn-open-modal">
+    </button>
+    <div class="card-header" id="frm">
+        <input type="hidden" id="Id" name="Id" value="0">
+        <div class="row">
+            <div class="col-12 card-header-item">
+                <div class="card card card-info mb-3 mb-md-2 mb-lg-0 border-light">
+                    <div class="card-body">
+                        <div class="form-group {{ $formA['FormVars']['Display']['SiseDate'] }} flex-column mb-2">
+                            <label class="m-0">{{ $formA['FormVars']['Title']['SiseDate'] }}</label>
+                            <input type="text" id="sise-date-txt" class="rounded w-100" autocomplete="off"
+                                maxlength="{{ $formA['FormVars']['MaxLength']['SiseDate'] }}" placeholder="YYYYmmdd 형식으로 입력해주세요."
+                                {{ $formA['FormVars']['Required']['SiseDate'] }}>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
 @once
 @push('js')
 <script src="{{ csset('/js/modals-controller/a-type/common.js') }}"></script>
     <script>
         $(document).ready(async function() {
             PopupPopupForm1FormAPostSiseForm.mediaModal = await include_media_library('media-body', 'post')
-
             $(document).on('file.paste', '#modal-media', function (event, file_url_list, id_list, unique_key) {
                 $(unique_key).val(file_url_list[0])
             });
@@ -95,6 +123,7 @@
                         $('#modal-select-popup.show').trigger('list.requery')
                         $('#modal-select-popup.show').modal('hide')
                     }, 'PopupPopupForm1FormAPostSiseForm'); break;
+                    case 'del2': PopupPopupForm1FormAPostSiseForm.sise_multi_delete(); break;
                 }
             });
 
@@ -103,9 +132,6 @@
                 var selectedType = $(this).val();
                 PopupPopupForm1FormAPostSiseForm.change_option(selectedType);
             });
-
-
-
         });
 
         (function( PopupPopupForm1FormAPostSiseForm, $, undefined ) {
@@ -163,6 +189,15 @@
                 return parameter;
             }
 
+            PopupPopupForm1FormAPostSiseForm.del_parameter = function () {
+                const sise_del_form = $('#sise-del-form')
+                let parameter = {
+                    PostTypeId: 59,
+                    Pc6: $(sise_del_form).find('#sise-date-txt').val(),
+                }
+                return parameter;
+            }
+
             PopupPopupForm1FormAPostSiseForm.fetch_sise = async function (id) {
                 const response = await get_api_data(PopupPopupForm1FormAPostSiseForm.formA['General']['PickApi'], {
                     Page: [ { Id: id } ]
@@ -171,17 +206,74 @@
                 PopupPopupForm1FormAPostSiseForm.set_sise_ui(response)
             }
 
+            PopupPopupForm1FormAPostSiseForm.fetch_sise_date = async function (parameter) {
+                let data = [];
+                let siseDelParameter = PopupPopupForm1FormAPostSiseForm.get_sise_parameter(999,0,parameter.Pc6);
+                const response = await get_api_data(PopupPopupForm1FormAPostSiseForm.formA['General']['PageApi'], siseDelParameter);
+                let pages = response.data.Page;
+
+                if(pages){
+                    pages.forEach(page => {
+                        data.push({ Id: -Math.abs(page.Id) });
+                    });
+
+                    if (data.length == 0) {
+                        iziToast.error({
+                            title: 'Error',
+                            message: $('#click-the-checkbox-es-of-line-for-action').text(),
+                        });
+                        return false;
+                    }
+                }
+                return data;
+            }
+
+            // 특정 시세일자 data만 삭제
+            PopupPopupForm1FormAPostSiseForm.sise_multi_delete = async function () {
+                const sise_del_form = $('#sise-del-form')
+                const frm = '#sise-del-form #frm';
+
+                let parameter = {
+                    PostTypeId: 59,
+                    Pc6: $(sise_del_form).find('#sise-date-txt').val(),
+                }
+
+                if (window.dom_required_check(`${frm} input`)) {
+                    iziToast.warning({
+                        title: 'Warning',
+                        message: $('#required-item-omitted').text(),
+                    });
+                    return;
+                }
+
+                const data = await PopupPopupForm1FormAPostSiseForm.fetch_sise_date(parameter);
+                if (! data) return;
+
+                let response = await get_api_data(type1['General']['ActApi'], { Page: data });
+                if (response.data.Page) {
+                    iziToast.success({
+                        title: 'Success',
+                        message: $('#action-completed').text(),
+                    });
+
+                    // 부모 페이지 이벤트 트리거
+                    $('#modal-select-popup.show').trigger('list.requery');
+                    $('#modal-select-popup.show').modal('hide');
+
+                } else {
+                    let message = response.data.body ?? $('#api-request-failed-please-check').text();
+                    iziToast.error({
+                        title: 'Error',
+                        message: message,
+                    });
+                }
+            }
+
             PopupPopupForm1FormAPostSiseForm.change_option = function (type, area){
                 const sise_form = $('#sise-form')
                 var areaSelect = $('#area-select');
                 areaSelect.empty();
                 if (type === 'golf') {
-                    // areaSelect.append('<option value="1">수도권</option>');
-                    // areaSelect.append('<option value="2">강원</option>');
-                    // areaSelect.append('<option value="3">충청</option>');
-                    // areaSelect.append('<option value="4">영남</option>');
-                    // areaSelect.append('<option value="5">제주</option>');
-                    // areaSelect.append('<option value="6">호남</option>');
                     areaSelect.append('<option value="100">수도권/강원/충청</option>');
                     areaSelect.append('<option value="200">영남/제주권</option>');
                     areaSelect.append('<option value="300">호남권</option>');
@@ -196,6 +288,18 @@
                     areaSelect.val(area);
                 }
             }
+            // 추가
+            PopupPopupForm1FormAPostSiseForm.get_sise_parameter = function (limit, offset, siseDate) {
+
+                let parameter = {
+                    PageVars: {
+                        Query : `post_type_id='59' and pc6='${siseDate}'`,
+                        Limit : Number(limit),
+                        Offset: Number(offset),
+                    }
+                }
+                return parameter;
+            }
 
             PopupPopupForm1FormAPostSiseForm.set_sise_ui = async function (response) {
                 if (isEmpty(response.data) || response.data.apiStatus) {

+ 82 - 0
pro/app/Http/Controllers/Auth/SocialTalkController copy 2.php

@@ -0,0 +1,82 @@
+<?php
+namespace Themes\kbgolf\pro\app\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Support\Facades\Redirect;
+use SocialiteProviders\Apple\Provider;
+use Laravel\Socialite\Facades\Socialite;
+use Laravel\Socialite\Two\GoogleProvider;
+use Laravel\Socialite\Two\FacebookProvider;
+use SocialiteProviders\Kakao\KakaoProvider;
+use App\Providers\Socialite\OAuth2\DaboryProvider;
+use SocialiteProviders\Naver\Provider as NaverProvider;
+use Illuminate\Http\Request;
+
+class SocialTalkController extends Controller
+{
+    private $appleTokenService;
+    private $oauth2Info;
+    private $target;
+
+    public function redirectToProvider($provider)
+    {
+        $this->oauth2Info = request('oauth2Info');
+        // dump($this->oauth2Info);
+        return $this->setConfig($provider, request('target'))->redirect();
+    }
+
+    public function login($provider)
+    {
+        [$this->target, $ssoBrand] = explode('-', $provider);
+        if ($this->target == 'member') {
+            if ($ssoBrand == 'naver') {
+                return Redirect::away('https://talk.naver.com/ct/w5u3g9');
+            }elseif($ssoBrand == 'kakao'){
+                return Redirect::away('https://pf.kakao.com/_aAAGj/chat');
+            }
+        }
+    }
+
+    public function setConfig($provider, $target)
+    {
+        $config = [
+            'client_id' => $this->oauth2Info['ClientId'],
+            'client_secret' => $this->oauth2Info['ClientSecret'],
+            'redirect' => "/social/$target-$provider/callback"
+        ];
+
+        switch ($provider) {
+            case 'dabory':
+                $driver = Socialite::buildProvider(DaboryProvider::class, [
+                    'client_id' => config('app.api.main.ClientId'),
+                    'client_secret' => config('app.api.main.ClientSecret'),
+                    'redirect' => $config['redirect']
+                ]);
+                break;
+            case 'facebook':
+                $driver = Socialite::buildProvider(FacebookProvider::class, $config);
+                break;
+            case 'kakao':
+                $driver = Socialite::buildProvider(KakaoProvider::class, $config);
+                break;
+            case 'google':
+                $driver = Socialite::buildProvider(GoogleProvider::class, $config);
+                break;
+            case 'naver':
+                $driver = Socialite::buildProvider(NaverProvider::class, $config);
+                break;
+            case 'apple':
+
+                $config['client_secret'] = $this->appleTokenService->generate(
+                    $this->oauth2Info['PrivateKey'],
+                    $this->oauth2Info['ClientId'],
+                    $this->oauth2Info['TeamId'],
+                    $this->oauth2Info['KeyId'],
+                );
+
+                $driver = Socialite::buildProvider(Provider::class, $config);
+                break;
+        }
+        return $driver;
+    }
+}

+ 136 - 0
pro/app/Http/Controllers/Auth/SocialTalkController copy.php

@@ -0,0 +1,136 @@
+<?php
+namespace Themes\kbgolf\pro\app\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use App\Services\CallApiService;
+use Illuminate\Support\Facades\Redirect;
+use SocialiteProviders\Apple\Provider;
+use Laravel\Socialite\Facades\Socialite;
+use Laravel\Socialite\Two\GoogleProvider;
+use Laravel\Socialite\Two\FacebookProvider;
+use SocialiteProviders\Kakao\KakaoProvider;
+use App\Providers\Socialite\OAuth2\DaboryProvider;
+use App\Services\AppleTokenService;
+use SocialiteProviders\Naver\Provider as NaverProvider;
+use Illuminate\Http\Request;
+
+class SocialTalkController extends Controller
+{
+    private $appleTokenService;
+    private $callApiService;
+    private $oauth2Info;
+    private $target;
+
+    public function __construct(CallApiService $callApiService, AppleTokenService $appleTokenService)
+    {
+        $this->callApiService = $callApiService;
+        $this->appleTokenService = $appleTokenService;
+    }
+
+    public function redirectToProvider($provider)
+    {
+        $this->oauth2Info = request('oauth2Info');
+        // [$this->target, $ssoBrand] = explode('-', $provider);
+
+        $brandCode = 'member-'.$provider;
+        $response = $this->callApiService->callApi([
+            'url' => 'setup-page',
+            'data' => [
+                'PageVars' => [
+                    'Query' => "(setup_code = 'sso-client' and brand_code = '{$brandCode}') and is_on_use = '1'",
+                    'Limit' => 100
+                ]
+            ],
+        ]);
+        // dd($this->oauth2Info);
+        // dd($response);
+        if (!empty($response['Page'])) {
+            $setupJson = $response['Page'][0]['SetupJson'];
+            // dd($setupJson);
+            $setupArray = json_decode($setupJson, true);
+            $redirectUri = route('social.login', ['provider' => $brandCode]);
+            if (json_last_error() === JSON_ERROR_NONE) {
+                $clientId = $setupArray['ClientId'] ?? null;
+                // dd($clientId);
+            }
+        }
+
+        if ($provider == 'naver') {
+            $url = 'https://nid.naver.com/oauth2.0/authorize?' . http_build_query([
+                'response_type' => 'code',
+                'client_id' => $clientId,
+                'redirect_uri' => $redirectUri,
+                'state' => csrf_token(),
+            ]);
+        } elseif ($provider == 'kakao') {
+            $url = 'https://kauth.kakao.com/oauth/authorize?' . http_build_query([
+                'response_type' => 'code',
+                'client_id' => $clientId,
+                'redirect_uri' => $redirectUri,
+                'state' => csrf_token(),
+            ]);
+        }
+        // dd($url);
+        return redirect($url);
+    }
+
+    public function login($provider)
+    {
+        // dd($provider);
+        [$this->target, $ssoBrand] = explode('-', $provider);
+        if ($this->target == 'member') {
+            if ($ssoBrand == 'naver') {
+                // return Redirect::away('https://talk.naver.com/ct/w5u3g9');
+                echo "<script>window.open('https://talk.naver.com/ct/w5u3g9', '_blank', 'width=600,height=600');</script>";
+                return;
+            }elseif($ssoBrand == 'kakao'){
+                echo "<script>window.open('https://pf.kakao.com/_aAAGj/chat', '_blank', 'width=600,height=600');</script>";
+                return;
+                // return Redirect::away('https://pf.kakao.com/_aAAGj/chat');
+            }
+        }
+    }
+
+    public function setConfig($provider, $target)
+    {
+        $config = [
+            'client_id' => $this->oauth2Info['ClientId'],
+            'client_secret' => $this->oauth2Info['ClientSecret'],
+            'redirect' => "/social/$target-$provider/callback"
+        ];
+
+        switch ($provider) {
+            case 'dabory':
+                $driver = Socialite::buildProvider(DaboryProvider::class, [
+                    'client_id' => config('app.api.main.ClientId'),
+                    'client_secret' => config('app.api.main.ClientSecret'),
+                    'redirect' => $config['redirect']
+                ]);
+                break;
+            case 'facebook':
+                $driver = Socialite::buildProvider(FacebookProvider::class, $config);
+                break;
+            case 'kakao':
+                $driver = Socialite::buildProvider(KakaoProvider::class, $config);
+                break;
+            case 'google':
+                $driver = Socialite::buildProvider(GoogleProvider::class, $config);
+                break;
+            case 'naver':
+                $driver = Socialite::buildProvider(NaverProvider::class, $config);
+                break;
+            case 'apple':
+
+                $config['client_secret'] = $this->appleTokenService->generate(
+                    $this->oauth2Info['PrivateKey'],
+                    $this->oauth2Info['ClientId'],
+                    $this->oauth2Info['TeamId'],
+                    $this->oauth2Info['KeyId'],
+                );
+
+                $driver = Socialite::buildProvider(Provider::class, $config);
+                break;
+        }
+        return $driver;
+    }
+}

+ 48 - 3
pro/app/Http/Controllers/Auth/SocialTalkController.php

@@ -2,6 +2,7 @@
 namespace Themes\kbgolf\pro\app\Http\Controllers\Auth;
 
 use App\Http\Controllers\Controller;
+use App\Services\CallApiService;
 use Illuminate\Support\Facades\Redirect;
 use SocialiteProviders\Apple\Provider;
 use Laravel\Socialite\Facades\Socialite;
@@ -9,20 +10,63 @@ use Laravel\Socialite\Two\GoogleProvider;
 use Laravel\Socialite\Two\FacebookProvider;
 use SocialiteProviders\Kakao\KakaoProvider;
 use App\Providers\Socialite\OAuth2\DaboryProvider;
+use App\Services\AppleTokenService;
 use SocialiteProviders\Naver\Provider as NaverProvider;
 use Illuminate\Http\Request;
 
 class SocialTalkController extends Controller
 {
     private $appleTokenService;
+    private $callApiService;
     private $oauth2Info;
     private $target;
 
+    public function __construct(CallApiService $callApiService, AppleTokenService $appleTokenService)
+    {
+        $this->callApiService = $callApiService;
+        $this->appleTokenService = $appleTokenService;
+    }
+
     public function redirectToProvider($provider)
     {
         $this->oauth2Info = request('oauth2Info');
-        // dump($this->oauth2Info);
-        return $this->setConfig($provider, request('target'))->redirect();
+        $brandCode = 'member-'.$provider;
+        $response = $this->callApiService->callApi([
+            'url' => 'setup-page',
+            'data' => [
+                'PageVars' => [
+                    'Query' => "(setup_code = 'sso-client' and brand_code = '{$brandCode}') and is_on_use = '1'",
+                    'Limit' => 100
+                ]
+            ],
+        ]);
+
+        if (!empty($response['Page'])) {
+            $setupJson = $response['Page'][0]['SetupJson'];
+            $setupArray = json_decode($setupJson, true);
+            $redirectUri = route('social.login', ['provider' => $brandCode]);
+            if (json_last_error() === JSON_ERROR_NONE) {
+                $clientId = $setupArray['ClientId'] ?? null;
+                // dd($clientId);
+            }
+        }
+
+        if ($provider == 'naver') {
+            $url = 'https://nid.naver.com/oauth2.0/authorize?' . http_build_query([
+                'response_type' => 'code',
+                'client_id' => $clientId,
+                'redirect_uri' => $redirectUri,
+                'state' => csrf_token(),
+            ]);
+        } elseif ($provider == 'kakao') {
+            $url = 'https://kauth.kakao.com/oauth/authorize?' . http_build_query([
+                'response_type' => 'code',
+                'client_id' => $clientId,
+                'redirect_uri' => $redirectUri,
+                'state' => csrf_token(),
+            ]);
+        }
+        return redirect($url);
     }
 
     public function login($provider)
@@ -30,13 +74,14 @@ class SocialTalkController extends Controller
         [$this->target, $ssoBrand] = explode('-', $provider);
         if ($this->target == 'member') {
             if ($ssoBrand == 'naver') {
-                return Redirect::away('https://talk.naver.com/ct/w5ubd2');
+                return Redirect::away('https://talk.naver.com/ct/w5u3g9');
             }elseif($ssoBrand == 'kakao'){
                 return Redirect::away('https://pf.kakao.com/_aAAGj/chat');
             }
         }
     }
 
+    //사용안함
     public function setConfig($provider, $target)
     {
         $config = [

+ 146 - 38
pro/app/Http/Controllers/IndexController.php

@@ -21,41 +21,85 @@ class IndexController extends Controller
 
     public function index()
     {
-        // [$oauth2InfoList, $develLoginInfo] = setupSsoClientOrLoginInfo('member');
-        // dump($oauth2InfoList);
+        $contactSuccess = session()->has('contactSuccess');
         $connectionDevice = session()->get('ConnectionDevice');
+        [$oauth2InfoList, $develLoginInfo] = setupSsoClientOrLoginInfo();
         $response = ProApiCacheFacade::getCachedResponse('list-type1-book', 'list-type1/home-book');
-
         if ($this->callApiService->verifyApiError($response)) {
             notify()->error($response['body'], 'Error', 'bottomRight');
             return redirect()->back();
         }
 
         $widgetTaxo = $response['Book'][0]['Page'];
+        $maMainText = ProApiCacheFacade::filterWidgetTaxo($widgetTaxo, 'ma-main-text', $connectionDevice);
         $maMainSlider = ProApiCacheFacade::filterWidgetTaxo($widgetTaxo, 'ma-main-slider', $connectionDevice);
-        // dd($maMainSlider);
+        $mbSubSlider = ProApiCacheFacade::filterWidgetTaxo($widgetTaxo, 'mb-sub-slider', $connectionDevice);
+        $mbMainText = ProApiCacheFacade::filterWidgetTaxo($widgetTaxo, 'mb-main-text');
+        $cmFooterC = ProApiCacheFacade::filterWidgetTaxo($widgetTaxo, 'cm-footer-c');
+
+        date_default_timezone_set('Asia/Seoul');
+        $today = date('Ymd');
+        // $twoWeeksAgo = date('Ymd', strtotime('-2 weeks'));
+
         $seoHtml = Utils::getSeoHtml('main');
+
+        // 가장 최근 시세 찾기
         $query = "post_type_id = 59";
-        $limit = (int)request('limit', 150);
+        $limit = (int)request('limit', 1);
         $page = (int)request('page', 1);
+        $recentSise = $this->callApiService->callApi([
+            'url' => 'post-page',
+            'data' => [
+                'PageVars' => [
+                    'Query' => $query,
+                    'Desc' => 'pc6',
+                    'Limit' => $limit,
+                    'Offset' => ($page - 1) * $limit
+                ]
+            ]
+        ]);
+
+        // dd($recentSise);
+
+        $recentDate = '';
+        foreach($recentSise['Page'] ?? [] as $recent){
+            if ($recent) {
+                $recentDate = $recent['Pc6'];
+                $query .= " and Pc6 = '$recentDate'";
+                // dd($query);
+            }
+        }
 
-        // 시세
+        // 메인에 뿌려질 최근 시세리스트
+        $limit = (int)request('limit', 30);
+        $page = (int)request('page', 1);
         $mainSiseList = $this->callApiService->callApi([
             'url' => 'post-page',
             'data' => [
                 'PageVars' => [
                     'Query' => $query,
-                    'Desc' => 'created_on',
+                    'Asc' => 'post_title',
                     'Limit' => $limit,
                     'Offset' => ($page - 1) * $limit
                 ]
             ]
         ]);
-
         // dd($mainSiseList);
-        // 유튜브
+
+        // 시세 등락 계산
+        if (isset($mainSiseList['Page']) && !empty($mainSiseList['Page'])) {
+            foreach ($mainSiseList['Page'] as &$sise) {
+                if (isset($sise['Pc3'], $sise['Pc4'])) {
+                    $sise['fluctuation'] = (float)$sise['Pc3'] - (float)$sise['Pc4'];
+                } else {
+                    $sise['fluctuation'] = 0;
+                }
+            }
+        }
+
+        // main yutube List
         $query = "(post_type_id = 40 or post_type_id = 43 or post_type_id = 46) and status ='1' and pt1 !=''";
-        $limit = (int)request('limit', 12);
+        $limit = (int)request('limit', 300);
         $page = (int)request('page', 1);
         $mainYoutubeList = $this->callApiService->callApi([
             'url' => 'post-page',
@@ -69,9 +113,41 @@ class IndexController extends Controller
             ]
         ]);
 
+        $youtubeTypes = [
+            'Page' => [
+                'golf' => [],
+                'condo' => [],
+                'fitness' => []
+            ]
+        ];
+
+        foreach($mainYoutubeList['Page'] ?? [] as $mainYoutube){
+            // dd($mainYoutube);
+            if (isset($mainYoutube['PostTypeId'])) {
+                $postTypeId = $mainYoutube['PostTypeId'];
+                switch ($postTypeId) {
+                    case 40:
+                        if (count($youtubeTypes['Page']['golf']) < 3) {
+                            $youtubeTypes['Page']['golf'][] = $mainYoutube;
+                        }
+                        break;
+                    case 43:
+                        if (count($youtubeTypes['Page']['condo']) < 3) {
+                            $youtubeTypes['Page']['condo'][] = $mainYoutube;
+                        }
+                        break;
+                    case 46:
+                        if (count($youtubeTypes['Page']['fitness']) < 3) {
+                            $youtubeTypes['Page']['fitness'][] = $mainYoutube;
+                        }
+                        break;
+                }
+            }
+        }
+        // dd($youtubeTypes);
         // dd($mainYoutubeList);
 
-        // 블로그
+        // main blog List
         $query = "(post_type_id = 41 or post_type_id = 44 or post_type_id = 50) and status ='1'";
         $limit = (int)request('limit', 12);
         $page = (int)request('page', 1);
@@ -87,37 +163,50 @@ class IndexController extends Controller
             ]
         ]);
 
-        // dd($mainBlogList);
-
-        // 시세 등락 계산
-        if (isset($mainSiseList['Page']) && !empty($mainSiseList['Page'])) {
-            foreach ($mainSiseList['Page'] as &$sise) {
-                if (isset($sise['Pc3'], $sise['Pc4'])) {
-                    $sise['fluctuation'] = (float)$sise['Pc3'] - (float)$sise['Pc4'];
-                } else {
-                    $sise['fluctuation'] = 0;
-                }
-            }
-        }
+        $blogTypes = [
+            'Page' => [
+                'golf' => [],
+                'condo' => [],
+                'fitness' => []
+            ]
+        ];
 
-        // 블로그 post_code 만들기
-        if (isset($mainBlogList['Page']) && !empty($mainBlogList['Page'])) {
-            foreach ($mainBlogList['Page'] as &$mainBlog) {
-                if (isset($mainBlog['PostTypeId'])) {
-                    switch ($mainBlog['PostTypeId']) {
-                        case 41:
+        foreach($mainBlogList['Page'] ?? [] as &$mainBlog){
+            if (isset($mainBlog['PostTypeId'])) {
+                $postTypeId = $mainBlog['PostTypeId'];
+                switch ($postTypeId) {
+                    case 41:
+                        if (count($blogTypes['Page']['golf']) < 3) {
                             $mainBlog['PostCode'] = 'golf-blog';
-                            break;
-                        case 44:
+                            $blogTypes['Page']['golf'][] = $mainBlog;
+
+                        }
+                        break;
+                    case 44:
+                        if (count($blogTypes['Page']['condo']) < 3) {
                             $mainBlog['PostCode'] = 'condo-blog';
-                            break;
-                        default:
+                            $blogTypes['Page']['condo'][] = $mainBlog;
+
+                        }
+                        break;
+                    case 50:
+                        if (count($blogTypes['Page']['fitness']) < 3) {
                             $mainBlog['PostCode'] = 'fitness-blog';
-                    }
+                            $blogTypes['Page']['fitness'][] = $mainBlog;
+                        }
+                        break;
                 }
             }
         }
 
+        // dd($blogTypes);
+        // dd($mainBlogList);
+
+        if ($this->callApiService->verifyApiError($mainSiseList)) {
+            notify()->error($mainSiseList['body'], 'Error', 'bottomRight');
+            return redirect()->back();
+        }
+
         if ($this->callApiService->verifyApiError($mainSiseList)) {
             notify()->error($mainSiseList['body'], 'Error', 'bottomRight');
             return redirect()->back();
@@ -128,30 +217,49 @@ class IndexController extends Controller
             return redirect()->back();
         }
 
+        if ($this->callApiService->verifyApiError($youtubeTypes)) {
+            notify()->error($youtubeTypes['body'], 'Error', 'bottomRight');
+            return redirect()->back();
+        }
+
         if ($this->callApiService->verifyApiError($mainBlogList)) {
             notify()->error($mainBlogList['body'], 'Error', 'bottomRight');
             return redirect()->back();
         }
 
-        return view('views.index', compact('seoHtml', 'maMainSlider', 'mainSiseList', 'mainYoutubeList' ,'mainBlogList'));
+        if ($this->callApiService->verifyApiError($blogTypes)) {
+            notify()->error($blogTypes['body'], 'Error', 'bottomRight');
+            return redirect()->back();
+        }
+
+        return view('views.index', compact('maMainText', 'seoHtml', 'maMainSlider', 'mainSiseList', 'mainYoutubeList',
+                    'youtubeTypes' ,'mainBlogList', 'blogTypes', 'oauth2InfoList', 'develLoginInfo'));
     }
     // 시세 더보기
     public function loadMoreSise(Request $request)
     {
+        $today = date('ymd');
+        // dd($today);
         $query = "post_type_id = 59";
         $offset = (int) $request->query('offset', 0);
-        $limit = (int) $request->query('limit', 5);
+        $limit = (int) $request->query('limit', 12);
         $siseType = $request->query('siseType', 'golf');
+        $siseDate = $request->query('siseDate', $today);
         if($siseType){
-            $query .= " and pc1='$siseType'";
+            if($siseType != 'golf'){
+                $query .= " and pc5='$siseType' and pc6='$siseDate'";
+            }else{
+                $query .= " and pc5='$siseType'";
+            }
         }
+        // dd($query);
 
         $moreSiseList=$this->callApiService->callApi([
             'url' => 'post-page',
             'data' => [
                 'PageVars' => [
                     'Query' => $query,
-                    'Desc' => 'created_on',
+                    'Asc' => 'post_title',
                     'Limit' => $limit,
                     'Offset' => $offset
                 ]

+ 43 - 1
pro/app/Http/Controllers/Page/ContactUsCustomController.php

@@ -94,6 +94,49 @@ class ContactUsCustomController extends Controller
         return view('views.page.contactus-custom-list', compact('contactUsCustomList', 'contactUsCustomItems'));
     }
 
+    public function show($siseType = null, $postTitle = null)
+    {
+        if (is_null($postTitle) && !is_null($siseType)) {
+            $postTitle = $siseType;
+            $siseType = null;
+        }
+
+        $limit = (int)request('limit', 10);
+        $page = (int)request('page', 1);
+
+        $policyPage = $this->callApiService->callApi([
+            'url' => 'simple-join-page',
+            'data' => [
+                'QueryVars' => [
+                    'QueryName' => 'post-member-user',
+                    'SimpleFilter' => "post_type_id = 12 and mx.status = '0'"
+                ],
+                'PageVars' => [
+                    'Desc' => 'Id',
+                    'Limit' => $limit,
+                    'Offset' => ($page - 1) * $limit
+                ]
+            ]
+        ]);
+
+        $policy = $policyPage['Page'][0];
+        if (empty($policy)) {
+            notify()->error(__('개인정보 보호정책이 존재하지 않습니다'), 'Error', 'bottomRight');
+            return redirect()->back();
+        }
+
+        if (empty($policy['PostSlug'])) {
+            $key = $policy['Id'];
+        } else {
+            $key = $policy['PostSlug'];
+        }
+
+        return view('views.page.contactus-custom', [
+            'siseType' => $siseType,
+            'postTitle' => $postTitle,
+        ], compact('policy', 'policy'));
+    }
+
     public function store()
     {
         $rules = [
@@ -187,7 +230,6 @@ class ContactUsCustomController extends Controller
                 }
             );
         }
-
         notify()->success('성공적으로 문의하였습니다', 'Success', 'bottomRight');
         return $redirectTo;
     }

+ 63 - 22
pro/app/Http/Controllers/Page/SiseController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
 use App\Services\CallApiService;
 use Illuminate\Pagination\LengthAwarePaginator;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Log;
 
 class SiseController extends Controller
 {
@@ -37,16 +38,6 @@ class SiseController extends Controller
         $query = "post_type_id = 59 and pc5='$siseType'";
         if($area){
             if($area != 'all'){
-                // switch ($area) {
-                //     case '123':
-                //         $query .= " and pc2='1' or pc2='2' or pc2='3'";
-                //         break;
-                //     case '45':
-                //         $query .= " and pc2='4' or pc2='5'";
-                //         break;
-                //     default:
-                //         $query .= " and pc2='$area'";
-                // }
                 $query .= " and pc2='$area'";
             }
         }
@@ -54,7 +45,7 @@ class SiseController extends Controller
             $query .= " and postTitle like '%$memberbershipname%'";
         }
 
-        $limit = (int)request('limit', 12);
+        $limit = (int)request('limit', 10);
         $page = (int)request('page', 1);
 
         // api 호출 request
@@ -63,13 +54,12 @@ class SiseController extends Controller
             'data' => [
                 'PageVars' => [
                     'Query' => $query,
-                    'Desc' => 'created_on',
+                    'Desc' => 'post_title',
                     'Limit' => $limit,
                     'Offset' => ($page - 1) * $limit
                 ]
             ]
         ]);
-
         // dd($siseList);
 
         // 등락 계산
@@ -89,17 +79,68 @@ class SiseController extends Controller
         }
 
         // pagenation
-        $totalcnt = $siseList['PageVars']['QueryCnt'];
-        $siseItems['Page'] = new LengthAwarePaginator(
-            $siseList['Page'],
-            $totalcnt,
-            $limit,
-            $page,
-            ['path' => request()->url()]
-        );
+        // $totalcnt = $siseList['PageVars']['QueryCnt'];
+        // $siseItems['Page'] = new LengthAwarePaginator(
+        //     $siseList['Page'],
+        //     $totalcnt,
+        //     $limit,
+        //     $page,
+        //     ['path' => request()->url()]
+        // );
+        // dd($siseItems['Page']);
+
+
+        return view('views.page.sise', compact('siseList', 'title', "title_dir", "siseType", "area"));
+    }
+
+    public function loadScrollSise(Request $request)
+    {
+        $today = date('ymd');
+
+        $limit = (int) $request->query('limit', 400);
+        $page = (int) $request->query('page', 1);
+
+        $siseType = $request->query('siseType', "golf");
+        $areaType = $request->query('areaType', "all");
+        $siseDate = $request->query('siseDate', $today);
+        $query = "post_type_id = 59 ";
+
+        if($areaType != 'all'){
+            $query .= "and pc5='$siseType' and pc2='$areaType' and pc6='$siseDate'";
+        }else{
+            $query .= "and pc5='$siseType' and pc6='$siseDate'";
+        }
+        // Log::info('More Sise List:',$siseDate );
+        $moreSiseList=$this->callApiService->callApi([
+            'url' => 'post-page',
+            'data' => [
+                'PageVars' => [
+                    'Query' => $query,
+                    'Asc' => 'post_title',
+                    'Limit' => $limit,
+                    'Offset' => ($page - 1) * $limit
+                ]
+            ]
+        ]);
+
+        // 등락 계산
+        if (isset($moreSiseList['Page']) && !empty($moreSiseList['Page'])) {
+            foreach ($moreSiseList['Page'] as &$sise) {
+                if (isset($sise['Pc3'], $sise['Pc4'])) {
+                    $sise['fluctuation'] = (float)$sise['Pc3'] - (float)$sise['Pc4'];
+                } else {
+                    $sise['fluctuation'] = 0;
+                }
+            }
+        }
+
+        if ($this->callApiService->verifyApiError($moreSiseList)) {
+            notify()->error($moreSiseList['body'], 'Error', 'bottomRight');
+            return redirect()->back();
+        }
 
+        return $moreSiseList;
 
-        return view('views.page.sise', compact('siseList', 'siseItems', 'title', "title_dir", "siseType", "area"));
     }
 
 }

+ 286 - 0
pro/app/Http/Controllers/dbrbbs/PostController.php

@@ -0,0 +1,286 @@
+<?php
+
+namespace Themes\kbgolf\pro\app\Http\Controllers\Dbrbbs;
+
+use App\Helpers\ResponseConverter;
+use App\Http\Controllers\Controller;
+use App\Services\CallApiService;
+use Illuminate\Http\Request;
+use Illuminate\Pagination\LengthAwarePaginator;
+use Illuminate\Support\Str;
+use Jenssegers\Agent\Agent as Agent;
+
+class PostController extends Controller
+{
+    private $callApiService;
+    private $Agent;
+
+    public function __construct(CallApiService $callApiService)
+    {
+        $this->callApiService = $callApiService;
+        $this->Agent = new Agent();
+    }
+
+    public function postTypePage($postCode)
+    {
+        return $this->callApiService->callApi([
+            'url' => 'list-type1-page',
+            'data' => [
+                'QueryVars' => [
+                    'QueryName' => 'post/post-type-input',
+                    'SimpleFilter' => "post_code='$postCode'",
+                    'IsntPagination' => true,
+                ],
+                'PageVars' => [
+                    'Limit' => 1
+                ]
+            ]
+        ]);
+    }
+
+    public function list($postCode)
+    {
+        $postType = $this->postTypePage($postCode)['Page'][0];
+        $design =  $postType['T1'];
+        $design = json_decode($design, true)['Design'];
+
+        $p = request('p');
+        // dd($p);
+        $page = (int)request('page', 1);
+        $limit = 12;
+        if ($design) {
+            if ($design['PcTitleLeng'] === 0 || $design['MoTitleLeng'] === 0 ||
+                $design['PcPageLeng'] === 0 || $design['MoPageLeng'] === 0) {
+                notify()->error('관리자 게시판 구분페이지에서 게시판 디자인 설정을 해주세요', 'Error', 'bottomRight');
+                return redirect()->to('/');
+            }
+
+            if ($this->Agent->isDesktop()) {
+                $limit = (int)request('limit', $design['PcPageLeng']);
+            } else {
+                $limit = (int)request('limit', $design['MoPageLeng']);
+            }
+        }
+
+        $simpleFilter = "post_code='$postCode' and mx.status = '1'";
+        if ($p) {
+            $simpleFilter = $simpleFilter . "and (post_title LIKE '%$p%' or post_contents LIKE '%$p%')";
+        }
+
+        $listType1Book = $this->callApiService->callApi([
+            'url' => 'list-type1-book',
+            'data' => [
+                'Book' => [
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'pro:my-page/post-list',
+                            'SimpleFilter' => $simpleFilter,
+                            'SubSimpleFilter' => "image_type = 'middle'",
+                            'IsntPagination' => false
+                        ],
+                        'ListType1Vars' => [
+                            'OrderBy' => request('sort', 'mx.created_on desc')
+                        ],
+                        'PageVars' => [
+                            'Limit' => $limit,
+                            'Offset' => ($page - 1) * $limit
+                        ]
+                    ],
+                ]
+            ]
+        ]);
+
+        // dd($listType1Book);
+        if ($this->callApiService->verifyApiError($listType1Book)) {
+            notify()->error($listType1Book['body'], 'Error', 'bottomRight');
+            return redirect()->back();
+        }
+
+        $postPage = $listType1Book['Book'][0] ?? [];
+
+        if ($design) {
+            $postPage['Page'] = collect($postPage['Page'])->map(function ($post) use ($design) {
+                if ($this->Agent->isDesktop()) {
+                    $post['Title'] = Str::limit($post['C6'], $design['PcTitleLeng'], '...');
+                } else {
+                    $post['Title'] = Str::limit($post['C6'], $design['MoTitleLeng'], '...');
+                }
+                $post['PcGalleryClass'] = 'col-md-' . (12 / $design['PcGalleryLeng']);
+                $post['MoGalleryClass'] = 'col-' . (12 / $design['MoGalleryLeng']);
+
+                $post['PcVideoClass'] = 'col-md-' . (12 / $design['PcVideoLeng']);
+                $post['MoVideoClass'] = 'col-' . (12 / $design['MoVideoLeng']);
+                return $post;
+            })->toArray();
+        }
+
+
+        $postPage['Page'] = new LengthAwarePaginator($postPage['Page'], $postPage['PageVars']['QueryCnt'],
+            $limit, $page, ['path' => request()->url()]);
+        // dd($postType);
+        // dd($postPage);
+
+        return view('views.bbs.list', compact('postPage', 'postType', 'postCode', 'design'));
+    }
+
+    public function details($postCode, $slug)
+    {
+        $limit = (int)request('limit', 3);
+        $page = (int)request('page', 1);
+
+        $post = $this->postPick(['PostSlug' => $slug]);
+        $postId = $post['Id'];
+        $postTypeId = $post['PostTypeId'];
+
+//        $postType = $this->postTypePick(['Id' => (int)$postTypeId]);
+//        dump($postCode);
+//        dd($slug);
+        $listType1Book = $this->callApiService->callApi([
+            'url' => 'list-type1-book',
+            'data' => [
+                'Book' => [
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'pro:my-page/post-details',
+                            'SimpleFilter' => "post_code = '$postCode' and mx.id = $postId",
+                            'SubSimpleFilter' => "image_type = 'big'",
+                            'IsntPagination' => true,
+                        ],
+                        'PageVars' => [
+                            'Limit' => 1
+                        ]
+                    ],
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'pro:my-page/post-details-prenext',
+                            'SimpleFilter' => "mx.id = (select max(id) from pro_post where id < $postId and post_type_id = $postTypeId)",
+                            'SubSimpleFilter' => "",
+                            'IsntPagination' => true,
+                        ],
+                        'PageVars' => [
+                            'Limit' => 1
+                        ]
+                    ],
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'pro:my-page/post-details-prenext',
+                            'SimpleFilter' => "mx.id = (select min(id) from pro_post where id > $postId and post_type_id = $postTypeId)",
+                            'SubSimpleFilter' => "",
+                            'IsntPagination' => true,
+                        ],
+                        'PageVars' => [
+                            'Limit' => 1
+                        ]
+                    ],
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'post/post-type-input',
+                            'SimpleFilter' => "mx.id = $postTypeId",
+                            'IsntPagination' => true,
+                        ],
+                        'PageVars' => [
+                            'Limit' => 1
+                        ]
+                    ],
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'post/post-type-input',
+                            'SimpleFilter' => "post_code='$postCode'",
+                            'IsntPagination' => true,
+                        ],
+                        'PageVars' => [
+                            'Limit' => 1
+                        ]
+                    ],
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'post/blog-bd-list-std',
+                            'SimpleFilter' => "mx.post_id = {$postId} and mx.parent_id = 0",
+                        ],
+                        'ListType1Vars' => [
+                            'OrderBy' => ''
+                        ],
+                        'PageVars' => [
+                            'Limit' => $limit,
+                            'Offset' => ($page - 1) * $limit
+                        ]
+                    ],
+                    [
+                        'QueryVars' => [
+                            'QueryName' => 'post/blog-bd-list-std',
+                            'SimpleFilter' => "mx.post_id = {$postId} and mx.parent_id != 0",
+                        ],
+                        'ListType1Vars' => [
+                            'OrderBy' => ''
+                        ],
+                        'PageVars' => [
+                            'Limit' => 100,
+                            'Offset' => 0
+                        ]
+                    ]
+                ]
+            ]
+        ]);
+
+//        dd($listType1Book);
+        if ($this->callApiService->verifyApiError($listType1Book)) {
+            notify()->error($listType1Book['body'], 'Error', 'bottomRight');
+            return redirect()->back();
+        }
+
+        $post = $listType1Book['Book'][0]['Page'][0];
+        $prePost = $listType1Book['Book'][1]['Page'];
+        $nextPost = $listType1Book['Book'][2]['Page'];
+        $postType = $listType1Book['Book'][4]['Page'][0];
+        $comments = $listType1Book['Book'][5]['Page'];
+        $replays = $listType1Book['Book'][6]['Page'];
+
+        $comments = ResponseConverter::joinFor($comments, $replays, 'C5', 'Id', 'ReplyPage');
+
+        $comments = new LengthAwarePaginator($comments, $listType1Book['Book'][5]['PageVars']['QueryCnt'],
+            $limit, $page, ['path' => request()->url()]);
+
+        return view('views.bbs.details', compact('post', 'prePost', 'nextPost', 'postCode', 'postType', 'comments'));
+    }
+
+    public function comment()
+    {
+        $response = $this->callApiService->callApi([
+            'url' => 'post-bd-act',
+            'data' => [
+                'Page' => [
+                    [
+                        'Id' => 0,
+                        'PostId' => (int)request('post_id'),
+                        'BdContents' => request('bd_contents'),
+                        'ParentId' => (int)request('parent_id'),
+                        'SeqNo' => (int)request('seq_no'),
+                        'ChildLastSeq' => (int)request('child_last_seq'),
+                    ]
+                ],
+            ]
+        ]);
+
+        if ($this->callApiService->verifyApiError($response)) {
+            notify()->error($response['body'], 'Error', 'bottomRight');
+            return redirect()->back();
+        }
+
+        notify()->success(_e('Action completed'), 'Success', 'bottomRight');
+        return redirect()->back();
+    }
+
+    public function postPick($page)
+    {
+        $postPick = $this->callApiService->callApi([
+            'url' => 'post-pick',
+            'data' => [
+                'Page' => [
+                    $page
+                ],
+            ]
+        ]);
+
+        return $postPick['Page'][0];
+    }
+}

+ 13 - 0
pro/para/ko_KR/request/list-type1/home-book.json

@@ -9,6 +9,19 @@
             "PageVars": {
                 "Limit": 100000
             }
+        },
+        {
+            "QueryVars": {
+                "QueryName": "post/banner-input",
+                "SimpleFilter": "(mx.post_type_id = 8 and mx.status = '0') and (DATE_FORMAT(now(), '%Y-%m-%d') BETWEEN mx.pc6 AND mx.pc7)",
+                "IsntPagination": true
+            },
+            "ListType1Vars": {
+                "OrderBy": "mx.pc3 asc"
+            },
+            "PageVars": {
+                "Limit": 100000
+            }
         }
     ]
 }

File diff suppressed because it is too large
+ 0 - 0
pro/para/ko_KR/response/list-type1/home-book.json


+ 89 - 83
pro/resources/css/responsive.css

@@ -1,7 +1,7 @@
 /*  Theme Responsive Css */
 
 @media only screen and (max-width: 5000px){
-  
+
   .boxed_wrapper{
     overflow-x: hidden;
   }
@@ -36,18 +36,20 @@
 	.banner-style-11 {padding-top:250px;}
 	.elastic .vector-image .image-2 {right:2%;  width:44%;}
 	.elastic .content-box {width:52%;}
-	
+
 	.searchengine.banner-style-six .image-box {margin-right:-490px;}
 
 	.platform .image-box {margin-right: 0;  margin-left: -100px;  top: 50px;}
 }
 
 @media only screen and (max-width: 1200px){
+	.main-header.style-four {position:fixed;}
 	.main-header .container {padding:0 60px;}
-	.main_header .container {padding:30px 60px;}
-	.menu-area .mobile-nav-toggler {display: block; margin-top: 38px; padding: 10px;}
+	.main_header .container {padding:20px 60px;}
+	.menu-area .mobile-nav-toggler {display: block; margin-top: 28px; padding: 10px;}
 	.main-header.style-four .menu-area .mobile-nav-toggler .icon-bar{background:var(--black);}
 	.main_header.style-four .menu-area .mobile-nav-toggler .icon-bar{background: #fff;}
+	 .main-header .outer-container .logo-box .logo{ padding:20px 0px;}
 
 	.dabory-quick-B {right: 0!important;  left: 0;  top: auto!important;  bottom: 0;  transform: translate(0, 0) !important;  border: none!important;  border-top: 1px solid #e1e1e1!important;  border-radius: 0!important;  padding: 0px 7px!important; box-shadow: 0px -1px 8px rgba(0, 0, 0, 0.1);}
 	.dabory-quick-B ul {display:flex;}
@@ -57,7 +59,7 @@
 	.dabory-quick-B ul > li .ico.ico-bottom,
 	.dabory-quick-B ul > li .ico.ico-top	{width: 40px!important;  height: 40px!important; background-color: #1c2f5e;   border-radius: 50px;  background-repeat: no-repeat;  background-position: center; background-image: url(image/r_quick_ico1_mob.png) !important;}
 	.dabory-quick-B ul > li img {width:20px!important; height:20px!important;}
-	
+
 	.quick_kbgolf {border-top:none!important; box-shadow:none!important;}
 	.quick_kbgolf li {display:flex; justify-content:center; margin:0 2px;}
 	.quick_kbgolf li:nth-child(2) { justify-content:flex-start;}
@@ -68,6 +70,9 @@
 	.sub, .sub_wrap {padding-top:187px;}
 	.sub_wrap .title {padding-left:var(--side-space); padding-right:var(--side-space);}
 
+	.quote caption {}
+	.quote .tb_vertical thead tr {top:130px;}
+
 	.inquiry select {width:62%;}
 	.inquiry .price input {width:30%;}
 
@@ -101,7 +106,7 @@
 	.shop_solution.reasons-section .inner-content {padding-top:0;}
 
 	.searchengine.banner-style-six {padding: 160px 0px 260px 0px;}
-	.searchengine.banner-style-six .content-box {margin-top: 30px;}	
+	.searchengine.banner-style-six .content-box {margin-top: 30px;}
 	.searchengine.banner-style-six .image-box {margin-right: -220px; top: 72px; right: 80px;}
 
 	.elastic .content-box h1 {font-size:40px;}
@@ -148,7 +153,7 @@
 	.platform .content-box h2 {margin-top:80px;}
 	.platform .content-box h1 {font-size:42px;}
 
-	
+
 
 
 
@@ -305,7 +310,7 @@
     padding-top: 150px;
   }
 
-  
+
 
   .main-header .menu-right-content {
     margin-left: 30px;
@@ -368,13 +373,13 @@
   }
 
   .enterprise-section .single-item .inner-box,
-  .enterprise-section .single-column:nth-child(2) .single-item .inner-box, 
+  .enterprise-section .single-column:nth-child(2) .single-item .inner-box,
   .enterprise-section .single-column:nth-child(3) .single-item .inner-box{
     padding: 50px 30px;
   }
 
   .enterprise-section .single-item .inner-box .image-box,
-  .enterprise-section .single-column:nth-child(2) .single-item .inner-box .image-box, 
+  .enterprise-section .single-column:nth-child(2) .single-item .inner-box .image-box,
   .enterprise-section .single-column:nth-child(3) .single-item .inner-box .image-box{
     position: relative;
     right: 0px;
@@ -394,16 +399,16 @@
 
   .reasons-section .inner-content .single-column,
   .dashboard-feature .inner-content .feature-column,
-  
+
 
   .dashboard-feature .inner-content,
-  
+
 
   .banner-style-ten{
     padding-top: 200px;
   }
 
-  .check-work .inner-box .check-form .form-group input[type='text'], 
+  .check-work .inner-box .check-form .form-group input[type='text'],
   .check-work .inner-box .check-form .form-group input[type='email']{
     max-width: 260px;
   }
@@ -864,13 +869,13 @@
     padding: 24px 0;
   }
 
-  
+
 
   .main-header.home-4 .menu-area .mobile-nav-toggler .icon-bar{
     background: #fff;
   }
 
-  
+
 
   .main-header.style-two .menu-area .mobile-nav-toggler{
     margin-top: 33px;
@@ -892,9 +897,6 @@
     display: none;
   }
 
-  .main-header .outer-container .logo-box .logo{
-    padding: 30px 0px;
-  }
 
   #image_block_08 .image-box, #image_block_09 .image-box{
     padding: 0px;
@@ -998,7 +1000,7 @@
 	.main_solution .main_column2 {margin-bottom:0;}
 
 
-	
+
 
 
 
@@ -1027,7 +1029,8 @@
 }
 
 @media only screen and (max-width: 991px){
-	.main-header.style-four .outer-container .logo-box .logo {padding-top: 40px; width: 120px;}
+	.main-header.style-four .outer-container .logo-box .logo {width:146px; padding:16px 0;}
+	.menu-area .mobile-nav-toggler {margin-top:20px;}
 	.main-header .menu-area .btn-box {margin: 37px 15px 0px 0px;}
 
 	.margin_left_30{margin-left: 0px !important;}
@@ -1038,24 +1041,26 @@
 	.tb_vertical tbody .btn {max-width:80px;}
 	.tb_vertical thead th,
 	.tb_vertical tbody td {padding:15px 10px;}
-	.tb_vertical tbody tr:first-of-type td {padding-top:20px;}	
+	.tb_vertical tbody tr:first-of-type td {padding-top:20px;}
 	.m_youtube .list li {width:50%;}
-	.m_blog .list li {width:100%;}
+	.m_blog .list li {width:50%;}
 
 	.quote {padding-left:0; padding-right:0;}
 	.quote .tabs li {margin: 4px;}
 	.golf .quote .tabs li {width: calc(25% - 8px);}
+	.quote caption {top:75px;}
+	.quote .tb_vertical thead tr {top:120px;}
 
 	.condo .quote .tabs li,
 	.fitness .quote .tabs li {width: calc(33.33% - 8px);}
 
-	
 
-  
 
 
 
- 
+
+
+
 
   .download-apps .image-box{
     margin: 0px;
@@ -1111,7 +1116,7 @@
     margin-bottom: 15px;
   }
 
-  
+
 
   .recruitment-section .single-item .inner-box{
     margin-bottom: 30px;
@@ -1474,14 +1479,14 @@
     margin-bottom: 30px;
   }
 
-  .feature-style-11 .inner-content .inner-box:first-child .image-box img, 
-  .feature-style-11 .inner-content .inner-box:nth-child(3) .image-box img, 
+  .feature-style-11 .inner-content .inner-box:first-child .image-box img,
+  .feature-style-11 .inner-content .inner-box:nth-child(3) .image-box img,
   .feature-style-11 .inner-content .inner-box:last-child .image-box img{
     float: none;
     width: 100%;
   }
 
-  .feature-style-11 .inner-content .inner-box:nth-child(2) .image-box img, 
+  .feature-style-11 .inner-content .inner-box:nth-child(2) .image-box img,
   .feature-style-11 .inner-content .inner-box:nth-child(4) .image-box img{
     float: none;
     width: 100%;
@@ -1539,7 +1544,7 @@
 
   .testimonial-style-11 .testimonial-inner .testimonial-content .text,
   .testimonial-style-11 .testimonial-inner .testimonial-content .author-info .designation,
-  .testimonial-style-11 .testimonial-inner .owl-prev, 
+  .testimonial-style-11 .testimonial-inner .owl-prev,
   .testimonial-style-11 .testimonial-inner .owl-next{
     color: #777;
   }
@@ -1548,7 +1553,7 @@
     color: #4527a4;
   }
 
-  .testimonial-style-11 .testimonial-inner .owl-prev:hover, 
+  .testimonial-style-11 .testimonial-inner .owl-prev:hover,
   .testimonial-style-11 .testimonial-inner .owl-next:hover{
     color: #4527a4;
   }
@@ -1587,13 +1592,6 @@
     margin-bottom: 50px;
   }
 
-  .main-header.home-15 .menu-right-content{
-    margin: 20px 15px 0px 0px;
-  }
-
-  .main-header.home-15 .outer-container .logo-box .logo{
-    padding-top: 30px;
-  }
 
   .work-section .single-item{
     margin-bottom: 30px;
@@ -1635,7 +1633,7 @@
     margin: 32px 15px 0px 0px;
   }
 
-  
+
 
   .transactions-work .content-box{
     margin-bottom: 100px;
@@ -1649,7 +1647,7 @@
     padding-bottom: 100px;
   }
 
-  .take-control .single-column:nth-child(3) .single-item .inner-box, 
+  .take-control .single-column:nth-child(3) .single-item .inner-box,
   .take-control .single-column:last-child .single-item .inner-box {
     padding-bottom: 60px;
   }
@@ -1858,7 +1856,7 @@
     margin: 0px 20px;
   }
 
-  
+
 
   .service-details .service-sidebar{
     margin: 0px 0px 30px 0px;
@@ -1969,7 +1967,7 @@
   .shop_solution.banner-section .content-box {margin-left:50px;}
   .shop_solution.banner-section .image-box .image-1 {right:0;}
   */
- 
+
 }
 
 @media only screen and (max-width: 768px){
@@ -2017,7 +2015,7 @@
 	.qna-form textarea {width:100%;}
 	.inquiry .price input {width:50%;}
 	.inquiry label {padding:0 3px;}
-	
+
 	.card_list li {width:calc(50% - 10px); padding:10px;}
 
 	.about .conts {flex-direction:column;}
@@ -2037,7 +2035,7 @@
 	.qna-form .contact-form {padding:15px 0;}
 
 	#post-list > .row > div {flex:0 0 50%; max-width:50%;}
-	
+
 
 
 
@@ -2196,13 +2194,13 @@ h2{
     padding: 70px 0px;
   }
 
-  #iamge_block_03 .image-box .image-1, 
+  #iamge_block_03 .image-box .image-1,
   #iamge_block_03 .image-box .image-2{
     display: block;
     right: 0px;
   }
 
-  #iamge_block_03 .image-box .image-1 img, 
+  #iamge_block_03 .image-box .image-1 img,
   #iamge_block_03 .image-box .image-2 img{
     width: 100%;
   }
@@ -2414,7 +2412,7 @@ h2{
     padding-top: 70px;
   }
 
-  
+
 
   .recruitment-section{
     padding-bottom: 70px;
@@ -2530,7 +2528,7 @@ h2{
     display: none;
   }
 
-  .check-work .inner-box .check-form .form-group input[type='text'], 
+  .check-work .inner-box .check-form .form-group input[type='text'],
   .check-work .inner-box .check-form .form-group input[type='email']{
     max-width: 100%;
     border: 1px solid #ddd;
@@ -2890,7 +2888,7 @@ h2{
   }
 
   .banner-style-19{
-    padding: 170px 0px 100px 0px;  
+    padding: 170px 0px 100px 0px;
   }
 
   .ourmission-section{
@@ -3113,7 +3111,7 @@ h2{
     margin-bottom: 30px;
   }
 
-  #image_block_08 .image-box .image-content, 
+  #image_block_08 .image-box .image-content,
   #image_block_09 .image-box .image-content{
     padding-bottom: 30px;
   }
@@ -3142,7 +3140,7 @@ h2{
 }
 
 @media only screen and (max-width: 599px){
-	
+
 
 
 
@@ -3235,7 +3233,7 @@ h2{
     width: 50%;
   }
 
-  #content_block_37 .inner-box .company-list li:nth-child(2), 
+  #content_block_37 .inner-box .company-list li:nth-child(2),
   #content_block_37 .inner-box .company-list li:nth-child(5){
     top: 0px;
   }
@@ -3346,7 +3344,7 @@ h2{
 	}
 
 	body {font-size:16px;}
-	input, 
+	input,
 	select,
 	.form-control {height:42px; padding:10px; font-size:15px!important; border-radius:8px;}
 	textarea {padding:10px; font-size:15px!important;}
@@ -3364,17 +3362,14 @@ h2{
 	.main-header .container {padding:0 20px;}
 	.main_header .container {padding:20px;}
 
-	.main-header.style-four .outer-container .logo-box .logo {width:146px; padding:16px 0;}
-	.menu-area .mobile-nav-toggler {margin-top:20px;}
-
 	.main_visual {height:310px;}
 	.main_visual .swiper-slide > div {margin-top:24px;}
 	.main_visual strong {font-size:22px;}
 	.main_visual strong em {margin-top:0; font-size:32px; line-height:1;}
 	.main_visual p {margin-top:6px; font-size:16px;}
-	.main_visual .swiper-horizontal>.swiper-pagination-bullets, 
+	.main_visual .swiper-horizontal>.swiper-pagination-bullets,
 	.main_visual .swiper-pagination-bullets.swiper-pagination-horizontal {bottom:10px;}
-	
+
 	.quick_kbgolf {padding:0 3px!important;}
 	.quick_kbgolf li {min-width:60px; font-size:12px;}
 	.quick_kbgolf li:nth-child(3),
@@ -3394,11 +3389,12 @@ h2{
 	.m_quote .tabs {margin-bottom:8px;}
 	.m_quote .tabs li {width:calc(33.33% - 4px); height:42px; margin:2px;}
 	.m_quote .tb_vertical {height:300px;}
-	.m_quote .tb_vertical thead th, 
+	.m_quote .tb_vertical thead th,
 	.m_quote .tb_vertical tbody td,
 	.m_quote .tb_vertical tbody tr:first-of-type td {padding:10px;}
 	.m_quote caption {padding-top:0;}
-	
+	.tb_vertical thead tr {top:20px;}
+
 	.tit_main {margin-bottom: 20px;}
 	.tit_main h2 {font-size:34px;}
 	.tit_main em {font-size:16px;}
@@ -3408,8 +3404,8 @@ h2{
 	.m_youtube .m_more {margin-top:30px;}
 
 	.m_blog .list h4 {font-size:18px;}
-	.m_blog .list li {padding:5px 0;}
-	.m_blog .list a {padding:25px;}
+	.m_blog .list li {width:100%; padding:5px 0;}
+	.m_blog .list a {padding:10px;}
 	.m_blog .list p {font-size:14px;}
 	.m_blog .m_more,
 	.m_quote .m_more {margin-top:30px;}
@@ -3425,7 +3421,7 @@ h2{
 	.navi, .navi a {font-size: 14px;}
 	.navi i {font-size:12px;}
 	.title {margin-bottom:40px;}
-	.title h2 {font-size:32px;}	
+	.title h2 {font-size:32px;}
 
 	.search_ticket .container {padding:20px;}
 	.search_ticket label {width:100%;}
@@ -3434,13 +3430,13 @@ h2{
 
 	.quote {padding:30px 0; font-size:14px;}
 	.quote .tabs {margin-bottom:5px;}
-	.quote .tabs li {height:50px;}	
+	.quote .tabs li {height:50px;}
 
 	.stit {margin-bottom: 10px;}
 	.stit h3 {font-size:22px;}
 
 	.golf .quote .tabs li {width:calc(50% - 8px);}
-	
+
 	.filter-label {font-size:12px;}
 	.inquiry .price input {width: 80%;}
 	.inquiry .personal {margin-bottom: 40px;}
@@ -3452,14 +3448,14 @@ h2{
 	.captcha_wrap > div > div > div {width:100%;}
 	.captcha {background:#f6f6f6;}
 	.captcha img {height:80px;}
-	#captcha, 
+	#captcha,
 	.inquiry .reload {width:100%; margin:5px 0;}
 	.inquiry .reload {max-width:100%; height:50px}
 
 	.card_list {margin:0;}
 	.card_list li {width:100%; padding:6px 0;}
 	.inquiry_list .card_list h4 {font-size:18px;}
-	.inquiry_list .status, 
+	.inquiry_list .status,
 	.inquiry_view .status {font-size:14px;}
 
 	.modal-footer .btn {height:50px;}
@@ -3475,7 +3471,7 @@ h2{
 
 	.policy {margin-bottom:80px;}
 	.privacy-part .scrollspy-content > div {flex-flow:column nowrap; align-items:flex-start!important;}
-	
+
 	.blog .container {padding-left:var(--side-space); padding-right:var(--side-space);}
 	.blog-card {margin-bottom:15px;}
 	.blog-meta {padding:10px;}
@@ -3488,7 +3484,7 @@ h2{
 
 	.blog-meta li {margin-right: 25px;}
 	.blog-content {padding: 15px 0 0px;}
-	.blog-details-meta li a, 
+	.blog-details-meta li a,
 	.blog-details-meta li span {font-size:14px;}
 	.blog-details-meta li i {margin-right:5px; font-size:13px;}
 	.blog-details-title {margin-bottom: 20px; font-size:18px;}
@@ -3503,12 +3499,12 @@ h2{
 	.blog_bottom .btn_wrap .btn {max-width: 100%; margin:0; margin-top:10px;}
 	.blog_bottom .btn_wrap .btn {width:100%;}
 	#post-list > .row > div {flex: 0 0 100%; max-width:100%; margin-bottom:20px;}
-	
+
 	#post-list {padding-top:20px;}
 	#post-list .col-md-4 {flex: 0 0 100%; max-width:100%;}
 
 	.movie .blog-desc {margin-bottom:6px; padding:10px 10px 0;}
-	
+
 	.comments .row {margin-left:15px; margin-right:15px;}
 	.comment_list .comment_cont {padding-left:0; font-size:16px;}
 	.comment_list .btn_wrap {padding-left:0;}
@@ -3518,7 +3514,7 @@ h2{
 	.comment_write {padding:10px;}
 
 	.comment_list .reply_write {margin-left:0;}
-	
+
 	.blog-standard .top-filter > div {margin:2px 0;}
 	.blog-standard .top-filter > div:last-child {margin-left:auto;}
 	.blog-standard .blog-meta li {margin:5px 0; margin-right:15px;}
@@ -3575,6 +3571,9 @@ h2{
 	.faq-que span,
 	.faq-ans span {top:15px; left:15px;}
 
+	.quote .tb_vertical thead tr {top: 112px;}
+
+
 	/*지워도 됨
 	.banner-section {padding-top:150px;}
 	.banner-section .content-box {margin: 0px 10px 50px 10px;}
@@ -3619,7 +3618,7 @@ h2{
 	.counter-style-two {padding-bottom:0!important;}
 
 	.service-block-three .inner-box {margin-bottom:10px;}
-	
+
 	.sub_wrap {padding-top: 140px;}
 	.sub_wrap .title {margin-top:0; padding-bottom: 20px;}
 	.sub_wrap .title h2 {font-size:32px;}
@@ -3638,13 +3637,13 @@ h2{
 	.shop_solution.reasons-section .sec-title h2 {padding-bottom:0;}
 	.shop_solution.reasons-section .single-item {margin-bottom:16px;}
 	*/
-	
+
 
 	.img_gallery .conts_wrap {flex-flow: column-reverse;}
 	.img_gallery .num {display:none;}
 	.img_gallery .img_box {max-width:100%; margin-left:0; margin-bottom:10px; }
 
-	
+
 
 	.elastic {padding-top:130px}
 	.elastic .vector-image .image-2 {width:95%;}
@@ -3664,7 +3663,7 @@ h2{
 	.banner-style-five .content-box h1 {font-size:30px;}
 	.banner-style-five .image-layer {background-position: right -26px;}
 	.erp.Slogan-section {margin-top:60px;}
-	
+
 	.main_slider_wrapper {padding-top:100px;}
 	.slider-area .carousel-inner .carousel-item .carousel-captions .content {padding:20px 0;}
 	.slider-area .carousel-inner .carousel-item .carousel-captions .content h2 {font-size:36px; line-height:1.3; letter-spacing: -1px; word-break:keep-all}
@@ -3688,7 +3687,7 @@ h2{
 	.newsletter_content_wrapper h5 {margin-top:20px; font-size:16px;}
 	.news_btn {margin-top:10px;}
 	.header_btn li:first-child a {margin-right:5px;}
-	
+
 
 
 
@@ -3807,7 +3806,7 @@ h2{
   .take-control .single-item .inner-box{
     padding: 0px !important;
     margin-bottom: 30px !important;
-  } 
+  }
 
   .domain-section .domain-name li{
     width: 50%;
@@ -3854,13 +3853,13 @@ h2{
     font-size: 36px;
     line-height: 45px;
   }
-	
+
   .sec-title h2{
     font-size: 30px !important;
     line-height: 40px !important;
   }
-	
-	
+
+
   .main-header.home-3 .menu-area .btn-box{
     display: none;
   }
@@ -3886,7 +3885,7 @@ h2{
     width: 212px;
     margin: 0px 0px 15px 0px;
   }
- 
+
   .menu-area .btn-box{
     display: none !important;
   }
@@ -4115,6 +4114,13 @@ h2{
 }
 
 @media only screen and (max-width: 399px){
+	.tb_vertical thead th,
+	.tb_vertical tbody td {font-size:13px!important;}
+	.tb_vertical tbody .btn {font-size:12px!important;}
+	.m_quote .tb_vertical thead th,
+	.m_quote .tb_vertical tbody td,
+	.m_quote .tb_vertical tbody tr:first-of-type td {padding:10px 5px;}
+
 	.main_info strong {font-size:42px;}
 
 	.banner-style-16 .content-box h1 {font-size: 36px;}
@@ -4195,7 +4201,7 @@ h2{
     padding: 10px 20px;
     margin-bottom: 15px;
   }
-  
+
   .banner-style-eight .content-box .btn-box{
     width: 200px;
   }

+ 22 - 10
pro/resources/css/style.css

@@ -423,6 +423,8 @@ img {
 	.quick_kbgolf  dl {display:flex; height:100%;}
 	.quick_kbgolf dt {display:flex; align-items:center; padding:10px 20px;}
 	.quick_kbgolf dd {display:flex; flex-direction:column; justify-content:center; padding:10px 20px; text-align:left;}
+    .quick_kbgolf .quick_tel strong{font-size: 16px;}
+
 }
 
 .sec-title{position: relative; display: block;}
@@ -2883,12 +2885,13 @@ tr {width:100%;}
 td,
 th {padding:18px;	word-break:break-all; font-weight:400; font-size:inherit; color:var(--black);}
 td {color:#424242; text-align:center;}
-.tb_vertical table{table-layout: fixed; border-collapse: collapse;}
-.tb_vertical thead tr {border-top:2px solid var(--black); border-bottom:1px solid var(--black);}
+.tb_vertical table{table-layout: fixed; border-collapse: separate; border-spacing: 0;}
+.tb_vertical thead tr {position:sticky; top:38px; background:#fff;}
 .tb_vertical tbody{overflow-y:auto;}
-.tb_vertical tbody th {padding:18px; }
+.tb_vertical thead th {padding:18px;  border-top:2px solid var(--black); border-bottom:1px solid var(--black);}
 .tb_vertical tbody td {padding:18px; color:#424242;}
 .tb_vertical  td:first-child {width:100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
+.tb_vertical  caption {position:sticky; top:0; background:#fff;}
 /*
 .tb_vertical{overflow-x:auto; }
 .tb_vertical table{table-layout: fixed; border-collapse: collapse;}
@@ -3284,6 +3287,8 @@ td {color:#424242; text-align:center;}
 .m_quote .tabs li.active,
 .m_quote .tabs li:hover {background:var(--teal); color:#fff;}
 .m_quote .tabs li a {display:block; color:inherit;}
+/* .m_quote .tabs input[type=date] {margin-top:15px; padding-right: 3px; width: 150px; text-align:center;} */
+.m_quote .tabs input {margin-top:15px; text-align:center; width: 150px;}
 .m_quote .tb_vertical {height:480px; overflow:auto; }
 .m_quote thead th {width:20%; }
 .m_quote tbody {height:376px;}
@@ -3306,6 +3311,7 @@ td {color:#424242; text-align:center;}
 .m_youtube .list li {width:33.33%; padding:15px;}
 .m_youtube .img_box {position:relative; width:100%; height:0; padding-top:56.25%; border-radius:20px; overflow:hidden;}
 .m_youtube .img_box iframe {position:absolute; top:0; left:0; width:100%; height:100%;}
+.m_youtube .img_box p  {position:absolute; top:0; left:0; display:flex; align-items:center; justify-content:center; width:100%; height:100%; background: rgba(0, 0, 0, 0.5);  color: #666;}
 .m_youtube .m_more {margin-top:70px; border:1px solid #ccc; color:#fff; background:var(--black);}
 .m_youtube .m_more:hover {background:#474747;}
 .m_youtube a {position:absolute; top:0; left:0; display:block; width:100%; height:100%; background:rgba(0, 0, 0, 0);  z-index:2}
@@ -3316,11 +3322,13 @@ td {color:#424242; text-align:center;}
 .m_blog .tit_main h2 {color:var(--black);}
 .m_blog .list {display:flex; flex-flow:row wrap;}
 .m_blog .list li {width:33.33%; padding:15px;}
-.m_blog .list a {display:block; height:100%;  padding:30px; border:1px solid #ddd; border-radius:20px;}
-.m_blog .list h4 {margin-bottom:20px; font-size:22px; color:var(--black); font-weight:400;}
+.m_blog .list a {display:flex; flex-direction:column;  height:100%; border:1px solid #ddd; border-radius:20px; overflow:hidden;}
+.m_blog .list .img_box {position:relative; width:100%; height:0;  padding-top:100%; margin-right:15px;}
+.m_blog .list .img_box img {position:absolute; top:0; left:0; width:100%; height:100%; object-fit:cover;}
+.m_blog .list .conts_box {width:calc(100% - 115px); padding:0; padding:10px 20px; margin:0;}
+.m_blog .list h4 {margin-bottom:8px; font-size:22px; color:var(--black); font-weight:400;}
 .m_blog .list p {font-size:16px; padding:0;}
-.m_blog .list h4.ellipsis_multi {-webkit-line-clamp:3;}
-.m_blog .list p.ellipsis_multi {-webkit-line-clamp:6;}
+.m_blog .list .date {margin-top:3px; font-size:14px; color:#7cb5a6;}
 .m_blog .m_more,
 .m_quote .m_more {margin-top:40px; background:#ddd;}
 .m_blog .m_more:hover {background:#ccc;}
@@ -3364,12 +3372,17 @@ label.check_box:last-of-type {margin-right:0;}
 
 /*시세*/
 .quote {padding:80px 20px;}
+.quote > .container .tabs:nth-child(2) {margin-bottom:0;}
 .quote .tabs {display:flex; justify-content:center; margin-bottom:18px; border-bottom:none;}
 .quote .tabs li {display:flex; align-items:center; justify-content:center; min-width:14%; height:60px; margin:8px; padding:10px; background:#fff; border-radius:50px; border:1px solid var(--teal);  color:var(--teal); font-weight:700; cursor:pointer;}
 .quote .tabs li.active,
 .quote .tabs li:hover {background:var(--teal); color:#fff;}
+.quote .tabs li:hover {background:var(--teal); color:#fff;}
 .quote .tabs li a {display:block; color:inherit;}
-.quote thead th {width:20%; }
+.quote .tabs input:hover {background:var(--teal); color:#fff;}
+.quote .tabs input{margin-top:15px; text-align:center; width: 150px;}
+.quote caption {position:sticky; top:95px; padding-top:18px; background:#fff;}
+.quote thead tr {position:sticky; top:145px; width:20%;  background:#fff;}
 .quote tbody td {width:20.3%; padding:15px 18px;}
 .quote tbody tr:first-of-type td {padding-top:35px;}
 .quote tbody .btn {display:flex; align-items:center; justify-content:center; width:100%; max-width:100px; height:40px; margin:0 auto; border:1px solid #ddd; background:#fff; font-size:16px;}
@@ -4268,12 +4281,11 @@ label.check_box:last-of-type {margin-right:0;}
 
 .faq-que span {position:absolute; top:22px; left:25px; display:inline-block; margin-right:10px; width:30px; height:30px; line-height:30px; text-align:center; border-radius:50%; background:var(--primary); color:var(--white);}
 
-.faq-ans p {position:relative;
+.faq-ans > div {position:relative;
   line-height: 26px;
   padding: 20px 25px; padding-left:70px;
   border-top: 1px solid var(--border);
 }
-
 .faq-ans span {position:absolute; top:22px; left:25px; display:inline-block; margin-right:10px; width:30px; height:30px; line-height:30px; text-align:center; border-radius:50%; background:#b8d4cd; color:var(--white);}
 
 /*지워도 됨

+ 1 - 1
pro/resources/js/jquery-ui.js

@@ -16156,4 +16156,4 @@ var effectTransfer = $.effects.effect.transfer = function( o, done ) {
 
 
 
-}));
+}));

+ 114 - 0
pro/resources/js/jquery.cookie.js

@@ -0,0 +1,114 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2006, 2014 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+	if (typeof define === 'function' && define.amd) {
+		// AMD (Register as an anonymous module)
+		define(['jquery'], factory);
+	} else if (typeof exports === 'object') {
+		// Node/CommonJS
+		module.exports = factory(require('jquery'));
+	} else {
+		// Browser globals
+		factory(jQuery);
+	}
+}(function ($) {
+
+	var pluses = /\+/g;
+
+	function encode(s) {
+		return config.raw ? s : encodeURIComponent(s);
+	}
+
+	function decode(s) {
+		return config.raw ? s : decodeURIComponent(s);
+	}
+
+	function stringifyCookieValue(value) {
+		return encode(config.json ? JSON.stringify(value) : String(value));
+	}
+
+	function parseCookieValue(s) {
+		if (s.indexOf('"') === 0) {
+			// This is a quoted cookie as according to RFC2068, unescape...
+			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+		}
+
+		try {
+			// Replace server-side written pluses with spaces.
+			// If we can't decode the cookie, ignore it, it's unusable.
+			// If we can't parse the cookie, ignore it, it's unusable.
+			s = decodeURIComponent(s.replace(pluses, ' '));
+			return config.json ? JSON.parse(s) : s;
+		} catch(e) {}
+	}
+
+	function read(s, converter) {
+		var value = config.raw ? s : parseCookieValue(s);
+		return $.isFunction(converter) ? converter(value) : value;
+	}
+
+	var config = $.cookie = function (key, value, options) {
+
+		// Write
+
+		if (arguments.length > 1 && !$.isFunction(value)) {
+			options = $.extend({}, config.defaults, options);
+
+			if (typeof options.expires === 'number') {
+				var days = options.expires, t = options.expires = new Date();
+				t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
+			}
+
+			return (document.cookie = [
+				encode(key), '=', stringifyCookieValue(value),
+				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+				options.path    ? '; path=' + options.path : '',
+				options.domain  ? '; domain=' + options.domain : '',
+				options.secure  ? '; secure' : ''
+			].join(''));
+		}
+
+		// Read
+
+		var result = key ? undefined : {},
+			// To prevent the for loop in the first place assign an empty array
+			// in case there are no cookies at all. Also prevents odd result when
+			// calling $.cookie().
+			cookies = document.cookie ? document.cookie.split('; ') : [],
+			i = 0,
+			l = cookies.length;
+
+		for (; i < l; i++) {
+			var parts = cookies[i].split('='),
+				name = decode(parts.shift()),
+				cookie = parts.join('=');
+
+			if (key === name) {
+				// If second argument (value) is a function it's a converter...
+				result = read(cookie, value);
+				break;
+			}
+
+			// Prevent storing a cookie that we couldn't decode.
+			if (!key && (cookie = read(cookie)) !== undefined) {
+				result[name] = cookie;
+			}
+		}
+
+		return result;
+	};
+
+	config.defaults = {};
+
+	$.removeCookie = function (key, options) {
+		// Must not alter options, thus extending a fresh object...
+		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
+		return !$.cookie(key);
+	};
+
+}));

+ 184 - 0
pro/resources/views/bbs/details.blade.php

@@ -0,0 +1,184 @@
+@extends('views.layouts.master')
+@section('content')
+
+<div class="sub_wrap blog blog_details">
+
+	<div class="blog-details-part">
+        <div class="container">
+            <div class="row justify-content-center">
+                <div class="col-lg-12 col-xl-10">
+                    <div class="blog-details">
+                        @switch($postType['C5'])
+                            @case('image')
+                            @case('gallery')
+                                <div class="blog-details-thumb">
+                                    <img src="{{ msset($post['C1']) }}" alt="blog">
+                                </div>
+                                @break
+                            @case('movie')
+                                <div class="movie-details-thumb">
+                                    <iframe  src="{{ $post['T1'] }}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+                                </div>
+                                @break
+                        @endswitch
+
+						<div class="blog-details-content">
+							<ul class="blog-details-meta">
+								<li>
+                                    <i class="fa-regular fa-calendar-days"></i>
+                                    <span>{{ $post['C7'] }}</span>
+                                </li>
+                                <li>
+                                    <i class="fa-solid fa-user"></i>
+									<span>{{ $post['C11'] }}</span>
+                                </li>
+                            </ul>
+							<h2 class="blog-details-title">{!! $post['C5'] !!}</h2>
+							<div class="blog_cont_wrap">
+                                {!! $post['C6'] !!}
+                            </div>
+                        </div>
+
+                        <div class="blog_bottom">
+							<div class="blog-details-navigate">
+                                @if ($prePost)
+                                    <div class="blog-details-prev">
+                                        <a class="nav-arrow" href="{{ route('dbrbbs.details', [$postCode, $prePost[0]['C3']]) }}"><i class="fa-solid fa-arrow-left"></i>이전</a>
+                                    </div>
+                                @endif
+
+                                @if ($nextPost)
+                                    <div class="blog-details-next">
+                                        <a class="nav-arrow" href="{{ route('dbrbbs.details', [$postCode, $nextPost[0]['C3']]) }}">다음<i class="fa-solid fa-arrow-right"></i></a>
+                                    </div>
+                                @endif
+							</div>
+							<div class="btn_wrap">
+								<button type="button" class="btn btn_basic" onclick="location.href='{{ route('dbrbbs.list', $postCode) }}'">목록</button>
+							</div>
+						</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+	</div>
+
+	<!-- 댓글 -->
+    <div class="comments">
+		<div class="row">
+			<div class="col-lg-12 col-xl-10">
+	            <div class="comment_write">
+	                <h3>댓글쓰기</h3>
+					<form class="form-prevent-multiple-submits" action="{{ route('dbrbbs.comment.store') }}" method="POST">
+                        @csrf
+                        <input type="hidden" name="post_id" value="{{ $post['Id'] }}">
+						<textarea placeholder="댓글을 입력해 주세요." name="bd_contents" required></textarea>
+						<button type="submit" class="button-prevent-multiple-submits btn btn_basic btn_mid">
+                            <i class="spinner fa fa-spinner fa-spin"></i>
+                            댓글쓰기
+                        </button>
+					</form>
+                </div>
+
+                <div class="comment_list">
+                    <ul>
+                    @forelse($comments ?? [] as $index => $comment)
+				        <li>
+                            <div class="info">
+								<span class="img_box">
+									<img src="/themes/pro/dasol/resources/images/pic4.jpg">
+								</span>
+                                <span class="name">{{ $comment['C4'] }}</span>
+                                <span class="time">{{ DataConverter::execute($comment['C1'], 'diffForHumans') }}</span>
+                                <span class="btn_report"><i class="fa-solid fa-triangle-exclamation"></i> 신고</span>
+                            </div>
+                            <div class="comment_cont">
+                                {{ $comment['C3'] }}
+                            </div>
+                            <div class="btn_wrap">
+                                <button type="button" class="btn btn_outline" data-toggle="collapse" data-target="#reply_comment_{{ $comment['Id'] }}" aria-expanded="false" aria-controls="reply_comment">답글</button>
+                                <span class="btn_good">
+									<button type="button" class="btn"><i class="far fa-thumbs-up"></i></button>000
+								</span>
+                                <span class="btn_bad">
+									<button type="button" class="btn"><i class="far fa-thumbs-down"></i></button>000
+								</span>
+                            </div>
+                            <div class="collapse reply_write" id="reply_comment_{{ $comment['Id'] }}">
+                                <form class="form-prevent-multiple-submits" action="{{ route('dbrbbs.comment.store') }}" method="POST">
+                                    @csrf
+                                    <input type="hidden" name="post_id" value="{{ $post['Id'] }}">
+                                    <input type="hidden" name="parent_id" value="{{ $comment['Id'] }}">
+                                    <textarea placeholder="답글을 입력해 주세요." name="bd_contents" required></textarea>
+                                    <button type="submit" class="button-prevent-multiple-submits btn btn_basic btn_mid">
+                                        <i class="spinner fa fa-spinner fa-spin"></i>
+                                        답글쓰기
+                                    </button>
+                                </form>
+                            </div>
+
+								<!-- 댓글의 댓글 -->
+                                <div class="reply_wrap">
+                                    <div class="comment_list">
+                                        <ul>
+                                        @forelse($comment['ReplyPage'] ?? [] as $reply)
+                                            <!--1줄 -->
+                                            <li>
+                                                <div class="info">
+													<span class="img_box">
+														<img src="/themes/pro/dasol/resources/images/pic4.jpg">
+													</span>
+                                                    <span class="name">{{ $reply['C4'] }}</span>
+                                                    <span class="time">{{ DataConverter::execute($reply['C1'], 'diffForHumans') }}</span>
+                                                    <span class="btn_report"><i class="fa-solid fa-triangle-exclamation"></i> 신고</span>
+                                                </div>
+                                                <div class="comment_cont">
+                                                    {{ $reply['C3'] }}
+                                                </div>
+                                                <div class="btn_wrap">
+													<button type="button" class="btn btn_outline" data-toggle="collapse" data-target="#reply_comment1" aria-expanded="false" aria-controls="reply_comment1">답글</button>
+													<span class="btn_good">
+														<button type="button" class="btn"><i class="far fa-thumbs-up"></i></button>000
+													</span>
+													<span class="btn_bad">
+														<button type="button" class="btn"><i class="far fa-thumbs-down"></i></button>000
+													</span>
+												</div>
+												<div class="collapse reply_write" id="reply_comment1">
+													<div>
+														<textarea placeholder="답글을 입력해 주세요."></textarea>
+														<button type="button" class="btn btn_basic btn_mid">답글쓰기</button>
+													</div>
+												</div>
+                                            </li>
+                                        @empty
+                                        @endforelse
+                                        </ul>
+                                    </div>
+								</div>
+								<!--// 댓글의 댓글 끝 -->
+                        </li>
+                    @empty
+                    @endforelse
+                    </ul>
+                </div>
+
+            @if ($comments->hasPages())
+                <!-- 페이지네이션 -->
+                <div class="comment_btm">
+					<div class="col-lg-12">
+                        <div class="bottom-paginate">
+                            {{ $comments->appends(['limit' => request('limit')])->links() }}
+                        </div>
+					</div>
+				</div>
+                <!-- 페이지네이션 끝 -->
+            @endif
+            </div>
+        </div>
+	</div>
+    <!--// 댓글 끝 -->
+
+</div>
+
+@endsection

+ 85 - 0
pro/resources/views/bbs/gallery.blade.php

@@ -0,0 +1,85 @@
+<div class="row">
+    @forelse($postPage['Page'] ?? [] as $post)
+        @php
+            if($post){
+                if(strpos($postType['C3'], 'youtube') !== false){
+                    $url = $post['T1'];
+                    $parts = explode('embed/', $url);
+                    if(count($parts) == 2) {
+                    $href = $parts[0].'watch?v='.$parts[1];
+                    }
+                }else{
+                    $href = $post['T1'];
+                }
+            }
+        @endphp
+        <div class="{{ $post['PcGalleryClass'] }} {{ $post['MoGalleryClass'] }}">
+            <div class="blog-card">
+                <div class="blog-media">
+                    @if ($postType['C5'] === 'gallery')
+                        <a class="blog-img" href="{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}" onclick="openInNewWindow(event, '{{ $href }}')">
+                            {{--                                        <div class="mask"><i class="fa-solid fa-caret-right"></i></div>--}}
+                            <img :width="this.galleryWidth" :height="this.galleryHeight" src="{{ msset($post['C1']) }}" alt="blog">
+                        </a>
+                    @else
+                        <a class="video-img" href="{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}" onclick="openInNewWindow(event, '{{ $href }}')">
+                            <iframe class="w-100" :width="this.galleryWidth" :height="this.galleryHeight" src="{{ $post['T1'] }}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+                        </a>
+                    @endif
+                </div>
+                <div class="blog-content">
+                    <ul class="blog-meta">
+                        <li>
+                            <i class="fas fa-user"></i>
+                            <span>{{ $post['C9'] }}</span>
+                        </li>
+                        <li>
+                            <i class="fas fa-calendar-alt"></i>
+                            <span>{{ $post['C4'] }}</span>
+                        </li>
+                    </ul>
+                    <h4 class="blog-title">
+                        <a href="{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}" onclick="openInNewWindow(event, '{{ $href }}')">{!! $post['Title'] !!}</a>
+                    </h4>
+                    @if ($postType['C5'] === 'gallery')
+                        <p class="blog-desc">
+                            {{ $post['C7'] }}
+                        </p>
+                    @else
+                        @php
+                            if (isset($post['T1']) && strpos($post['T1'], 'embed') !== false) {
+                                $parts = explode('embed/', $post['T1']);
+
+                                if(count($parts) == 2) {
+                                    $post['T1'] = $parts[0].'watch?v='.$parts[1];
+                                }
+                            }
+                        @endphp
+                        <div class="d-flex align-items-center">
+                            <button class="btn-primary w-100"
+                                    onclick="window.location.href = '{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}'"
+                                    style="margin-right: 10px;">
+                                동영상 보기
+                            </button>
+                            <button class="btn-danger w-100"
+                                    onclick="window.open('{{ $post['T1'] }}', '_blank')">
+                                유튜브 보기
+                            </button>
+                        </div>
+                    @endif
+                </div>
+            </div>
+        </div>
+    @empty
+        <div class="pricing_box1 full_width">
+            데이터가 존재하지 않습니다
+        </div>
+    @endforelse
+</div>
+
+<script>
+    function openInNewWindow(event, href) {
+        event.preventDefault();
+        window.open(href, '_blank');
+    }
+</script>

+ 37 - 0
pro/resources/views/bbs/img.blade.php

@@ -0,0 +1,37 @@
+<div class="row">
+    <div class="col12 img_gallery">
+        <ul class="row">
+            @forelse($postPage['Page'] ?? [] as $i => $post)
+                <li class="w-100 {{ $post['PcGalleryClass'] }} {{ $post['MoGalleryClass'] }}">
+                    <div class="num">{{ $i + 1 }}</div>
+                    <div class="w-100">
+                        <div class="conts_wrap d-flex justify-content-between">
+                            <div class="conts_box">
+                                <a href="{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}" class="blog-title">
+                                    {{ $post['Title'] }}
+                                </a>
+                                <ul class="info">
+                                    <li>{{ $post['C9'] }}</li>
+                                    <li>{{ $post['C4'] }}</li>
+                                </ul>
+                                <div class="blog-desc" style="cursor: pointer;" onclick="location.href = '{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}'">
+                                    {{ $post['C7'] }}
+                                </div>
+                            </div>
+                            <div class="img_box">
+                                <a href="{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}">
+                                    <img src="{{ msset($post['C1']) }}" :width="this.galleryWidth" :height="this.galleryHeight"
+                                         class="w-md-50" alt="blog">
+                                </a>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            @empty
+                <li class="pricing_box1 full_width">
+                    데이터가 존재하지 않습니다
+                </li>
+            @endforelse
+        </ul>
+    </div>
+</div>

+ 118 - 0
pro/resources/views/bbs/list.blade.php

@@ -0,0 +1,118 @@
+@extends('views.layouts.master')
+@section('content')
+
+    <div class="sub_wrap blog movie">
+
+        <div class="title">
+            <h2>{{ $postType['C7'] }}</h2>
+        </div>
+
+        <div class="blog-grid">
+            <div class="container">
+                <!-- 탑 필터 -->
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="top-filter">
+                            <form class="filter-show" method="GET">
+                                <input type="hidden" name="page" value="1">
+                                <!--<label class="filter-label">Show :</label>-->
+                                <select class="form-select filter-select" name="limit" onchange="$(this).closest('form').submit()">
+                                    @foreach([12, 24, 36] as $limit)
+                                        <option value="{{ $limit }}" {{ request('limit') == $limit ? 'selected' : '' }}>{{ $limit }}</option>
+                                    @endforeach
+                                </select>
+                            </form>
+                            <div class="blog_search">
+                                <form class="blog-widget-form" method="GET">
+                                    <input type="hidden" name="page" value="1">
+                                    @if(strpos($postType['C3'], 'youtube') !== false)
+                                        <input type="text" placeholder="유튜브 검색" name="p">
+                                    @else
+                                        <input type="text" placeholder="블로그 검색" name="p">
+                                    @endif
+                                    <button class="icofont-search-1"><i class="fa-solid fa-magnifying-glass"></i></button>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <!--// 탑 필터 끝 -->
+
+                <div id="post-list">
+                    <!-- 리스트 -->
+                    @switch($postType['C5'])
+                        @case('text')
+                        @include('views.bbs.text')
+                        @break
+                        @case('image')
+                        @include('views.bbs.img')
+                        @break
+                        @case('gallery')
+                        @case('movie')
+                        @include('views.bbs.gallery')
+                        @break
+                    @endswitch
+                    <!--// 리스트 끝 -->
+                </div>
+
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="bottom-paginate">
+                            <p class="page-info"></p>
+                            {{ $postPage['Page']->appends(['limit' => request('limit')])->links() }}
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!--// containr 끝 -->
+        </div>
+        <!--// blog-grid 끝 -->
+
+    </div>
+
+@endsection
+
+@push('js')
+    <script>
+        var vm = new Vue({
+            el: '#post-list',
+
+            data: function () {
+                return {
+                    design: @json($design),
+                    galleryWidth: 0,
+                    galleryHeight: 0,
+                };
+            },
+
+            computed: {
+            },
+
+            mounted() {
+                this.onResize()
+            },
+
+            created() {
+                window.addEventListener('resize', this.onResize)
+            },
+
+            beforeDestroy() {
+                window.removeEventListener('resize', this.onResize)
+            },
+
+            methods: {
+                onResize() {
+                    // Mobile
+                    if (window.innerWidth <= 768) {
+                        this.galleryWidth = this.design['MoGalleryWidth']
+                        this.galleryHeight = this.design['MoGalleryHeight']
+                    } else {
+                        this.galleryWidth = this.design['PcGalleryWidth']
+                        this.galleryHeight = this.design['PcGalleryHeight']
+                    }
+                }
+            },
+
+        });
+    </script>
+@endpush

+ 50 - 0
pro/resources/views/bbs/text.blade.php

@@ -0,0 +1,50 @@
+<div class="row">
+    <div class="col12 txt_gallery">
+        <!-- 리스트 헤드 -->
+        <ul class="list_top">
+            <li>
+                <div class="list_colgroup">
+                    <div class="num"></div>
+                    <div class="subject">제목</div>
+                    <div class="name">닉네임</div>
+                    <div class="date">등록일</div>
+                    <div class="hit">조회</div>
+                </div>
+            </li>
+        </ul>
+
+        <!-- 리스트 -->
+        <ul class="list_cont">
+            <li>
+                <div class="list_colgroup">
+                    <div class="num li_notice"><span class="tag tag_notice">공지</span></div>
+                    <div class="subject"><a href="#">블로그 이용 규칙</a></div>
+                    <div class="name">admin</div>
+                    <div class="date">2003.06.23</div>
+                    <div class="hit">1000</div>
+                </div>
+            </li>
+            @forelse($postPage['Page'] ?? [] as $post)
+                <li>
+                    <div class="list_colgroup">
+                        <div class="num">1</div>
+                        <div class="subject">
+                            <a href="{{ route('dbrbbs.details', [$postCode, $post['C10']]) }}">
+                                <div class="txt_box">
+                                    {{ $post['Title'] }}
+                                </div>
+                            </a>
+                        </div>
+                        <div class="name">{{ $post['C9'] }}</div>
+                        <div class="date">{{ $post['C4'] }}</div>
+                        <div class="hit">0000</div>
+                    </div>
+                </li>
+            @empty
+                <div class="pricing_box1 full_width">
+                    데이터가 존재하지 않습니다
+                </div>
+            @endforelse
+        </ul>
+    </div>
+</div>

+ 1 - 1
pro/resources/views/etc/paq.blade.php

@@ -43,7 +43,7 @@
 								<button><span>Q</span>{{ $qna['C6'] }}</button>
 							</div>
 							<div class="faq-ans">
-								<p><span>A</span>{{ $qna['C7'] }}</p>
+								<div><span>A</span>{!! $qna['C11'] !!}</div>
 							</div>
 						</div>
 					@empty

+ 382 - 151
pro/resources/views/index.blade.php

@@ -1,7 +1,14 @@
 @extends('views.layouts.master')
+<!-- Flatpickr CSS -->
+
 <link rel="stylesheet" href="{{ asset('/themes/kbgolf/pro/resources/js/swiper/swiper-bundle.min.css') }}"/>
 <script src="{{ asset('/themes/kbgolf/pro/resources/js/swiper/swiper-bundle.min.js') }}"></script>
 
+
+<!-- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
+<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
+<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
+<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/moment/min/moment.min.js"></script> -->
 @section('content')
 <!-- page-title -->
 
@@ -9,6 +16,9 @@
     {!! $seoHtml !!}
 @endpush
 
+<!-- popup  -->
+<div id="dabory-banner"></div>
+
 <!-- main slice -->
 <!-- main visual 시작 -->
 <div class="main_visual">
@@ -52,6 +62,11 @@
 			<li><a data-toggle="tab" href="#" data-sise="condo" onclick="changeSiseList(this)">콘도 시세</a></li>
 			<li><a data-toggle="tab" href="#" data-sise="fitness" onclick="changeSiseList(this)">휘트니스 시세</a></li>
 		</ul>
+        @php date_default_timezone_set('Asia/Seoul'); $today = date('Y-m-d'); @endphp
+        <div class="tabs">
+            <input type="text" id="search_date" readonly>
+        </div>
+
 		<div class="tab-content">
 			<div id="golf" class="tab-pane fade in active show">
 				<div class="tb_res tb_vertical">
@@ -86,19 +101,36 @@
 			<h2>YOUTUBE</h2>
 		</div>
 		<ul class="list">
-            @forelse($mainYoutubeList['Page'] ?? [] as $mainYoutube)
-                <li>
-                    <div class="img_box">
-                        <a href="{{ $mainYoutube['Pt1'] }}" target="_blak"></a>
-                        <iframe src="{{ $mainYoutube['Pt1'] }}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
-                    </div>
-                </li>
-            @empty
-                <li>
-                    <div class="img_box">데이터가 존재하지 않습니다.</div>
-                </li>
-            @endforelse
-		</ul>
+        @for ($i = 0; $i < 3; $i++)
+                @foreach (['golf', 'condo', 'fitness'] as $type)
+                    @if(isset($youtubeTypes['Page'][$type][$i]))
+                        @php
+                            $mainYoutube = $youtubeTypes['Page'][$type][$i];
+                            $href = '';
+                            if($mainYoutube){
+                                $src = $mainYoutube['Pt1'];
+                                $parts = explode('embed/', $src);
+                                if(count($parts) == 2) {
+                                    $href = $parts[0].'watch?v='.$parts[1];
+                                }
+                            }
+                        @endphp
+                        <li data-category="{{ $type }}">
+                            <div class="img_box">
+                                <a href="{{ $href }}" target="_blank"></a>
+                                <iframe src="{{ $mainYoutube['Pt1'] }}" title="YouTube video player" frameborder="0"
+                                    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
+                                    referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
+                            </div>
+                        </li>
+                    @else
+                        <li>
+                            <div class="img_box">{{ $type }}유튜브</div>
+                        </li>
+                    @endif
+                @endforeach
+            @endfor
+        </ul>
 		<div class="btn_wrap">
 			<button type="button" class="btn m_more" onclick="loadMoreYoutube()">더보기</button>
 		</div>
@@ -114,16 +146,35 @@
 			<h2>BLOG</h2>
 		</div>
 		<ul class="list">
-            @forelse($mainBlogList['Page'] ?? [] as $mainBlog)
-                <li>
-                    <a href="{{ route('dbrbbs.details', [$mainBlog['PostCode'], $mainBlog['PostSlug']]) }}">
-                        <h4 class="ellipsis_multi">{{ $mainBlog['PostTitle'] }}</h4>
-                        <p class="ellipsis_multi">{!! strip_tags(mb_strimwidth($mainBlog['PostContents'], 0, 1500, '...')) !!}</p>
-                    </a>
-                </li>
-            @empty
-                <li>데이터가 존재하지 않습니다.</li>
-            @endforelse
+            @for ($i = 0; $i < 3; $i++)
+                @foreach (['golf', 'condo', 'fitness'] as $type)
+                    @if(isset($blogTypes['Page'][$type][$i]))
+                        @php
+                            $mainBlog = $blogTypes['Page'][$type][$i];
+                            $href = $mainBlog['Pt1'];
+                            $date = DateTime::createFromFormat('Ymd', $mainBlog['OfficialDate']);
+                            $formattedDate = $date->format('Y.m.d');
+                        @endphp
+                        <li data-category="{{ $type }}">
+                            <!-- <a href="{{ route('dbrbbs.details', [$mainBlog['PostCode'], $mainBlog['PostSlug']]) }}"> -->
+                            <a href="{{ $href }}" target="_blank">
+                                <div class="img_box">
+									<img src="{{ asset($mainBlog['TurboThumb']) }}"class="w-md-50" alt="blog">
+								</div>
+                                <div class="conts_box">
+									<!-- <h4 class="ellipsis">{!! strip_tags(mb_strimwidth($mainBlog['PostTitle'], 0, 25, '...')) !!}</h4>
+									<p class="ellipsis_multi desc">{!! strip_tags(mb_strimwidth($mainBlog['PostContents'], 0, 550, '...')) !!}</p> -->
+									<p class="date">{{ $formattedDate }}</p>
+								</div>
+                            </a>
+                        </li>
+                    @else
+                        <li>
+                            <div class="img_box" style="display:none">데이터가 존재하지 않습니다.</div>
+                        </li>
+                    @endif
+                @endforeach
+            @endfor
 		</ul>
 		<div class="btn_wrap">
 			<button type="button" class="btn m_more blog" onclick="loadMoreBlog()">더보기</button>
@@ -132,11 +183,96 @@
 </div>
 <!--// 블로그 끝 -->
 
+@push('js')
+<script src="/dabory/js/widget.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
+<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/ko.js"></script>
+<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css" />
 <script>
 currentSiseType = 'golf';
 $(document).ready(function() {
-    // console.log('mainYoutubeList : ',mainYoutubeList);
-    // 필터링된 리스트를 렌더링하는 함수 호출
+    $('#search_date').flatpickr({
+        dateFormat: 'Y-m-d', // 날짜 및 시간 형식 설정 (예: 2023-09-12 15:30)
+		defaultDate: 'today',    // 초기 날짜 설정 (현재 날짜와 시간)
+		locale: 'ko',            // 한국어로 지역화
+        disableMobile: true,
+
+		// onOpen: function(selectedDates, dateStr, instance) {
+		// 	console.log('test');
+		// },
+		// onClose: function(selectedDates, dateStr, instance) {
+		// 	// 위젯이 닫힐 때 실행할 코드
+		// },
+		// onChange: function(selectedDates, dateStr, instance) {
+		// 	console.log('change');
+		// },
+	});
+
+
+    @if (session()->get('ConnectionDevice'))
+        const connectionDevice = "{{ session()->get('ConnectionDevice') }}";
+    @endif
+
+    $.fn.widget.loadModule(function () {
+        const bannerWidth = (connectionDevice === 'mobile') ? 300 : 500;
+        $('#dabory-banner').bannerPopup({
+            width: bannerWidth,
+            hide: false,
+            connectionDevice : connectionDevice
+        })
+        $('#dabory-banner').find('.dabory-bannermanager').show()
+    })
+
+    const cook = $.cookie('multi-popup');
+        if (cook  === 'ok') {
+            $('.main_notice_pop').hide()
+        }
+        else {
+            $('.main_notice_pop').show()
+        }
+
+        // 닫기버튼 클릭 이벤트
+        $('.pop_cls').click(function () {
+            $(this).parent('.main_notice_pop').fadeOut();
+
+            // 오늘하루 보지않기 체크 확인
+            if ($("input:checkbox[name=today_close1]").is(":checked") == true) {
+                $.cookie('multi-popup', 'ok', { expires: 1, path: '/' });
+            }
+
+            // name으로 해당 팝업창 닫기
+            $(this).parent("div[name=" + 'popup1' + "]").fadeOut();
+        })
+
+    function adjustListForMobile() {
+        if (connectionDevice == 'mobile') { // mobile
+            if($('.m_youtube .list li')){
+                showLimitedItemsForCategory('golf', 1, $('.m_youtube .list li[data-category="golf"]'));
+                showLimitedItemsForCategory('condo', 1, $('.m_youtube .list li[data-category="condo"]'));
+                showLimitedItemsForCategory('fitness', 1, $('.m_youtube .list li[data-category="fitness"]'));
+            }
+            if($('.m_blog .list li')){
+                showLimitedItemsForCategory('golf', 1, $('.m_blog .list li[data-category="golf"]'));
+                showLimitedItemsForCategory('condo', 1, $('.m_blog .list li[data-category="condo"]'));
+                showLimitedItemsForCategory('fitness', 1, $('.m_blog .list li[data-category="fitness"]'));
+            }
+            // $('.flatpickr-input').attr('type', 'text');
+        } else {
+            $('.list li').show(); // PC
+        }
+    }
+
+    function showLimitedItemsForCategory(category, limit, $items) {
+        $items.each(function(index) {
+            if (index >= limit) {
+                $(this).hide();
+            }
+        });
+    }
+
+    $(window).resize(adjustListForMobile);
+    adjustListForMobile();
+
     changeSiseListByDefault(currentSiseType);
 	$('.main-header').addClass('main_header');
 	$('.main-header .logo img').attr("src", "/themes/kbgolf/pro/resources/images/logo_wh.png");
@@ -150,9 +286,25 @@ function changeSiseList(e) {
     $(e).parent().addClass('active');
 
     currentSiseType = $(e).attr('data-sise');
-    var filteredSiseList = mainSiseList.filter(function(mainsise) {
-        return mainsise['Pc5'].includes(currentSiseType);
-    });
+
+    if(currentSiseType === 'golf'){
+        if(!mainSiseList || mainSiseList.length ===0){
+            var tbody = $('#sise-list');
+            tbody.html('<tr><td colspan="5">회원권이 존재하지 않습니다.</td></tr>');
+            return;
+        }else{
+            var filteredSiseList = mainSiseList.filter(function(mainsise) {
+                return mainsise['Pc5'].includes(currentSiseType);
+            });
+        }
+    }else{
+        if(!filteredSiseList || filteredSiseList.length === 0){
+            let date = document.getElementById('search_date').value;
+            var monday = formatDate(date);
+            // console.log('monday : ', monday);
+            findMondayData(monday);
+        }
+    }
 
     renderMainSiseList(filteredSiseList);
     // sise 더보기 버튼 list를 change할 때마다 활성화
@@ -160,6 +312,9 @@ function changeSiseList(e) {
 }
 // defalut 가져오기
 function changeSiseListByDefault(currentSiseType) {
+    if(!mainSiseList || mainSiseList.length ===0){
+        // console.log('no mainSise');
+    }
     var filteredSiseList = mainSiseList.filter(function(mainsise) {
         return mainsise['Pc5'].includes(currentSiseType);
     });
@@ -170,17 +325,28 @@ function changeSiseListByDefault(currentSiseType) {
 
 // tbody 생성
 function renderMainSiseList(siseList){
-    // console.log('siseList : ', siseList);
+    console.log(siseList);
     var tbody = $('#sise-list');
     fluctuationClass='';
     tbody.empty();
 
-    if(siseList.length === 0){
-        tbody.html('<tr><td colspan="5">데이터가 존재하지 않습니다.</td></tr>');
+    if(!siseList || siseList.length === 0){
+        tbody.html('<tr><td colspan="5">회원권이 존재하지 않습니다.</td></tr>');
         return;
     }
 
-    siseList.forEach(function(sise){
+    // Pc1:회원권 코드 중복값 체크
+    var uniquePc1Values = new Set();
+        var uniqueSiseList = [];
+
+    siseList.forEach(function(sise) {
+        if (!uniquePc1Values.has(sise['Pc1'])) {
+            uniquePc1Values.add(sise['Pc1']);
+            uniqueSiseList.push(sise);
+        }
+    });
+
+    uniqueSiseList.forEach(function(sise){
         if (sise['fluctuation'] > 0) {
             fluctuationClass = 'up';
             fluctuationIcon = 'fa-sort-up';
@@ -213,22 +379,25 @@ function renderMainSiseList(siseList){
         tbody.append(tr);
     })
 }
-    // 시세 더보기
-    function loadMoreSise(){
-        var offset = $('#sise-list tr').length;
-        var limit = 12;
+
+    function findMondayData(date){
+        siseType = currentSiseType;
+        var siseDate = dateFormat(date);
+        var offset = 0;
+        var limit = 30;
 
         $.ajax({
             url: '/load-more-sise',
             method: 'GET',
-            data: { offset: offset, limit: limit, siseType: currentSiseType },
+            data: { offset: offset, limit: limit, siseType: currentSiseType, siseDate:siseDate },
 
             success: function(response) {
+                console.log(response);
                 var siseList = response.Page;
                 if (siseList!=null) {
-                    appendMainSiseList(siseList);
+                    // appendMainSiseList(siseList);
+                    renderMainSiseList(siseList);
                 } else {
-                    alert('더이상 데이터가 없습니다.')
                     $('.m_quote .btn_wrap .m_more').hide();
                 }
             },
@@ -237,127 +406,167 @@ function renderMainSiseList(siseList){
             }
         });
     }
+    // 시세 더보기
+    function loadMoreSise(){
+        siseType = currentSiseType;
+        var url = '';
+        if (siseType === 'golf') {
+            url = '/sise/golf/all';
+        } else if (siseType === 'condo') {
+            url = '/sise/condo/all';
+        } else if (siseType === 'fitness') {
+            url = '/sise/fitness/all';
+        }
+
+        window.location.href = url;
+
+        // var offset = $('#sise-list tr').length;
+        // var limit = 12;
+
+        // $.ajax({
+        //     url: '/load-more-sise',
+        //     method: 'GET',
+        //     data: { offset: offset, limit: limit, siseType: currentSiseType },
+
+        //     success: function(response) {
+        //         var siseList = response.Page;
+        //         if (siseList!=null) {
+        //             appendMainSiseList(siseList);
+        //         } else {
+        //             alert('더이상 데이터가 없습니다.')
+        //             $('.m_quote .btn_wrap .m_more').hide();
+        //         }
+        //     },
+        //     error: function(error) {
+        //         console.error('Error loading more sise:', error);
+        //     }
+        // });
+    }
 
     // 유튜브 더보기
     function loadMoreYoutube(){
-        var offset = $('.m_youtube .list li').length;
-        var limit = 12;
-
-        $.ajax({
-            url: '/load-more-youtube',
-            method: 'GET',
-            data: { offset: offset, limit: limit},
-            success: function(response) {
-                var youtubeList = response.Page;
-                if (youtubeList!=null) {
-                    appendMainYoutubeList(youtubeList);
-                } else {
-                    alert('더이상 데이터가 없습니다.')
-                    $('.m_youtube .btn_wrap .m_more').hide();
-                }
-            },
-            error: function(error) {
-                console.error('Error loading more sise:', error);
-            }
-        });
+        var url = "/kb-bbs/list/golf-youtube";
+        window.location.href = url;
+        // var offset = $('.m_youtube .list li').length;
+        // var limit = 12;
+
+        // $.ajax({
+        //     url: '/load-more-youtube',
+        //     method: 'GET',
+        //     data: { offset: offset, limit: limit},
+        //     success: function(response) {
+        //         var youtubeList = response.Page;
+        //         if (youtubeList!=null) {
+        //             appendMainYoutubeList(youtubeList);
+        //         } else {
+        //             alert('더이상 데이터가 없습니다.')
+        //             $('.m_youtube .btn_wrap .m_more').hide();
+        //         }
+        //     },
+        //     error: function(error) {
+        //         console.error('Error loading more sise:', error);
+        //     }
+        // });
     }
 
     // 블로그 더보기
     function loadMoreBlog() {
-        var offset = $('.m_blog .list li').length;
-        var limit = 12;
-
-        $.ajax({
-            url: '/load-more-blog',
-            method: 'GET',
-            data: { offset: offset, limit: limit },
-            success: function(response) {
-                var blogList = response.Page;
-
-                if (blogList!=null) {
-                    appendMainBlogList(blogList);
-                } else {
-                    alert('더이상 데이터가 없습니다.');
-                    $('.m_blog .btn_wrap .m_more').hide();
-                }
-            },
-            error: function(error) {
-                console.error('Error loading more blogs:', error);
-            }
-        });
-    }
-
-    // sise 더보기 list add
-    function appendMainSiseList(siseList) {
-        var tbody = $('#sise-list');
-
-        siseList.forEach(function(sise) {
-            if (sise['fluctuation'] > 0) {
-                fluctuationClass = 'up';
-                fluctuationIcon = 'fa-sort-up';
-            } else if (sise['fluctuation'] < 0) {
-                fluctuationClass = 'down';
-                fluctuationIcon = 'fa-sort-down';
-            } else {
-                fluctuationClass = '';
-                fluctuationIcon = '';
-            }
-
-            var fluctuationText = sise['fluctuation'] !== 0 ?
-            `<i class="fa-solid ${fluctuationIcon}"></i> ${number_format(Math.abs(sise['fluctuation']))}`
-            : `${number_format(sise['fluctuation'])}`;
-
-            var tr = $('<tr>');
-            tr.html(`
-                <td scope="row" data-label="${sise['PostTitle']}">${sise['PostTitle']}</td>
-                <td data-label="${sise['Pc3']}">${number_format(sise['Pc3'])}</td>
-                <td data-label="${sise['Pc4']}">${number_format(sise['Pc4'])}</td>
-                <td data-label="등락" class="${fluctuationClass}">
-                    ${fluctuationText}
-                </td>
-                <td data-label="상담신청">
-                    <button type="button" class="btn consult-btn"
-                            data-post-title="${sise['PostTitle']}"
-                            data-pc5="${sise['Pc5']}"
-                            onclick="window.location.href = '/contactus-custom/${sise['Pc5']}/${encodeURIComponent(sise['PostTitle'])}'">상담신청
-                    </button>
-                </td>
-            `);
-            tbody.append(tr);
-        });
+        var url = "/kb-bbs/list/golf-blog";
+        window.location.href = url;
+        // var offset = $('.m_blog .list li').length;
+        // var limit = 12;
+
+        // $.ajax({
+        //     url: '/load-more-blog',
+        //     method: 'GET',
+        //     data: { offset: offset, limit: limit },
+        //     success: function(response) {
+        //         var blogList = response.Page;
+
+        //         if (blogList!=null) {
+        //             appendMainBlogList(blogList);
+        //         } else {
+        //             alert('더이상 데이터가 없습니다.');
+        //             $('.m_blog .btn_wrap .m_more').hide();
+        //         }
+        //     },
+        //     error: function(error) {
+        //         console.error('Error loading more blogs:', error);
+        //     }
+        // });
     }
 
-// youtube 더보기 list add
-function appendMainYoutubeList(youtubeList) {
-    var ul = $('.m_youtube .list');
-
-    youtubeList.forEach(function(youtube) {
-        var li = $('<li>');
-        li.html(`
-            <div class="img_box">
-                <a href="${youtube['Pt1']}" target="_blank"></a>
-                <iframe src="${youtube['Pt1']}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
-            </div>
-        `);
-        ul.append(li);
-    });
-}
-
-// blog 더보기 리스트 add
-function appendMainBlogList(blogList) {
-    var ul = $('.m_blog .list');
-
-    blogList.forEach(function(blog) {
-        var li = $('<li>');
-        li.html(`
-            <a href="/bbs/details/${blog['PostCode']}/${blog['PostSlug']}">
-                <h4 class="ellipsis_multi">${blog['PostTitle']}</h4>
-                <p class="ellipsis_multi">${stripTags(truncateText(blog['PostContents'], 1500))}</p>
-            </a>
-        `);
-        ul.append(li);
-    });
-}
+    // sise 더보기 list add (사용안함 x)
+    // function appendMainSiseList(siseList) {
+    //     var tbody = $('#sise-list');
+
+    //     siseList.forEach(function(sise) {
+    //         if (sise['fluctuation'] > 0) {
+    //             fluctuationClass = 'up';
+    //             fluctuationIcon = 'fa-sort-up';
+    //         } else if (sise['fluctuation'] < 0) {
+    //             fluctuationClass = 'down';
+    //             fluctuationIcon = 'fa-sort-down';
+    //         } else {
+    //             fluctuationClass = '';
+    //             fluctuationIcon = '';
+    //         }
+
+    //         var fluctuationText = sise['fluctuation'] !== 0 ?
+    //         `<i class="fa-solid ${fluctuationIcon}"></i> ${number_format(Math.abs(sise['fluctuation']))}`
+    //         : `${number_format(sise['fluctuation'])}`;
+
+    //         var tr = $('<tr>');
+    //         tr.html(`
+    //             <td scope="row" data-label="${sise['PostTitle']}">${sise['PostTitle']}</td>
+    //             <td data-label="${sise['Pc3']}">${number_format(sise['Pc3'])}</td>
+    //             <td data-label="${sise['Pc4']}">${number_format(sise['Pc4'])}</td>
+    //             <td data-label="등락" class="${fluctuationClass}">
+    //                 ${fluctuationText}
+    //             </td>
+    //             <td data-label="상담신청">
+    //                 <button type="button" class="btn consult-btn"
+    //                         data-post-title="${sise['PostTitle']}"
+    //                         data-pc5="${sise['Pc5']}"
+    //                         onclick="window.location.href = '/contactus-custom/${sise['Pc5']}/${encodeURIComponent(sise['PostTitle'])}'">상담신청
+    //                 </button>
+    //             </td>
+    //         `);
+    //         tbody.append(tr);
+    //     });
+    // }
+
+// youtube 더보기 list add (사용안함 x)
+// function appendMainYoutubeList(youtubeList) {
+//     var ul = $('.m_youtube .list');
+
+//     youtubeList.forEach(function(youtube) {
+//         var li = $('<li>');
+//         li.html(`
+//             <div class="img_box">
+//                 <a href="${youtube['Pt1']}" target="_blank"></a>
+//                 <iframe src="${youtube['Pt1']}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
+//             </div>
+//         `);
+//         ul.append(li);
+//     });
+// }
+
+// blog 더보기 리스트 add (사용안함 x)
+// function appendMainBlogList(blogList) {
+//     var ul = $('.m_blog .list');
+
+//     blogList.forEach(function(blog) {
+//         var li = $('<li>');
+//         li.html(`
+//             <a href="/bbs/details/${blog['PostCode']}/${blog['PostSlug']}">
+//                 <h4 class="ellipsis_multi">${blog['PostTitle']}</h4>
+//                 <p class="ellipsis_multi">${stripTags(truncateText(blog['PostContents'], 1500))}</p>
+//             </a>
+//         `);
+//         ul.append(li);
+//     });
+// }
 
 // 회원권명으로 상담신청
 function contactForMembership(){
@@ -384,6 +593,26 @@ var swiper = new Swiper(".main_visual .swiper", {
 function number_format(number) {
     return new Intl.NumberFormat().format(number);
 }
+
+function dateFormat(date) {
+    var formattedDate = '';
+    if (date) {
+        var parts = date.split('-');
+        formattedDate = parts.join('');
+    }
+    return formattedDate;
+}
+
+function formatDate(date) {
+    const selectedDate = new Date(date); // Date 객체로 변환
+    const dayOfWeek = selectedDate.getDay(); // (0: 일요일, 1: 월요일, ..., 6: 토요일)
+    const monday = new Date(selectedDate); // 해당 주의 월요일
+    monday.setDate(selectedDate.getDate() - (dayOfWeek === 0 ? 6 : dayOfWeek - 1));
+    const year = monday.getFullYear();
+    const month = String(monday.getMonth() + 1).padStart(2, '0');
+    const day = String(monday.getDate()).padStart(2, '0');
+    return `${year}-${month}-${day}`;
+}
 // HTML 태그 제거
 function stripTags(html) {
     return html.replace(/(<([^>]+)>)/gi, "");
@@ -398,7 +627,9 @@ function truncateText(text, maxLength, suffix = '...') {
 
 const mainSiseList = {!! json_encode($mainSiseList['Page']) !!};
 const mainYoutubeList = {!! json_encode($mainYoutubeList['Page']) !!};
+const youtubeTypes = {!! json_encode($youtubeTypes['Page']) !!};
 const mainBlogList = {!! json_encode($mainBlogList['Page']) !!};
 
 </script>
+@endpush
 @endsection

+ 1 - 1
pro/resources/views/layouts/footer.blade.php

@@ -70,4 +70,4 @@ $(document).ready(function() {
 		break
 	}
 });
-</script>
+</script>

+ 194 - 0
pro/resources/views/layouts/master.blade copy.php

@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <script src="{{ csset('/js/plugins/vue/vue@2.6.11.js') }}"></script>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="csrf-token" content="{{ csrf_token() }}">
+	<meta property="og:image" content="/public/themes/kbgolf/pro/resources/images/og_img.png">
+    <script src="https://t1.kakaocdn.net/kakao_js_sdk/2.1.0/kakao.min.js" integrity="sha384-dpu02ieKC6NUeKFoGMOKz6102CLEWi9+5RQjWSV0ikYSFFd8M3Wp2reIcquJOemx" crossorigin="anonymous"></script>
+    <script src="https://static.nid.naver.com/js/naveridlogin_js_sdk_2.0.1.js"></script>
+    <script src="{{ csset('/js/iziToast.js') }}"></script>
+    <script src="{{ csset('/js/components/screen-size.js') }}"></script>
+    <?php
+        // used for RESS
+        // if ( !Cookie::has('resolution') ) // doesn't work
+        if ( !isset( $_COOKIE['screenWidth'] ) || !isset( $_COOKIE['screenHeight']) )
+        {
+    ?>
+        <script>get_screen_size()</script>
+    <?php
+        }
+    ?>
+    @stack('meta')
+
+    @php $seoHtml = App\Helpers\Utils::getSeoHtml(); @endphp
+    @empty ($seoHtml)
+        <title>{{ env('APP_NAME') }}</title>
+        <link rel="icon" href="{{ msset(env('FAVICON_PATH')) }}" type="image/x-icon">
+    @else
+        {!! $seoHtml !!}
+    @endempty
+
+    <!-- Google Fonts -->
+    <link href="https://fonts.googleapis.com/css?family=Ubuntu:300,300i,400,400i,500,500i,700,700i&display=swap" rel="stylesheet">
+    <link href="{{ csset('/css/iziToast.css') }}" rel="stylesheet">
+    @php $basePath = '/themes/kbgolf/pro/resources'; @endphp
+
+    @include('views.partial.site.meta', [ 'basePath' => $basePath ])
+    @include('views.partial.site.scripts', [ 'basePath' => $basePath ])
+
+    @stack('css')
+
+</head>
+
+
+<!-- page wrapper -->
+<body class="boxed_wrapper">
+    @inject('callApiService', 'App\Services\CallApiService')
+
+    @php
+        $mainMenuPerm = App\Helpers\Utils::getProMainMenu();
+        $mainMenuPermPage = collect($mainMenuPerm['Page'])->filter(function ($menu) {
+            return $menu['Sort'] === 'primary';
+        })->toArray();
+         $topMenuPermPage = collect($mainMenuPerm['Page'])->filter(function ($menu) {
+            return $menu['Sort'] === 'top';
+        })->toArray();
+        $mainMenuList = App\Helpers\Utils::formatMenuList($mainMenuPermPage, 'MenuCode');
+        $topMenuList = App\Helpers\Utils::formatMenuList($topMenuPermPage, 'MenuCode');
+    @endphp
+
+    @include('layouts.js-lang')
+    @include('vendor.lara-izitoast.toast')
+    <div id="quick-launcher"></div>
+	<div id="quick-launcher">
+		<div class="dabory-quick-B quick-launcher quick_kbgolf">
+            <ul>
+                <li>
+                    <button type="button" class="return-to-bottom">
+                        <span class="ico ico-bottom"></span>
+                    </button>
+                </li>
+                <li>
+					<dl class="quick_tel">
+						<dt>회원권 문의</dt>
+						<dd>
+							본사
+                            <div onclick="document.location.href='tel:02-572-1888'"><strong>02-572-1888</strong></div>
+                            <!-- <strong>02-572-1888</strong> -->
+						</dd>
+						<dd>
+							충청지사
+                            <div onclick="document.location.href='tel:044-863-1889'"><strong>044-863-1889</strong></div>
+                            <!-- <strong>044-863-1889</strong> -->
+						</dd>
+					</dl>
+				</li>
+
+                <li>
+                    <button type="button" id="naver-login-button" class="show-widget-btn" data-widget="naver">
+                    <img src="{{ asset('themes/kbgolf/pro/resources/images/icn_navertalk.png') }}" alt="naver">
+                    <p class="txt">네이버 톡톡</p>
+                </li>
+                <li>
+                    <button type="button" id="kakao-login-button" class="show-widget-btn" data-widget="kakao">
+                    <img src="{{ asset('themes/kbgolf/pro/resources/images/icn_kakaotalk.png') }}" alt="kakao">
+                    <p class="txt">카카오 플러스 친구</p>
+                </li>
+                <li>
+                    <button type="button" class="return-to-top">
+                        <span class="ico ico-top"></span>
+                    </button>
+                </li>
+            </ul>
+        </div>
+	</div>
+
+    <!-- main header -->
+    @include('views.layouts.main-header')
+    <!-- main-header end -->
+
+    <!-- Mobile Menu  -->
+    @include('views.layouts.mobile-menu')
+    <!-- End Mobile Menu -->
+
+    <div id="app">
+        @yield('content')
+    </div>
+
+    <!-- main-footer -->
+    @include('views.layouts.footer')
+    <!-- main-footer end -->
+
+
+    <!-- sidebar cart item -->
+    @include('views.layouts.sidebar')
+    <!-- END sidebar widget item -->
+
+    <!--Scroll to top-->
+    <button class="scroll-top scroll-to-target" data-target="html">
+        <span class="fa fa-arrow-up"></span>
+    </button>
+
+    <div id="element_in_which_to_insert">
+        @yield('modal')
+        @stack('modal')
+    </div>
+
+    @yield('js')
+    @stack('js')
+
+    <script src="{{ csset($basePath . '/js/script.js') }}"></script>
+
+</body><!-- End of .page_wrapper -->
+
+<script>
+    window.env = (@json($_ENV));
+    window.Member = @json(session('member'));
+    window.CodeTitle = @json($codeTitle ?? '');
+</script>
+
+{{--<script src="{{ asset('/dabory/js/widget.js?serverUrl=https://safebanner.daboryhost.com&api23Key=XJAL+1IF4/EgIVcuTvcAOoH9ASKjnQje71boZaGpzwVyVcCoVRsxzyMee5goucaC6cWxzLdEcYfIkfj6bLukvs9+lOeUa3CLqpCbhd7v99Bxm011kxUllDLY8/NrXFVn8aa1e57jygREHo7xF2LWOJ9LHc2idRmQ9rXbI46sgiZBwPmi6E/mACBIjUcKq+uviA==') }}"></script>--}}
+
+<script>
+    Kakao.init(window.env.KAKAO_JAVASCRIPT_KEY);
+    $(document).ready(function () {
+        // $.fn.widget.loadModule(function () {
+        //     $('#quick-launcher').quick()
+        // })
+
+        $('.show-widget-btn').on('click', function() {
+            var widgetType = $(this).data('widget');
+            socialLogin(widgetType);
+        });
+    });
+
+    function socialLogin(widgetType){
+        if(widgetType == 'naver'){
+            var apiUrl = 'https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=' +
+                            window.env.NAVER_CLIENT_ID + '&redirect_uri=' +
+                            window.env.NAVER_CALLBACK_URL + '&state=' + generateState();
+            var popup = window.open(apiUrl, '_blank', 'width=600,height=600');
+
+        }else if(widgetType == 'kakao'){
+            var apiUrl = 'https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=' +
+                            window.env.KAKAO_JAVASCRIPT_KEY + '&redirect_uri=' +
+                            window.env.KAKAO_CALLBACK_URL + '&state=' + generateState();
+            var popup = window.open(apiUrl, '_blank', 'width=600,height=600');
+        }
+    }
+
+    function generateState() {
+        var mt = new Date().getTime().toString();
+        var rand = Math.random().toString(36).substr(2);
+        var stateValue = mt + rand;
+        var encodedState = encodeURIComponent(stateValue); // URL 인코딩
+        return encodedState;
+    }
+
+</script>
+
+</html>

+ 33 - 49
pro/resources/views/layouts/master.blade.php

@@ -10,7 +10,18 @@
 	<meta property="og:image" content="/public/themes/kbgolf/pro/resources/images/og_img.png">
     <script src="https://t1.kakaocdn.net/kakao_js_sdk/2.1.0/kakao.min.js" integrity="sha384-dpu02ieKC6NUeKFoGMOKz6102CLEWi9+5RQjWSV0ikYSFFd8M3Wp2reIcquJOemx" crossorigin="anonymous"></script>
     <script src="https://static.nid.naver.com/js/naveridlogin_js_sdk_2.0.1.js"></script>
-
+    <script src="{{ csset('/js/iziToast.js') }}"></script>
+    <script src="{{ csset('/js/components/screen-size.js') }}"></script>
+    <?php
+        // used for RESS
+        // if ( !Cookie::has('resolution') ) // doesn't work
+        if ( !isset( $_COOKIE['screenWidth'] ) || !isset( $_COOKIE['screenHeight']) )
+        {
+    ?>
+        <script>get_screen_size()</script>
+    <?php
+        }
+    ?>
     @stack('meta')
 
     @php $seoHtml = App\Helpers\Utils::getSeoHtml(); @endphp
@@ -23,7 +34,7 @@
 
     <!-- Google Fonts -->
     <link href="https://fonts.googleapis.com/css?family=Ubuntu:300,300i,400,400i,500,500i,700,700i&display=swap" rel="stylesheet">
-
+    <link href="{{ csset('/css/iziToast.css') }}" rel="stylesheet">
     @php $basePath = '/themes/kbgolf/pro/resources'; @endphp
 
     @include('views.partial.site.meta', [ 'basePath' => $basePath ])
@@ -63,28 +74,29 @@
                 </li>
                 <li>
 					<dl class="quick_tel">
-						<dt>	회원권 문의</dt>
+						<dt>회원권 문의</dt>
 						<dd>
 							본사
-							<strong>02-572-1888</strong>
+                            <div onclick="document.location.href='tel:02-572-1888'"><strong>02-572-1888</strong></div>
+                            <!-- <strong>02-572-1888</strong> -->
 						</dd>
 						<dd>
 							충청지사
-							<strong>044-863-1889</strong>
+                            <div onclick="document.location.href='tel:044-863-1889'"><strong>044-863-1889</strong></div>
+                            <!-- <strong>044-863-1889</strong> -->
 						</dd>
 					</dl>
 				</li>
 
-                <li>
-                    <button type="button" id="naver-login-button" class="show-widget-btn" data-widget="naver">
-                    <img src="themes/kbgolf/pro/resources/images/icn_navertalk.png" alt="naver">
-                    <p class="txt">네이버 톡톡</p>
-                </li>
-                <li>
-                    <button type="button" id="kakao-login-button" class="show-widget-btn" data-widget="kakao">
-                    <img src="themes/kbgolf/pro/resources/images/icn_kakaotalk.png" alt="kakao">
-                    <p class="txt">카카오 플러스 친구</p>
-                </li>
+                @foreach ($oauth2InfoList as $provider => $oauth2)
+                    @if($provider == 'kakao' || $provider == 'naver')
+                        <li>
+                            <button type="button" id="{{ $provider }}-login-button" onclick="openPopup('{{ route('social.redirectToProvider', ['provider' => $provider, 'target' => 'member']) }}')">
+                            <img src="{{ asset('themes/kbgolf/pro/resources/images/' . ($provider == 'naver' ? 'icn_navertalk.png' : 'icn_kakaotalk.png')) }}" alt="{{ $provider }}">
+                            <p class="txt">{{ $provider == 'naver' ? '네이버 톡톡' : '카카오 플러스 친구' }}</p>
+                        </li>
+                    @endif
+                @endforeach
                 <li>
                     <button type="button" class="return-to-top">
                         <span class="ico ico-top"></span>
@@ -141,41 +153,13 @@
 {{--<script src="{{ asset('/dabory/js/widget.js?serverUrl=https://safebanner.daboryhost.com&api23Key=XJAL+1IF4/EgIVcuTvcAOoH9ASKjnQje71boZaGpzwVyVcCoVRsxzyMee5goucaC6cWxzLdEcYfIkfj6bLukvs9+lOeUa3CLqpCbhd7v99Bxm011kxUllDLY8/NrXFVn8aa1e57jygREHo7xF2LWOJ9LHc2idRmQ9rXbI46sgiZBwPmi6E/mACBIjUcKq+uviA==') }}"></script>--}}
 
 <script>
-    Kakao.init(window.env.KAKAO_JAVASCRIPT_KEY);
-    $(document).ready(function () {
-        // $.fn.widget.loadModule(function () {
-        //     $('#quick-launcher').quick()
-        // })
-
-        $('.show-widget-btn').on('click', function() {
-            var widgetType = $(this).data('widget');
-            socialLogin(widgetType);
-        });
-    });
-
-    function socialLogin(widgetType){
-        if(widgetType == 'naver'){
-            var apiUrl = 'https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=' +
-                            window.env.NAVER_CLIENT_ID + '&redirect_uri=' +
-                            window.env.NAVER_CALLBACK_URL + '&state=' + generateState();
-            var popup = window.open(apiUrl, '_blank', 'width=600,height=600');
-
-        }else if(widgetType == 'kakao'){
-            var apiUrl = 'https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=' +
-                            window.env.KAKAO_JAVASCRIPT_KEY + '&redirect_uri=' +
-                            window.env.KAKAO_CALLBACK_URL + '&state=' + generateState();
-            var popup = window.open(apiUrl, '_blank', 'width=600,height=600');
-        }
+    function openPopup(url) {
+        const width = 600;
+        const height = 600;
+        const left = (window.innerWidth / 2) - (width / 2);
+        const top = (window.innerHeight / 2) - (height / 2);
+        window.open(url, 'oauthPopup', `width=${width},height=${height},top=${top},left=${left}`);
     }
-
-    function generateState() {
-        var mt = new Date().getTime().toString();
-        var rand = Math.random().toString(36).substr(2);
-        var stateValue = mt + rand;
-        var encodedState = encodeURIComponent(stateValue); // URL 인코딩
-        return encodedState;
-    }
-
 </script>
 
 </html>

+ 0 - 210
pro/resources/views/page/condo.blade.php

@@ -1,210 +0,0 @@
-@extends('views.layouts.master')
-
-@section('content')
-<div class="sub condo">
-	<div class="container">
-		<div class="navi">
-			<a href="/"><i class="fa-solid fa-house"></i> 홈</a> > 콘도 > 콘도 회원권 시세
-		</div>
-		<div class="title">
-			<h2>콘도회원권 시세</h2>
-		</div>
-	</div>
-
-	<!-- 회원권 검색 시작 -->
-	<div class="search_ticket">
-		<div class="container">
-			<label>회원권 검색</label>
-			<input type="text" placeholder="회원권명">
-			<button type="button" class="btn">검색</button>
-		</div>
-	</div>
-	<!--// 회원권 검색 끝 -->
-
-	<!-- 시세 시작 -->
-	<div class="quote">
-		<div class="container">
-			<ul class="tabs nav nav-tabs">
-				<li class="active">
-					<a data-toggle="tab">전체</a>
-				</li>
-				<li>
-					<a data-toggle="tab">스키장콘도</a>
-				</li>
-				<li>
-					<a data-toggle="tab">체인형콘도</a>
-				</li>
-			</ul>
-			<div class="tab-content">
-				<!-- 골프 -->
-				<div class="tab-pane fade in active show">
-					<div class="tb_res tb_vertical">					
-						<table cellspacing="0" cellpadding="0">	
-							<caption>단위: 만원</caption>
-							<thead>
-								<tr>
-									<th>회원권명</th>
-									<th>금일시세</th>
-									<th>전일시세</th>
-									<th>등락</th>
-									<th>상담</th>
-								</tr>
-							</thead>
-							<tbody>
-								<tr>
-									<td scope="row" data-label="회원권명">1회원권명이 나옵니다. 하둘셋네다여일여아열</td>
-									<td data-label="금일시세">0,000,000</td>
-									<td data-label="전일시세">0,000,000</td>
-									<td data-label="등락" class="up"><i class="fa-solid fa-sort-up"></i> 0,000,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">회원권명이 나옵니다. 하둘셋네다여일여아열</td>
-									<td data-label="금일시세">0,000,000</td>
-									<td data-label="전일시세">0,000,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 0,000,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">회원권명이 나옵니다. 하둘셋네다여일여아열</td>
-									<td data-label="금일시세">0,000,000</td>
-									<td data-label="전일시세">0,000,000</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-
-			</div>
-		</div>
-	</div>
-	<!--// 시세 끝 -->
-
-</div>
-
-<script>
-$(document).ready(function() {
-	if($('div').hasClass('chatbot') == true) {
-		$('.main-footer').addClass('chatbot');
-	}
-});
-</script>
-@endsection
-

+ 3 - 2
pro/resources/views/page/contactus-custom-list.blade.php

@@ -95,6 +95,7 @@
 <script>
     $(document).ready(function() {
         const contactUsCustomList = {!! json_encode($contactUsCustomList['Page']) !!};
+        console.log(contactUsCustomList);
         $('.open-modal').click(function(e) {
             e.preventDefault();
             var contactUsCustomId = $(this).data('id');
@@ -108,8 +109,8 @@
                 var status = contactUsCustom['Pc7'] === '상담접수' ? { class: 'apply', text: '상담접수' } : { class: 'done', text: '상담완료' };
                 $('.modal-body .info .status').removeClass('done apply').addClass(status.class).text(status.text);
                 $('.modal-body .info .date').text(contactUsCustom['date']);
-                $('#transaction_type').text(contactUsCustom['Pc5']);
-                $('#membership_name').text(contactUsCustom['Pc3']);
+                $('#transaction_type').text(contactUsCustom['Pc3']);
+                $('#membership_name').text(contactUsCustom['Pc5']);
                 $('#message').text(contactUsCustom['Pc7'] === '상담접수' ? '상담이 접수되었습니다.' : '완료');
             }
 

+ 1 - 89
pro/resources/views/page/contactus-custom.blade.php

@@ -61,7 +61,7 @@
 				</div>
 				<div class="request">
 					<label>요청 사항</label>
-					<textarea name="Pt1" placeholder="요청사항을 입력해주세요." required>{{ old('Pt1') }}</textarea>
+					<textarea name="Pt1" placeholder="요청사항을 입력해주세요.">{{ old('Pt1') }}</textarea>
 				</div>
 			</div>
 		</div>
@@ -75,82 +75,6 @@
 			<div class="term_wrap">
 				<pre>
                 {!! $policy['PostContents'] ?? '' !!}
-개인정보의 보유 및 이용 기간
-
-이용자의 개인정보는 원칙적으로 개인정보의 수집 및 이용목적이 달성되면 즉시 파기합니다.단,다음의 정보에 대해서는 아래의 이유로 명시한 기간까지 보존합니다.
-
-가.회사 내부 방침에 의한 정보 보유 사유
--부정 이용기록
-보존 이유:부정 이용 방지
-보존 기간: 1년
-나.관계법령에 의한 정보 보유 사유
-상법,전자상거래 등에서의 소비자보호에 관한 법률 등 관계법령의 규정에 의하여 보존할 필요가 있는 경우 회사는 관계법령에서 정한 일정 기간동안 회원 정보를 보관합니다.이 경우 회사는 보관하는 정보를 그 보관의 목적으로만 이용하며 보존기간은 아래와 같습니다.
--방문에 관한 기록
-보존 이유:통신비밀보호법
-보존 기간: 3개월
--본인 확인에 관한 기록
-보존 이유:정보통신망 이용촉진 및 정보보호 등에 관한 법률
-보존 기간: 6개월
--소비자의 불만 또는 분쟁 처리에 관한 기록
-보존 이유:전자상거래 등에서의 소비자보호에 관한 법률
-보존 기간: 3년
--계약 또는 청약철회 등에 관한 기록
-보존 이유:전자상거래 등에서의 소비자보호에 관한 법률
-보존 기간: 5년
--대금결제 및 재화 등의 공급에 관한 기록
-보존 이유:전자상거래 등에서의 소비자보호에 관한 법률
-보존 기간: 5년
-
-개인정보의 파기절차 및 방법
-
-회사는 원칙적으로 개인정보 수집 및 이용목적이 달성된 후에는 해당 정보를 즉시 파기합니다.파기 절차 및 방법은 다음과 같습니다.
-
--파기 절차
-회원님이 회원가입 등을 위해 입력하신 정보는 목적이 달성된 후 별도의DB로 옮겨져(종이의 경우 별도의 서류함)내부 방침 및 기타 관계 법령에 의한 정보보호 사유에 따라(보유 및 이용기간 참조)일정 기간 저장된 후 파기되어집니다.
-별도DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 보유 되어지는 이외의 다른 목적으로 이용되지 않습니다.
--파기 방법
-전자적 파일형태로 저장된 개인정보는 기록을 재생할 수 없는 기술적 방법을 사용하여 삭제합니다.
-
-쿠키에 의한 개인정보 수집
-
-회사는 귀하의 정보를 수시로 저장하고 찾아내는쿠키(cookie)를 운용합니다.쿠키란 회사의 웹사이트를 운영하는데 이용되는 서버가 귀하의 브라우저에 보내는 아주 작은 텍스트 파일로서 귀하의 컴퓨터 하드디스크에 저장됩니다.회사는 다음과 같은 목적을 위해 쿠키를 사용합니다.
-
--회원과 비회원의 접속 빈도나 방문 시간 등을 분석하고 이용자의 취향과 관심 분야를 파악하여 타깃(target)마케팅 및 서비스 개편 등의 척도로 활용합니다.
--회사가 진행하는 각종 이벤트에서 귀하의 참여 정도 및 방문 횟수를 파악하여 차별적인 응모 기회를 부여하고 개인의 관심 분야에 따라 차별화된 정보를 제공하기 위한 자료로 이용됩니다.
-귀하는 쿠키 설치에 대한 선택권을 가지고 있습니다.따라서,귀하는 웹브라우저에서 옵션을 설정함으로써 모든 쿠키를 허용하거나,쿠키가 저장될 때마다 확인을 거치거나,아니면 모든 쿠키의 저장을 거부할 수도 있습니다.
--쿠키 설정을 거부하는 방법으로는(도구 메뉴의 인터넷 옵션에서 설정)
-회원님께서 쿠키 설치를 거부하셨을 경우 회사의 서비스 제공에 어려움이 있습니다.
-
-목적외 사용 및 제3자에 대한 제공 및 공유
-
-회사는 귀하의 동의가 있거나 관계법령의 규정에 의한 경우를 제외하고는 어떠한 경우에도『개인정보의 수집목적 및 이용목적』에서 고지한 범위를 넘어 귀하의 개인정보를 이용하거나 타인 또는 타기업,기관에 제공하지 않습니다.
-
-귀하의 개인정보를 제공하거나 공유하는 경우에는 사전에 귀하에게 제공받거나 공유하는 자가 누구이며 주된 사업이 무엇인지,제공 또는 공유되는 개인정보 항목이 무엇인지,개인정보를 제공하거나 공유하는 목적이 무엇인지 등에 대해 개별적으로 전자우편 또는 서면을 통해 고지한 후 이에 대한 동의를 구합니다.
-
-다만,다음의 경우에는 관계 법령의 규정에 의하여 귀하의 동의 없이 개인정보를 제공하는 것이 가능합니다.
-
-
-이용자 및 법정대리인의 권리와 그 행사 방법
-
-이용자 및 법정 대리인은 언제든지 등록되어 있는 자신 혹은 당해 만14세 미만 아동의 개인정보를 조회하거나 수정할 수 있으며 가입해지를 요청할 수도 있습니다.
-
-이용자 혹은 만14세 미만 아동의 개인정보 조회,수정을 위해서는개인정보변경(또는회원정보수정등)을 가입해지(동의철회)를 위해서는회원탈퇴를 클릭하여 본인 확인 절차를 거치신 후 직접 열람,정정 또는 탈퇴가 가능합니다.
-
-혹은 개인정보관리 책임자에게 서면,전화 또는 이메일로 연락하시면 즉시 조치합니다.
-
-귀하가 개인정보의 오류에 대한 정정을 요청하신 경우에는 정정을 완료하기 전까지 당해 개인정보를 이용 또는 제공하지 않습니다.또한 잘못된 개인정보를 제3자에게 이미 제공한 경우에는 정정 처리결과를 제3자에게 즉시 통지하여 정정이 이루어지도록 합니다.
-
-회사는 이용자 혹은 법정 대리인의 요청에 의해 해지 또는 삭제된 개인정보는 회사가 수집하는 개인정보의 보유 및 이용기간에 명시된 바에 따라 처리하고 그 외의 용도로 열람 또는 이용할 수 없도록 처리합니다.
-
-
-개인정보의 관리
-
-귀하의 개인정보를 보호하고 개인정보와 관련한 불만을 처리하기 위하여 케이비회원거래소(주)는 개인정보관리책임자를 두고 있습니다.개인정보와 관련한 문의사항이 있으시면 아래의 개인정보관리 책임자에게 연락주시기 바랍니다.귀하의 문의사항에 신속하고 성실하게 답변해드립니다.
-
-개인정보 관리자:경영지원 조 현 덕
-TEL. 02-572-1888
-FAX. 02-572-1889
-chd1706@naver.com
 				</pre>
 			</div>
 			<div class="agree_check">
@@ -221,10 +145,6 @@ chd1706@naver.com
 
         });
 
-        $('#contact-us-form textarea').on('input', function() {
-            input_check()
-        });
-
         function input_check() {
             let check = true
             $('#contact-us-form input').each(function () {
@@ -233,14 +153,6 @@ chd1706@naver.com
                     return false
                 }
             })
-
-            $('#contact-us-form textarea').each(function () {
-                if ($(this).val() == '') {
-                    check = false
-                    return false
-                }
-            })
-
             $('.contact-us-btn').prop('disabled', ! check)
 
             return check

+ 0 - 213
pro/resources/views/page/golf.blade.php

@@ -1,213 +0,0 @@
-@extends('views.layouts.master')
-
-@section('content')
-<div class="sub golf">
-	<div class="container">
-		<div class="navi">
-			<a href="/"><i class="fa-solid fa-house"></i> 홈</a> > 골프 > 골프 회원권 시세
-		</div>
-		<div class="title">
-			<h2>골프회원권 시세</h2>
-		</div>
-	</div>
-
-	<!-- 회원권 검색 시작 -->
-	<div class="search_ticket">
-		<div class="container">
-			<label>회원권 검색</label>
-			<input type="text" placeholder="회원권명">
-			<button type="button" class="btn">검색</button>
-		</div>
-	</div>
-	<!--// 회원권 검색 끝 -->
-
-	<!-- 시세 시작 -->
-	<div class="quote">
-		<div class="container">
-			<ul class="tabs nav nav-tabs">
-				<li class="active">
-					<a data-toggle="tab">전체</a>
-				</li>
-				<li>
-					<a data-toggle="tab">수도권/강원/충청권</a>
-				</li>
-				<li>
-					<a data-toggle="tab">영남/제주권</a>
-				</li>
-				<li>
-					<a data-toggle="tab">호남권</a>
-				</li>
-			</ul>
-			<div class="tab-content">
-				<!-- 골프 -->
-				<div class="tab-pane fade in active show">
-					<div class="tb_res tb_vertical">					
-						<table cellspacing="0" cellpadding="0">	
-							<caption>단위: 만원</caption>
-							<thead>
-								<tr>
-									<th>회원권명</th>
-									<th>금일시세</th>
-									<th>전일시세</th>
-									<th>등락</th>
-									<th>상담</th>
-								</tr>
-							</thead>
-							<tbody>
-								<tr>
-									<td scope="row" data-label="회원권명">1회원권명이 나옵니다. 하둘셋네다여일여아열</td>
-									<td data-label="금일시세">0,000,000</td>
-									<td data-label="전일시세">0,000,000</td>
-									<td data-label="등락" class="up"><i class="fa-solid fa-sort-up"></i> 0,000,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">회원권명이 나옵니다. 하둘셋네다여일여아열</td>
-									<td data-label="금일시세">0,000,000</td>
-									<td data-label="전일시세">0,000,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 0,000,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">회원권명이 나옵니다. 하둘셋네다여일여아열</td>
-									<td data-label="금일시세">0,000,000</td>
-									<td data-label="전일시세">0,000,000</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">88(팔팔)</td>
-									<td data-label="금일시세">31,500</td>
-									<td data-label="전일시세">31,500</td>
-									<td data-label="등락">-</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-								<tr>
-									<td scope="row" data-label="회원권명">가평 베네스트</td>
-									<td data-label="금일시세">155,000</td>
-									<td data-label="전일시세">300,000</td>
-									<td data-label="등락" class="down"><i class="fa-solid fa-caret-down"></i> 145,000</td>
-									<td data-label="상담신청">
-										<button type="button" onclick="location.herf='#'" class="btn">상담신청</button>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-
-			</div>
-		</div>
-	</div>
-	<!--// 시세 끝 -->
-
-</div>
-
-<script>
-$(document).ready(function() {
-	if($('div').hasClass('chatbot') == true) {
-		$('.main-footer').addClass('chatbot');
-	}
-});
-</script>
-@endsection
-

+ 4 - 2
pro/resources/views/page/map.blade.php

@@ -35,8 +35,10 @@
 			<dt>케이비회원권거래소(주)</dt>
 			<dd>우) 06784 서울시 서초구 동산로 10길 40,5F (양재동,건아빌딩)</dd>
 			<dd>Tel : 02) 572-1888</dd>
-			<dd>Mobile : 010-5217-7054</dd>
-			<dd>E-mail : <a href="chd1706@naver.com">chd1706@naver.com</a></dd>
+            <dd>Fax : 02) 572-1889</dd>
+
+			<!-- <dd>Mobile : 010-5217-7054</dd> -->
+			<!-- <dd>E-mail : <a href="chd1706@naver.com">chd1706@naver.com</a></dd> -->
 		</dl>
 
 	</div>

+ 179 - 76
pro/resources/views/page/sise.blade.php

@@ -1,7 +1,10 @@
 @extends('views.layouts.master')
 @section('content')
 
-@php $today = date('Y-m-d'); @endphp
+@php
+    date_default_timezone_set('Asia/Seoul');
+    $today = date('Y-m-d');
+@endphp
 
 <div class="sub golf">
 	<div class="container">
@@ -18,7 +21,6 @@
 		<div class="container">
 			<label>회원권 검색</label>
 			<input type="text" id="membership-name" placeholder="회원권명">
-            <!-- <input type="date" id="date" value="{{$today}}"> -->
 			<button type="button" class="btn" onclick="searchMemberShip()">검색</button>
 		</div>
 	</div>
@@ -42,10 +44,12 @@
                 @endif
 			</ul>
 
-            <div class="tabs today">
-                <input type="date" id="search_date" value="{{$today}}" autocomplete="off">
+            <div class="tabs">
+                <!-- <input type="date" id="search_date" value="{{$today}}" autocomplete="off" style="cursor: pointer;"> -->
+                <input type="text" id="search_date">
             </div>
 
+
 			<div class="tab-content">
 				<div class="tab-pane fade in active show">
 					<div class="tb_res tb_vertical">
@@ -60,32 +64,7 @@
 									<th>상담</th>
 								</tr>
 							</thead>
-							<tbody id="sise-list">
-                                @forelse($siseItems['Page'] ?? [] as $sise)
-                                    <tr>
-                                        <td scope="row "data-label="{{ $sise['PostTitle'] }}"> {{ $sise['PostTitle'] }} </td>
-                                        <td data-label="{{$sise['Pc3']}}"> {{ number_format($sise['Pc3']) }} </td>
-                                        <td data-label="{{$sise['Pc4']}}"> {{ number_format($sise['Pc4']) }} </td>
-                                        <td data-label="등락" class="{{ isset($sise['fluctuation']) && $sise['fluctuation'] > 0 ? 'up' : (isset($sise['fluctuation']) && $sise['fluctuation'] < 0 ? 'down' : '') }}">
-                                            @if (isset($sise['fluctuation']) && $sise['fluctuation'] != 0)
-                                                <i class="fa-solid {{ $sise['fluctuation'] > 0 ? 'fa-sort-up' : 'fa-sort-down' }}"></i>
-                                                {{ number_format(abs($sise['fluctuation'])) }}
-                                            @else
-                                                {{ number_format(abs($sise['fluctuation'])) }}
-                                            @endif
-                                        </td>
-                                        <td data-label="상담신청">
-                                            <button type="button" class="btn consult-btn"
-                                                    onclick="window.location.href = '{{ route('contactus-custom', [$sise['Pc5'], $sise['PostTitle']]) }}'">상담신청
-                                            </button>
-                                        </td>
-                                    </tr>
-                                @empty
-                                <tr>
-                                    <td colspan="5">회원권이 존재하지 않습니다</td>
-                                </tr>
-                                @endforelse
-							</tbody>
+							<tbody id="sise-list"></tbody>
 						</table>
 					</div>
 				</div>
@@ -93,70 +72,186 @@
 			</div>
 		</div>
 
-        <!-- 페이지네이션 -->
-        <div class="row">
-            <div class="col-lg-12">
-                <div class="bottom-paginate">
-                    {{ $siseItems['Page']->appends(['limit' => request('limit'), 'sort' => request('sort')])->links() }}
-                </div>
-            </div>
-        </div>
-        <!--// 페이지네이션 끝 -->
+        <div id="loader" style="display: none;">Loading...</div>
 	</div>
     <!--// 시세 끝 -->
 
 </div>
 
 @push('js')
+<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
+<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/ko.js"></script>
+<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css" />
+
 <script>
     var filteredSiseList = [];
-    $(document).ready(function() {
-        var date = dateFormat(document.getElementById('search_date').value);
-        filteredSiseList = searchDate(date);
-        renderSiseList(filteredSiseList);
+    var allSiseList = [];
+    var loadingData = false; // 데이터 로딩 중인지 여부를 나타내는 플래그 변수
+    var page = 1;
 
-        if ($('div').hasClass('chatbot') == true) {
-            $('.main-footer').addClass('chatbot');
+    // 스크롤 이벤트 핸들러
+    function handleScroll() {
+        let scrollTop = $(document).scrollTop();
+        let offsetHeight = $(document).height();
+        let innerHeight = $(window).height();
+
+        if (innerHeight + scrollTop >= offsetHeight) {
+            page++;
+            loadMoreData(10);
+        }else{
+            if ((offsetHeight - (innerHeight + scrollTop)) <= 1) {  // 사용자 스크린의 크기가 달라짐에 따라 오차범위 1 이내 일때
+
+                page++;
+                loadMoreData(10);
+            }else if((offsetHeight - (innerHeight + scrollTop)) == 1.25){
+
+                page++;
+                loadMoreData(10);
+            }
         }
-    });
+    }
 
-    document.getElementById('search_date').addEventListener('change', function() {
-        var date = dateFormat(document.getElementById('search_date').value);
-        filteredSiseList = searchDate(date);
-        renderSiseList(filteredSiseList);
-    });
+    function loadMoreData(limit) {
+        let date = dateFormat($('#search_date').val());
+        if(siseType != 'golf'){
+            const monday = dateFormat(formatDate($('#search_date').val()));
+            // console.log('monday : ', monday);
+            date = monday;
+        }
 
-    // 회원권 검색
-    function searchMemberShip() {
-        var membershipName = document.getElementById('membership-name').value.toLowerCase();
-        var date = dateFormat(document.getElementById('search_date').value);
-        // console.log('date : ', date);
+        // console.log('siseType : ', siseType);
+        let data = {
+            "siseType": siseType,
+            "areaType": areaType,
+            "siseDate": date
+        };
 
-        if (!membershipName) {
-            alert('회원권명을 입력해주세요.');
-            return;
+        if (limit) {
+            data.page = page;
+            data.limit = limit;
         }
 
-        var filteredSiseList = siseList.filter(function(sise) {
-        var postTitleMatch = sise['PostTitle'].toLowerCase().includes(membershipName);
-        var dateMatch = date ? (sise['Pc6'] && sise['Pc6'] === date) : true;
-        return postTitleMatch && dateMatch;
+        $.ajax({
+            url: '/load-scroll-sise',
+            method: 'GET',
+            data: data,
+            success: function(response) {
+                var newSiseList = response.Page;
+                if (newSiseList != null) {
+                    if(limit){
+                        filteredSiseList = filteredSiseList.concat(newSiseList);
+                        console.log(newSiseList);
+                        renderSiseList(filteredSiseList);
+                    }else{
+                        allSiseList = newSiseList;
+                    }
+
+                } else {
+                    renderSiseList(filteredSiseList);
+                }
+            },
+            error: function(error) {
+                console.error('Error loading more data:', error);
+            }
         });
-        // console.log('filteredSiseList : ', filteredSiseList);
-        renderSiseList(filteredSiseList);
     }
-    // 동적으로 tbody 생ㄱ성
+
+     // 회원권 검색
+    function searchMemberShip() {
+        $(window).off('scroll', handleScroll);
+        var membershipName = $('#membership-name').val().toLowerCase();
+        var date = dateFormat($('#search_date').val());
+        if(siseType != 'golf'){
+            const monday = dateFormat(formatDate($('#search_date').val()));
+            date = monday;
+        }
+        if (!membershipName) {
+            $(window).on('scroll', handleScroll);
+            // alert('회원권명을 입력해주세요');
+            // page = 1;
+            // loadMoreData(10);
+            renderSiseList(filteredSiseList);
+        }else{
+            var searchMemberShipList = allSiseList.filter(function(sise) {
+                var postTitleMatch = sise['PostTitle'].toLowerCase().includes(membershipName);
+                var dateMatch = date ? (sise['Pc6'] && sise['Pc6'] === date) : true;
+                return postTitleMatch && dateMatch;
+            });
+            renderSiseList(searchMemberShipList);
+        }
+    }
+
+    $(document).ready(function() {
+        $('#search_date').flatpickr({
+        dateFormat: 'Y-m-d',
+		defaultDate: 'today',
+		locale: 'ko',
+        disableMobile: true,
+
+		// onOpen: function(selectedDates, dateStr, instance) {
+		// 	console.log('test');
+		// },
+		// onClose: function(selectedDates, dateStr, instance) {
+		// 	// 위젯이 닫힐 때 실행할 코드
+		// },
+		// onChange: function(selectedDates, dateStr, instance) {
+		// 	console.log('change');
+		// },
+	});
+    $('#search_date').attr('type', 'text');
+
+    // console.log('pickr : ', flatpickr);
+        // console.log(siseList);
+        loadMoreData();
+        loadMoreData(10);
+        // 스크롤 이벤트 설정
+        $(window).on('scroll', handleScroll);
+        // $(window).on('scroll', handleScrollWithDate);
+
+        $('#search_date').on('change', function() {
+            // if(siseType != 'golf'){
+            //     const monday = formatDate($(this).val());
+            //     // $(this).val(monday);
+            // }
+
+            page = 1;
+            filteredSiseList = [];
+            $(window).on('scroll', handleScroll);
+            loadMoreData();
+            loadMoreData(10);
+        });
+
+        if ($('div').hasClass('chatbot') == true) {
+            $('.main-footer').addClass('chatbot');
+        }
+    });
+
+
+
+    // 동적으로 tbody 생성
     function renderSiseList(siseList) {
+        // console.log('renderSiseList : ', siseList);
         var tbody = $('#sise-list');
         tbody.empty(); // Clear existing rows
-        // console.log('siseList.length : ', siseList.length);
 
         if (siseList.length === 0) {
             tbody.html('<tr><td colspan="5">회원권이 존재하지 않습니다.</td></tr>');
             return;
         }
 
+        // Pc1:회원권 코드 중복값 체크
+        var uniquePc1Values = new Set();
+        var uniqueSiseList = [];
+
         siseList.forEach(function(sise) {
+            if (!uniquePc1Values.has(sise['Pc1'])) {
+                uniquePc1Values.add(sise['Pc1']);
+                uniqueSiseList.push(sise);
+            }
+        });
+
+
+        uniqueSiseList.forEach(function(sise) {
             var fluctuationClass = '';
             var fluctuationIcon = '';
 
@@ -193,18 +288,11 @@
         });
     }
 
-    function searchDate(date){
-        return siseList.filter(function(siseFormDate) {
-            var dateMatch = date ? (siseFormDate['Pc6'] && siseFormDate['Pc6'] === date) : true;
-            return dateMatch;
-        });
-    }
-
     function number_format(number) {
         return new Intl.NumberFormat().format(number);
     }
 
-    function dateFormat(date){
+    function dateFormat(date) {
         var formattedDate = '';
         if (date) {
             var parts = date.split('-');
@@ -212,7 +300,22 @@
         }
         return formattedDate;
     }
-const siseList = {!! json_encode($siseList['Page']) !!}; // JavaScript에서 PHP 배열을 변환하여 변수에 할당
+
+    function formatDate(date) {
+        const selectedDate = new Date(date); // Date 객체로 변환
+        const dayOfWeek = selectedDate.getDay(); // (0: 일요일, 1: 월요일, ..., 6: 토요일)
+        const monday = new Date(selectedDate); // 해당 주의 월요일
+        monday.setDate(selectedDate.getDate() - (dayOfWeek === 0 ? 6 : dayOfWeek - 1));
+
+        const year = monday.getFullYear();
+        const month = String(monday.getMonth() + 1).padStart(2, '0');
+        const day = String(monday.getDate()).padStart(2, '0');
+        return `${year}-${month}-${day}`;
+    }
+
+    let siseList = {!! json_encode($siseList['Page']) !!};
+    const siseType = {!! json_encode($siseType) !!};
+    const areaType = {!! json_encode($area) !!};
 </script>
 @endpush
 @endsection

+ 1 - 0
pro/resources/views/partial/site/scripts.blade.php

@@ -27,6 +27,7 @@
 <script src="{{ csset('/js/external/numeral.min.js') }}"></script>
 <script src="{{ csset('/js/external/underscore-umd-min.js') }}"></script>
 <script src="{{ csset($basePath . '/js/accordion.js') }}"></script>
+<script src="{{ csset($basePath . '/js/jquery.cookie.js') }}" defer></script>
 <!-- /external JS files -->
 <!-- map script -->
 <script src="http://maps.google.com/maps/api/js?key=AIzaSyATY4Rxc8jNvDpsK8ZetC7JyN4PFVYGCGM"></script>

+ 2 - 1
pro/resources/views/policy-or-privacy.blade.php

@@ -8,7 +8,8 @@
 			<a href="/"><i class="fa-solid fa-house"></i> 홈</a> > 개인정보취급방침
 		</div>
 		<div class="title">
-			<h2>개인정보취급방침</h2>
+			<!-- <h2>개인정보취급방침</h2> -->
+            <h2>골프회원권</h2>
 		</div>
 	</div>
 	<!--=====================================

+ 12 - 10
pro/routes/web.php

@@ -23,6 +23,7 @@ use Themes\kbgolf\pro\app\Http\Controllers\MyPage\QnaController;
 use Themes\kbgolf\pro\app\Http\Controllers\PrivacyController;
 use Themes\kbgolf\pro\app\Http\Controllers\Page\SiseController;
 use Themes\kbgolf\pro\app\Http\Controllers\Page\ContactUsCustomController;
+use Themes\kbgolf\pro\app\Http\Controllers\dbrbbs\PostController;
 
 
 Route::middleware(['check.device.scale', 'check.gate.token'])->group(function () {
@@ -39,6 +40,7 @@ Route::middleware(['check.device.scale', 'check.gate.token'])->group(function ()
     })->name('chat-ui');
 
     Route::get('/', [IndexController::class, 'index'])->name('index');
+    // Route::get('/{sisetype}', [SiseController::class, 'index'])->name('sise');
 
     Route::get('/privacy-list', [PrivacyController::class, 'index'])->name('privacy.index');
     Route::get('/privacy-detail/{unique}', [PrivacyController::class, 'show'])->name('privacy.show');
@@ -352,16 +354,10 @@ Route::middleware(['check.device.scale', 'check.gate.token'])->group(function ()
 
     Route::get('/sise/{sisetype}/{area?}/{memberbershipname?}', [SiseController::class, 'index'])->name('sise');
 
-    Route::get('/contactus-custom/{siseType?}/{postTitle?}', function($siseType = null, $postTitle = null) {
-        if (is_null($postTitle) && !is_null($siseType)) {
-            $postTitle = $siseType;
-            $siseType = null;
-        }
-        return view('views.page.contactus-custom', [
-            'siseType' => $siseType,
-            'postTitle' => $postTitle,
-        ]);
-    })->name('contactus-custom');
+    Route::get('/contactus-custom/{siseType?}/{postTitle?}', [ContactUsCustomController::class, 'show'])
+    ->name('contactus-custom');
+
+    Route::get('/load-scroll-sise', [SiseController::class, 'loadScrollSise'])->name('load.scroll.sise');
 
     Route::get('/load-more-sise', [IndexController::class, 'loadMoreSise'])->name('load.more.sise');
 
@@ -393,6 +389,12 @@ Route::middleware(['check.device.scale', 'check.gate.token'])->group(function ()
     Route::post('/social/{provider}/callback', [SocialTalkController::class, 'login'])->middleware('check.gate.token');
     Route::get('/social/{provider}', [SocialTalkController::class, 'redirectToProvider'])->middleware('check.gate.token')->name('social.redirectToProvider');
 
+
+    Route::get('/kb-bbs/list/{postCode}', [PostController::class, 'list'])->name('dbrbbs.list');
+    Route::get('/kb-bbs/details/{postCode}/{slug}', [PostController::class, 'details'])->name('dbrbbs.details');
+    Route::middleware('check.pro.member')->group(function () {
+        Route::post('/kb-bbs/comment', [PostController::class, 'comment'])->name('dbrbbs.comment.store');
+    });
 });
 
 Route::get('/member-logout', function() {

+ 44 - 5
qry/erp/list/list-type1-insert/post/sise/insert2.sql

@@ -1,12 +1,51 @@
 INSERT INTO pro_post ( created_on, updated_on,
-                      post_title, pc1, pc2, pc3,
-                      pc4, pc5, pc6, post_type_id, post_slug,
-                       post_no
+                      post_title, pc1, pc2, pc3, pc4,
+                      pc5, pc6, post_type_id, post_slug, post_no
 )
 
 SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),
        c1, c2, c3, c4, c5,
-       c6, DATE_FORMAT(DATE_ADD('1899-12-30', INTERVAL c7 DAY), '%Y%m%d') as c7, c8, c9,
-       c10
+       c6, DATE_FORMAT(DATE_ADD('1899-12-30', INTERVAL c7 DAY), '%Y%m%d') as c7, c8,
+            (SELECT
+                CONCAT(
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1),
+                    SUBSTRING(chars, FLOOR(1 + RAND() * 62), 1)
+                )
+            FROM (
+                SELECT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' AS chars
+            ) AS character_set) AS c9,
+       CONCAT(
+                DATE_FORMAT(NOW(), '%y%m%d-%H%i%s-'),
+                SUBSTRING(CONCAT('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),
+                        FLOOR(1 + RAND() * 62), 1),
+                SUBSTRING(CONCAT('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),
+                        FLOOR(1 + RAND() * 62), 1),
+                SUBSTRING(CONCAT('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),
+                        FLOOR(1 + RAND() * 62), 1),
+                SUBSTRING(CONCAT('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),
+                        FLOOR(1 + RAND() * 62), 1),
+                SUBSTRING(CONCAT('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),
+                        FLOOR(1 + RAND() * 62), 1),
+                SUBSTRING(CONCAT('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),
+                        FLOOR(1 + RAND() * 62), 1)
+        ) AS c10
 FROM dbt_list_type1
 where list_token = ?

+ 9 - 7
qry/erp/list/list-type1/post/contactus-custom-input/plain.sql

@@ -1,13 +1,15 @@
 select
 	mx.id as id,
     mx.pc1 as c1,
-    mx.pc2 as c2,
-    mx.pc3 as c3,
-    mx.pc4 as c4,
-    mx.pc5 as c5,
-    mx.pc6 as c6,
-    mx.pt1 as c7,
-    mx.pc7 as c8
+    DATE_FORMAT(mx.official_date, '%Y-%m-%d') as c2,
+    TIME_FORMAT(mx.official_time, '%H:%i') as c3,
+    mx.pc2 as c4,
+    mx.pc3 as c5,
+    mx.pc4 as c6,
+    mx.pc5 as c7,
+    mx.pc6 as c8,
+    mx.pt1 as c9,
+    mx.pc7 as c10
 from
 	pro_post as mx
 	inner join pro_post_type as pt on pt.id = mx.post_type_id

Some files were not shown because too many files changed in this diff