Ver código fonte

240626-1516-Kim

hokky 5 meses atrás
pai
commit
19a9657e42
23 arquivos alterados com 507 adições e 121 exclusões
  1. 9 9
      erp/para/ko_KR/list/list-type1/download/contactus-custom.json
  2. 11 14
      erp/para/ko_KR/list/list-type1/download/sise.json
  3. 32 19
      erp/para/ko_KR/list/list-type1/post/sise-input.json
  4. 4 0
      erp/para/ko_KR/popup/popup-form1/form-a/post/sise.json
  5. 37 0
      erp/para/ko_KR/popup/popup-form1/form-insert/sise copy.json
  6. 37 0
      erp/para/ko_KR/popup/popup-form1/form-insert/sise.json
  7. 47 46
      erp/resources/views/popup/popup-form1/form-a/post/sise-form.blade.php
  8. 140 0
      erp/resources/views/popup/popup-form1/form-insert/form-insert.blade.php
  9. 45 0
      pro/app/Http/Controllers/Auth/SocialTalkController.php
  10. 12 2
      pro/app/Http/Controllers/Page/SiseController.php
  11. 45 0
      pro/app/Services/SocialService.php
  12. 0 0
      pro/para/ko_KR/response/list-type1/home-book.json
  13. 6 6
      pro/resources/views/index.blade.php
  14. 34 6
      pro/resources/views/layouts/master.blade.php
  15. 2 2
      pro/resources/views/page/sise.blade.php
  16. 3 13
      pro/routes/web.php
  17. 1 0
      qry/erp/list/list-type1-insert/sise/sise-input/1_delete_sise.sql
  18. 8 0
      qry/erp/list/list-type1-insert/sise/sise-input/2_insert_sise.sql
  19. 15 0
      qry/erp/list/list-type1/download/post/contactus-custom/plain.sql
  20. 0 0
      qry/erp/list/list-type1/download/post/contactus-custom/plain_cnt.sql
  21. 14 0
      qry/erp/list/list-type1/download/post/sise/plain.sql
  22. 0 0
      qry/erp/list/list-type1/download/post/sise/plain_cnt.sql
  23. 5 4
      qry/erp/list/list-type1/post/post-sise-input/plain.sql

+ 9 - 9
erp/para/ko_KR/list/list-type1/download/contactus-custom.json

@@ -5,7 +5,7 @@
     },
 
     "QueryVars": {
-        "QueryName": "download/post/contactus-custom",
+        "QueryName": "kbgolf::post/contactus-custom-input",
         "FilterName": "",
         "FilterValue": "",
         "FilterDate": "",
@@ -99,14 +99,14 @@
             "$Radio": "$Radio",
             "$Check": "",
             "No": "번호",
-            "C1": "신청자 이름",
-            "C2": "전화번호",
-            "C3": "상담 신청 날짜",
-            "C4": "상담 희망 날짜",
-            "C5": "이메일 주소",
-            "C6": "입학 유형 (대학 or 대학원)",
-            "C7": "유학 희망 국가",
-            "C8": "유학원 이름"
+            "C1": "신청자",
+            "C2": "연락처",
+            "C3": "거래구분",
+            "C4": "회원권 구분",
+            "C5": "회원권명",
+            "C6": "희망가격",
+            "C7": "요청사항",
+            "C8": "상태"
         },
         {
             "$Radio": "3",

+ 11 - 14
erp/para/ko_KR/list/list-type1/download/sise.json

@@ -5,11 +5,11 @@
     },
 
     "QueryVars": {
-        "QueryName": "download/post/contactus-custom",
+        "QueryName": "kbgolf::download/sise",
         "FilterName": "",
         "FilterValue": "",
         "FilterDate": "",
-        "SimpleFilter": "pt.post_code = 'contactus-custom'"
+        "SimpleFilter": ""
     },
 
     "HeadSelectOptions": [
@@ -99,14 +99,13 @@
             "$Radio": "$Radio",
             "$Check": "",
             "No": "번호",
-            "C1": "신청자 이름",
-            "C2": "전화번호",
-            "C3": "상담 신청 날짜",
-            "C4": "상담 희망 날짜",
-            "C5": "이메일 주소",
-            "C6": "입학 유형 (대학 or 대학원)",
-            "C7": "유학 희망 국가",
-            "C8": "유학원 이름"
+            "C1": "시세일자",
+            "C2": "회원권코드",
+            "C3": "회원권명",
+            "C4": "지역구분코드",
+            "C5": "금일시세",
+            "C6": "전일시세",
+            "C7": "포스트타입아이디"
         },
         {
             "$Radio": "3",
@@ -118,8 +117,7 @@
             "C4": "20",
             "C5": "20",
             "C6": "15",
-            "C7": "6",
-            "C8": "6"
+            "C7": "6"
         },
         {
             "$Radio": "center",
@@ -131,8 +129,7 @@
             "C4": "left",
             "C5": "left",
             "C6": "left",
-            "C7": "center",
-            "C8": "center"
+            "C7": "left"
         }
     ]
 }

