Wanna be Brilliant Full-Stack Developer

JQGRID #3 본문

Some Memos/JQGRID

JQGRID #3

Flashpacker 2023. 5. 24. 10:02
function saveStock_out() {

    var obj_data = {}
    var data_list = $(".form-control");
    var list = [];

    var gu5 = String.fromCharCode(5);
    var check = 'Y';

    data_list.each(function (index, item) {
        obj_data[item.name] = $(item).val();
    });

    obj_data.stock_keywrod = stock_keyword;
    obj_data.keyword = keyword;
    obj_data.work_date = obj_data.work_date.replaceAll('-','');
    obj_data.list = list.join(gu5);


    console.log(obj_data);

    if (check == 'Y') {
        if (reason_ck_stock_out(obj_data)) {
            $.ajax({
                url: "/add_stock_out",
                type: "POST",
                data: obj_data,
                success: function (data) {
                    var msg = data.message;
                    console.log(data);
                    if (data.result == "NG") {
                        alert(data.msg);
                    } else {
                        alert(data.msg);
                        check_stock_out();
                        $("#stock_out_grid").trigger('reloadGrid');
                        $("#stock_out_modal").dialog("close");

                    }


                    // $("#dialog1").addClass( "hidden" )
                },
                error: function (request, status, error) {
                    alert("code = " + request.status + " message = " + request.responseText + " error = " + error)
                }
            })
        }
    }

}


1. 변수 및 객체 초기화:
   - `obj_data`: 빈 객체를 생성하여 데이터를 담을 준비를 합니다.
   - `data_list`: `.form-control` 클래스를 가진 요소들을 선택하여 데이터를 추출할 준비를 합니다.
   - `list`: 빈 배열을 생성하여 추후 데이터를 추가할 준비를 합니다.
   - `gu5`: ASCII 코드 5를 문자로 변환한 값으로, 데이터를 구분하기 위한 구분자입니다.
   - `check`: 초기값으로 'Y'를 가지는 변수입니다.

2. 데이터 추출:
   - `data_list.each()`: `data_list`에 포함된 각 요소에 대해 반복합니다.
   - `item.name`을 키로, `$(item).val()`을 값으로 하는 `obj_data` 객체를 구성합니다.

3. 데이터 가공:
   - `obj_data.stock_keyword`, `obj_data.keyword`: 기존 변수 `stock_keyword`와 `keyword` 값을 `obj_data` 객체에 추가합니다.
   - `obj_data.work_date`: `work_date` 값을 `-` 기호를 제거하여 업무 날짜 형식에 맞게 수정합니다.
   - `obj_data.list`: 빈 배열 `list`를 구분자 `gu5`를 사용하여 문자열로 변환한 뒤, `obj_data` 객체에 추가합니다.

4. 조건 확인 및 데이터 저장:
   - `check == 'Y'`: `check` 변수가 'Y'인 경우에만 조건을 수행합니다.
   - `reason_ck_stock_out()`: `obj_data` 객체를 전달하여 유효성을 확인하는 함수를 호출합니다.
   - `$.ajax()`: AJAX를 통해 서버로 데이터를 전송합니다.
     - `url`: "/add_stock_out" 경로로 데이터를 전송합니다.
     - `type`: POST 방식을 사용하여 데이터를 전송합니다.
     - `data`: `obj_data` 객체를 전송합니다.
     - `success`: 서버 응답이 성공적으로 도착한 경우 실행될 콜백 함수를 정의합니다.
     - `error`: 서버 요청이 실패한 경우 실행될 콜백 함수를 정의합니다.

5. 결과 처리:
   - 서버 응답이 성공적으로 도착한 경우:
     - `data.result` 값이 "NG"인 경우 `data.msg` 값을 알림창으로 표시합니다.
     - 그렇지 않은 경우 `data.msg` 값을 알림창으로 표시하고, `check_stock_out()` 함수를 호출하고, 화면을 업데이트합니다.

6. 에러 처리:
   - 서버 요청이 실패한 경우, 오류 메시지를 알림창으로 표시합니다.

이 코드는 주어진 데이터를 서버에 전송하여 저장하는 기능을 수행합니다. 필요한 데이터를 추출하고 가공한 뒤

, 유효성을 확인하여 서버로 전송합니다. 서버 응답에 따라 결과를 처리하고, 실패한 경우 오류를 처리합니다.

 

 

   data_list.each(function (index, item) {
        obj_data[item.name] = $(item).val();
    });

