개발자/개발(회사용)

[210214] 체크박스, 전체체크, disabled etc...

엘리씨 2021. 2. 14. 22:09

HTML

 

<!DOCTYPE html>

<html lang="ko">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>Member List</title>

    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

  <!-- <link rel="stylesheet" href="/resources/demos/style.css"> -->

  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>

  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

  <script>

     $(function() {

        $("#datepicker1, #datepicker2").datepicker({

            dateFormat: 'yy.mm.dd'

        });

    });

  </script>

</head>

<body>

<p>조회기간:

    <input type="text" id="datepicker1"> ~

    <input type="text" id="datepicker2">

</p>

        

        <table id="tb" border='1'>

            <button id="sendPoint" onclick="sendPoint()">지급</button>

            <button style="display:none" onclick="cancel()" id="cancel">지급취소</button>

            <button style="display:none" onclick="cancelPoint()" id="cancelPoint">회수취소</button>

            <button onclick="backPoint()">회수</button>

            

        

            <caption>member List</caption>

            <tr>

                <th><input type="checkbox" name="checkAll"></th>

                <th>확인용 id</th>

                <th>user id</th>

                <th>name </th>

                <th>phone</th>

                <th>email</th>

                <th>auth</th>

                <th>created_at</th>

                <th>updated_at</th>

                <th>deleted_at</th>

                <th>payment_at</th>

                <th>상세보기</th>

                

            </tr>

            @foreach($items as $data)

            <tr class="tr">

                <td><input type="checkbox" class="checkOne" name="checkOne"><input type="hidden" value="{{$data->id}}"></td>

                <td class="id">{{$data->id}}</td>

                <td>{{$data->userid}}</td>

                <td>{{$data->name}}</td>

                <td>{{$data->phone}}</td>

                <td>{{$data->email}}</td>

                <td>{{$data->auth}}</td>

                <td>{{$data->created_at}}</td>

                <td>{{$data->updated_at}}</td>

                <td>{{$data->deleted_at}}</td>

                <td class="paymentAt">{{$data->payment_at}}</td>

                <td><a href="{{Route('memberDetail',['id'=>$data->id])}}">click</a></td>

            </tr>

            @endforeach

 

        </table>

        <div>

            <button><a href="{{Route('memberCreate',['id'=>0])}}">추가</a></button>

        </div>

 

        <div><p>검색기능</p>

        <form action="" method="get">

            <input type="text" name="searchText" placeholder="통합검색">

            

            <select name="searchAuth">

            @foreach($totalAuth as $totalAuth)

                <option value="111">{{$totalAuth->auth}}</option>

               

                @endforeach    

            </select>

        

            <button type="submit">검색</button>

        </form>

       

        </div>

    </div>

    <script>

        function backPoint(){

            $('#cancelPoint').show();

            $('tr.tr').each(function(){

               var isPayment=  $(this).children('.paymentAt').text();

                if(!isPayment){

                    $(this).children().children('.checkOne').prop("checked",false);

                    $(this).children().children('.checkOne').prop("disabled"true);

                }

            })

 

        }

        //전체체크

        $(document).ready(function(){

            $("input:checkbox[name='checkAll']").click(function(){ 

               $("input:checkbox[name='checkOne']").each(function(){

                   if($(this).is(':disabled')){

                       $(this).prop("checked",false);

                   }else{

                        $(this).prop("checked",true);

                   }

               })

 

               //전체 체크박스 개수

               var checkboxCnt = $('.checkOne').length;

               //체크된거 개수

               var selCnt = $("input:checkbox[name='checkOne']:checked").length;

               //disabled개수

               var disabledCnt = $('tr.tr').find(":disabled").length;

 

               if(disabledCnt >=1){

                    if($("input:checkbox[name='checkAll']").is(":checked")==false){

                       

                        $("input:checkbox[name='checkOne']").prop("checked",false);

                    }      

 

               }else{

                    if($("input:checkbox[name='checkAll']").is(":checked")==true){

                        $("input:checkbox[name='checkOne']").prop("checked",true);

                    }else{

                        $("input:checkbox[name='checkOne']").prop("checked",false);

                    }

               }

            })

        

            $("input:checkbox[name='checkOne']").click(function(){

                var allCnt = $("input:checkbox[name='checkOne']").length;

                var selCnt = $("input:checkbox[name='checkOne']:checked").length;

                //disabled개수

                var disabledCnt = $('tr.tr').find(":disabled").length;

                if(disabledCnt>=1){

                    let notDisabledCnt = allCnt - disabledCnt;  

                    if(notDisabledCnt === selCnt){

                        $("input:checkbox[name='checkAll']").prop("checked",true); 

                    }else{

                        $("input:checkbox[name='checkAll']").prop("checked",false);

                    }

 

                }else{

                    if(allCnt !== selCnt){

                    $("input:checkbox[name='checkAll']").prop("checked",false);

                    }else{

                        $("input:checkbox[name='checkAll']").prop("checked",true);

                    }

                }     

            })

        });

 

        function sendPoint(){

            

            if(confirm("포인트를 지급하시겠습니까??") == true){

 

                var chkArray = [];

                $("input:checkbox[name='checkOne']:checked").each(function(i){

                    chkArray.push($(this).siblings().val());

            });

            var allData ={"chkArray":chkArray};

            //console.log(chkArray); 

 

                //var chkArray = JSON.parse(chkArray); 

                if(Array.isArray(chkArray)&&chkArray.length===0){

                    //빈 배열인지 확인

                    alert("체크박스를 선택해주세요");

                    return false;

                }else{

                    $.ajax({

                        headers: {

                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

                        },

                        type: 'POST',

                        url: "{{Route('sendPoint')}}",

                        data: allData,

                        dataType: 'text',

                        success: function(data) {

                            alert('성공'),

                            location.href="{{Route('memberList')}}";

                        },

                        error: function(request,status,error){

                                    alert("code:"+request.status+"\n"+

                                    "message:"+request.responseText+"\n"+"error:"+error);}

                    });

                }

            }else{

                return false;

            }

            

        }

 

        function cancelPoint(){

            if(confirm("지급을 회수하시겠습니까?")==true){

                var chkArray = [];

                $("input:checkbox[name='checkOne']:checked").each(function(i){

                    chkArray.push($(this).siblings().val());

            });

            var allData ={"chkArray":chkArray};

            console.log(chkArray); 

 

                //var chkArray = JSON.parse(chkArray); 

                if(Array.isArray(chkArray)&&chkArray.length===0){

                    //빈 배열인지 확인

                    alert("체크박스를 선택해주세요");

                    return false;

                }else{

                    $.ajax({

                        headers: {

                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

                        },

                        type: 'POST',

                        url: "{{Route('cancelPoint')}}",

                        data: allData,

                        dataType: 'text',

                        success: function(data) {

                            alert('성공'),

                            location.href="{{Route('memberList')}}";

                        },

                        error: function(request,status,error){

                                    alert("code:"+request.status+"\n"+

                                    "message:"+request.responseText+"\n"+"error:"+error);}

                    });

                }

            }else{

                return false;

            }

            

        }

 

    </script>

</body>

</html>

 

 

 

 

CONTROLLER

 public function sendPoint(Request $request){

        //print_r("here i am");

        print_r($request->chkArray);

        $arr=$request->chkArray;

        //die();

        $length = sizeof($arr);

        foreach($arr as $key => $val){

            (new Member())->sendPoint($val);

        }

    }

    

    public function cancelPoint(Request $request){

        $arr = $request->chkArray;

        foreach($arr as $key => $val){

            (new Member())->cancelPoint($val);

        }

    }

 

 

MODEL

 

  public function sendPoint($val){

        $model = self::find($val);

        $model->payment_at = now();

        $res = $model->save();

 

        return $res;

    }

 

    public function cancelPoint($val){

        $model = self::find($val);

        //$res = $model->forceDelete();

        $model->payment_at = null;

        $res = $model->save();

        return $res;

    }

'개발자 > 개발(회사용)' 카테고리의 다른 글

[stack log 사용법]  (0) 2021.12.14
[라라벨] 페이지네이션  (0) 2021.10.06
[ajax]숫자 넣기, querystring 가져오기  (0) 2021.10.04
switch+삼항연산자  (0) 2021.03.12
[js] ajax formdata serialize  (0) 2021.02.23