+ 32 - 19
erp/para/ko_KR/list/list-type1/post/sise-input.json

@@ -23,6 +23,17 @@
         {
             "Value": "multi-delete",
             "Caption": "회원권 일괄 삭제"
+        },
+        {
+            "Value": "custom-xls-report",
+            "Caption": "(1)엑셀 다운로드",
+            "Component": "dummy",
+            "Parameter": "/list/list-type1/download/sise",
+            "ThemeDir": "/kbgolf/erp"
+        },
+        {
+            "Value": "excel-upload",
+            "Caption": "(2)엑셀 업로드"
         }
     ],
 
@@ -62,16 +73,12 @@
             "Caption": "회원권명"
         },
         {
-            "Value": "mx.pc3",
-            "Caption": "금일시세"
-        },
-        {
-            "Value": "mx.pc4",
-            "Caption": "전일시세"
+            "Value": "mx.pc5",
+            "Caption": "회원권코드"
         },
         {
             "Value": "mx.pc2",
-            "Caption": "지역"
+            "Caption": "지역코드"
         }
     ],
 
@@ -203,34 +210,40 @@
             "$Radio": "$Radio",
             "$Check": "$Check",
             "No": "번호",
+            "C8": "시세일자",
             "C1": "회원권명",
-            "C2": "구분",
-            "C3": "금일시세",
-            "C4": "전일시세",
-            "C5": "등락",
-            "C6": "지역"
+            "C2": "회원권코드",
+            "C3": "지역코드",
+            "C4": "시세타입",
+            "C5": "금일시세",
+            "C6": "전일시세",
+            "C7": "등락"
         },
         {
             "$Radio": "2",
             "$Check": "1",
-            "No": "2",
-            "C1": "5",
+            "No": "1",
+            "C8": "5",
+            "C1": "3",
             "C2": "3",
-            "C3": "4",
+            "C3": "3",
             "C4": "4",
             "C5": "4",
-            "C6": "4"
+            "C6": "4",
+            "C7": "4"
         },
         {
             "$Radio": "center",
             "$Check": "center",
             "No": "center",
+            "C8": "center",
             "C1": "center",
             "C2": "center",
-            "C3": "decimal('purch_prc')",
-            "C4": "decimal('purch_prc')",
+            "C3": "center",
+            "C4": "center",
             "C5": "decimal('purch_prc')",
-            "C6": "center"
+            "C6": "decimal('purch_prc')",
+            "C7": "decimal('purch_prc')"
         }
     ]
 }

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

@@ -20,6 +20,7 @@
             "SiseType":"구분*",
             "Area":"지역*",
             "MembershipName": "회원권명*",
+            "MembershipCode": "회원권코드*",
             "TodayPrice": "금일시세*",
             "YesterdayPrice": "전일시세*"
         },
@@ -28,6 +29,7 @@
             "SiseType":"left",
             "Area":"left",
             "MembershipName": "left",
+            "MembershipCode": "left",
             "TodayPrice": "left",
             "YesterdayPrice": "left"
         },
@@ -36,6 +38,7 @@
             "SiseType":"5000",
             "Area":"5000",
             "MembershipName": "5000",
+            "MembershipCode": "5000",
             "TodayPrice": "5000",
             "YesterdayPrice": "5000"
         },
@@ -44,6 +47,7 @@
             "SiseType":"required",
             "Area":"required",
             "MembershipName": "required",
+            "MembershipCode": "required",
             "TodayPrice": "required",
             "YesterdayPrice": "required"
         }

+ 37 - 0
erp/para/ko_KR/popup/popup-form1/form-insert/sise copy.json

@@ -0,0 +1,37 @@
+{
+    "General": {
+        "ActApi": "list-type1-insert"
+    },
+
+    "SelectButtonOptions": [
+    ],
+
+    "NoticeVars": {
+        "Notice": "(1) 업로드 후 실테이블에 적용하기를 하면 기존의 리스트는 완전히 삭제되고 새로운 리스트가 업로드 됩니다.",
+        "Warning": "(1)기존의 [리스트]는 완전 삭제/재생성되므로 전문적인 경험이 없으면 사용을 권장하지 않습니다.<br>(2) [리스트]는 메인화면의 우측 상단의 '캐시삭제' 버튼을 클릭하기 이전에는 게시되지 않습니다. 실수로 업로드를 했을 경우 '캐시삭제'버튼을 클릭하지 마십시요."
+    },
+
+    "FormVars": [
+        {
+            "SaveButton": "[리스트] 테이블에 반영",
+            "TruncateTable": "통합 설정 테이블 비운 후 추가",
+            "BackupTable": "'pro_main_menu_yy_mm_dd_mm_ss' 테이블로 백업",
+            "BackupDb": "'DB_name_yy_mm_dd_mm_ss' 테이블로 백업"
+        }
+    ],
+
+    "ConditionVars": {
+        "IsVisible": true
+    },
+
+    "InsertVars": {
+        "QueryName": "kbgolf::sise/sise-input",
+        "InsertType": "bulk",
+        "//InsertType": "one-by-one",
+        "PreProcess"  : "",
+        "PostProcess"  : "main-menu",
+        "IsTruncateTable": true,
+        "IsBackupTable": false,
+        "IsBackupDb": false
+    }
+}