`data_list.each(function (index, item) { ... })`는 `data_list`에 포함된 각 요소에 대해 반복문을 실행하는 jQuery의 메서드입니다. 각 요소에 대해 지정된 콜백 함수가 호출됩니다. 콜백 함수는 두 개의 매개변수를 받습니다: `index`와 `item`.

- `index`: 반복문 실행 중 현재 요소의 인덱스입니다.
- `item`: 현재 반복되고 있는 요소 객체입니다.

따라서 `data_list.each()` 메서드를 통해 반복문이 실행될 때마다 콜백 함수가 호출되고, `item`은 현재 반복되고 있는 요소를 가리킵니다.

콜백 함수 내부의 코드 `obj_data[item.name] = $(item).val();`는 현재 요소의 `name` 속성 값을 키로, 해당 요소의 값(`$(item).val()`)을 값으로 가지는 객체 `obj_data`를 구성합니다. 즉, `obj_data` 객체에 데이터를 추가하는 역할을 합니다.

예를 들어, `data_list`에 `input` 요소들이 포함되어 있다면, `data_list.each()` 메서드는 `input` 요소를 하나씩 순회하면서 각 요소의 `name` 속성과 값(`$(item).val()`)을 `obj_data` 객체에 저장합니다. 이를 통해 사용자의 입력 데이터를 추출하여 `obj_data` 객체에 담을 수 있습니다.

종합적으로, `data_list.each()` 메서드는 `data_list`에 포함된 요소들을 반복하면서 각 요소의 데이터를 추출하여 `obj_data` 객체에 저장하는 역할을 합니다.

 

 

 

// 자재출고 | 유효성 체크
function reason_ck_stock_out(obj_data) {
    var return_ck = true;
    var pattern = /\s/g;

    var fields = [
        {name: '출고일자', value: obj_data.work_date},
        {name: '품번', value: obj_data.part_code},
        {name: '수량', value: obj_data.loc_code},
        {name: '수량', value: obj_data.out_qty}
    ];



    for (var i = 0; i < fields.length; i++) {
        var field = fields[i];
        if (!field.value) {
            alert(field.name + '을(를) 올바르게 입력해주세요.');
            return_ck = false;
            break;
        } else if (field.name == '품명' && pattern.test(field.value)) {
            alert('품명에 스페이스바를 치지 마세요.');
            return_ck = false;
            break;
        }
    }


    return return_ck;
}

위의 코드는 `reason_ck_stock_out`라는 함수를 정의하고 있습니다. 이 함수는 `obj_data`라는 객체를 매개변수로 받으며, 데이터 유효성을 확인하는 기능을 가지고 있습니다. 함수 내부의 동작을 각 코드 블록 별로 설명해드리겠습니다:

1. `var return_ck = true;`:
   - `return_ck` 변수를 선언하고 초기값을 `true`로 설정합니다.
   - 이 변수는 함수의 최종 반환값을 나타내며, 초기에는 유효성 검사를 통과했다고 가정합니다.

2. `var pattern = /\s/g;`:
   - `pattern` 변수를 선언하고 정규 표현식 `/\\s/g`를 할당합니다.
   - 이 정규 표현식은 공백 문자를 나타냅니다.

3. `var fields = [...]`:
   - `fields` 변수를 선언하고 배열로 초기화합니다.
   - 배열의 각 요소는 `name`과 `value`라는 속성을 가지고 있으며, 유효성을 검사할 필드의 이름과 해당 필드의 값을 담고 있습니다.

4. `for (var i = 0; i < fields.length; i++) { ... }`:
   - `fields` 배열을 반복하면서 각 필드의 유효성을 검사합니다.
   - 반복문 내부의 코드 블록은 각 필드에 대해 실행됩니다.

5. `var field = fields[i];`:
   - 현재 반복되고 있는 필드를 `field` 변수에 할당합니다.

6. `if (!field.value) { ... }`:
   - 필드의 값이 없는 경우 실행됩니다.
   - 경고창을 통해 해당 필드의 이름과 "올바르게 입력해주세요." 메시지를 출력합니다.
   - `return_ck` 값을 `false`로 변경합니다.
   - `break;` 문으로 반복문을 종료합니다.

7. `else if (field.name == '품명' && pattern.test(field.value)) { ... }`:
   - 필드의 이름이 "품명"이고, 해당 필드의 값에 공백 문자가 포함되어 있는 경우 실행됩니다.
   - 경고창을 통해 "품명에 스페이스바를 치지 마세요." 메시지를 출력합니다.
   - `return_ck` 값을 `false`로 변경합니다.
   - `break;` 문으로 반복문을 종료합니다.

