화면 UI 컨트롤 개발 퀵 가이드
개요
HandStack은 다양한 UI 컨트롤을 제공하여 효율적인 웹 애플리케이션 개발을 지원합니다. 본 문서는 주요 UI 컨트롤들의 사용법과 메서드를 설명합니다.
목차
- syn.uicontrols.$auigrid - 데이터 그리드
- syn.uicontrols.$codepicker - 코드 도움 팝업
- syn.uicontrols.$contextmenu - 컨텍스트 메뉴
- syn.uicontrols.$dateperiodpicker - 기간 선택기
- syn.uicontrols.$datepicker - 날짜 선택기
- syn.uicontrols.$fileclient - 파일 업로드/다운로드
- syn.uicontrols.$select - 드롭다운 목록
syn.uicontrols.$auigrid
개요
$auigrid는 대량의 데이터를 효과적으로 표시하고 편집할 수 있는 그리드 컴포넌트입니다. 상용 라이브러리인 AUIGrid를 기반으로 합니다.
기본 사용법
HTML 마크업
<syn_auigrid id="grdDataGrid" syn-options="{
width: 800,
height: 400,
columns: [
['ID', 'ID', 100, false, 'text', false, 'center'],
['Name', '이름', 200, true, 'text', false, 'left'],
['Age', '나이', 100, true, 'numeric', false, 'right']
]
}" syn-events="['afterSelectionEnd']"></syn_auigrid>
JavaScript 이벤트 처리
grdDataGrid_afterSelectionEnd(elID, rowIndex, columnIndex, dataField, value) {
console.log('선택된 행:', rowIndex, '열:', columnIndex);
}
주요 메서드
데이터 관련 메서드
clear
그리드의 모든 데이터를 지웁니다.
syn.uicontrols.$auigrid.clear('grdDataGrid');
setValue
그리드에 데이터를 설정합니다.
var data = [
{ID: 1, Name: '홍길동', Age: 30},
{ID: 2, Name: '김철수', Age: 25}
];
syn.uicontrols.$auigrid.setValue('grdDataGrid', data);
getGridData
그리드의 모든 데이터를 가져옵니다.
var allData = syn.uicontrols.$auigrid.getGridData('grdDataGrid');
행(Row) 관련 메서드
insertRow
새로운 행을 추가합니다.
syn.uicontrols.$auigrid.insertRow('grdDataGrid', {
amount: 1
});
removeRow
선택된 행을 삭제합니다.
syn.uicontrols.$auigrid.removeRow('grdDataGrid');
removeRowByRowId
특정 행 ID로 행을 삭제합니다.
syn.uicontrols.$auigrid.removeRowByRowId('grdDataGrid', 'rowId');
countRows
총 행 수를 반환합니다.
var rowCount = syn.uicontrols.$auigrid.countRows('grdDataGrid');
updateRows
여러 행을 업데이트합니다.
syn.uicontrols.$auigrid.updateRows('grdDataGrid', updatedData);
셀(Cell) 관련 메서드
getDataAtCell
특정 셀의 데이터를 가져옵니다.
var cellValue = syn.uicontrols.$auigrid.getDataAtCell('grdDataGrid', 0, 1);
setDataAtCell
특정 셀에 데이터를 설정합니다.
syn.uicontrols.$auigrid.setDataAtCell('grdDataGrid', 0, 1, '새로운 값');
setDataAtRow
특정 행의 여러 셀에 데이터를 설정합니다.
var rowData = [
[0, 0, 'ID값'],
[0, 1, '이름값'],
[0, 2, '나이값']
];
syn.uicontrols.$auigrid.setDataAtRow('grdDataGrid', rowData);
getSourceDataAtRow
특정 행의 원본 데이터를 가져옵니다.
var rowData = syn.uicontrols.$auigrid.getSourceDataAtRow('grdDataGrid', 0);
선택 관련 메서드
selectCell
특정 셀을 선택합니다.
syn.uicontrols.$auigrid.selectCell('grdDataGrid', 0, 1);
getActiveRowIndex
현재 활성화된 행의 인덱스를 반환합니다.
var activeRow = syn.uicontrols.$auigrid.getActiveRowIndex('grdDataGrid');
getActiveColIndex
현재 활성화된 열의 인덱스를 반환합니다.
var activeCol = syn.uicontrols.$auigrid.getActiveColIndex('grdDataGrid');
열(Column) 관련 메서드
getColumnInfoList
열 정보 목록을 가져옵니다.
var columnInfo = syn.uicontrols.$auigrid.getColumnInfoList('grdDataGrid');
getColumnValues
특정 열의 모든 값을 가져옵니다.
var columnValues = syn.uicontrols.$auigrid.getColumnValues('grdDataGrid', 'Name');
setColumnPosition
열의 위치를 변경합니다.
syn.uicontrols.$auigrid.setColumnPosition('grdDataGrid', 'columnName', newPosition);
setColumnProperty
열의 속성을 설정합니다.
syn.uicontrols.$auigrid.setColumnProperty('grdDataGrid', 'columnName', 'width', 200);
setColumnWidth
열의 너비를 설정합니다.
syn.uicontrols.$auigrid.setColumnWidth('grdDataGrid', 'columnName', 150);
visibleColumns
열의 표시/숨김을 설정합니다.
syn.uicontrols.$auigrid.visibleColumns('grdDataGrid', [1, 2], false); // 숨김
syn.uicontrols.$auigrid.visibleColumns('grdDataGrid', [1, 2], true); // 표시
필터 관련 메서드
addCondition
필터 조건을 추가합니다.
syn.uicontrols.$auigrid.addCondition('grdDataGrid', 'Name', 'contains', '홍길동');
clearConditions
모든 필터 조건을 지웁니다.
syn.uicontrols.$auigrid.clearConditions('grdDataGrid');
유틸리티 메서드
getInitializeColumns
컬럼 초기화 정보를 가져옵니다.
var initColumns = syn.uicontrols.$auigrid.getInitializeColumns('grdDataGrid');
getSettings
그리드 설정을 가져옵니다.
var settings = syn.uicontrols.$auigrid.getSettings('grdDataGrid');
updateSettings
그리드 설정을 업데이트합니다.
syn.uicontrols.$auigrid.updateSettings('grdDataGrid', newSettings);
setControlSize
그리드의 크기를 설정합니다.
syn.uicontrols.$auigrid.setControlSize('grdDataGrid', {width: 1000, height: 500});
setFitColumnSize
열 크기를 자동 맞춤합니다.
syn.uicontrols.$auigrid.setFitColumnSize('grdDataGrid');
변환 메서드
colToProp
열 인덱스를 속성명으로 변환합니다.
var propName = syn.uicontrols.$auigrid.colToProp('grdDataGrid', 1);
propToCol
속성명을 열 인덱스로 변환합니다.
var colIndex = syn.uicontrols.$auigrid.propToCol('grdDataGrid', 'Name');
getPhysicalRowIndex
논리적 행 인덱스를 물리적 행 인덱스로 변환합니다.
var physicalIndex = syn.uicontrols.$auigrid.getPhysicalRowIndex('grdDataGrid', 0);
검증 메서드
checkEditValue
편집된 값의 유효성을 검사합니다.
var isValid = syn.uicontrols.$auigrid.checkEditValue('grdDataGrid', value);
checkEmptyValueCol
특정 열의 빈 값을 확인합니다.
var isEmpty = syn.uicontrols.$auigrid.checkEmptyValueCol('grdDataGrid', 'columnName');
checkUniqueValueCol
특정 열의 고유값을 확인합니다.
var isUnique = syn.uicontrols.$auigrid.checkUniqueValueCol('grdDataGrid', 'columnName');
checkValueCountCol
특정 열의 값 개수를 확인합니다.
var count = syn.uicontrols.$auigrid.checkValueCountCol('grdDataGrid', 'columnName');
Flag 관련 메서드
getFlag
특정 행의 플래그 상태를 가져옵니다.
var flag = syn.uicontrols.$auigrid.getFlag('grdDataGrid', rowIndex);
setFlag
특정 행의 플래그 상태를 설정합니다.
syn.uicontrols.$auigrid.setFlag('grdDataGrid', rowIndex, 'U'); // Update flag
레이아웃 메서드
changeColumnLayout
컬럼 레이아웃을 변경합니다.
syn.uicontrols.$auigrid.changeColumnLayout('grdDataGrid', newLayout);
getItemsByValue
특정 값으로 아이템을 검색합니다.
var items = syn.uicontrols.$auigrid.getItemsByValue('grdDataGrid', 'searchValue');
getPhysicalColText
물리적 열의 텍스트를 가져옵니다.
var colText = syn.uicontrols.$auigrid.getPhysicalColText('grdDataGrid', colIndex);
이벤트
afterSelectionEnd
셀 선택이 완료된 후 발생하는 이벤트입니다.
grdDataGrid_afterSelectionEnd(elID, rowIndex, columnIndex, dataField, value) {
// 선택 완료 후 처리 로직
}
예제
기본 그리드 구성 예제
// 데이터 설정
var gridData = [
{ID: 1, Name: '홍길동', Age: 30, Department: '개발팀'},
{ID: 2, Name: '김철수', Age: 25, Department: '기획팀'},
{ID: 3, Name: '이영희', Age: 28, Department: '디자인팀'}
];
// 그리드에 데이터 로드
syn.uicontrols.$auigrid.setValue('grdDataGrid', gridData);
// 특정 셀 값 변경
syn.uicontrols.$auigrid.setDataAtCell('grdDataGrid', 0, 1, '홍길순');
// 새 행 추가
syn.uicontrols.$auigrid.insertRow('grdDataGrid', {amount: 1});
// 필터 적용
syn.uicontrols.$auigrid.addCondition('grdDataGrid', 'Department', 'equals', '개발팀');
주의사항
- AUIGrid는 상용 라이브러리이므로 라이센스를 확인해야 합니다.
- 대량의 데이터를 처리할 때는 가상화 옵션을 고려해야 합니다.
- 그리드의 열 구성은 초기 설정에서 정의해야 합니다.
- 데이터 변경 시 플래그(Flag) 상태를 적절히 관리해야 합니다.
참고자료
syn.uicontrols.$codepicker
개요
$codepicker는 코드 도움 팝업 기능을 제공하는 컴포넌트입니다. 사용자가 코드를 직접 입력하거나 팝업에서 선택할 수 있습니다.
기본 사용법
HTML 마크업
<syn_codepicker id="chpSubjectID" syn-datafield="SubjectID"
syn-options="{
belongID: 'LD01',
dataSourceID: 'CHP005',
local: false,
isMultiSelect: false,
textBelongID: ['LD01', 'MD01'],
textDataFieldID: 'CodeText'
}">
</syn_codepicker>
JavaScript 이벤트 처리
chpSubjectID_change(previousValue, previousText, changeValue) {
console.log('코드 변경:', changeValue);
}
주요 메서드
getValue
코드 값을 가져옵니다.
var codeValue = syn.uicontrols.$codepicker.getValue('chpSubjectID');
setValue
코드 값을 설정합니다.
syn.uicontrols.$codepicker.setValue('chpSubjectID', 'HELLO');
setText
텍스트 값을 설정합니다.
syn.uicontrols.$codepicker.setText('chpSubjectID', 'WORLD');
clear
코드와 텍스트를 모두 지웁니다.
syn.uicontrols.$codepicker.clear('chpSubjectID');
open
코드 도움 팝업을 엽니다.
syn.uicontrols.$codepicker.open('chpSubjectID');
유틸리티 메서드
toParameterString
JSON 객체를 매개변수 문자열로 변환합니다.
var parameterString = syn.uicontrols.$codepicker.toParameterString({
ApplicationID: 1,
ApplicationName: 'HELLO WORLD'
});
// 결과: "@ApplicationID:1;@ApplicationName:HELLO WORLD;"
toParameterObject
매개변수 문자열을 JSON 객체로 변환합니다.
var parameterObject = syn.uicontrols.$codepicker.toParameterObject('@ApplicationID:1;@ApplicationName:HELLO WORLD;');
// 결과: {ApplicationID: '1', ApplicationName: 'HELLO WORLD'}
설정 옵션
기본 설정
syn_options="{
dataSourceID: null, // 데이터 소스 ID
storeSourceID: null, // 저장 소스 ID
local: true, // 로컬 데이터 사용 여부
parameters: '', // 매개변수
isMultiSelect: false, // 다중 선택 여부
isAutoSearch: true, // 자동 검색 여부
isOnlineData: false, // 온라인 데이터 사용 여부
viewType: '', // 뷰 타입
textBelongID: null, // 텍스트 필드 그룹 ID
textDataFieldID: null, // 텍스트 데이터 필드 ID
searchValue: '', // 검색 값
searchText: '', // 검색 텍스트
readonly: false, // 읽기 전용 여부
disabled: false, // 비활성화 여부
required: false // 필수 입력 여부
}"
이벤트
change
코드 값이 변경될 때 발생하는 이벤트입니다.
chpSubjectID_change(previousValue, previousText, changeValue) {
console.log('이전 값:', previousValue);
console.log('이전 텍스트:', previousText);
console.log('변경된 값:', changeValue);
}
예제
기본 코드픽커 구성 예제
<syn_codepicker id="chpDepartmentCode" syn-datafield="DepartmentCode"
syn-options="{
belongID: 'LD01',
dataSourceID: 'DEPT_CODE',
local: true,
textDataFieldID: 'DepartmentName',
textBelongID: ['LD01'],
required: true
}"
syn-events="['change']">
</syn_codepicker>
chpDepartmentCode_change(previousValue, previousText, changeValue) {
// 부서 코드 변경 시 관련 필드 업데이트
if (changeValue && changeValue.length > 0) {
var department = changeValue[0];
syn.$l.get('txtDepartmentName').value = department.text;
}
}
다중 선택 코드픽커 예제
<syn_codepicker id="chpSkillCodes" syn-datafield="SkillCodes"
syn-options="{
belongID: 'LD01',
dataSourceID: 'SKILL_CODE',
local: false,
isMultiSelect: true,
parameters: '@CompanyNo:001;'
}">
</syn_codepicker>
// 매개변수를 동적으로 설정하는 경우
$this.hook.frameEvent = function(eventName, jsonObject) {
if (eventName == 'codeInit') {
if (jsonObject.elID == 'chpSkillCodes') {
jsonObject.parameters = '@CompanyNo:' + syn.$w.User.CompanyNo + ';';
}
}
return jsonObject;
}
코드 반환 처리 예제
$this.hook.frameEvent = function(eventName, jsonObject) {
if (eventName == 'codeReturn') {
if (jsonObject.elID == 'chpSubjectID') {
console.log('선택된 항목들:', jsonObject.result);
// 추가 처리 로직
for (var i = 0; i < jsonObject.result.length; i++) {
var item = jsonObject.result[i];
console.log('값:', item.value, '텍스트:', item.text);
}
}
}
}
주의사항
dataSourceID를 반드시 설정해야 코드 도움 팝업이 동작 합니다.textDataFieldID를 설정하지 않으면 텍스트 필드가 생성되지 않습니다.local: false로 설정하면 서버에서 데이터를 동적으로 가져옵니다.- 다중 선택 시에는 반환값이 배열 형태입니다.
- 매개변수는
@ParameterName:Value;형식으로 전달해야 합니다.
syn.uicontrols.$contextmenu
개요
$contextmenu는 우클릭 컨텍스트 메뉴 기능을 제공하는 컴포넌트입니다. jQuery UI Contextmenu를 기반으로 합니다.
기본 사용법
HTML 마크업
<syn_contextmenu id="ctxButtonControl" syn-options="{
target: 'div',
delegate: 'input[type=button]'
}" syn-events="['close', 'beforeOpen', 'open', 'select']">
</syn_contextmenu>
JavaScript 이벤트 처리
ctxButtonControl_select(evt, ui) {
console.log('메뉴 선택:', ui.cmd);
}
주요 메서드
open
컨텍스트 메뉴를 엽니다.
syn.uicontrols.$contextmenu.open('ctxButtonControl');
getControl
컨트롤의 기본 객체를 반환합니다.
var contextMenuControl = syn.uicontrols.$contextmenu.getControl('ctxButtonControl');
설정 옵션
기본 설정
syn_options="{
target: 'targetCSSSelector', // 대상 CSS 선택자
delegate: 'delegateCSSSelector', // 위임 CSS 선택자
autoFocus: true, // 자동 포커스
closeOnWindowBlur: true, // 윈도우 블러 시 닫기
hide: false, // 숨김 애니메이션
show: false, // 표시 애니메이션
menu: [ // 메뉴 항목 설정
{ title: 'Cut', cmd: 'cut' },
{ title: 'Copy', cmd: 'copy', uiIcon: 'ui-icon-copy' },
{ title: '---' }, // 구분선
{
title: 'More',
children: [ // 하위 메뉴
{ title: 'Sub 1', cmd: 'sub1' },
{ title: 'Sub 2', cmd: 'sub2' }
]
}
]
}"
이벤트
close
메뉴가 닫힐 때 발생하는 이벤트입니다.
ctxButtonControl_close(evt, ui) {
console.log('컨텍스트 메뉴가 닫혔습니다.');
}
beforeOpen
메뉴가 열리기 전에 발생하는 이벤트입니다.
ctxButtonControl_beforeOpen(evt, ui) {
console.log('컨텍스트 메뉴가 열리기 전입니다.');
// 메뉴 항목 동적 변경 등의 처리 가능
}
open
메뉴가 열린 후 발생하는 이벤트입니다.
ctxButtonControl_open(evt, ui) {
console.log('컨텍스트 메뉴가 열렸습니다.');
}
select
메뉴 항목이 선택될 때 발생하는 이벤트입니다.
ctxButtonControl_select(evt, ui) {
console.log('선택된 명령:', ui.cmd);
switch (ui.cmd) {
case 'cut':
// 잘라내기 처리
break;
case 'copy':
// 복사 처리
break;
case 'sub1':
// 하위 메뉴 1 처리
break;
}
}
예제
기본 컨텍스트 메뉴 예제
<div id="contentArea">
<button type="button">버튼 1</button>
<button type="button">버튼 2</button>
<button type="button">버튼 3</button>
</div>
<syn_contextmenu id="ctxContentMenu" syn-options="{
target: '#contentArea',
delegate: 'button',
menu: [
{ title: '편집', cmd: 'edit', uiIcon: 'ui-icon-pencil' },
{ title: '삭제', cmd: 'delete', uiIcon: 'ui-icon-trash' },
{ title: '---' },
{
title: '더보기',
children: [
{ title: '복제', cmd: 'duplicate' },
{ title: '이동', cmd: 'move' },
{ title: '속성', cmd: 'properties' }
]
}
]
}" syn-events="['select', 'beforeOpen']">
</syn_contextmenu>
ctxContentMenu_beforeOpen(evt, ui) {
// 선택된 버튼에 따라 메뉴 항목 활성화/비활성화
var targetButton = evt.delegateTarget;
var buttonText = targetButton.textContent;
// 동적으로 메뉴 제목 변경
var contextMenu = syn.uicontrols.$contextmenu.getControl('ctxContentMenu');
contextMenu.context.contextmenu('setTitle', 'edit', buttonText + ' 편집');
}
ctxContentMenu_select(evt, ui) {
var targetButton = evt.delegateTarget;
var buttonText = targetButton.textContent;
switch (ui.cmd) {
case 'edit':
alert(buttonText + ' 버튼을 편집합니다.');
break;
case 'delete':
if (confirm(buttonText + ' 버튼을 삭제하시겠습니까?')) {
targetButton.remove();
}
break;
case 'duplicate':
var newButton = targetButton.cloneNode(true);
newButton.textContent = buttonText + ' 복제';
targetButton.parentNode.appendChild(newButton);
break;
case 'properties':
alert(buttonText + ' 속성 창을 엽니다.');
break;
}
}
테이블 행 컨텍스트 메뉴 예제
<table id="dataTable">
<thead>
<tr>
<th>이름</th>
<th>나이</th>
<th>부서</th>
</tr>
</thead>
<tbody>
<tr data-id="1">
<td>홍길동</td>
<td>30</td>
<td>개발팀</td>
</tr>
<tr data-id="2">
<td>김철수</td>
<td>25</td>
<td>기획팀</td>
</tr>
</tbody>
</table>
<syn_contextmenu id="ctxTableMenu" syn-options="{
target: '#dataTable',
delegate: 'tbody tr',
menu: [
{ title: '상세보기', cmd: 'detail' },
{ title: '수정', cmd: 'edit' },
{ title: '삭제', cmd: 'delete' },
{ title: '---' },
{ title: '위로 이동', cmd: 'moveUp' },
{ title: '아래로 이동', cmd: 'moveDown' }
]
}" syn-events="['select']">
</syn_contextmenu>
ctxTableMenu_select(evt, ui) {
var targetRow = evt.delegateTarget;
var rowId = targetRow.getAttribute('data-id');
var name = targetRow.cells[0].textContent;
switch (ui.cmd) {
case 'detail':
alert('ID: ' + rowId + ', 이름: ' + name + '의 상세 정보');
break;
case 'edit':
// 수정 로직
break;
case 'delete':
if (confirm(name + '을(를) 삭제하시겠습니까?')) {
targetRow.remove();
}
break;
case 'moveUp':
var prevRow = targetRow.previousElementSibling;
if (prevRow) {
targetRow.parentNode.insertBefore(targetRow, prevRow);
}
break;
case 'moveDown':
var nextRow = targetRow.nextElementSibling;
if (nextRow) {
targetRow.parentNode.insertBefore(nextRow, targetRow);
}
break;
}
}
주의사항
- jQuery UI Contextmenu 라이브러리가 필요합니다.
target과delegate설정을 통해 메뉴가 적용될 대상을 정확히 지정해야 합니다.- 메뉴 항목의
cmd속성은 고유해야 합니다. - 구분선은
{ title: '---' }로 표시합니다. - 아이콘은 jQuery UI의 아이콘 클래스를 사용합니다.
참고자료
syn.uicontrols.$dateperiodpicker
개요
$dateperiodpicker는 기간 선택 기능을 제공하는 컴포넌트입니다. 시작일과 종료일을 쉽게 선택할 수 있습니다.
기본 사용법
HTML 마크업
<div class="input-group">
<syn_dateperiodpicker id="dtpInputRangeAt" syn-datafield="InputRangeAt" syn-options="{
value: 'day:-7',
belongID: ['LD01']
}"></syn_dateperiodpicker>
</div>
JavaScript 이벤트 처리
dtpInputRangeAt_onselect(elID, dateType, date) {
console.log('기간 선택:', elID, dateType, date);
}
dtpInputRangeAt_onconfirm(elID, startDate, endDate) {
console.log('기간 확정:', startDate, '~', endDate);
}
주요 메서드
getValue
선택된 기간 값을 가져옵니다.
var periodValue = syn.uicontrols.$dateperiodpicker.getValue('dtpInputRangeAt');
// 반환값: "2023-01-01 ~ 2023-01-31"
setValue
기간 값을 설정합니다.
syn.uicontrols.$dateperiodpicker.setValue('dtpInputRangeAt', '2023-01-01,2023-01-31');
clear
기간 값을 지웁니다.
syn.uicontrols.$dateperiodpicker.clear('dtpInputRangeAt');
getControl
컨트롤 정보를 가져옵니다.
var control = syn.uicontrols.$dateperiodpicker.getControl('dtpInputRangeAt');
if (control) {
console.log('시작일 텍스트박스 ID:', control.textbox1ID);
console.log('종료일 텍스트박스 ID:', control.textbox2ID);
}
설정 옵션
기본 설정
syn_options="{
width: '100%', // 너비
value: '', // 기본값 ('day:-7', 'month:1' 등)
defaultDate: null, // 기본 날짜
setDefaultDate: false, // 기본 날짜 설정 여부
minDate: null, // 최소 날짜
maxDate: null, // 최대 날짜
bound: false, // 바인딩 설정
format: 'YYYY-MM-DD', // 날짜 형식
ariaLabel: '날짜를 선택 하세요', // 접근성 라벨
showWeekNumber: false, // 주차 번호 표시
showMonthAfterYear: true, // 연도 뒤에 월 표시
showDaysInNextAndPreviousMonths: true, // 이전/다음 월 일 표시
enableSelectionDaysInNextAndPreviousMonths: true, // 이전/다음 월 일 선택 가능
yearSuffix: '년', // 연도 접미사
firstDay: 0, // 주의 시작 요일 (0: 일요일)
numberOfMonths: 1, // 표시할 월 수
startDataFieldID: '', // 시작일 데이터 필드 ID
endDataFieldID: '', // 종료일 데이터 필드 ID
belongID: null // 소속 그룹 ID
}"
기간 설정 버튼
기간 선택 팝업에는 다음과 같은 편의 버튼들이 제공됩니다:
- 올해: 현재 연도의 1월 1일 ~ 12월 31일
- 오늘까지: 현재 연도의 1월 1일 ~ 오늘
- 오늘: 오늘 날짜
- 전일: 어제 날짜
- 주간: 이번 주 (일요일 ~ 토요일)
- 전주: 지난 주
- 당월: 이번 달
- 이전달: 지난 달
- 전년도: 작년 전체
- 전전년도: 재작년 전체
- 1분기 ~ 4분기: 각 분기별 기간
- 상반기: 1월 ~ 6월
- 하반기: 7월 ~ 12월
- 월별 체크박스: 특정 월들을 선택
이벤트
onselect
날짜가 선택될 때 발생하는 이벤트입니다.
dtpInputRangeAt_onselect(elID, dateType, date) {
console.log('컨트롤 ID:', elID);
console.log('날짜 타입:', dateType); // 'startedAt' 또는 'endedAt'
console.log('선택된 날짜:', date);
if (dateType === 'startedAt') {
console.log('시작일이 선택됨');
} else if (dateType === 'endedAt') {
console.log('종료일이 선택됨');
}
}
onconfirm
확인 버튼을 눌러 기간이 확정될 때 발생하는 이벤트입니다.
dtpInputRangeAt_onconfirm(elID, startDate, endDate) {
console.log('컨트롤 ID:', elID);
console.log('확정된 시작일:', startDate);
console.log('확정된 종료일:', endDate);
// 기간 일수 계산
var days = $date.diff(new Date(startDate), new Date(endDate)) + 1;
syn.$l.get('txtPeriodDays').value = days + '일';
// 데이터 조회 등의 후속 처리
loadDataByPeriod(startDate, endDate);
}
function loadDataByPeriod(startDate, endDate) {
// 선택된 기간으로 데이터 조회
console.log('기간별 데이터 조회:', startDate, '~', endDate);
}
예제
기본 기간 선택기 예제
<div class="mb-3">
<label class="form-label">조회 기간</label>
<div class="input-group">
<syn_dateperiodpicker id="dtpSearchPeriod" syn-datafield="SearchPeriod" syn-options="{
value: 'month:-1',
belongID: ['LD01']
}" syn-events="['onselect', 'onconfirm']"></syn_dateperiodpicker>
</div>
</div>
dtpSearchPeriod_onconfirm(elID, startDate, endDate) {
// 선택된 기간으로 데이터 조회
var searchData = {
startDate: startDate,
endDate: endDate
};
// 그리드 데이터 조회
syn.uicontrols.$auigrid.clear('grdSearchResult');
searchDataByPeriod(searchData);
}
function searchDataByPeriod(searchData) {
// 실제 데이터 조회 로직
syn.$w.transactionObject('LD01', 'search');
}
개별 필드로 분리된 예제
<div class="row">
<div class="col-md-12">
<label class="form-label">기간 선택</label>
<div class="input-group">
<syn_dateperiodpicker id="dtpReportPeriod" syn-options="{
value: 'day:-30',
startDataFieldID: 'ReportStartDate',
endDataFieldID: 'ReportEndDate',
belongID: ['LD01']
}" syn-events="['onconfirm']"></syn_dateperiodpicker>
</div>
</div>
</div>
<!-- 개별 필드들 -->
<input type="hidden" id="txtReportStartDate" syn-datafield="ReportStartDate" syn-options="{belongID: ['LD01']}">
<input type="hidden" id="txtReportEndDate" syn-datafield="ReportEndDate" syn-options="{belongID: ['LD01']}">
dtpReportPeriod_onconfirm(elID, startDate, endDate) {
console.log('리포트 기간 설정:', startDate, '~', endDate);
// 개별 필드에도 값 설정 (자동으로 설정되지만 확인용)
console.log('시작일 필드 값:', syn.$l.get('txtReportStartDate').value);
console.log('종료일 필드 값:', syn.$l.get('txtReportEndDate').value);
// 리포트 생성
generateReport(startDate, endDate);
}
function generateReport(startDate, endDate) {
syn.$w.alert('리포트를 생성합니다.\n기간: ' + startDate + ' ~ ' + endDate);
}
유효성 검사가 포함된 예제
<div class="mb-3">
<label class="form-label">유효한 기간 선택 (최대 3개월)</label>
<div class="input-group">
<syn_dateperiodpicker id="dtpValidPeriod" syn-options="{
value: 'month:-1'
}" syn-events="['onconfirm']"></syn_dateperiodpicker>
</div>
</div>
dtpValidPeriod_onconfirm(elID, startDate, endDate) {
// 최대 3개월 제한 검사
var startDateTime = new Date(startDate);
var endDateTime = new Date(endDate);
var diffMonths = (endDateTime.getFullYear() - startDateTime.getFullYear()) * 12 +
(endDateTime.getMonth() - startDateTime.getMonth());
if (diffMonths > 3) {
syn.$w.alert('최대 3개월까지만 선택할 수 있습니다.');
return;
}
// 과거 날짜만 허용
var today = new Date();
if (endDateTime > today) {
syn.$w.alert('미래 날짜는 선택할 수 없습니다.');
return;
}
// 유효한 기간으로 처리
console.log('유효한 기간 선택:', startDate, '~', endDate);
processValidPeriod(startDate, endDate);
}
function processValidPeriod(startDate, endDate) {
// 유효한 기간으로 비즈니스 로직 처리
syn.$w.transactionObject('LD01', 'searchByValidPeriod');
}