+ 37 - 0
erp/para/ko_KR/popup/popup-form1/form-insert/sise.json

@@ -0,0 +1,37 @@
+{
+    "General": {
+        "ActApi": "list-type1-insert"
+    },
+
+    "SelectButtonOptions": [
+    ],
+
+    "NoticeVars": {
+        "Notice": "(1) 업로드 후 실테이블에 적용하기를 하면 기존의 리스트는 완전히 삭제되고 새로운 리스트가 업로드 됩니다.",
+        "Warning": "(1)기존의 [리스트]는 완전 삭제/재생성되므로 전문적인 경험이 없으면 사용을 권장하지 않습니다.<br>(2) [리스트]는 메인화면의 우측 상단의 '캐시삭제' 버튼을 클릭하기 이전에는 게시되지 않습니다. 실수로 업로드를 했을 경우 '캐시삭제'버튼을 클릭하지 마십시요."
+    },
+
+    "FormVars": [
+        {
+            "SaveButton": "[리스트] 테이블에 반영",
+            "TruncateTable": "통합 설정 테이블 비운 후 추가",
+            "BackupTable": "'pro_post_yy_mm_dd_mm_ss' 테이블로 백업",
+            "BackupDb": "'DB_name_yy_mm_dd_mm_ss' 테이블로 백업"
+        }
+    ],
+
+    "ConditionVars": {
+        "IsVisible": true
+    },
+
+    "InsertVars": {
+        "QueryName": "kbgolf::sise/sise-input",
+        "InsertType": "bulk",
+        "//InsertType": "one-by-one",
+        "PreProcess"  : "",
+        "PostProcess"  : "main-menu",
+        "IsTruncateTable": true,
+        "IsBackupTable": false,
+        "IsBackupDb": false
+    }
+}

+ 47 - 46
erp/resources/views/popup/popup-form1/form-a/post/sise-form.blade.php

@@ -34,9 +34,15 @@
                         <div class="form-group {{ $formA['FormVars']['Display']['Area'] }} flex-column mb-2">
                             <label class="m-0">{{ $formA['FormVars']['Title']['Area'] }}</label>
                             <select class="w-100 rounded" id="area-select">
+                                <!-- <option value="1">수도권</option>
+                                <option value="2">강원</option>
+                                <option value="3">충청</option>
+                                <option value="4">영남</option>
+                                <option value="5">제주</option>
+                                <option value="6">호남</option> -->
                                 <option value="100">수도권/강원/충청권</option>
                                 <option value="200">영남/제주권</option>
-                                <option value="300">호남권</option>
+                                <option value="300">호남</option>
                             </select>
                         </div>
                         <div class="form-group {{ $formA['FormVars']['Display']['MembershipName'] }} flex-column mb-2">
@@ -45,6 +51,12 @@
                                    maxlength="{{ $formA['FormVars']['MaxLength']['MembershipName'] }}"
                                 {{ $formA['FormVars']['Required']['MembershipName'] }}>
                         </div>
+                        <div class="form-group {{ $formA['FormVars']['Display']['MembershipCode'] }} flex-column mb-2">
+                            <label class="m-0">{{ $formA['FormVars']['Title']['MembershipCode'] }}</label>
+                            <input type="text" id="membership-code-txt" class="rounded w-100" autocomplete="off"
+                                   maxlength="{{ $formA['FormVars']['MaxLength']['MembershipCode'] }}"
+                                {{ $formA['FormVars']['Required']['MembershipCode'] }}>
+                        </div>
                         <div class="form-group {{ $formA['FormVars']['Display']['TodayPrice'] }} flex-column mb-2">
                             <label class="m-0">{{ $formA['FormVars']['Title']['TodayPrice'] }}</label>
                             <input type="text" id="today-price-txt" class="rounded w-100" autocomplete="off"
@@ -87,50 +99,12 @@
             });
 
             // sisetype 라디오 버튼 클릭 시 이벤트 핸들러