8. `return return_ck;`:
   - 최종적인 `return_ck` 값을 반환합니다.
   - 이 값은 유효성 검사를 통과한 경우 `true`이며, 그렇지 않은 경우 `false`입니다.

따라서 `reason_ck_stock_out` 함수는 `obj_data` 객체의 필드들을 검사하여 유효성을 판단하고,
최종적으로 유효성 검사 결과를 반환합니다.
이 를 통해 데이터 저장 이전에 필수 필드가 비어있거나 공백 문자를 포함하는지 등을 확인할 수 있습니다.

 

 

function getModalData() {
    $("#box_part_code").change(function() {
        var partCode = $(this).val();


        $.ajax({
            url: "/getPartInfo",
            method: "GET",
            data: { part_code: partCode},
            dataType :'json',
            success: function(data) {
                console.log(data);
                if (data.length > 0) {
                    var partInfo = data[0];
                    $('#part_name').val(partInfo.part_name);
                    $('#model_name').val(partInfo.model_name);
                    $('#supp_name').val(partInfo.supp_name);
                } else {
                    // 데이터를 가져오지 못한 경우 에러 처리
                    console.log("Failed to fetch part information");
                }
            },
            error: function() {
                console.log("Error occurred while fetching part information");
            }
        });
    });
}

위의 코드는 `getModalData`라는 함수를 정의하고 있습니다. 이 함수는 모달 창에서 품번을 선택하면 해당 품번에 대한 정보를 가져와서 화면에 표시하는 기능을 가지고 있습니다. 함수 내부의 동작을 각 코드 블록 별로 설명해드리겠습니다:

1. `$("#box_part_code").change(function() { ... })`:
   - `box_part_code`라는 id를 가진 요소의 `change` 이벤트를 처리하는 함수를 등록합니다.
   - 품번이 변경되었을 때 해당 이벤트가 발생하고, 아래의 코드 블록이 실행됩니다.

2. `var partCode = $(this).val();`:
   - 변경된 품번 값을 가져와 `partCode` 변수에 할당합니다.
   - `$(this).val()`는 `box_part_code` 요소의 현재 선택된 값, 즉 변경된 품번을 가져옵니다.

3. `$.ajax({ ... })`:
   - AJAX 요청을 생성하여 품번에 대한 정보를 서버로부터 비동기적으로 가져옵니다.
   - `url`은 "/getPartInfo"로 설정되어 있으며, 해당 URL에 GET 요청을 보냅니다.
   - `data`는 `{ part_code: partCode }` 형태로 설정되어 있으며, 품번을 매개변수로 서버에 전달합니다.
   - `dataType`은 'json'으로 설정되어 있으며, 서버 응답을 JSON 형식으로 받을 것을 명시합니다.

4. `success: function(data) { ... }`:
   - AJAX 요청이 성공적으로 완료되었을 때 실행되는 콜백 함수입니다.
   - 서버로부터 받은 데이터는 `data` 매개변수로 전달됩니다.
   - `console.log(data);`를 통해 데이터를 출력합니다.

5. `if (data.length > 0) { ... } else { ... }`:
   - 데이터 배열의 길이가 0보다 큰 경우 실행됩니다. 즉, 데이터가 존재하는 경우입니다.
   - `data[0]`를 통해 첫 번째 데이터 객체를 가져옵니다.


   - 가져온 데이터 객체에서 필요한 속성 값을 추출하여 각각의 필드에 설정합니다.
     - `partInfo.part_name`을 `#part_name` 요소의 값으로 설정합니다.
     - `partInfo.model_name`을 `#model_name` 요소의 값으로 설정합니다.
     - `partInfo.supp_name`을 `#supp_name` 요소의 값으로 설정합니다.

6. `else { ... }`:
   - 데이터를 가져오지 못한 경우, 즉 데이터 배열의 길이가 0인 경우 실행됩니다.
   - 콘솔에 "Failed to fetch part information" 메시지를 출력합니다.

7. `error: function() { ... }`:
   - AJAX 요청이 실패한 경우 실행되는 콜

백 함수입니다.
   - 콘솔에 "Error occurred while fetching part information" 메시지를 출력합니다.

위의 코드는 `box_part_code` 요소의 값이 변경될 때마다 AJAX 요청을 통해 해당 품번의 정보를 가져와서 화면에 표시하는 동작을 수행합니다.

'Some Memos > JQGRID' 카테고리의 다른 글

JQGRID #5 getGridParam과 setGridParam 차이  (0) 2023.06.02
JQGRID #4  (0) 2023.05.25
JQGRID 메모  (0) 2023.03.28