Procházet zdrojové kódy

Merge branch 'master' of http://106.246.249.162:13000/orderqueen/oqpo-view

# Conflicts:
#	src/main/webapp/app/oper/OPER01010.html
#	src/main/webapp/app/oper/OPER02010.html
whakdo963 před 2 roky
rodič
revize
d1b154f06a

+ 1 - 0
bin/src/main/webapp/js/app/properties.js

@@ -1,4 +1,5 @@
1 1
 
2 2
 const DOMAIN = 'http://106.246.249.162:38050';
3 3
 const ITP_CONTEXTPATH = '/oqpo-view';
4
+const MOBILE_CONTEXTPATH = ITP_CONTEXTPATH + '/mobile';
4 5
 const ITP_LANGUAGE = 'ko'; 

+ 9 - 5
src/main/webapp/app/oper/OPER01010.html

@@ -21,14 +21,18 @@
21 21
 									<input type="hidden" id="ITP_FORM_OPER01010_SEARCH_AFFL_SHOP_ID" name="safflShopId" value="">
22 22
 									<div class="form-group">
23 23
 										<div class="col-xs-2 itp_ip itp_noMar">
24
+<<<<<<< HEAD
24 25
 											<input type="text" id="ITP_FORM_OPER01010_SEARCH_SPPLY_NM" class="form-control itp_input" name="sspplyNm" placeholder="공급업체" />
26
+=======
27
+											<input type="text" id="ITP_FORM_OPER01010_SEARCH_AFFL_SHOP_NM" class="form-control itp_input" name="safflShopNm" placeholder="가맹점" />
28
+>>>>>>> da01e550b574076cbd788bfaf976c707e73fc61b
25 29
 										</div>
26 30
 										<div class="col-xs-1 itp_in" style="width:8%; padding:0px;">
27
-											<button type="button" id="ITP_BTN_OPER01010_SEARCH_SRH" class="btn btn-success btn-sm SEB" style="display: inline-block;"><i class="glyphicon glyphicon-search"></i></button>
28
-											<button type="button" id="ITP_BTN_OPER01010_SEARCH_MODIFY" class="btn btn-primary btn-sm UPB" style="display: inline-block;"><i class="glyphicon glyphicon-erase"></i></button>
31
+											<button type="button" id="ITP_FORM_OPER01010_SEARCH_AFFL_SHOP" class="btn btn-success btn-sm SEB" style="display: inline-block;"><i class="glyphicon glyphicon-search"></i></button>
32
+											<button type="button" id="ITP_FORM_OPER01010_DELETE_AFFL_SHOP" class="btn btn-primary btn-sm UPB" style="display: inline-block;"><i class="glyphicon glyphicon-erase"></i></button>
29 33
 						                </div>
30 34
 										<div class="col-xs-2 itp_ip itp_noMar">
31
-											<select id="ITP_FORM_OPER01010_SEARCH_BRAND_TYPE" class="form-control itp_input" name="sBrandType"></select>
35
+											<select id="ITP_FORM_OPER01010_SEARCH_BRAND_ID" class="form-control itp_input" name="sbrandId"></select>
32 36
 										</div>									
33 37
 									</div>
34 38
 									<div class="form-group" style="padding-top: 10px; border-top: 1px dotted #ccc;">
@@ -48,10 +52,10 @@
48 52
 											<input type="text" id="ITP_FORM_OPER01010_SEARCH_USER_NM" class="form-control itp_input" name="suserNm" placeholder="아이디/성명 검색" />
49 53
 										</div>
50 54
 										<div class="col-xs-2 itp_ip itp_noMar">
51
-											<select id="ITP_FORM_OPER01010_SEARCH_BRAND_TYPE" class="form-control itp_input" name="sBrandType"></select>
55
+											<select id="ITP_FORM_OPER01010_SEARCH_USER_STAT_CD" class="form-control itp_input" name="suserStatCd"></select>
52 56
 										</div>
53 57
 										<div class="col-xs-2 itp_ip itp_noMar">
54
-											<select id="ITP_FORM_OPER01010_SEARCH_BRAND_TYPE" class="form-control itp_input" name="sBrandType"></select>
58
+											<select id="ITP_FORM_OPER01010_SEARCH_AUTH_TP_CD" class="form-control itp_input" name="sauthTpCd"></select>
55 59
 										</div>
56 60
 									</div>
57 61
 								</form>

+ 9 - 5
src/main/webapp/app/oper/OPER02010.html

@@ -21,14 +21,18 @@
21 21
 									<input type="hidden" id="ITP_FORM_OPER02010_SEARCH_AFFL_SHOP_ID" name="afflShopId" value="">
22 22
 									<div class="form-group">
23 23
 										<div class="col-xs-2 itp_ip itp_noMar">
24
+<<<<<<< HEAD
24 25
 											<input type="text" id="ITP_FORM_OPER01010_SEARCH_AFFL_SHOP_NM" class="form-control itp_input" name="sAfflShopNm" placeholder="가맹점" />
26
+=======
27
+											<input type="text" id="ITP_FORM_OPER02010_SEARCH_AFFL_SHOP_NM" class="form-control itp_input" name="sAfflShopNm" value="가맹점" />
28
+>>>>>>> da01e550b574076cbd788bfaf976c707e73fc61b
25 29
 										</div>
26 30
 										<div class="col-xs-1 itp_in" style="width:8%; padding:0px;">
27
-											<button type="button" id="ITP_BTN_OPER01010_SEARCH_SRH" class="btn btn-success btn-sm SEB" style="display: inline-block;"><i class="glyphicon glyphicon-search"></i></button>
28
-											<button type="button" id="ITP_BTN_OPER01010_SEARCH_MODIFY" class="btn btn-primary btn-sm UPB" style="display: inline-block;"><i class="glyphicon glyphicon-erase"></i></button>
29
-						                </div>
31
+											<button type="button" id="ITP_FORM_OPER02010_SEARCH_AFFL_SHOP" class="btn btn-success btn-sm SEB" style="display: inline-block;"><i class="glyphicon glyphicon-search"></i></button>
32
+											<button type="button" id="ITP_FORM_OPER02010_DELETE_AFFL_SHOP" class="btn btn-primary btn-sm UPB" style="display: inline-block;"><i class="glyphicon glyphicon-erase"></i></button>
33
+										</div>
30 34
 										<div class="col-xs-2 itp_ip itp_noMar">
31
-											<select id="ITP_FORM_OPER01010_SEARCH_BRAND_TYPE" class="form-control itp_input" name="sBrandType"></select>
35
+											<select id="ITP_FORM_OPER02010_SEARCH_BRAND_ID" class="form-control itp_input" name="sbrandId"></select>
32 36
 										</div>									
33 37
 									</div>
34 38
 									<div class="form-group" style="padding-top: 10px; border-top: 1px dotted #ccc;">
@@ -45,7 +49,7 @@
45 49
 											</div>
46 50
 										</div>
47 51
 										<div class="col-xs-5 itp_ip">
48
-											<input type="text" id="ITP_FORM_OPER02010_SEARCH_SNTICE_TKTL" class="form-control itp_input" name="sNticeTitl" placeholder="공지사항 검색" />
52
+											<input type="text" id="ITP_FORM_OPER02010_SEARCH_SNTICE_TKTL" class="form-control itp_input" name="snticeTitl" placeholder="공지사항 검색" />
49 53
 										</div>
50 54
 									</div>
51 55
 								</form>

+ 15 - 12
src/main/webapp/app/stinfo/STINFO01010.html

@@ -19,12 +19,12 @@
19 19
 								<form id="ITP_FORM_STINFO01010_SEARCH" class="form-horizontal">
20 20
 									<div class="form-group">
21 21
 										<div class="col-xs-2 itp_ip itp_noMar">
22
-											<select id="ITP_FORM_STINFO01010_SERVICE_" class="form-control itp_input" name="">
22
+											<select id="ITP_FORM_STINFO01010_SERVICE_BRAND_TYPE" class="form-control itp_input" name="sbrandType">
23 23
 												<option value="">카테고리(전체)</option>
24 24
 											</select>
25 25
 										</div>
26 26
 										<div class="col-xs-2 itp_ip itp_noMar">
27
-											<select id="ITP_FORM_STINFO01010_SERVICE_ST_CD" class="form-control itp_input" name="serviceStCd">
27
+											<select id="ITP_FORM_STINFO01010_SERVICE_ST_CD" class="form-control itp_input" name="sstCd">
28 28
 												<option value="">상태(전체)</option>
29 29
 											</select>
30 30
 										</div>
@@ -181,14 +181,16 @@
181 181
 													<div class="col-xs-4 itp_in">
182 182
 														<input type="text" id="ITP_FORM_STINFO01010_DETAIL_DTL_ADDR" class="form-control itp_input" name="dtlAddr" value="" placeholder="상세주소">													
183 183
 													</div>
184
-													
185
-													<input type="hidden" id="ITP_FORM_OPER04010_DETAIL_LOTS_ADDRESS" value="" />
186
-													<input type="hidden" id="ITP_FORM_OPER04010_DETAIL_STREET_ADDRESS" value="" />
187
-													<input type="hidden" name="latX" id="ITP_FORM_OPER04010_DETAIL_LAT" value="" />
188
-													<input type="hidden" name="longY" id="ITP_FORM_OPER04010_DETAIL_LNG" value="" />
189
-													<input type="hidden" id="ITP_FORM_OPER04010_DETAIL_HJ_DONG" value="" />
190
-													<input type="hidden" id="ITP_FORM_OPER04010_DETAIL_BJ_DONG" value="" />
191
-													<div id="ITP_FORM_OPER04010_DETAIL_MAP" style="width:700px; height:400px; margin-top:35px;"></div>
184
+
185
+
186
+													<!-- 주소 맵 -->
187
+													<input type="hidden" id="ITP_FORM_STINFO01010_DETAIL_LOTS_ADDRESS" value="" />
188
+													<input type="hidden" id="ITP_FORM_STINFO01010_DETAIL_STREET_ADDRESS" value="" />
189
+													<input type="hidden" name="cmpyLat" id="ITP_FORM_STINFO01010_DETAIL_LAT" value="" />
190
+													<input type="hidden" name="cmpyLng" id="ITP_FORM_STINFO01010_DETAIL_LNG" value="" />
191
+													<input type="hidden" id="ITP_FORM_STINFO01010_DETAIL_HJ_DONG" value="" />
192
+													<input type="hidden" id="ITP_FORM_STINFO01010_DETAIL_BJ_DONG" value="" />
193
+													<div id="ITP_FORM_STINFO01010_DETAIL_MAP" style="width:700px; height:400px;"></div>
192 194
 												</div>
193 195
 											</div>	
194 196
 										</div>	
@@ -202,7 +204,7 @@
202 204
 						<div class="col-xs-12">
203 205
 							<form id="ITP_FORM_STINFO01010_VIEW" class="form-horizontal">
204 206
  								<input type="hidden" id="ITP_FORM_STINFO01010_VIEW_VIEW_CD" name="viewCd" value="R">
205
- 								<input type="hidden" id="ITP_FORM_STINFO01010_VIEW_USER_ID" name="userId" value="">
207
+ 								<input type="hidden" id="ITP_FORM_STINFO01010_VIEW_BRAND_ID" name="brandId" value="">
206 208
 								
207 209
 								<section class="itp_form_sec">
208 210
 									<h4 class="itp_form_tit">브랜드 정보-상세</h4>
@@ -234,7 +236,8 @@
234 236
 											</div>
235 237
 											<label class="col-xs-2 itp_lb"></label>
236 238
 											<div class="col-xs-1 itp_ip">
237
-												<img src="/oqpo-view/images/naver.png" alt="로고 샘플" style="border:none; top:12px; left:12px; height:100px; width:125px; position:absolute;" class="form-control itp_input" name="fnBrandLogo" >																					
239
+												<img src="/oqpo-view/images/naver.png" alt="로고 샘플" style="border:none; top:12px; left:12px; height:100px; width:125px; position:absolute;" class="form-control itp_input" name="fnBrandLogo" >
240
+												<img src="/oqpo-view/images/naver.png" alt="로고 샘플" style="border:none; top:12px; left:12px; height:100px; width:125px; position:absolute;" class="form-control itp_input" name="fnBrandLogo2" >
238 241
 											</div>
239 242
 										</div>
240 243
 										<div class="form-group">

+ 4 - 11
src/main/webapp/app/stockmng/STOCKMNG04010.html

@@ -20,21 +20,14 @@
20 20
 									<div class="form-group">
21 21
 										<div class="col-xs-10">
22 22
 											<div class="col-xs-2 itp_ip itp_noMar">
23
-												<select id="ITP_FORM_STOCKMNG04010_SERVICE_ST_CD" class="form-control itp_input" name="servicestCd">
24
-													<option value="">상태</option>											
25
-												</select>										
23
+												<select id="ITP_FORM_STOCKMNG04010_WHS_DVSN" class="form-control itp_input" name="sWhsDvsn"></select>										
24
+											</div>
25
+											<div class="col-xs-2 itp_ip itp_noMar">
26
+												<select id="ITP_FORM_STOCKMNG04010_WHS_ST_CD" class="form-control itp_input" name="sWhsStCd"></select>										
26 27
 											</div>
27 28
 											<div class="col-xs-5 itp_ip itp_noMar">
28 29
 												<input type="text" id="ITP_FORM_STOCKMNG04010_SEARCH_WHS_NM" class="form-control itp_input" name="sWhsNm" placeholder="창고명" />
29 30
 											</div>
30
-											<div class="col-xs-1 itp_ip itp_noMar" style="padding:0;">
31
-												<input type="checkbox" id="ITP_FORM_STOCKMNG04010_SEARCH_BRAND" name="sBrand"/>
32
-												<label>브랜드</label>
33
-											</div>
34
-											<div class="col-xs-2 itp_ip itp_noMar" style="padding:0;">
35
-												<input type="checkbox" id="ITP_FORM_STOCKMNG04010_SEARCH_BRAND" name="sStore"/>
36
-												<label>매장</label>
37
-											</div>
38 31
 										</div>
39 32
 									</div>
40 33
 								</form>

+ 2 - 1
src/main/webapp/bootstrap/js/.jshintrc

@@ -11,5 +11,6 @@
11 11
   "nonbsp"   : true,
12 12
   "strict"   : true,
13 13
   "undef"    : true,
14
-  "unused"   : true
14
+  "unused"   : true,
15
+  "esversion": 6
15 16
 }

+ 6 - 0
src/main/webapp/js/app/locales/locale-ko.js