-            $('input[name="sisetype"]').on('change', function() {
+            $('#sise-form').on('change', 'input[name="sisetype"]', function() {
                 var selectedType = $(this).val();
-                var areaSelect = $('#area-select');
-                areaSelect.empty();
-
-                if (selectedType === 'golf') {
-                    areaSelect.append('<option value="100">수도권/강원/충청권</option>');
-                    areaSelect.append('<option value="200">영남권</option>');
-                    areaSelect.append('<option value="300">호남권</option>');
-                } else if (selectedType === 'condo') {
-                    areaSelect.append('<option value="400">체인형콘도</option>');
-                    areaSelect.append('<option value="500">스키장콘도</option>');
-                } else if (selectedType === 'fitness') {
-                    areaSelect.append('<option value="600">강남권</option>');
-                    areaSelect.append('<option value="700">강북권</option>');
-                }
-
-                areaSelect.val(areaSelect.children('option:first').val()); // 첫 번째 option을 선택하거나 초기화
+                PopupPopupForm1FormAPostSiseForm.change_option(selectedType);
             });
 
-            // 페이지 로드 시 초기 sisetype에 따른 option 설정
-            var initialType = $('input[name="sisetype"]:checked').val();
-            if (initialType) {
-                // 초기에 선택된 sisetype 값에 따라 option 설정
-                if (initialType === 'golf') {
-                    $('#area-select').html(`
-                        <option value="100">수도권/강원/충청권</option>
-                        <option value="101">다른 지역1</option>
-                        <option value="102">다른 지역2</option>
-                    `);
-                } else if (initialType === 'condo') {
-                    $('#area-select').html(`
-                        <option value="200">영남/제주권</option>
-                        <option value="201">다른 지역3</option>
-                        <option value="202">다른 지역4</option>
-                    `);
-                } else if (initialType === 'fitness') {
-                    $('#area-select').html(`
-                        <option value="300">호남권</option>
-                        <option value="301">다른 지역5</option>
-                        <option value="302">다른 지역6</option>
-                    `);
-                }
-            }
+
 
         });
 
@@ -180,6 +154,7 @@
                     Pc2: $(sise_form).find('#area-select').val(),
                     Pc3: $(sise_form).find('#today-price-txt').val(),
                     Pc4: $(sise_form).find('#yesterday-price-txt').val(),
+                    Pc5: $(sise_form).find('#membership-code-txt').val(),
                 }
                 if (id < 0) {
                     parameter = { Id: id }
@@ -189,16 +164,40 @@
             }
 
             PopupPopupForm1FormAPostSiseForm.fetch_sise = async function (id) {
-
+                console.log('fetch_sise_id : ', id);
                 const response = await get_api_data(PopupPopupForm1FormAPostSiseForm.formA['General']['PickApi'], {
                     Page: [ { Id: id } ]
                 })
 
-                console.log('response : ', response)
-
                 PopupPopupForm1FormAPostSiseForm.set_sise_ui(response)
             }
 
+            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>');
+                } else if (type === 'condo') {
+                    areaSelect.append('<option value="400">체인형콘도</option>');
+                    areaSelect.append('<option value="500">스키장콘도</option>');
+                } else if (type === 'fitness') {
+                    areaSelect.append('<option value="600">강남</option>');
+                    areaSelect.append('<option value="700">강북</option>');
+                }
+                if(area){
+                    areaSelect.val(area);
+                }
+            }
+
             PopupPopupForm1FormAPostSiseForm.set_sise_ui = async function (response) {
                 if (isEmpty(response.data) || response.data.apiStatus) {
                     return;
@@ -206,13 +205,15 @@
 
                 const sise = response.data.Page[0];
                 const sise_form = $('#sise-form')
-
                 $(sise_form).find('#Id').val(sise.Id)
                 $(sise_form).find('#membership-name-txt').val(sise.PostTitle)
                 $(sise_form).find(`input[name='sisetype'][value='${sise.Pc1}']`).prop('checked', true)
                 $(sise_form).find('#area-select').val(sise.Pc2)
                 $(sise_form).find('#today-price-txt').val(sise.Pc3)
                 $(sise_form).find('#yesterday-price-txt').val(sise.Pc4)
+                $(sise_form).find('#membership-code-txt').val(sise.Pc5)
+
+                PopupPopupForm1FormAPostSiseForm.change_option(sise.Pc1, sise.Pc2);
             }
 
         }( window.PopupPopupForm1FormAPostSiseForm = window.PopupPopupForm1FormAPostSiseForm || {}, jQuery ));

+ 140 - 0
erp/resources/views/popup/popup-form1/form-insert/form-insert.blade.php

