
--- client/resources/css/main.css
+++ client/resources/css/main.css
... | ... | @@ -1,5 +1,5 @@ |
1 | 1 |
/* 현황관제 */ |
2 |
-.search{ height: inherit; width: 330px; background: #eaebec;} |
|
2 |
+.search{ height: inherit; width: 330px; } |
|
3 | 3 |
.search label{width: max-content; font-size: 14px;} |
4 | 4 |
.search p{font-size: 14px;} |
5 | 5 |
.search select{width: 20rem;} |
... | ... | @@ -19,13 +19,12 @@ |
19 | 19 |
.iconlist li:nth-child(2) div{background-image: url(../images/icon/Signalextensiongray.png);} |
20 | 20 |
.iconlist li:nth-child(2).active div{background-image: url(../images/icon/Signalextensiongreen.png);} |
21 | 21 |
|
22 |
-.top{position: absolute; z-index: 100; background: #fff; top: 0;} |
|
22 |
+.top{position: absolute; z-index: 100; background: #fff; top: 0; width: -webkit-fill-available;} |
|
23 | 23 |
.top p { |
24 | 24 |
font-size: 15px; |
25 | 25 |
} |
26 | 26 |
.top ul { |
27 | 27 |
padding: 1rem 0; |
28 |
- width: 153rem; |
|
29 | 28 |
} |
30 | 29 |
.top li { |
31 | 30 |
width: calc(100% / 6); |
--- client/views/component/map/map.vue
+++ client/views/component/map/map.vue
... | ... | @@ -25,8 +25,8 @@ |
25 | 25 |
this.map = new Map({ |
26 | 26 |
target: this.$refs.map, |
27 | 27 |
view: new View({ |
28 |
- center: fromLonLat([126.9784, 37.5665]), // Centered around Seoul, Korea |
|
29 |
- zoom: 8, |
|
28 |
+ center: fromLonLat([128.55917070703123, 35.87169009414457]), // 대구광역시 서구청 |
|
29 |
+ zoom: 14, |
|
30 | 30 |
}), |
31 | 31 |
layers: [ new TileLayer({ |
32 | 32 |
source: new OSM(), |
--- client/views/index.html
+++ client/views/index.html
... | ... | @@ -12,6 +12,8 @@ |
12 | 12 |
<link rel="stylesheet" href="/client/resources/css/layout.css" /> |
13 | 13 |
<link rel="stylesheet" href="/client/resources/css/responsive.css" /> |
14 | 14 |
<link rel="stylesheet" href="/client/resources/css/main.css" /> |
15 |
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol/dist/ol.css" /> |
|
16 |
+ |
|
15 | 17 |
<title>Node Vue Web</title> |
16 | 18 |
</head> |
17 | 19 |
|
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
... | ... | @@ -6,23 +6,29 @@ |
6 | 6 |
</router-link> |
7 | 7 |
</div> |
8 | 8 |
<div class="header_menu"> |
9 |
- <nav class="flex"> |
|
9 |
+ <nav class="flex"> |
|
10 | 10 |
<router-link to="/Introduction.page"> |
11 | 11 |
<span |
12 | 12 |
@mouseover="showDropdown = true" |
13 | 13 |
@mouseleave="showDropdown = false" |
14 | 14 |
>플랫폼 소개 |
15 | 15 |
</span> |
16 |
- <div class=" nav" v-show="showDropdown" @mouseover="showDropdown = true" @mouseleave="showDropdown = false"> |
|
17 |
- <div class="menu flex-end"> |
|
18 |
- <ul > |
|
16 |
+ <div |
|
17 |
+ class="nav" |
|
18 |
+ v-show="showDropdown" |
|
19 |
+ @mouseover="showDropdown = true" |
|
20 |
+ @mouseleave="showDropdown = false" |
|
21 |
+ > |
|
22 |
+ <div class="menu flex-end"> |
|
23 |
+ <ul> |
|
19 | 24 |
<li |
20 |
- |
|
21 | 25 |
v-for="option in dropdownOptions" |
22 | 26 |
:key="option.value" |
23 | 27 |
@click="navigateToPage(option)" |
24 | 28 |
> |
25 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
29 |
+ <router-link :to="option.route">{{ |
|
30 |
+ option.label |
|
31 |
+ }}</router-link> |
|
26 | 32 |
</li> |
27 | 33 |
</ul> |
28 | 34 |
<ul> |
... | ... | @@ -31,41 +37,45 @@ |
31 | 37 |
:key="option.value" |
32 | 38 |
@click="navigateToPage(option)" |
33 | 39 |
> |
34 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
40 |
+ <router-link :to="option.route">{{ |
|
41 |
+ option.label |
|
42 |
+ }}</router-link> |
|
35 | 43 |
</li> |
36 | 44 |
</ul> |
37 |
- <ul |
|
38 |
- > |
|
39 |
- <li |
|
40 |
- v-for="option in dropdownOptions5" |
|
41 |
- :key="option.value" |
|
42 |
- @click="navigateToPage(option)" |
|
43 |
- > |
|
44 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
45 |
- </li> |
|
46 |
- </ul> |
|
47 |
- <ul |
|
48 |
- > |
|
49 |
- <li |
|
50 |
- v-for="option in dropdownOptions3" |
|
51 |
- :key="option.value" |
|
52 |
- @click="navigateToPage(option)" |
|
53 |
- > |
|
54 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
55 |
- </li> |
|
56 |
- </ul> |
|
57 |
- <ul |
|
58 |
- > |
|
59 |
- <li |
|
60 |
- v-for="option in dropdownOptions4" |
|
61 |
- :key="option.value" |
|
62 |
- @click="navigateToPage(option)" |
|
63 |
- > |
|
64 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
65 |
- </li> |
|
66 |
- </ul> |
|
67 |
- </div> |
|
68 |
- |
|
45 |
+ <ul> |
|
46 |
+ <li |
|
47 |
+ v-for="option in dropdownOptions5" |
|
48 |
+ :key="option.value" |
|
49 |
+ @click="navigateToPage(option)" |
|
50 |
+ > |
|
51 |
+ <router-link :to="option.route">{{ |
|
52 |
+ option.label |
|
53 |
+ }}</router-link> |
|
54 |
+ </li> |
|
55 |
+ </ul> |
|
56 |
+ <ul> |
|
57 |
+ <li |
|
58 |
+ v-for="option in dropdownOptions3" |
|
59 |
+ :key="option.value" |
|
60 |
+ @click="navigateToPage(option)" |
|
61 |
+ > |
|
62 |
+ <router-link :to="option.route">{{ |
|
63 |
+ option.label |
|
64 |
+ }}</router-link> |
|
65 |
+ </li> |
|
66 |
+ </ul> |
|
67 |
+ <ul> |
|
68 |
+ <li |
|
69 |
+ v-for="option in dropdownOptions4" |
|
70 |
+ :key="option.value" |
|
71 |
+ @click="navigateToPage(option)" |
|
72 |
+ > |
|
73 |
+ <router-link :to="option.route">{{ |
|
74 |
+ option.label |
|
75 |
+ }}</router-link> |
|
76 |
+ </li> |
|
77 |
+ </ul> |
|
78 |
+ </div> |
|
69 | 79 |
</div> |
70 | 80 |
</router-link> |
71 | 81 |
<router-link to="/RealtimeStatus.page"> |
... | ... | @@ -81,7 +91,6 @@ |
81 | 91 |
@mouseleave="showDropdown = false" |
82 | 92 |
>통계분석 |
83 | 93 |
</span> |
84 |
- |
|
85 | 94 |
</router-link> |
86 | 95 |
<router-link to="/CrosswalkInsert.page"> |
87 | 96 |
<span |
... | ... | @@ -89,7 +98,6 @@ |
89 | 98 |
@mouseleave="showDropdown = false" |
90 | 99 |
>횡단보도 관리</span |
91 | 100 |
> |
92 |
- |
|
93 | 101 |
</router-link> |
94 | 102 |
<router-link to="/UserManagement.page"> |
95 | 103 |
<span |
... | ... | @@ -97,9 +105,8 @@ |
97 | 105 |
@mouseleave="showDropdown = false" |
98 | 106 |
>시스템 관리</span |
99 | 107 |
> |
100 |
- |
|
101 | 108 |
</router-link> |
102 |
- </nav> |
|
109 |
+ </nav> |
|
103 | 110 |
<div class="sub_menu"> |
104 | 111 |
<router-link to="/Mypage.page"> |
105 | 112 |
<span>마이페이지</span> |
... | ... | @@ -239,20 +246,38 @@ |
239 | 246 |
</script> |
240 | 247 |
|
241 | 248 |
<style scoped> |
242 |
-nav a{width: 16rem; } |
|
243 |
-nav span{padding: 2.7rem 0;} |
|
244 |
-.menu{ |
|
245 |
- width: 85rem; |
|
246 |
- margin-left: 77.5rem; |
|
249 |
+header{position: relative;} |
|
250 |
+nav { |
|
247 | 251 |
} |
248 |
-.nav{position: absolute; background: #ffffff; left: 0; |
|
249 |
- top: 7rem; z-index: 500; width: 100%; |
|
250 |
- padding: 1rem;} |
|
251 |
-ul {width: 16rem; |
|
252 |
+nav a { |
|
253 |
+ width: 16rem; |
|
254 |
+} |
|
255 |
+nav span { |
|
256 |
+ padding: 2.7rem 0; |
|
257 |
+} |
|
258 |
+.menu { |
|
259 |
+ position: absolute; |
|
260 |
+ background: #ffffff; |
|
261 |
+ left: 0; |
|
262 |
+ top: 0rem; |
|
263 |
+ z-index: 500; |
|
264 |
+ width: 100%; |
|
265 |
+ padding: 1rem 28rem 1rem 1rem; |
|
266 |
+} |
|
267 |
+.nav { |
|
268 |
+ position: absolute; |
|
269 |
+ background: #ffffff; |
|
270 |
+ left: -148rem; |
|
271 |
+ top: 7rem; |
|
272 |
+ z-index: 500; |
|
273 |
+ width: -webkit-fill-available; |
|
274 |
+ padding: 1rem; |
|
275 |
+} |
|
276 |
+ul { |
|
277 |
+ width: 16rem; |
|
252 | 278 |
} |
253 | 279 |
li a { |
254 | 280 |
color: #7e7e7f; |
255 |
- |
|
256 | 281 |
} |
257 | 282 |
.logotxt { |
258 | 283 |
transition: 0.3s; |
... | ... | @@ -266,6 +291,7 @@ |
266 | 291 |
} |
267 | 292 |
|
268 | 293 |
.header_menu { |
294 |
+ |
|
269 | 295 |
transition: 0.3s; |
270 | 296 |
color: #ffffff; |
271 | 297 |
font-size: 16px; |
--- client/views/pages/Analysis/Analysis.vue
+++ client/views/pages/Analysis/Analysis.vue
... | ... | @@ -16,9 +16,9 @@ |
16 | 16 |
</ul> |
17 | 17 |
</div> |
18 | 18 |
<div class="search"> |
19 |
- <h2 style="background: #00b050; ">무단횡단 분석</h2> |
|
19 |
+ <h2 style="background: #00b050">무단횡단 분석</h2> |
|
20 | 20 |
<h2>지역별</h2> |
21 |
- <div class="box "> |
|
21 |
+ <div class="box" style="background: #eaebec"> |
|
22 | 22 |
<div class="flex gap m-b"> |
23 | 23 |
<label style="width: 7rem">분석날짜</label> |
24 | 24 |
<input type="date" name="" id="" /> |
... | ... | @@ -45,21 +45,25 @@ |
45 | 45 |
<label for="">횡단보도</label> |
46 | 46 |
<select name="" id=""></select> |
47 | 47 |
</div> |
48 |
- <div class="flex-center"><button type="button" class="btn-2 green-btn btn-l">조회</button></div> |
|
48 |
+ <div class="flex-center"> |
|
49 |
+ <button type="button" class="btn-2 green-btn btn-l">조회</button> |
|
50 |
+ </div> |
|
49 | 51 |
</div> |
50 |
- <h2>검색결과</h2> |
|
52 |
+ <h2>검색결과</h2> |
|
51 | 53 |
<div class="box bg-white tab-buttons"> |
52 |
- <h4>총 <em style="color: #13833b;">200</em>건</h4> |
|
53 |
- <ul> |
|
54 |
- <li class="result"> |
|
55 |
- <h5>1</h5> |
|
56 |
- <p class="m-b">시도: 대구광역시 서구 평리동</p> |
|
57 |
- <p class="m-b"><em style="color: #13833b;">장소: 남평리네거리</em></p> |
|
58 |
- <p class="m-b">X좌표: 00.0000</p> |
|
59 |
- <p class="m-b">Y좌표: 00.0000</p> |
|
60 |
- <p class="">무단횡단 수: 120</p> |
|
61 |
- </li> |
|
62 |
- </ul> |
|
54 |
+ <h4>총 <em style="color: #13833b">200</em>건</h4> |
|
55 |
+ <ul> |
|
56 |
+ <li class="result"> |
|
57 |
+ <h5>1</h5> |
|
58 |
+ <p class="m-b">시도: 대구광역시 서구 평리동</p> |
|
59 |
+ <p class="m-b"> |
|
60 |
+ <em style="color: #13833b">장소: 남평리네거리</em> |
|
61 |
+ </p> |
|
62 |
+ <p class="m-b">X좌표: 00.0000</p> |
|
63 |
+ <p class="m-b">Y좌표: 00.0000</p> |
|
64 |
+ <p class="">무단횡단 수: 120</p> |
|
65 |
+ </li> |
|
66 |
+ </ul> |
|
63 | 67 |
</div> |
64 | 68 |
</div> |
65 | 69 |
</div> |
... | ... | @@ -70,25 +74,43 @@ |
70 | 74 |
<button>레이어</button> |
71 | 75 |
<button>히트맵</button> |
72 | 76 |
</div> |
73 |
- <div><MapPage /></div> |
|
77 |
+ <div><MapPage></MapPage></div> |
|
74 | 78 |
</div> |
75 | 79 |
<div class="chart"> |
76 |
- <h2>보행자 수 대비 무단횡단 수</h2> |
|
80 |
+ <h2>보행자 수 대비 무단횡단 수</h2> |
|
81 |
+ <div class=""></div> |
|
82 |
+ <h2>무단횡단 비율</h2> |
|
83 |
+ <div class=""> |
|
84 |
+ <h2 style="background: #f7f6f6; color: #333;">시/군/구 별</h2> |
|
85 |
+ <div class=""></div> |
|
86 |
+ <h2 style="background: #f7f6f6; color: #333;">읍/면/동 별</h2> |
|
87 |
+ <div class=""></div> |
|
88 |
+ </div> |
|
89 |
+ <h2>시/도 전체 시간/요일별 발생현황</h2> |
|
77 | 90 |
<div class=""> |
78 | 91 |
</div> |
79 | 92 |
</div> |
80 | 93 |
</div> |
81 | 94 |
</template> |
82 | 95 |
<style scoped> |
83 |
- |
|
84 |
-.chart{width: 600px;} |
|
85 |
-.chart h2{padding: 0.5rem 0;} |
|
86 |
-.search .box ul li { |
|
87 |
- padding: 1rem 1rem 1rem 3rem; |
|
96 |
+.chart { |
|
97 |
+ width: 600px; |
|
88 | 98 |
} |
89 |
-.result{position: relative;} |
|
90 |
-h5{position: absolute; |
|
91 |
-left: 0; font-size: 2rem;} |
|
99 |
+.chart div{min-height: 17.53rem;} |
|
100 |
+.chart h2 { |
|
101 |
+ padding: 0.5rem 0; |
|
102 |
+} |
|
103 |
+.search .box ul li { |
|
104 |
+ padding: 1rem 1rem 1rem 3rem; |
|
105 |
+} |
|
106 |
+.result { |
|
107 |
+ position: relative; |
|
108 |
+} |
|
109 |
+h5 { |
|
110 |
+ position: absolute; |
|
111 |
+ left: 0; |
|
112 |
+ font-size: 2rem; |
|
113 |
+} |
|
92 | 114 |
.box { |
93 | 115 |
text-align: left; |
94 | 116 |
} |
... | ... | @@ -107,8 +129,6 @@ |
107 | 129 |
padding: 1rem; |
108 | 130 |
} |
109 | 131 |
.bg-white { |
110 |
- min-height: 47.3rem; |
|
111 |
- max-height: 47.3rem; |
|
112 | 132 |
overflow: scroll; |
113 | 133 |
overflow-x: hidden; |
114 | 134 |
} |
... | ... | @@ -137,9 +157,11 @@ |
137 | 157 |
.right { |
138 | 158 |
width: -webkit-fill-available; |
139 | 159 |
} |
160 |
+.top button.clicked{background: #50ba8a;} |
|
140 | 161 |
</style> |
141 | 162 |
<script> |
142 |
-import MapPage from "../../component/MapPage.vue"; |
|
163 |
+import { Map } from "ol"; |
|
164 |
+import MapPage from "../../component/map/map.vue"; |
|
143 | 165 |
|
144 | 166 |
export default { |
145 | 167 |
data() { |
... | ... | @@ -167,6 +189,7 @@ |
167 | 189 |
}, |
168 | 190 |
components: { |
169 | 191 |
MapPage: MapPage, |
192 |
+ Map, |
|
170 | 193 |
}, |
171 | 194 |
methods: { |
172 | 195 |
changeTab(tabId) { |
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
... | ... | @@ -35,7 +35,7 @@ |
35 | 35 |
</script> |
36 | 36 |
|
37 | 37 |
<style scoped> |
38 |
-.main-warp{position: relative; height: 865px;} |
|
38 |
+.main-warp{position: relative; height: -webkit-fill-available;} |
|
39 | 39 |
[v-cloak] { |
40 | 40 |
display: none; |
41 | 41 |
} |
--- client/views/pages/RealtimeStatus/RealtimeStatus.vue
+++ client/views/pages/RealtimeStatus/RealtimeStatus.vue
... | ... | @@ -117,7 +117,9 @@ |
117 | 117 |
</li> |
118 | 118 |
</ul> |
119 | 119 |
</div> |
120 |
- <div><MapPage /></div> |
|
120 |
+ <!-- <div><MapPage /></div> --> |
|
121 |
+ <div><Map ></Map></div> |
|
122 |
+ |
|
121 | 123 |
</div> |
122 | 124 |
</div> |
123 | 125 |
</template> |
... | ... | @@ -165,7 +167,7 @@ |
165 | 167 |
</style> |
166 | 168 |
<script> |
167 | 169 |
import MapPage from "../../component/MapPage.vue"; |
168 |
- |
|
170 |
+import Map from "../../component/map/map.vue" |
|
169 | 171 |
export default { |
170 | 172 |
data() { |
171 | 173 |
return { |
... | ... | @@ -184,6 +186,7 @@ |
184 | 186 |
}, |
185 | 187 |
components: { |
186 | 188 |
MapPage: MapPage, |
189 |
+ Map:Map, |
|
187 | 190 |
}, |
188 | 191 |
methods: { |
189 | 192 |
changeTab(tabId) { |
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?