Browse Source

mobile 폴더 생성

juney 2 years ago
parent
commit
d4999bc22c

+ 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'; 

+ 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'; 

+ 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
+};