@@ -0,0 +1,140 @@
+<div class="mb-1 pt-2 text-right btn-groups">
+    <div class="btn-group">
+        <button type="button" class="btn btn-sm btn-primary itech21-customer-insert-act save-button" data-value="save" {{ $formInsert['FormVars']['Hidden']['SaveButton'] }}>
+            {{ $formInsert['FormVars']['Title']['SaveButton'] }}
+        </button>
+    </div>
+</div>
+
+<div class="card mb-2" id="form-insert">
+    <div class="card-header" id="frm">
+        <div class="row">
+            <div class="col-12 col-lg card-header-item">
+                <div class="card card card-primary mb-3 mb-md-2 mb-lg-0 border-light">
+                    <div class="card-header p-0 mb-2">
+                    </div>
+                    <div class="card-body">
+                        <div class="mb-2 text-danger">
+                            {!! $formInsert['NoticeVars']['Notice'] !!}
+                        </div>
+                        <div class="mb-2">
+                            {!! $formInsert['NoticeVars']['Warning'] !!}
+                        </div>
+                        <div class="d-flex flex-column mb-2">
+                            <div class="d-flex align-items-center">
+                                <input type="checkbox" value="1" class="text-center mr-1" id="truncate-table-check"> <label class="mb-0" for="truncate-table-check">{{ $formInsert['FormVars']['Title']['TruncateTable'] }}</label>
+                            </div>
+                        </div>
+                        <div class="d-flex flex-column mb-2">
+                            <div class="d-flex align-items-center">
+                                <input type="checkbox" value="1" class="text-center mr-1" id="backup-table-check"> <label class="mb-0" for="backup-table-check">{{ $formInsert['FormVars']['Title']['BackupTable'] }}</label>
+                            </div>
+                        </div>
+                        <div class="d-flex flex-column">
+                            <div class="d-flex align-items-center">
+                                <input type="checkbox" value="1" class="text-center mr-1" id="is-backup-db-check"> <label class="mb-0" for="is-backup-db-check">{{ $formInsert['FormVars']['Title']['BackupDb'] }}</label>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+@once
+@push('js')
+<script src="{{ csset('/js/modals-controller/a-type/common.js') }}"></script>
+    <script>
+        $(document).ready(function() {
+            $('.itech21-customer-insert-act').on('click', function () {
+                // console.log($(this).data('value'))
+                switch( $(this).data('value') ) {
+                    case 'save': PopupForm1FormInsert.btn_act_save(); break;
+                }
+            });
+        });
+
+        (function( PopupForm1FormInsert, $, undefined ) {
+            PopupForm1FormInsert.formInsert = {!! json_encode($formInsert) !!};
+            PopupForm1FormInsert.parentParameter = {};
+            PopupForm1FormInsert.tdCount = 0
+
+            PopupForm1FormInsert.btn_act_save = async function () {
+                if (PopupForm1FormInsert.tdCount === 0  || isEmpty(PopupForm1FormInsert.parentParameter['ListType1Vars']['ListToken'])) {
+                    iziToast.error({
+                        title: 'Error',
+                        message: '엑셀화일을 먼저 업로드 해주세요',
+                    });
+                    return
+                }
+
+                const form_insert = $('#form-insert')
+
+                const response = await get_api_data(PopupForm1FormInsert.formInsert['General']['ActApi'], {
+                    InsertVars: {
+                        QueryName: PopupForm1FormInsert.formInsert['InsertVars']['QueryName'],
+                        InsertType: PopupForm1FormInsert.formInsert['InsertVars']['InsertType'],
+                        ListToken: PopupForm1FormInsert.parentParameter['ListType1Vars']['ListToken'],
+                        IsTruncateTable: $(form_insert).find('#truncate-table-check:checked').val() == '1',
+                        IsBackupTable: $(form_insert).find('#backup-table-check:checked').val() == '1',
+                        IsBackupDb: $(form_insert).find('#is-backup-db-check:checked').val() == '1',
+
+                        PreProcess: PopupForm1FormInsert.formInsert['InsertVars']['PreProcess'] ?? '',
+                        PostProcess: PopupForm1FormInsert.formInsert['InsertVars']['PostProcess'] ?? '',
+                    }
+                })
+
+                const d = response.data
+                if (d.apiStatus) {
+                    return iziToast.error({
+                        title: 'Error', message: d.body ?? $('#api-request-failed-please-check').text(),
+                    })
+                }
+
+                $('#modal-multi-popup.show').trigger('list.token.init')
+                $('#modal-multi-popup.show').modal('hide')
+
+                iziToast.success({
+                    title: 'Success', message: $('#action-completed').text(),
+                });
+
+                // show_iziToast_msg(response.data.InsertVars, function () {
+                //     $('#modal-multi-popup.show').trigger('list.token.init')
+                //     $('#modal-multi-popup.show').modal('hide')
+                // })
+            }
+
+            PopupForm1FormInsert.btn_act_new = function () {
+                $('#modal-multi-popup .modal-dialog').css('maxWidth', '800px');
+
+                $('#modal-multi-popup .modal-header').removeClass('bg-dark-alpha px-0')
+                $('#modal-multi-popup .modal-body button').removeClass('bg-dark-alpha border-dark-alpha bg-dark-alpha-hover')
+
+                $('#modal-multi-popup .modal-body button').addClass('bg-danger-10 border-danger-10 bg-danger-10-hover')
+                $('#modal-multi-popup .modal-header').addClass('bg-danger-10')
+
+                if (! PopupForm1FormInsert.formInsert['ConditionVars']['IsVisible']) {
+                    $('#modal-multi-popup').on('show.bs.modal', function (e) { e.preventDefault(); })
+                    PopupForm1FormInsert.btn_act_save()
+                }
+
+                Atype.btn_act_new('#form-insert #frm')
+
+                const form_insert = $('#form-insert')
+
+                $(form_insert).find('#truncate-table-check').prop('checked', PopupForm1FormInsert.formInsert['InsertVars']['IsTruncateTable'])
+                $(form_insert).find('#backup-table-check').prop('checked', PopupForm1FormInsert.formInsert['InsertVars']['IsBackupTable'])
+                $(form_insert).find('#is-backup-db-check').prop('checked', PopupForm1FormInsert.formInsert['InsertVars']['IsBackupDb'])
+            }
+
+            PopupForm1FormInsert.show_popup_callback = async function (parent_parameter, parameter, td_count) {
+                PopupForm1FormInsert.tdCount = td_count
+                PopupForm1FormInsert.btn_act_new()
+                PopupForm1FormInsert.formInsert = parameter
+                PopupForm1FormInsert.parentParameter = parent_parameter
+            }
+        }( window.PopupForm1FormInsert = window.PopupForm1FormInsert || {}, jQuery ));
+    </script>
+@endpush
+@endonce

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