@@ -110,6 +110,7 @@ const ITP_MSG_LOCALE = (function() {
110 110
 			"afflShopNm": "가맹점",
111 111
 			"brandId": "브랜드ID",
112 112
 			"brandNm": "브랜드명",
113
+			"brandTypeNm": "브랜드 타입",
113 114
 			"notiNo": "공지번호",
114 115
 			"titlet": "제목",
115 116
 			"targetNm": "대상구분",
@@ -122,6 +123,11 @@ const ITP_MSG_LOCALE = (function() {
122 123
 			"ranking": "순위",
123 124
 			"tot": "총",
124 125
 			"pages": "페이지",
126
+			"corpTypeNm": "기업형태",
127
+			"stNm": "상태",
128
+			"ownerNm": "대표자명",
129
+			"rprstTelNo": "대표연락처",
130
+			"joinDt": "가입일자"
125 131
 		},
126 132
 		"table": {
127 133
 			"brandId": "브랜드ID",

+ 22 - 18
src/main/webapp/js/app/oper/ITP_OPER01010.js

@@ -198,6 +198,7 @@ let pageObj = {
198 198
 			// 공통코드 표시
199 199
 			fn_make_select(CODE_LIST, 'USER_STAT_CD', 'ITP_FORM_OPER01010_SEARCH_USER_STAT_CD');
200 200
 			fn_make_select(CODE_LIST, 'USER_STAT_CD', 'ITP_FORM_OPER01010_DETAIL_USER_STAT_CD', true, '선택');
201
+			fn_make_select(CODE_LIST, 'AUTH_TP_CD', 'ITP_FORM_OPER01010_SEARCH_AUTH_TP_CD');
201 202
 
202 203
 			// 조회일자 지정
203 204
 			$('#ITP_TAB_OPER01010 .input-group.date').datepicker(ITP_DATE_LANGUAGE);
@@ -329,7 +330,7 @@ let listObj = {
329 330
 	itp_OPER01010_search: false,
330 331
 	button: {
331 332
 		search: function() {
332
-			itp_OPER01010_search = true;
333
+			listObj.itp_OPER01010_search = true;
333 334
 			let param = $('#ITP_FORM_OPER01010_SEARCH').serializeObject();
334 335
 			param.gridSize = $.jgrid.defaults.rowNum;
335 336
 			param.gridPage = $.jgrid.defaults.page;
@@ -344,26 +345,27 @@ let listObj = {
344 345
 	},
345 346
 	empty: {
346 347
 		init: function() {
348
+			var _this = this;
347 349
 			this.push();
348 350
 			$(OPER01010_GRID_EMPTY).on('click', function() {
349
-				itp_fn_OPER01010_empty.back();
350
-				itp_OPER01010_param.gridSize = $.jgrid.defaults.rowNum;
351
-				$(OPER01010_GRID_ID).setGridParam({'postData': JSON.stringify(itp_OPER01010_param)}).trigger('reloadGrid');
351
+				_this.back();
352
+				listObj.itp_OPER01010_param.gridSize = $.jgrid.defaults.rowNum;
353
+				$(OPER01010_GRID_ID).setGridParam({'postData': JSON.stringify(listObj.itp_OPER01010_param)}).trigger('reloadGrid');
352 354
 			});
353 355
 		},
354 356
 		push: function() {
355 357
 			let param = $('#ITP_FORM_OPER01010_SEARCH').serializeObject();
356
-			itp_OPER01010_param = param;
358
+			listObj.itp_OPER01010_param = param;
357 359
 		},
358 360
 		back: function() {
359
-			$('#ITP_FORM_OPER01010_DEVI_TP_CD').val(itp_OPER01010_param.deviTpCd);
360
-			$('#ITP_FORM_OPER01010_ORDER_YN').val(itp_OPER01010_param.orderYn);
361
-			$('#ITP_FORM_OPER01010_ADT_AUTH_CD').val(itp_OPER01010_param.adtAuthCd);
362
-			$('#ITP_FORM_OPER01010_EMAIL_RCV_YN').val(itp_OPER01010_param.emailRcvYn);
363
-			$('#ITP_FORM_OPER01010_MEMB_EXIT_DT').val(itp_OPER01010_param.membExitDt);
364
-			$('#ITP_FORM_OPER01010_FROM_DT').val(itp_OPER01010_param.fromDt);
365
-			$('#ITP_FORM_OPER01010_TO_DT').val(itp_OPER01010_param.toDt);
366
-			$('#ITP_FORM_OPER01010_KEYWORD').val(itp_OPER01010_param.keyword);
361
+			$('#ITP_FORM_OPER01010_DEVI_TP_CD').val(listObj.itp_OPER01010_param.deviTpCd);
362
+			$('#ITP_FORM_OPER01010_ORDER_YN').val(listObj.itp_OPER01010_param.orderYn);
363
+			$('#ITP_FORM_OPER01010_ADT_AUTH_CD').val(listObj.itp_OPER01010_param.adtAuthCd);
364
+			$('#ITP_FORM_OPER01010_EMAIL_RCV_YN').val(listObj.itp_OPER01010_param.emailRcvYn);
365
+			$('#ITP_FORM_OPER01010_MEMB_EXIT_DT').val(listObj.itp_OPER01010_param.membExitDt);
366
+			$('#ITP_FORM_OPER01010_FROM_DT').val(listObj.itp_OPER01010_param.fromDt);
367
+			$('#ITP_FORM_OPER01010_TO_DT').val(listObj.itp_OPER01010_param.toDt);
368
+			$('#ITP_FORM_OPER01010_KEYWORD').val(listObj.itp_OPER01010_param.keyword);
367 369
 		}
368 370
 	},
369 371
 	grid: {
@@ -399,7 +401,7 @@ let listObj = {
399 401
 					}
400 402
 				},
401 403
 				loadComplete: function(data) {
402
-					//console.log(JSON.stringify(data));
404
+					console.log(data);
403 405
 					itp_fn_grid_load_complete(data, OPER01010_GRID_ID, true, 'number', 'OPER01010', listObj.itp_OPER01010_search, listObj.empty, true, data.gridRecords, true);
404 406
 					var ids = $(OPER01010_GRID_ID).getDataIDs();
405 407
 					$.each(ids, function(idx, rowId) {
@@ -436,6 +438,8 @@ let viewObj = {
436 438
 		console.log(result);
437 439
 		pageObj.switchScreen('VIEW');
438 440
 		$('#ITP_FORM_OPER01010_VIEW #ITP_FORM_OPER01010_VIEW_USER_ID').val(result.userId);
441
+		$('#ITP_FORM_OPER01010_VIEW .fnAfflShopNm').text(result.afflShopNm);
442
+		$('#ITP_FORM_OPER01010_VIEW .fnBrandNm').text(result.brandNm);
439 443
 		$('#ITP_FORM_OPER01010_VIEW .fnUserNm').text(result.userNm);
440 444
 		$('#ITP_FORM_OPER01010_VIEW .fnUserStatDt').text(result.userStatDt);
441 445
 		$('#ITP_FORM_OPER01010_VIEW .fnUserStatNm').text(result.userStatNm);
@@ -805,20 +809,20 @@ let afflShopObj = {
805 809
 	action: function () {
806 810
 		var _this = this;
807 811
 		// 가맹점 조회 버튼 클릭
808
-		$('#ITP_FORM_OPER01010_SEARCH_AFFL_SHOP').off('click').on('click', function() {
812
+		$('#ITP_FORM_OPER01010_SEARCH_AFFL_SHOP').on('click', function() {
809 813
 			_this.popup('L');
810 814
 		});
811 815
 		// 가맹점 텍스트 삭제 버튼 클릭
812
-		$('#ITP_FORM_OPER01010_DELETE_AFFL_SHOP').off('click').on('click', function() {
816
+		$('#ITP_FORM_OPER01010_DELETE_AFFL_SHOP').on('click', function() {
813 817
 			$('#ITP_FORM_OPER01010_SEARCH_AFFL_SHOP_NM').val('');
814 818
 			$('select#ITP_FORM_OPER01010_SEARCH_BRAND_ID option').remove();
815 819
 		});
816 820
 		// 신규등록 가맹점 조회 버튼 클릭
817
-		$('#ITP_FORM_OPER01010_DETAIL_SEARCH_AFFL_SHOP').off('click').on('click', function() {
821
+		$('#ITP_FORM_OPER01010_DETAIL_SEARCH_AFFL_SHOP').on('click', function() {
818 822
 			_this.popup('C');
819 823
 		});
820 824
 		// 신규등록 가맹점 텍스트 삭제 버튼 클릭
821
-		$('#ITP_FORM_OPER01010_DETAIL_DELETE_AFFL_SHOP').off('click').on('click', function() {
825
+		$('#ITP_FORM_OPER01010_DETAIL_DELETE_AFFL_SHOP').on('click', function() {
822 826
 			$('#ITP_FORM_OPER01010_DETAIL_SEARCH_AFFL_SHOP_NM').val('');
823 827
 			$('select#ITP_FORM_OPER01010_DETAIL_SEARCH_BRAND_ID option').remove();
824 828
 		});

+ 2 - 1
src/main/webapp/js/app/oper/ITP_OPER02010.js

@@ -346,7 +346,8 @@ let afflShopObj = {
346 346
 				$('#ITP_FORM_OPER02010_SEARCH_AFFL_SHOP_NM').val(rowDataPop.AFFL_SHOP.afflShopNm);
347 347
 			}
348 348
 			if(rowDataPop.AFFL_BRAND) {
349
-				fn_make_select_brand(rowDataPop.AFFL_BRAND, 'ITP_FORM_OPER02010_SEARCH_BRAND_ID');
349
+				fn_make_select_brand(rowDataPop.AFFL_BRAND, 'ITP_FORM_OPER02010_SEARCH_BRAND_ID', true, '선택');
350
+				// fn_make_select_brand(rowDataPop.AFFL_BRAND, 'ITP_FORM_OPER02010_SEARCH_BRAND_ID');
350 351
 			}
351 352
 		},
352 353
 		create: function(rowDataPop) {

+ 5 - 5
src/main/webapp/js/app/oper/ITP_OPER04010.js

@@ -353,7 +353,7 @@ let listObj = {
353 353
                     }
354 354
                 },
355 355
                 loadComplete: function(data) {
356
-                    console.log(data);
356
+                    // console.log(data);
357 357
                     itp_fn_grid_load_complete(data, OPER04010_GRID_ID, true, 'number', 'OPER04010', listObj.itp_OPER04010_search, listObj.empty, true, data.gridRecords, true);
358 358
                     var ids = $(OPER04010_GRID_ID).getDataIDs();
359 359
                     $.each(ids, function(idx, rowId) {
@@ -415,7 +415,7 @@ let viewObj = {
415 415
         fn_ajax_call(SALES_USER_INFO, param, this.callback, 'GET');
416 416
     },
417 417
     callback: function (result) {
418
-        console.log(result);
418
+        // console.log(result);
419 419
         pageObj.switchScreen('VIEW');
420 420
         $('#ITP_FORM_OPER04010_VIEW #ITP_FORM_OPER04010_VIEW_SALE_MGR_ID').val(result.saleMgrId);
421 421
         $('#ITP_FORM_OPER04010_VIEW .fnSalesUserId').text(result.saleMgrId);
@@ -454,7 +454,7 @@ let modifyObj = {
454 454
         fn_ajax_call(SALES_USER_INFO, param, this.callback, 'GET');
455 455
     },
456 456
     callback: function (result) {
457
-        console.log(result);
457
+        // console.log(result);
458 458
         pageObj.switchScreen('MODIFY');
459 459
         $('#ITP_FORM_OPER04010_DETAIL #ITP_FORM_OPER04010_DETAIL_VIEW_CD').val('U');
460 460
 
@@ -515,7 +515,7 @@ let createObj = {
515 515
             new daum.Postcode({
516 516
                 oncomplete: function(data) {
517 517
                     // 전체주소 리턴
518
-                    console.log(data);
518
+                    // console.log(data);
519 519
                     document.getElementById('ITP_FORM_OPER04010_DETAIL_ZIPNO').value = data.zonecode;
520 520
                     document.getElementById('ITP_FORM_OPER04010_DETAIL_ADRES').value = data.roadAddress;
521 521
                     document.getElementById('ITP_FORM_OPER04010_DETAIL_LOTS_ADDRESS').value = !!data.autoJibunAddress ? data.autoJibunAddress : data.jibunAddress;
@@ -560,7 +560,7 @@ let createObj = {
560 560
                         ITP_FORM_OPER04010_DETAIL_IS_WRITING = false;
561 561
                         listObj.search();
562 562
                     };
563
-                    console.log(JSON.stringify(param));
563
+                    // console.log(JSON.stringify(param));
564 564
                     fn_ajax_call(SALES_USER_SAVE, JSON.stringify(param), searhFn, 'POST');
565 565
                 }
566 566
             }

+ 1 - 0
src/main/webapp/js/app/properties.js

@@ -1,4 +1,5 @@
1 1
 
2 2
 const DOMAIN = 'http://106.246.249.162:38050';
3 3
 const ITP_CONTEXTPATH = '/oqpo-view';
4
+const MOBILE_CONTEXTPATH = ITP_CONTEXTPATH + '/mobile';
4 5
 const ITP_LANGUAGE = 'ko'; 

+ 481 - 0
src/main/webapp/js/app/stinfo/ITP_STINFO01010.js

@@ -0,0 +1,481 @@
1
+/********************************************************
2
+ --------------------------------------------------------
3
+ - Object 목록								            -
4
+ --------------------------------------------------------
5
+ * const gridColModel = {}	: 화면 Grid Object			*
6
+ * let pageObj = {}			: 화면공통 Object			*
7
+ * let listObj = {}			: 목록화면 Object			*
8
+ * let viewObj = {}			: 상세화면 Object			*
9
+ * let modifyObj = {}		: 수정화면 Object			*
10
+ * let createObj = {}		: 신규화면 Object			*
11
+ *******************************************************/
12
+
13
+/*화면 변수*/
14
+const STINFO01010_GRID_ID = '#ITP_STINFO01010_jqGrid';
15
+const STINFO01010_GRID_LIST = '#ITP_STINFO01010_jqGrid_list';
16
+const STINFO01010_GRID_PAGER = '#ITP_STINFO01010_jqGridPager';
17
+const STINFO01010_GRID_EMPTY = '#ITP_STINFO01010_jqGridEmpty';
18
+
19
+const STINFO01010_VIEW_GRID_ID = '#ITP_STINFO01010_VIEW_jqGrid';
20
+const STINFO01010_VIEW_GRID_LIST = '#ITP_STINFO01010_VIEW_jqGrid_list';
21
+const STINFO01010_VIEW_GRID_PAGER = '#ITP_STINFO01010_VIEW_jqGridPager';
22
+const STINFO01010_VIEW_GRID_EMPTY = '#ITP_STINFO01010_VIEW_jqGridEmpty';
23
+
24
+const STINFO01010_DETAIL_GRID_ID = '#ITP_STINFO01010_DETAIL_jqGrid';
25
+const STINFO01010_DETAIL_GRID_LIST = '#ITP_STINFO01010_DETAIL_jqGrid_list';
26
+const STINFO01010_DETAIL_GRID_PAGER = '#ITP_STINFO01010_DETAIL_jqGridPager';
27
+const STINFO01010_DETAIL_GRID_EMPTY = '#ITP_STINFO01010_DETAIL_jqGridEmpty';
28
+
29
+/*API URL*/
30
+let BRAND_DETAIL_GRID_LIST = '/api/brand/detail-grid-list';
31
+let  BRAND_INFO_BRAND = '/api/brand/info-brand';
32
+
33
+let ITP_FORM_STINFO01010_DETAIL_IS_DUPLICATE = false;
34
+let ITP_FORM_STINFO01010_DETAIL_IS_WRITING = false;
35
+
36
+let kakaoMap = {
37
+    init: function(id, locate) {
38
+        this.load(id, locate);
39
+    },
40
+    geocoder: null,
41
+    schDetailAddrFromCoords: function(coords, callback) {
42
+        // 좌표로 법정동 상세 주소 정보를 요청합니다
43
+        if(this.geocoder) {
44
+            this.geocoder.coord2Address(coords.getLng(), coords.getLat(), callback);
45
+        }
46
+    },
47
+    getMap: function(id) {
48
+        var mapContainer = document.getElementById(id), // 지도를 표시할 div
49
+            mapOption = {
50
+                center: new kakao.maps.LatLng(37.56684, 126.97865), // 지도의 중심좌표
51
+                level: 3, // 지도의 확대 레벨
52
+                mapTypeId : kakao.maps.MapTypeId.ROADMAP // 지도종류
53
+            };
54
+
55
+        // 지도를 생성한다
56
+        var map = new kakao.maps.Map(mapContainer, mapOption);
57
+
58
+        // 마우스 휠과 모바일 터치를 이용한 지도 확대, 축소를 막는다
59
+        map.setZoomable(false);
60
+
61
+        // 지도에 확대 축소 컨트롤을 생성한다
62
+        //var zoomControl = new kakao.maps.ZoomControl();
63
+
64
+        // 지도의 우측에 확대 축소 컨트롤을 추가한다
65
+        //map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
66
+
67
+        return map;
68
+    },
69
+    marker: function(map, coords) {
70
+        // 지도에 마커를 생성하고 표시한다
71
+        marker = new kakao.maps.Marker({
72
+            position: coords, // 마커의 좌표
73
+            map: map // 마커를 표시할 지도 객체
74
+        });
75
+    },
76
+    load: function(id, locate) {
77
+        var _this = this;
78
+        kakao.maps.load(function() {
79
+            var map = _this.getMap(id);
80
+            // 주소-좌표 변환 객체를 생성합니다
81
+            _this.geocoder = new kakao.maps.services.Geocoder();
82
+            if( !locate || locate.length == 0 ) {
83
+                // 지도에 마커를 생성하고 표시한다
84
+                _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
85
+            } else {
86
+                // 주소로 좌표를 검색합니다
87
+                _this.geocoder.addressSearch(locate, function(result, status) {
88
+                    // 정상적으로 검색이 완료됐으면
89
+                    if (status === kakao.maps.services.Status.OK) {
90
+
91
+                        var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
92
+                        if(id === 'ITP_FORM_STINFO01010_DETAIL_MAP') {
93
+                            document.getElementById('ITP_FORM_STINFO01010_DETAIL_LAT').value = result[0].y;
94
+                            document.getElementById('ITP_FORM_STINFO01010_DETAIL_LNG').value = result[0].x;
95
+                        }
96
+
97
+                        // 결과값으로 받은 위치를 마커로 표시합니다
98
+                        _this.marker(map, coords);
99
+
100
+                        // 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
101
+                        map.setCenter(coords);
102
+                    } else {
103
+                        _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
104
+                    }
105
+                });
106
+            }
107
+
108
+            if(id === 'ITP_FORM_STINFO01010_DETAIL_MAP') {
109
+                _this.listener.drag(map);
110
+            }
111
+        });
112
+    },
113
+    listener: {
114
+        drag: function(map) {
115
+            var _this = this;
116
+            // 지도 드래깅 이벤트를 등록한다 (드래그 시작 : dragstart, 드래그 종료 : dragend)
117
+            kakao.maps.event.addListener(map, 'drag', function () {
118
+                kakaoMap.schDetailAddrFromCoords(map.getCenter(), function(result, status) {
119
+                    if (status === kakao.maps.services.Status.OK) {
120
+
121
+                        document.getElementById('ITP_FORM_STINFO01010_DETAIL_LOTS_ADDRESS').value = result[0].address.address_name ;
122
+                        document.getElementById('ITP_FORM_STINFO01010_DETAIL_ADRES').value = !!result[0].road_address ? result[0].road_address.address_name : result[0].address.address_name ;
123
+                        document.getElementById('ITP_FORM_STINFO01010_DETAIL_STREET_ADDRESS').value = !!result[0].road_address ? result[0].road_address.address_name : $('#ITP_FORM_STINFO01010_DETAIL_STREET_ADDRESS').val();
124
+                        document.getElementById('ITP_FORM_STINFO01010_DETAIL_ZIPNO').value = !!result[0].road_address ? result[0].road_address.zone_no : $('#ITP_FORM_STINFO01010_DETAIL_CMPY_ZIPNO').val() ;
125
+                        document.getElementById('ITP_FORM_STINFO01010_DETAIL_LAT').value = map.getCenter().getLat();
126
+                        document.getElementById('ITP_FORM_STINFO01010_DETAIL_LNG').value = map.getCenter().getLng();
127
+
128
+                        // 마커를 클릭한 위치에 표시합니다
129
+                        marker.setPosition(map.getCenter());
130
+                        marker.setMap(map);
131
+                    }
132
+                });
133
+                /* 	var message = '지도를 드래그 하고 있습니다. 지도의 중심 좌표는 ' + map.getCenter().toString() +' 입니다.';
134
+                console.log(message); */
135
+            });
136
+        }
137
+    }
138
+};
139
+
140
+/*화면 Grid Object*/
141
+const gridColModel = {
142
+    list: [
143
+        {
144
+            index: 'VIEW_CD', name: 'viewCd',
145
+            label: ITP_MSG_LOCALE.label.viewCd,
146
+            width: '10', fixed: false, align: 'center',
147
+            sortable: false, hidden: true
148
+        },
149
+        {
150
+            index: 'AFFL_SHOP_ID', name: 'afflShopId',
151
+            label: ITP_MSG_LOCALE.label.afflShopId,
152
+            width: '10', fixed: false, align: 'center',
153
+            sortable: false, hidden: true
154
+        },
155
+        {
156
+            index: 'AFFL_SHOP_NM', name: 'afflShopNm',
157
+            label: ITP_MSG_LOCALE.label.afflShopNm, //가맹점
158
+            width: '10', fixed: false, align: 'center',
159
+            sortable: false, hidden: false
160
+        },
161
+        {
162
+            index: 'BRAND_ID', name: 'brandId',
163
+            label: ITP_MSG_LOCALE.label.brandId,
164
+            width: '10', fixed: false, align: 'center',
165
+            sortable: false, hidden: false
166
+        },
167
+        {
168
+            index: 'BRAND_NM', name: 'brandNm',
169
+            label: ITP_MSG_LOCALE.label.brandNm, //브랜드명
170
+            width: '13', fixed: false, align: 'center',
171
+            sortable: false, hidden: false
172
+        },
173
+        {
174
+            index: 'ST_NM', name: 'stNm',
175
+            label: ITP_MSG_LOCALE.label.stNm, //상태
176
+            width: '10', fixed: false, align: 'center',
177
+            sortable: false, hidden: false
178
+        },
179
+        {
180
+            index: 'BRAND_TYPE_NM', name: 'brandTypeNm',
181
+            label: ITP_MSG_LOCALE.label.brandTypeNm, //브랜드 타입
182
+            width: '13', fixed: false, align: 'center',
183
+            sortable: false, hidden: false
184
+        },
185
+        {
186
+            index: 'REG_DT', name: 'regDt',
187
+            label: ITP_MSG_LOCALE.label.regDt, //등록일
188
+            width: '10', fixed: false, align: 'center',
189
+            sortable: false, hidden: false
190
+        }],
191
+    view: [],
192
+    detail: []
193
+};
194
+
195
+require(['config'], function() {
196
+    require([
197
+    ], function($) {
198
+        pageObj.init();
199
+    });
200
+});
201
+
202
+/*화면공통 Object*/
203
+let pageObj = {
204
+    init: function () {
205
+        this.ui.init();
206
+        this.event.init();
207
+    },
208
+    ui: {
209
+        init: function () {
210
+            this.view();
211
+            this.grid();
212
+            this.ready();
213
+        },
214
+        view: function() {
215
+            // 버튼 권한설정
216
+            fn_proc_btn_auth('STINFO01010');
217
+            // 공통코드 표시
218
+            fn_make_select(CODE_LIST, 'BRAND_TYPE', 'ITP_FORM_STINFO01010_SERVICE_BRAND_TYPE');
219
+            fn_make_select(CODE_LIST, 'ST_CD', 'ITP_FORM_STINFO01010_SERVICE_ST_CD', true, '선택');
220
+        },
221
+        grid: function() {
222
+            itp_fn_jqgrid_resize(STINFO01010_GRID_ID, STINFO01010_GRID_LIST, 'lg');
223
+            listObj.empty.init();
224
+            itp_fn_fire_window_resize();
225
+        },
226
+        ready: function() {
227
+            listObj.init();
228
+        }
229
+    },
230
+    event: {
231
+        init: function () {
232
+            this.button();
233
+        },
234
+        button: function () {
235
+            // 버튼 클릭 이벤트
236
+            $('button').each(function() {
237
+                var id = $(this).attr('id');
238
+                $(this).on('click', function() {
239
+                    switch (id) {
240
+                        case 'ITP_BTN_STINFO01010_SRH'				    : listObj.button.search();		break;	// 조회 버튼 클릭
241
+                        case 'ITP_BTN_STINFO01010_NEWREG'				: listObj.button.create(); 		break;	// 신규등록 버튼
242
+                        case 'ITP_BTN_STINFO01010_MODIFY'				: modifyObj.button.modify();	break;	// 수정 버튼
243
+                        case 'ITP_BTN_STINFO01010_CANCELLIST'			: createObj.button.cancel(); 	break;	// 취소/목록 버튼
244
+                        case 'ITP_BTN_STINFO01010_DELETE'				: 								break;	// 삭제 버튼
245
+                        case 'ITP_BTN_STINFO01010_SAVE'				    : createObj.button.save(); 		break;	// 저장 버튼
246
+                        case 'ITP_FORM_STINFO01010_DETAIL_DUP'		    : createObj.button.duplicate();	break;	// 중복체크
247
+                        case 'ITP_BTN_STINFO01010_RESET_PW'			    : createObj.button.resetPass();	break;	// 상세:비밀번호 초기화
248
+                        case 'ITP_BTN_STINFO01010_DETAIL_ADDROW'		: afflShopObj.button.addRow();	break;	// 상세:추가버튼
249
+                        case 'ITP_BTN_STINFO01010_DETAIL_DELROW'		: afflShopObj.button.delRow();	break;	// 상세:삭제버튼
250
+                    }
251
+                });
252
+            });
253
+        }
254
+    },
255
+    switchScreen: function(mode) {
256
+        if(mode == 'LIST') { // 목록
257
+            $('#ITP_BTN_STINFO01010_MODIFY').hide();
258
+            $('#ITP_BTN_STINFO01010_CANCELLIST').hide();
259
+            $('#ITP_BTN_STINFO01010_DELETE').hide();
260
+            $('#ITP_BTN_STINFO01010_SAVE').hide();
261
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_SRH');
262
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_NEWREG');
263
+
264
+            $('#ITP_AJAX_STINFO01010_LIST_CONTAINER').show();
265
+            $('#ITP_AJAX_STINFO01010_DETAIL_CONTAINER').hide();
266
+            $('#ITP_AJAX_STINFO01010_VIEW_CONTAINER').hide();
267
+        } else if(mode == 'ADD') { // 등록
268
+            ITP_FORM_STINFO01010_DETAIL_IS_DUPLICATE = true;
269
+
270
+            $('#ITP_BTN_STINFO01010_SRH').hide();
271
+            $('#ITP_BTN_STINFO01010_MODIFY').hide();
272
+            $('#ITP_BTN_STINFO01010_NEWREG').hide();
273
+            $('#ITP_BTN_STINFO01010_DELETE').hide();
274
+            $('#ITP_BTN_STINFO01010_RESET_PW').hide();
275
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_CANCELLIST');
276
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_SAVE');
277
+
278
+            $('#ITP_AJAX_STINFO01010_LIST_CONTAINER').hide();
279
+            $('#ITP_AJAX_STINFO01010_DETAIL_CONTAINER').show();
280
+            $('#ITP_AJAX_STINFO01010_VIEW_CONTAINER').hide();
281
+            $('#ITP_FORM_STINFO01010_DETAIL_BRAND_CD').removeAttr('readonly');
282
+            $('#ITP_FORM_STINFO01010_DETAIL_DUP').removeAttr('disabled');
283
+
284
+            $('#ITP_FORM_STINFO01010_DETAIL_VIEW_CD').val('C');
285
+            $('#ITP_FORM_STINFO01010_DETAIL_BRAND_NM').val('');
286
+            $('#ITP_FORM_STINFO01010_DETAIL_BRAND_USE_CD').val('');
287
+            $('#ITP_FORM_STINFO01010_DETAIL_BRAND_CD').val('');
288
+            $('#ITP_FORM_STINFO01010_DETAIL_CATE_CD').val('');
289
+            $('#ITP_FORM_STINFO01010_DETAIL_TAKEOUT_YN').val('');
290
+            $('#ITP_FORM_STINFO01010_DETAIL_CIRCULATE_STORE_YN').val('');
291
+            $('#ITP_FORM_STINFO01010_DETAIL_STORE_MENU_REG_YN').val('');
292
+            $('#ITP_FORM_STINFO01010_DETAIL_SALES_USER_ID').val('');
293
+            $('#ITP_FORM_STINFO01010_DETAIL_SALES_USER_NM').val('');
294
+
295
+        } else if(mode == 'MODIFY') { // 수정
296
+            $('#ITP_BTN_STINFO01010_SRH').hide();
297
+            $('#ITP_BTN_STINFO01010_MODIFY').hide();
298
+            $('#ITP_BTN_STINFO01010_NEWREG').hide();
299
+            $('#ITP_BTN_STINFO01010_DELETE').hide();
300
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_CANCELLIST');
301
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_SAVE');
302
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_RESET_PW');
303
+
304
+            $('#ITP_AJAX_STINFO01010_LIST_CONTAINER').hide();
305
+            $('#ITP_AJAX_STINFO01010_DETAIL_CONTAINER').show();
306
+            $('#ITP_AJAX_STINFO01010_VIEW_CONTAINER').hide();
307
+            $('#ITP_FORM_STINFO01010_DETAIL_BRAND_CD').attr('readonly', true);
308
+            $('#ITP_FORM_STINFO01010_DETAIL_DUP').attr('disabled', true);
309
+        } else if(mode == 'VIEW') { // 보기
310
+            $('#ITP_BTN_STINFO01010_SRH').hide();
311
+            $('#ITP_BTN_STINFO01010_NEWREG').hide();
312
+            $('#ITP_BTN_STINFO01010_DELETE').hide();
313
+            $('#ITP_BTN_STINFO01010_SAVE').hide();
314
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_MODIFY');
315
+            fn_show_btn_auth('#ITP_BTN_STINFO01010_CANCELLIST');
316
+
317
+            $('#ITP_AJAX_STINFO01010_LIST_CONTAINER').hide();
318
+            $('#ITP_AJAX_STINFO01010_DETAIL_CONTAINER').hide();
319
+            $('#ITP_AJAX_STINFO01010_VIEW_CONTAINER').show();
320
+        }
321
+    }
322
+};
323
+
324
+/*목록화면 Object*/
325
+let listObj = {
326
+    init: function () {
327
+        this.grid.init();
328
+    },
329
+    itp_STINFO01010_param: {},
330
+    itp_STINFO01010_search: false,
331
+    button: {
332
+        search: function() {
333
+            listObj.itp_STINFO01010_search = true;
334
+            let param = $('#ITP_FORM_STINFO01010_SEARCH').serializeObject();
335
+            param.gridSize = $.jgrid.defaults.rowNum;
336
+            param.gridPage = $.jgrid.defaults.page;
337
+            $(STINFO01010_GRID_ID).setGridParam({'postData': JSON.stringify(param)}).trigger('reloadGrid');
338
+        },
339
+        create: function() {
340
+            pageObj.switchScreen('ADD');
341
+            itp_fn_form_clear_validate(null, '#ITP_FORM_STINFO01010_DETAIL');
342
+            // 권한정보 리스트 조회
343
+            createObj.init();
344
+        }
345
+    },
346
+    empty: {
347
+        init: function() {
348
+            var _this = this;
349
+            this.push();
350
+            $(STINFO01010_GRID_EMPTY).on('click', function() {
351
+                _this.back();
352
+                listObj.itp_STINFO01010_param.gridSize = $.jgrid.defaults.rowNum;
353
+                $(STINFO01010_GRID_ID).setGridParam({'postData': JSON.stringify(listObj.itp_STINFO01010_param)}).trigger('reloadGrid');
354
+            });
355
+        },
356
+        push: function() {
357
+            let param = $('#ITP_FORM_STINFO01010_SEARCH').serializeObject();
358
+            listObj.itp_STINFO01010_param = param;
359
+        },
360
+        back: function() {
361
+            $('#ITP_FORM_STINFO01010_SERVICE_BRAND_TYPE').val(listObj.itp_STINFO01010_param.brandType);
362
+            $('#ITP_FORM_STINFO01010_SERVICE_ST_CD').val(listObj.itp_STINFO01010_param.stCd);
363
+            $('#ITP_FORM_STINFO01010_SEARCH_BRAND_NM').val(listObj.itp_STINFO01010_param.brandNm);
364
+        }
365
+    },
366
+    grid: {
367
+        init: function () {
368
+            // 데이터 없을때
369
+            listObj.empty.push();
370
+            this.search();
371
+        },
372
+        colModel: gridColModel.list,
373
+        search: function() {
374
+            pageObj.switchScreen('LIST');
375
+            this.unload();
376
+            this.load();
377
+        },
378
+        load: function() {
379
+            let param = $('#ITP_FORM_OPER01010_SEARCH').serializeObject();
380
+            param.gridSize = $.jgrid.defaults.rowNum;
381
+
382
+            var option = {
383
+                gridId: STINFO01010_GRID_ID,
384
+                colModel: gridColModel.list,
385
+                param: JSON.stringify(param),
386
+                url: DOMAIN + BRAND_DETAIL_GRID_LIST,
387
+                pager: STINFO01010_GRID_PAGER,
388
+                onCellSelect: function(rowId, cellIdx, cellValue) {
389
+                    var cm = $(this).jqGrid('getGridParam', 'colModel');
390
+                    var colNm = cm[cellIdx].name;
391
+                    if (colNm === 'brandId') {
392
+                        const brandIdVal = $(this).jqGrid('getCell', rowId, 'brandId');
393
+                        const key = {brandId: brandIdVal, viewCd: 'R'};
394
+                        var param = $.param(key);
395
+                        viewObj.init(param);
396
+                    }
397
+                },
398
+                loadComplete: function(data) {
399
+                    //console.log(JSON.stringify(data));
400
+                    itp_fn_grid_load_complete(data, STINFO01010_GRID_ID, true, 'number', 'STINFO01010', listObj.itp_STINFO01010_search, listObj.empty, true, data.gridRecords, true);
401
+                    var ids = $(STINFO01010_GRID_ID).getDataIDs();
402
+                    $.each(ids, function(idx, rowId) {
403
+                        $(STINFO01010_GRID_ID).jqGrid('setCell', rowId, 'brandId', '', ITP_GRID_COL_STYLE.link);
404
+                    });
405
+                },
406
+                onPaging: function(action) {
407
+                    itp_fn_grid_paging(STINFO01010_GRID_ID, action, param);
408
+                }
409
+            };
410
+            itp_fn_grid_make_remote(option);
411
+        },
412
+        clearData : function() {
413
+            $(STINFO01010_GRID_ID).jqGrid('clearGridData', true);
414
+            $(STINFO01010_GRID_LIST).find('.ui-jqgrid-bdiv').css('min-height', '100px');
415
+            $(STINFO01010_GRID_EMPTY).html(ITP_MSG_LOCALE.message.grid.noData);
416
+            $(STINFO01010_GRID_EMPTY).show();
417
+        },
418
+        unload : function() {
419
+            $.jgrid.gridUnload(STINFO01010_GRID_ID);
420
+        }
421
+    }
422
+};
423
+
424
+/*상세화면 Object*/
425
+let viewObj = {
426
+    init: function (param) {
427
+        this.load(param);
428
+    },
429
+    load: function(param) {
430
+        fn_ajax_call(BRAND_INFO_BRAND, param, this.callback, 'GET');
431
+    },
432
+    callback: function (result) {
433
+        console.log(result);
434
+        pageObj.switchScreen('VIEW');
435
+        $('#ITP_FORM_STINFO01010_VIEW #ITP_FORM_OPER01010_VIEW_BRAND_ID').val(result.brandId);
436
+        $('#ITP_FORM_STINFO01010_VIEW .fnBrandUnitUnqNo').text(result.brandId);
437
+        $('#ITP_FORM_STINFO01010_VIEW .fnStCd').text(result.stCd);
438
+        $('#ITP_FORM_STINFO01010_VIEW .fnBrandNm').text(result.brandNm);
439
+        $('#ITP_FORM_STINFO01010_VIEW .fnBrandType').text(result.brandType);
440
+        $('#ITP_FORM_STINFO01010_VIEW .fnTelNo').text(result.telNo);
441
+        $('#ITP_FORM_STINFO01010_VIEW .fnFaxNo').text(result.faxNo);
442
+        $('#ITP_FORM_STINFO01010_VIEW .fnEmalAddr').text(result.email);
443
+        $('#ITP_FORM_STINFO01010_VIEW .fnDpstBnkCd').text(result.bnkCd);
444
+        $('#ITP_FORM_STINFO01010_VIEW .fnRcvAcctNo').text(result.acctNo);
445
+        $('#ITP_FORM_STINFO01010_VIEW .fnOwacNm').text(result.owacNm);
446
+        $('#ITP_FORM_STINFO01010_VIEW .fnZipNo').text(result.zipNo);
447
+        $('#ITP_FORM_STINFO01010_VIEW .fnLoadAddr').text(result.addr1);
448
+        $('#ITP_FORM_STINFO01010_VIEW .fnDtlAddr').text(result.addr2);
449
+        $('#ITP_FORM_STINFO01010_VIEW .fnRegId').text(result.sysRegId);
450
+        $('#ITP_FORM_STINFO01010_VIEW .fnRegDt').text(result.sysRegDttm);
451
+        $('#ITP_FORM_STINFO01010_VIEW .fnChgId').text(result.sysChgId);
452
+        $('#ITP_FORM_STINFO01010_VIEW .fnChgDt').text(result.sysChgDttm);
453
+        // $('#ITP_FORM_STINFO01010_VIEW .fnBrandLogo').text(result.lastLoginDt);
454
+    }
455
+};
456
+
457
+/*수정화면 Object*/
458
+let modifyObj = {
459
+    init: function (param) {
460
+        this.load(param);
461
+    },
462
+    load: function() {
463
+    },
464
+    callback: function (result) {
465
+        // console.log(result);
466
+    }
467
+};
468
+
469
+/*신규화면 Object*/
470
+let createObj = {
471
+    init: function () {
472
+        this.load();
473
+    },
474
+    button: {
475
+        cancel: function () {
476
+            listObj.grid.search();
477
+        }
478
+    },
479
+    load: function () {
480
+    }
481
+};

+ 350 - 0
src/main/webapp/js/app/stockmng/ITP_STOCKMNG04010.js

@@ -0,0 +1,350 @@
1
+
2
+const STOCKMNG04010_GRID_ID = '#ITP_STOCKMNG04010_jqGrid';	
3
+const STOCKMNG04010_GRID_LIST = STOCKMNG04010_GRID_ID + '_list';
4
+const STOCKMNG04010_GRID_PAGER = STOCKMNG04010_GRID_ID + 'Pager';
5
+const STOCKMNG04010_GRID_EMPTY = STOCKMNG04010_GRID_ID + 'Empty';
6
+
7
+let ITP_FORM_STOCKMNG04010_IS_WRITING = false;
8
+let ITP_FORM_STOCKMNG04010_IS_DUPLICATE = false;
9
+let STOCKMNG04010_GRID_LAST_ROW_ID;
10
+let STOCKMNG04010_SCH_CODE_CD; //
11
+
12
+let CODE_CODE_SEARCH = '/api/code/code-search'; 
13
+let CODE_SAVE_CODE = '/api/code/save-code'; 
14
+let CODE_INFO_CODE = '/api/code/info-code'; 
15
+let CODE_CHECK_DUPLICATE = '/api/code/check-duplicate'; 
16
+let CODE_DETAIL_GRID_LIST = '/api/code/detail-grid-list'; 
17
+
18
+require(['config'], function() {
19
+	require([
20
+		'jquery'
21
+	], function($) {
22
+		
23
+		// 버튼 권한설정
24
+		fn_proc_btn_auth('STOCKMNG04010');
25
+		
26
+		// 공통코드 표시
27
+		fn_make_select(CODE_LIST, 'CODE_TP_CD', 'ITP_STOCKMNG04010_ADV_SRH_FORM_CODE_TP_CD', true, '전체');
28
+		fn_make_select(CODE_LIST, 'CODE_TP_CD', 'ITP_FORM_STOCKMNG04010_CODE_TYPE', true, '선택');		
29
+		fn_make_select(CODE_LIST, 'USE_YN', 'ITP_STOCKMNG04010_ADV_SRH_FORM_USE_YN', true, '전체');
30
+		fn_make_select(CODE_LIST, 'USE_YN', 'ITP_FORM_STOCKMNG04010_USE_YN', true, '선택');
31
+
32
+		itp_fn_STOCKMNG04010_search();
33
+		itp_fn_jqgrid_resize(STOCKMNG04010_GRID_ID, STOCKMNG04010_GRID_LIST, 'sm');
34
+		itp_fn_STOCKMNG04010_detail_grid.init();
35
+    	itp_fn_fire_window_resize();
36
+
37
+		$('#ITP_BTN_STOCKMNG04010_SRH').on('click', function() {
38
+			itp_fn_STOCKMNG04010_search();
39
+		});
40
+
41
+		$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER').on('click', '.list-group .list-group-item', function() {
42
+			const $this = $(this);
43
+			var itemFn = {
44
+				callBack: function() {
45
+					itp_fn_form_clear_validate(null, '#ITP_FORM_STOCKMNG04010_DETAIL');
46
+					$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER .list-group .list-group-item').removeClass('active');
47
+					$this.addClass('active');
48
+					const codeCd = $this.find('.itp_param_key').text();
49
+					itp_fn_STOCKMNG04010_detail(codeCd);
50
+				}
51
+			};
52
+			if (ITP_FORM_STOCKMNG04010_IS_WRITING || itp_fn_check_grid_is_writing(STOCKMNG04010_GRID_ID)) {
53
+				itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, itemFn, null);
54
+			} else {
55
+				itemFn.callBack();
56
+			}
57
+		});
58
+
59
+		$('#ITP_BTN_STOCKMNG04010_NEW').on('click', function() {
60
+			var newFn = {
61
+    			callBack: function(args) {
62
+					itp_fn_form_clear_validate(null, '#ITP_FORM_STOCKMNG04010_DETAIL');
63
+    				const item = $('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER .list-group .list-group-item');
64
+    				item.removeClass('active');
65
+
66
+					// 코드정보 초기화
67
+					$('#ITP_FORM_STOCKMNG04010_DETAIL input[name=viewCd]').val('C');
68
+					$('#ITP_FORM_STOCKMNG04010_CODE_CD').val('');
69
+					$('#ITP_FORM_STOCKMNG04010_CODE_NM_KR').val('');
70
+					$('#ITP_FORM_STOCKMNG04010_USE_YN').val('');
71
+					$('#ITP_FORM_STOCKMNG04010_CODE_TYPE').val('');
72
+					$('#ITP_FORM_STOCKMNG04010_CODE_CD').removeAttr('readonly');
73
+					$('#ITP_BTN_STOCKMNG04010_DUP').removeAttr('disabled');
74
+					
75
+					// 그리드 초기화
76
+					itp_fn_STOCKMNG04010_detail_grid.clearData();
77
+    			}
78
+    		};
79
+			if (ITP_FORM_STOCKMNG04010_IS_WRITING || itp_fn_check_grid_is_writing(STOCKMNG04010_GRID_ID)) {
80
+				itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, newFn, null);
81
+			} else {
82
+				newFn.callBack();
83
+			}
84
+		});
85
+
86
+		$('#ITP_BTN_STOCKMNG04010_SAVE').on('click', function() {
87
+			const formId = '#ITP_FORM_STOCKMNG04010';
88
+			itp_fn_form_clear_validate(null, formId + '_DETAIL');
89
+			var vali_codeCd = itp_fn_form_validate(formId + '_DETAIL', formId + '_CODE_CD', ['empty'], undefined);
90
+			var vali_useYn = itp_fn_form_validate(formId + '_DETAIL', formId + '_USE_YN', ['empty'], undefined);
91
+			var vali_codeNmKr = itp_fn_form_validate(formId + '_DETAIL', formId + '_CODE_NM_KR', ['empty'], undefined);
92
+			var vali_codeTypeCd = itp_fn_form_validate(formId + '_DETAIL', formId + '_CODE_TYPE', ['empty'], undefined);
93
+
94
+			if (vali_codeCd && vali_useYn && vali_codeNmKr && vali_codeTypeCd) {
95
+				if (ITP_FORM_STOCKMNG04010_IS_DUPLICATE) {
96
+					itp_fn_modal_duplicate(ITP_MSG_LOCALE.label.code, formId + '_CODE_CD');
97
+				} else {
98
+					if (itp_fn_grid_validate_row(STOCKMNG04010_GRID_ID)) {
99
+						let gridInsertData = [];
100
+						let gridUpdateData = [];
101
+						let gridDeleteData = [];
102
+						const rowData = $(STOCKMNG04010_GRID_ID).getRowData();
103
+						const keyValue = $(formId + '_CODE_CD').val();
104
+						$.each(rowData, function(key, value) {
105
+							if (value.viewCd != 'R') {
106
+								value.codeCd = keyValue;
107
+								if (value.viewCd == 'C') {
108
+									gridInsertData.push(value);
109
+								} else if (value.viewCd == 'U') {
110
+									gridUpdateData.push(value);
111
+								} else if (value.viewCd == 'D') {
112
+									gridDeleteData.push(value);
113
+								}
114
+							}
115
+						});
116
+						let param = $(formId + '_DETAIL').serializeObject();
117
+						param.gridInsertData = gridInsertData;
118
+						param.gridUpdateData = gridUpdateData;
119
+						param.gridDeleteData = gridDeleteData;
120
+						//console.log(JSON.stringify(param)); 						
121
+						var searhFn = function() {
122
+							STOCKMNG04010_SCH_CODE_CD = keyValue;
123
+							ITP_FORM_STOCKMNG04010_IS_WRITING = false;
124
+							var keyword = {sCodeNm: $('#ITP_KEYWORD_STOCKMNG04010_INPUT').val()};
125
+							var param = $('#ITP_STOCKMNG04010_ADV_SRH_FORM').serialize() + '&' + $.param(keyword);
126
+							fn_ajax_call(CODE_CODE_SEARCH, param, itp_fn_STOCKMNG04010_search_callback, 'GET');
127
+						};
128
+						fn_ajax_call(CODE_SAVE_CODE, JSON.stringify(param), searhFn, 'POST');						
129
+					};
130
+				}
131
+			}
132
+		});
133
+	});
134
+});
135
+
136
+var itp_fn_STOCKMNG04010_search = function() {
137
+	var searhFn = {
138
+		callBack: function(args) {			
139
+			var sCodeNm = {sCodeNm: $('#ITP_KEYWORD_STOCKMNG04010_INPUT').val()};
140
+			var param = $('#ITP_STOCKMNG04010_ADV_SRH_FORM').serialize() + '&' + $.param(sCodeNm);						
141
+			fn_ajax_call(CODE_CODE_SEARCH, param, itp_fn_STOCKMNG04010_search_callback, 'GET');
142
+		}
143
+	};
144
+	if (ITP_FORM_STOCKMNG04010_IS_WRITING || itp_fn_check_grid_is_writing(STOCKMNG04010_GRID_ID)) {
145
+		itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, searhFn, null);
146
+	} else {
147
+		searhFn.callBack();
148
+	}
149
+};
150
+
151
+var itp_fn_STOCKMNG04010_search_callback = function(result) {
152
+	
153
+	$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER > .list-group').empty(); // 초기화
154
+	
155
+	$.each(result.searchList, function(index, item) {
156
+		$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER > .list-group').append($('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER_ROWCOPY').val());
157
+		$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER > .list-group > .list-group-item:last').find('.fnCodeCd').text(item.codeCd);
158
+		$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER > .list-group > .list-group-item:last').find('.fnCodeNm').text(item.codeNm);
159
+		$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER > .list-group > .list-group-item:last').find('.fnCodeTpNm').text(item.codeTpNm);
160
+		if(STOCKMNG04010_SCH_CODE_CD && STOCKMNG04010_SCH_CODE_CD == item.codeCd) {
161
+			$('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER > .list-group > .list-group-item:last').addClass('active');	
162
+		}		
163
+	});
164
+	
165
+	// 첫번째 데이터 상세조회
166
+	if($('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER .list-group .list-group-item').length > 0) {
167
+		if(STOCKMNG04010_SCH_CODE_CD && STOCKMNG04010_SCH_CODE_CD !== undefined) {
168
+			itp_fn_STOCKMNG04010_detail(STOCKMNG04010_SCH_CODE_CD);	
169
+		} else {
170
+			const item = $('#ITP_AJAX_STOCKMNG04010_SRH_CONTAINER .list-group .list-group-item').first();
171
+			const codeCd = item.find('.itp_param_key').text();
172
+			item.addClass('active');
173
+			itp_fn_STOCKMNG04010_detail(codeCd);	
174
+		}	
175
+	}	
176
+};
177
+
178
+var itp_fn_STOCKMNG04010_detail = function(key) {
179
+	var codeCd  = {codeCd: key};
180
+	var param = $.param(codeCd);						
181
+	fn_ajax_call(CODE_INFO_CODE, param, itp_fn_STOCKMNG04010_detail_callback, 'GET');	
182
+};
183
+
184
+var itp_fn_STOCKMNG04010_detail_callback = function(result) {
185
+	// 코드정보 지정
186
+	$('#ITP_FORM_STOCKMNG04010_DETAIL input[name=viewCd]').val('U');
187
+	$('#ITP_FORM_STOCKMNG04010_CODE_CD').val(result.codeCd);
188
+	$('#ITP_FORM_STOCKMNG04010_CODE_NM_KR').val(result.codeNm);
189
+	$('#ITP_FORM_STOCKMNG04010_USE_YN').val(result.useYn);
190
+	$('#ITP_FORM_STOCKMNG04010_CODE_TYPE').val(result.codeTpCd);
191
+	$('#ITP_FORM_STOCKMNG04010_CODE_CD').attr('readonly', true);
192
+	$('#ITP_BTN_STOCKMNG04010_DUP').attr('disabled', true);
193
+
194
+	// 코드 상세리스트 조회	
195
+	const key = {codeCd: result.codeCd, gridSize: $.jgrid.defaults.rowNum};
196
+	itp_fn_STOCKMNG04010_detail_grid.unload();
197
+	itp_fn_STOCKMNG04010_detail_grid.callBack(key);
198
+};
199
+		
200
+var itp_fn_STOCKMNG04010_detail_grid = {
201
+	init: function() {
202
+		ITP_FORM_STOCKMNG04010_IS_WRITING = false;
203
+		ITP_FORM_STOCKMNG04010_IS_DUPLICATE = false;
204
+		
205
+		$('#ITP_FORM_STOCKMNG04010_DETAIL').on('change', 'input, select, textarea', function() {
206
+    		if (!ITP_FORM_STOCKMNG04010_IS_WRITING) {
207
+    			ITP_FORM_STOCKMNG04010_IS_WRITING = true;
208
+    		}
209
+    		if ($(this).attr('id') == 'ITP_FORM_STOCKMNG04010_CODE_CD') {
210
+				ITP_FORM_STOCKMNG04010_IS_DUPLICATE = true;
211
+			}
212
+    	});
213
+
214
+		$('body').on('click', function(e) {
215
+			var gridId = STOCKMNG04010_GRID_ID.replace('#', '');
216
+			itp_fn_grid_reset_selection(e, STOCKMNG04010_GRID_LAST_ROW_ID, gridId, 'STOCKMNG04010');
217
+		});
218
+
219
+		$('#ITP_BTN_STOCKMNG04010_DUP').on('click', function() {
220
+			const formId = '#ITP_FORM_STOCKMNG04010';
221
+			itp_fn_form_clear_validate(null, formId + '_DETAIL');
222
+			var vali_codeCd = itp_fn_form_validate(formId + '_DETAIL', formId + '_CODE_CD', ['empty'], undefined);
223
+			if (vali_codeCd) {
224
+				var dupFn = function(result) {
225
+					if (result.code == 'N') {
226
+						ITP_FORM_STOCKMNG04010_IS_DUPLICATE = false;
227
+					} else {
228
+						ITP_FORM_STOCKMNG04010_IS_DUPLICATE = true;
229
+					}
230
+				};
231
+				const key = {'codeCd':  $(formId + '_CODE_CD').val()};
232
+				const param = $.param(key);
233
+				fn_ajax_call(CODE_CHECK_DUPLICATE, param, dupFn, 'GET');
234
+			}
235
+		});
236
+
237
+		$('#ITP_BTN_STOCKMNG04010_ADDROW').on('click', function() {
238
+			STOCKMNG04010_GRID_LAST_ROW_ID = itp_fn_grid_add_row(STOCKMNG04010_GRID_ID, undefined, ['codeDtlCd'], 'STOCKMNG04010');
239
+		});
240
+
241
+		$('#ITP_BTN_STOCKMNG04010_DELROW').on('click', function() {
242
+		    itp_fn_grid_del_row(STOCKMNG04010_GRID_ID);
243
+		});
244
+	},
245
+	callBack: function(args) {
246
+		$(STOCKMNG04010_GRID_ID).jqGrid({
247
+			colModel: [
248
+				{
249
+					index: 'VIEW_CD', name: 'viewCd',
250
+					label: ITP_MSG_LOCALE.label.viewCd,
251
+					width: '10', fixed: false, align: 'center',
252
+					sortable: false, hidden: true
253
+				},
254
+				{
255
+					index: 'CODE_CD', name: 'codeCd',
256
+					label: ITP_MSG_LOCALE.label.code,
257
+					width: '10', fixed: false, align: 'center',
258
+					sortable: false, hidden: true
259
+				},
260
+				{
261
+					index: 'CODE_DTL_CD', name: 'codeDtlCd',
262
+					label: ITP_MSG_LOCALE.label.codeDtl,
263
+					width: '10', fixed: false, align: 'center',
264
+					sortable: false, editable: false, edittype: 'text',
265
+					editrules: {required: true},
266
+					editoptions: {maxlength: 10}
267
+				},
268
+				{
269
+					index: 'VIEW_NUM', name: 'viewNum',
270
+					label: ITP_MSG_LOCALE.label.orderNo,
271
+					width: '10', fixed: false, align: 'center',
272
+					sortable: true, editable: true, edittype: 'text',
273
+					editrules: {required: true, number: true}
274
+				},
275
+				{
276
+					index: 'CODE_DTL_NM', name: 'codeDtlNm',
277
+					label: ITP_MSG_LOCALE.label.codeNmKo,
278
+					width: '30', fixed: false, align: 'center',
279
+					sortable: false, editable: true, edittype: 'text',
280
+					editrules: {required: true},
281
+					editoptions: {maxlength: 40}
282
+				},
283
+				{
284
+					index: 'CODE_DESC', name: 'codeDesc',
285
+					label: ITP_MSG_LOCALE.label.remark,
286
+					width: '20', fixed: false, align: 'center',
287
+					sortable: false, editable: true, edittype: 'text'
288
+				},
289
+				{
290
+					index: 'USE_YN', name: 'useYn',
291
+					label: ITP_MSG_LOCALE.label.useYn,
292
+					width: '10', fixed: false, align: 'center',
293
+					sortable: false, editable: true, formatter: 'checkbox', edittype: 'checkbox',
294
+					editoptions: {value: 'Y:N', defaultValue: 'Y'},
295
+					editrules: {required: true}
296
+				}
297
+			],
298
+			loadBeforeSend: function(jqXHR) {
299
+			    jqXHR.setRequestHeader('X-AUTH-TOKEN', CONN_KEY);
300
+			},
301
+			postData: JSON.stringify(args),
302
+			url: DOMAIN + CODE_DETAIL_GRID_LIST,
303
+			pager: STOCKMNG04010_GRID_PAGER,
304
+			onCellSelect: function(rowId, cellIdx, cellValue) {
305
+				STOCKMNG04010_GRID_LAST_ROW_ID = itp_fn_set_data_editable(rowId, cellIdx, STOCKMNG04010_GRID_LAST_ROW_ID, STOCKMNG04010_GRID_ID, ['codeDtlCd']);
306
+		   	},
307
+			loadComplete: function(data) {
308
+				itp_fn_grid_load_complete(data, STOCKMNG04010_GRID_ID, true, undefined, 'STOCKMNG04010');
309
+		    },
310
+		    loadError: function(jqXHR, textStatus, errorThrown) {
311
+		    	itp_fn_grid_load_error(jqXHR, textStatus, errorThrown);
312
+		    },
313
+		    onPaging: function(action) {
314
+		    	var pagingFn = {
315
+	    			callBack: function(args) {
316
+	    				$(args).trigger('reloadGrid');
317
+	    			}
318
+	    		};
319
+		    	if (itp_fn_check_grid_is_writing(STOCKMNG04010_GRID_ID)) {
320
+		    		itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, pagingFn, STOCKMNG04010_GRID_ID);
321
+		    		return 'stop';
322
+		    	} else {
323
+		    		itp_fn_grid_paging(STOCKMNG04010_GRID_ID, action, args);
324
+		    	}
325
+		    },
326
+		    onSortCol: function(index, columnIndex, sortOrder) {
327
+		    	var sortingFn = {
328
+	    			callBack: function(args) {
329
+	    				$(args).trigger('reloadGrid');
330
+	    			}
331
+	    		};
332
+		    	if (itp_fn_check_grid_is_writing(STOCKMNG04010_GRID_ID)) {
333
+		    		itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, sortingFn, STOCKMNG04010_GRID_ID);
334
+		    		return 'stop';
335
+		    	} else {
336
+		    		itp_fn_grid_sorting(STOCKMNG04010_GRID_ID, index, sortOrder);
337
+		    	}
338
+		    }
339
+		}).navGrid(STOCKMNG04010_GRID_PAGER, ITP_GRID_NAV_DEFAULTS.navGrid);
340
+	},
341
+	clearData : function() {
342
+		$(STOCKMNG04010_GRID_ID).jqGrid('clearGridData', true);
343
+		$(STOCKMNG04010_GRID_LIST).find('.ui-jqgrid-bdiv').css('min-height', '100px');
344
+		$(STOCKMNG04010_GRID_EMPTY).html(ITP_MSG_LOCALE.message.grid.noData);
345
+		$(STOCKMNG04010_GRID_EMPTY).show();
346
+	}, 
347
+	unload : function() {
348
+		$.jgrid.gridUnload(STOCKMNG04010_GRID_ID); 
349
+	}
350
+};

+ 106 - 0
src/main/webapp/mobile/app/login.html

@@ -0,0 +1,106 @@
1
+<!DOCTYPE html>
2
+<html lang="ko">
3
+<head>
4
+	<meta charset="UTF-8">
5
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+	<title>누리키오스크 운영시스템</title>
7
+	<meta name="Description" content="" />
8
+	<meta name="Keywords" content="" />
9
+	<meta name="Author" content="누리키오스크" />
10
+	<meta name="HandheldFriendly" content="true" />
11
+	<meta name="format-detection" content="telephone=no">
12
+	<meta name="apple-mobile-web-app-capable" content="yes" />
13
+	<meta name="apple-mobile-web-app-status-bar-style" content="black" />
14
+
15
+	<link rel="shortcut icon" type="image/png" href="../../images/favicon.ico"/>
16
+	<link rel="stylesheet" href="../../bootstrap/dist/css/bootstrap.min.css" />
17
+	<link rel="stylesheet" href="../../css/style.css" />
18
+
19
+	<script>
20
+		const VIEW_PAGE = 'LOGIN'; //config.js 에서 로그인 페이지 인지 아닌지 확인하기 위한 변수
21
+		var CONN_KEY; //Jwt 토큰을 담기위한 변수
22
+		var POP_LIST; //팝업 리스트
23
+	</script>
24
+
25
+	<script src="../../js/app/properties.js"></script>
26
+	<script src="../../js/require.min.js" data-main="../../js/app/config.js"></script>
27
+</head>
28
+<body>
29
+	<div id="ITP_LOGIN">
30
+		<div class="itp_cont">
31
+			<div class="container">
32
+				<div class="itp_box_wrap">
33
+					<div class="itp_head fix">
34
+						<h1 class="itp_logo">누리키오스크</h1>
35
+						<span class="itp_bar">|</span>
36
+						<h2 class="text-center itp_tit">운영시스템</h2>
37
+					</div>
38
+					<div class="panel panel-default itp_box">
39
+						<div class="panel-body itp_body">
40
+							<form id="command" class="form-horizontal" action="" method="post" onsubmit="return false;">
41
+								<input id="userId" name="userId" type="hidden" value="" />
42
+	        					<input id="password" name="password" type="hidden" value="" />
43
+
44
+								<div class="row">
45
+									<div class="col-xs-9">
46
+										<div class="form-group">
47
+											<label class="col-xs-3 itp_lb">아이디</label>
48
+											<div class="col-xs-9">
49
+												<input type="text" class="form-control" id="ITP_FORM_LOGIN_USER_ID" autofocus>
50
+											</div>
51
+										</div>
52
+										<div class="form-group">
53
+											<label class="col-xs-3 itp_lb">비밀번호</label>
54
+											<div class="col-xs-9">
55
+												<input type="password" class="form-control" id="ITP_FORM_LOGIN_USER_PW" autocomplete="off">
56
+											</div>
57
+										</div>
58
+										<div class="form-group">
59
+											<div class="col-xs-offset-3 col-xs-9">
60
+												<div class="checkbox pull-left">
61
+													<label><input type="checkbox" id="ITP_FORM_LOGIN_SAVE_ID"> 아이디저장</label>
62
+												</div>
63
+											</div>
64
+										</div>
65
+										<div class="form-group">
66
+											<div class="col-xs-offset-3 col-xs-9">
67
+												<p class="text-nowrap itp_error" id="ITP_FORM_LOGIN_ERROR">
68
+												아이디와 비밀번호를 입력하세요.
69
+												</p>
70
+											</div>
71
+										</div>
72
+									</div>
73
+									<div class="col-xs-3">
74
+										<button type="submit" id="login_btn" class="btn btn-primary btn-lg itp_btn">로그인</button>
75
+									</div>
76
+								</div>
77
+							</form>
78
+						</div>
79
+					</div>
80
+					<div class="panel panel-default text-center itp_foot">본 시스템은 크롬 브라우저에 최적화 되어 있습니다.</div>
81
+					<div class="text-center itp_copyright">COPYRIGHT © NOORIJA Co., Ltd. ALL RIGHTS RESERVED</div>
82
+				</div>
83
+			</div>
84
+		</div>
85
+	</div>
86
+	<aside id="ITP_ASIDE">
87
+		<div id="ITP_MODAL_ALERT_AJAX" class="modal itp_modal">
88
+			<div class="modal-dialog modal-sm">
89
+				<div class="modal-content">
90
+					<div class="modal-header">
91
+						<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
92
+						<h5 class="modal-title">알림</h5>
93
+					</div>
94
+					<div class="modal-body">
95
+						<div class="text-center itp_alert_txt"></div>
96
+					</div>
97
+					<div class="modal-footer">
98
+						<button type="button" class="btn btn-primary" id="ITP_MODAL_ALERT_AJAX_CONFIRM">확인</button>
99
+					</div>
100
+				</div>
101
+			</div>
102
+		</div>
103
+	</aside>
104
+	<script src="../js/app/login.js?version=20210826"></script>
105
+</body>
106
+</html>

+ 490 - 0
src/main/webapp/mobile/app/main.html

@@ -0,0 +1,490 @@
1
+<!DOCTYPE html>
2
+<html lang="ko">
3
+<head>
4
+	<meta charset="UTF-8">
5
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+	<title>누리키오스크 운영시스템</title>
7
+	<meta name="robots" content="noindex, nofollow" />
8
+	<meta name="Description" content="" />
9
+	<meta name="Keywords" content="" />
10
+	<meta name="Author" content="누리키오스크" />
11
+	<meta name="HandheldFriendly" content="true" />
12
+	<meta name="format-detection" content="telephone=no">
13
+	<meta name="apple-mobile-web-app-capable" content="yes" />
14
+	<meta name="apple-mobile-web-app-status-bar-style" content="black" />
15
+	
16
+	<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
17
+	<meta http-equiv="Expires" content="0">
18
+	<meta http-equiv="Pragma" content="no-cache">
19
+
20
+	<link rel="shortcut icon" type="image/png" href="../../images/favicon.ico"/>
21
+	<link rel="stylesheet" href="../../bootstrap/dist/css/bootstrap.min.css" />
22
+	<link rel="stylesheet" href="../../bootstrap-datepicker/css/bootstrap-datepicker3.css" />
23
+	<link rel="stylesheet" href="../../bootstrap-fileUpload/dist/bootstrap-FileUpload.css" />
24
+    <link rel="stylesheet" href="../../css/ui.jqgrid-bootstrap.css" />
25
+	<link rel="stylesheet" href="../../css/style.css" />
26
+
27
+	<script>
28
+		const ITP_SYSTEM_ADMIN_YN = 'Y';		
29
+		const VIEW_PAGE = 'MAIN'; //config.js 에서 로그인 페이지 인지 아닌지 확인하기 위한 변수
30
+		
31
+		var CONN_KEY; //Jwt 토큰을 담기위한 변수
32
+		var CODE_LIST; //코드리스트를 담기위한 변수
33
+		var AUTH_MENU_LIST; //메뉴리스트를 담기위한 변수
34
+		var ACT_LIST; //액션리스트를 담기위한 변수
35
+		var POP_LIST; //팝업 리스트
36
+		var USER_ID; //사용자ID
37
+		var USER_NM; //사용자명		
38
+	</script>
39
+
40
+	<script src="../../js/app/properties.js"></script>
41
+	<script src="../../js/require.min.js" data-main="../../js/app/config.js"></script>
42
+</head>
43
+<body>
44
+	<div id="ITP_WRAPPER">
45
+		<!-- <div id="ITP_OVERLAY"></div> -->
46
+
47
+		<!-- 상단 -->
48
+		<header id="ITP_HEADER">
49
+			<div class="itp_head bg-primary">
50
+				<h1 class="text-center itp_tit">
51
+					<span id="ITP_TXT_MAIN_SHR_AFFL">오더퀸</span>
52
+					<span style="font-size: 18px; margin-top: -3px">|</span>
53
+					<span style="font-size: 14px">수발주시스템</span>
54
+				</h1>
55
+				<div class="itp_lt">
56
+					<span class="itp_icon"><a href="javascript:void(0)" id="ITP_BTN_MENU"><i class="glyphicon glyphicon-align-justify"></i></a></span>
57
+					<span class="itp_icon"><a href="javascript:void(0)" id="ITP_BTN_HOME"><i class="glyphicon glyphicon-home"></i></a></span>
58
+					<span class="itp_user" id="ITP_LOGIN_USER" style="cursor: pointer;"></span>
59
+					<span class="itp_icon"><a href="javascript:void(0)" id="ITP_BTN_BARCODE"><i class="glyphicon glyphicon-barcode"></i></a></span>
60
+				</div>
61
+				<div class="itp_rt">
62
+					<!--<span class="itp_logo"><img src="/oqpo-view/images/favicon.ico" alt="로고"></span>-->
63
+					<span class="itp_txt_brand" id="ITP_TXT_MAIN_SHR_TIMEOUT"></span>
64
+					<span class="itp_txt_brand" id="ITP_TXT_MAIN_SHR_BRAND"></span>
65
+					<span class="itp_sch_brand"><button type="button" id="ITP_BTN_MAIN_SHR_AFFL" class="btn btn-success btn-sm SEB"><i class="glyphicon glyphicon-search"></i></button></span>
66
+					<span class="itp_menu"><a href="javascript:void(0)" class="">메뉴안내</a></span>
67
+					<span class="itp_out"><a href="javascript:void(0)" class="ITP_BTN_LOGOUT">로그아웃</a></span>
68
+				</div>
69
+			</div>
70
+			<!-- 상단 탭 부분 -->
71
+			<div class="itp_tabs">
72
+				<ul class="nav nav-tabs itp_tab_list" role="tablist">
73
+					<li class="active"><a href="#ITP_TAB_SUMMARY" role="tab" data-toggle="tab" class="itp_tab_open">메뉴안내</a></li>
74
+				</ul>
75
+			</div>
76
+		</header>
77
+		
78
+		<div id="ITP_CONTENT_WRAPPER" class="fix">
79
+			
80
+		<nav id="ITP_SIDEBAR" class="itp_open_nav">
81
+			
82
+				<ul class="panel-group itp_nav"></ul>
83
+				
84
+				<textarea id="ITP_AJAX_MAIN_SIDE_LEVEL2_ROWCOPY" rows="0" cols="0" style="display:none;">		
85
+				<li class="panel panel-default">
86
+					<div class="panel-heading">
87
+						<div class="panel-title">
88
+							<a class="accordion-toggle" data-toggle="collapse" href="">
89
+								<span class="fnMenuNm">메뉴명</span>
90
+								<i class="indicator glyphicon glyphicon-chevron-down pull-right"></i>
91
+							</a>
92
+						</div>
93
+					</div>
94
+					<div class="panel-collapse collapse" id="">
95
+						<div class="panel-body itp_svgs_body">
96
+							<ul class="itp_svgs fnLevelBottomList"></ul>
97
+						</div>
98
+					</div>
99
+				</li>		
100
+				</textarea>
101
+				<textarea id="ITP_AJAX_MAIN_SIDE_LEVEL3_ROWCOPY" rows="0" cols="0" style="display:none;">		
102
+				<li>
103
+					<div class="itp_svg_in">
104
+						<a href="javascript:void(0)" data-itp-nav-id="" data-conn-url="" id="" class="itp_nav_link fix">														
105
+							<i class="glyphicon glyphicon-chevron-right"></i>
106
+							<span class="itp_tt fnMenuNm">메뉴명</span>
107
+						</a>
108
+					</div>
109
+				</li>		
110
+				</textarea>
111
+				<textarea id="ITP_AJAX_MAIN_SIDE_LEVEL4_ROWCOPY" rows="0" cols="0" style="display:none;">		
112
+				<li>
113
+					<div class="itp_svg_in">
114
+						<a href="javascript:void(0)" data-itp-nav-id="" data-conn-url="" id="" class="itp_nav_link fix">
115
+							<i class="itp_icon">└</i>								
116
+							<span class="itp_tt fnMenuNm">메뉴명</span>
117
+						</a>
118
+					</div>
119
+				</li>		
120
+				</textarea>
121
+				<textarea id="ITP_AJAX_MAIN_SIDE_LEVEL5_ROWCOPY" rows="0" cols="0" style="display:none;">		
122
+				<li>
123
+					<div class="itp_svg_in">
124
+						<a href="javascript:void(0)" data-itp-nav-id="" data-conn-url="" id="" class="itp_nav_link fix">
125
+							<i class="itp_icon_5">*</i>								
126
+							<span class="itp_tt fnMenuNm">메뉴명</span>
127
+						</a>
128
+					</div>
129
+				</li>		
130
+				</textarea>
131
+		</nav>
132
+
133
+		<div id="ITP_CONTAINER"
134
+			data-open-yn=""
135
+			data-nav-id=""
136
+			data-tit-id=""
137
+			data-memb-no=""
138
+			data-bunss-no=""
139
+			data-shop-no=""
140
+			data-shop-nm=""
141
+			data-from-dt=""
142
+			data-to-dt="">
143
+			<div class="tab-content itp_contents">
144
+				<section id="ITP_TAB_SUMMARY" class="tab-pane active itp_sec">
145
+					<div class="itp_cont">
146
+						<h2 class="hidden">메뉴안내</h2>
147
+						<article class="itp_detail">
148
+							<div id="ITP_AJAX_SUMMARY_DETAIL_CONTAINER" class="itp_det_in">
149
+								<div class="itp_boardView">
150
+								
151
+									<form id="ITP_FORM_MAIN_NOTICE_SEARCH" class="form-horizontal">
152
+									<input type="hidden" id="ITP_FORM_MAIN_NOTICE_SEARCH_FROM_DT" name="fromDt" value="">
153
+									<input type="hidden" id="ITP_FORM_MAIN_NOTICE_SEARCH_TO_DT" name="toDt" value="">
154
+									<input type="hidden" id="ITP_FORM_MAIN_NOTICE_SEARCH_SCH_DT" name="schDt" value="">
155
+									<input type="hidden" id="ITP_FORM_MAIN_NOTICE_SEARCH_NTICE_TITL" name="sNticeTitl" value="">
156
+									<input type="hidden" id="ITP_FORM_MAIN_NOTICE_SEARCH_USER_ID" name="userId" value="">
157
+									</form>
158
+									
159
+									<div class="fix" style="padding-bottom: 15px;">
160
+										<div id="ITP_MAIN_NOTICE_jqGrid_list" class="itp_tb_list itp_gType1" data-total-cnt="${totalCnt}">
161
+											<div id="ITP_MAIN_NOTICE_jqGridView" class="itp_views fix"></div>
162
+											<table id="ITP_MAIN_NOTICE_jqGrid"></table>
163
+											<div id="ITP_MAIN_NOTICE_jqGridPager"></div>
164
+											<div id="ITP_MAIN_NOTICE_jqGridEmpty" class="itp_no_data"></div>
165
+										</div>
166
+									</div>
167
+								
168
+									<table id="ITP_SUMMARY_jqGrid_list" class="table table-striped table-bordered">
169
+										<colgroup>
170
+											<col style="width:15%;">
171
+											<col style="width:15%;">
172
+											<col style="width:40%;">
173
+											<col style="width:15%;">
174
+											<col style="width:15%;">
175
+										</colgroup>
176
+										<thead>
177
+											<tr>
178
+								                <th>1Depth</th>
179
+								                <th>2Depth</th>
180
+								                <th>화면 정의</th>
181
+								                <th>가맹담당자 사용</th>
182
+								                <th>매장담당자 사용</th>
183
+								            </tr>
184
+										</thead>
185
+										<tbody>
186
+											<tr class="USER_TYPE_N">
187
+								                <th rowspan="4">누리키 운영관리</th>
188
+								                <td>가맹점정보관리</td>
189
+								                <td>가맹점 정보를 등록 관리를 합니다.</td>
190
+								                <td align="center">-</td>
191
+								                <td align="center">-</td>
192
+								            </tr>
193
+								            <tr class="USER_TYPE_N">
194
+								                <td>영업운영자관리</td>
195
+								                <td>외부 영업담당자 정보를 등록 관리합니다.</td>
196
+								                <td align="center">-</td>
197
+								                <td align="center">-</td>
198
+								            </tr>
199
+								            <tr class="USER_TYPE_N">
200
+								                <td>VAN관리</td>
201
+								                <td>카드결재 가능 VAN사 정보를 관리합니다.</td>
202
+								                <td align="center">-</td>
203
+								                <td align="center">-</td>
204
+								            </tr>
205
+								            <tr class="USER_TYPE_N">
206
+								                <td>장비환경기본값 설정</td>
207
+								                <td>키오스크 장비의 환경설정값을 관리합니다.</td>
208
+								                <td align="center">-</td>
209
+								                <td align="center">-</td>
210
+								            </tr>
211
+								            <tr class="USER_TYPE_N USER_TYPE_P">
212
+								                <th rowspan="3">가맹점관리</th>
213
+								                <td>가맹브랜드관리</td>
214
+								                <td>가맹점별 브랜드 정보를 관리합니다.</td>
215
+								                <td align="center">●</td>
216
+								                <td align="center">-</td>
217
+								            </tr>
218
+								            <tr class="USER_TYPE_N USER_TYPE_P">
219
+								                <td>매장관리</td>
220
+								                <td>가맹점 매장 정보를 관리합니다.</td>
221
+								                <td align="center">●</td>
222
+								                <td align="center">-</td>
223
+								            </tr>
224
+								            <tr class="USER_TYPE_N USER_TYPE_P">
225
+								                <td>사용자관리</td>
226
+								                <td>가맹점별 사용자 정보를 관리합니다.</td>
227
+								                <td align="center">●</td>
228
+								                <td align="center">-</td>
229
+								            </tr>
230
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
231
+								                <th rowspan="5">브랜드상품관리</th>
232
+								                <td>카테고리관리</td>
233
+								                <td>모든 매장에서 공통으로 사용할 상품 카테고리 정보를 관리합니다.</td>
234
+								                <td align="center">●</td>
235
+								                <td align="center">-</td>
236
+								            </tr>
237
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
238
+								                <td>상품관리</td>
239
+								                <td>모든 매장에서 공통으로 사용할 상품 정보를 관리합니다.</td>
240
+								                <td align="center">●</td>
241
+								                <td align="center">-</td>
242
+								            </tr>
243
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
244
+								                <td>옵션관리</td>
245
+								                <td>모든 매장에서 공통으로 사용할 옵션 정보를 관리합니다.</td>
246
+								                <td align="center">●</td>
247
+								                <td align="center">-</td>
248
+								            </tr>
249
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
250
+								                <td>추천상품관리</td>
251
+								                <td>모든 매장에서 공통으로 사용할 추천상품 정보를 관리합니다.</td>
252
+								                <td align="center">●</td>
253
+								                <td align="center">-</td>
254
+								            </tr>
255
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
256
+								                <td>이벤트관리</td>
257
+								                <td>모든 매장에서 공통으로 사용할 이벤트를 관리합니다.</td>
258
+								                <td align="center">●</td>
259
+								                <td align="center">-</td>
260
+								            </tr>
261
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
262
+								                <th rowspan="5">매장상품관리</th>
263
+								                <td>카테고리관리</td>
264
+								                <td>매장별 각각 사용할 상품 카테고리 정보를 관리합니다.</td>
265
+								                <td align="center">●</td>
266
+								                <td align="center">●</td>
267
+								            </tr>
268
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
269
+								                <td>상품관리</td>
270
+								                <td>매장별 각각 사용할 상품 정보를 관리합니다.</td>
271
+								                <td align="center">●</td>
272
+								                <td align="center">●</td>
273
+								            </tr>
274
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
275
+								                <td>옵션관리</td>
276
+								                <td>매장별 각각 사용할 옵션 정보를 관리합니다.</td>
277
+								                <td align="center">●</td>
278
+								                <td align="center">●</td>
279
+								            </tr>
280
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
281
+								                <td>추천상품관리</td>
282
+								                <td>매장별 각각 사용할 추천상품 정보를 관리합니다.</td>
283
+								                <td align="center">●</td>
284
+								                <td align="center">●</td>
285
+								            </tr>
286
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
287
+								                <td>이벤트관리</td>
288
+								                <td>매장별 각각 사용할 이벤트를 관리합니다.</td>
289
+								                <td align="center">●</td>
290
+								                <td align="center">●</td>
291
+								            </tr>
292
+								            
293
+								            <!-- 키오스크관리 시작 -->
294
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
295
+								                <th rowspan="5">키오스크관리</th>
296
+								                <td>브랜드 코너관리</td>
297
+								                <td>모든 매장의 키오스크 장비에 출력할 코너 정보를 관리합니다.</td>
298
+								                <td align="center">●</td>
299
+								                <td align="center"></td>
300
+								            </tr>
301
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
302
+								                <td>브랜드 코너별 상품정보</td>
303
+								                <td>모든 매장의 키오스크 장비에 출력할 코너별 상품 정보를 관리합니다.</td>
304
+								                <td align="center">●</td>
305
+								                <td align="center"></td>
306
+								            </tr>
307
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
308
+								                <td>매장 코너관리</td>
309
+								                <td>매장별 운영중인 키오스크 장비에 출력할 코너 정보를 관리합니다.</td>
310
+								                <td align="center">●</td>
311
+								                <td align="center">●</td>
312
+								            </tr>
313
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
314
+								                <td>매장 코너별 상품정보</td>
315
+								                <td>매장별 운영중인 키오스크 장비에 출력할 코너별 상품 정보를 관리합니다.</td>
316
+								                <td align="center">●</td>
317
+								                <td align="center">●</td>
318
+								            </tr>
319
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
320
+								                <td>매장 판매상품관리</td>
321
+								                <td>매장별 키오스크에 판매할 상품정보를 관리합니다.</td>
322
+								                <td align="center">●</td>
323
+								                <td align="center">●</td>
324
+								            </tr>
325
+								            
326
+								            <tr class="USER_TYPE_S">
327
+								                <th rowspan="3">키오스크관리</th>
328
+								                <td>매장 코너관리</td>
329
+								                <td>매장별 운영중인 키오스크 장비에 출력할 코너 정보를 관리합니다.</td>
330
+								                <td align="center">●</td>
331
+								                <td align="center">●</td>
332
+								            </tr>
333
+								            <tr class="USER_TYPE_S">
334
+								                <td>매장 코너별 상품정보</td>
335
+								                <td>매장별 운영중인 키오스크 장비에 출력할 코너별 상품 정보를 관리합니다.</td>
336
+								                <td align="center">●</td>
337
+								                <td align="center">●</td>
338
+								            </tr>
339
+								            <tr class="USER_TYPE_S">
340
+								                <td>매장 판매상품관리</td>
341
+								                <td>매장별 키오스크에 판매할 상품정보를 관리합니다.</td>
342
+								                <td align="center">●</td>
343
+								                <td align="center">●</td>
344
+								            </tr>
345
+								            <!-- 키오스크관리 끝 -->
346
+								            
347
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
348
+								                <th rowspan="4">매장장비관리</th>
349
+								                <td>키오스크정보관리</td>
350
+								                <td>매장별 사용 관리할 키오스크 장비 정보를 관리합니다.</td>
351
+								                <td align="center">●</td>
352
+								                <td align="center">●</td>
353
+								            </tr>
354
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
355
+								                <td>키오스크 이미지관리</td>
356
+								                <td>매장별 사용 관리할 키오스크 화면에 출력할 이미지 또는 동영상 정보를 관리합니다.</td>
357
+								                <td align="center">●</td>
358
+								                <td align="center">●</td>
359
+								            </tr>
360
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
361
+								                <td>주방프린터설정</td>
362
+								                <td>매장별 사용하고 있는 주방프린터 설정 정보를 관리합니다.</td>
363
+								                <td align="center">●</td>
364
+								                <td align="center">●</td>
365
+								            </tr>
366
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
367
+								                <td>KDS설정</td>
368
+								                <td>매장별 사용하고 있는 KDS설정 정보를 관리합니다.</td>
369
+								                <td align="center">●</td>
370
+								                <td align="center">●</td>
371
+								            </tr>
372
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
373
+								                <th rowspan="3">DID관리</th>
374
+								                <td>컨텐츠관리</td>
375
+								                <td>가맹 브랜드별 컨텐츠 내역 정보를 관리합니다.</td>
376
+								                <td align="center">●</td>
377
+								                <td align="center">●</td>
378
+								            </tr>
379
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
380
+								                <td>디스플레이정보관리</td>
381
+								                <td>가맹 브랜드별 디스플레이 화면 구성 정보 및 출력할 컨텐츠 정보를 관리합니다.</td>
382
+								                <td align="center">●</td>
383
+								                <td align="center">●</td>
384
+								            </tr>
385
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
386
+								                <td>장비관리</td>
387
+								                <td>매장별 사용중인 DID 장비 정보를 관리합니다.</td>
388
+								                <td align="center">●</td>
389
+								                <td align="center">●</td>
390
+								            </tr>
391
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
392
+								                <th rowspan="3">브랜드매출관리</th>
393
+								                <td>일별매출현황</td>
394
+								                <td>가맹 브랜드별 일일 매출 정보를 출력합니다.</td>
395
+								                <td align="center">●</td>
396
+								                <td align="center"></td>
397
+								            </tr>
398
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
399
+								                <td>월별매출현황</td>
400
+								                <td>가맹 브랜드별 월별 매출 정보를 출력합니다.</td>
401
+								                <td align="center">●</td>
402
+								                <td align="center"></td>
403
+								            </tr>
404
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B">
405
+								                <td>상품별매출현황</td>
406
+								                <td>가맹 브랜드별 월별 상품별 매출 정보를 출력합니다.</td>
407
+								                <td align="center">●</td>
408
+								                <td align="center"></td>
409
+								            </tr>
410
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
411
+								                <th rowspan="4">매장매출관리</th>
412
+								                <td>매출상세내역</td>
413
+								                <td>매장 키오스크별 주문 내역 상세정보를 출력합니다.</td>
414
+								                <td align="center">●</td>
415
+								                <td align="center">●</td>
416
+								            </tr>
417
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
418
+								                <td>일별매출현황</td>
419
+								                <td>매장별 일일 매출 정보를 출력합니다.</td>
420
+								                <td align="center">●</td>
421
+								                <td align="center">●</td>
422
+								            </tr>
423
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
424
+								                <td>월별매출현황</td>
425
+								                <td>매장별 월별 매출 정보를 출력합니다.</td>
426
+								                <td align="center">●</td>
427
+								                <td align="center">●</td>
428
+								            </tr>
429
+								            <tr class="USER_TYPE_N USER_TYPE_P USER_TYPE_B USER_TYPE_S">
430
+								                <td>상품별매출현황</td>
431
+								                <td>매장별 월별 상품별 매출 정보를 출력합니다.</td>
432
+								                <td align="center">●</td>
433
+								                <td align="center">●</td>
434
+								            </tr>
435
+								            
436
+										</tbody>
437
+									</table>
438
+								</div>
439
+							</div>
440
+						</article>
441
+					</div>
442
+		
443
+					<script src="../../js/app/summary/ITP_SUMMARY.js"></script>
444
+					<script src="../js/app/main.js"></script>
445
+				</section>
446
+			</div>
447
+		</div>
448
+		</div>
449
+
450
+		<footer id="ITP_FOOTER">
451
+			<div id="ITP_MODAL_ALERT" class="modal itp_modal">
452
+				<div class="modal-dialog modal-sm">
453
+					<div class="modal-content">
454
+						<div class="modal-header">
455
+							<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
456
+							<h5 class="modal-title">알림</h5>
457
+						</div>
458
+						<div class="modal-body">
459
+							<div class="text-center itp_alert_txt"></div>
460
+						</div>
461
+						<div class="modal-footer">
462
+							<button type="button" class="btn btn-default" id="ITP_MODAL_ALERT_CANCEL" data-dismiss="modal">취소</button>
463
+							<button type="button" class="btn btn-primary" id="ITP_MODAL_ALERT_CONFIRM">확인</button>
464
+						</div>
465
+					</div>
466
+				</div>
467
+			</div>
468
+		
469
+			<div id="ITP_MODAL_ALERT_AJAX" class="modal itp_modal">
470
+				<div class="modal-dialog modal-sm">
471
+					<div class="modal-content">
472
+						<div class="modal-header">
473
+							<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
474
+							<h5 class="modal-title">알림</h5>
475
+						</div>
476
+						<div class="modal-body">
477
+							<div class="text-center itp_alert_txt"></div>
478
+						</div>
479
+						<div class="modal-footer">
480
+							<button type="button" class="btn btn-primary" id="ITP_MODAL_ALERT_AJAX_CONFIRM">확인</button>
481
+						</div>
482
+					</div>
483
+				</div>
484
+			</div>
485
+		</footer>
486
+		
487
+		<aside id="ITP_ASIDE"></aside>		
488
+	</div>
489
+</body>
490
+</html>

+ 94 - 0
src/main/webapp/mobile/js/app/login.js

@@ -0,0 +1,94 @@
1
+require(['config'], function() {
2
+	require([
3
+		'jquery', 
4
+		'crypto' //Crypto 암호화 js - 필요한 페이지만 불러서 쓴다
5
+	], function($) {
6
+		if (sessionStorage.getItem('itp_login_info') !== null) { //Jwt 가 살아있으면 메인으로 보낸다.
7
+	    	location.replace('./main.html');
8
+	    }
9
+
10
+		itp_fn_login_init();
11
+		
12
+		$('#ITP_LOGIN').on('keyup', 'input, textarea', function() {
13
+			var $th = $(this);
14
+	        $th.val($th.val().replace(/(<([^>]+)>)/ig, function() {return '';}));
15
+		});
16
+		
17
+		$('#login_btn').click(function() {
18
+			if(itp_fn_login_validate()) {
19
+				itp_fn_login_proc();
20
+			}	
21
+		});
22
+		
23
+		var callbackFn = function(result) {
24
+			POP_LIST = result.popList;
25
+			fn_proc_popup_view('L');
26
+		};
27
+		const key = {sViewTargetCd: 'L'};
28
+		var param = $.param(key);
29
+		fn_ajax_call('/api/pop/open-pop', param, callbackFn, 'GET');
30
+	});
31
+});
32
+
33
+function itp_fn_login_init() {	
34
+	$('#ITP_FORM_LOGIN_SAVE_ID').prop('checked', true);
35
+	var save_id = localStorage.getItem('ITP_USER_ID');
36
+    if (save_id !== null) {
37
+    	$('#ITP_FORM_LOGIN_USER_ID').val(save_id);
38
+    }
39
+};
40
+
41
+function itp_fn_login_validate() {
42
+	$('#ITP_FORM_LOGIN_USER_ID').closest('.form-group').removeClass('has-error');
43
+	$('#ITP_FORM_LOGIN_USER_PW').closest('.form-group').removeClass('has-error');
44
+	$('#ITP_FORM_LOGIN_ERROR').text(ITP_MSG_LOCALE.message.login.help);
45
+
46
+	if ($('#ITP_FORM_LOGIN_USER_ID').val() == '') {
47
+		$('#ITP_FORM_LOGIN_USER_ID').closest('.form-group').addClass('has-error');
48
+		$('#ITP_FORM_LOGIN_ERROR').text(ITP_MSG_LOCALE.message.login.needId);
49
+		return false;
50
+	}
51
+
52
+	if ($('#ITP_FORM_LOGIN_USER_PW').val() == '') {
53
+		$('#ITP_FORM_LOGIN_USER_PW').closest('.form-group').addClass('has-error');
54
+		$('#ITP_FORM_LOGIN_ERROR').text(ITP_MSG_LOCALE.message.login.needPw);
55
+		return false;
56
+	}
57
+
58
+	$('#ITP_FORM_LOGIN_ERROR').text('');
59
+	const userId = $('#ITP_FORM_LOGIN_USER_ID').val();
60
+	if ($('#ITP_FORM_LOGIN_SAVE_ID').prop('checked')) {
61
+		localStorage.setItem('ITP_USER_ID', userId);
62
+	} else {
63
+		localStorage.removeItem('ITP_USER_ID');
64
+	}
65
+
66
+	return true;
67
+};
68
+
69
+function itp_fn_login_proc() {
70
+	
71
+	var callbackFn = function(result) {
72
+		var hashed = fnHashed(result.hashed);
73
+		$('#userId').val(CryptoJS.AES.encrypt($('#ITP_FORM_LOGIN_USER_ID').val(), hashed));
74
+		$('#password').val(CryptoJS.AES.encrypt($('#ITP_FORM_LOGIN_USER_PW').val(), hashed));
75
+	    var loginFn = function(result) {
76
+			// alert('SIGN-IN RESULT : ' + JSON.stringify(result));		
77
+			sessionStorage.setItem('itp_login_info', JSON.stringify({
78
+				timestamp: new Date(),
79
+		        connKey: result.connKey		// Jwt키를 가져와서 세션 스토리지에 저장
80
+			})); 
81
+	    	$(location).attr('href', MOBILE_CONTEXTPATH + '/app/main.html');
82
+		};
83
+		var params = $('#command').serializeObject();
84
+		fn_ajax_call('/api/member/sign-in', JSON.stringify(params), loginFn, 'POST'); //암호화 해서 보내는 경우 먼저 해시키를 가져와서 암호화해서 보낸다
85
+	};
86
+	fn_ajax_call('/api/session/hashed', null, callbackFn, 'GET'); //Crypto 암호화를 위한 해쉬키.. 로그인 후에는 Jwt 포함인 /api/session/hashedKey 이걸로 호출해서 사용한다.
87
+	
88
+	// 공통코드 저장 테스트
89
+	// let map = new Map();
90
+	// map.set('useYn', JSON.stringify([{'codeDtlCd':'Y','codeDtlNm':'사용'},{'codeDtlCd':'N','codeDtlNm':'미사용'}]));
91
+	// sessionStorage.itp_common_code = JSON.stringify(Array.from(map.entries()));
92
+	
93
+	// $(location).attr('href', ITP_CONTEXTPATH + '/main.html');	
94
+}

+ 156 - 0
src/main/webapp/mobile/js/app/main.js

@@ -0,0 +1,156 @@
1
+
2
+const MAIN_NOTICE_GRID_ID = '#ITP_MAIN_NOTICE_jqGrid';
3
+const MAIN_NOTICE_GRID_LIST = '#ITP_MAIN_NOTICE_jqGrid_list';
4
+const MAIN_NOTICE_GRID_PAGER = '#ITP_MAIN_NOTICE_jqGridPager';
5
+const MAIN_NOTICE_GRID_EMPTY = '#ITP_MAIN_NOTICE_jqGridEmpty';
6
+
7
+let NTICE_DETAIL_GRID_LIST = '/api/ntice/detail-grid-list';
8
+
9
+require(['config'], function() {
10
+	require([
11
+		'jquery',
12
+		'jquery.bootstrap.fileUpload' //파일 업로드가 있는 페이지에서 로딩
13
+	], function($) {
14
+		
15
+		setTimeout(function() {
16
+			// 시간지정
17
+			$('#ITP_FORM_MAIN_NOTICE_SEARCH_SCH_DT').val(itp_fn_date_format(new Date(), 2));
18
+			$('#ITP_FORM_MAIN_NOTICE_SEARCH_USER_ID').val(USER_ID);
19
+			
20
+			// 그리드
21
+			itp_fn_jqgrid_resize(MAIN_NOTICE_GRID_ID, MAIN_NOTICE_GRID_LIST, 'lg');
22
+			itp_fn_MAIN_NOTICE_grid.init();
23
+	    	itp_fn_fire_window_resize();
24
+	
25
+			// 조회
26
+	    	itp_fn_MAIN_NOTICE_search();
27
+
28
+	    	// Barcode
29
+			itp_fn_barcode.init();
30
+
31
+		}, 100);
32
+				
33
+	});
34
+});
35
+
36
+var itp_fn_MAIN_NOTICE_grid = {
37
+	init: function() {
38
+		// 데이터 없을때
39
+		itp_fn_MAIN_NOTICE_empty.push();
40
+		$(MAIN_NOTICE_GRID_EMPTY).on('click', function() {
41
+			itp_fn_MAIN_NOTICE_empty.back();
42
+			itp_MAIN_NOTICE_param.gridSize = $.jgrid.defaults.rowNum;
43
+			$(MAIN_NOTICE_GRID_ID).setGridParam({'postData': JSON.stringify(itp_MAIN_NOTICE_param)}).trigger('reloadGrid');
44
+		});
45
+	},
46
+	callBack: function() {
47
+		let param = $('#ITP_FORM_MAIN_NOTICE_SEARCH').serializeObject();
48
+		param.gridSize = $.jgrid.defaults.rowNum;
49
+		$(MAIN_NOTICE_GRID_ID).jqGrid({
50
+			colModel: [
51
+				{
52
+					index: 'NTICE_NO', name: 'nticeNo',
53
+					label: ITP_MSG_LOCALE.label.notiNo, //공지번호
54
+					width: '10', fixed: false, align: 'center',
55
+					sortable: false, hidden: false
56
+				},
57
+				{
58
+					index: 'NTICE_TITL', name: 'nticeTitl',
59
+					label: '공지사항', //공지제목
60
+					width: '15', fixed: false, align: 'center',
61
+					sortable: false, hidden: false
62
+				},
63
+				{
64
+					index: 'ADD_DT', name: 'addDt',
65
+					label: ITP_MSG_LOCALE.label.regDt, //등록일
66
+					width: '10', fixed: false, align: 'center',
67
+					sortable: false, hidden: false
68
+				}
69
+			],
70
+			loadBeforeSend: function(jqXHR) {
71
+			    jqXHR.setRequestHeader('X-AUTH-TOKEN', CONN_KEY);
72
+			},
73
+			postData: JSON.stringify(param),
74
+			url: DOMAIN + NTICE_DETAIL_GRID_LIST,
75
+			pager: MAIN_NOTICE_GRID_PAGER,
76
+			multiselect: false,
77
+			rownumbers: true,
78
+			onCellSelect: function(rowId, cellIdx, cellValue) {
79
+				var cm = $(this).jqGrid('getGridParam', 'colModel');
80
+				var colNm = cm[cellIdx].name;
81
+				if (colNm == 'nticeTitl') {
82
+					const nticeNoVal = $(this).jqGrid('getCell', rowId, 'nticeNo');
83
+					const key = {nticeNo: nticeNoVal, viewCd: 'R'};
84
+					var param = $.param(key);
85
+					// itp_fn_MAIN_NOTICE_view(param);
86
+					
87
+					fn_call_popup('comm', 'NOTICE_INFO_POPUP', '#ITP_ASIDE', function() {
88
+												
89
+					}, param, 'S');
90
+					$('#ITP_NOTICE_INFO_POPUP > div.modal-dialog').width('500px');
91
+				}
92
+		   	},
93
+			loadComplete: function(data) {
94
+				//console.log(JSON.stringify(data));
95
+				itp_fn_grid_load_complete(data, MAIN_NOTICE_GRID_ID, true, 'number', 'MAIN_NOTICE', itp_MAIN_NOTICE_search, itp_fn_MAIN_NOTICE_empty, false, data.gridRecords, false);
96
+				var ids = $(MAIN_NOTICE_GRID_ID).getDataIDs();
97
+				$.each(ids, function(idx, rowId) {
98
+					$(MAIN_NOTICE_GRID_ID).jqGrid('setCell', rowId, 'nticeTitl', '', ITP_GRID_COL_STYLE.link);
99
+				});
100
+
101
+				if ($('#ITP_CONTAINER').data('openYn') == 'Y') {
102
+					$('#ITP_CONTAINER').data('openYn', 'N');
103
+					const keyNew = {nticeNo: $('#ITP_CONTAINER').data('nticeNo'), viewCd: 'R'};
104
+					var paramNew = $.param(keyNew);
105
+					itp_fn_MAIN_NOTICE_view(paramNew);
106
+				}
107
+		    },
108
+		    loadError: function(jqXHR, textStatus, errorThrown) {
109
+		    	itp_fn_grid_load_error(jqXHR, textStatus, errorThrown);
110
+		    },
111
+		    onPaging: function(action) {
112
+		    	itp_fn_grid_paging(MAIN_NOTICE_GRID_ID, action, param);
113
+		    }
114
+		}).navGrid(MAIN_NOTICE_GRID_PAGER, ITP_GRID_NAV_DEFAULTS.navGrid);
115
+	},
116
+	clearData : function() {
117
+		$(MAIN_NOTICE_GRID_ID).jqGrid('clearGridData', true);
118
+		$(MAIN_NOTICE_GRID_LIST).find('.ui-jqgrid-bdiv').css('min-height', '100px');
119
+		$(MAIN_NOTICE_GRID_EMPTY).html(ITP_MSG_LOCALE.message.grid.noData);
120
+		$(MAIN_NOTICE_GRID_EMPTY).show();
121
+	},
122
+	unload : function() {
123
+		$.jgrid.gridUnload(MAIN_NOTICE_GRID_ID);
124
+	}
125
+};
126
+
127
+var itp_fn_MAIN_NOTICE_search = function() {
128
+	itp_fn_MAIN_NOTICE_grid.unload();
129
+	itp_fn_MAIN_NOTICE_grid.callBack();
130
+};
131
+
132
+let itp_MAIN_NOTICE_param = {};
133
+let itp_MAIN_NOTICE_search = false;
134
+var itp_fn_MAIN_NOTICE_empty = {
135
+	push: function() {		
136
+		let param = $('#ITP_FORM_MAIN_NOTICE_SEARCH').serializeObject();
137
+		itp_MAIN_NOTICE_param = param;
138
+	},
139
+	back: function() {
140
+		
141
+	}
142
+};
143
+
144
+var itp_fn_barcode = {
145
+	init: function () {
146
+		this.event();
147
+	},
148
+	event: function () {
149
+		$('#ITP_BTN_BARCODE').on('click', function() {
150
+			$(location).attr('href', 'app:scan');
151
+		});
152
+	},
153
+	callback: function (barcode) {
154
+		itp_fn_modal_alert_ajax(barcode);
155
+	}
156
+};