
Merge branch 'front_end' of http://210.180.118.83/ysseo/crosswalk into front_end
@db6e670476af0cbb7e8c28478aa025a7bef2211c
--- client/resources/css/responsive.css
+++ client/resources/css/responsive.css
... | ... | @@ -1,4 +1,4 @@ |
1 |
-@media all and (max-width: 479px) { |
|
1 |
+@media all and (max-width: px) { |
|
2 | 2 |
header{padding: 0 1rem;} |
3 | 3 |
#root { |
4 | 4 |
} |
--- client/views/index.html
+++ client/views/index.html
... | ... | @@ -13,6 +13,7 @@ |
13 | 13 |
<link rel="stylesheet" href="/client/resources/css/responsive.css" /> |
14 | 14 |
<link rel="stylesheet" href="/client/resources/css/main.css" /> |
15 | 15 |
<link rel="stylesheet" href="/client/resources/css/style.css" /> |
16 |
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" /> |
|
16 | 17 |
|
17 | 18 |
<script type="text/javascript" src="/client/resources/js/jquery-2.1.1.min.js"></script> |
18 | 19 |
<script type="text/javascript" src="/client/resources/js/ol.js"></script> |
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
... | ... | @@ -554,7 +554,7 @@ |
554 | 554 |
|
555 | 555 |
@media (max-width: 749px) { |
556 | 556 |
.logo { |
557 |
- align-items: unset; |
|
557 |
+ align-items: center; |
|
558 | 558 |
padding-top: 2rem; |
559 | 559 |
gap: 1rem; |
560 | 560 |
} |
... | ... | @@ -573,9 +573,10 @@ |
573 | 573 |
display: none; |
574 | 574 |
} |
575 | 575 |
input#menuicon + label { |
576 |
+ flex: 0 0 10%; |
|
576 | 577 |
display: block; |
577 | 578 |
/* width: 30px; */ |
578 |
- height: 40px; |
|
579 |
+ height: 30px; |
|
579 | 580 |
/* position: absolute; */ |
580 | 581 |
left: 2%; |
581 | 582 |
top: 25px; |
--- client/views/pages/Analysis/Analysis.vue
+++ client/views/pages/Analysis/Analysis.vue
... | ... | @@ -1784,7 +1784,7 @@ |
1784 | 1784 |
.search { |
1785 | 1785 |
width: inherit; |
1786 | 1786 |
} |
1787 |
- .toggle { |
|
1787 |
+ /* .toggle { |
|
1788 | 1788 |
color: #fff; |
1789 | 1789 |
font-weight: bold; |
1790 | 1790 |
background: #13833b; |
... | ... | @@ -1793,7 +1793,7 @@ |
1793 | 1793 |
z-index: 150; |
1794 | 1794 |
top: 7.5rem; |
1795 | 1795 |
right: 1rem; |
1796 |
- } |
|
1796 |
+ } */ |
|
1797 | 1797 |
.wrap { |
1798 | 1798 |
height: auto !important; |
1799 | 1799 |
width: inherit; |
--- client/views/pages/CrosswalkManagement/CrosswalkInsert copy.vue
+++ client/views/pages/CrosswalkManagement/CrosswalkInsert copy.vue
... | ... | @@ -196,7 +196,7 @@ |
196 | 196 |
.search { |
197 | 197 |
width: inherit; |
198 | 198 |
} |
199 |
- .toggle { |
|
199 |
+ /* .toggle { |
|
200 | 200 |
color: #fff; |
201 | 201 |
font-weight: bold; |
202 | 202 |
background: #13833b; |
... | ... | @@ -205,7 +205,7 @@ |
205 | 205 |
z-index: 150; |
206 | 206 |
top: 7.5rem; |
207 | 207 |
right: 1rem; |
208 |
- } |
|
208 |
+ } */ |
|
209 | 209 |
.wrap { |
210 | 210 |
height: auto !important; |
211 | 211 |
width: inherit; |
--- client/views/pages/CrosswalkManagement/CrosswalkInsert.vue
+++ client/views/pages/CrosswalkManagement/CrosswalkInsert.vue
... | ... | @@ -892,7 +892,7 @@ |
892 | 892 |
.search { |
893 | 893 |
width: inherit; |
894 | 894 |
} |
895 |
- |
|
895 |
+/* |
|
896 | 896 |
.toggle { |
897 | 897 |
color: #fff; |
898 | 898 |
font-weight: bold; |
... | ... | @@ -902,7 +902,7 @@ |
902 | 902 |
z-index: 150; |
903 | 903 |
top: 1.3rem; |
904 | 904 |
right: 1rem; |
905 |
- } |
|
905 |
+ } */ |
|
906 | 906 |
|
907 | 907 |
.wrap { |
908 | 908 |
height: auto !important; |
--- client/views/pages/RealtimeStatus/CrosswalkListSearch.vue
+++ client/views/pages/RealtimeStatus/CrosswalkListSearch.vue
... | ... | @@ -202,19 +202,19 @@ |
202 | 202 |
<div class="modal_base_body"> |
203 | 203 |
<div class="flex-between"> |
204 | 204 |
<div v-if="WTRMS_CAM1.file_name!=null" class="img" >무단횡단검지카메라 이미지 |
205 |
- <img style="height:100px;" :src="'http://localhost:40000/download/'+WTRMS_CAM1.file_path+'/'+WTRMS_CAM1.file_name"> |
|
205 |
+ <img style="height:100px;" :src="'http://localhost:8080/download/'+WTRMS_CAM1.file_path+'/'+WTRMS_CAM1.file_name"> |
|
206 | 206 |
</div> |
207 | 207 |
<div v-if="WTRMS_CAM2.file_name!=null" class="img" >무단횡단검지카메라 이미지 |
208 |
- <img style="height:100px;" :src="'http://localhost:40000/download/'+WTRMS_CAM2.file_path+'/'+WTRMS_CAM2.file_name"> |
|
208 |
+ <img style="height:100px;" :src="'http://localhost:8080/download/'+WTRMS_CAM2.file_path+'/'+WTRMS_CAM2.file_name"> |
|
209 | 209 |
</div> |
210 | 210 |
<div v-if="SIGNL_EXTN_CAM1.file_name!=null" class="img" >신호연장검지카메라 이미지 |
211 |
- <img style="height:100px;" :src="'http://localhost:40000/download/'+SIGNL_EXTN_CAM1.file_path+'/'+SIGNL_EXTN_CAM1.file_name"> |
|
211 |
+ <img style="height:100px;" :src="'http://localhost:8080/download/'+SIGNL_EXTN_CAM1.file_path+'/'+SIGNL_EXTN_CAM1.file_name"> |
|
212 | 212 |
</div> |
213 | 213 |
<div v-if="SIGNL_EXTN_CAM2.file_name!=null" class="img" >신호연장검지카메라 이미지 |
214 |
- <img style="height:100px;" :src="'http://localhost:40000/download/'+SIGNL_EXTN_CAM2.file_path+'/'+SIGNL_EXTN_CAM2.file_name"> |
|
214 |
+ <img style="height:100px;" :src="'http://localhost:8080/download/'+SIGNL_EXTN_CAM2.file_path+'/'+SIGNL_EXTN_CAM2.file_name"> |
|
215 | 215 |
</div> |
216 | 216 |
<div v-if="RITTRN_VHCLE_CAM.file_name!=null" class="img" >우회차량검지카메라 이미지 |
217 |
- <img style="height:100px;" :src="'http://localhost:40000/download/'+RITTRN_VHCLE_CAM.file_path+'/'+RITTRN_VHCLE_CAM.file_name"> |
|
217 |
+ <img style="height:100px;" :src="'http://localhost:8080/download/'+RITTRN_VHCLE_CAM.file_path+'/'+RITTRN_VHCLE_CAM.file_name"> |
|
218 | 218 |
</div> |
219 | 219 |
</div> |
220 | 220 |
<h3 class="modal_base_title">횡단보도 기본정보</h3> |
+++ client/views/pages/RealtimeStatus/RealtimeStatus copy.vue
... | ... | @@ -0,0 +1,1332 @@ |
1 | +<template> | |
2 | + <button @click="toggleSlide" class="toggle">{{ slideText }}</button> | |
3 | + <div class="grid2_8"> | |
4 | + <div :class="['slide-content left', { active: showSlide }]"> | |
5 | + <div class="wrap flex-between"> | |
6 | + <div class="search"> | |
7 | + <div class="search-mobile"> | |
8 | + <h2>조건검색</h2> | |
9 | + <div class="box grid gap05 bg-gray"> | |
10 | + <div class="titleBar"> | |
11 | + <h3>지역설정</h3> | |
12 | + <hr /> | |
13 | + </div> | |
14 | + <DongSelectList @setDongCd="setDongCd" :crslk_azHiddenCk="true" :open_layers="this.$refs.open_layers" | |
15 | + @siDoGunGuSelectF="dongSelectF" @dongSelectF="dongSelectF" @nodeSelectF="dongSelectF" ref="dongSelecter"> | |
16 | + </DongSelectList> | |
17 | + </div> | |
18 | + <div class="box"> | |
19 | + <div class="titleBar"> | |
20 | + <h3>조건 설정</h3> | |
21 | + <hr /> | |
22 | + </div> | |
23 | + | |
24 | + <div class="flex-between m-b"> | |
25 | + <input class="m-r cbox_1" type="checkbox" v-model="condition['wtrms']" /><label for="">무단횡단</label> | |
26 | + <input class="m-r cbox_1" type="checkbox" v-model="condition['signExtn']" /><label for="">신호연장</label> | |
27 | + <input class="m-r cbox_1" type="checkbox" v-model="condition['rittrnVhcle']" /><label for="">신호위반</label> | |
28 | + <input class="m-r cbox_1" type="checkbox" v-model="condition['eqpmnTrobl']" /><label for="">장애발생</label> | |
29 | + </div> | |
30 | + <!-- | |
31 | + <div class="grid3_7 m-b"> | |
32 | + <label for="date-input">일자</label> | |
33 | + <input class="date-input" id="date-input" type="date" v-model="condition['date']" /> | |
34 | + </div> | |
35 | + <div class="grid3_7 m-b3"> | |
36 | + <label for="time-input">시간대</label> | |
37 | + <div class="flex-between gap"> | |
38 | + <input | |
39 | + class="time-input" | |
40 | + id="time-input" | |
41 | + type="time" | |
42 | + v-model="condition['start_time']" | |
43 | + />~<input | |
44 | + class="time-input" | |
45 | + id="time-input" | |
46 | + type="time" | |
47 | + v-model="condition['end_time']" | |
48 | + /> | |
49 | + </div> | |
50 | + </div> --> | |
51 | + <button class="btn-l gr-btn search-btn" @click="statusSearch()" style="padding: 0.5rem 0"> | |
52 | + 검색하기 | |
53 | + </button> | |
54 | + </div> | |
55 | + </div> | |
56 | + <div class="live-mobile"> | |
57 | + <h2>실시간 발생 현황</h2> | |
58 | + <div class="box bg-white tab-buttons" style="height: calc(100% - 50rem)"> | |
59 | + <div class="btn_set flex-center gap"> | |
60 | + <button class="m-r flex-between gray-btn" v-for="tab in tabs" :key="tab.id" | |
61 | + :class="{ active: activeTab === tab.id }" @click="changeTab(tab.id)"> | |
62 | + {{ tab.title }} | |
63 | + <img v-if="tab.id === 2 && troubleOccurrenceStatusList.length > 0" | |
64 | + src="../../../resources/images/warning.png" alt="" /> | |
65 | + </button> | |
66 | + </div> | |
67 | + <div class="ulbox"> | |
68 | + <div class="tab-content" v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> | |
69 | + <ul v-show="tab.content1"> | |
70 | + <li v-for="(item, idx) in situationOccurrenceStatusList" :key="idx"> | |
71 | + <p class="" style="color: #9bbb8d; ">상황명: {{ item.sn }}</p> | |
72 | + <p class="" style="color: #474747; font-size: 14px;"><img | |
73 | + src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az }}쪽횡단보도 | |
74 | + </p> | |
75 | + <p class="m-b" style="color: #767677; font-size: 13px;">발생일시: {{ item.ocrn_dt }}</p> | |
76 | + </li> | |
77 | + </ul> | |
78 | + <ul v-show="tab.content2"> | |
79 | + <li v-for="(item, idx) in troubleOccurrenceStatusList" :key=idx @click="troblCcrnLocation(item)"> | |
80 | + <p class="m-b" style="color: #9bbb8d; ">장애명: {{ item.trobl_nm }}</p> | |
81 | + <p class="m-b" style="color: #474747; font-size: 14px;"><img | |
82 | + src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az | |
83 | + }}쪽횡단보도 </p> | |
84 | + <p class="m-b">발생일시: {{ item.ocrn_dt }}</p> | |
85 | + <p class="m-b">담당자: {{ item.mngr_nm }}</p> | |
86 | + <p class="m-b">연락처: {{ item.mngr_telno }}</p> | |
87 | + <p class="">복구여부: {{ item.recovery_yn }}</p> | |
88 | + </li> | |
89 | + </ul> | |
90 | + | |
91 | + </div> | |
92 | + </div> | |
93 | + <div v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> | |
94 | + <PaginationButton v-show="tab.content1" v-if="situationOccurrenceStatusListCount > 0" | |
95 | + v-model:currentPage="situationOccurrenceStatusListSearch.currentPage" | |
96 | + :per-page="situationOccurrenceStatusListSearch.perPage" | |
97 | + :total-count="situationOccurrenceStatusListCount" :max-range="5" | |
98 | + :click="situationOccurrenceStatusSearch" /> | |
99 | + <PaginationButton v-show="tab.content2" v-if="troubleOccurrenceStatusListCount > 0" | |
100 | + v-model:currentPage="troubleOccurrenceStatusListSearch.currentPage" | |
101 | + :per-page="troubleOccurrenceStatusListSearch.perPage" :total-count="troubleOccurrenceStatusListCount" | |
102 | + :max-range="5" :click="troubleOccurrenceStatusSearch" /> | |
103 | + </div> | |
104 | + </div> | |
105 | + </div> | |
106 | + | |
107 | + | |
108 | + </div> | |
109 | + </div> | |
110 | + </div> | |
111 | + <div class="right"> | |
112 | + <div class="top"> | |
113 | + <ul class="flex-end"> | |
114 | + <li> | |
115 | + <p class="flex-center gap"> | |
116 | + <img class="m-r" src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />금일 보행자 | |
117 | + </p> | |
118 | + <h3> | |
119 | + <em class="green2 m-r">{{ comma(statusControlCountList.pdstrnCount) }}</em>명 | |
120 | + </h3> | |
121 | + </li> | |
122 | + <li class="br"></li> | |
123 | + <li> | |
124 | + <p class="flex-center gap"> | |
125 | + <img class="m-r" src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />금일 무단횡단 발생 | |
126 | + </p> | |
127 | + <h3> | |
128 | + <em class="green2 m-r">{{ comma(statusControlCountList.wtrmsCount) }}</em>회 | |
129 | + </h3> | |
130 | + </li> | |
131 | + <li class="br"></li> | |
132 | + <li> | |
133 | + <p class="flex-center gap"> | |
134 | + <img class="m-r" src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />금일 신호연장 발생 | |
135 | + </p> | |
136 | + <h3> | |
137 | + <em class="green2 m-r">{{ comma(statusControlCountList.signExtnCount) }}</em>회 | |
138 | + </h3> | |
139 | + </li> | |
140 | + <li class="br"></li> | |
141 | + <li> | |
142 | + <p class="flex-center gap"> | |
143 | + <img class="m-r" src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />금일 신호연장 시간 | |
144 | + </p> | |
145 | + <h3> | |
146 | + <em class="green2 m-r">{{ comma(statusControlCountList.signExtnTime) }}</em>초 | |
147 | + </h3> | |
148 | + </li> | |
149 | + <li class="br"></li> | |
150 | + <li> | |
151 | + <p class="flex-center gap"> | |
152 | + <img class="m-r" src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />금일 차량 신호위반 발생 | |
153 | + </p> | |
154 | + <h3> | |
155 | + <em class="green2 m-r">{{ comma(statusControlCountList.rittrnVioltVhcleCount) }}</em>회 | |
156 | + </h3> | |
157 | + </li> | |
158 | + <li class="br"></li> | |
159 | + <li> | |
160 | + <p class="flex-center gap"> | |
161 | + <img class="m-r" src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />금일 장애 발생 | |
162 | + </p> | |
163 | + <h3> | |
164 | + <em class="green2 m-r">{{ comma(statusControlCountList.troblOcrnCount) }}</em>회 | |
165 | + </h3> | |
166 | + </li> | |
167 | + </ul> | |
168 | + </div> | |
169 | + <OpenLayers ref="open_layers" /> | |
170 | + <!-- Popup container --> | |
171 | + <div v-if="isPopupVisible" class="popup-container"> | |
172 | + <!-- Popup content --> | |
173 | + <div class="popup-content"> | |
174 | + <!-- Add your popup content here --> | |
175 | + <h2>{{ popupStatus.type }} 발생</h2> | |
176 | + <ul> | |
177 | + <li> | |
178 | + <p class="m-b">발생일시: {{ popupStatus.ocrn_dt }}</p> | |
179 | + <p class="">발생장소: {{ popupStatus.crslk_nm }} 횡단보도</p> | |
180 | + </li> | |
181 | + </ul> | |
182 | + <button @click="hidePopup(popupStatus.node_id)" class="s-btn gr-btn">확인</button> | |
183 | + </div> | |
184 | + </div> | |
185 | + </div> | |
186 | + <div class="chart grid gap"> | |
187 | + <div class="bg-white2 b-r b-shadow"> | |
188 | + <h2 style="font-size: 1.3rem"> | |
189 | + 금일 횡단보도 별 무단횡단 발생 건수 (상위10개소) | |
190 | + </h2> | |
191 | + <div class="box"> | |
192 | + <div style="width: 100%; height: 100%" id="chartdivWrap1"> | |
193 | + <div ref="chartdiv1" id="chartdiv1" style="width: 100%; height: 90%"></div> | |
194 | + </div> | |
195 | + </div> | |
196 | + </div> | |
197 | + <div class="bg-white2 b-r b-shadow"> | |
198 | + <h2 style="font-size: 1.3rem"> | |
199 | + 금일 횡단보도 별 신호연장 발생 건수 (상위10개소) | |
200 | + </h2> | |
201 | + <div class="box"> | |
202 | + <div style="width: 100%; height: 100%" id="chartdivWrap2"> | |
203 | + <div ref="chartdiv2" id="chartdiv2" style="width: 100%; height: 90%"></div> | |
204 | + </div> | |
205 | + </div> | |
206 | + </div> | |
207 | + <div class="bg-white2 b-r b-shadow"> | |
208 | + <h2 style="font-size: 1.3rem"> | |
209 | + 금일 횡단보도 별 우회전 위반 발생 건수 (상위5개소) | |
210 | + </h2> | |
211 | + <div class="box"> | |
212 | + <div style="width: 100%; height: 100%" id="chartdivWrap3"> | |
213 | + <div ref="chartdiv3" id="chartdiv3" style="width: 100%; height: 90%"></div> | |
214 | + </div> | |
215 | + </div> | |
216 | + </div> | |
217 | + <div class="bg-white2 b-r b-shadow"> | |
218 | + <h2 style="font-size: 1.3rem"> | |
219 | + 금일 횡단보도 별 장비장애 발생 건수 (상위5개소) | |
220 | + </h2> | |
221 | + <div class="box"> | |
222 | + <div style="width: 100%; height: 100%" id="chartdivWrap4"> | |
223 | + <div ref="chartdiv4" id="chartdiv4" style="width: 100%; height: 90%"></div> | |
224 | + </div> | |
225 | + </div> | |
226 | + </div> | |
227 | + </div> | |
228 | + | |
229 | + <!-- 팝업 --> | |
230 | + <div class="modal-wrap" v-if="modal_event_detail_list == true"> | |
231 | + <div class="modal-bg"></div> | |
232 | + <div class="modal_base"> | |
233 | + <h2> | |
234 | + <span>{{ eventListSearch.eventType }} 발생 정보</span> | |
235 | + <button type="button" class="gray-btn modal_base_close" @click="modal_event_detail_list = false"> | |
236 | + <img src="../../../resources/images/close.png" alt="" /> | |
237 | + </button> | |
238 | + </h2> | |
239 | + <div class="modal_base_body"> | |
240 | + <div class="de_Search"> | |
241 | + <!--<table class="troubleTable"> | |
242 | + <tbody> | |
243 | + <tr> | |
244 | + <th>검색</th> | |
245 | + <td colspan="7" > | |
246 | + <select name="" id=""> | |
247 | + <option value="">검색조건</option> | |
248 | + <option value="">이름</option> | |
249 | + <option value="">소속정보</option> | |
250 | + </select> | |
251 | + <input type="text" placeholder="검색어를 입력 해주세요." style="width: 76%;" /> | |
252 | + <button type="button" class="green-btn" style="margin-left: 5px;padding: 5px;width: 10rem; float: right;" >검색</button> | |
253 | + </td> | |
254 | + </tr> | |
255 | + </tbody> | |
256 | + </table>--> | |
257 | + </div> | |
258 | + <table> | |
259 | + <thead> | |
260 | + <tr> | |
261 | + <td>동이름</td> | |
262 | + <td>횡단보도명</td> | |
263 | + <td>상황명</td> | |
264 | + <td>발생시간</td> | |
265 | + </tr> | |
266 | + </thead> | |
267 | + <tbody> | |
268 | + <tr v-for="(item, idx) in eventList" :key="idx"> | |
269 | + <td data-title="교차로명">{{ item.dong_nm }}</td> | |
270 | + <td data-title="횡단보도명"> {{ item.crslk_nm }} 쪽횡단보도</td> | |
271 | + <td data-title="상황명">{{ item.type }}</td> | |
272 | + <td data-title="발생시간">{{ item.ocrn_dt }}</td> | |
273 | + </tr> | |
274 | + <tr> | |
275 | + <td class="exception" colspan="4" v-if="eventList.length < 1">조회된 데이터가 없습니다</td> | |
276 | + </tr> | |
277 | + </tbody> | |
278 | + </table> | |
279 | + <PaginationButton v-model:currentPage="eventListSearch.currentPage" :per-page="eventListSearch.perPage" | |
280 | + :total-count="eventListCount" :max-range="5" :click="eventSelectList" /> | |
281 | + </div> | |
282 | + <div class="modal_base_bottom gap"> | |
283 | + <button type="button" class="btn-2 gray-btn wrem_10 mrg_5p" @click="modal_event_detail_list = false">닫기</button> | |
284 | + </div> | |
285 | + </div> | |
286 | + </div> | |
287 | + | |
288 | + </div> | |
289 | +</template> | |
290 | +<script> | |
291 | +import OpenLayers from "../../component/OpenLayers_dev.vue"; | |
292 | +import { | |
293 | + vworldBaseLayer, | |
294 | + vworldGrayLayer, | |
295 | + vworldMidnightLayer, | |
296 | + vworldHybridLayer, | |
297 | + vworldSatelliteLayer, | |
298 | +} from "../../component/OpenLayersMap.vue"; | |
299 | +import COMMON_CHART from "../../common/common.js"; | |
300 | +import Overlay from "ol/Overlay" | |
301 | +import { baseStyles } from "../../component/OpenLayersStyle.vue"; | |
302 | +import axios from "axios"; | |
303 | +import DongSelectList from "../../component/dongSelectList.vue"; | |
304 | +import PaginationButton from "../../component/pagination/PaginationButton.vue"; | |
305 | +import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
306 | + | |
307 | +export default { | |
308 | + data() { | |
309 | + return { | |
310 | + address: { | |
311 | + | |
312 | + }, | |
313 | + troubleOccurrenceStatusListSearch: { | |
314 | + currentPage: 1, | |
315 | + perPage: 10, | |
316 | + orderByType: 'DESC', | |
317 | + }, | |
318 | + situationOccurrenceStatusListSearch: { | |
319 | + | |
320 | + currentPage: 1, | |
321 | + perPage: 10, | |
322 | + orderByType: 'DESC', | |
323 | + }, | |
324 | + | |
325 | + eventListSearch: { | |
326 | + currentPage: 1, | |
327 | + perPage: 10, | |
328 | + startDate: null, | |
329 | + endDate: null, | |
330 | + eventType: null, | |
331 | + sigungu_cd: null, | |
332 | + dong_cd: null, | |
333 | + dong_dong_cd: null, | |
334 | + node_id: null, | |
335 | + crslk_az: null | |
336 | + }, | |
337 | + situationOccurrenceStatusList: [], | |
338 | + situationOccurrenceStatusListCount: 0, | |
339 | + troubleOccurrenceStatusList: [], | |
340 | + troubleOccurrenceStatusListCount: 0, | |
341 | + eventListCount: 0, | |
342 | + eventList: [], | |
343 | + eventIdx: 0, | |
344 | + isPopupVisible: false, | |
345 | + showSlide: false, | |
346 | + slideText: "검색하기", | |
347 | + address: {}, | |
348 | + //조건설정 | |
349 | + condition: { | |
350 | + //체크박스 | |
351 | + signExtn: true, | |
352 | + wtrms: true, | |
353 | + rittrnVhcle: true, | |
354 | + eqpmnTrobl: true, | |
355 | + //일자 | |
356 | + date: null, | |
357 | + start_date: null, | |
358 | + end_date: null, | |
359 | + //시간대 | |
360 | + start_time: null, | |
361 | + end_time: null, | |
362 | + | |
363 | + // 신규데이터 비교 시간대 | |
364 | + currentTimestamp: null, | |
365 | + popuptitle: "무단횡단 발생목록" | |
366 | + }, | |
367 | + ck: true, | |
368 | + tabs: [ | |
369 | + { | |
370 | + id: 1, | |
371 | + title: "상황발생현황", | |
372 | + content1: "This is the content for Tab 1", | |
373 | + }, | |
374 | + { | |
375 | + id: 2, | |
376 | + title: "장애발생현황", | |
377 | + content2: "This is the content for Tab 2", | |
378 | + }, | |
379 | + ], | |
380 | + activeTab: 1, | |
381 | + activeTab2: 1, | |
382 | + chart1: {}, | |
383 | + chart2: {}, | |
384 | + chart3: {}, | |
385 | + chart4: {}, | |
386 | + chartData: { | |
387 | + wtrms: [], | |
388 | + signExtn: [], | |
389 | + rittrnVioltVhcle: [], | |
390 | + troblOcrn: [], | |
391 | + }, | |
392 | + data1: [], | |
393 | + statusControlCountList: { | |
394 | + pdstrnCount: 0, | |
395 | + wtrmsCount: 0, | |
396 | + signExtnCount: 0, | |
397 | + signExtnTime: 0, | |
398 | + rittrnVioltVhcleCount: 0, | |
399 | + troblOcrnCount: 0, | |
400 | + }, | |
401 | + // 실시간 발생 이벤트 | |
402 | + popupStatus: { | |
403 | + node_id: '', | |
404 | + crslk_az: '', | |
405 | + ocrn_dt: '', | |
406 | + type: '' | |
407 | + }, | |
408 | + // 실시간 발생 이벤트 리스트 | |
409 | + realTimeEventList: [], | |
410 | + // 이벤트 발생 체크 | |
411 | + eventFlage: false, | |
412 | + // 이벤트 상세보기 팝업 | |
413 | + modal_event_detail_list: false, | |
414 | + // 타이머 관리 | |
415 | + timer: {} | |
416 | + }; | |
417 | + }, | |
418 | + components: { | |
419 | + PaginationButton: PaginationButton, | |
420 | + OpenLayers: OpenLayers, | |
421 | + DongSelectList: DongSelectList, | |
422 | + }, | |
423 | + methods: { | |
424 | + // 휠 이벤트 | |
425 | + childWheel(coordinate) { | |
426 | + | |
427 | + }, | |
428 | + | |
429 | + //DongSelectList에서 dong_cd 받아오기 | |
430 | + setDongCd(value) { | |
431 | + this.address = value; | |
432 | + }, | |
433 | + | |
434 | + childMoveEnd(zoom) { | |
435 | + // console.log("zoom zoomzoom: ", zoom); | |
436 | + if (this.now_zoom >= 18.6 && zoom < 18.6) { | |
437 | + this.address.node_id = null; | |
438 | + this.statusSearch(false); | |
439 | + } | |
440 | + this.now_zoom = zoom; | |
441 | + }, | |
442 | + | |
443 | + // 실시간 발생 토클? | |
444 | + toggleSlide() { | |
445 | + if (this.showSlide) { | |
446 | + this.slideText = "검색하기"; | |
447 | + } else { | |
448 | + this.slideText = "창닫기"; | |
449 | + } | |
450 | + this.showSlide = !this.showSlide; | |
451 | + }, | |
452 | + | |
453 | + dongSelectF: function (event) { | |
454 | + | |
455 | + }, | |
456 | + | |
457 | + //지역 및 조건 설정 안에 있는 횡단보도의 위치와 횟수의 합 | |
458 | + changeTab(tabId) { | |
459 | + this.activeTab = tabId; | |
460 | + }, | |
461 | + | |
462 | + showPopup() { | |
463 | + this.isPopupVisible = true; | |
464 | + }, | |
465 | + | |
466 | + hidePopup(node_id) { | |
467 | + this.isPopupVisible = false; | |
468 | + }, | |
469 | + | |
470 | + // 팝업 상세 | |
471 | + openDetailPopup(type) { | |
472 | + let vm = this; | |
473 | + vm.eventListSearch.currentPage = 1; | |
474 | + vm.eventListSearch.startDate = vm.condition.date + ' ' + vm.condition.start_time; | |
475 | + vm.eventListSearch.endDate = vm.condition.date + ' ' + vm.condition.end_time; | |
476 | + | |
477 | + | |
478 | + // 무단횡단 | |
479 | + if (type == 'c1') { | |
480 | + vm.eventListSearch.eventType = '무단횡단'; | |
481 | + // 신호연장 | |
482 | + } else if (type == 'c2') { | |
483 | + vm.eventListSearch.eventType = '신호연장'; | |
484 | + // 차량위반 | |
485 | + } else if (type == 'c3') { | |
486 | + vm.eventListSearch.eventType = '우회전신호위반'; | |
487 | + // 장비발생 | |
488 | + } else if (type == 'c4') { | |
489 | + vm.eventListSearch.eventType = '장비장애'; | |
490 | + } | |
491 | + | |
492 | + if (type != 'c4') { | |
493 | + const vm = this; | |
494 | + axios({ | |
495 | + url: "/statusControl/eventSelectList.json", | |
496 | + method: "post", | |
497 | + headers: { | |
498 | + "Content-Type": "application/json; charset=UTF-8", | |
499 | + }, | |
500 | + data: vm.eventListSearch, | |
501 | + }) | |
502 | + .then(function (response) { | |
503 | + vm.eventListCount = response.data.eventListCount; | |
504 | + vm.eventList = response.data.eventList; | |
505 | + vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; | |
506 | + vm.modal_event_detail_list = true; | |
507 | + }) | |
508 | + .catch(function (error) { | |
509 | + alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); | |
510 | + }); | |
511 | + } | |
512 | + }, | |
513 | + | |
514 | + // 마우스 클릭 | |
515 | + childClick: function (prop, coordinate, layerCk, map) { | |
516 | + var vm = this; | |
517 | + | |
518 | + if (layerCk == true) { | |
519 | + if (prop[0] != null && prop[0].layerName != 'multiPolygonLayer') { | |
520 | + if (prop[0].layerName === 'dong') { | |
521 | + //this.address.dong_dong_cd = prop[0].id_; | |
522 | + //this.address.dong_cd =prop[0].id_; | |
523 | + vm.eventListSearch.dong_cd = prop[0].id_; | |
524 | + } else if (prop[0].layerName === 'node') { | |
525 | + //this.address.node_id = prop[0].id_; | |
526 | + vm.eventListSearch.node_id = prop[0].id_; | |
527 | + } | |
528 | + this.createPopup(coordinate, prop[0]); | |
529 | + } | |
530 | + } | |
531 | + }, | |
532 | + | |
533 | + // 장애 팝업 | |
534 | + createErrorPopup: function (item) { | |
535 | + var vm = this; | |
536 | + vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); | |
537 | + let element = document.createElement("div"); | |
538 | + element.classList.add('ol-popup'); | |
539 | + | |
540 | + // 검색창 떠있는 동안은 자동 리프레쉬 멈춤 | |
541 | + var html = ""; | |
542 | + | |
543 | + html = "<div style='transform: translate(0%, 0%) translate(-150px,-230px);'>" | |
544 | + + " <table class='map_multi_popup' >" | |
545 | + + " <thead>" | |
546 | + + " <td colspan='4' class='fon'> <span > " + item.node_name + "_" + item.crslk_az + "측 획단보도 장애정보 <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" | |
547 | + + " </thead>" | |
548 | + + " <tbody>" | |
549 | + + " <tr>" | |
550 | + + " <th colspan='3'>장애명</th>" | |
551 | + + " <td >" + item.trobl_nm + "</td>" | |
552 | + + " </tr>" | |
553 | + + " <tr>" | |
554 | + + " <th colspan='3'>담당자</th>" | |
555 | + + " <td >" + item.mngr_nm + "</td>" | |
556 | + + " </tr>" | |
557 | + + " <tr>" | |
558 | + + " <th colspan='3'>연락처</th>" | |
559 | + + " <td >" + item.mngr_telno + "</td>" | |
560 | + + " </tr>" | |
561 | + + " <tr>" | |
562 | + + " <th colspan='3'>이메일</th>" | |
563 | + + " <td >" + item.mngr_eml + "</td>" | |
564 | + + " </tr>" | |
565 | + + " <tr>" | |
566 | + + " <th colspan='3'>소속정보</th>" | |
567 | + + " <td >" + item.mngr_ogdp_info + "</td>" | |
568 | + + " </tr>" | |
569 | + + "<tr>" | |
570 | + + " <th colspan='5'><button class='map_multi_popup_move_button' id='close'>닫기</button></th>" | |
571 | + + " </tr>" | |
572 | + + " </tbody>" | |
573 | + + " </table>" | |
574 | + + " </div>"; | |
575 | + + " </tbody>" | |
576 | + + " </table>" | |
577 | + + " </div>"; | |
578 | + | |
579 | + element.innerHTML = html; | |
580 | + element.style.display = 'block'; | |
581 | + | |
582 | + // OverLay 생성 | |
583 | + let overlay = new Overlay({ | |
584 | + id: 'multiPopup', | |
585 | + element: element, // 생성한 DIV | |
586 | + autoPan: true, | |
587 | + className: "multiPopup", | |
588 | + autoPanMargin: 100, | |
589 | + autoPanAnimation: { | |
590 | + duration: 400 | |
591 | + } | |
592 | + }); | |
593 | + | |
594 | + //오버레이의 위치 저장 | |
595 | + var geom = JSON.parse(item.geom.value); | |
596 | + // console.log(geom); | |
597 | + overlay.setPosition(geom.coordinates); | |
598 | + | |
599 | + //지도에 추가 | |
600 | + this.$refs.open_layers.map.addOverlay(overlay); | |
601 | + // 해당 DIV 다켓방법 | |
602 | + let oElem = overlay.getElement(); | |
603 | + oElem.addEventListener('click', function (e) { | |
604 | + var target = e.target; | |
605 | + if (target.className == "ol-popup-closer" || target.className == 'map_multi_popup_move_button') { | |
606 | + //선택한 OverLayer 삭제 | |
607 | + vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); | |
608 | + vm.timer = setInterval(() => { | |
609 | + vm.statusSearch(false); | |
610 | + }, 5000) | |
611 | + | |
612 | + } | |
613 | + }); | |
614 | + }, | |
615 | + | |
616 | + // 정보 팝업 | |
617 | + createPopup: function (coordinate, prop) { | |
618 | + var vm = this; | |
619 | + vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); | |
620 | + let element = document.createElement("div"); | |
621 | + element.classList.add('ol-popup'); | |
622 | + | |
623 | + // 검색창 떠있는 동안은 자동 리프레쉬 멈춤 | |
624 | + clearInterval(this.timer); | |
625 | + var html = ""; | |
626 | + html = "<div style='transform: translate(0%, 0%) translate(-150px,-190px);'>" | |
627 | + + " <table class='map_multi_popup' >" | |
628 | + + " <thead>" | |
629 | + + " <td colspan='5' class='fon'> <span > " + prop.values_.name + " <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" | |
630 | + + " </thead>" | |
631 | + + " <tbody>" | |
632 | + + " <tr>" | |
633 | + + " <th colspan='3'>무단횡단 발생</th>" | |
634 | + + " <td >" + prop.values_.crosng_cnt + "</td>" | |
635 | + + " <td ><button class='map_multi_popup_button' id='c1' >상세</button></td>" | |
636 | + + " </tr>" | |
637 | + + " <tr>" | |
638 | + + " <th colspan='3'>신호연장 발생</th>" | |
639 | + + " <td >" + prop.values_.extn_cnt + "</td>" | |
640 | + + " <td ><button class='map_multi_popup_button' id='c2' >상세</button></td>" | |
641 | + + " </tr>" | |
642 | + + " <tr>" | |
643 | + + " <th colspan='3'>차량위반 발생</th>" | |
644 | + + " <td >" + prop.values_.law_vltn_cnt + "</td>" | |
645 | + + " <td ><button class='map_multi_popup_button' id='c3' >상세</button></td>" | |
646 | + + " </tr>" | |
647 | + + " <tr>" | |
648 | + + " <th colspan='3'>장비장애 발생</th>" | |
649 | + + " <td >" + prop.values_.error_cnt + "</td>" | |
650 | + + " <td ><button class='map_multi_popup_button' id='c1' >상세</button></td>" | |
651 | + + " </tr>"; | |
652 | + if (prop.layerName != 'crslk') { | |
653 | + html += "<tr>" | |
654 | + + " <th colspan='5'><button class='map_multi_popup_move_button' id='move'>이동</button></th>" | |
655 | + + " </tr>" | |
656 | + + " </tbody>" | |
657 | + + " </table>" | |
658 | + + " </div>"; | |
659 | + } else { | |
660 | + html += " </tbody>" | |
661 | + + " </table>" | |
662 | + + " </div>"; | |
663 | + } | |
664 | + | |
665 | + element.innerHTML = html; | |
666 | + element.style.display = 'block'; | |
667 | + | |
668 | + // OverLay 생성 | |
669 | + let overlay = new Overlay({ | |
670 | + id: 'multiPopup', | |
671 | + element: element, // 생성한 DIV | |
672 | + autoPan: true, | |
673 | + className: "multiPopup", | |
674 | + autoPanMargin: 100, | |
675 | + autoPanAnimation: { | |
676 | + duration: 400 | |
677 | + } | |
678 | + }); | |
679 | + | |
680 | + //오버레이의 위치 저장 | |
681 | + overlay.setPosition(prop.values_.geometry.flatCoordinates); | |
682 | + | |
683 | + //지도에 추가 | |
684 | + this.$refs.open_layers.map.addOverlay(overlay); | |
685 | + // 해당 DIV 다켓방법 | |
686 | + let oElem = overlay.getElement(); | |
687 | + oElem.addEventListener('click', function (e) { | |
688 | + var target = e.target; | |
689 | + if (target.className == "ol-popup-closer") { | |
690 | + //선택한 OverLayer 삭제 | |
691 | + vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); | |
692 | + element = ''; | |
693 | + | |
694 | + vm.timer = setInterval(() => { | |
695 | + vm.statusSearch(false); | |
696 | + }, 5000) | |
697 | + | |
698 | + } else if (target.className == "map_multi_popup_button") { | |
699 | + vm.openDetailPopup(target.id) | |
700 | + | |
701 | + } else if (target.className == "map_multi_popup_move_button") { | |
702 | + if (prop != null && prop.layerName != 'multiPolygonLayer') { | |
703 | + if (prop.layerName === 'dong') { | |
704 | + vm.address.dong_dong_cd = prop.id_; | |
705 | + vm.address.dong_cd = prop.id_; | |
706 | + } else if (prop.layerName === 'node') { | |
707 | + vm.address.node_id = prop.id_; | |
708 | + } | |
709 | + vm.statusSearch(true); | |
710 | + } | |
711 | + vm.timer = setInterval(() => { | |
712 | + vm.statusSearch(false); | |
713 | + }, 5000) | |
714 | + } | |
715 | + }); | |
716 | + }, | |
717 | + | |
718 | + // 장애 발생 현황 클릭 | |
719 | + troblCcrnLocation: function (item) { | |
720 | + // console.log('troblCcrnLocation', item); | |
721 | + clearInterval(this.timer); | |
722 | + this.address.node_id = item.node_id; | |
723 | + this.statusSearch(true); | |
724 | + this.eventFlage = true; | |
725 | + this.createErrorPopup(item); | |
726 | + }, | |
727 | + | |
728 | + // 셀렉트 선택시 반영 데이터 | |
729 | + getStatusData: function (pointAnim) { | |
730 | + const vm = this; | |
731 | + | |
732 | + var layer = 'dong' | |
733 | + var epsg = "EPSG:5181"; | |
734 | + | |
735 | + if (vm.address.guGun_dong_cd == null) { | |
736 | + layer = 'sigungu'; | |
737 | + } else if (vm.address.node_id != null) { | |
738 | + layer = 'crslk'; | |
739 | + } else if (vm.address.dong_dong_cd != null) { | |
740 | + layer = 'node'; | |
741 | + epsg = "EPSG:4326"; | |
742 | + } | |
743 | + | |
744 | + axios({ | |
745 | + url: "/common/getStatusDataGeoJson.json", | |
746 | + method: 'post', | |
747 | + headers: { | |
748 | + 'Content-Type': 'application/json; charset=UTF-8' | |
749 | + }, | |
750 | + data: { | |
751 | + "dong_cd": vm.address.dong_cd | |
752 | + , "start_dt": vm.condition.date + ' ' + vm.condition.start_time | |
753 | + , "end_dt": vm.condition.date + ' ' + vm.condition.end_time | |
754 | + , "layer": layer | |
755 | + , "signExtn": vm.condition.signExtn | |
756 | + , "wtrms": vm.condition.wtrms | |
757 | + , "rittrnVhcle": vm.condition.rittrnVhcle | |
758 | + , "eqpmnTrobl": vm.condition.eqpmnTrobl | |
759 | + , "currentTimestamp": vm.condition.currentTimestamp | |
760 | + }, | |
761 | + }).then(function (response) { | |
762 | + vm.statusControlCountList = response.data.totalCount; | |
763 | + vm.$refs.open_layers.removeAddLayerAll(); | |
764 | + vm.$refs.open_layers.addLayerByGeojson(response.data.geojson, layer, epsg, baseStyles["labelStyle"], "label"); | |
765 | + | |
766 | + // 마지막 시간 데이터 생성 | |
767 | + vm.condition.currentTimestamp = response.data.realTimeEvent.currentTimestamp; | |
768 | + | |
769 | + // 이벤트 리스트 등록 | |
770 | + vm.realTimeEventList = response.data.realTimeEvent.RealTimeEventList; | |
771 | + | |
772 | + // console.log( ' vm.realTimeEventList',vm.realTimeEventList) | |
773 | + | |
774 | + // 실시간 이벤트 발생여부 체크 | |
775 | + if (vm.realTimeEventList.length > 0) { | |
776 | + vm.popupStatus = Object.assign({}, vm.realTimeEventList[0]); | |
777 | + vm.address.node_id = vm.popupStatus.node_id; | |
778 | + vm.statusSearch(true); | |
779 | + vm.eventFlage = true; | |
780 | + vm.showPopup(); | |
781 | + } | |
782 | + // 차트 데이터 생성 | |
783 | + vm.drawChars(response.data.countList); | |
784 | + }).catch(function (error) { | |
785 | + console.log("error : ", error); | |
786 | + }).finally(function () { | |
787 | + // 항상 실행되는 영역 | |
788 | + if (vm.address.guGun_dong_cd == null) { | |
789 | + layer = 'sigungu'; | |
790 | + vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); | |
791 | + } else if (vm.address.node_id != null) { | |
792 | + layer = 'crslk'; | |
793 | + // epsg = "EPSG:4326"; | |
794 | + vm.$refs.open_layers.addVectorLayerByUrl("/common/getNodeGeoJson.json", "multiPolygonLayer", "EPSG:4326", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd, vm.address.node_id); | |
795 | + } else if (vm.address.dong_dong_cd != null) { | |
796 | + layer = 'node'; | |
797 | + epsg = "EPSG:4326"; | |
798 | + vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); | |
799 | + } else { | |
800 | + vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); | |
801 | + } | |
802 | + });; | |
803 | + }, | |
804 | + | |
805 | + // 서치 버튼 클릭 | |
806 | + statusSearch: function (pointAnim) { | |
807 | + var vm = this; | |
808 | + | |
809 | + | |
810 | + // 검색 버튼 클릭 | |
811 | + if (pointAnim == true) { | |
812 | + if (this.$refs.open_layers.map.getOverlayById('multiPopup') != null) { | |
813 | + this.$refs.open_layers.map.removeOverlay(this.$refs.open_layers.map.getOverlayById('multiPopup')); | |
814 | + vm.timer = setInterval(() => { | |
815 | + vm.statusSearch(false); | |
816 | + }, 5000) | |
817 | + } | |
818 | + // 자동 처리 | |
819 | + } else { | |
820 | + if (this.$refs.open_layers.map.getOverlayById('multiPopup') != null) { | |
821 | + return false; | |
822 | + } | |
823 | + } | |
824 | + // 이벤트 발생시 다시 제자리로 | |
825 | + if (this.eventFlage == true) { | |
826 | + this.isPopupVisible = false; | |
827 | + this.eventFlage = false; | |
828 | + this.address.node_id = null; | |
829 | + pointAnim = true; | |
830 | + } | |
831 | + | |
832 | + if (pointAnim == null) { | |
833 | + pointAnim = true; | |
834 | + } | |
835 | + | |
836 | + //지도 영역 수정 | |
837 | + this.getStatusData(pointAnim); | |
838 | + | |
839 | + this.situationOccurrenceStatusSearch(); | |
840 | + this.troubleOccurrenceStatusSearch(); | |
841 | + }, | |
842 | + | |
843 | + // 차트 그리기 | |
844 | + drawChars: function (data) { | |
845 | + | |
846 | + // 횡단보도별 무단횡단 차트 정보 | |
847 | + var wtrmsCount = data.sort(function (a, b) { | |
848 | + return b.wtrmsCount - a.wtrmsCount; | |
849 | + }); | |
850 | + wtrmsCount = wtrmsCount.slice(0, 10); | |
851 | + | |
852 | + // 신호연장 차트 정보 | |
853 | + var signExtnCount = data.sort(function (a, b) { | |
854 | + return b.signExtnCount - a.signExtnCount; | |
855 | + }); | |
856 | + signExtnCount = signExtnCount.slice(0, 10); | |
857 | + | |
858 | + // 우회전 위반 차트 정보 | |
859 | + var rittrnVioltVhcleCount = data.sort(function (a, b) { | |
860 | + return b.rittrnVioltVhcleCount - a.rittrnVioltVhcleCount; | |
861 | + }); | |
862 | + rittrnVioltVhcleCount = rittrnVioltVhcleCount.slice(0, 5); | |
863 | + | |
864 | + // 장애발생 차트 정보 | |
865 | + var troblOcrnCount = data.sort(function (a, b) { | |
866 | + return b.troblOcrnCount - a.troblOcrnCount; | |
867 | + }); | |
868 | + troblOcrnCount = troblOcrnCount.slice(0, 5); | |
869 | + | |
870 | + // 차트 생성 | |
871 | + if (this.chart1.xAxis == null) { | |
872 | + this.chart1 = COMMON_CHART.createChartByIds("chartdiv1", this.chart1, wtrmsCount, "wtrmsCount", "crslk_nm"); | |
873 | + this.chart2 = COMMON_CHART.createChartByIds("chartdiv2", this.chart2, signExtnCount, "signExtnCount", "crslk_nm"); | |
874 | + this.chart3 = COMMON_CHART.createChartByIds("chartdiv3", this.chart3, rittrnVioltVhcleCount, "rittrnVioltVhcleCount", "crslk_nm"); | |
875 | + this.chart4 = COMMON_CHART.createChartByIds("chartdiv4", this.chart4, troblOcrnCount, "troblOcrnCount", "crslk_nm"); | |
876 | + } else { | |
877 | + // 데이터 변경 | |
878 | + this.chart1.xAxis.data.setAll(wtrmsCount); | |
879 | + this.chart1.series.data.setAll(wtrmsCount); | |
880 | + this.chart2.xAxis.data.setAll(signExtnCount); | |
881 | + this.chart2.series.data.setAll(signExtnCount); | |
882 | + this.chart3.xAxis.data.setAll(rittrnVioltVhcleCount); | |
883 | + this.chart3.series.data.setAll(rittrnVioltVhcleCount); | |
884 | + this.chart4.xAxis.data.setAll(troblOcrnCount); | |
885 | + this.chart4.series.data.setAll(troblOcrnCount); | |
886 | + } | |
887 | + }, | |
888 | + | |
889 | + //상황 발행 현황 검색 | |
890 | + statusControlCount: function () { | |
891 | + //검색 데이터 | |
892 | + const vm = this; | |
893 | + axios({ | |
894 | + url: "/statusControl/statusControlCount.json", | |
895 | + method: "post", | |
896 | + headers: { | |
897 | + "Content-Type": "application/json; charset=UTF-8", | |
898 | + }, | |
899 | + data: { "dong_cd": vm.address.dong_cd, "start_dt": vm.condition.date + ' ' + vm.condition.start_time, "end_dt": vm.condition.date + ' ' + vm.condition.end_time, "layer": layer }, | |
900 | + // data: vm.address , | |
901 | + }) | |
902 | + .then(function (response) { | |
903 | + vm.statusControlCountList = response.data; | |
904 | + }) | |
905 | + .catch(function (error) { | |
906 | + }); | |
907 | + }, | |
908 | + | |
909 | + //상황 발행 현황 검색 | |
910 | + eventSelectByRegion: function () { | |
911 | + //검색 데이터 | |
912 | + const vm = this; | |
913 | + axios({ | |
914 | + url: "/statusControl/eventSelectByRegion.json", | |
915 | + method: "post", | |
916 | + headers: { | |
917 | + "Content-Type": "application/json; charset=UTF-8", | |
918 | + }, | |
919 | + data: vm.address, | |
920 | + }) | |
921 | + .then(function (response) { | |
922 | + vm.chartData.wtrms = response.data.wtrms; | |
923 | + vm.chartData.signExtn = response.data.signExtn; | |
924 | + vm.chartData.rittrnVioltVhcle = response.data.rittrnVioltVhcle; | |
925 | + vm.chartData.troblOcrn = response.data.troblOcrn; | |
926 | + }) | |
927 | + .catch(function (error) { | |
928 | + console.log("eventSelectByRegion - error : ", error); | |
929 | + }); | |
930 | + }, | |
931 | + | |
932 | + //실시간 발생 현황 - 상황 발행 현황 검색 | |
933 | + situationOccurrenceStatusSearch: function () { | |
934 | + //검색 데이터 | |
935 | + const vm = this; | |
936 | + vm.situationOccurrenceStatusListSearch.condition = vm.condition; | |
937 | + vm.situationOccurrenceStatusListSearch.address = vm.address; | |
938 | + axios({ | |
939 | + url: "/statusControl/situationOccurrenceStatusSearch.json", | |
940 | + method: "post", | |
941 | + headers: { | |
942 | + "Content-Type": "application/json; charset=UTF-8", | |
943 | + }, | |
944 | + data: vm.situationOccurrenceStatusListSearch, | |
945 | + }) | |
946 | + .then(function (response) { | |
947 | + vm.situationOccurrenceStatusList = response.data.situationOccurrenceStatusList; | |
948 | + vm.situationOccurrenceStatusListCount = response.data.situationOccurrenceStatusListCount; | |
949 | + }) | |
950 | + .catch(function (error) { | |
951 | + console.log("statusSearch - error : ", error); | |
952 | + }); | |
953 | + }, | |
954 | + | |
955 | + //실시간 발생 현황 - 장애발생현황 | |
956 | + troubleOccurrenceStatusSearch: function () { | |
957 | + //검색 데이터 | |
958 | + const vm = this; | |
959 | + axios({ | |
960 | + url: "/statusControl/troubleOccurrenceStatusSearch.json", | |
961 | + method: "post", | |
962 | + headers: { | |
963 | + "Content-Type": "application/json; charset=UTF-8", | |
964 | + }, | |
965 | + data: vm.troubleOccurrenceStatusListSearch, | |
966 | + }) | |
967 | + .then(function (response) { | |
968 | + vm.troubleOccurrenceStatusList = response.data.troubleOccurrenceStatusList; | |
969 | + vm.troubleOccurrenceStatusListCount = response.data.troubleOccurrenceStatusListCount; | |
970 | + }) | |
971 | + .catch(function (error) { | |
972 | + console.log("statusSearch - error : ", error); | |
973 | + }); | |
974 | + }, | |
975 | + | |
976 | + // 이벤트 발생 상세정보 조회(클릭 이벤트) | |
977 | + eventSelectList: function () { | |
978 | + const vm = this; | |
979 | + axios({ | |
980 | + url: "/statusControl/eventSelectList.json", | |
981 | + method: "post", | |
982 | + headers: { | |
983 | + "Content-Type": "application/json; charset=UTF-8", | |
984 | + }, | |
985 | + data: vm.eventListSearch, | |
986 | + }) | |
987 | + .then(function (response) { | |
988 | + vm.eventListCount = response.data.eventListCount; | |
989 | + vm.eventList = response.data.eventList; | |
990 | + vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; | |
991 | + }) | |
992 | + .catch(function (error) { | |
993 | + console.log("errorSelectList - error : ", error); | |
994 | + alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); | |
995 | + }); | |
996 | + }, | |
997 | + | |
998 | + | |
999 | + // 날짜 초기화 | |
1000 | + initialDate() { | |
1001 | + this.condition.date = COMMON_UTIL.today(); | |
1002 | + this.condition.start_time = "00:00"; | |
1003 | + this.condition.end_time = "23:59"; | |
1004 | + | |
1005 | + this.eventListSearch.sigungu_cd = this.address.guGun_dong_cd; | |
1006 | + this.eventListSearch.dong_cd = this.address.dong_cd; | |
1007 | + this.eventListSearch.dong_dong_cd = this.address.node_id; | |
1008 | + this.eventListSearch.node_id = this.address.node_id; | |
1009 | + }, | |
1010 | + | |
1011 | + init() { | |
1012 | + this.statusControlCount(); | |
1013 | + this.eventSelectByRegion(); | |
1014 | + const clusterLayerExists = this.$refs.open_layers.map.getLayers().getArray().some(layer => { | |
1015 | + return layer.get('name') === "clusterLayer"; | |
1016 | + }); | |
1017 | + | |
1018 | + if (clusterLayerExists) { | |
1019 | + this.$refs.open_layers.addClusterLayerByUrl("/common/getNodeGeoJsonForWtrmsCrosngStatusControl.json", "clusterLayer", "EPSG:5181", baseStyles["clusterStyle"], "clusterStyle", this.address.dong_cd); | |
1020 | + } | |
1021 | + | |
1022 | + this.$refs.open_layers.addVectorLayerByUrl('/common/getCrslksGeoJson.json', 'crslkLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd, this.address.node_id); | |
1023 | + | |
1024 | + this.situationOccurrenceStatusSearch(); | |
1025 | + this.troubleOccurrenceStatusSearch(); | |
1026 | + }, | |
1027 | + | |
1028 | + }, | |
1029 | + watch: { | |
1030 | + "condition.date": function (newValue, oldValue) { | |
1031 | + | |
1032 | + }, | |
1033 | + "condition.start_time": function (newValue, oldValue) { | |
1034 | + | |
1035 | + }, | |
1036 | + "condition.end_time": function (newValue, oldValue) { | |
1037 | + | |
1038 | + }, | |
1039 | + "now_zoom": function (newValue, oldValue) { | |
1040 | + }, | |
1041 | + "chartData.wtrms": function (newValue, oldValue) { | |
1042 | + COMMON_CHART.createChartById("chartdiv1", this.chart1, newValue); | |
1043 | + }, | |
1044 | + "chartData.signExtn": function (newValue, oldValue) { | |
1045 | + COMMON_CHART.createChartById("chartdiv2", this.chart2, newValue); | |
1046 | + }, | |
1047 | + "chartData.rittrnVioltVhcle": function (newValue, oldValue) { | |
1048 | + COMMON_CHART.createChartById("chartdiv3", this.chart3, newValue); | |
1049 | + }, | |
1050 | + "chartData.troblOcrn": function (newValue, oldValue) { | |
1051 | + COMMON_CHART.createChartById("chartdiv4", this.chart4, newValue); | |
1052 | + }, | |
1053 | + }, | |
1054 | + computed: {}, | |
1055 | + computed: { | |
1056 | + comma() { | |
1057 | + return (v) => { | |
1058 | + return v.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); | |
1059 | + }; | |
1060 | + }, | |
1061 | + }, | |
1062 | + mounted() { | |
1063 | + var vm = this; | |
1064 | + this.initialDate(); | |
1065 | + this.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
1066 | + this.$refs.dongSelecter.default_select(false, true, '22', '22030'); | |
1067 | + this.statusSearch(); | |
1068 | + this.timer = setInterval(() => { | |
1069 | + this.statusSearch(false); | |
1070 | + }, 5000) | |
1071 | + }, | |
1072 | +}; | |
1073 | +</script> | |
1074 | + | |
1075 | +<style scoped> | |
1076 | +@media all and (max-width: 479px) { | |
1077 | + .top h3 { | |
1078 | + font-size: 15px !important; | |
1079 | + } | |
1080 | + | |
1081 | + .top p { | |
1082 | + padding-right: 1rem; | |
1083 | + } | |
1084 | + | |
1085 | + .chart { | |
1086 | + width: -webkit-fill-available !important; | |
1087 | + } | |
1088 | + | |
1089 | + .top { | |
1090 | + overflow: scroll; | |
1091 | + } | |
1092 | + | |
1093 | + .top ul { | |
1094 | + width: 137rem; | |
1095 | + overflow: hidden; | |
1096 | + justify-content: space-between !important; | |
1097 | + padding: 2rem 1rem !important; | |
1098 | + } | |
1099 | + | |
1100 | + .top li { | |
1101 | + display: flex; | |
1102 | + align-items: center; | |
1103 | + } | |
1104 | + | |
1105 | + .search { | |
1106 | + width: inherit; | |
1107 | + } | |
1108 | +/* | |
1109 | + .toggle { | |
1110 | + color: #fff; | |
1111 | + font-weight: bold; | |
1112 | + background: #13833b; | |
1113 | + display: block !important; | |
1114 | + position: absolute; | |
1115 | + z-index: 150; | |
1116 | + top: 7.2rem; | |
1117 | + right: 1rem; | |
1118 | + } */ | |
1119 | + | |
1120 | + .wrap { | |
1121 | + height: auto !important; | |
1122 | + width: inherit; | |
1123 | + margin: 0 !important; | |
1124 | + } | |
1125 | + | |
1126 | + .slide-content { | |
1127 | + position: absolute; | |
1128 | + z-index: 97; | |
1129 | + top: 6rem; | |
1130 | + /* left: -31rem; */ | |
1131 | + width: -webkit-fill-available; | |
1132 | + height: 100vh; | |
1133 | + background-color: #f0f0f0; | |
1134 | + transition: transform 0.3s ease; | |
1135 | + transform: translateX(100%); | |
1136 | + } | |
1137 | + | |
1138 | + .slide-content.active { | |
1139 | + transform: translateX(0); | |
1140 | + } | |
1141 | +} | |
1142 | + | |
1143 | +.search label { | |
1144 | + line-height: 3rem; | |
1145 | +} | |
1146 | + | |
1147 | +.tab-buttons .ulbox { | |
1148 | + height: calc(100% - 11rem); | |
1149 | + overflow: scroll; | |
1150 | + overflow-x: hidden; | |
1151 | +} | |
1152 | + | |
1153 | +.ulbox ul { | |
1154 | + height: 30rem; | |
1155 | +} | |
1156 | + | |
1157 | +.ulbox ul li p { | |
1158 | + font-size: 13px; | |
1159 | +} | |
1160 | + | |
1161 | +.popup-btn { | |
1162 | + position: absolute; | |
1163 | + bottom: 3rem; | |
1164 | + right: 28%; | |
1165 | +} | |
1166 | + | |
1167 | +.popup-container { | |
1168 | + position: fixed; | |
1169 | + top: 0; | |
1170 | + left: 0; | |
1171 | + width: 100%; | |
1172 | + height: 100%; | |
1173 | + display: flex; | |
1174 | + justify-content: center; | |
1175 | + align-items: center; | |
1176 | + /* background-color: rgba(0, 0, 0, 0.7); */ | |
1177 | + z-index: 9999; | |
1178 | +} | |
1179 | + | |
1180 | +.popup-content { | |
1181 | + background-color: #000000a3; | |
1182 | + width: 17%; | |
1183 | + text-align: center; | |
1184 | + color: #ffffff; | |
1185 | + /* height: 20%; */ | |
1186 | + padding: 20px; | |
1187 | + border-radius: 5px; | |
1188 | + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); | |
1189 | +} | |
1190 | + | |
1191 | +.popup-content ul { | |
1192 | + padding: 2rem 0; | |
1193 | +} | |
1194 | + | |
1195 | +.popup-content ul li { | |
1196 | + font-size: 16px; | |
1197 | +} | |
1198 | + | |
1199 | +.popup-content h2 { | |
1200 | + margin-top: 0; | |
1201 | + font-size: 2.5rem; | |
1202 | + color: #bf1a21; | |
1203 | +} | |
1204 | + | |
1205 | +.toggle { | |
1206 | + display: none; | |
1207 | +} | |
1208 | + | |
1209 | +.chart>div { | |
1210 | + height: 100%; | |
1211 | +} | |
1212 | + | |
1213 | +.chart .box { | |
1214 | + height: 85%; | |
1215 | +} | |
1216 | + | |
1217 | +.chart { | |
1218 | + width: 20%; | |
1219 | + height: 85%; | |
1220 | + position: absolute; | |
1221 | + right: 2rem; | |
1222 | + top: 10rem; | |
1223 | +} | |
1224 | + | |
1225 | +.chart h2 { | |
1226 | + border-radius: 10px 10px 0 0; | |
1227 | +} | |
1228 | + | |
1229 | +.search .box ul li { | |
1230 | + text-align: left; | |
1231 | +} | |
1232 | + | |
1233 | +.search .box button { | |
1234 | + font-size: 1.3rem; | |
1235 | + padding: 0.5rem 1.3rem; | |
1236 | +} | |
1237 | + | |
1238 | +.search .box button.gray-btn.active { | |
1239 | + /* Your CSS styles for the button when it's active (clicked) */ | |
1240 | + background-color: #13833b; | |
1241 | + color: #fff; | |
1242 | + /* Add any other styles you want to apply when the button is active */ | |
1243 | +} | |
1244 | + | |
1245 | +.search .box button img { | |
1246 | + width: 20px; | |
1247 | +} | |
1248 | + | |
1249 | +.btn_set { | |
1250 | + position: relative; | |
1251 | + border-bottom: 1px solid #e5e3e3; | |
1252 | + padding: 0 0 1rem 0; | |
1253 | +} | |
1254 | + | |
1255 | +.btn_set div { | |
1256 | + position: absolute; | |
1257 | + top: 40px; | |
1258 | + width: 313px; | |
1259 | + height: 380px; | |
1260 | + background: #fff; | |
1261 | + padding: 1rem; | |
1262 | +} | |
1263 | + | |
1264 | +.bg-white::-webkit-scrollbar-thumb { | |
1265 | + background-color: #fff; | |
1266 | +} | |
1267 | + | |
1268 | +.left h2, | |
1269 | +.chart h2 { | |
1270 | + background: #50ba8a; | |
1271 | + text-align: center; | |
1272 | + color: #fff; | |
1273 | + padding: 1.6rem 0; | |
1274 | +} | |
1275 | + | |
1276 | +.left h2 { | |
1277 | + padding: 1rem 0; | |
1278 | + font-size: 1.3rem; | |
1279 | +} | |
1280 | + | |
1281 | +.top { | |
1282 | + z-index: 100; | |
1283 | + background: #fdfdf2; | |
1284 | + top: 0; | |
1285 | + /* width: -webkit-fill-available; */ | |
1286 | + height: 86px !important; | |
1287 | +} | |
1288 | + | |
1289 | +.top p { | |
1290 | + font-size: 15px; | |
1291 | +} | |
1292 | + | |
1293 | +.top ul { | |
1294 | + height: inherit; | |
1295 | + justify-content: space-evenly; | |
1296 | +} | |
1297 | + | |
1298 | +.top li { | |
1299 | + text-align: center; | |
1300 | +} | |
1301 | + | |
1302 | +.top li img { | |
1303 | + width: 20px; | |
1304 | +} | |
1305 | + | |
1306 | +.top h3 { | |
1307 | + font-size: 20px; | |
1308 | + text-align: end; | |
1309 | +} | |
1310 | + | |
1311 | +.wrap { | |
1312 | + z-index: 100; | |
1313 | + top: 0; | |
1314 | + height: inherit; | |
1315 | +} | |
1316 | + | |
1317 | +.left { | |
1318 | + background: #fff; | |
1319 | + height: 100%; | |
1320 | +} | |
1321 | + | |
1322 | +.right { | |
1323 | + width: -webkit-fill-available; | |
1324 | + position: relative; | |
1325 | + height: 100%; | |
1326 | +} | |
1327 | + | |
1328 | +.map { | |
1329 | + width: 100%; | |
1330 | + height: calc(100% - 86px); | |
1331 | +} | |
1332 | +</style> |
--- client/views/pages/RealtimeStatus/RealtimeStatus.vue
+++ client/views/pages/RealtimeStatus/RealtimeStatus.vue
... | ... | @@ -4,51 +4,30 @@ |
4 | 4 |
<div :class="['slide-content left', { active: showSlide }]"> |
5 | 5 |
<div class="wrap flex-between"> |
6 | 6 |
<div class="search"> |
7 |
- <h2>조건검색</h2> |
|
8 |
- <div class="box grid gap05 bg-gray"> |
|
9 |
- <div class="titleBar"> |
|
10 |
- <h3>지역설정</h3> |
|
11 |
- <hr /> |
|
7 |
+ <div class="search-mobile"> |
|
8 |
+ <h2>조건검색</h2> |
|
9 |
+ <div class="box grid gap05 bg-gray"> |
|
10 |
+ <div class="titleBar"> |
|
11 |
+ <h3>지역설정</h3> |
|
12 |
+ <hr /> |
|
13 |
+ </div> |
|
14 |
+ <DongSelectList @setDongCd="setDongCd" :crslk_azHiddenCk="true" :open_layers="this.$refs.open_layers" |
|
15 |
+ @siDoGunGuSelectF="dongSelectF" @dongSelectF="dongSelectF" @nodeSelectF="dongSelectF" ref="dongSelecter"> |
|
16 |
+ </DongSelectList> |
|
12 | 17 |
</div> |
13 |
- <DongSelectList |
|
14 |
- @setDongCd="setDongCd" |
|
15 |
- :crslk_azHiddenCk="true" |
|
16 |
- :open_layers="this.$refs.open_layers" |
|
17 |
- @siDoGunGuSelectF="dongSelectF" |
|
18 |
- @dongSelectF="dongSelectF" |
|
19 |
- @nodeSelectF="dongSelectF" |
|
20 |
- ref="dongSelecter" |
|
21 |
- ></DongSelectList> |
|
22 |
- </div> |
|
23 |
- <div class="box"> |
|
24 |
- <div class="titleBar"> |
|
25 |
- <h3>조건 설정</h3> |
|
26 |
- <hr /> |
|
27 |
- </div> |
|
18 |
+ <div class="box"> |
|
19 |
+ <div class="titleBar"> |
|
20 |
+ <h3>조건 설정</h3> |
|
21 |
+ <hr /> |
|
22 |
+ </div> |
|
28 | 23 |
|
29 |
- <div class="flex-between m-b"> |
|
30 |
- <input |
|
31 |
- class="m-r cbox_1" |
|
32 |
- type="checkbox" |
|
33 |
- v-model="condition['wtrms']" |
|
34 |
- /><label for="">무단횡단</label> |
|
35 |
- <input |
|
36 |
- class="m-r cbox_1" |
|
37 |
- type="checkbox" |
|
38 |
- v-model="condition['signExtn']" |
|
39 |
- /><label for="">신호연장</label> |
|
40 |
- <input |
|
41 |
- class="m-r cbox_1" |
|
42 |
- type="checkbox" |
|
43 |
- v-model="condition['rittrnVhcle']" |
|
44 |
- /><label for="">신호위반</label> |
|
45 |
- <input |
|
46 |
- class="m-r cbox_1" |
|
47 |
- type="checkbox" |
|
48 |
- v-model="condition['eqpmnTrobl']" |
|
49 |
- /><label for="">장애발생</label> |
|
50 |
- </div> |
|
51 |
- <!-- |
|
24 |
+ <div class="flex-between m-b"> |
|
25 |
+ <input class="m-r cbox_1" type="checkbox" v-model="condition['wtrms']" /><label for="">무단횡단</label> |
|
26 |
+ <input class="m-r cbox_1" type="checkbox" v-model="condition['signExtn']" /><label for="">신호연장</label> |
|
27 |
+ <input class="m-r cbox_1" type="checkbox" v-model="condition['rittrnVhcle']" /><label for="">신호위반</label> |
|
28 |
+ <input class="m-r cbox_1" type="checkbox" v-model="condition['eqpmnTrobl']" /><label for="">장애발생</label> |
|
29 |
+ </div> |
|
30 |
+ <!-- |
|
52 | 31 |
<div class="grid3_7 m-b"> |
53 | 32 |
<label for="date-input">일자</label> |
54 | 33 |
<input class="date-input" id="date-input" type="date" v-model="condition['date']" /> |
... | ... | @@ -69,66 +48,63 @@ |
69 | 48 |
/> |
70 | 49 |
</div> |
71 | 50 |
</div> --> |
72 |
- <button |
|
73 |
- class="btn-l gr-btn search-btn" |
|
74 |
- @click="statusSearch()" |
|
75 |
- style="padding: 0.5rem 0" |
|
76 |
- > |
|
77 |
- 검색하기 |
|
78 |
- </button> |
|
79 |
- </div> |
|
80 |
- <h2>실시간 발생 현황</h2> |
|
81 |
- <div class="box bg-white tab-buttons" style="height: calc(100% - 50rem)"> |
|
82 |
- <div class="btn_set flex-center gap"> |
|
83 |
- <button |
|
84 |
- class="m-r flex-between gray-btn" |
|
85 |
- v-for="tab in tabs" |
|
86 |
- :key="tab.id" |
|
87 |
- :class="{ active: activeTab === tab.id }" |
|
88 |
- @click="changeTab(tab.id)" |
|
89 |
- > |
|
90 |
- {{ tab.title }} |
|
91 |
- <img v-if="tab.id===2 && troubleOccurrenceStatusList.length > 0" src="../../../resources/images/warning.png" alt="" /> |
|
51 |
+ <button class="btn-l gr-btn search-btn" @click="statusSearch()" style="padding: 0.5rem 0"> |
|
52 |
+ 검색하기 |
|
92 | 53 |
</button> |
93 | 54 |
</div> |
94 |
- <div class="ulbox"> |
|
95 |
- <div |
|
96 |
- class="tab-content" |
|
97 |
- v-for="tab in tabs" |
|
98 |
- :key="tab.id" |
|
99 |
- v-show="activeTab === tab.id" |
|
100 |
- > |
|
101 |
- <ul v-show="tab.content1" > |
|
102 |
- <li v-for="(item, idx) in situationOccurrenceStatusList" :key="idx"> |
|
103 |
- <p class="" style="color: #9bbb8d; ">상황명: {{item.sn}}</p> |
|
104 |
- <p class="" style="color: #474747; font-size: 14px;"><img src="../../../resources/images/icon/map.png" alt=""> {{item.node_name}} {{item.crslk_az}}쪽횡단보도</p> |
|
105 |
- <p class="m-b" style="color: #767677; font-size: 13px;">발생일시: {{item.ocrn_dt}}</p> |
|
106 |
- </li> |
|
107 |
- </ul> |
|
108 |
- <ul v-show="tab.content2"> |
|
109 |
- <li v-for="(item, idx) in troubleOccurrenceStatusList" :key = idx @click="troblCcrnLocation(item)"> |
|
110 |
- <p class="m-b" style="color: #9bbb8d; ">장애명: {{item.trobl_nm}}</p> |
|
111 |
- <p class="m-b" style="color: #474747; font-size: 14px;"><img src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az }}쪽횡단보도 </p> |
|
112 |
- <p class="m-b">발생일시: {{item.ocrn_dt}}</p> |
|
113 |
- <p class="m-b">담당자: {{item.mngr_nm}}</p> |
|
114 |
- <p class="m-b">연락처: {{item.mngr_telno}}</p> |
|
115 |
- <p class="">복구여부: {{ item.recovery_yn }}</p> |
|
116 |
- </li> |
|
117 |
- </ul> |
|
118 |
- |
|
55 |
+ </div> |
|
56 |
+ <div class="live-mobile"> |
|
57 |
+ <h2>실시간 발생 현황</h2> |
|
58 |
+ <div class="box bg-white tab-buttons" style="height: calc(100% - 50rem)"> |
|
59 |
+ <div class="btn_set flex-center gap"> |
|
60 |
+ <button class="m-r flex-between gray-btn" v-for="tab in tabs" :key="tab.id" |
|
61 |
+ :class="{ active: activeTab === tab.id }" @click="changeTab(tab.id)"> |
|
62 |
+ {{ tab.title }} |
|
63 |
+ <img v-if="tab.id === 2 && troubleOccurrenceStatusList.length > 0" |
|
64 |
+ src="../../../resources/images/warning.png" alt="" /> |
|
65 |
+ </button> |
|
66 |
+ </div> |
|
67 |
+ <div class="ulbox"> |
|
68 |
+ <div class="tab-content" v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> |
|
69 |
+ <ul v-show="tab.content1"> |
|
70 |
+ <li v-for="(item, idx) in situationOccurrenceStatusList" :key="idx"> |
|
71 |
+ <p class="" style="color: #9bbb8d; ">상황명: {{ item.sn }}</p> |
|
72 |
+ <p class="" style="color: #474747; font-size: 14px;"><img |
|
73 |
+ src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az }}쪽횡단보도 |
|
74 |
+ </p> |
|
75 |
+ <p class="m-b" style="color: #767677; font-size: 13px;">발생일시: {{ item.ocrn_dt }}</p> |
|
76 |
+ </li> |
|
77 |
+ </ul> |
|
78 |
+ <ul v-show="tab.content2"> |
|
79 |
+ <li v-for="(item, idx) in troubleOccurrenceStatusList" :key=idx @click="troblCcrnLocation(item)"> |
|
80 |
+ <p class="m-b" style="color: #9bbb8d; ">장애명: {{ item.trobl_nm }}</p> |
|
81 |
+ <p class="m-b" style="color: #474747; font-size: 14px;"><img |
|
82 |
+ src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az |
|
83 |
+ }}쪽횡단보도 </p> |
|
84 |
+ <p class="m-b">발생일시: {{ item.ocrn_dt }}</p> |
|
85 |
+ <p class="m-b">담당자: {{ item.mngr_nm }}</p> |
|
86 |
+ <p class="m-b">연락처: {{ item.mngr_telno }}</p> |
|
87 |
+ <p class="">복구여부: {{ item.recovery_yn }}</p> |
|
88 |
+ </li> |
|
89 |
+ </ul> |
|
90 |
+ |
|
91 |
+ </div> |
|
92 |
+ </div> |
|
93 |
+ <div v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> |
|
94 |
+ <PaginationButton v-show="tab.content1" v-if="situationOccurrenceStatusListCount > 0" |
|
95 |
+ v-model:currentPage="situationOccurrenceStatusListSearch.currentPage" |
|
96 |
+ :per-page="situationOccurrenceStatusListSearch.perPage" |
|
97 |
+ :total-count="situationOccurrenceStatusListCount" :max-range="5" |
|
98 |
+ :click="situationOccurrenceStatusSearch" /> |
|
99 |
+ <PaginationButton v-show="tab.content2" v-if="troubleOccurrenceStatusListCount > 0" |
|
100 |
+ v-model:currentPage="troubleOccurrenceStatusListSearch.currentPage" |
|
101 |
+ :per-page="troubleOccurrenceStatusListSearch.perPage" :total-count="troubleOccurrenceStatusListCount" |
|
102 |
+ :max-range="5" :click="troubleOccurrenceStatusSearch" /> |
|
119 | 103 |
</div> |
120 | 104 |
</div> |
121 |
- <div v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> |
|
122 |
- <PaginationButton v-show="tab.content1" v-if="situationOccurrenceStatusListCount > 0" |
|
123 |
- v-model:currentPage="situationOccurrenceStatusListSearch.currentPage" |
|
124 |
- :per-page="situationOccurrenceStatusListSearch.perPage" :total-count="situationOccurrenceStatusListCount" :max-range="5" |
|
125 |
- :click="situationOccurrenceStatusSearch" /> |
|
126 |
- <PaginationButton v-show="tab.content2" v-if="troubleOccurrenceStatusListCount > 0" |
|
127 |
- v-model:currentPage="troubleOccurrenceStatusListSearch.currentPage" |
|
128 |
- :per-page="troubleOccurrenceStatusListSearch.perPage" :total-count="troubleOccurrenceStatusListCount" :max-range="5" |
|
129 |
- :click="troubleOccurrenceStatusSearch" /> |
|
130 |
- </div> |
|
131 | 105 |
</div> |
106 |
+ |
|
107 |
+ |
|
132 | 108 |
</div> |
133 | 109 |
</div> |
134 | 110 |
</div> |
... | ... | @@ -137,103 +113,73 @@ |
137 | 113 |
<ul class="flex-end"> |
138 | 114 |
<li> |
139 | 115 |
<p class="flex-center gap"> |
140 |
- <img |
|
141 |
- class="m-r" |
|
142 |
- src="../../../resources/images/icon/scumulativenumberofpedestrians.png" |
|
143 |
- alt |
|
144 |
- />금일 보행자 |
|
116 |
+ <img class="m-r" src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />금일 보행자 |
|
145 | 117 |
</p> |
146 | 118 |
<h3> |
147 |
- <em class="green2 m-r">{{ comma(statusControlCountList.pdstrnCount) }}</em |
|
148 |
- >명 |
|
119 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.pdstrnCount) }}</em>명 |
|
149 | 120 |
</h3> |
150 | 121 |
</li> |
151 | 122 |
<li class="br"></li> |
152 | 123 |
<li> |
153 | 124 |
<p class="flex-center gap"> |
154 |
- <img |
|
155 |
- class="m-r" |
|
156 |
- src="../../../resources/images/icon/scumulativenumberofpedestrians.png" |
|
157 |
- alt |
|
158 |
- />금일 무단횡단 발생 |
|
125 |
+ <img class="m-r" src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />금일 무단횡단 발생 |
|
159 | 126 |
</p> |
160 | 127 |
<h3> |
161 |
- <em class="green2 m-r">{{ comma(statusControlCountList.wtrmsCount) }}</em |
|
162 |
- >회 |
|
128 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.wtrmsCount) }}</em>회 |
|
163 | 129 |
</h3> |
164 | 130 |
</li> |
165 | 131 |
<li class="br"></li> |
166 | 132 |
<li> |
167 | 133 |
<p class="flex-center gap"> |
168 |
- <img |
|
169 |
- class="m-r" |
|
170 |
- src="../../../resources/images/icon/Numberofsignalextensionstoday.png" |
|
171 |
- alt |
|
172 |
- />금일 신호연장 발생 |
|
134 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />금일 신호연장 발생 |
|
173 | 135 |
</p> |
174 | 136 |
<h3> |
175 |
- <em class="green2 m-r">{{ comma(statusControlCountList.signExtnCount) }}</em |
|
176 |
- >회 |
|
137 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.signExtnCount) }}</em>회 |
|
177 | 138 |
</h3> |
178 | 139 |
</li> |
179 | 140 |
<li class="br"></li> |
180 | 141 |
<li> |
181 | 142 |
<p class="flex-center gap"> |
182 |
- <img |
|
183 |
- class="m-r" |
|
184 |
- src="../../../resources/images/icon/Numberofsignalextensionstoday.png" |
|
185 |
- alt |
|
186 |
- />금일 신호연장 시간 |
|
143 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />금일 신호연장 시간 |
|
187 | 144 |
</p> |
188 | 145 |
<h3> |
189 |
- <em class="green2 m-r">{{ comma(statusControlCountList.signExtnTime) }}</em |
|
190 |
- >초 |
|
146 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.signExtnTime) }}</em>초 |
|
191 | 147 |
</h3> |
192 | 148 |
</li> |
193 | 149 |
<li class="br"></li> |
194 | 150 |
<li> |
195 | 151 |
<p class="flex-center gap"> |
196 |
- <img |
|
197 |
- class="m-r" |
|
198 |
- src="../../../resources/images/icon/Numberofsignalviolationstoday.png" |
|
199 |
- alt |
|
200 |
- />금일 차량 신호위반 발생 |
|
152 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />금일 차량 신호위반 발생 |
|
201 | 153 |
</p> |
202 | 154 |
<h3> |
203 |
- <em class="green2 m-r">{{ comma(statusControlCountList.rittrnVioltVhcleCount) }}</em |
|
204 |
- >회 |
|
155 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.rittrnVioltVhcleCount) }}</em>회 |
|
205 | 156 |
</h3> |
206 | 157 |
</li> |
207 | 158 |
<li class="br"></li> |
208 | 159 |
<li> |
209 | 160 |
<p class="flex-center gap"> |
210 |
- <img |
|
211 |
- class="m-r" |
|
212 |
- src="../../../resources/images/icon/Numberofsignalviolationstoday.png" |
|
213 |
- alt |
|
214 |
- />금일 장애 발생 |
|
161 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />금일 장애 발생 |
|
215 | 162 |
</p> |
216 | 163 |
<h3> |
217 |
- <em class="green2 m-r">{{ comma(statusControlCountList.troblOcrnCount) }}</em |
|
218 |
- >회 |
|
164 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.troblOcrnCount) }}</em>회 |
|
219 | 165 |
</h3> |
220 | 166 |
</li> |
221 | 167 |
</ul> |
222 | 168 |
</div> |
223 |
- <OpenLayers ref="open_layers" /> |
|
169 |
+ <OpenLayers ref="open_layers" /> |
|
224 | 170 |
<!-- Popup container --> |
225 |
- <div v-if="isPopupVisible" class="popup-container" > |
|
171 |
+ <div v-if="isPopupVisible" class="popup-container"> |
|
226 | 172 |
<!-- Popup content --> |
227 |
- <div class="popup-content" > |
|
173 |
+ <div class="popup-content"> |
|
228 | 174 |
<!-- Add your popup content here --> |
229 | 175 |
<h2>{{ popupStatus.type }} 발생</h2> |
230 | 176 |
<ul> |
231 | 177 |
<li> |
232 | 178 |
<p class="m-b">발생일시: {{ popupStatus.ocrn_dt }}</p> |
233 |
- <p class="">발생장소: {{popupStatus.crslk_nm}} 횡단보도</p> |
|
179 |
+ <p class="">발생장소: {{ popupStatus.crslk_nm }} 횡단보도</p> |
|
234 | 180 |
</li> |
235 | 181 |
</ul> |
236 |
- <button @click="hidePopup(popupStatus.node_id)" class="s-btn gr-btn">확인</button> |
|
182 |
+ <button @click="hidePopup(popupStatus.node_id)" class="s-btn gr-btn">확인</button> |
|
237 | 183 |
</div> |
238 | 184 |
</div> |
239 | 185 |
</div> |
... | ... | @@ -244,11 +190,7 @@ |
244 | 190 |
</h2> |
245 | 191 |
<div class="box"> |
246 | 192 |
<div style="width: 100%; height: 100%" id="chartdivWrap1"> |
247 |
- <div |
|
248 |
- ref="chartdiv1" |
|
249 |
- id="chartdiv1" |
|
250 |
- style="width: 100%; height: 90%" |
|
251 |
- ></div> |
|
193 |
+ <div ref="chartdiv1" id="chartdiv1" style="width: 100%; height: 90%"></div> |
|
252 | 194 |
</div> |
253 | 195 |
</div> |
254 | 196 |
</div> |
... | ... | @@ -258,11 +200,7 @@ |
258 | 200 |
</h2> |
259 | 201 |
<div class="box"> |
260 | 202 |
<div style="width: 100%; height: 100%" id="chartdivWrap2"> |
261 |
- <div |
|
262 |
- ref="chartdiv2" |
|
263 |
- id="chartdiv2" |
|
264 |
- style="width: 100%; height: 90%" |
|
265 |
- ></div> |
|
203 |
+ <div ref="chartdiv2" id="chartdiv2" style="width: 100%; height: 90%"></div> |
|
266 | 204 |
</div> |
267 | 205 |
</div> |
268 | 206 |
</div> |
... | ... | @@ -272,11 +210,7 @@ |
272 | 210 |
</h2> |
273 | 211 |
<div class="box"> |
274 | 212 |
<div style="width: 100%; height: 100%" id="chartdivWrap3"> |
275 |
- <div |
|
276 |
- ref="chartdiv3" |
|
277 |
- id="chartdiv3" |
|
278 |
- style="width: 100%; height: 90%" |
|
279 |
- ></div> |
|
213 |
+ <div ref="chartdiv3" id="chartdiv3" style="width: 100%; height: 90%"></div> |
|
280 | 214 |
</div> |
281 | 215 |
</div> |
282 | 216 |
</div> |
... | ... | @@ -286,11 +220,7 @@ |
286 | 220 |
</h2> |
287 | 221 |
<div class="box"> |
288 | 222 |
<div style="width: 100%; height: 100%" id="chartdivWrap4"> |
289 |
- <div |
|
290 |
- ref="chartdiv4" |
|
291 |
- id="chartdiv4" |
|
292 |
- style="width: 100%; height: 90%" |
|
293 |
- ></div> |
|
223 |
+ <div ref="chartdiv4" id="chartdiv4" style="width: 100%; height: 90%"></div> |
|
294 | 224 |
</div> |
295 | 225 |
</div> |
296 | 226 |
</div> |
... | ... | @@ -301,13 +231,13 @@ |
301 | 231 |
<div class="modal-bg"></div> |
302 | 232 |
<div class="modal_base"> |
303 | 233 |
<h2> |
304 |
- <span>{{eventListSearch.eventType}} 발생 정보</span> |
|
305 |
- <button type="button" class="gray-btn modal_base_close" @click="modal_event_detail_list = false"> |
|
234 |
+ <span>{{ eventListSearch.eventType }} 발생 정보</span> |
|
235 |
+ <button type="button" class="gray-btn modal_base_close" @click="modal_event_detail_list = false"> |
|
306 | 236 |
<img src="../../../resources/images/close.png" alt="" /> |
307 | 237 |
</button> |
308 | 238 |
</h2> |
309 | 239 |
<div class="modal_base_body"> |
310 |
- <div class="de_Search" > |
|
240 |
+ <div class="de_Search"> |
|
311 | 241 |
<!--<table class="troubleTable"> |
312 | 242 |
<tbody> |
313 | 243 |
<tr> |
... | ... | @@ -334,26 +264,24 @@ |
334 | 264 |
<td>발생시간</td> |
335 | 265 |
</tr> |
336 | 266 |
</thead> |
337 |
- <tbody> |
|
338 |
- <tr v-for="(item, idx) in eventList" :key="idx" > |
|
267 |
+ <tbody> |
|
268 |
+ <tr v-for="(item, idx) in eventList" :key="idx"> |
|
339 | 269 |
<td data-title="교차로명">{{ item.dong_nm }}</td> |
340 |
- <td data-title="횡단보도명"> {{item.crslk_nm}} 쪽횡단보도</td> |
|
270 |
+ <td data-title="횡단보도명"> {{ item.crslk_nm }} 쪽횡단보도</td> |
|
341 | 271 |
<td data-title="상황명">{{ item.type }}</td> |
342 | 272 |
<td data-title="발생시간">{{ item.ocrn_dt }}</td> |
343 |
- </tr> |
|
273 |
+ </tr> |
|
344 | 274 |
<tr> |
345 | 275 |
<td class="exception" colspan="4" v-if="eventList.length < 1">조회된 데이터가 없습니다</td> |
346 | 276 |
</tr> |
347 | 277 |
</tbody> |
348 | 278 |
</table> |
349 |
- <PaginationButton |
|
350 |
- v-model:currentPage="eventListSearch.currentPage" |
|
351 |
- :per-page="eventListSearch.perPage" :total-count="eventListCount" :max-range="5" |
|
352 |
- :click="eventSelectList" /> |
|
279 |
+ <PaginationButton v-model:currentPage="eventListSearch.currentPage" :per-page="eventListSearch.perPage" |
|
280 |
+ :total-count="eventListCount" :max-range="5" :click="eventSelectList" /> |
|
353 | 281 |
</div> |
354 |
- <div class="modal_base_bottom gap"> |
|
355 |
- <button type="button" class="btn-2 gray-btn wrem_10 mrg_5p" @click="modal_event_detail_list= false">닫기</button> |
|
356 |
- </div> |
|
282 |
+ <div class="modal_base_bottom gap"> |
|
283 |
+ <button type="button" class="btn-2 gray-btn wrem_10 mrg_5p" @click="modal_event_detail_list = false">닫기</button> |
|
284 |
+ </div> |
|
357 | 285 |
</div> |
358 | 286 |
</div> |
359 | 287 |
|
... | ... | @@ -379,10 +307,10 @@ |
379 | 307 |
export default { |
380 | 308 |
data() { |
381 | 309 |
return { |
382 |
- address:{ |
|
310 |
+ address: { |
|
383 | 311 |
|
384 | 312 |
}, |
385 |
- troubleOccurrenceStatusListSearch : { |
|
313 |
+ troubleOccurrenceStatusListSearch: { |
|
386 | 314 |
currentPage: 1, |
387 | 315 |
perPage: 10, |
388 | 316 |
orderByType: 'DESC', |
... | ... | @@ -394,22 +322,22 @@ |
394 | 322 |
orderByType: 'DESC', |
395 | 323 |
}, |
396 | 324 |
|
397 |
- eventListSearch: { |
|
325 |
+ eventListSearch: { |
|
398 | 326 |
currentPage: 1, |
399 | 327 |
perPage: 10, |
400 | 328 |
startDate: null, |
401 | 329 |
endDate: null, |
402 | 330 |
eventType: null, |
403 |
- sigungu_cd:null, |
|
331 |
+ sigungu_cd: null, |
|
404 | 332 |
dong_cd: null, |
405 | 333 |
dong_dong_cd: null, |
406 | 334 |
node_id: null, |
407 | 335 |
crslk_az: null |
408 | 336 |
}, |
409 |
- situationOccurrenceStatusList:[], |
|
410 |
- situationOccurrenceStatusListCount :0, |
|
411 |
- troubleOccurrenceStatusList:[], |
|
412 |
- troubleOccurrenceStatusListCount : 0, |
|
337 |
+ situationOccurrenceStatusList: [], |
|
338 |
+ situationOccurrenceStatusListCount: 0, |
|
339 |
+ troubleOccurrenceStatusList: [], |
|
340 |
+ troubleOccurrenceStatusListCount: 0, |
|
413 | 341 |
eventListCount: 0, |
414 | 342 |
eventList: [], |
415 | 343 |
eventIdx: 0, |
... | ... | @@ -425,7 +353,7 @@ |
425 | 353 |
rittrnVhcle: true, |
426 | 354 |
eqpmnTrobl: true, |
427 | 355 |
//일자 |
428 |
- date : null, |
|
356 |
+ date: null, |
|
429 | 357 |
start_date: null, |
430 | 358 |
end_date: null, |
431 | 359 |
//시간대 |
... | ... | @@ -433,9 +361,9 @@ |
433 | 361 |
end_time: null, |
434 | 362 |
|
435 | 363 |
// 신규데이터 비교 시간대 |
436 |
- currentTimestamp : null, |
|
437 |
- popuptitle : "무단횡단 발생목록" |
|
438 |
- }, |
|
364 |
+ currentTimestamp: null, |
|
365 |
+ popuptitle: "무단횡단 발생목록" |
|
366 |
+ }, |
|
439 | 367 |
ck: true, |
440 | 368 |
tabs: [ |
441 | 369 |
{ |
... | ... | @@ -455,13 +383,13 @@ |
455 | 383 |
chart2: {}, |
456 | 384 |
chart3: {}, |
457 | 385 |
chart4: {}, |
458 |
- chartData:{ |
|
459 |
- wtrms:[], |
|
460 |
- signExtn:[], |
|
461 |
- rittrnVioltVhcle:[], |
|
462 |
- troblOcrn:[], |
|
386 |
+ chartData: { |
|
387 |
+ wtrms: [], |
|
388 |
+ signExtn: [], |
|
389 |
+ rittrnVioltVhcle: [], |
|
390 |
+ troblOcrn: [], |
|
463 | 391 |
}, |
464 |
- data1: [ ], |
|
392 |
+ data1: [], |
|
465 | 393 |
statusControlCountList: { |
466 | 394 |
pdstrnCount: 0, |
467 | 395 |
wtrmsCount: 0, |
... | ... | @@ -471,20 +399,20 @@ |
471 | 399 |
troblOcrnCount: 0, |
472 | 400 |
}, |
473 | 401 |
// 실시간 발생 이벤트 |
474 |
- popupStatus : { |
|
475 |
- node_id : '', |
|
476 |
- crslk_az : '', |
|
477 |
- ocrn_dt : '', |
|
478 |
- type : '' |
|
402 |
+ popupStatus: { |
|
403 |
+ node_id: '', |
|
404 |
+ crslk_az: '', |
|
405 |
+ ocrn_dt: '', |
|
406 |
+ type: '' |
|
479 | 407 |
}, |
480 | 408 |
// 실시간 발생 이벤트 리스트 |
481 |
- realTimeEventList : [], |
|
409 |
+ realTimeEventList: [], |
|
482 | 410 |
// 이벤트 발생 체크 |
483 |
- eventFlage : false, |
|
411 |
+ eventFlage: false, |
|
484 | 412 |
// 이벤트 상세보기 팝업 |
485 |
- modal_event_detail_list : false, |
|
413 |
+ modal_event_detail_list: false, |
|
486 | 414 |
// 타이머 관리 |
487 |
- timer : {} |
|
415 |
+ timer: {} |
|
488 | 416 |
}; |
489 | 417 |
}, |
490 | 418 |
components: { |
... | ... | @@ -495,21 +423,21 @@ |
495 | 423 |
methods: { |
496 | 424 |
// 휠 이벤트 |
497 | 425 |
childWheel(coordinate) { |
498 |
- |
|
426 |
+ |
|
499 | 427 |
}, |
500 | 428 |
|
501 | 429 |
//DongSelectList에서 dong_cd 받아오기 |
502 |
- setDongCd(value) { |
|
430 |
+ setDongCd(value) { |
|
503 | 431 |
this.address = value; |
504 | 432 |
}, |
505 | 433 |
|
506 | 434 |
childMoveEnd(zoom) { |
507 | 435 |
// console.log("zoom zoomzoom: ", zoom); |
508 |
- if(this.now_zoom >= 18.6 && zoom < 18.6){ |
|
436 |
+ if (this.now_zoom >= 18.6 && zoom < 18.6) { |
|
509 | 437 |
this.address.node_id = null; |
510 | 438 |
this.statusSearch(false); |
511 |
- } |
|
512 |
- this.now_zoom = zoom; |
|
439 |
+ } |
|
440 |
+ this.now_zoom = zoom; |
|
513 | 441 |
}, |
514 | 442 |
|
515 | 443 |
// 실시간 발생 토클? |
... | ... | @@ -520,7 +448,7 @@ |
520 | 448 |
this.slideText = "창닫기"; |
521 | 449 |
} |
522 | 450 |
this.showSlide = !this.showSlide; |
523 |
- }, |
|
451 |
+ }, |
|
524 | 452 |
|
525 | 453 |
dongSelectF: function (event) { |
526 | 454 |
|
... | ... | @@ -530,80 +458,80 @@ |
530 | 458 |
changeTab(tabId) { |
531 | 459 |
this.activeTab = tabId; |
532 | 460 |
}, |
533 |
- |
|
461 |
+ |
|
534 | 462 |
showPopup() { |
535 | 463 |
this.isPopupVisible = true; |
536 | 464 |
}, |
537 |
- |
|
538 |
- hidePopup(node_id) { |
|
465 |
+ |
|
466 |
+ hidePopup(node_id) { |
|
539 | 467 |
this.isPopupVisible = false; |
540 | 468 |
}, |
541 | 469 |
|
542 | 470 |
// 팝업 상세 |
543 |
- openDetailPopup(type){ |
|
544 |
- let vm = this; |
|
471 |
+ openDetailPopup(type) { |
|
472 |
+ let vm = this; |
|
545 | 473 |
vm.eventListSearch.currentPage = 1; |
546 | 474 |
vm.eventListSearch.startDate = vm.condition.date + ' ' + vm.condition.start_time; |
547 | 475 |
vm.eventListSearch.endDate = vm.condition.date + ' ' + vm.condition.end_time; |
548 | 476 |
|
549 |
- |
|
477 |
+ |
|
550 | 478 |
// 무단횡단 |
551 |
- if(type == 'c1'){ |
|
479 |
+ if (type == 'c1') { |
|
552 | 480 |
vm.eventListSearch.eventType = '무단횡단'; |
553 |
- // 신호연장 |
|
554 |
- }else if(type == 'c2'){ |
|
481 |
+ // 신호연장 |
|
482 |
+ } else if (type == 'c2') { |
|
555 | 483 |
vm.eventListSearch.eventType = '신호연장'; |
556 |
- // 차량위반 |
|
557 |
- }else if(type == 'c3'){ |
|
484 |
+ // 차량위반 |
|
485 |
+ } else if (type == 'c3') { |
|
558 | 486 |
vm.eventListSearch.eventType = '우회전신호위반'; |
559 |
- // 장비발생 |
|
560 |
- }else if(type == 'c4'){ |
|
561 |
- vm.eventListSearch.eventType = '장비장애'; |
|
487 |
+ // 장비발생 |
|
488 |
+ } else if (type == 'c4') { |
|
489 |
+ vm.eventListSearch.eventType = '장비장애'; |
|
562 | 490 |
} |
563 | 491 |
|
564 |
- if(type != 'c4'){ |
|
565 |
- const vm = this; |
|
566 |
- axios({ |
|
492 |
+ if (type != 'c4') { |
|
493 |
+ const vm = this; |
|
494 |
+ axios({ |
|
567 | 495 |
url: "/statusControl/eventSelectList.json", |
568 | 496 |
method: "post", |
569 | 497 |
headers: { |
570 | 498 |
"Content-Type": "application/json; charset=UTF-8", |
571 | 499 |
}, |
572 | 500 |
data: vm.eventListSearch, |
573 |
- }) |
|
574 |
- .then(function(response) { |
|
575 |
- vm.eventListCount = response.data.eventListCount; |
|
576 |
- vm.eventList = response.data.eventList; |
|
577 |
- vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
578 |
- vm.modal_event_detail_list = true; |
|
579 |
- }) |
|
580 |
- .catch(function(error) { |
|
581 |
- alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
582 |
- }); |
|
583 |
- } |
|
501 |
+ }) |
|
502 |
+ .then(function (response) { |
|
503 |
+ vm.eventListCount = response.data.eventListCount; |
|
504 |
+ vm.eventList = response.data.eventList; |
|
505 |
+ vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
506 |
+ vm.modal_event_detail_list = true; |
|
507 |
+ }) |
|
508 |
+ .catch(function (error) { |
|
509 |
+ alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
510 |
+ }); |
|
511 |
+ } |
|
584 | 512 |
}, |
585 |
- |
|
513 |
+ |
|
586 | 514 |
// 마우스 클릭 |
587 |
- childClick: function (prop, coordinate, layerCk,map) { |
|
588 |
- var vm = this; |
|
589 |
- |
|
590 |
- if(layerCk == true){ |
|
515 |
+ childClick: function (prop, coordinate, layerCk, map) { |
|
516 |
+ var vm = this; |
|
517 |
+ |
|
518 |
+ if (layerCk == true) { |
|
591 | 519 |
if (prop[0] != null && prop[0].layerName != 'multiPolygonLayer') { |
592 |
- if(prop[0].layerName === 'dong'){ |
|
593 |
- //this.address.dong_dong_cd = prop[0].id_; |
|
594 |
- //this.address.dong_cd =prop[0].id_; |
|
595 |
- vm.eventListSearch.dong_cd = prop[0].id_; |
|
596 |
- }else if(prop[0].layerName === 'node'){ |
|
597 |
- //this.address.node_id = prop[0].id_; |
|
598 |
- vm.eventListSearch.node_id = prop[0].id_; |
|
599 |
- } |
|
600 |
- this.createPopup(coordinate,prop[0]); |
|
520 |
+ if (prop[0].layerName === 'dong') { |
|
521 |
+ //this.address.dong_dong_cd = prop[0].id_; |
|
522 |
+ //this.address.dong_cd =prop[0].id_; |
|
523 |
+ vm.eventListSearch.dong_cd = prop[0].id_; |
|
524 |
+ } else if (prop[0].layerName === 'node') { |
|
525 |
+ //this.address.node_id = prop[0].id_; |
|
526 |
+ vm.eventListSearch.node_id = prop[0].id_; |
|
527 |
+ } |
|
528 |
+ this.createPopup(coordinate, prop[0]); |
|
601 | 529 |
} |
602 | 530 |
} |
603 | 531 |
}, |
604 |
- |
|
532 |
+ |
|
605 | 533 |
// 장애 팝업 |
606 |
- createErrorPopup : function(item){ |
|
534 |
+ createErrorPopup: function (item) { |
|
607 | 535 |
var vm = this; |
608 | 536 |
vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
609 | 537 |
let element = document.createElement("div"); |
... | ... | @@ -612,341 +540,341 @@ |
612 | 540 |
// 검색창 떠있는 동안은 자동 리프레쉬 멈춤 |
613 | 541 |
var html = ""; |
614 | 542 |
|
615 |
- html = "<div style='transform: translate(0%, 0%) translate(-150px,-230px);'>" |
|
616 |
- + " <table class='map_multi_popup' >" |
|
617 |
- + " <thead>" |
|
618 |
- + " <td colspan='4' class='fon'> <span > " + item.node_name + "_" + item.crslk_az + "측 획단보도 장애정보 <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
619 |
- + " </thead>" |
|
620 |
- + " <tbody>" |
|
621 |
- + " <tr>" |
|
622 |
- + " <th colspan='3'>장애명</th>" |
|
623 |
- + " <td >"+item.trobl_nm+"</td>" |
|
624 |
- + " </tr>" |
|
625 |
- + " <tr>" |
|
626 |
- + " <th colspan='3'>담당자</th>" |
|
627 |
- + " <td >"+item.mngr_nm+"</td>" |
|
628 |
- + " </tr>" |
|
629 |
- + " <tr>" |
|
630 |
- + " <th colspan='3'>연락처</th>" |
|
631 |
- + " <td >"+item.mngr_telno+"</td>" |
|
632 |
- + " </tr>" |
|
633 |
- + " <tr>" |
|
634 |
- + " <th colspan='3'>이메일</th>" |
|
635 |
- + " <td >"+item.mngr_eml+"</td>" |
|
636 |
- + " </tr>" |
|
637 |
- + " <tr>" |
|
638 |
- + " <th colspan='3'>소속정보</th>" |
|
639 |
- + " <td >"+item.mngr_ogdp_info+"</td>" |
|
640 |
- + " </tr>" |
|
641 |
- + "<tr>" |
|
642 |
- + " <th colspan='5'><button class='map_multi_popup_move_button' id='close'>닫기</button></th>" |
|
643 |
- + " </tr>" |
|
644 |
- + " </tbody>" |
|
645 |
- + " </table>" |
|
646 |
- + " </div>"; |
|
647 |
- + " </tbody>" |
|
648 |
- + " </table>" |
|
649 |
- + " </div>"; |
|
543 |
+ html = "<div style='transform: translate(0%, 0%) translate(-150px,-230px);'>" |
|
544 |
+ + " <table class='map_multi_popup' >" |
|
545 |
+ + " <thead>" |
|
546 |
+ + " <td colspan='4' class='fon'> <span > " + item.node_name + "_" + item.crslk_az + "측 획단보도 장애정보 <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
547 |
+ + " </thead>" |
|
548 |
+ + " <tbody>" |
|
549 |
+ + " <tr>" |
|
550 |
+ + " <th colspan='3'>장애명</th>" |
|
551 |
+ + " <td >" + item.trobl_nm + "</td>" |
|
552 |
+ + " </tr>" |
|
553 |
+ + " <tr>" |
|
554 |
+ + " <th colspan='3'>담당자</th>" |
|
555 |
+ + " <td >" + item.mngr_nm + "</td>" |
|
556 |
+ + " </tr>" |
|
557 |
+ + " <tr>" |
|
558 |
+ + " <th colspan='3'>연락처</th>" |
|
559 |
+ + " <td >" + item.mngr_telno + "</td>" |
|
560 |
+ + " </tr>" |
|
561 |
+ + " <tr>" |
|
562 |
+ + " <th colspan='3'>이메일</th>" |
|
563 |
+ + " <td >" + item.mngr_eml + "</td>" |
|
564 |
+ + " </tr>" |
|
565 |
+ + " <tr>" |
|
566 |
+ + " <th colspan='3'>소속정보</th>" |
|
567 |
+ + " <td >" + item.mngr_ogdp_info + "</td>" |
|
568 |
+ + " </tr>" |
|
569 |
+ + "<tr>" |
|
570 |
+ + " <th colspan='5'><button class='map_multi_popup_move_button' id='close'>닫기</button></th>" |
|
571 |
+ + " </tr>" |
|
572 |
+ + " </tbody>" |
|
573 |
+ + " </table>" |
|
574 |
+ + " </div>"; |
|
575 |
+ + " </tbody>" |
|
576 |
+ + " </table>" |
|
577 |
+ + " </div>"; |
|
650 | 578 |
|
651 |
- element.innerHTML = html; |
|
652 |
- element.style.display = 'block'; |
|
579 |
+ element.innerHTML = html; |
|
580 |
+ element.style.display = 'block'; |
|
653 | 581 |
|
654 |
- // OverLay 생성 |
|
655 |
- let overlay = new Overlay({ |
|
656 |
- id : 'multiPopup', |
|
657 |
- element: element, // 생성한 DIV |
|
658 |
- autoPan: true, |
|
659 |
- className: "multiPopup", |
|
660 |
- autoPanMargin: 100, |
|
661 |
- autoPanAnimation: { |
|
662 |
- duration: 400 |
|
663 |
- } |
|
664 |
- }); |
|
582 |
+ // OverLay 생성 |
|
583 |
+ let overlay = new Overlay({ |
|
584 |
+ id: 'multiPopup', |
|
585 |
+ element: element, // 생성한 DIV |
|
586 |
+ autoPan: true, |
|
587 |
+ className: "multiPopup", |
|
588 |
+ autoPanMargin: 100, |
|
589 |
+ autoPanAnimation: { |
|
590 |
+ duration: 400 |
|
591 |
+ } |
|
592 |
+ }); |
|
665 | 593 |
|
666 |
- //오버레이의 위치 저장 |
|
667 |
- var geom = JSON.parse(item.geom.value); |
|
668 |
- // console.log(geom); |
|
669 |
- overlay.setPosition(geom.coordinates); |
|
594 |
+ //오버레이의 위치 저장 |
|
595 |
+ var geom = JSON.parse(item.geom.value); |
|
596 |
+ // console.log(geom); |
|
597 |
+ overlay.setPosition(geom.coordinates); |
|
670 | 598 |
|
671 |
- //지도에 추가 |
|
672 |
- this.$refs.open_layers.map.addOverlay(overlay); |
|
673 |
- // 해당 DIV 다켓방법 |
|
674 |
- let oElem = overlay.getElement(); |
|
675 |
- oElem.addEventListener('click', function(e) { |
|
676 |
- var target = e.target; |
|
677 |
- if (target.className == "ol-popup-closer" || target.className == 'map_multi_popup_move_button') { |
|
599 |
+ //지도에 추가 |
|
600 |
+ this.$refs.open_layers.map.addOverlay(overlay); |
|
601 |
+ // 해당 DIV 다켓방법 |
|
602 |
+ let oElem = overlay.getElement(); |
|
603 |
+ oElem.addEventListener('click', function (e) { |
|
604 |
+ var target = e.target; |
|
605 |
+ if (target.className == "ol-popup-closer" || target.className == 'map_multi_popup_move_button') { |
|
678 | 606 |
//선택한 OverLayer 삭제 |
679 |
- vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
680 |
- vm.timer = setInterval(()=>{ |
|
681 |
- vm.statusSearch(false); |
|
682 |
- },5000) |
|
607 |
+ vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
608 |
+ vm.timer = setInterval(() => { |
|
609 |
+ vm.statusSearch(false); |
|
610 |
+ }, 5000) |
|
683 | 611 |
|
684 | 612 |
} |
685 | 613 |
}); |
686 | 614 |
}, |
687 | 615 |
|
688 | 616 |
// 정보 팝업 |
689 |
- createPopup : function(coordinate, prop){ |
|
690 |
- var vm = this; |
|
691 |
- vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
692 |
- let element = document.createElement("div"); |
|
693 |
- element.classList.add('ol-popup'); |
|
617 |
+ createPopup: function (coordinate, prop) { |
|
618 |
+ var vm = this; |
|
619 |
+ vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
620 |
+ let element = document.createElement("div"); |
|
621 |
+ element.classList.add('ol-popup'); |
|
694 | 622 |
|
695 |
- // 검색창 떠있는 동안은 자동 리프레쉬 멈춤 |
|
696 |
- clearInterval(this.timer); |
|
697 |
- var html = ""; |
|
698 |
- html = "<div style='transform: translate(0%, 0%) translate(-150px,-190px);'>" |
|
623 |
+ // 검색창 떠있는 동안은 자동 리프레쉬 멈춤 |
|
624 |
+ clearInterval(this.timer); |
|
625 |
+ var html = ""; |
|
626 |
+ html = "<div style='transform: translate(0%, 0%) translate(-150px,-190px);'>" |
|
699 | 627 |
+ " <table class='map_multi_popup' >" |
700 | 628 |
+ " <thead>" |
701 |
- + " <td colspan='5' class='fon'> <span > " + prop.values_.name + " <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
629 |
+ + " <td colspan='5' class='fon'> <span > " + prop.values_.name + " <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
702 | 630 |
+ " </thead>" |
703 | 631 |
+ " <tbody>" |
704 | 632 |
+ " <tr>" |
705 | 633 |
+ " <th colspan='3'>무단횡단 발생</th>" |
706 |
- + " <td >"+prop.values_.crosng_cnt+"</td>" |
|
634 |
+ + " <td >" + prop.values_.crosng_cnt + "</td>" |
|
707 | 635 |
+ " <td ><button class='map_multi_popup_button' id='c1' >상세</button></td>" |
708 | 636 |
+ " </tr>" |
709 | 637 |
+ " <tr>" |
710 | 638 |
+ " <th colspan='3'>신호연장 발생</th>" |
711 |
- + " <td >"+prop.values_.extn_cnt+"</td>" |
|
639 |
+ + " <td >" + prop.values_.extn_cnt + "</td>" |
|
712 | 640 |
+ " <td ><button class='map_multi_popup_button' id='c2' >상세</button></td>" |
713 | 641 |
+ " </tr>" |
714 | 642 |
+ " <tr>" |
715 | 643 |
+ " <th colspan='3'>차량위반 발생</th>" |
716 |
- + " <td >"+prop.values_.law_vltn_cnt+"</td>" |
|
644 |
+ + " <td >" + prop.values_.law_vltn_cnt + "</td>" |
|
717 | 645 |
+ " <td ><button class='map_multi_popup_button' id='c3' >상세</button></td>" |
718 |
- + " </tr>" |
|
719 |
- + " <tr>" |
|
646 |
+ + " </tr>" |
|
647 |
+ + " <tr>" |
|
720 | 648 |
+ " <th colspan='3'>장비장애 발생</th>" |
721 |
- + " <td >"+prop.values_.error_cnt+"</td>" |
|
649 |
+ + " <td >" + prop.values_.error_cnt + "</td>" |
|
722 | 650 |
+ " <td ><button class='map_multi_popup_button' id='c1' >상세</button></td>" |
723 | 651 |
+ " </tr>"; |
724 |
- if(prop.layerName != 'crslk'){ |
|
725 |
- html += "<tr>" |
|
726 |
- + " <th colspan='5'><button class='map_multi_popup_move_button' id='move'>이동</button></th>" |
|
727 |
- + " </tr>" |
|
728 |
- + " </tbody>" |
|
652 |
+ if (prop.layerName != 'crslk') { |
|
653 |
+ html += "<tr>" |
|
654 |
+ + " <th colspan='5'><button class='map_multi_popup_move_button' id='move'>이동</button></th>" |
|
655 |
+ + " </tr>" |
|
656 |
+ + " </tbody>" |
|
729 | 657 |
+ " </table>" |
730 |
- + " </div>"; |
|
731 |
- }else{ |
|
732 |
- html += " </tbody>" |
|
658 |
+ + " </div>"; |
|
659 |
+ } else { |
|
660 |
+ html += " </tbody>" |
|
733 | 661 |
+ " </table>" |
734 |
- + " </div>"; |
|
735 |
- } |
|
662 |
+ + " </div>"; |
|
663 |
+ } |
|
736 | 664 |
|
737 |
- element.innerHTML = html; |
|
738 |
- element.style.display = 'block'; |
|
665 |
+ element.innerHTML = html; |
|
666 |
+ element.style.display = 'block'; |
|
739 | 667 |
|
740 | 668 |
// OverLay 생성 |
741 | 669 |
let overlay = new Overlay({ |
742 |
- id : 'multiPopup', |
|
743 |
- element: element, // 생성한 DIV |
|
744 |
- autoPan: true, |
|
745 |
- className: "multiPopup", |
|
746 |
- autoPanMargin: 100, |
|
747 |
- autoPanAnimation: { |
|
748 |
- duration: 400 |
|
749 |
- } |
|
750 |
- }); |
|
670 |
+ id: 'multiPopup', |
|
671 |
+ element: element, // 생성한 DIV |
|
672 |
+ autoPan: true, |
|
673 |
+ className: "multiPopup", |
|
674 |
+ autoPanMargin: 100, |
|
675 |
+ autoPanAnimation: { |
|
676 |
+ duration: 400 |
|
677 |
+ } |
|
678 |
+ }); |
|
751 | 679 |
|
752 | 680 |
//오버레이의 위치 저장 |
753 |
- overlay.setPosition(prop.values_.geometry.flatCoordinates); |
|
681 |
+ overlay.setPosition(prop.values_.geometry.flatCoordinates); |
|
754 | 682 |
|
755 | 683 |
//지도에 추가 |
756 |
- this.$refs.open_layers.map.addOverlay(overlay); |
|
684 |
+ this.$refs.open_layers.map.addOverlay(overlay); |
|
757 | 685 |
// 해당 DIV 다켓방법 |
758 | 686 |
let oElem = overlay.getElement(); |
759 |
- oElem.addEventListener('click', function(e) { |
|
760 |
- var target = e.target; |
|
761 |
- if (target.className == "ol-popup-closer") { |
|
762 |
- //선택한 OverLayer 삭제 |
|
763 |
- vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
764 |
- element = ''; |
|
687 |
+ oElem.addEventListener('click', function (e) { |
|
688 |
+ var target = e.target; |
|
689 |
+ if (target.className == "ol-popup-closer") { |
|
690 |
+ //선택한 OverLayer 삭제 |
|
691 |
+ vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
692 |
+ element = ''; |
|
765 | 693 |
|
766 |
- vm.timer = setInterval(()=>{ |
|
767 |
- vm.statusSearch(false); |
|
768 |
- },5000) |
|
694 |
+ vm.timer = setInterval(() => { |
|
695 |
+ vm.statusSearch(false); |
|
696 |
+ }, 5000) |
|
769 | 697 |
|
770 |
- }else if (target.className == "map_multi_popup_button") { |
|
771 |
- vm.openDetailPopup(target.id) |
|
698 |
+ } else if (target.className == "map_multi_popup_button") { |
|
699 |
+ vm.openDetailPopup(target.id) |
|
772 | 700 |
|
773 |
- }else if (target.className == "map_multi_popup_move_button") { |
|
774 |
- if (prop != null && prop.layerName != 'multiPolygonLayer') { |
|
775 |
- if(prop.layerName === 'dong'){ |
|
776 |
- vm.address.dong_dong_cd = prop.id_; |
|
777 |
- vm.address.dong_cd =prop.id_; |
|
778 |
- }else if(prop.layerName === 'node'){ |
|
779 |
- vm.address.node_id = prop.id_; |
|
780 |
- } |
|
781 |
- vm.statusSearch(true); |
|
701 |
+ } else if (target.className == "map_multi_popup_move_button") { |
|
702 |
+ if (prop != null && prop.layerName != 'multiPolygonLayer') { |
|
703 |
+ if (prop.layerName === 'dong') { |
|
704 |
+ vm.address.dong_dong_cd = prop.id_; |
|
705 |
+ vm.address.dong_cd = prop.id_; |
|
706 |
+ } else if (prop.layerName === 'node') { |
|
707 |
+ vm.address.node_id = prop.id_; |
|
782 | 708 |
} |
783 |
- vm.timer = setInterval(()=>{ |
|
784 |
- vm.statusSearch(false); |
|
785 |
- },5000) |
|
709 |
+ vm.statusSearch(true); |
|
786 | 710 |
} |
711 |
+ vm.timer = setInterval(() => { |
|
712 |
+ vm.statusSearch(false); |
|
713 |
+ }, 5000) |
|
714 |
+ } |
|
787 | 715 |
}); |
788 | 716 |
}, |
789 | 717 |
|
790 | 718 |
// 장애 발생 현황 클릭 |
791 |
- troblCcrnLocation : function(item){ |
|
719 |
+ troblCcrnLocation: function (item) { |
|
792 | 720 |
// console.log('troblCcrnLocation', item); |
793 |
- clearInterval(this.timer); |
|
794 |
- this.address.node_id = item.node_id; |
|
795 |
- this.statusSearch(true); |
|
721 |
+ clearInterval(this.timer); |
|
722 |
+ this.address.node_id = item.node_id; |
|
723 |
+ this.statusSearch(true); |
|
796 | 724 |
this.eventFlage = true; |
797 | 725 |
this.createErrorPopup(item); |
798 | 726 |
}, |
799 | 727 |
|
800 | 728 |
// 셀렉트 선택시 반영 데이터 |
801 |
- getStatusData : function(pointAnim){ |
|
802 |
- const vm = this; |
|
729 |
+ getStatusData: function (pointAnim) { |
|
730 |
+ const vm = this; |
|
803 | 731 |
|
804 | 732 |
var layer = 'dong' |
805 |
- var epsg = "EPSG:5181"; |
|
806 |
- |
|
807 |
- if(vm.address.guGun_dong_cd == null){ |
|
808 |
- layer = 'sigungu'; |
|
809 |
- }else if(vm.address.node_id != null){ |
|
810 |
- layer = 'crslk'; |
|
811 |
- }else if(vm.address.dong_dong_cd != null){ |
|
812 |
- layer = 'node'; |
|
813 |
- epsg = "EPSG:4326"; |
|
814 |
- } |
|
815 |
- |
|
733 |
+ var epsg = "EPSG:5181"; |
|
734 |
+ |
|
735 |
+ if (vm.address.guGun_dong_cd == null) { |
|
736 |
+ layer = 'sigungu'; |
|
737 |
+ } else if (vm.address.node_id != null) { |
|
738 |
+ layer = 'crslk'; |
|
739 |
+ } else if (vm.address.dong_dong_cd != null) { |
|
740 |
+ layer = 'node'; |
|
741 |
+ epsg = "EPSG:4326"; |
|
742 |
+ } |
|
743 |
+ |
|
816 | 744 |
axios({ |
817 | 745 |
url: "/common/getStatusDataGeoJson.json", |
818 | 746 |
method: 'post', |
819 | 747 |
headers: { |
820 | 748 |
'Content-Type': 'application/json; charset=UTF-8' |
821 | 749 |
}, |
822 |
- data: { |
|
823 |
- "dong_cd": vm.address.dong_cd |
|
824 |
- , "start_dt": vm.condition.date + ' ' + vm.condition.start_time |
|
825 |
- , "end_dt" : vm.condition.date + ' ' + vm.condition.end_time |
|
826 |
- , "layer" : layer |
|
827 |
- , "signExtn" : vm.condition.signExtn |
|
828 |
- , "wtrms" : vm.condition.wtrms |
|
829 |
- , "rittrnVhcle" : vm.condition.rittrnVhcle |
|
830 |
- , "eqpmnTrobl" : vm.condition.eqpmnTrobl |
|
831 |
- , "currentTimestamp": vm.condition.currentTimestamp |
|
832 |
- }, |
|
833 |
- }).then(function (response) { |
|
834 |
- vm.statusControlCountList = response.data.totalCount; |
|
835 |
- vm.$refs.open_layers.removeAddLayerAll(); |
|
836 |
- vm.$refs.open_layers.addLayerByGeojson(response.data.geojson,layer,epsg,baseStyles["labelStyle"],"label"); |
|
837 |
- |
|
838 |
- // 마지막 시간 데이터 생성 |
|
839 |
- vm.condition.currentTimestamp = response.data.realTimeEvent.currentTimestamp; |
|
750 |
+ data: { |
|
751 |
+ "dong_cd": vm.address.dong_cd |
|
752 |
+ , "start_dt": vm.condition.date + ' ' + vm.condition.start_time |
|
753 |
+ , "end_dt": vm.condition.date + ' ' + vm.condition.end_time |
|
754 |
+ , "layer": layer |
|
755 |
+ , "signExtn": vm.condition.signExtn |
|
756 |
+ , "wtrms": vm.condition.wtrms |
|
757 |
+ , "rittrnVhcle": vm.condition.rittrnVhcle |
|
758 |
+ , "eqpmnTrobl": vm.condition.eqpmnTrobl |
|
759 |
+ , "currentTimestamp": vm.condition.currentTimestamp |
|
760 |
+ }, |
|
761 |
+ }).then(function (response) { |
|
762 |
+ vm.statusControlCountList = response.data.totalCount; |
|
763 |
+ vm.$refs.open_layers.removeAddLayerAll(); |
|
764 |
+ vm.$refs.open_layers.addLayerByGeojson(response.data.geojson, layer, epsg, baseStyles["labelStyle"], "label"); |
|
840 | 765 |
|
841 |
- // 이벤트 리스트 등록 |
|
842 |
- vm.realTimeEventList = response.data.realTimeEvent.RealTimeEventList; |
|
766 |
+ // 마지막 시간 데이터 생성 |
|
767 |
+ vm.condition.currentTimestamp = response.data.realTimeEvent.currentTimestamp; |
|
843 | 768 |
|
844 |
- // console.log( ' vm.realTimeEventList',vm.realTimeEventList) |
|
845 |
- |
|
846 |
- // 실시간 이벤트 발생여부 체크 |
|
847 |
- if(vm.realTimeEventList.length > 0){ |
|
848 |
- vm.popupStatus = Object.assign({}, vm.realTimeEventList[0]); |
|
849 |
- vm.address.node_id = vm.popupStatus.node_id; |
|
850 |
- vm.statusSearch(true); |
|
851 |
- vm.eventFlage = true; |
|
852 |
- vm.showPopup(); |
|
853 |
- } |
|
854 |
- // 차트 데이터 생성 |
|
855 |
- vm.drawChars(response.data.countList); |
|
856 |
- }).catch(function (error) { |
|
857 |
- console.log("error : ", error); |
|
858 |
- }).finally(function () { |
|
859 |
- // 항상 실행되는 영역 |
|
860 |
- if(vm.address.guGun_dong_cd == null){ |
|
861 |
- layer = 'sigungu'; |
|
862 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json","multiPolygonLayer","EPSG:5181",baseStyles["MultiPolygon"],"MultiPolygon",pointAnim,vm.address.dong_cd); |
|
863 |
- }else if(vm.address.node_id != null){ |
|
864 |
- layer = 'crslk'; |
|
769 |
+ // 이벤트 리스트 등록 |
|
770 |
+ vm.realTimeEventList = response.data.realTimeEvent.RealTimeEventList; |
|
771 |
+ |
|
772 |
+ // console.log( ' vm.realTimeEventList',vm.realTimeEventList) |
|
773 |
+ |
|
774 |
+ // 실시간 이벤트 발생여부 체크 |
|
775 |
+ if (vm.realTimeEventList.length > 0) { |
|
776 |
+ vm.popupStatus = Object.assign({}, vm.realTimeEventList[0]); |
|
777 |
+ vm.address.node_id = vm.popupStatus.node_id; |
|
778 |
+ vm.statusSearch(true); |
|
779 |
+ vm.eventFlage = true; |
|
780 |
+ vm.showPopup(); |
|
781 |
+ } |
|
782 |
+ // 차트 데이터 생성 |
|
783 |
+ vm.drawChars(response.data.countList); |
|
784 |
+ }).catch(function (error) { |
|
785 |
+ console.log("error : ", error); |
|
786 |
+ }).finally(function () { |
|
787 |
+ // 항상 실행되는 영역 |
|
788 |
+ if (vm.address.guGun_dong_cd == null) { |
|
789 |
+ layer = 'sigungu'; |
|
790 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); |
|
791 |
+ } else if (vm.address.node_id != null) { |
|
792 |
+ layer = 'crslk'; |
|
865 | 793 |
// epsg = "EPSG:4326"; |
866 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getNodeGeoJson.json", "multiPolygonLayer", "EPSG:4326", baseStyles["MultiPolygon"], "MultiPolygon",pointAnim, vm.address.dong_cd, vm.address.node_id ); |
|
867 |
- }else if(vm.address.dong_dong_cd != null){ |
|
868 |
- layer = 'node'; |
|
869 |
- epsg = "EPSG:4326"; |
|
870 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongGeoJson.json","multiPolygonLayer","EPSG:5181",baseStyles["MultiPolygon"],"MultiPolygon",pointAnim,vm.address.dong_cd); |
|
871 |
- }else{ |
|
872 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json","multiPolygonLayer","EPSG:5181",baseStyles["MultiPolygon"],"MultiPolygon",pointAnim,vm.address.dong_cd); |
|
873 |
- } |
|
874 |
- });; |
|
794 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getNodeGeoJson.json", "multiPolygonLayer", "EPSG:4326", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd, vm.address.node_id); |
|
795 |
+ } else if (vm.address.dong_dong_cd != null) { |
|
796 |
+ layer = 'node'; |
|
797 |
+ epsg = "EPSG:4326"; |
|
798 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); |
|
799 |
+ } else { |
|
800 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); |
|
801 |
+ } |
|
802 |
+ });; |
|
875 | 803 |
}, |
876 |
- |
|
804 |
+ |
|
877 | 805 |
// 서치 버튼 클릭 |
878 | 806 |
statusSearch: function (pointAnim) { |
879 | 807 |
var vm = this; |
880 | 808 |
|
881 | 809 |
|
882 | 810 |
// 검색 버튼 클릭 |
883 |
- if(pointAnim == true){ |
|
884 |
- if(this.$refs.open_layers.map.getOverlayById('multiPopup') != null){ |
|
885 |
- this.$refs.open_layers.map.removeOverlay(this.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
886 |
- vm.timer = setInterval(()=>{ |
|
887 |
- vm.statusSearch(false); |
|
888 |
- },5000) |
|
889 |
- } |
|
890 |
- // 자동 처리 |
|
891 |
- }else{ |
|
892 |
- if(this.$refs.open_layers.map.getOverlayById('multiPopup') != null){ |
|
893 |
- return false; |
|
894 |
- } |
|
895 |
- } |
|
811 |
+ if (pointAnim == true) { |
|
812 |
+ if (this.$refs.open_layers.map.getOverlayById('multiPopup') != null) { |
|
813 |
+ this.$refs.open_layers.map.removeOverlay(this.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
814 |
+ vm.timer = setInterval(() => { |
|
815 |
+ vm.statusSearch(false); |
|
816 |
+ }, 5000) |
|
817 |
+ } |
|
818 |
+ // 자동 처리 |
|
819 |
+ } else { |
|
820 |
+ if (this.$refs.open_layers.map.getOverlayById('multiPopup') != null) { |
|
821 |
+ return false; |
|
822 |
+ } |
|
823 |
+ } |
|
896 | 824 |
// 이벤트 발생시 다시 제자리로 |
897 |
- if(this.eventFlage == true){ |
|
825 |
+ if (this.eventFlage == true) { |
|
898 | 826 |
this.isPopupVisible = false; |
899 |
- this.eventFlage = false; |
|
900 |
- this.address.node_id = null; |
|
901 |
- pointAnim = true; |
|
827 |
+ this.eventFlage = false; |
|
828 |
+ this.address.node_id = null; |
|
829 |
+ pointAnim = true; |
|
902 | 830 |
} |
903 | 831 |
|
904 |
- if(pointAnim == null){ |
|
832 |
+ if (pointAnim == null) { |
|
905 | 833 |
pointAnim = true; |
906 | 834 |
} |
907 | 835 |
|
908 | 836 |
//지도 영역 수정 |
909 |
- this.getStatusData(pointAnim); |
|
910 |
- |
|
837 |
+ this.getStatusData(pointAnim); |
|
838 |
+ |
|
911 | 839 |
this.situationOccurrenceStatusSearch(); |
912 | 840 |
this.troubleOccurrenceStatusSearch(); |
913 | 841 |
}, |
914 | 842 |
|
915 | 843 |
// 차트 그리기 |
916 |
- drawChars : function(data){ |
|
844 |
+ drawChars: function (data) { |
|
917 | 845 |
|
918 | 846 |
// 횡단보도별 무단횡단 차트 정보 |
919 |
- var wtrmsCount = data.sort(function(a, b) { |
|
847 |
+ var wtrmsCount = data.sort(function (a, b) { |
|
920 | 848 |
return b.wtrmsCount - a.wtrmsCount; |
921 | 849 |
}); |
922 |
- wtrmsCount = wtrmsCount.slice(0,10); |
|
850 |
+ wtrmsCount = wtrmsCount.slice(0, 10); |
|
923 | 851 |
|
924 | 852 |
// 신호연장 차트 정보 |
925 |
- var signExtnCount = data.sort(function(a, b) { |
|
853 |
+ var signExtnCount = data.sort(function (a, b) { |
|
926 | 854 |
return b.signExtnCount - a.signExtnCount; |
927 | 855 |
}); |
928 |
- signExtnCount = signExtnCount.slice(0,10); |
|
856 |
+ signExtnCount = signExtnCount.slice(0, 10); |
|
929 | 857 |
|
930 | 858 |
// 우회전 위반 차트 정보 |
931 |
- var rittrnVioltVhcleCount = data.sort(function(a, b) { |
|
859 |
+ var rittrnVioltVhcleCount = data.sort(function (a, b) { |
|
932 | 860 |
return b.rittrnVioltVhcleCount - a.rittrnVioltVhcleCount; |
933 | 861 |
}); |
934 |
- rittrnVioltVhcleCount = rittrnVioltVhcleCount.slice(0,5); |
|
862 |
+ rittrnVioltVhcleCount = rittrnVioltVhcleCount.slice(0, 5); |
|
935 | 863 |
|
936 | 864 |
// 장애발생 차트 정보 |
937 |
- var troblOcrnCount = data.sort(function(a, b) { |
|
865 |
+ var troblOcrnCount = data.sort(function (a, b) { |
|
938 | 866 |
return b.troblOcrnCount - a.troblOcrnCount; |
939 | 867 |
}); |
940 |
- troblOcrnCount = troblOcrnCount.slice(0,5); |
|
941 |
- |
|
868 |
+ troblOcrnCount = troblOcrnCount.slice(0, 5); |
|
869 |
+ |
|
942 | 870 |
// 차트 생성 |
943 |
- if(this.chart1.xAxis == null){ |
|
944 |
- this.chart1 = COMMON_CHART.createChartByIds("chartdiv1",this.chart1, wtrmsCount,"wtrmsCount","crslk_nm"); |
|
945 |
- this.chart2 = COMMON_CHART.createChartByIds("chartdiv2",this.chart2, signExtnCount,"signExtnCount","crslk_nm"); |
|
946 |
- this.chart3 = COMMON_CHART.createChartByIds("chartdiv3",this.chart3, rittrnVioltVhcleCount,"rittrnVioltVhcleCount","crslk_nm"); |
|
947 |
- this.chart4 = COMMON_CHART.createChartByIds("chartdiv4",this.chart4, troblOcrnCount,"troblOcrnCount","crslk_nm"); |
|
948 |
- }else{ |
|
949 |
- // 데이터 변경 |
|
871 |
+ if (this.chart1.xAxis == null) { |
|
872 |
+ this.chart1 = COMMON_CHART.createChartByIds("chartdiv1", this.chart1, wtrmsCount, "wtrmsCount", "crslk_nm"); |
|
873 |
+ this.chart2 = COMMON_CHART.createChartByIds("chartdiv2", this.chart2, signExtnCount, "signExtnCount", "crslk_nm"); |
|
874 |
+ this.chart3 = COMMON_CHART.createChartByIds("chartdiv3", this.chart3, rittrnVioltVhcleCount, "rittrnVioltVhcleCount", "crslk_nm"); |
|
875 |
+ this.chart4 = COMMON_CHART.createChartByIds("chartdiv4", this.chart4, troblOcrnCount, "troblOcrnCount", "crslk_nm"); |
|
876 |
+ } else { |
|
877 |
+ // 데이터 변경 |
|
950 | 878 |
this.chart1.xAxis.data.setAll(wtrmsCount); |
951 | 879 |
this.chart1.series.data.setAll(wtrmsCount); |
952 | 880 |
this.chart2.xAxis.data.setAll(signExtnCount); |
... | ... | @@ -955,7 +883,7 @@ |
955 | 883 |
this.chart3.series.data.setAll(rittrnVioltVhcleCount); |
956 | 884 |
this.chart4.xAxis.data.setAll(troblOcrnCount); |
957 | 885 |
this.chart4.series.data.setAll(troblOcrnCount); |
958 |
- } |
|
886 |
+ } |
|
959 | 887 |
}, |
960 | 888 |
|
961 | 889 |
//상황 발행 현황 검색 |
... | ... | @@ -968,16 +896,16 @@ |
968 | 896 |
headers: { |
969 | 897 |
"Content-Type": "application/json; charset=UTF-8", |
970 | 898 |
}, |
971 |
- data: { "dong_cd": vm.address.dong_cd, "start_dt": vm.condition.date + ' ' + vm.condition.start_time , "end_dt" : vm.condition.date + ' ' + vm.condition.end_time , "layer" : layer}, |
|
972 |
- // data: vm.address , |
|
899 |
+ data: { "dong_cd": vm.address.dong_cd, "start_dt": vm.condition.date + ' ' + vm.condition.start_time, "end_dt": vm.condition.date + ' ' + vm.condition.end_time, "layer": layer }, |
|
900 |
+ // data: vm.address , |
|
973 | 901 |
}) |
974 |
- .then(function (response) { |
|
902 |
+ .then(function (response) { |
|
975 | 903 |
vm.statusControlCountList = response.data; |
976 | 904 |
}) |
977 |
- .catch(function (error) { |
|
905 |
+ .catch(function (error) { |
|
978 | 906 |
}); |
979 | 907 |
}, |
980 |
- |
|
908 |
+ |
|
981 | 909 |
//상황 발행 현황 검색 |
982 | 910 |
eventSelectByRegion: function () { |
983 | 911 |
//검색 데이터 |
... | ... | @@ -988,36 +916,36 @@ |
988 | 916 |
headers: { |
989 | 917 |
"Content-Type": "application/json; charset=UTF-8", |
990 | 918 |
}, |
991 |
- data: vm.address , |
|
919 |
+ data: vm.address, |
|
992 | 920 |
}) |
993 |
- .then(function (response) { |
|
921 |
+ .then(function (response) { |
|
994 | 922 |
vm.chartData.wtrms = response.data.wtrms; |
995 | 923 |
vm.chartData.signExtn = response.data.signExtn; |
996 | 924 |
vm.chartData.rittrnVioltVhcle = response.data.rittrnVioltVhcle; |
997 |
- vm.chartData.troblOcrn = response.data.troblOcrn; |
|
925 |
+ vm.chartData.troblOcrn = response.data.troblOcrn; |
|
998 | 926 |
}) |
999 | 927 |
.catch(function (error) { |
1000 | 928 |
console.log("eventSelectByRegion - error : ", error); |
1001 | 929 |
}); |
1002 | 930 |
}, |
1003 |
- |
|
931 |
+ |
|
1004 | 932 |
//실시간 발생 현황 - 상황 발행 현황 검색 |
1005 | 933 |
situationOccurrenceStatusSearch: function () { |
1006 | 934 |
//검색 데이터 |
1007 | 935 |
const vm = this; |
1008 |
- vm.situationOccurrenceStatusListSearch.condition=vm.condition; |
|
1009 |
- vm.situationOccurrenceStatusListSearch.address=vm.address; |
|
936 |
+ vm.situationOccurrenceStatusListSearch.condition = vm.condition; |
|
937 |
+ vm.situationOccurrenceStatusListSearch.address = vm.address; |
|
1010 | 938 |
axios({ |
1011 | 939 |
url: "/statusControl/situationOccurrenceStatusSearch.json", |
1012 | 940 |
method: "post", |
1013 | 941 |
headers: { |
1014 | 942 |
"Content-Type": "application/json; charset=UTF-8", |
1015 | 943 |
}, |
1016 |
- data: vm.situationOccurrenceStatusListSearch , |
|
944 |
+ data: vm.situationOccurrenceStatusListSearch, |
|
1017 | 945 |
}) |
1018 |
- .then(function (response) { |
|
946 |
+ .then(function (response) { |
|
1019 | 947 |
vm.situationOccurrenceStatusList = response.data.situationOccurrenceStatusList; |
1020 |
- vm.situationOccurrenceStatusListCount = response.data.situationOccurrenceStatusListCount; |
|
948 |
+ vm.situationOccurrenceStatusListCount = response.data.situationOccurrenceStatusListCount; |
|
1021 | 949 |
}) |
1022 | 950 |
.catch(function (error) { |
1023 | 951 |
console.log("statusSearch - error : ", error); |
... | ... | @@ -1034,11 +962,11 @@ |
1034 | 962 |
headers: { |
1035 | 963 |
"Content-Type": "application/json; charset=UTF-8", |
1036 | 964 |
}, |
1037 |
- data: vm.troubleOccurrenceStatusListSearch , |
|
965 |
+ data: vm.troubleOccurrenceStatusListSearch, |
|
1038 | 966 |
}) |
1039 |
- .then(function (response) { |
|
967 |
+ .then(function (response) { |
|
1040 | 968 |
vm.troubleOccurrenceStatusList = response.data.troubleOccurrenceStatusList; |
1041 |
- vm.troubleOccurrenceStatusListCount = response.data.troubleOccurrenceStatusListCount; |
|
969 |
+ vm.troubleOccurrenceStatusListCount = response.data.troubleOccurrenceStatusListCount; |
|
1042 | 970 |
}) |
1043 | 971 |
.catch(function (error) { |
1044 | 972 |
console.log("statusSearch - error : ", error); |
... | ... | @@ -1046,51 +974,51 @@ |
1046 | 974 |
}, |
1047 | 975 |
|
1048 | 976 |
// 이벤트 발생 상세정보 조회(클릭 이벤트) |
1049 |
- eventSelectList: function() { |
|
977 |
+ eventSelectList: function () { |
|
1050 | 978 |
const vm = this; |
1051 | 979 |
axios({ |
1052 |
- url: "/statusControl/eventSelectList.json", |
|
1053 |
- method: "post", |
|
1054 |
- headers: { |
|
1055 |
- "Content-Type": "application/json; charset=UTF-8", |
|
1056 |
- }, |
|
1057 |
- data: vm.eventListSearch, |
|
1058 |
- }) |
|
1059 |
- .then(function(response) { |
|
1060 |
- vm.eventListCount = response.data.eventListCount; |
|
1061 |
- vm.eventList = response.data.eventList; |
|
1062 |
- vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
980 |
+ url: "/statusControl/eventSelectList.json", |
|
981 |
+ method: "post", |
|
982 |
+ headers: { |
|
983 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
984 |
+ }, |
|
985 |
+ data: vm.eventListSearch, |
|
1063 | 986 |
}) |
1064 |
- .catch(function(error) { |
|
1065 |
- console.log("errorSelectList - error : ", error); |
|
1066 |
- alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
1067 |
- }); |
|
987 |
+ .then(function (response) { |
|
988 |
+ vm.eventListCount = response.data.eventListCount; |
|
989 |
+ vm.eventList = response.data.eventList; |
|
990 |
+ vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
991 |
+ }) |
|
992 |
+ .catch(function (error) { |
|
993 |
+ console.log("errorSelectList - error : ", error); |
|
994 |
+ alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
995 |
+ }); |
|
1068 | 996 |
}, |
1069 |
- |
|
997 |
+ |
|
1070 | 998 |
|
1071 | 999 |
// 날짜 초기화 |
1072 |
- initialDate(){ |
|
1073 |
- this.condition.date = COMMON_UTIL.today(); |
|
1000 |
+ initialDate() { |
|
1001 |
+ this.condition.date = COMMON_UTIL.today(); |
|
1074 | 1002 |
this.condition.start_time = "00:00"; |
1075 | 1003 |
this.condition.end_time = "23:59"; |
1076 | 1004 |
|
1077 |
- this.eventListSearch.sigungu_cd = this.address.guGun_dong_cd; |
|
1005 |
+ this.eventListSearch.sigungu_cd = this.address.guGun_dong_cd; |
|
1078 | 1006 |
this.eventListSearch.dong_cd = this.address.dong_cd; |
1079 |
- this.eventListSearch.dong_dong_cd = this.address.node_id; |
|
1007 |
+ this.eventListSearch.dong_dong_cd = this.address.node_id; |
|
1080 | 1008 |
this.eventListSearch.node_id = this.address.node_id; |
1081 | 1009 |
}, |
1082 | 1010 |
|
1083 |
- init(){ |
|
1011 |
+ init() { |
|
1084 | 1012 |
this.statusControlCount(); |
1085 | 1013 |
this.eventSelectByRegion(); |
1086 | 1014 |
const clusterLayerExists = this.$refs.open_layers.map.getLayers().getArray().some(layer => { |
1087 | 1015 |
return layer.get('name') === "clusterLayer"; |
1088 |
- }); |
|
1016 |
+ }); |
|
1089 | 1017 |
|
1090 |
- if(clusterLayerExists){ |
|
1091 |
- this.$refs.open_layers.addClusterLayerByUrl( "/common/getNodeGeoJsonForWtrmsCrosngStatusControl.json", "clusterLayer", "EPSG:5181", baseStyles["clusterStyle"], "clusterStyle", this.address.dong_cd ); |
|
1018 |
+ if (clusterLayerExists) { |
|
1019 |
+ this.$refs.open_layers.addClusterLayerByUrl("/common/getNodeGeoJsonForWtrmsCrosngStatusControl.json", "clusterLayer", "EPSG:5181", baseStyles["clusterStyle"], "clusterStyle", this.address.dong_cd); |
|
1092 | 1020 |
} |
1093 |
- |
|
1021 |
+ |
|
1094 | 1022 |
this.$refs.open_layers.addVectorLayerByUrl('/common/getCrslksGeoJson.json', 'crslkLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd, this.address.node_id); |
1095 | 1023 |
|
1096 | 1024 |
this.situationOccurrenceStatusSearch(); |
... | ... | @@ -1098,29 +1026,29 @@ |
1098 | 1026 |
}, |
1099 | 1027 |
|
1100 | 1028 |
}, |
1101 |
- watch: { |
|
1102 |
- "condition.date" : function(newValue,oldValue){ |
|
1103 |
- |
|
1029 |
+ watch: { |
|
1030 |
+ "condition.date": function (newValue, oldValue) { |
|
1031 |
+ |
|
1104 | 1032 |
}, |
1105 |
- "condition.start_time" : function(newValue,oldValue){ |
|
1106 |
- |
|
1033 |
+ "condition.start_time": function (newValue, oldValue) { |
|
1034 |
+ |
|
1107 | 1035 |
}, |
1108 |
- "condition.end_time" : function(newValue,oldValue){ |
|
1109 |
- |
|
1036 |
+ "condition.end_time": function (newValue, oldValue) { |
|
1037 |
+ |
|
1110 | 1038 |
}, |
1111 |
- "now_zoom": function (newValue, oldValue) { |
|
1039 |
+ "now_zoom": function (newValue, oldValue) { |
|
1112 | 1040 |
}, |
1113 |
- "chartData.wtrms":function (newValue, oldValue) { |
|
1041 |
+ "chartData.wtrms": function (newValue, oldValue) { |
|
1114 | 1042 |
COMMON_CHART.createChartById("chartdiv1", this.chart1, newValue); |
1115 | 1043 |
}, |
1116 |
- "chartData.signExtn":function (newValue, oldValue) { |
|
1117 |
- COMMON_CHART.createChartById("chartdiv2",this.chart2, newValue); |
|
1044 |
+ "chartData.signExtn": function (newValue, oldValue) { |
|
1045 |
+ COMMON_CHART.createChartById("chartdiv2", this.chart2, newValue); |
|
1118 | 1046 |
}, |
1119 |
- "chartData.rittrnVioltVhcle":function (newValue, oldValue) { |
|
1047 |
+ "chartData.rittrnVioltVhcle": function (newValue, oldValue) { |
|
1120 | 1048 |
COMMON_CHART.createChartById("chartdiv3", this.chart3, newValue); |
1121 | 1049 |
}, |
1122 |
- "chartData.troblOcrn":function (newValue, oldValue) { |
|
1123 |
- COMMON_CHART.createChartById("chartdiv4", this.chart4,newValue); |
|
1050 |
+ "chartData.troblOcrn": function (newValue, oldValue) { |
|
1051 |
+ COMMON_CHART.createChartById("chartdiv4", this.chart4, newValue); |
|
1124 | 1052 |
}, |
1125 | 1053 |
}, |
1126 | 1054 |
computed: {}, |
... | ... | @@ -1135,11 +1063,11 @@ |
1135 | 1063 |
var vm = this; |
1136 | 1064 |
this.initialDate(); |
1137 | 1065 |
this.$refs.open_layers.setBaseMap(vworldBaseLayer); |
1138 |
- this.$refs.dongSelecter.default_select(false,true,'22','22030'); |
|
1066 |
+ this.$refs.dongSelecter.default_select(false, true, '22', '22030'); |
|
1139 | 1067 |
this.statusSearch(); |
1140 |
- this.timer = setInterval(()=>{ |
|
1141 |
- this.statusSearch(false); |
|
1142 |
- },5000) |
|
1068 |
+ this.timer = setInterval(() => { |
|
1069 |
+ this.statusSearch(false); |
|
1070 |
+ }, 5000) |
|
1143 | 1071 |
}, |
1144 | 1072 |
}; |
1145 | 1073 |
</script> |
... | ... | @@ -1149,9 +1077,11 @@ |
1149 | 1077 |
.top h3 { |
1150 | 1078 |
font-size: 15px !important; |
1151 | 1079 |
} |
1080 |
+ |
|
1152 | 1081 |
.top p { |
1153 | 1082 |
padding-right: 1rem; |
1154 | 1083 |
} |
1084 |
+ |
|
1155 | 1085 |
.chart { |
1156 | 1086 |
width: -webkit-fill-available !important; |
1157 | 1087 |
} |
... | ... | @@ -1159,19 +1089,23 @@ |
1159 | 1089 |
.top { |
1160 | 1090 |
overflow: scroll; |
1161 | 1091 |
} |
1092 |
+ |
|
1162 | 1093 |
.top ul { |
1163 | 1094 |
width: 137rem; |
1164 | 1095 |
overflow: hidden; |
1165 | 1096 |
justify-content: space-between !important; |
1166 | 1097 |
padding: 2rem 1rem !important; |
1167 | 1098 |
} |
1099 |
+ |
|
1168 | 1100 |
.top li { |
1169 | 1101 |
display: flex; |
1170 | 1102 |
align-items: center; |
1171 | 1103 |
} |
1104 |
+ |
|
1172 | 1105 |
.search { |
1173 | 1106 |
width: inherit; |
1174 | 1107 |
} |
1108 |
+ |
|
1175 | 1109 |
.toggle { |
1176 | 1110 |
color: #fff; |
1177 | 1111 |
font-weight: bold; |
... | ... | @@ -1182,11 +1116,13 @@ |
1182 | 1116 |
top: 7.2rem; |
1183 | 1117 |
right: 1rem; |
1184 | 1118 |
} |
1119 |
+ |
|
1185 | 1120 |
.wrap { |
1186 | 1121 |
height: auto !important; |
1187 | 1122 |
width: inherit; |
1188 | 1123 |
margin: 0 !important; |
1189 | 1124 |
} |
1125 |
+ |
|
1190 | 1126 |
.slide-content { |
1191 | 1127 |
position: absolute; |
1192 | 1128 |
z-index: 97; |
... | ... | @@ -1203,21 +1139,31 @@ |
1203 | 1139 |
transform: translateX(0); |
1204 | 1140 |
} |
1205 | 1141 |
} |
1206 |
-.search label{line-height: 3rem;} |
|
1142 |
+ |
|
1143 |
+.search label { |
|
1144 |
+ line-height: 3rem; |
|
1145 |
+} |
|
1146 |
+ |
|
1207 | 1147 |
.tab-buttons .ulbox { |
1208 | 1148 |
height: calc(100% - 11rem); |
1209 | 1149 |
overflow: scroll; |
1210 | 1150 |
overflow-x: hidden; |
1211 | 1151 |
} |
1152 |
+ |
|
1212 | 1153 |
.ulbox ul { |
1213 | 1154 |
height: 30rem; |
1214 | 1155 |
} |
1215 |
-.ulbox ul li p{font-size: 13px;} |
|
1156 |
+ |
|
1157 |
+.ulbox ul li p { |
|
1158 |
+ font-size: 13px; |
|
1159 |
+} |
|
1160 |
+ |
|
1216 | 1161 |
.popup-btn { |
1217 | 1162 |
position: absolute; |
1218 | 1163 |
bottom: 3rem; |
1219 | 1164 |
right: 28%; |
1220 | 1165 |
} |
1166 |
+ |
|
1221 | 1167 |
.popup-container { |
1222 | 1168 |
position: fixed; |
1223 | 1169 |
top: 0; |
... | ... | @@ -1241,26 +1187,33 @@ |
1241 | 1187 |
border-radius: 5px; |
1242 | 1188 |
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); |
1243 | 1189 |
} |
1190 |
+ |
|
1244 | 1191 |
.popup-content ul { |
1245 | 1192 |
padding: 2rem 0; |
1246 | 1193 |
} |
1194 |
+ |
|
1247 | 1195 |
.popup-content ul li { |
1248 | 1196 |
font-size: 16px; |
1249 | 1197 |
} |
1198 |
+ |
|
1250 | 1199 |
.popup-content h2 { |
1251 | 1200 |
margin-top: 0; |
1252 | 1201 |
font-size: 2.5rem; |
1253 | 1202 |
color: #bf1a21; |
1254 | 1203 |
} |
1204 |
+ |
|
1255 | 1205 |
.toggle { |
1256 | 1206 |
display: none; |
1257 | 1207 |
} |
1258 |
-.chart > div { |
|
1208 |
+ |
|
1209 |
+.chart>div { |
|
1259 | 1210 |
height: 100%; |
1260 | 1211 |
} |
1212 |
+ |
|
1261 | 1213 |
.chart .box { |
1262 | 1214 |
height: 85%; |
1263 | 1215 |
} |
1216 |
+ |
|
1264 | 1217 |
.chart { |
1265 | 1218 |
width: 20%; |
1266 | 1219 |
height: 85%; |
... | ... | @@ -1268,25 +1221,31 @@ |
1268 | 1221 |
right: 2rem; |
1269 | 1222 |
top: 10rem; |
1270 | 1223 |
} |
1224 |
+ |
|
1271 | 1225 |
.chart h2 { |
1272 | 1226 |
border-radius: 10px 10px 0 0; |
1273 | 1227 |
} |
1228 |
+ |
|
1274 | 1229 |
.search .box ul li { |
1275 | 1230 |
text-align: left; |
1276 | 1231 |
} |
1232 |
+ |
|
1277 | 1233 |
.search .box button { |
1278 | 1234 |
font-size: 1.3rem; |
1279 | 1235 |
padding: 0.5rem 1.3rem; |
1280 | 1236 |
} |
1237 |
+ |
|
1281 | 1238 |
.search .box button.gray-btn.active { |
1282 | 1239 |
/* Your CSS styles for the button when it's active (clicked) */ |
1283 | 1240 |
background-color: #13833b; |
1284 | 1241 |
color: #fff; |
1285 | 1242 |
/* Add any other styles you want to apply when the button is active */ |
1286 | 1243 |
} |
1244 |
+ |
|
1287 | 1245 |
.search .box button img { |
1288 | 1246 |
width: 20px; |
1289 | 1247 |
} |
1248 |
+ |
|
1290 | 1249 |
.btn_set { |
1291 | 1250 |
position: relative; |
1292 | 1251 |
border-bottom: 1px solid #e5e3e3; |
... | ... | @@ -1326,6 +1285,7 @@ |
1326 | 1285 |
/* width: -webkit-fill-available; */ |
1327 | 1286 |
height: 86px !important; |
1328 | 1287 |
} |
1288 |
+ |
|
1329 | 1289 |
.top p { |
1330 | 1290 |
font-size: 15px; |
1331 | 1291 |
} |
... | ... | @@ -1364,6 +1324,7 @@ |
1364 | 1324 |
position: relative; |
1365 | 1325 |
height: 100%; |
1366 | 1326 |
} |
1327 |
+ |
|
1367 | 1328 |
.map { |
1368 | 1329 |
width: 100%; |
1369 | 1330 |
height: calc(100% - 86px); |
--- client/views/pages/RealtimeStatus/mRealtimeStatus.vue
+++ client/views/pages/RealtimeStatus/mRealtimeStatus.vue
... | ... | @@ -1,54 +1,36 @@ |
1 | 1 |
<template> |
2 |
- <button @click="toggleSlide" class="toggle">{{ slideText }}</button> |
|
3 | 2 |
<div class="grid2_8"> |
4 | 3 |
<div :class="['slide-content left', { active: showSlide }]"> |
5 | 4 |
<div class="wrap flex-between"> |
6 | 5 |
<div class="search"> |
7 |
- <h2>조건검색</h2> |
|
8 |
- <div class="box grid gap05 bg-gray"> |
|
9 |
- <div class="titleBar"> |
|
10 |
- <h3>지역설정</h3> |
|
11 |
- <hr /> |
|
6 |
+ <div class="search-mobile" v-if="currentSection === 'search-mobile'"> |
|
7 |
+ <h2>조건검색</h2> |
|
8 |
+ <div class="box grid gap05 bg-gray"> |
|
9 |
+ <div class="titleBar"> |
|
10 |
+ <h3>지역설정</h3> |
|
11 |
+ <hr /> |
|
12 |
+ </div> |
|
13 |
+ <DongSelectList @setDongCd="setDongCd" :crslk_azHiddenCk="true" :open_layers="this.$refs.open_layers" |
|
14 |
+ @siDoGunGuSelectF="dongSelectF" @dongSelectF="dongSelectF" @nodeSelectF="dongSelectF" ref="dongSelecter"> |
|
15 |
+ </DongSelectList> |
|
12 | 16 |
</div> |
13 |
- <DongSelectList |
|
14 |
- @setDongCd="setDongCd" |
|
15 |
- :crslk_azHiddenCk="true" |
|
16 |
- :open_layers="this.$refs.open_layers" |
|
17 |
- @siDoGunGuSelectF="dongSelectF" |
|
18 |
- @dongSelectF="dongSelectF" |
|
19 |
- @nodeSelectF="dongSelectF" |
|
20 |
- ref="dongSelecter" |
|
21 |
- ></DongSelectList> |
|
22 |
- </div> |
|
23 |
- <div class="box"> |
|
24 |
- <div class="titleBar"> |
|
25 |
- <h3>조건 설정</h3> |
|
26 |
- <hr /> |
|
27 |
- </div> |
|
17 |
+ <div class="box"> |
|
18 |
+ <div class="titleBar"> |
|
19 |
+ <h3>조건 설정</h3> |
|
20 |
+ <hr /> |
|
21 |
+ </div> |
|
28 | 22 |
|
29 |
- <div class="flex-between m-b"> |
|
30 |
- <input |
|
31 |
- class="m-r cbox_1" |
|
32 |
- type="checkbox" |
|
33 |
- v-model="condition['wtrms']" |
|
34 |
- /><label for="">무단횡단</label> |
|
35 |
- <input |
|
36 |
- class="m-r cbox_1" |
|
37 |
- type="checkbox" |
|
38 |
- v-model="condition['signExtn']" |
|
39 |
- /><label for="">신호연장</label> |
|
40 |
- <input |
|
41 |
- class="m-r cbox_1" |
|
42 |
- type="checkbox" |
|
43 |
- v-model="condition['rittrnVhcle']" |
|
44 |
- /><label for="">신호위반</label> |
|
45 |
- <input |
|
46 |
- class="m-r cbox_1" |
|
47 |
- type="checkbox" |
|
48 |
- v-model="condition['eqpmnTrobl']" |
|
49 |
- /><label for="">장애발생</label> |
|
50 |
- </div> |
|
51 |
- <!-- |
|
23 |
+ <div class="flex-between m-b"> |
|
24 |
+ <div><input class="m-r cbox_1" type="checkbox" v-model="condition['wtrms']" /><label for="">무단횡단</label> |
|
25 |
+ </div> |
|
26 |
+ <div><input class="m-r cbox_1" type="checkbox" v-model="condition['signExtn']" /><label |
|
27 |
+ for="">신호연장</label></div> |
|
28 |
+ <div><input class="m-r cbox_1" type="checkbox" v-model="condition['rittrnVhcle']" /><label |
|
29 |
+ for="">신호위반</label></div> |
|
30 |
+ <div><input class="m-r cbox_1" type="checkbox" v-model="condition['eqpmnTrobl']" /><label |
|
31 |
+ for="">장애발생</label></div> |
|
32 |
+ </div> |
|
33 |
+ <!-- |
|
52 | 34 |
<div class="grid3_7 m-b"> |
53 | 35 |
<label for="date-input">일자</label> |
54 | 36 |
<input class="date-input" id="date-input" type="date" v-model="condition['date']" /> |
... | ... | @@ -69,186 +51,149 @@ |
69 | 51 |
/> |
70 | 52 |
</div> |
71 | 53 |
</div> --> |
72 |
- <button |
|
73 |
- class="btn-l gr-btn search-btn" |
|
74 |
- @click="statusSearch()" |
|
75 |
- style="padding: 0.5rem 0" |
|
76 |
- > |
|
77 |
- 검색하기 |
|
78 |
- </button> |
|
79 |
- </div> |
|
80 |
- <h2>실시간 발생 현황</h2> |
|
81 |
- <div class="box bg-white tab-buttons" style="height: calc(100% - 50rem)"> |
|
82 |
- <div class="btn_set flex-center gap"> |
|
83 |
- <button |
|
84 |
- class="m-r flex-between gray-btn" |
|
85 |
- v-for="tab in tabs" |
|
86 |
- :key="tab.id" |
|
87 |
- :class="{ active: activeTab === tab.id }" |
|
88 |
- @click="changeTab(tab.id)" |
|
89 |
- > |
|
90 |
- {{ tab.title }} |
|
91 |
- <img v-if="tab.id===2 && troubleOccurrenceStatusList.length > 0" src="../../../resources/images/warning.png" alt="" /> |
|
54 |
+ <button class="btn-l gr-btn search-btn" @click="statusSearch()" style="padding: 0.5rem 0"> |
|
55 |
+ 검색하기 |
|
92 | 56 |
</button> |
93 | 57 |
</div> |
94 |
- <div class="ulbox"> |
|
95 |
- <div |
|
96 |
- class="tab-content" |
|
97 |
- v-for="tab in tabs" |
|
98 |
- :key="tab.id" |
|
99 |
- v-show="activeTab === tab.id" |
|
100 |
- > |
|
101 |
- <ul v-show="tab.content1" > |
|
102 |
- <li v-for="(item, idx) in situationOccurrenceStatusList" :key="idx"> |
|
103 |
- <p class="" style="color: #9bbb8d; ">상황명: {{item.sn}}</p> |
|
104 |
- <p class="" style="color: #474747; font-size: 14px;"><img src="../../../resources/images/icon/map.png" alt=""> {{item.node_name}} {{item.crslk_az}}쪽횡단보도</p> |
|
105 |
- <p class="m-b" style="color: #767677; font-size: 13px;">발생일시: {{item.ocrn_dt}}</p> |
|
106 |
- </li> |
|
107 |
- </ul> |
|
108 |
- <ul v-show="tab.content2"> |
|
109 |
- <li v-for="(item, idx) in troubleOccurrenceStatusList" :key = idx @click="troblCcrnLocation(item)"> |
|
110 |
- <p class="m-b" style="color: #9bbb8d; ">장애명: {{item.trobl_nm}}</p> |
|
111 |
- <p class="m-b" style="color: #474747; font-size: 14px;"><img src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az }}쪽횡단보도 </p> |
|
112 |
- <p class="m-b">발생일시: {{item.ocrn_dt}}</p> |
|
113 |
- <p class="m-b">담당자: {{item.mngr_nm}}</p> |
|
114 |
- <p class="m-b">연락처: {{item.mngr_telno}}</p> |
|
115 |
- <p class="">복구여부: {{ item.recovery_yn }}</p> |
|
116 |
- </li> |
|
117 |
- </ul> |
|
118 |
- |
|
58 |
+ </div> |
|
59 |
+ <div class="live-mobile" v-if="currentSection === 'live-mobile'"> |
|
60 |
+ <h2>실시간 발생 현황</h2> |
|
61 |
+ <div class="box bg-white tab-buttons" style="height: calc(100% - 50rem)"> |
|
62 |
+ <div class="btn_set flex-center gap"> |
|
63 |
+ <button class="m-r flex-between gray-btn" v-for="tab in tabs" :key="tab.id" |
|
64 |
+ :class="{ active: activeTab === tab.id }" @click="changeTab(tab.id)"> |
|
65 |
+ {{ tab.title }} |
|
66 |
+ <img v-if="tab.id === 2 && troubleOccurrenceStatusList.length > 0" |
|
67 |
+ src="../../../resources/images/warning.png" alt="" /> |
|
68 |
+ </button> |
|
69 |
+ </div> |
|
70 |
+ <div class="ulbox"> |
|
71 |
+ <div class="tab-content" v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> |
|
72 |
+ <ul v-show="tab.content1"> |
|
73 |
+ <li v-for="(item, idx) in situationOccurrenceStatusList" :key="idx"> |
|
74 |
+ <p class="" style="color: #9bbb8d; ">상황명: {{ item.sn }}</p> |
|
75 |
+ <p class="" style="color: #474747; font-size: 14px;"><img |
|
76 |
+ src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az |
|
77 |
+ }}쪽횡단보도 |
|
78 |
+ </p> |
|
79 |
+ <p class="m-b" style="color: #767677; font-size: 13px;">발생일시: {{ item.ocrn_dt }}</p> |
|
80 |
+ </li> |
|
81 |
+ </ul> |
|
82 |
+ <ul v-show="tab.content2"> |
|
83 |
+ <li v-for="(item, idx) in troubleOccurrenceStatusList" :key=idx @click="troblCcrnLocation(item)"> |
|
84 |
+ <p class="m-b" style="color: #9bbb8d; ">장애명: {{ item.trobl_nm }}</p> |
|
85 |
+ <p class="m-b" style="color: #474747; font-size: 14px;"><img |
|
86 |
+ src="../../../resources/images/icon/map.png" alt=""> {{ item.node_name }} {{ item.crslk_az |
|
87 |
+ }}쪽횡단보도 </p> |
|
88 |
+ <p class="m-b">발생일시: {{ item.ocrn_dt }}</p> |
|
89 |
+ <p class="m-b">담당자: {{ item.mngr_nm }}</p> |
|
90 |
+ <p class="m-b">연락처: {{ item.mngr_telno }}</p> |
|
91 |
+ <p class="">복구여부: {{ item.recovery_yn }}</p> |
|
92 |
+ </li> |
|
93 |
+ </ul> |
|
94 |
+ |
|
95 |
+ </div> |
|
96 |
+ </div> |
|
97 |
+ <div v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> |
|
98 |
+ <PaginationButton v-show="tab.content1" v-if="situationOccurrenceStatusListCount > 0" |
|
99 |
+ v-model:currentPage="situationOccurrenceStatusListSearch.currentPage" |
|
100 |
+ :per-page="situationOccurrenceStatusListSearch.perPage" |
|
101 |
+ :total-count="situationOccurrenceStatusListCount" :max-range="5" |
|
102 |
+ :click="situationOccurrenceStatusSearch" /> |
|
103 |
+ <PaginationButton v-show="tab.content2" v-if="troubleOccurrenceStatusListCount > 0" |
|
104 |
+ v-model:currentPage="troubleOccurrenceStatusListSearch.currentPage" |
|
105 |
+ :per-page="troubleOccurrenceStatusListSearch.perPage" :total-count="troubleOccurrenceStatusListCount" |
|
106 |
+ :max-range="5" :click="troubleOccurrenceStatusSearch" /> |
|
119 | 107 |
</div> |
120 | 108 |
</div> |
121 |
- <div v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> |
|
122 |
- <PaginationButton v-show="tab.content1" v-if="situationOccurrenceStatusListCount > 0" |
|
123 |
- v-model:currentPage="situationOccurrenceStatusListSearch.currentPage" |
|
124 |
- :per-page="situationOccurrenceStatusListSearch.perPage" :total-count="situationOccurrenceStatusListCount" :max-range="5" |
|
125 |
- :click="situationOccurrenceStatusSearch" /> |
|
126 |
- <PaginationButton v-show="tab.content2" v-if="troubleOccurrenceStatusListCount > 0" |
|
127 |
- v-model:currentPage="troubleOccurrenceStatusListSearch.currentPage" |
|
128 |
- :per-page="troubleOccurrenceStatusListSearch.perPage" :total-count="troubleOccurrenceStatusListCount" :max-range="5" |
|
129 |
- :click="troubleOccurrenceStatusSearch" /> |
|
130 |
- </div> |
|
131 | 109 |
</div> |
110 |
+ |
|
132 | 111 |
</div> |
133 | 112 |
</div> |
134 | 113 |
</div> |
135 | 114 |
<div class="right"> |
136 |
- <div class="top"> |
|
115 |
+ <div class="top" v-if="currentSection === 'top'"> |
|
137 | 116 |
<ul class="flex-end"> |
138 | 117 |
<li> |
139 | 118 |
<p class="flex-center gap"> |
140 |
- <img |
|
141 |
- class="m-r" |
|
142 |
- src="../../../resources/images/icon/scumulativenumberofpedestrians.png" |
|
143 |
- alt |
|
144 |
- />금일 보행자 |
|
119 |
+ <img class="m-r" src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />금일 보행자 |
|
145 | 120 |
</p> |
146 | 121 |
<h3> |
147 |
- <em class="green2 m-r">{{ comma(statusControlCountList.pdstrnCount) }}</em |
|
148 |
- >명 |
|
122 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.pdstrnCount) }}</em>명 |
|
149 | 123 |
</h3> |
150 | 124 |
</li> |
151 | 125 |
<li class="br"></li> |
152 | 126 |
<li> |
153 | 127 |
<p class="flex-center gap"> |
154 |
- <img |
|
155 |
- class="m-r" |
|
156 |
- src="../../../resources/images/icon/scumulativenumberofpedestrians.png" |
|
157 |
- alt |
|
158 |
- />금일 무단횡단 발생 |
|
128 |
+ <img class="m-r" src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />금일 무단횡단 발생 |
|
159 | 129 |
</p> |
160 | 130 |
<h3> |
161 |
- <em class="green2 m-r">{{ comma(statusControlCountList.wtrmsCount) }}</em |
|
162 |
- >회 |
|
131 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.wtrmsCount) }}</em>회 |
|
163 | 132 |
</h3> |
164 | 133 |
</li> |
165 | 134 |
<li class="br"></li> |
166 | 135 |
<li> |
167 | 136 |
<p class="flex-center gap"> |
168 |
- <img |
|
169 |
- class="m-r" |
|
170 |
- src="../../../resources/images/icon/Numberofsignalextensionstoday.png" |
|
171 |
- alt |
|
172 |
- />금일 신호연장 발생 |
|
137 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />금일 신호연장 발생 |
|
173 | 138 |
</p> |
174 | 139 |
<h3> |
175 |
- <em class="green2 m-r">{{ comma(statusControlCountList.signExtnCount) }}</em |
|
176 |
- >회 |
|
140 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.signExtnCount) }}</em>회 |
|
177 | 141 |
</h3> |
178 | 142 |
</li> |
179 | 143 |
<li class="br"></li> |
180 | 144 |
<li> |
181 | 145 |
<p class="flex-center gap"> |
182 |
- <img |
|
183 |
- class="m-r" |
|
184 |
- src="../../../resources/images/icon/Numberofsignalextensionstoday.png" |
|
185 |
- alt |
|
186 |
- />금일 신호연장 시간 |
|
146 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />금일 신호연장 시간 |
|
187 | 147 |
</p> |
188 | 148 |
<h3> |
189 |
- <em class="green2 m-r">{{ comma(statusControlCountList.signExtnTime) }}</em |
|
190 |
- >초 |
|
149 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.signExtnTime) }}</em>초 |
|
191 | 150 |
</h3> |
192 | 151 |
</li> |
193 | 152 |
<li class="br"></li> |
194 | 153 |
<li> |
195 | 154 |
<p class="flex-center gap"> |
196 |
- <img |
|
197 |
- class="m-r" |
|
198 |
- src="../../../resources/images/icon/Numberofsignalviolationstoday.png" |
|
199 |
- alt |
|
200 |
- />금일 차량 신호위반 발생 |
|
155 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />금일 차량 신호위반 발생 |
|
201 | 156 |
</p> |
202 | 157 |
<h3> |
203 |
- <em class="green2 m-r">{{ comma(statusControlCountList.rittrnVioltVhcleCount) }}</em |
|
204 |
- >회 |
|
158 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.rittrnVioltVhcleCount) }}</em>회 |
|
205 | 159 |
</h3> |
206 | 160 |
</li> |
207 | 161 |
<li class="br"></li> |
208 | 162 |
<li> |
209 | 163 |
<p class="flex-center gap"> |
210 |
- <img |
|
211 |
- class="m-r" |
|
212 |
- src="../../../resources/images/icon/Numberofsignalviolationstoday.png" |
|
213 |
- alt |
|
214 |
- />금일 장애 발생 |
|
164 |
+ <img class="m-r" src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />금일 장애 발생 |
|
215 | 165 |
</p> |
216 | 166 |
<h3> |
217 |
- <em class="green2 m-r">{{ comma(statusControlCountList.troblOcrnCount) }}</em |
|
218 |
- >회 |
|
167 |
+ <em class="green2 m-r">{{ comma(statusControlCountList.troblOcrnCount) }}</em>회 |
|
219 | 168 |
</h3> |
220 | 169 |
</li> |
221 | 170 |
</ul> |
222 | 171 |
</div> |
223 |
- <OpenLayers ref="open_layers" /> |
|
172 |
+ <OpenLayers ref="open_layers" /> |
|
224 | 173 |
<!-- Popup container --> |
225 |
- <div v-if="isPopupVisible" class="popup-container" > |
|
174 |
+ <div v-if="isPopupVisible" class="popup-container"> |
|
226 | 175 |
<!-- Popup content --> |
227 |
- <div class="popup-content" > |
|
176 |
+ <div class="popup-content"> |
|
228 | 177 |
<!-- Add your popup content here --> |
229 | 178 |
<h2>{{ popupStatus.type }} 발생</h2> |
230 | 179 |
<ul> |
231 | 180 |
<li> |
232 | 181 |
<p class="m-b">발생일시: {{ popupStatus.ocrn_dt }}</p> |
233 |
- <p class="">발생장소: {{popupStatus.crslk_nm}} 횡단보도</p> |
|
182 |
+ <p class="">발생장소: {{ popupStatus.crslk_nm }} 횡단보도</p> |
|
234 | 183 |
</li> |
235 | 184 |
</ul> |
236 |
- <button @click="hidePopup(popupStatus.node_id)" class="s-btn gr-btn">확인</button> |
|
185 |
+ <button @click="hidePopup(popupStatus.node_id)" class="s-btn gr-btn">확인</button> |
|
237 | 186 |
</div> |
238 | 187 |
</div> |
239 | 188 |
</div> |
240 |
- <div class="chart grid gap"> |
|
189 |
+ <div class="chart grid gap" v-if="currentSection === 'chart'"> |
|
241 | 190 |
<div class="bg-white2 b-r b-shadow"> |
242 | 191 |
<h2 style="font-size: 1.3rem"> |
243 | 192 |
금일 횡단보도 별 무단횡단 발생 건수 (상위10개소) |
244 | 193 |
</h2> |
245 | 194 |
<div class="box"> |
246 | 195 |
<div style="width: 100%; height: 100%" id="chartdivWrap1"> |
247 |
- <div |
|
248 |
- ref="chartdiv1" |
|
249 |
- id="chartdiv1" |
|
250 |
- style="width: 100%; height: 90%" |
|
251 |
- ></div> |
|
196 |
+ <div ref="chartdiv1" id="chartdiv1" style="width: 100%; height: 90%"></div> |
|
252 | 197 |
</div> |
253 | 198 |
</div> |
254 | 199 |
</div> |
... | ... | @@ -258,11 +203,7 @@ |
258 | 203 |
</h2> |
259 | 204 |
<div class="box"> |
260 | 205 |
<div style="width: 100%; height: 100%" id="chartdivWrap2"> |
261 |
- <div |
|
262 |
- ref="chartdiv2" |
|
263 |
- id="chartdiv2" |
|
264 |
- style="width: 100%; height: 90%" |
|
265 |
- ></div> |
|
206 |
+ <div ref="chartdiv2" id="chartdiv2" style="width: 100%; height: 90%"></div> |
|
266 | 207 |
</div> |
267 | 208 |
</div> |
268 | 209 |
</div> |
... | ... | @@ -272,11 +213,7 @@ |
272 | 213 |
</h2> |
273 | 214 |
<div class="box"> |
274 | 215 |
<div style="width: 100%; height: 100%" id="chartdivWrap3"> |
275 |
- <div |
|
276 |
- ref="chartdiv3" |
|
277 |
- id="chartdiv3" |
|
278 |
- style="width: 100%; height: 90%" |
|
279 |
- ></div> |
|
216 |
+ <div ref="chartdiv3" id="chartdiv3" style="width: 100%; height: 90%"></div> |
|
280 | 217 |
</div> |
281 | 218 |
</div> |
282 | 219 |
</div> |
... | ... | @@ -286,28 +223,35 @@ |
286 | 223 |
</h2> |
287 | 224 |
<div class="box"> |
288 | 225 |
<div style="width: 100%; height: 100%" id="chartdivWrap4"> |
289 |
- <div |
|
290 |
- ref="chartdiv4" |
|
291 |
- id="chartdiv4" |
|
292 |
- style="width: 100%; height: 90%" |
|
293 |
- ></div> |
|
226 |
+ <div ref="chartdiv4" id="chartdiv4" style="width: 100%; height: 90%"></div> |
|
294 | 227 |
</div> |
295 | 228 |
</div> |
296 | 229 |
</div> |
297 | 230 |
</div> |
298 |
- |
|
231 |
+ <div class="mobile-nav"> |
|
232 |
+ <ul> |
|
233 |
+ <li><a href="javascript:void(0);" class="search-btn" @click="toggleSection('search-mobile')"><i |
|
234 |
+ class="fa-solid fa-magnifying-glass"></i>조회하기</a></li> |
|
235 |
+ <li><a href="javascript:void(0);" class="live-btn" @click="toggleSection('live-mobile')"><i |
|
236 |
+ class="fa-solid fa-location-dot"></i>발생현황</a></li> |
|
237 |
+ <li><a href="javascript:void(0);" class="top-btn" @click="toggleSection('top')"><i |
|
238 |
+ class="fa-solid fa-calendar"></i>금일현황 발생수</a></li> |
|
239 |
+ <li><a href="javascript:void(0);" class="chart-btn" @click="toggleSection('chart')"><i |
|
240 |
+ class="fa-solid fa-chart-simple"></i>상황발생별 순위</a></li> |
|
241 |
+ </ul> |
|
242 |
+ </div> |
|
299 | 243 |
<!-- 팝업 --> |
300 | 244 |
<div class="modal-wrap" v-if="modal_event_detail_list == true"> |
301 | 245 |
<div class="modal-bg"></div> |
302 | 246 |
<div class="modal_base"> |
303 | 247 |
<h2> |
304 |
- <span>{{eventListSearch.eventType}} 발생 정보</span> |
|
305 |
- <button type="button" class="gray-btn modal_base_close" @click="modal_event_detail_list = false"> |
|
248 |
+ <span>{{ eventListSearch.eventType }} 발생 정보</span> |
|
249 |
+ <button type="button" class="gray-btn modal_base_close" @click="modal_event_detail_list = false"> |
|
306 | 250 |
<img src="../../../resources/images/close.png" alt="" /> |
307 | 251 |
</button> |
308 | 252 |
</h2> |
309 | 253 |
<div class="modal_base_body"> |
310 |
- <div class="de_Search" > |
|
254 |
+ <div class="de_Search"> |
|
311 | 255 |
<!--<table class="troubleTable"> |
312 | 256 |
<tbody> |
313 | 257 |
<tr> |
... | ... | @@ -334,26 +278,24 @@ |
334 | 278 |
<td>발생시간</td> |
335 | 279 |
</tr> |
336 | 280 |
</thead> |
337 |
- <tbody> |
|
338 |
- <tr v-for="(item, idx) in eventList" :key="idx" > |
|
281 |
+ <tbody> |
|
282 |
+ <tr v-for="(item, idx) in eventList" :key="idx"> |
|
339 | 283 |
<td data-title="교차로명">{{ item.dong_nm }}</td> |
340 |
- <td data-title="횡단보도명"> {{item.crslk_nm}} 쪽횡단보도</td> |
|
284 |
+ <td data-title="횡단보도명"> {{ item.crslk_nm }} 쪽횡단보도</td> |
|
341 | 285 |
<td data-title="상황명">{{ item.type }}</td> |
342 | 286 |
<td data-title="발생시간">{{ item.ocrn_dt }}</td> |
343 |
- </tr> |
|
287 |
+ </tr> |
|
344 | 288 |
<tr> |
345 | 289 |
<td class="exception" colspan="4" v-if="eventList.length < 1">조회된 데이터가 없습니다</td> |
346 | 290 |
</tr> |
347 | 291 |
</tbody> |
348 | 292 |
</table> |
349 |
- <PaginationButton |
|
350 |
- v-model:currentPage="eventListSearch.currentPage" |
|
351 |
- :per-page="eventListSearch.perPage" :total-count="eventListCount" :max-range="5" |
|
352 |
- :click="eventSelectList" /> |
|
293 |
+ <PaginationButton v-model:currentPage="eventListSearch.currentPage" :per-page="eventListSearch.perPage" |
|
294 |
+ :total-count="eventListCount" :max-range="5" :click="eventSelectList" /> |
|
353 | 295 |
</div> |
354 |
- <div class="modal_base_bottom gap"> |
|
355 |
- <button type="button" class="btn-2 gray-btn wrem_10 mrg_5p" @click="modal_event_detail_list= false">닫기</button> |
|
356 |
- </div> |
|
296 |
+ <div class="modal_base_bottom gap"> |
|
297 |
+ <button type="button" class="btn-2 gray-btn wrem_10 mrg_5p" @click="modal_event_detail_list = false">닫기</button> |
|
298 |
+ </div> |
|
357 | 299 |
</div> |
358 | 300 |
</div> |
359 | 301 |
|
... | ... | @@ -379,10 +321,11 @@ |
379 | 321 |
export default { |
380 | 322 |
data() { |
381 | 323 |
return { |
382 |
- address:{ |
|
324 |
+ currentSection: 'null', |
|
325 |
+ address: { |
|
383 | 326 |
|
384 | 327 |
}, |
385 |
- troubleOccurrenceStatusListSearch : { |
|
328 |
+ troubleOccurrenceStatusListSearch: { |
|
386 | 329 |
currentPage: 1, |
387 | 330 |
perPage: 10, |
388 | 331 |
orderByType: 'DESC', |
... | ... | @@ -394,22 +337,22 @@ |
394 | 337 |
orderByType: 'DESC', |
395 | 338 |
}, |
396 | 339 |
|
397 |
- eventListSearch: { |
|
340 |
+ eventListSearch: { |
|
398 | 341 |
currentPage: 1, |
399 | 342 |
perPage: 10, |
400 | 343 |
startDate: null, |
401 | 344 |
endDate: null, |
402 | 345 |
eventType: null, |
403 |
- sigungu_cd:null, |
|
346 |
+ sigungu_cd: null, |
|
404 | 347 |
dong_cd: null, |
405 | 348 |
dong_dong_cd: null, |
406 | 349 |
node_id: null, |
407 | 350 |
crslk_az: null |
408 | 351 |
}, |
409 |
- situationOccurrenceStatusList:[], |
|
410 |
- situationOccurrenceStatusListCount :0, |
|
411 |
- troubleOccurrenceStatusList:[], |
|
412 |
- troubleOccurrenceStatusListCount : 0, |
|
352 |
+ situationOccurrenceStatusList: [], |
|
353 |
+ situationOccurrenceStatusListCount: 0, |
|
354 |
+ troubleOccurrenceStatusList: [], |
|
355 |
+ troubleOccurrenceStatusListCount: 0, |
|
413 | 356 |
eventListCount: 0, |
414 | 357 |
eventList: [], |
415 | 358 |
eventIdx: 0, |
... | ... | @@ -425,7 +368,7 @@ |
425 | 368 |
rittrnVhcle: true, |
426 | 369 |
eqpmnTrobl: true, |
427 | 370 |
//일자 |
428 |
- date : null, |
|
371 |
+ date: null, |
|
429 | 372 |
start_date: null, |
430 | 373 |
end_date: null, |
431 | 374 |
//시간대 |
... | ... | @@ -433,9 +376,9 @@ |
433 | 376 |
end_time: null, |
434 | 377 |
|
435 | 378 |
// 신규데이터 비교 시간대 |
436 |
- currentTimestamp : null, |
|
437 |
- popuptitle : "무단횡단 발생목록" |
|
438 |
- }, |
|
379 |
+ currentTimestamp: null, |
|
380 |
+ popuptitle: "무단횡단 발생목록" |
|
381 |
+ }, |
|
439 | 382 |
ck: true, |
440 | 383 |
tabs: [ |
441 | 384 |
{ |
... | ... | @@ -455,13 +398,13 @@ |
455 | 398 |
chart2: {}, |
456 | 399 |
chart3: {}, |
457 | 400 |
chart4: {}, |
458 |
- chartData:{ |
|
459 |
- wtrms:[], |
|
460 |
- signExtn:[], |
|
461 |
- rittrnVioltVhcle:[], |
|
462 |
- troblOcrn:[], |
|
401 |
+ chartData: { |
|
402 |
+ wtrms: [], |
|
403 |
+ signExtn: [], |
|
404 |
+ rittrnVioltVhcle: [], |
|
405 |
+ troblOcrn: [], |
|
463 | 406 |
}, |
464 |
- data1: [ ], |
|
407 |
+ data1: [], |
|
465 | 408 |
statusControlCountList: { |
466 | 409 |
pdstrnCount: 0, |
467 | 410 |
wtrmsCount: 0, |
... | ... | @@ -471,20 +414,20 @@ |
471 | 414 |
troblOcrnCount: 0, |
472 | 415 |
}, |
473 | 416 |
// 실시간 발생 이벤트 |
474 |
- popupStatus : { |
|
475 |
- node_id : '', |
|
476 |
- crslk_az : '', |
|
477 |
- ocrn_dt : '', |
|
478 |
- type : '' |
|
417 |
+ popupStatus: { |
|
418 |
+ node_id: '', |
|
419 |
+ crslk_az: '', |
|
420 |
+ ocrn_dt: '', |
|
421 |
+ type: '' |
|
479 | 422 |
}, |
480 | 423 |
// 실시간 발생 이벤트 리스트 |
481 |
- realTimeEventList : [], |
|
424 |
+ realTimeEventList: [], |
|
482 | 425 |
// 이벤트 발생 체크 |
483 |
- eventFlage : false, |
|
426 |
+ eventFlage: false, |
|
484 | 427 |
// 이벤트 상세보기 팝업 |
485 |
- modal_event_detail_list : false, |
|
428 |
+ modal_event_detail_list: false, |
|
486 | 429 |
// 타이머 관리 |
487 |
- timer : {} |
|
430 |
+ timer: {} |
|
488 | 431 |
}; |
489 | 432 |
}, |
490 | 433 |
components: { |
... | ... | @@ -495,21 +438,21 @@ |
495 | 438 |
methods: { |
496 | 439 |
// 휠 이벤트 |
497 | 440 |
childWheel(coordinate) { |
498 |
- |
|
441 |
+ |
|
499 | 442 |
}, |
500 | 443 |
|
501 | 444 |
//DongSelectList에서 dong_cd 받아오기 |
502 |
- setDongCd(value) { |
|
445 |
+ setDongCd(value) { |
|
503 | 446 |
this.address = value; |
504 | 447 |
}, |
505 | 448 |
|
506 | 449 |
childMoveEnd(zoom) { |
507 | 450 |
// console.log("zoom zoomzoom: ", zoom); |
508 |
- if(this.now_zoom >= 18.6 && zoom < 18.6){ |
|
451 |
+ if (this.now_zoom >= 18.6 && zoom < 18.6) { |
|
509 | 452 |
this.address.node_id = null; |
510 | 453 |
this.statusSearch(false); |
511 |
- } |
|
512 |
- this.now_zoom = zoom; |
|
454 |
+ } |
|
455 |
+ this.now_zoom = zoom; |
|
513 | 456 |
}, |
514 | 457 |
|
515 | 458 |
// 실시간 발생 토클? |
... | ... | @@ -520,7 +463,7 @@ |
520 | 463 |
this.slideText = "창닫기"; |
521 | 464 |
} |
522 | 465 |
this.showSlide = !this.showSlide; |
523 |
- }, |
|
466 |
+ }, |
|
524 | 467 |
|
525 | 468 |
dongSelectF: function (event) { |
526 | 469 |
|
... | ... | @@ -530,80 +473,80 @@ |
530 | 473 |
changeTab(tabId) { |
531 | 474 |
this.activeTab = tabId; |
532 | 475 |
}, |
533 |
- |
|
476 |
+ |
|
534 | 477 |
showPopup() { |
535 | 478 |
this.isPopupVisible = true; |
536 | 479 |
}, |
537 |
- |
|
538 |
- hidePopup(node_id) { |
|
480 |
+ |
|
481 |
+ hidePopup(node_id) { |
|
539 | 482 |
this.isPopupVisible = false; |
540 | 483 |
}, |
541 | 484 |
|
542 | 485 |
// 팝업 상세 |
543 |
- openDetailPopup(type){ |
|
544 |
- let vm = this; |
|
486 |
+ openDetailPopup(type) { |
|
487 |
+ let vm = this; |
|
545 | 488 |
vm.eventListSearch.currentPage = 1; |
546 | 489 |
vm.eventListSearch.startDate = vm.condition.date + ' ' + vm.condition.start_time; |
547 | 490 |
vm.eventListSearch.endDate = vm.condition.date + ' ' + vm.condition.end_time; |
548 | 491 |
|
549 |
- |
|
492 |
+ |
|
550 | 493 |
// 무단횡단 |
551 |
- if(type == 'c1'){ |
|
494 |
+ if (type == 'c1') { |
|
552 | 495 |
vm.eventListSearch.eventType = '무단횡단'; |
553 |
- // 신호연장 |
|
554 |
- }else if(type == 'c2'){ |
|
496 |
+ // 신호연장 |
|
497 |
+ } else if (type == 'c2') { |
|
555 | 498 |
vm.eventListSearch.eventType = '신호연장'; |
556 |
- // 차량위반 |
|
557 |
- }else if(type == 'c3'){ |
|
499 |
+ // 차량위반 |
|
500 |
+ } else if (type == 'c3') { |
|
558 | 501 |
vm.eventListSearch.eventType = '우회전신호위반'; |
559 |
- // 장비발생 |
|
560 |
- }else if(type == 'c4'){ |
|
561 |
- vm.eventListSearch.eventType = '장비장애'; |
|
502 |
+ // 장비발생 |
|
503 |
+ } else if (type == 'c4') { |
|
504 |
+ vm.eventListSearch.eventType = '장비장애'; |
|
562 | 505 |
} |
563 | 506 |
|
564 |
- if(type != 'c4'){ |
|
565 |
- const vm = this; |
|
566 |
- axios({ |
|
507 |
+ if (type != 'c4') { |
|
508 |
+ const vm = this; |
|
509 |
+ axios({ |
|
567 | 510 |
url: "/statusControl/eventSelectList.json", |
568 | 511 |
method: "post", |
569 | 512 |
headers: { |
570 | 513 |
"Content-Type": "application/json; charset=UTF-8", |
571 | 514 |
}, |
572 | 515 |
data: vm.eventListSearch, |
573 |
- }) |
|
574 |
- .then(function(response) { |
|
575 |
- vm.eventListCount = response.data.eventListCount; |
|
576 |
- vm.eventList = response.data.eventList; |
|
577 |
- vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
578 |
- vm.modal_event_detail_list = true; |
|
579 |
- }) |
|
580 |
- .catch(function(error) { |
|
581 |
- alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
582 |
- }); |
|
583 |
- } |
|
516 |
+ }) |
|
517 |
+ .then(function (response) { |
|
518 |
+ vm.eventListCount = response.data.eventListCount; |
|
519 |
+ vm.eventList = response.data.eventList; |
|
520 |
+ vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
521 |
+ vm.modal_event_detail_list = true; |
|
522 |
+ }) |
|
523 |
+ .catch(function (error) { |
|
524 |
+ alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
525 |
+ }); |
|
526 |
+ } |
|
584 | 527 |
}, |
585 |
- |
|
528 |
+ |
|
586 | 529 |
// 마우스 클릭 |
587 |
- childClick: function (prop, coordinate, layerCk,map) { |
|
588 |
- var vm = this; |
|
589 |
- |
|
590 |
- if(layerCk == true){ |
|
530 |
+ childClick: function (prop, coordinate, layerCk, map) { |
|
531 |
+ var vm = this; |
|
532 |
+ |
|
533 |
+ if (layerCk == true) { |
|
591 | 534 |
if (prop[0] != null && prop[0].layerName != 'multiPolygonLayer') { |
592 |
- if(prop[0].layerName === 'dong'){ |
|
593 |
- //this.address.dong_dong_cd = prop[0].id_; |
|
594 |
- //this.address.dong_cd =prop[0].id_; |
|
595 |
- vm.eventListSearch.dong_cd = prop[0].id_; |
|
596 |
- }else if(prop[0].layerName === 'node'){ |
|
597 |
- //this.address.node_id = prop[0].id_; |
|
598 |
- vm.eventListSearch.node_id = prop[0].id_; |
|
599 |
- } |
|
600 |
- this.createPopup(coordinate,prop[0]); |
|
535 |
+ if (prop[0].layerName === 'dong') { |
|
536 |
+ //this.address.dong_dong_cd = prop[0].id_; |
|
537 |
+ //this.address.dong_cd =prop[0].id_; |
|
538 |
+ vm.eventListSearch.dong_cd = prop[0].id_; |
|
539 |
+ } else if (prop[0].layerName === 'node') { |
|
540 |
+ //this.address.node_id = prop[0].id_; |
|
541 |
+ vm.eventListSearch.node_id = prop[0].id_; |
|
542 |
+ } |
|
543 |
+ this.createPopup(coordinate, prop[0]); |
|
601 | 544 |
} |
602 | 545 |
} |
603 | 546 |
}, |
604 |
- |
|
547 |
+ |
|
605 | 548 |
// 장애 팝업 |
606 |
- createErrorPopup : function(item){ |
|
549 |
+ createErrorPopup: function (item) { |
|
607 | 550 |
var vm = this; |
608 | 551 |
vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
609 | 552 |
let element = document.createElement("div"); |
... | ... | @@ -612,341 +555,341 @@ |
612 | 555 |
// 검색창 떠있는 동안은 자동 리프레쉬 멈춤 |
613 | 556 |
var html = ""; |
614 | 557 |
|
615 |
- html = "<div style='transform: translate(0%, 0%) translate(-150px,-230px);'>" |
|
616 |
- + " <table class='map_multi_popup' >" |
|
617 |
- + " <thead>" |
|
618 |
- + " <td colspan='4' class='fon'> <span > " + item.node_name + "_" + item.crslk_az + "측 획단보도 장애정보 <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
619 |
- + " </thead>" |
|
620 |
- + " <tbody>" |
|
621 |
- + " <tr>" |
|
622 |
- + " <th colspan='3'>장애명</th>" |
|
623 |
- + " <td >"+item.trobl_nm+"</td>" |
|
624 |
- + " </tr>" |
|
625 |
- + " <tr>" |
|
626 |
- + " <th colspan='3'>담당자</th>" |
|
627 |
- + " <td >"+item.mngr_nm+"</td>" |
|
628 |
- + " </tr>" |
|
629 |
- + " <tr>" |
|
630 |
- + " <th colspan='3'>연락처</th>" |
|
631 |
- + " <td >"+item.mngr_telno+"</td>" |
|
632 |
- + " </tr>" |
|
633 |
- + " <tr>" |
|
634 |
- + " <th colspan='3'>이메일</th>" |
|
635 |
- + " <td >"+item.mngr_eml+"</td>" |
|
636 |
- + " </tr>" |
|
637 |
- + " <tr>" |
|
638 |
- + " <th colspan='3'>소속정보</th>" |
|
639 |
- + " <td >"+item.mngr_ogdp_info+"</td>" |
|
640 |
- + " </tr>" |
|
641 |
- + "<tr>" |
|
642 |
- + " <th colspan='5'><button class='map_multi_popup_move_button' id='close'>닫기</button></th>" |
|
643 |
- + " </tr>" |
|
644 |
- + " </tbody>" |
|
645 |
- + " </table>" |
|
646 |
- + " </div>"; |
|
647 |
- + " </tbody>" |
|
648 |
- + " </table>" |
|
649 |
- + " </div>"; |
|
558 |
+ html = "<div style='transform: translate(0%, 0%) translate(-150px,-230px);'>" |
|
559 |
+ + " <table class='map_multi_popup' >" |
|
560 |
+ + " <thead>" |
|
561 |
+ + " <td colspan='4' class='fon'> <span > " + item.node_name + "_" + item.crslk_az + "측 획단보도 장애정보 <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
562 |
+ + " </thead>" |
|
563 |
+ + " <tbody>" |
|
564 |
+ + " <tr>" |
|
565 |
+ + " <th colspan='3'>장애명</th>" |
|
566 |
+ + " <td >" + item.trobl_nm + "</td>" |
|
567 |
+ + " </tr>" |
|
568 |
+ + " <tr>" |
|
569 |
+ + " <th colspan='3'>담당자</th>" |
|
570 |
+ + " <td >" + item.mngr_nm + "</td>" |
|
571 |
+ + " </tr>" |
|
572 |
+ + " <tr>" |
|
573 |
+ + " <th colspan='3'>연락처</th>" |
|
574 |
+ + " <td >" + item.mngr_telno + "</td>" |
|
575 |
+ + " </tr>" |
|
576 |
+ + " <tr>" |
|
577 |
+ + " <th colspan='3'>이메일</th>" |
|
578 |
+ + " <td >" + item.mngr_eml + "</td>" |
|
579 |
+ + " </tr>" |
|
580 |
+ + " <tr>" |
|
581 |
+ + " <th colspan='3'>소속정보</th>" |
|
582 |
+ + " <td >" + item.mngr_ogdp_info + "</td>" |
|
583 |
+ + " </tr>" |
|
584 |
+ + "<tr>" |
|
585 |
+ + " <th colspan='5'><button class='map_multi_popup_move_button' id='close'>닫기</button></th>" |
|
586 |
+ + " </tr>" |
|
587 |
+ + " </tbody>" |
|
588 |
+ + " </table>" |
|
589 |
+ + " </div>"; |
|
590 |
+ + " </tbody>" |
|
591 |
+ + " </table>" |
|
592 |
+ + " </div>"; |
|
650 | 593 |
|
651 |
- element.innerHTML = html; |
|
652 |
- element.style.display = 'block'; |
|
594 |
+ element.innerHTML = html; |
|
595 |
+ element.style.display = 'block'; |
|
653 | 596 |
|
654 |
- // OverLay 생성 |
|
655 |
- let overlay = new Overlay({ |
|
656 |
- id : 'multiPopup', |
|
657 |
- element: element, // 생성한 DIV |
|
658 |
- autoPan: true, |
|
659 |
- className: "multiPopup", |
|
660 |
- autoPanMargin: 100, |
|
661 |
- autoPanAnimation: { |
|
662 |
- duration: 400 |
|
663 |
- } |
|
664 |
- }); |
|
597 |
+ // OverLay 생성 |
|
598 |
+ let overlay = new Overlay({ |
|
599 |
+ id: 'multiPopup', |
|
600 |
+ element: element, // 생성한 DIV |
|
601 |
+ autoPan: true, |
|
602 |
+ className: "multiPopup", |
|
603 |
+ autoPanMargin: 100, |
|
604 |
+ autoPanAnimation: { |
|
605 |
+ duration: 400 |
|
606 |
+ } |
|
607 |
+ }); |
|
665 | 608 |
|
666 |
- //오버레이의 위치 저장 |
|
667 |
- var geom = JSON.parse(item.geom.value); |
|
668 |
- // console.log(geom); |
|
669 |
- overlay.setPosition(geom.coordinates); |
|
609 |
+ //오버레이의 위치 저장 |
|
610 |
+ var geom = JSON.parse(item.geom.value); |
|
611 |
+ // console.log(geom); |
|
612 |
+ overlay.setPosition(geom.coordinates); |
|
670 | 613 |
|
671 |
- //지도에 추가 |
|
672 |
- this.$refs.open_layers.map.addOverlay(overlay); |
|
673 |
- // 해당 DIV 다켓방법 |
|
674 |
- let oElem = overlay.getElement(); |
|
675 |
- oElem.addEventListener('click', function(e) { |
|
676 |
- var target = e.target; |
|
677 |
- if (target.className == "ol-popup-closer" || target.className == 'map_multi_popup_move_button') { |
|
614 |
+ //지도에 추가 |
|
615 |
+ this.$refs.open_layers.map.addOverlay(overlay); |
|
616 |
+ // 해당 DIV 다켓방법 |
|
617 |
+ let oElem = overlay.getElement(); |
|
618 |
+ oElem.addEventListener('click', function (e) { |
|
619 |
+ var target = e.target; |
|
620 |
+ if (target.className == "ol-popup-closer" || target.className == 'map_multi_popup_move_button') { |
|
678 | 621 |
//선택한 OverLayer 삭제 |
679 |
- vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
680 |
- vm.timer = setInterval(()=>{ |
|
681 |
- vm.statusSearch(false); |
|
682 |
- },5000) |
|
622 |
+ vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
623 |
+ vm.timer = setInterval(() => { |
|
624 |
+ vm.statusSearch(false); |
|
625 |
+ }, 5000) |
|
683 | 626 |
|
684 | 627 |
} |
685 | 628 |
}); |
686 | 629 |
}, |
687 | 630 |
|
688 | 631 |
// 정보 팝업 |
689 |
- createPopup : function(coordinate, prop){ |
|
690 |
- var vm = this; |
|
691 |
- vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
692 |
- let element = document.createElement("div"); |
|
693 |
- element.classList.add('ol-popup'); |
|
632 |
+ createPopup: function (coordinate, prop) { |
|
633 |
+ var vm = this; |
|
634 |
+ vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
635 |
+ let element = document.createElement("div"); |
|
636 |
+ element.classList.add('ol-popup'); |
|
694 | 637 |
|
695 |
- // 검색창 떠있는 동안은 자동 리프레쉬 멈춤 |
|
696 |
- clearInterval(this.timer); |
|
697 |
- var html = ""; |
|
698 |
- html = "<div style='transform: translate(0%, 0%) translate(-150px,-190px);'>" |
|
638 |
+ // 검색창 떠있는 동안은 자동 리프레쉬 멈춤 |
|
639 |
+ clearInterval(this.timer); |
|
640 |
+ var html = ""; |
|
641 |
+ html = "<div style='transform: translate(0%, 0%) translate(-150px,-190px);'>" |
|
699 | 642 |
+ " <table class='map_multi_popup' >" |
700 | 643 |
+ " <thead>" |
701 |
- + " <td colspan='5' class='fon'> <span > " + prop.values_.name + " <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
644 |
+ + " <td colspan='5' class='fon'> <span > " + prop.values_.name + " <a id='popup-closer' class='ol-popup-closer' style='float: right;'>X </a> </span></td>" |
|
702 | 645 |
+ " </thead>" |
703 | 646 |
+ " <tbody>" |
704 | 647 |
+ " <tr>" |
705 | 648 |
+ " <th colspan='3'>무단횡단 발생</th>" |
706 |
- + " <td >"+prop.values_.crosng_cnt+"</td>" |
|
649 |
+ + " <td >" + prop.values_.crosng_cnt + "</td>" |
|
707 | 650 |
+ " <td ><button class='map_multi_popup_button' id='c1' >상세</button></td>" |
708 | 651 |
+ " </tr>" |
709 | 652 |
+ " <tr>" |
710 | 653 |
+ " <th colspan='3'>신호연장 발생</th>" |
711 |
- + " <td >"+prop.values_.extn_cnt+"</td>" |
|
654 |
+ + " <td >" + prop.values_.extn_cnt + "</td>" |
|
712 | 655 |
+ " <td ><button class='map_multi_popup_button' id='c2' >상세</button></td>" |
713 | 656 |
+ " </tr>" |
714 | 657 |
+ " <tr>" |
715 | 658 |
+ " <th colspan='3'>차량위반 발생</th>" |
716 |
- + " <td >"+prop.values_.law_vltn_cnt+"</td>" |
|
659 |
+ + " <td >" + prop.values_.law_vltn_cnt + "</td>" |
|
717 | 660 |
+ " <td ><button class='map_multi_popup_button' id='c3' >상세</button></td>" |
718 |
- + " </tr>" |
|
719 |
- + " <tr>" |
|
661 |
+ + " </tr>" |
|
662 |
+ + " <tr>" |
|
720 | 663 |
+ " <th colspan='3'>장비장애 발생</th>" |
721 |
- + " <td >"+prop.values_.error_cnt+"</td>" |
|
664 |
+ + " <td >" + prop.values_.error_cnt + "</td>" |
|
722 | 665 |
+ " <td ><button class='map_multi_popup_button' id='c1' >상세</button></td>" |
723 | 666 |
+ " </tr>"; |
724 |
- if(prop.layerName != 'crslk'){ |
|
725 |
- html += "<tr>" |
|
726 |
- + " <th colspan='5'><button class='map_multi_popup_move_button' id='move'>이동</button></th>" |
|
727 |
- + " </tr>" |
|
728 |
- + " </tbody>" |
|
667 |
+ if (prop.layerName != 'crslk') { |
|
668 |
+ html += "<tr>" |
|
669 |
+ + " <th colspan='5'><button class='map_multi_popup_move_button' id='move'>이동</button></th>" |
|
670 |
+ + " </tr>" |
|
671 |
+ + " </tbody>" |
|
729 | 672 |
+ " </table>" |
730 |
- + " </div>"; |
|
731 |
- }else{ |
|
732 |
- html += " </tbody>" |
|
673 |
+ + " </div>"; |
|
674 |
+ } else { |
|
675 |
+ html += " </tbody>" |
|
733 | 676 |
+ " </table>" |
734 |
- + " </div>"; |
|
735 |
- } |
|
677 |
+ + " </div>"; |
|
678 |
+ } |
|
736 | 679 |
|
737 |
- element.innerHTML = html; |
|
738 |
- element.style.display = 'block'; |
|
680 |
+ element.innerHTML = html; |
|
681 |
+ element.style.display = 'block'; |
|
739 | 682 |
|
740 | 683 |
// OverLay 생성 |
741 | 684 |
let overlay = new Overlay({ |
742 |
- id : 'multiPopup', |
|
743 |
- element: element, // 생성한 DIV |
|
744 |
- autoPan: true, |
|
745 |
- className: "multiPopup", |
|
746 |
- autoPanMargin: 100, |
|
747 |
- autoPanAnimation: { |
|
748 |
- duration: 400 |
|
749 |
- } |
|
750 |
- }); |
|
685 |
+ id: 'multiPopup', |
|
686 |
+ element: element, // 생성한 DIV |
|
687 |
+ autoPan: true, |
|
688 |
+ className: "multiPopup", |
|
689 |
+ autoPanMargin: 100, |
|
690 |
+ autoPanAnimation: { |
|
691 |
+ duration: 400 |
|
692 |
+ } |
|
693 |
+ }); |
|
751 | 694 |
|
752 | 695 |
//오버레이의 위치 저장 |
753 |
- overlay.setPosition(prop.values_.geometry.flatCoordinates); |
|
696 |
+ overlay.setPosition(prop.values_.geometry.flatCoordinates); |
|
754 | 697 |
|
755 | 698 |
//지도에 추가 |
756 |
- this.$refs.open_layers.map.addOverlay(overlay); |
|
699 |
+ this.$refs.open_layers.map.addOverlay(overlay); |
|
757 | 700 |
// 해당 DIV 다켓방법 |
758 | 701 |
let oElem = overlay.getElement(); |
759 |
- oElem.addEventListener('click', function(e) { |
|
760 |
- var target = e.target; |
|
761 |
- if (target.className == "ol-popup-closer") { |
|
762 |
- //선택한 OverLayer 삭제 |
|
763 |
- vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
764 |
- element = ''; |
|
702 |
+ oElem.addEventListener('click', function (e) { |
|
703 |
+ var target = e.target; |
|
704 |
+ if (target.className == "ol-popup-closer") { |
|
705 |
+ //선택한 OverLayer 삭제 |
|
706 |
+ vm.$refs.open_layers.map.removeOverlay(vm.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
707 |
+ element = ''; |
|
765 | 708 |
|
766 |
- vm.timer = setInterval(()=>{ |
|
767 |
- vm.statusSearch(false); |
|
768 |
- },5000) |
|
709 |
+ vm.timer = setInterval(() => { |
|
710 |
+ vm.statusSearch(false); |
|
711 |
+ }, 5000) |
|
769 | 712 |
|
770 |
- }else if (target.className == "map_multi_popup_button") { |
|
771 |
- vm.openDetailPopup(target.id) |
|
713 |
+ } else if (target.className == "map_multi_popup_button") { |
|
714 |
+ vm.openDetailPopup(target.id) |
|
772 | 715 |
|
773 |
- }else if (target.className == "map_multi_popup_move_button") { |
|
774 |
- if (prop != null && prop.layerName != 'multiPolygonLayer') { |
|
775 |
- if(prop.layerName === 'dong'){ |
|
776 |
- vm.address.dong_dong_cd = prop.id_; |
|
777 |
- vm.address.dong_cd =prop.id_; |
|
778 |
- }else if(prop.layerName === 'node'){ |
|
779 |
- vm.address.node_id = prop.id_; |
|
780 |
- } |
|
781 |
- vm.statusSearch(true); |
|
716 |
+ } else if (target.className == "map_multi_popup_move_button") { |
|
717 |
+ if (prop != null && prop.layerName != 'multiPolygonLayer') { |
|
718 |
+ if (prop.layerName === 'dong') { |
|
719 |
+ vm.address.dong_dong_cd = prop.id_; |
|
720 |
+ vm.address.dong_cd = prop.id_; |
|
721 |
+ } else if (prop.layerName === 'node') { |
|
722 |
+ vm.address.node_id = prop.id_; |
|
782 | 723 |
} |
783 |
- vm.timer = setInterval(()=>{ |
|
784 |
- vm.statusSearch(false); |
|
785 |
- },5000) |
|
724 |
+ vm.statusSearch(true); |
|
786 | 725 |
} |
726 |
+ vm.timer = setInterval(() => { |
|
727 |
+ vm.statusSearch(false); |
|
728 |
+ }, 5000) |
|
729 |
+ } |
|
787 | 730 |
}); |
788 | 731 |
}, |
789 | 732 |
|
790 | 733 |
// 장애 발생 현황 클릭 |
791 |
- troblCcrnLocation : function(item){ |
|
734 |
+ troblCcrnLocation: function (item) { |
|
792 | 735 |
// console.log('troblCcrnLocation', item); |
793 |
- clearInterval(this.timer); |
|
794 |
- this.address.node_id = item.node_id; |
|
795 |
- this.statusSearch(true); |
|
736 |
+ clearInterval(this.timer); |
|
737 |
+ this.address.node_id = item.node_id; |
|
738 |
+ this.statusSearch(true); |
|
796 | 739 |
this.eventFlage = true; |
797 | 740 |
this.createErrorPopup(item); |
798 | 741 |
}, |
799 | 742 |
|
800 | 743 |
// 셀렉트 선택시 반영 데이터 |
801 |
- getStatusData : function(pointAnim){ |
|
802 |
- const vm = this; |
|
744 |
+ getStatusData: function (pointAnim) { |
|
745 |
+ const vm = this; |
|
803 | 746 |
|
804 | 747 |
var layer = 'dong' |
805 |
- var epsg = "EPSG:5181"; |
|
806 |
- |
|
807 |
- if(vm.address.guGun_dong_cd == null){ |
|
808 |
- layer = 'sigungu'; |
|
809 |
- }else if(vm.address.node_id != null){ |
|
810 |
- layer = 'crslk'; |
|
811 |
- }else if(vm.address.dong_dong_cd != null){ |
|
812 |
- layer = 'node'; |
|
813 |
- epsg = "EPSG:4326"; |
|
814 |
- } |
|
815 |
- |
|
748 |
+ var epsg = "EPSG:5181"; |
|
749 |
+ |
|
750 |
+ if (vm.address.guGun_dong_cd == null) { |
|
751 |
+ layer = 'sigungu'; |
|
752 |
+ } else if (vm.address.node_id != null) { |
|
753 |
+ layer = 'crslk'; |
|
754 |
+ } else if (vm.address.dong_dong_cd != null) { |
|
755 |
+ layer = 'node'; |
|
756 |
+ epsg = "EPSG:4326"; |
|
757 |
+ } |
|
758 |
+ |
|
816 | 759 |
axios({ |
817 | 760 |
url: "/common/getStatusDataGeoJson.json", |
818 | 761 |
method: 'post', |
819 | 762 |
headers: { |
820 | 763 |
'Content-Type': 'application/json; charset=UTF-8' |
821 | 764 |
}, |
822 |
- data: { |
|
823 |
- "dong_cd": vm.address.dong_cd |
|
824 |
- , "start_dt": vm.condition.date + ' ' + vm.condition.start_time |
|
825 |
- , "end_dt" : vm.condition.date + ' ' + vm.condition.end_time |
|
826 |
- , "layer" : layer |
|
827 |
- , "signExtn" : vm.condition.signExtn |
|
828 |
- , "wtrms" : vm.condition.wtrms |
|
829 |
- , "rittrnVhcle" : vm.condition.rittrnVhcle |
|
830 |
- , "eqpmnTrobl" : vm.condition.eqpmnTrobl |
|
831 |
- , "currentTimestamp": vm.condition.currentTimestamp |
|
832 |
- }, |
|
833 |
- }).then(function (response) { |
|
834 |
- vm.statusControlCountList = response.data.totalCount; |
|
835 |
- vm.$refs.open_layers.removeAddLayerAll(); |
|
836 |
- vm.$refs.open_layers.addLayerByGeojson(response.data.geojson,layer,epsg,baseStyles["labelStyle"],"label"); |
|
837 |
- |
|
838 |
- // 마지막 시간 데이터 생성 |
|
839 |
- vm.condition.currentTimestamp = response.data.realTimeEvent.currentTimestamp; |
|
765 |
+ data: { |
|
766 |
+ "dong_cd": vm.address.dong_cd |
|
767 |
+ , "start_dt": vm.condition.date + ' ' + vm.condition.start_time |
|
768 |
+ , "end_dt": vm.condition.date + ' ' + vm.condition.end_time |
|
769 |
+ , "layer": layer |
|
770 |
+ , "signExtn": vm.condition.signExtn |
|
771 |
+ , "wtrms": vm.condition.wtrms |
|
772 |
+ , "rittrnVhcle": vm.condition.rittrnVhcle |
|
773 |
+ , "eqpmnTrobl": vm.condition.eqpmnTrobl |
|
774 |
+ , "currentTimestamp": vm.condition.currentTimestamp |
|
775 |
+ }, |
|
776 |
+ }).then(function (response) { |
|
777 |
+ vm.statusControlCountList = response.data.totalCount; |
|
778 |
+ vm.$refs.open_layers.removeAddLayerAll(); |
|
779 |
+ vm.$refs.open_layers.addLayerByGeojson(response.data.geojson, layer, epsg, baseStyles["labelStyle"], "label"); |
|
840 | 780 |
|
841 |
- // 이벤트 리스트 등록 |
|
842 |
- vm.realTimeEventList = response.data.realTimeEvent.RealTimeEventList; |
|
781 |
+ // 마지막 시간 데이터 생성 |
|
782 |
+ vm.condition.currentTimestamp = response.data.realTimeEvent.currentTimestamp; |
|
843 | 783 |
|
844 |
- // console.log( ' vm.realTimeEventList',vm.realTimeEventList) |
|
845 |
- |
|
846 |
- // 실시간 이벤트 발생여부 체크 |
|
847 |
- if(vm.realTimeEventList.length > 0){ |
|
848 |
- vm.popupStatus = Object.assign({}, vm.realTimeEventList[0]); |
|
849 |
- vm.address.node_id = vm.popupStatus.node_id; |
|
850 |
- vm.statusSearch(true); |
|
851 |
- vm.eventFlage = true; |
|
852 |
- vm.showPopup(); |
|
853 |
- } |
|
854 |
- // 차트 데이터 생성 |
|
855 |
- vm.drawChars(response.data.countList); |
|
856 |
- }).catch(function (error) { |
|
857 |
- console.log("error : ", error); |
|
858 |
- }).finally(function () { |
|
859 |
- // 항상 실행되는 영역 |
|
860 |
- if(vm.address.guGun_dong_cd == null){ |
|
861 |
- layer = 'sigungu'; |
|
862 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json","multiPolygonLayer","EPSG:5181",baseStyles["MultiPolygon"],"MultiPolygon",pointAnim,vm.address.dong_cd); |
|
863 |
- }else if(vm.address.node_id != null){ |
|
864 |
- layer = 'crslk'; |
|
784 |
+ // 이벤트 리스트 등록 |
|
785 |
+ vm.realTimeEventList = response.data.realTimeEvent.RealTimeEventList; |
|
786 |
+ |
|
787 |
+ // console.log( ' vm.realTimeEventList',vm.realTimeEventList) |
|
788 |
+ |
|
789 |
+ // 실시간 이벤트 발생여부 체크 |
|
790 |
+ if (vm.realTimeEventList.length > 0) { |
|
791 |
+ vm.popupStatus = Object.assign({}, vm.realTimeEventList[0]); |
|
792 |
+ vm.address.node_id = vm.popupStatus.node_id; |
|
793 |
+ vm.statusSearch(true); |
|
794 |
+ vm.eventFlage = true; |
|
795 |
+ vm.showPopup(); |
|
796 |
+ } |
|
797 |
+ // 차트 데이터 생성 |
|
798 |
+ vm.drawChars(response.data.countList); |
|
799 |
+ }).catch(function (error) { |
|
800 |
+ console.log("error : ", error); |
|
801 |
+ }).finally(function () { |
|
802 |
+ // 항상 실행되는 영역 |
|
803 |
+ if (vm.address.guGun_dong_cd == null) { |
|
804 |
+ layer = 'sigungu'; |
|
805 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); |
|
806 |
+ } else if (vm.address.node_id != null) { |
|
807 |
+ layer = 'crslk'; |
|
865 | 808 |
// epsg = "EPSG:4326"; |
866 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getNodeGeoJson.json", "multiPolygonLayer", "EPSG:4326", baseStyles["MultiPolygon"], "MultiPolygon",pointAnim, vm.address.dong_cd, vm.address.node_id ); |
|
867 |
- }else if(vm.address.dong_dong_cd != null){ |
|
868 |
- layer = 'node'; |
|
869 |
- epsg = "EPSG:4326"; |
|
870 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongGeoJson.json","multiPolygonLayer","EPSG:5181",baseStyles["MultiPolygon"],"MultiPolygon",pointAnim,vm.address.dong_cd); |
|
871 |
- }else{ |
|
872 |
- vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json","multiPolygonLayer","EPSG:5181",baseStyles["MultiPolygon"],"MultiPolygon",pointAnim,vm.address.dong_cd); |
|
873 |
- } |
|
874 |
- });; |
|
809 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getNodeGeoJson.json", "multiPolygonLayer", "EPSG:4326", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd, vm.address.node_id); |
|
810 |
+ } else if (vm.address.dong_dong_cd != null) { |
|
811 |
+ layer = 'node'; |
|
812 |
+ epsg = "EPSG:4326"; |
|
813 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); |
|
814 |
+ } else { |
|
815 |
+ vm.$refs.open_layers.addVectorLayerByUrl("/common/getDongsGeoJson.json", "multiPolygonLayer", "EPSG:5181", baseStyles["MultiPolygon"], "MultiPolygon", pointAnim, vm.address.dong_cd); |
|
816 |
+ } |
|
817 |
+ });; |
|
875 | 818 |
}, |
876 |
- |
|
819 |
+ |
|
877 | 820 |
// 서치 버튼 클릭 |
878 | 821 |
statusSearch: function (pointAnim) { |
879 | 822 |
var vm = this; |
880 | 823 |
|
881 | 824 |
|
882 | 825 |
// 검색 버튼 클릭 |
883 |
- if(pointAnim == true){ |
|
884 |
- if(this.$refs.open_layers.map.getOverlayById('multiPopup') != null){ |
|
885 |
- this.$refs.open_layers.map.removeOverlay(this.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
886 |
- vm.timer = setInterval(()=>{ |
|
887 |
- vm.statusSearch(false); |
|
888 |
- },5000) |
|
889 |
- } |
|
890 |
- // 자동 처리 |
|
891 |
- }else{ |
|
892 |
- if(this.$refs.open_layers.map.getOverlayById('multiPopup') != null){ |
|
893 |
- return false; |
|
894 |
- } |
|
895 |
- } |
|
826 |
+ if (pointAnim == true) { |
|
827 |
+ if (this.$refs.open_layers.map.getOverlayById('multiPopup') != null) { |
|
828 |
+ this.$refs.open_layers.map.removeOverlay(this.$refs.open_layers.map.getOverlayById('multiPopup')); |
|
829 |
+ vm.timer = setInterval(() => { |
|
830 |
+ vm.statusSearch(false); |
|
831 |
+ }, 5000) |
|
832 |
+ } |
|
833 |
+ // 자동 처리 |
|
834 |
+ } else { |
|
835 |
+ if (this.$refs.open_layers.map.getOverlayById('multiPopup') != null) { |
|
836 |
+ return false; |
|
837 |
+ } |
|
838 |
+ } |
|
896 | 839 |
// 이벤트 발생시 다시 제자리로 |
897 |
- if(this.eventFlage == true){ |
|
840 |
+ if (this.eventFlage == true) { |
|
898 | 841 |
this.isPopupVisible = false; |
899 |
- this.eventFlage = false; |
|
900 |
- this.address.node_id = null; |
|
901 |
- pointAnim = true; |
|
842 |
+ this.eventFlage = false; |
|
843 |
+ this.address.node_id = null; |
|
844 |
+ pointAnim = true; |
|
902 | 845 |
} |
903 | 846 |
|
904 |
- if(pointAnim == null){ |
|
847 |
+ if (pointAnim == null) { |
|
905 | 848 |
pointAnim = true; |
906 | 849 |
} |
907 | 850 |
|
908 | 851 |
//지도 영역 수정 |
909 |
- this.getStatusData(pointAnim); |
|
910 |
- |
|
852 |
+ this.getStatusData(pointAnim); |
|
853 |
+ |
|
911 | 854 |
this.situationOccurrenceStatusSearch(); |
912 | 855 |
this.troubleOccurrenceStatusSearch(); |
913 | 856 |
}, |
914 | 857 |
|
915 | 858 |
// 차트 그리기 |
916 |
- drawChars : function(data){ |
|
859 |
+ drawChars: function (data) { |
|
917 | 860 |
|
918 | 861 |
// 횡단보도별 무단횡단 차트 정보 |
919 |
- var wtrmsCount = data.sort(function(a, b) { |
|
862 |
+ var wtrmsCount = data.sort(function (a, b) { |
|
920 | 863 |
return b.wtrmsCount - a.wtrmsCount; |
921 | 864 |
}); |
922 |
- wtrmsCount = wtrmsCount.slice(0,10); |
|
865 |
+ wtrmsCount = wtrmsCount.slice(0, 10); |
|
923 | 866 |
|
924 | 867 |
// 신호연장 차트 정보 |
925 |
- var signExtnCount = data.sort(function(a, b) { |
|
868 |
+ var signExtnCount = data.sort(function (a, b) { |
|
926 | 869 |
return b.signExtnCount - a.signExtnCount; |
927 | 870 |
}); |
928 |
- signExtnCount = signExtnCount.slice(0,10); |
|
871 |
+ signExtnCount = signExtnCount.slice(0, 10); |
|
929 | 872 |
|
930 | 873 |
// 우회전 위반 차트 정보 |
931 |
- var rittrnVioltVhcleCount = data.sort(function(a, b) { |
|
874 |
+ var rittrnVioltVhcleCount = data.sort(function (a, b) { |
|
932 | 875 |
return b.rittrnVioltVhcleCount - a.rittrnVioltVhcleCount; |
933 | 876 |
}); |
934 |
- rittrnVioltVhcleCount = rittrnVioltVhcleCount.slice(0,5); |
|
877 |
+ rittrnVioltVhcleCount = rittrnVioltVhcleCount.slice(0, 5); |
|
935 | 878 |
|
936 | 879 |
// 장애발생 차트 정보 |
937 |
- var troblOcrnCount = data.sort(function(a, b) { |
|
880 |
+ var troblOcrnCount = data.sort(function (a, b) { |
|
938 | 881 |
return b.troblOcrnCount - a.troblOcrnCount; |
939 | 882 |
}); |
940 |
- troblOcrnCount = troblOcrnCount.slice(0,5); |
|
941 |
- |
|
883 |
+ troblOcrnCount = troblOcrnCount.slice(0, 5); |
|
884 |
+ |
|
942 | 885 |
// 차트 생성 |
943 |
- if(this.chart1.xAxis == null){ |
|
944 |
- this.chart1 = COMMON_CHART.createChartByIds("chartdiv1",this.chart1, wtrmsCount,"wtrmsCount","crslk_nm"); |
|
945 |
- this.chart2 = COMMON_CHART.createChartByIds("chartdiv2",this.chart2, signExtnCount,"signExtnCount","crslk_nm"); |
|
946 |
- this.chart3 = COMMON_CHART.createChartByIds("chartdiv3",this.chart3, rittrnVioltVhcleCount,"rittrnVioltVhcleCount","crslk_nm"); |
|
947 |
- this.chart4 = COMMON_CHART.createChartByIds("chartdiv4",this.chart4, troblOcrnCount,"troblOcrnCount","crslk_nm"); |
|
948 |
- }else{ |
|
949 |
- // 데이터 변경 |
|
886 |
+ if (this.chart1.xAxis == null) { |
|
887 |
+ this.chart1 = COMMON_CHART.createChartByIds("chartdiv1", this.chart1, wtrmsCount, "wtrmsCount", "crslk_nm"); |
|
888 |
+ this.chart2 = COMMON_CHART.createChartByIds("chartdiv2", this.chart2, signExtnCount, "signExtnCount", "crslk_nm"); |
|
889 |
+ this.chart3 = COMMON_CHART.createChartByIds("chartdiv3", this.chart3, rittrnVioltVhcleCount, "rittrnVioltVhcleCount", "crslk_nm"); |
|
890 |
+ this.chart4 = COMMON_CHART.createChartByIds("chartdiv4", this.chart4, troblOcrnCount, "troblOcrnCount", "crslk_nm"); |
|
891 |
+ } else { |
|
892 |
+ // 데이터 변경 |
|
950 | 893 |
this.chart1.xAxis.data.setAll(wtrmsCount); |
951 | 894 |
this.chart1.series.data.setAll(wtrmsCount); |
952 | 895 |
this.chart2.xAxis.data.setAll(signExtnCount); |
... | ... | @@ -955,7 +898,7 @@ |
955 | 898 |
this.chart3.series.data.setAll(rittrnVioltVhcleCount); |
956 | 899 |
this.chart4.xAxis.data.setAll(troblOcrnCount); |
957 | 900 |
this.chart4.series.data.setAll(troblOcrnCount); |
958 |
- } |
|
901 |
+ } |
|
959 | 902 |
}, |
960 | 903 |
|
961 | 904 |
//상황 발행 현황 검색 |
... | ... | @@ -968,16 +911,16 @@ |
968 | 911 |
headers: { |
969 | 912 |
"Content-Type": "application/json; charset=UTF-8", |
970 | 913 |
}, |
971 |
- data: { "dong_cd": vm.address.dong_cd, "start_dt": vm.condition.date + ' ' + vm.condition.start_time , "end_dt" : vm.condition.date + ' ' + vm.condition.end_time , "layer" : layer}, |
|
972 |
- // data: vm.address , |
|
914 |
+ data: { "dong_cd": vm.address.dong_cd, "start_dt": vm.condition.date + ' ' + vm.condition.start_time, "end_dt": vm.condition.date + ' ' + vm.condition.end_time, "layer": layer }, |
|
915 |
+ // data: vm.address , |
|
973 | 916 |
}) |
974 |
- .then(function (response) { |
|
917 |
+ .then(function (response) { |
|
975 | 918 |
vm.statusControlCountList = response.data; |
976 | 919 |
}) |
977 |
- .catch(function (error) { |
|
920 |
+ .catch(function (error) { |
|
978 | 921 |
}); |
979 | 922 |
}, |
980 |
- |
|
923 |
+ |
|
981 | 924 |
//상황 발행 현황 검색 |
982 | 925 |
eventSelectByRegion: function () { |
983 | 926 |
//검색 데이터 |
... | ... | @@ -988,36 +931,36 @@ |
988 | 931 |
headers: { |
989 | 932 |
"Content-Type": "application/json; charset=UTF-8", |
990 | 933 |
}, |
991 |
- data: vm.address , |
|
934 |
+ data: vm.address, |
|
992 | 935 |
}) |
993 |
- .then(function (response) { |
|
936 |
+ .then(function (response) { |
|
994 | 937 |
vm.chartData.wtrms = response.data.wtrms; |
995 | 938 |
vm.chartData.signExtn = response.data.signExtn; |
996 | 939 |
vm.chartData.rittrnVioltVhcle = response.data.rittrnVioltVhcle; |
997 |
- vm.chartData.troblOcrn = response.data.troblOcrn; |
|
940 |
+ vm.chartData.troblOcrn = response.data.troblOcrn; |
|
998 | 941 |
}) |
999 | 942 |
.catch(function (error) { |
1000 | 943 |
console.log("eventSelectByRegion - error : ", error); |
1001 | 944 |
}); |
1002 | 945 |
}, |
1003 |
- |
|
946 |
+ |
|
1004 | 947 |
//실시간 발생 현황 - 상황 발행 현황 검색 |
1005 | 948 |
situationOccurrenceStatusSearch: function () { |
1006 | 949 |
//검색 데이터 |
1007 | 950 |
const vm = this; |
1008 |
- vm.situationOccurrenceStatusListSearch.condition=vm.condition; |
|
1009 |
- vm.situationOccurrenceStatusListSearch.address=vm.address; |
|
951 |
+ vm.situationOccurrenceStatusListSearch.condition = vm.condition; |
|
952 |
+ vm.situationOccurrenceStatusListSearch.address = vm.address; |
|
1010 | 953 |
axios({ |
1011 | 954 |
url: "/statusControl/situationOccurrenceStatusSearch.json", |
1012 | 955 |
method: "post", |
1013 | 956 |
headers: { |
1014 | 957 |
"Content-Type": "application/json; charset=UTF-8", |
1015 | 958 |
}, |
1016 |
- data: vm.situationOccurrenceStatusListSearch , |
|
959 |
+ data: vm.situationOccurrenceStatusListSearch, |
|
1017 | 960 |
}) |
1018 |
- .then(function (response) { |
|
961 |
+ .then(function (response) { |
|
1019 | 962 |
vm.situationOccurrenceStatusList = response.data.situationOccurrenceStatusList; |
1020 |
- vm.situationOccurrenceStatusListCount = response.data.situationOccurrenceStatusListCount; |
|
963 |
+ vm.situationOccurrenceStatusListCount = response.data.situationOccurrenceStatusListCount; |
|
1021 | 964 |
}) |
1022 | 965 |
.catch(function (error) { |
1023 | 966 |
console.log("statusSearch - error : ", error); |
... | ... | @@ -1034,11 +977,11 @@ |
1034 | 977 |
headers: { |
1035 | 978 |
"Content-Type": "application/json; charset=UTF-8", |
1036 | 979 |
}, |
1037 |
- data: vm.troubleOccurrenceStatusListSearch , |
|
980 |
+ data: vm.troubleOccurrenceStatusListSearch, |
|
1038 | 981 |
}) |
1039 |
- .then(function (response) { |
|
982 |
+ .then(function (response) { |
|
1040 | 983 |
vm.troubleOccurrenceStatusList = response.data.troubleOccurrenceStatusList; |
1041 |
- vm.troubleOccurrenceStatusListCount = response.data.troubleOccurrenceStatusListCount; |
|
984 |
+ vm.troubleOccurrenceStatusListCount = response.data.troubleOccurrenceStatusListCount; |
|
1042 | 985 |
}) |
1043 | 986 |
.catch(function (error) { |
1044 | 987 |
console.log("statusSearch - error : ", error); |
... | ... | @@ -1046,81 +989,84 @@ |
1046 | 989 |
}, |
1047 | 990 |
|
1048 | 991 |
// 이벤트 발생 상세정보 조회(클릭 이벤트) |
1049 |
- eventSelectList: function() { |
|
992 |
+ eventSelectList: function () { |
|
1050 | 993 |
const vm = this; |
1051 | 994 |
axios({ |
1052 |
- url: "/statusControl/eventSelectList.json", |
|
1053 |
- method: "post", |
|
1054 |
- headers: { |
|
1055 |
- "Content-Type": "application/json; charset=UTF-8", |
|
1056 |
- }, |
|
1057 |
- data: vm.eventListSearch, |
|
1058 |
- }) |
|
1059 |
- .then(function(response) { |
|
1060 |
- vm.eventListCount = response.data.eventListCount; |
|
1061 |
- vm.eventList = response.data.eventList; |
|
1062 |
- vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
995 |
+ url: "/statusControl/eventSelectList.json", |
|
996 |
+ method: "post", |
|
997 |
+ headers: { |
|
998 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
999 |
+ }, |
|
1000 |
+ data: vm.eventListSearch, |
|
1063 | 1001 |
}) |
1064 |
- .catch(function(error) { |
|
1065 |
- console.log("errorSelectList - error : ", error); |
|
1066 |
- alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
1067 |
- }); |
|
1002 |
+ .then(function (response) { |
|
1003 |
+ vm.eventListCount = response.data.eventListCount; |
|
1004 |
+ vm.eventList = response.data.eventList; |
|
1005 |
+ vm.eventIdx = response.data.eventListCount - (vm.eventListSearch.currentPage - 1) * vm.eventListSearch.perPage; |
|
1006 |
+ }) |
|
1007 |
+ .catch(function (error) { |
|
1008 |
+ console.log("errorSelectList - error : ", error); |
|
1009 |
+ alert("상황발생 목록 조회 오류, 관리자에게 문의해주세요."); |
|
1010 |
+ }); |
|
1068 | 1011 |
}, |
1069 |
- |
|
1012 |
+ |
|
1070 | 1013 |
|
1071 | 1014 |
// 날짜 초기화 |
1072 |
- initialDate(){ |
|
1073 |
- this.condition.date = COMMON_UTIL.today(); |
|
1015 |
+ initialDate() { |
|
1016 |
+ this.condition.date = COMMON_UTIL.today(); |
|
1074 | 1017 |
this.condition.start_time = "00:00"; |
1075 | 1018 |
this.condition.end_time = "23:59"; |
1076 | 1019 |
|
1077 |
- this.eventListSearch.sigungu_cd = this.address.guGun_dong_cd; |
|
1020 |
+ this.eventListSearch.sigungu_cd = this.address.guGun_dong_cd; |
|
1078 | 1021 |
this.eventListSearch.dong_cd = this.address.dong_cd; |
1079 |
- this.eventListSearch.dong_dong_cd = this.address.node_id; |
|
1022 |
+ this.eventListSearch.dong_dong_cd = this.address.node_id; |
|
1080 | 1023 |
this.eventListSearch.node_id = this.address.node_id; |
1081 | 1024 |
}, |
1082 | 1025 |
|
1083 |
- init(){ |
|
1026 |
+ init() { |
|
1084 | 1027 |
this.statusControlCount(); |
1085 | 1028 |
this.eventSelectByRegion(); |
1086 | 1029 |
const clusterLayerExists = this.$refs.open_layers.map.getLayers().getArray().some(layer => { |
1087 | 1030 |
return layer.get('name') === "clusterLayer"; |
1088 |
- }); |
|
1031 |
+ }); |
|
1089 | 1032 |
|
1090 |
- if(clusterLayerExists){ |
|
1091 |
- this.$refs.open_layers.addClusterLayerByUrl( "/common/getNodeGeoJsonForWtrmsCrosngStatusControl.json", "clusterLayer", "EPSG:5181", baseStyles["clusterStyle"], "clusterStyle", this.address.dong_cd ); |
|
1033 |
+ if (clusterLayerExists) { |
|
1034 |
+ this.$refs.open_layers.addClusterLayerByUrl("/common/getNodeGeoJsonForWtrmsCrosngStatusControl.json", "clusterLayer", "EPSG:5181", baseStyles["clusterStyle"], "clusterStyle", this.address.dong_cd); |
|
1092 | 1035 |
} |
1093 |
- |
|
1036 |
+ |
|
1094 | 1037 |
this.$refs.open_layers.addVectorLayerByUrl('/common/getCrslksGeoJson.json', 'crslkLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd, this.address.node_id); |
1095 | 1038 |
|
1096 | 1039 |
this.situationOccurrenceStatusSearch(); |
1097 | 1040 |
this.troubleOccurrenceStatusSearch(); |
1098 | 1041 |
}, |
1042 |
+ toggleSection(section) { |
|
1043 |
+ this.currentSection = section; |
|
1044 |
+ }, |
|
1099 | 1045 |
|
1100 | 1046 |
}, |
1101 |
- watch: { |
|
1102 |
- "condition.date" : function(newValue,oldValue){ |
|
1103 |
- |
|
1047 |
+ watch: { |
|
1048 |
+ "condition.date": function (newValue, oldValue) { |
|
1049 |
+ |
|
1104 | 1050 |
}, |
1105 |
- "condition.start_time" : function(newValue,oldValue){ |
|
1106 |
- |
|
1051 |
+ "condition.start_time": function (newValue, oldValue) { |
|
1052 |
+ |
|
1107 | 1053 |
}, |
1108 |
- "condition.end_time" : function(newValue,oldValue){ |
|
1109 |
- |
|
1054 |
+ "condition.end_time": function (newValue, oldValue) { |
|
1055 |
+ |
|
1110 | 1056 |
}, |
1111 |
- "now_zoom": function (newValue, oldValue) { |
|
1057 |
+ "now_zoom": function (newValue, oldValue) { |
|
1112 | 1058 |
}, |
1113 |
- "chartData.wtrms":function (newValue, oldValue) { |
|
1059 |
+ "chartData.wtrms": function (newValue, oldValue) { |
|
1114 | 1060 |
COMMON_CHART.createChartById("chartdiv1", this.chart1, newValue); |
1115 | 1061 |
}, |
1116 |
- "chartData.signExtn":function (newValue, oldValue) { |
|
1117 |
- COMMON_CHART.createChartById("chartdiv2",this.chart2, newValue); |
|
1062 |
+ "chartData.signExtn": function (newValue, oldValue) { |
|
1063 |
+ COMMON_CHART.createChartById("chartdiv2", this.chart2, newValue); |
|
1118 | 1064 |
}, |
1119 |
- "chartData.rittrnVioltVhcle":function (newValue, oldValue) { |
|
1065 |
+ "chartData.rittrnVioltVhcle": function (newValue, oldValue) { |
|
1120 | 1066 |
COMMON_CHART.createChartById("chartdiv3", this.chart3, newValue); |
1121 | 1067 |
}, |
1122 |
- "chartData.troblOcrn":function (newValue, oldValue) { |
|
1123 |
- COMMON_CHART.createChartById("chartdiv4", this.chart4,newValue); |
|
1068 |
+ "chartData.troblOcrn": function (newValue, oldValue) { |
|
1069 |
+ COMMON_CHART.createChartById("chartdiv4", this.chart4, newValue); |
|
1124 | 1070 |
}, |
1125 | 1071 |
}, |
1126 | 1072 |
computed: {}, |
... | ... | @@ -1135,89 +1081,40 @@ |
1135 | 1081 |
var vm = this; |
1136 | 1082 |
this.initialDate(); |
1137 | 1083 |
this.$refs.open_layers.setBaseMap(vworldBaseLayer); |
1138 |
- this.$refs.dongSelecter.default_select(false,true,'22','22030'); |
|
1084 |
+ this.$refs.dongSelecter.default_select(false, true, '22', '22030'); |
|
1139 | 1085 |
this.statusSearch(); |
1140 |
- this.timer = setInterval(()=>{ |
|
1141 |
- this.statusSearch(false); |
|
1142 |
- },5000) |
|
1086 |
+ this.timer = setInterval(() => { |
|
1087 |
+ this.statusSearch(false); |
|
1088 |
+ }, 5000) |
|
1143 | 1089 |
}, |
1144 | 1090 |
}; |
1145 | 1091 |
</script> |
1146 | 1092 |
|
1147 | 1093 |
<style scoped> |
1148 |
-@media all and (max-width: 479px) { |
|
1149 |
- .top h3 { |
|
1150 |
- font-size: 15px !important; |
|
1151 |
- } |
|
1152 |
- .top p { |
|
1153 |
- padding-right: 1rem; |
|
1154 |
- } |
|
1155 |
- .chart { |
|
1156 |
- width: -webkit-fill-available !important; |
|
1157 |
- } |
|
1158 |
- |
|
1159 |
- .top { |
|
1160 |
- overflow: scroll; |
|
1161 |
- } |
|
1162 |
- .top ul { |
|
1163 |
- width: 137rem; |
|
1164 |
- overflow: hidden; |
|
1165 |
- justify-content: space-between !important; |
|
1166 |
- padding: 2rem 1rem !important; |
|
1167 |
- } |
|
1168 |
- .top li { |
|
1169 |
- display: flex; |
|
1170 |
- align-items: center; |
|
1171 |
- } |
|
1172 |
- .search { |
|
1173 |
- width: inherit; |
|
1174 |
- } |
|
1175 |
- .toggle { |
|
1176 |
- color: #fff; |
|
1177 |
- font-weight: bold; |
|
1178 |
- background: #13833b; |
|
1179 |
- display: block !important; |
|
1180 |
- position: absolute; |
|
1181 |
- z-index: 150; |
|
1182 |
- top: 7.2rem; |
|
1183 |
- right: 1rem; |
|
1184 |
- } |
|
1185 |
- .wrap { |
|
1186 |
- height: auto !important; |
|
1187 |
- width: inherit; |
|
1188 |
- margin: 0 !important; |
|
1189 |
- } |
|
1190 |
- .slide-content { |
|
1191 |
- position: absolute; |
|
1192 |
- z-index: 97; |
|
1193 |
- top: 6rem; |
|
1194 |
- /* left: -31rem; */ |
|
1195 |
- width: -webkit-fill-available; |
|
1196 |
- height: 100vh; |
|
1197 |
- background-color: #f0f0f0; |
|
1198 |
- transition: transform 0.3s ease; |
|
1199 |
- transform: translateX(100%); |
|
1200 |
- } |
|
1201 |
- |
|
1202 |
- .slide-content.active { |
|
1203 |
- transform: translateX(0); |
|
1204 |
- } |
|
1094 |
+.search label { |
|
1095 |
+ line-height: 3rem; |
|
1205 | 1096 |
} |
1206 |
-.search label{line-height: 3rem;} |
|
1097 |
+ |
|
1207 | 1098 |
.tab-buttons .ulbox { |
1208 | 1099 |
height: calc(100% - 11rem); |
1209 | 1100 |
overflow: scroll; |
1210 | 1101 |
overflow-x: hidden; |
1211 | 1102 |
} |
1103 |
+ |
|
1212 | 1104 |
.ulbox ul { |
1213 | 1105 |
height: 30rem; |
1214 | 1106 |
} |
1215 |
-.ulbox ul li p{font-size: 13px;} |
|
1107 |
+ |
|
1108 |
+.ulbox ul li p { |
|
1109 |
+ font-size: 13px; |
|
1110 |
+} |
|
1111 |
+ |
|
1216 | 1112 |
.popup-btn { |
1217 | 1113 |
position: absolute; |
1218 | 1114 |
bottom: 3rem; |
1219 | 1115 |
right: 28%; |
1220 | 1116 |
} |
1117 |
+ |
|
1221 | 1118 |
.popup-container { |
1222 | 1119 |
position: fixed; |
1223 | 1120 |
top: 0; |
... | ... | @@ -1241,26 +1138,30 @@ |
1241 | 1138 |
border-radius: 5px; |
1242 | 1139 |
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); |
1243 | 1140 |
} |
1141 |
+ |
|
1244 | 1142 |
.popup-content ul { |
1245 | 1143 |
padding: 2rem 0; |
1246 | 1144 |
} |
1145 |
+ |
|
1247 | 1146 |
.popup-content ul li { |
1248 | 1147 |
font-size: 16px; |
1249 | 1148 |
} |
1149 |
+ |
|
1250 | 1150 |
.popup-content h2 { |
1251 | 1151 |
margin-top: 0; |
1252 | 1152 |
font-size: 2.5rem; |
1253 | 1153 |
color: #bf1a21; |
1254 | 1154 |
} |
1255 |
-.toggle { |
|
1256 |
- display: none; |
|
1257 |
-} |
|
1258 |
-.chart > div { |
|
1155 |
+ |
|
1156 |
+ |
|
1157 |
+.chart>div { |
|
1259 | 1158 |
height: 100%; |
1260 | 1159 |
} |
1160 |
+ |
|
1261 | 1161 |
.chart .box { |
1262 | 1162 |
height: 85%; |
1263 | 1163 |
} |
1164 |
+ |
|
1264 | 1165 |
.chart { |
1265 | 1166 |
width: 20%; |
1266 | 1167 |
height: 85%; |
... | ... | @@ -1268,25 +1169,31 @@ |
1268 | 1169 |
right: 2rem; |
1269 | 1170 |
top: 10rem; |
1270 | 1171 |
} |
1172 |
+ |
|
1271 | 1173 |
.chart h2 { |
1272 | 1174 |
border-radius: 10px 10px 0 0; |
1273 | 1175 |
} |
1176 |
+ |
|
1274 | 1177 |
.search .box ul li { |
1275 | 1178 |
text-align: left; |
1276 | 1179 |
} |
1180 |
+ |
|
1277 | 1181 |
.search .box button { |
1278 | 1182 |
font-size: 1.3rem; |
1279 | 1183 |
padding: 0.5rem 1.3rem; |
1280 | 1184 |
} |
1185 |
+ |
|
1281 | 1186 |
.search .box button.gray-btn.active { |
1282 | 1187 |
/* Your CSS styles for the button when it's active (clicked) */ |
1283 | 1188 |
background-color: #13833b; |
1284 | 1189 |
color: #fff; |
1285 | 1190 |
/* Add any other styles you want to apply when the button is active */ |
1286 | 1191 |
} |
1192 |
+ |
|
1287 | 1193 |
.search .box button img { |
1288 | 1194 |
width: 20px; |
1289 | 1195 |
} |
1196 |
+ |
|
1290 | 1197 |
.btn_set { |
1291 | 1198 |
position: relative; |
1292 | 1199 |
border-bottom: 1px solid #e5e3e3; |
... | ... | @@ -1323,9 +1230,8 @@ |
1323 | 1230 |
z-index: 100; |
1324 | 1231 |
background: #fdfdf2; |
1325 | 1232 |
top: 0; |
1326 |
- /* width: -webkit-fill-available; */ |
|
1327 |
- height: 86px !important; |
|
1328 | 1233 |
} |
1234 |
+ |
|
1329 | 1235 |
.top p { |
1330 | 1236 |
font-size: 15px; |
1331 | 1237 |
} |
... | ... | @@ -1348,24 +1254,76 @@ |
1348 | 1254 |
text-align: end; |
1349 | 1255 |
} |
1350 | 1256 |
|
1351 |
-.wrap { |
|
1352 |
- z-index: 100; |
|
1353 |
- top: 0; |
|
1354 |
- height: inherit; |
|
1355 |
-} |
|
1356 |
- |
|
1357 |
-.left { |
|
1358 |
- background: #fff; |
|
1359 |
- height: 100%; |
|
1360 |
-} |
|
1361 |
- |
|
1362 |
-.right { |
|
1363 |
- width: -webkit-fill-available; |
|
1364 |
- position: relative; |
|
1365 |
- height: 100%; |
|
1366 |
-} |
|
1367 | 1257 |
.map { |
1368 | 1258 |
width: 100%; |
1369 |
- height: calc(100% - 86px); |
|
1370 | 1259 |
} |
1371 |
-</style> |
|
1260 |
+ |
|
1261 |
+@media all and (max-width:479px) { |
|
1262 |
+ |
|
1263 |
+ .search, |
|
1264 |
+ .top { |
|
1265 |
+ z-index: 1; |
|
1266 |
+ } |
|
1267 |
+ |
|
1268 |
+ .search-mobile { |
|
1269 |
+ background-color: #fff; |
|
1270 |
+ width: 60%; |
|
1271 |
+ } |
|
1272 |
+ |
|
1273 |
+ .m-b{ |
|
1274 |
+ flex-direction: column; |
|
1275 |
+ } |
|
1276 |
+ |
|
1277 |
+ .top{ |
|
1278 |
+ position: absolute; |
|
1279 |
+ top: 50%; |
|
1280 |
+ transform: translateY(-50%); |
|
1281 |
+ } |
|
1282 |
+ .flex-end{ |
|
1283 |
+ flex-direction: column; |
|
1284 |
+ align-items: flex-end; |
|
1285 |
+ } |
|
1286 |
+ |
|
1287 |
+ .chart{ |
|
1288 |
+ width: 100%; |
|
1289 |
+ top: 43%; |
|
1290 |
+ transform: translateY(-50%); |
|
1291 |
+ right: 0; |
|
1292 |
+ |
|
1293 |
+ } |
|
1294 |
+ |
|
1295 |
+ .chart h2{ |
|
1296 |
+ font-size: 1.4rem; |
|
1297 |
+ } |
|
1298 |
+ .grid2_8 { |
|
1299 |
+ grid-template-columns: 1fr; |
|
1300 |
+ grid-template-rows: 0 1fr; |
|
1301 |
+ } |
|
1302 |
+ .mobile-nav{ |
|
1303 |
+ z-index: 1; |
|
1304 |
+ } |
|
1305 |
+ .mobile-nav ul { |
|
1306 |
+ display: grid; |
|
1307 |
+ grid-template-columns: 1fr 1fr 1fr 1fr; |
|
1308 |
+ background: #fff; |
|
1309 |
+ box-shadow: 0 4px 4px 4px #aaa; |
|
1310 |
+ } |
|
1311 |
+ |
|
1312 |
+ a { |
|
1313 |
+ display: block; |
|
1314 |
+ width: 100%; |
|
1315 |
+ height: 100%; |
|
1316 |
+ color: #13833b; |
|
1317 |
+ font-size: 1.3rem; |
|
1318 |
+ padding: 10px; |
|
1319 |
+ text-align: center; |
|
1320 |
+ } |
|
1321 |
+ |
|
1322 |
+ i { |
|
1323 |
+ font-size: 3rem; |
|
1324 |
+ color: #13833b; |
|
1325 |
+ display: block; |
|
1326 |
+ margin-bottom: 5px; |
|
1327 |
+ } |
|
1328 |
+ |
|
1329 |
+}</style> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?