@@ -0,0 +1,45 @@
+<?php
+namespace Themes\kbgolf\pro\app\Http\Controllers\Auth;
+
+use App\Services\CallApiService;
+use App\Http\Controllers\Controller;
+use Themes\kbgolf\pro\app\Services\SocialService;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Log;
+
+class SocialTalkController extends Controller
+{
+    protected $socialService;
+
+    public function __construct(SocialService $socialService)
+    {
+        $this->socialService = $socialService;
+    }
+
+    public function sendMessage(Request $request)
+    {
+        Log::debug($request);
+        $validatedData = $request->validate([
+            'channel_id' => 'required|string',
+            'template_object.text' => 'required|string',
+            'link_url' => 'nullable|url',
+        ]);
+        // Log::debug('검증: ' . json_encode($validatedData));
+
+        try {
+            $response = $this->socialService->sendMessage(
+                $validatedData['channel_id'],
+                [
+                    'message' => $validatedData['template_object']['text'],
+                    'link_url' => $validatedData['link_url'] ?? null,
+                ]
+            );
+            // Log::debug('결과: ' . $response);
+            return response()->json(['success' => true, 'message' => '메시지가 성공적으로 전송되었습니다.', 'response' => json_decode($response)]);
+        } catch (ValidationException $e) {
+            return response()->json(['success' => false, 'message' => '유효성 검사 오류입니다.', 'errors' => $e->errors()]);
+        } catch (Exception $e) {
+            return response()->json(['success' => false, 'message' => '메시지 전송에 실패했습니다.', 'error' => $e->getMessage()]);
+        }
+    }
+}

+ 12 - 2
pro/app/Http/Controllers/Page/SiseController.php

@@ -37,14 +37,24 @@ class SiseController extends Controller
         $query = "post_type_id = 59 and pc1='$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'";
             }
         }
         if($memberbershipname){
             $query .= " and postTitle like '%$memberbershipname%'";
         }
-        // dd($query);
-        $limit = (int)request('limit', 4);
+
+        $limit = (int)request('limit', 12);
         $page = (int)request('page', 1);
 
         // api 호출 request

