기능을 구현하다보면 이런 경우가 있다.
| tbl_item_master : item_seq , item_name tbl_set_items : mst_item_seq, item_seq, item_name |
item 테이블에는 품목 정보가 있고
set 테이블에는 품목들이 세트로 구성된 세트 품목 정보가 있다.
예를 들면 세트품1에는 품목1,품목2 데이터가 속하는 경우..
(mst_item_seq 컬럼 [tbl_item_master] 에는 세트품인 품목의 itemSeq 품목 시퀀스가 들어감)
화면에 아이템 정보를 출력하면서,
이 아이템이 세트품목인지 그냥 품목인지 체크박스에 표시를 한다고 할 때
set 테이블의 mst_item_seq [master테이블] 에 item_seq가 저장되어있는지 확인하면 된다.
이 품목 코드가 세트품 테이블에 master 코드로 저장되어있는지를 확인하는 것이다.
이때 세트인지 여부를 hasSetItems 에 담아 화면으로 보내고
SELECT
item_name, item_seq,
CASE WHEN si.mst_item_seq IS NOT NULL THEN 1 ELSE 0 END AS hasSetItems,
CASE WHEN oi.item_seq IS NOT NULL THEN 1 ELSE 0 END AS isOrdered
FROM 테이블
WHERE 조건
컬럼명을 동일하게 연결해주면 된다.
{Header: "구성여부", Name: "hasSetItems", Type: "Bool", Align: "Center", NoChanged: true, CanEdit: 1, RelWidth: 2},

그럼 hasSetItems 가 1이면 (true) check박스에 표시가 되고
0이면 (false) 표시되지 않는다.
만약, alias 와 시트 컬럼명을 다르게 하는 경우
예를 들어 쿼리의 alias는 hasSetItems인데 시트 컬럼의 Name : "set" 인 경우라면
데이터를 조회해서 받는 이벤트에
(IBSheet의 경우 onReceiveData )
hasSetItems가 있으면 row.check 에 true 값을 담는다. 아니면 false !
아마 이건 IBSheet 가 자동으로 처리하는 것 같은데
Bool 타입인 컬럼은 check 가 됐냐 안됐냐로 인식하기 때문에
row.check 를 true 로 주면 체크표시가 된다.
근데 check 열이 두 개 이상인 경우엔 어떻게 구분하는지 모르겠네 ?
// 체크값, 발주여부 세팅
list.forEach(row => {
row.check = !!row.hasSetItems;
row.isOrdered = row.isOrdered === 1;
});

그리고 데이터 필터링(조회) 기능으로
데이터를 받는 IBSheet 이벤트에서 동일하게
const filtered = list.filter(row => {
switch(itemCheck.value) {
case 1: // ALL
return true;
case 2: // 존재하는 항목만
return row.hasSetItems === 1;
case 3: // 존재하지 않는 항목만
return row.hasSetItems === 0;
default:
return true;
}
});
템플릿
<v-select
v-model="itemCheck"
:items="optionsCheck"
@update:modelValue="doSearchSheet1"
item-title="text"
item-value="value"
:label="_t('page.setItems.setInclusion')"
density="compact"
variant="outlined"/>
v-select 필드에 itemCheck 를 v-model 로 해두면
데이터가 필터링되어 조회된다.

이건 이벤트 전체 코드
onReceiveData: (param) => {
try {
const raw = JSON.parse(param.data);
const list = raw.data?.list || [];
// 체크값, 발주여부 세팅
list.forEach(row => {
// row.check = !!row.hasSetItems;
row.isOrdered = row.isOrdered === 1;
});
// itemCheck 필터링
const filtered = list.filter(row => {
switch(itemCheck.value) {
case 1: // ALL
return true;
case 2: // 존재하는 항목만
return row.hasSetItems === 1;
case 3: // 존재하지 않는 항목만
return row.hasSetItems === 0;
default:
return true;
}
});
return {
data: filtered
};
} catch (e) {
consoleLog("onReceiveData JSON 파싱 오류:", e);
return {
data: []
};
}
}
'웹 개발 > IBSheet8' 카테고리의 다른 글
| [IBSheet] 시트 우측 마우스 메뉴, 컬럼 정보 저장 (헤더 순서 변경) (0) | 2025.12.30 |
|---|---|
| [IBSheet] 줄바꿈 (헤더, 셀) (0) | 2025.11.05 |
| [IBSheet] getRowsByChecked 와 getSaveJson 차이 (0) | 2025.10.10 |
| [IBSheet] onClick 이벤트로 이미지파일 dialog 띄우기 (직접띄우기 & 자식dialog참조하기) (0) | 2025.10.09 |
| [IBSheet] 시트 내 이미지 삽입 / 반환타입과 파라미터요청, JSON요청(1) (3) | 2025.08.01 |