+ 45 - 0
pro/app/Services/SocialService.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace Themes\kbgolf\pro\app\Services;
+use GuzzleHttp\Client;
+use Illuminate\Support\Facades\Log;
+
+class SocialService
+{
+    protected $apiUrl = 'https://kapi.kakao.com';
+    protected $restApiKey;
+
+    public function __construct()
+    {
+        $this->restApiKey = env('KAKAO_REST_API_KEY');
+    }
+
+    public function sendMessage($channelId, $args)
+    {
+        Log::debug('channelId: ' . $channelId);
+        // Log::debug('args: ' . json_decode($args));
+        $client = new Client([
+            'base_uri' => $this->apiUrl,
+            'headers' => [
+                'Authorization' => 'KakaoAK ' . $this->restApiKey,
+                'Content-Type' => 'application/json',
+            ],
+        ]);
+        // Log::debug('결과: ' . $response);
+        // $response = $client->post('/v1/api/talk/channel/' . $channelId . '/message', [
+        $response = $client->post('/v1/api/talk/channels/' . $channelId . '/message', [
+            'json' => [
+                'template_object' => [
+                    'object_type' => 'text',
+                    'message' => $args['message'],
+                    'link' => [
+                        'web_url' => $args['link_url'],
+                    ],
+                ],
+            ],
+        ]);
+        dd($response);
+
+        return $response->getBody()->getContents();
+    }
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
pro/para/ko_KR/response/list-type1/home-book.json


+ 6 - 6
pro/resources/views/index.blade.php

@@ -88,12 +88,12 @@
 		</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>
+                <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>

+ 34 - 6
pro/resources/views/layouts/master.blade.php

@@ -7,6 +7,7 @@
     <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>
     @stack('meta')
 
     @php $seoHtml = App\Helpers\Utils::getSeoHtml(); @endphp
@@ -26,6 +27,7 @@
     @include('views.partial.site.scripts', [ 'basePath' => $basePath ])
 
     @stack('css')
+
 </head>
 
 
@@ -76,7 +78,7 @@
 					</button>
 				</li>
 				<li>
-					<button type="button" class="show-widget-btn" data-widget="contact-us">
+					<button type="button" class="show-widget-btn" id="kakao-plus-friend-btn" data-widget="contact-us">
 						<img src="/themes/kbgolf/pro/resources/images/icn_kakaotalk.png" alt="카톡 플러스 친구">
 						<p class="txt">카톡 플러스 친구</p>
 					</button>
@@ -129,18 +131,44 @@
 </body><!-- End of .page_wrapper -->
 
 <script>
+    window.apiKey = {
+        KAKAO_REST_API_KEY: "{{ env('KAKAO_REST_API_KEY') }}"
+    };
     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>
-    // $(document).ready(function () {
-    //     $.fn.widget.loadModule(function () {
-    //         $('#quick-launcher').quick()
-    //     })
-    // });
+    Kakao.init(window.apiKey.KAKAO_REST_API_KEY); // 여기에 실제 앱 키를 입력하세요.
+    $(document).ready(function () {
+        // $.fn.widget.loadModule(function () {
+        //     $('#quick-launcher').quick()
+        // })
+
+        $('#kakao-plus-friend-btn').on('click', function() {
+            var channelId = '_aAAGj';
+            var appKey = window.apiKey.KAKAO_REST_API_KEY;
+            var origin = encodeURIComponent(window.location.origin);
+            var referer = encodeURIComponent(window.location.href);
+            var kakaoAgent = encodeURIComponent('sdk/2.1.0 os/javascript sdk_type/javascript lang/ko-KR device/Win32 origin/' + origin);
+            var redirectUri = `https://pf.kakao.com/${channelId}/chat?api_ver=1.1&kakao_agent=${kakaoAgent}&app_key=${appKey}&referer=${referer}`;
+
+            if (Kakao.Auth.getAccessToken()) {
+                window.open(redirectUri, '_blank');
+            } else {
+                Kakao.Auth.authorize({
+                    redirectUri: redirectUri
+                });
+            }
+        });
+
+
+    });
+
+
 </script>
 
 </html>

+ 2 - 2
pro/resources/views/page/sise.blade.php

@@ -39,8 +39,8 @@
                     <li class="{{ request('area', 'all') === '400' ? 'active' : '' }}"><a href="{{ route('sise', [$siseType, '400']) }}">체인형콘도</a></li>
                     <li class="{{ request('area', 'all') === '500' ? 'active' : '' }}"><a href="{{ route('sise', [$siseType, '500']) }}">스키장콘도</a></li>
                 @else
-                    <li class="{{ request('area', 'all') === '400' ? 'active' : '' }}"><a href="{{ route('sise', [$siseType, '600']) }}">강남권</a></li>
-                    <li class="{{ request('area', 'all') === '500' ? 'active' : '' }}"><a href="{{ route('sise', [$siseType, '700']) }}">강북권</a></li>
+                    <li class="{{ request('area', 'all') === '600' ? 'active' : '' }}"><a href="{{ route('sise', [$siseType, '600']) }}">강남권</a></li>
+                    <li class="{{ request('area', 'all') === '700' ? 'active' : '' }}"><a href="{{ route('sise', [$siseType, '700']) }}">강북권</a></li>
                 @endif
 			</ul>
 			<div class="tab-content">

+ 3 - 13
pro/routes/web.php

@@ -17,6 +17,7 @@ use Themes\kbgolf\pro\app\Http\Controllers\Auth\PasswordChangeController;
 use Themes\kbgolf\pro\app\Http\Controllers\Auth\LoginController;
 use Themes\kbgolf\pro\app\Http\Controllers\Auth\MemberSignupVerifyController;
 use Themes\kbgolf\pro\app\Http\Controllers\Auth\SignupController;
+use Themes\kbgolf\pro\app\Http\Controllers\Auth\SocialTalkController;
 use Themes\kbgolf\pro\app\Http\Controllers\MyPage\NoticeController;
 use Themes\kbgolf\pro\app\Http\Controllers\MyPage\QnaController;
 use Themes\kbgolf\pro\app\Http\Controllers\PrivacyController;
@@ -369,19 +370,6 @@ Route::middleware(['check.device.scale', 'check.gate.token'])->group(function ()
 
     Route::get('/load-more-blog', [IndexController::class, 'loadMoreBlog'])->name('load.more.blog');
 
-	// Route::get('/golf', function() {
-    //     return view('views.page.golf');
-    // })->name('golf');
-
-	// Route::get('/condo', function() {
-    //     return view('views.page.condo');
-    // })->name('condo');
-
-	// Route::get('/fitness', function() {
-    //     return view('views.page.fitness');
-    // })->name('fitness');
-
-
     Route::get('/contactus-custom-list/{id?}', [ContactUsCustomController::class, 'index'])->name('contactus-custom-list');
 
 	Route::get('/status', function() {
@@ -402,6 +390,8 @@ Route::middleware(['check.device.scale', 'check.gate.token'])->group(function ()
         return view('views.page.map');
     })->name('map');
 
+    // 카카오 메세지 api
+    Route::post('/send-kakao-channel-message', [SocialTalkController::class, 'sendMessage'])->name('send-kakao-channel-message');
 });
 
 Route::get('/member-logout', function() {

+ 1 - 0
qry/erp/list/list-type1-insert/sise/sise-input/1_delete_sise.sql

@@ -0,0 +1 @@
+DELETE FROM pro_post WHERE post_type_id = 59;

+ 8 - 0
qry/erp/list/list-type1-insert/sise/sise-input/2_insert_sise.sql

@@ -0,0 +1,8 @@
+INSERT INTO pro_post ( created_on, updated_on,
+	pc5, post_title, pc2, pc3, pc4, post_type_id
+)
+
+SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),
+	c2, c3, c4, c5, c6, c7
+FROM dbt_list_type1
+where list_token = ?

+ 15 - 0
qry/erp/list/list-type1/download/post/contactus-custom/plain.sql

@@ -0,0 +1,15 @@
+select
+	mx.id as id,
+	mx.pc1 as c1,
+	mx.pc2 as c2,
+	concat( dateday(mx.official_date), " ", mx.official_time ) as c3,
+	mx.pc8 as c4,
+	mx.pc3 as c5,
+	mx.pc5 as c6,
+	mx.pc9 as c7,
+	mx.pd2 as c8
+from
+	pro_post as mx
+	inner join pro_post_type as pt on pt.id = mx.post_type_id
+-- @where
+-- @order

+ 0 - 0
qry/erp/list/list-type1/download/post/contactus-custom/plain_cnt.sql


+ 14 - 0
qry/erp/list/list-type1/download/post/sise/plain.sql

@@ -0,0 +1,14 @@
+select
+    mx.id as id,
+    CURDATE() AS c1,            -- 시세일자
+    mx.pc5 as c2,               -- 회원권코드
+    post_title as c3,           -- 회원권명
+    mx.pc2 as c4,               -- 지역코드
+    mx.pc3 as c5,               -- 금일시세
+    mx.pc4 as c6                -- 전일시세
+    mx.post_type_id             -- 게시판구분
+from
+    pro_post as mx
+    inner join pro_post_type as pt on pt.id = mx.post_type_id
+-- @where
+and pt.post_code = 'sise'

+ 0 - 0
qry/erp/list/list-type1/download/post/sise/plain_cnt.sql


+ 5 - 4
qry/erp/list/list-type1/post/post-sise-input/plain.sql

@@ -3,17 +3,18 @@ select
     post_title as c1,
     mx.pc1 as c2,
     CASE
-        WHEN mx.pc2 = 100 THEN '수도권/충청권'
+        WHEN mx.pc2 = 100 THEN '수도권/강원/충청권'
         WHEN mx.pc2 = 200 THEN '영남/제주권'
         WHEN mx.pc2 = 300 THEN '호남권'
         WHEN mx.pc2 = 400 THEN '체인형콘도'
         WHEN mx.pc2 = 500 THEN '스키장콘도'
-        WHEN mx.pc2 = 600 THEN '강남'
-        WHEN mx.pc2 = 700 THEN '강북'
+        WHEN mx.pc2 = 600 THEN '강남'
+        WHEN mx.pc2 = 700 THEN '강북'
     END as c6,
     mx.pc3 as c3,
     mx.pc4 as c4,
-    ABS(mx.pc3 - mx.pc4) AS c5
+    ABS(mx.pc3 - mx.pc4) AS c5,
+    CURDATE() AS c8
 from
     pro_post as mx
     inner join pro_post_type as pt on pt.id = mx.post_type_id

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff