
--- client/views/component/MapPage copy 2.vue
... | ... | @@ -1,38 +0,0 @@ |
1 | -<template> | |
2 | - <div id="map"> | |
3 | - <l-map :zoom="15" :center="mapCenter"> | |
4 | - <l-tile-layer :url="tileLayerUrl" :attribution="attribution"></l-tile-layer> | |
5 | - </l-map> | |
6 | - </div> | |
7 | -</template> | |
8 | - | |
9 | -<script> | |
10 | -import { LMap, LTileLayer } from 'vue3-leaflet'; | |
11 | - | |
12 | -// 영천시 json - 기존 | |
13 | -// import am5geodata_yeongcheon from "./map"; | |
14 | - | |
15 | -export default { | |
16 | - components: { | |
17 | - LMap, | |
18 | - LTileLayer, | |
19 | - }, | |
20 | - data() { | |
21 | - return { | |
22 | - mapCenter: [ 35.87172388583504, 128.55915532852885], // Initial center coordinates | |
23 | - tileLayerUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', // Tile layer URL | |
24 | - attribution: '© OpenStreetMap contributors', // Attribution text | |
25 | - }; | |
26 | - }, | |
27 | - } | |
28 | -</script> | |
29 | - | |
30 | -<style> | |
31 | -.layerlist_title{ | |
32 | -background: #42547f; | |
33 | -color: #fff; | |
34 | -padding: 10px; | |
35 | -font-size: 14px; | |
36 | -} | |
37 | -#map{min-height: 866px !important;} | |
38 | -</style> |
--- client/views/component/MapPage copy.vue
... | ... | @@ -1,55 +0,0 @@ |
1 | -<template> | |
2 | - <div> | |
3 | - <div id="map" class="map"></div> | |
4 | - </div> | |
5 | -</template> | |
6 | - | |
7 | -<script> | |
8 | -export default { | |
9 | - | |
10 | - data() { | |
11 | - return { | |
12 | - } | |
13 | - }, | |
14 | - mounted() { | |
15 | - window.kakao && window.kakao.maps | |
16 | - ? this.loadMap() | |
17 | - : this.addKakaoMapScript(); | |
18 | - | |
19 | - }, | |
20 | - methods: { | |
21 | - addKakaoMapScript() { | |
22 | - const script = document.createElement("script"); | |
23 | - /* global kakao */ | |
24 | - script.onload = () => kakao.maps.load(this.loadMap); | |
25 | - script.src = | |
26 | - "http://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=d0f88d63bd41b545d08ea9984995f082"; | |
27 | - document.head.appendChild(script); | |
28 | - }, | |
29 | - loadMap() { | |
30 | - var mapContainer = document.getElementById("map"); //지도를 담을 영역의 DOM 레퍼런스 | |
31 | - var map = { | |
32 | - //지도를 생성할 때 필요한 기본 옵션 | |
33 | - center: new kakao.maps.LatLng(35.87172388583504, 128.55915532852885), //지도의 중심좌표. | |
34 | - level: 5, //지도의 레벨(확대, 축소 정도) | |
35 | - }; | |
36 | - | |
37 | - var map = new kakao.maps.Map(mapContainer, map); //지도 생성 및 객체 리턴 | |
38 | - // 지도 확대 축소를 제어할 수 있는 줌 컨트롤을 생성합니다 | |
39 | - var zoomControl = new kakao.maps.ZoomControl(); | |
40 | - map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT); | |
41 | - | |
42 | - | |
43 | - }, | |
44 | - zoomControl() {}, | |
45 | - | |
46 | - }, | |
47 | -}; | |
48 | -</script> | |
49 | - | |
50 | -<style> | |
51 | -.map { | |
52 | - width: 100%; | |
53 | - height: 866px; | |
54 | -} | |
55 | -</style> |
--- client/views/component/MapPage kakao.vue
... | ... | @@ -1,55 +0,0 @@ |
1 | -<template> | |
2 | - <div> | |
3 | - <div id="map" class="map"></div> | |
4 | - </div> | |
5 | -</template> | |
6 | - | |
7 | -<script> | |
8 | -export default { | |
9 | - | |
10 | - data() { | |
11 | - return { | |
12 | - } | |
13 | - }, | |
14 | - mounted() { | |
15 | - window.kakao && window.kakao.maps | |
16 | - ? this.loadMap() | |
17 | - : this.addKakaoMapScript(); | |
18 | - | |
19 | - }, | |
20 | - methods: { | |
21 | - addKakaoMapScript() { | |
22 | - const script = document.createElement("script"); | |
23 | - /* global kakao */ | |
24 | - script.onload = () => kakao.maps.load(this.loadMap); | |
25 | - script.src = | |
26 | - "http://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=d0f88d63bd41b545d08ea9984995f082"; | |
27 | - document.head.appendChild(script); | |
28 | - }, | |
29 | - loadMap() { | |
30 | - var mapContainer = document.getElementById("map"); //지도를 담을 영역의 DOM 레퍼런스 | |
31 | - var map = { | |
32 | - //지도를 생성할 때 필요한 기본 옵션 | |
33 | - center: new kakao.maps.LatLng(35.87172388583504, 128.55915532852885), //지도의 중심좌표. | |
34 | - level: 5, //지도의 레벨(확대, 축소 정도) | |
35 | - }; | |
36 | - | |
37 | - var map = new kakao.maps.Map(mapContainer, map); //지도 생성 및 객체 리턴 | |
38 | - // 지도 확대 축소를 제어할 수 있는 줌 컨트롤을 생성합니다 | |
39 | - var zoomControl = new kakao.maps.ZoomControl(); | |
40 | - map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT); | |
41 | - | |
42 | - | |
43 | - }, | |
44 | - zoomControl() {}, | |
45 | - | |
46 | - }, | |
47 | -}; | |
48 | -</script> | |
49 | - | |
50 | -<style> | |
51 | -.map { | |
52 | - width: 100%; | |
53 | - height: 797px; | |
54 | -} | |
55 | -</style> |
--- client/views/component/OpenLayers.vue
... | ... | @@ -1,459 +0,0 @@ |
1 | -<template> | |
2 | - <div> | |
3 | - <div id="map" class="map"></div> | |
4 | - </div> | |
5 | -</template> | |
6 | - | |
7 | -<script> | |
8 | -import axios from 'axios'; | |
9 | -import Map from "ol/Map"; | |
10 | -import View from "ol/View"; | |
11 | -import { fromLonLat } from 'ol/proj.js'; | |
12 | -import Point from 'ol/geom/Point'; | |
13 | -import Feature from 'ol/Feature'; | |
14 | -import TileLayer from "ol/layer/Tile"; | |
15 | -import Group from "ol/layer/Group"; | |
16 | -import { transform } from "ol/proj"; | |
17 | -import { XYZ, Vector as VectorSource } from "ol/source"; | |
18 | -import VectorSources from 'ol/source/Vector.js'; | |
19 | -import GeoJSON from 'ol/format/GeoJSON'; | |
20 | -import { Vector as VectorLayer } from "ol/layer"; | |
21 | -import { baseStyles } from './OpenLayersStyle.vue'; | |
22 | -import { Select } from 'ol/interaction'; | |
23 | -import { Icon, Style, Circle as CircleStyle, Fill, Stroke, Text } from 'ol/style.js'; | |
24 | -import { BASE_DIR } from '../../../Global' | |
25 | -import proj4 from "proj4"; | |
26 | -import { register } from "ol/proj/proj4"; | |
27 | -import { Cluster } from 'ol/source'; | |
28 | -import { fromExtent } from 'ol/geom/Polygon'; | |
29 | - | |
30 | - | |
31 | -// V월드 메인키 | |
32 | -var API_KEY = "640F33E7-A813-3EF5-A503-7F2946B5A944"; | |
33 | - | |
34 | - | |
35 | - | |
36 | -export default { | |
37 | - data() { | |
38 | - return { | |
39 | - // 맵 객첵 | |
40 | - map: Object, | |
41 | - // 레이어 리스트 | |
42 | - mapLayer: [], | |
43 | - // 오버레이 | |
44 | - mapOverLay: Object, | |
45 | - // 뷰객체 | |
46 | - mapView: Object, | |
47 | - hover: null, | |
48 | - baseSource: String, | |
49 | - }; | |
50 | - }, | |
51 | - components: { | |
52 | - Map: Map, | |
53 | - }, | |
54 | - mounted() { | |
55 | - this.loadMap(); | |
56 | - | |
57 | - }, | |
58 | - methods: { | |
59 | - | |
60 | - setZoom(zoomIdx) { | |
61 | - this.map.getView().setZoom(zoomIdx); | |
62 | - }, | |
63 | - | |
64 | - loadMap() { | |
65 | - var vm = this; | |
66 | - this.baseSource = "EPSG:5181"; | |
67 | - | |
68 | - // 좌표계 추가 | |
69 | - proj4.defs("EPSG:5181", | |
70 | - "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs" | |
71 | - ); | |
72 | - | |
73 | - proj4.defs("EPSG:5179", | |
74 | - "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs" | |
75 | - ); | |
76 | - | |
77 | - proj4.defs("ESPG:4326", | |
78 | - "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" | |
79 | - ); | |
80 | - | |
81 | - register(proj4); | |
82 | - | |
83 | - // View 정보 | |
84 | - this.mapView = new View({ | |
85 | - projection: this.baseSource, ///EPSG:3857 | |
86 | - center: transform([339979.82131209393, 265331.9344441357], "EPSG:5181", vm.baseSource), //126.9757184, 37.564388 | |
87 | - zoom: 14, | |
88 | - minZoom: 8, | |
89 | - maxZoom: 19 | |
90 | - }); | |
91 | - // 맵객체 생성 | |
92 | - this.map = new Map({ | |
93 | - layers: [], | |
94 | - view: vm.mapView, | |
95 | - target: "map", | |
96 | - }); | |
97 | - // 이벤트 초기화 | |
98 | - this.mouse_ev(); | |
99 | - }, | |
100 | - | |
101 | - // 레이어 추가 함수 | |
102 | - addLayer: function (layer) { | |
103 | - this.map.addLayer(layer); | |
104 | - }, | |
105 | - | |
106 | - // 벡터 레이어 추가 URL | |
107 | - addVectorLayerByJson: function (geojson, layerName, geoType) { | |
108 | - | |
109 | - var tempfeatures = new GeoJSON().readFeatures(geojson); | |
110 | - | |
111 | - var layerSource = new VectorSource({}); | |
112 | - if (geoType === vm.baseSource) { | |
113 | - layerSource = new VectorSource({ | |
114 | - features: tempfeatures | |
115 | - }); | |
116 | - } else { | |
117 | - tempfeatures.forEach(function (feature) { | |
118 | - // 좌표변환 | |
119 | - feature.getGeometry().transform(geoType, this.baseSource); | |
120 | - pointSource.addFeature(feature); | |
121 | - }); | |
122 | - } | |
123 | - | |
124 | - // 레리어 생성 | |
125 | - const vector = new VectorLayer({ | |
126 | - properties: { name: layerName }, | |
127 | - source: layerSource, | |
128 | - style: function (feature) { | |
129 | - return baseStyles[feature.getGeometry().getType()]; | |
130 | - }, | |
131 | - }); | |
132 | - vector.setZIndex(10); | |
133 | - this.map.addLayer(vector); | |
134 | - }, | |
135 | - | |
136 | - // 벡터레이어 추가 JSON | |
137 | - addVectorLayerByUrl: function (sourceUrl, layerName, geoType, style, type, dong_cd, node_id) { | |
138 | - const vm = this; | |
139 | - | |
140 | - axios({ | |
141 | - url: sourceUrl, | |
142 | - method: 'post', | |
143 | - headers: { | |
144 | - 'Content-Type': 'application/json; charset=UTF-8' | |
145 | - }, | |
146 | - data: { "dong_cd": dong_cd, "node_id": node_id }, | |
147 | - }).then(function (response) { | |
148 | - console.log("url : ", sourceUrl); | |
149 | - | |
150 | - console.log("addVectorLayerByUrl response : ", response.data); | |
151 | - | |
152 | - const tempfeatures = new GeoJSON().readFeatures(response.data); | |
153 | - console.log("tempfeatures response : ", tempfeatures); | |
154 | - | |
155 | - // const areaSize=response.data.features.area; | |
156 | - let layerSource = new VectorSource({}); | |
157 | - if (geoType === vm.baseSource) { | |
158 | - layerSource = new VectorSource({ | |
159 | - features: tempfeatures | |
160 | - }); | |
161 | - } else { | |
162 | - tempfeatures.forEach(function (feature) { | |
163 | - // 좌표변환 | |
164 | - feature.getGeometry().transform(geoType, vm.baseSource); | |
165 | - layerSource.addFeature(feature) | |
166 | - }); | |
167 | - } | |
168 | - // 레이어 생성 | |
169 | - const vector = new VectorLayer({ | |
170 | - properties: { name: layerName }, | |
171 | - source: layerSource, | |
172 | - style: function (feature) { | |
173 | - // 라벨스타일 일때 | |
174 | - if (type == 'label') { | |
175 | - if(feature.get('dong_nm')){ | |
176 | - style.getText().setText(feature.get('dong_nm')) | |
177 | - } | |
178 | - else{ | |
179 | - style.getText().setText(feature.get('node_name')) | |
180 | - | |
181 | - } | |
182 | - style.getImage().setRadius(vm.map.getView().getZoom() + 12); | |
183 | - return style | |
184 | - } else if (type == 'MultiPolygon') { | |
185 | - return style | |
186 | - } else { | |
187 | - return baseStyles[feature.getGeometry().getType()]; | |
188 | - } | |
189 | - }, | |
190 | - }); | |
191 | - | |
192 | - vector.setZIndex(10); | |
193 | - | |
194 | - //vector size 조절 | |
195 | - const extent = vector.getSource().getExtent(); | |
196 | - vm.map.getView().fit(extent,{ | |
197 | - padding:[100,100,100,100], | |
198 | - duration:1000, | |
199 | - }); | |
200 | - vm.map.addLayer(vector); | |
201 | - | |
202 | - }).catch(function (error) { | |
203 | - console.log("error : ", error); | |
204 | - }); | |
205 | - }, | |
206 | - | |
207 | - // 전체 삭제 함수 | |
208 | - removeLayerAll: function () { | |
209 | - this.map | |
210 | - .getAllLayers() | |
211 | - .forEach((layer) => this.map.removeLayer(layer)); | |
212 | - }, | |
213 | - | |
214 | - // 특정 레이어 삭제 | |
215 | - removeLayer: function (layerName) { | |
216 | - this.map | |
217 | - .getAllLayers() | |
218 | - .filter((layer) => layer.get("name").startsWith(layerName)) | |
219 | - .forEach((layer) => this.map.removeLayer(layer)); | |
220 | - }, | |
221 | - | |
222 | - // 클릭이벤트 | |
223 | - mouse_ev: function (layerName) { | |
224 | - var vm = this; | |
225 | - | |
226 | - if (this.map) { | |
227 | - this.map.on("pointerdrag", (evt) => { | |
228 | - // 화면이동 이벤트 | |
229 | - console.log("pointerdrag"); | |
230 | - }); | |
231 | - this.map.on('moveend', function (e) { | |
232 | - var newZoom = vm.map.getView().getZoom(); | |
233 | - console.log('zoom end, new zoom: ' + newZoom); | |
234 | - // vm.$parent.childMoveEnd(newZoom); | |
235 | - }); | |
236 | - | |
237 | - this.map.on("click", (evt) => { | |
238 | - const prop = []; | |
239 | - // 마우스 클릭 이벤트 | |
240 | - console.log("click"); | |
241 | - this.map.forEachFeatureAtPixel( | |
242 | - evt.pixel, | |
243 | - function (feature, layer) { | |
244 | - let values = feature; | |
245 | - values['layerName'] = layer.get('name'); | |
246 | - prop.push(values); | |
247 | - } | |
248 | - ); | |
249 | - //특정 layer 선택 틀릭 시, | |
250 | - | |
251 | - vm.$parent.childClick(prop, evt.coordinate); | |
252 | - }); | |
253 | - | |
254 | - //pointerMove event | |
255 | - this.map.on("pointermove", (event) => { | |
256 | - var features = this.map.getFeaturesAtPixel(event.pixel); | |
257 | - if (features) { | |
258 | - // var properties = features[0].getProperties(); | |
259 | - // console.log("pointerMove properties : ",properties.geometry.extent_[0]) | |
260 | - // this.setCenterPosition(properties.geometry.extent_[1],properties.geometry.extent_[0],'EPSG:5181'); | |
261 | - } | |
262 | - }); | |
263 | - } | |
264 | - }, | |
265 | - | |
266 | - // 좌표 센터 이동 | |
267 | - setCenterPosition: function (lat, lon, source) { | |
268 | - | |
269 | - if (this.baseSource == source) { | |
270 | - this.map.getView().setCenter([lon, lat]); | |
271 | - } else { | |
272 | - this.map.getView().setCenter(transform([lon, lat], source, this.baseSource)); | |
273 | - } | |
274 | - }, | |
275 | - | |
276 | - // 기본맵 세팅 | |
277 | - setBaseMap: function (map, dong_cd, node_id) { | |
278 | - const vm = this; | |
279 | - | |
280 | - if (dong_cd != null) { | |
281 | - //dong_cd로 중간 위치 받아오기 | |
282 | - axios({ | |
283 | - url: '/dong/dongCenter.json', | |
284 | - method: 'post', | |
285 | - headers: { | |
286 | - 'Content-Type': 'application/json; charset=UTF-8' | |
287 | - }, | |
288 | - data: { "dong_cd": dong_cd, "node_id": node_id }, | |
289 | - }).then(function (response) { | |
290 | - console.log("setBaseMap response", response.data) | |
291 | - vm.setCenterPosition(response.data.dong_lat, response.data.dong_lon, 'EPSG:5181'); | |
292 | - | |
293 | - }).catch(function (error) { | |
294 | - console.log("error : ", error); | |
295 | - }); | |
296 | - | |
297 | - } | |
298 | - | |
299 | - this.map.getAllLayers() | |
300 | - .filter((layer) => layer.get("name").startsWith("base")) | |
301 | - .forEach((layer) => this.map.removeLayer(layer)); | |
302 | - | |
303 | - this.map.addLayer(map); | |
304 | - }, | |
305 | - // 아이콘 생성 | |
306 | - createIcon: function (lat, lon, iconSrc, iconSclae, layername, source) { | |
307 | - var rome = new Feature({}); | |
308 | - | |
309 | - if (this.baseSource !== source) { | |
310 | - rome = new Feature({ | |
311 | - geometry: new Point(transform([lon, lat], source, this.baseSource)), | |
312 | - }); | |
313 | - } else { | |
314 | - rome = new Feature({ | |
315 | - geometry: new Point([lon, lat]), | |
316 | - }); | |
317 | - } | |
318 | - | |
319 | - rome.setStyle( | |
320 | - new Style({ | |
321 | - image: new Icon({ | |
322 | - scale: iconSclae, | |
323 | - src: iconSrc, | |
324 | - }), | |
325 | - }) | |
326 | - ); | |
327 | - | |
328 | - const vectorSources = new VectorSource({}); | |
329 | - vectorSources.addFeature(rome); | |
330 | - | |
331 | - // 레이어 생성 | |
332 | - const vector = new VectorLayer({ | |
333 | - properties: { name: layername }, | |
334 | - source: vectorSources | |
335 | - }); | |
336 | - | |
337 | - vector.setZIndex(99); | |
338 | - this.map.addLayer(vector); | |
339 | - }, | |
340 | - // 클러스터링 기능 추가 | |
341 | - addClusterLayer(sourceUrl, layerName, geoType, style, type, dong_cd) { | |
342 | - const vm = this; | |
343 | - | |
344 | - axios({ | |
345 | - url: sourceUrl, | |
346 | - method: 'post', | |
347 | - headers: { | |
348 | - 'Content-Type': 'application/json; charset=UTF-8' | |
349 | - }, | |
350 | - data: { "dong_cd": dong_cd }, | |
351 | - }).then(function (response) { | |
352 | - console.log("addClusterLayer response : ", response) | |
353 | - const tempfeatures = new GeoJSON().readFeatures(response.data); | |
354 | - console.log("addClusterLayer tempfeatures : ", tempfeatures); | |
355 | - const count = 20000; | |
356 | - | |
357 | - const features = new Array(count); | |
358 | - const e = 15000; | |
359 | - for (let i = 0; i < count; ++i) { | |
360 | - const coordinates = [2 * e * Math.random() + 320000, 2 * e * Math.random() + 260000]; | |
361 | - features[i] = new Feature(new Point(coordinates)); | |
362 | - } | |
363 | - features[0] = new Feature(new Point(transform([338492.222420045, 243951.915081981], "EPSG:5181", "EPSG:5181"))); | |
364 | - const source = new VectorSource({ | |
365 | - features: features, | |
366 | - }); | |
367 | - | |
368 | - const clusterSource = new Cluster({ | |
369 | - distance: parseInt(25, 30), | |
370 | - minDistance: parseInt(10, 10), | |
371 | - source: source, | |
372 | - }); | |
373 | - | |
374 | - // let source = new VectorSource({}); | |
375 | - // if (geoType === vm.baseSource) { | |
376 | - // source = new VectorSource({ | |
377 | - // features: tempfeatures | |
378 | - // }); | |
379 | - // } else { | |
380 | - // tempfeatures.forEach(function (feature) { | |
381 | - // // 좌표변환 | |
382 | - // feature.getGeometry().transform(geoType, vm.baseSource); | |
383 | - // source.addFeature(feature) | |
384 | - // }); | |
385 | - // } | |
386 | - // 클러스터 레이어 생성 | |
387 | - //const clusterSource = new Cluster({ | |
388 | - // distance: 40, | |
389 | - // minDistance: 10, | |
390 | - // source: source, | |
391 | - // geometryFunction: function (feature) { | |
392 | - // // Custom geometryFunction to handle different geometry types | |
393 | - // const geometry = feature.getGeometry(); | |
394 | - // if (geometry.getType() === 'Polygon' || geometry.getType() === 'MultiPolygon') { | |
395 | - // // For Polygon and MultiPolygon geometries, calculate the center point | |
396 | - // const coordinates = geometry.getCoordinates(); | |
397 | - // const center = coordinates[0].reduce((acc, coordinate) => [acc[0] + coordinate[0], acc[1] + coordinate[1]], [0, 0]); | |
398 | - // const numVertices = coordinates[0].length; | |
399 | - // return new Point([center[0] / numVertices, center[1] / numVertices]); | |
400 | - // } else { | |
401 | - // // For other geometry types (e.g., Point, LineString), use the default geometryFunction | |
402 | - // return feature.getGeometry(); | |
403 | - // } | |
404 | - // } | |
405 | - //}); | |
406 | - const styleCache = {}; | |
407 | - | |
408 | - // 스타일 함수 설정 | |
409 | - const clusterStyle = function (feature) { | |
410 | - const size = feature.get('features').length; | |
411 | - let style = styleCache[size]; | |
412 | - if (!style) { | |
413 | - style = new Style({ | |
414 | - image: new CircleStyle({ | |
415 | - radius: 10, | |
416 | - stroke: new Stroke({ | |
417 | - color: '#fff', | |
418 | - }), | |
419 | - fill: new Fill({ | |
420 | - color: '#3399CC', | |
421 | - }), | |
422 | - }), | |
423 | - text: new Text({ | |
424 | - text: size.toString(), | |
425 | - fill: new Fill({ | |
426 | - color: '#fff', | |
427 | - }), | |
428 | - }), | |
429 | - }); | |
430 | - styleCache[size] = style; | |
431 | - } | |
432 | - return style; | |
433 | - }; | |
434 | - | |
435 | - const vector = new VectorLayer({ | |
436 | - properties: { name: layerName }, | |
437 | - source: clusterSource, | |
438 | - style: clusterStyle, | |
439 | - }); | |
440 | - | |
441 | - vector.setZIndex(10); | |
442 | - vm.map.addLayer(vector); | |
443 | - }).catch(function (error) { | |
444 | - console.log("error : ", error); | |
445 | - }); | |
446 | - }, | |
447 | - }, | |
448 | -}; | |
449 | - | |
450 | -</script> | |
451 | - | |
452 | -<style> | |
453 | -.map { | |
454 | - width: 100%; | |
455 | - height: 861px; | |
456 | -} | |
457 | -</style> | |
458 | - | |
459 | - |
--- client/views/component/OpenLayersIcon.vue
... | ... | @@ -1,4 +0,0 @@ |
1 | -<script> | |
2 | - | |
3 | - | |
4 | -</script> |
--- client/views/component/OpenLayersMap.vue
... | ... | @@ -1,97 +0,0 @@ |
1 | -<script> | |
2 | -import TileLayer from 'ol/layer/Tile'; | |
3 | -import { XYZ, Vector as VectorSource } from 'ol/source'; | |
4 | - | |
5 | -// V월드 메인키 | |
6 | -var API_KEY = '640F33E7-A813-3EF5-A503-7F2946B5A944'; | |
7 | -// var API_KEY = 'd0f88d63bd41b545d08ea9984995f082'; | |
8 | - | |
9 | -// http://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=d0f88d63bd41b545d08ea9984995f082 | |
10 | -// 기본지도 | |
11 | -export const vworldBaseLayer = new TileLayer({ | |
12 | - source: new XYZ({ url: 'https://api.vworld.kr/req/wmts/1.0.0/'+API_KEY+'/Base/{z}/{y}/{x}.png' }), | |
13 | - properties: { name: 'base-vworld-base' }, | |
14 | - minZoom: 5, | |
15 | - maxZoom: 19, | |
16 | - zIndex: 2, | |
17 | - preload: Infinity | |
18 | -}); | |
19 | -export const naverBaseLayer = new TileLayer({ | |
20 | - source: new XYZ({ | |
21 | - projection : 'EPSG:3857', | |
22 | - url: 'https://map.pstatic.net/nrb/styles/basic/d0f88d63bd41b545d08ea9984995f082/{z}/{x}/{y}@2x.png', | |
23 | - tilePixelRatio: 2, | |
24 | - // crossOrigin: 'anonymous', | |
25 | - }), | |
26 | - id: 'naver_base', | |
27 | - visible: false, | |
28 | - // properties: { name: 'base-kakao-base' }, | |
29 | - minZoom: 5, | |
30 | - maxZoom: 19, | |
31 | - zIndex: 2, | |
32 | - // preload: Infinity | |
33 | -}); | |
34 | - | |
35 | -// 백지도 | |
36 | -export const vworldGrayLayer = new TileLayer({ | |
37 | - source: new XYZ({ url: 'https://api.vworld.kr/req/wmts/1.0.0/'+API_KEY+'/gray/{z}/{y}/{x}.png' }), | |
38 | - properties: { name: 'base-vworld-gray' }, | |
39 | - minZoom: 5, | |
40 | - maxZoom: 18, | |
41 | - zIndex: 2, | |
42 | - preload: Infinity | |
43 | -}); | |
44 | - | |
45 | -// 야간지도 | |
46 | -export const vworldMidnightLayer = new TileLayer({ | |
47 | - source: new XYZ({ url: 'https://api.vworld.kr/req/wmts/1.0.0/'+API_KEY+'/midnight/{z}/{y}/{x}.png' }), | |
48 | - properties: { name: 'base-vworld-midnight' }, | |
49 | - minZoom: 5, | |
50 | - maxZoom: 18, | |
51 | - zIndex: 2, | |
52 | - preload: Infinity | |
53 | -}); | |
54 | - | |
55 | -// 하이브리드 지도 | |
56 | -export const vworldHybridLayer = new TileLayer({ | |
57 | - source: new XYZ({ url: 'https://api.vworld.kr/req/wmts/1.0.0/'+API_KEY+'/Hybrid/{z}/{y}/{x}.png' }), | |
58 | - properties: { name: 'base-vworld-hybrid' }, | |
59 | - minZoom: 5, | |
60 | - maxZoom: 19, | |
61 | - zIndex: 3, | |
62 | - preload: Infinity | |
63 | -}); | |
64 | - | |
65 | -// 위성지도 | |
66 | -export const vworldSatelliteLayer = new TileLayer({ | |
67 | - source: new XYZ({ url: 'https://api.vworld.kr/req/wmts/1.0.0/'+API_KEY+'/Satellite/{z}/{y}/{x}.jpeg' }), | |
68 | - properties: { name: 'base-vworld-satellite' }, | |
69 | - minZoom: 5, | |
70 | - maxZoom: 19, | |
71 | - zIndex: 2, | |
72 | - preload: Infinity | |
73 | -}); | |
74 | - | |
75 | - | |
76 | -/* | |
77 | - const geojsonObject = { | |
78 | - 'type': 'FeatureCollection', | |
79 | - 'crs': { | |
80 | - 'type': 'name', | |
81 | - 'properties': { | |
82 | - 'name': 'EPSG:3857', | |
83 | - }, | |
84 | - }, | |
85 | - 'features': [ | |
86 | - { | |
87 | - 'type': 'Feature', | |
88 | - 'geometry': { | |
89 | - 'type': 'Point', | |
90 | - 'coordinates': [ 14135490.777017945, 4518386.883679577 ], | |
91 | - }, | |
92 | - } | |
93 | - ] | |
94 | - }; | |
95 | - */ | |
96 | - | |
97 | -</script> |
--- client/views/component/OpenLayersStyle.vue
... | ... | @@ -1,58 +0,0 @@ |
1 | -<script> | |
2 | -import { Circle as CircleStyle, Style, Stroke, Fill, Text } from "ol/style"; //데이터를 그릴 스타일들 | |
3 | - | |
4 | -// V월드 메인키 | |
5 | -var API_KEY = '640F33E7-A813-3EF5-A503-7F2946B5A944'; | |
6 | - | |
7 | - export const baseStyles = { | |
8 | - 'Point': new Style({ | |
9 | - image: new CircleStyle({ | |
10 | - radius: 10, | |
11 | - fill: new Fill({ | |
12 | - color: 'rgba(255,0,0,0.2)', | |
13 | - }), | |
14 | - stroke: new Stroke({color: 'red', width: 2}), | |
15 | - }), | |
16 | - }), | |
17 | - 'MultiPolygon': new Style({ | |
18 | - stroke: new Stroke({ | |
19 | - color: 'yellow', | |
20 | - width: 1, | |
21 | - }), | |
22 | - fill: new Fill({ | |
23 | - color: 'rgba(255, 255, 0, 0.1)', | |
24 | - }), | |
25 | - }), | |
26 | - 'Polygon': new Style({ | |
27 | - stroke: new Stroke({ | |
28 | - color: 'blue', | |
29 | - lineDash: [4], | |
30 | - width: 3, | |
31 | - }), | |
32 | - fill: new Fill({ | |
33 | - color: 'rgba(0, 0, 255, 0.1)', | |
34 | - }), | |
35 | - }), | |
36 | - 'labelStyle': new Style({ | |
37 | - image: new CircleStyle({ | |
38 | - radius: 0, | |
39 | - fill: new Fill({ | |
40 | - color: 'rgba(0,255,0,0.5)', | |
41 | - }), | |
42 | - stroke: new Stroke({ | |
43 | - color: 'rgba(255,0,0,1)', | |
44 | - width: 1 | |
45 | - }), | |
46 | - }), | |
47 | - text: new Text({ | |
48 | - font: '12px Calibri,sans-serif', | |
49 | - overflow: false, | |
50 | - fill: new Fill({ | |
51 | - color: 'rgba(255,0,0,1)' | |
52 | - }), | |
53 | - }), | |
54 | - | |
55 | - }), | |
56 | -}; | |
57 | - | |
58 | -</script> |
--- client/views/component/dongSelectList.vue
... | ... | @@ -1,245 +0,0 @@ |
1 | -<template> | |
2 | - <div class="flex-between m-b" id="siDoHiddenCk"> | |
3 | - <label for="">시/도</label> | |
4 | - <select name="siDoSelectList" id="siDoSelectList" v-model="address['siDo_dong_cd']" @change="siDoGunGuSelectF($event)"> | |
5 | - <option :value=null disabled> 시/도</option> | |
6 | - <option v-for="(item, key) in siDoList" :key="key" :value="item['dong_cd']"> | |
7 | - {{ item['dong_nm'] }} | |
8 | - </option> | |
9 | - </select> | |
10 | - </div> | |
11 | - <div class="flex-between m-b" id="gunGuHiddenCk"> | |
12 | - <label for="">시/군/구</label> | |
13 | - <select name="gunGuSelectList" id="gunGuSelectList" v-model="address['guGun_dong_cd']" @change="siDoGunGuSelectF($event)"> | |
14 | - <option :value=null disabled> 시/군/구 </option> | |
15 | - <option v-for="(item, key) in gunGuList" :key="key" :value="item['dong_cd']"> | |
16 | - {{ item['dong_nm'] }} | |
17 | - </option> | |
18 | - </select> | |
19 | - </div> | |
20 | - <div class="flex-between m-b" id="dongHiddenCk"> | |
21 | - <label for="">행정동</label> | |
22 | - <select name="dongSelectList" id="dongSelectList" v-model="address['dong_dong_cd']" @change="dongSelectF($event)"> | |
23 | - <option :value=null disabled> 행정동 </option> | |
24 | - <option v-for="(item, key) in dongList" :key="key" :value="item['dong_cd']"> | |
25 | - {{ item['dong_nm'] }} | |
26 | - </option> | |
27 | - </select> | |
28 | - </div> | |
29 | - <div class="flex-between m-b" id="nodeHiddenCk"> | |
30 | - <label for="">교차로</label> | |
31 | - <select name="nodeSelectList" id="nodeSelectList" v-model="address['node_id']" @change="nodeSelectF($event)"> | |
32 | - <option :value=null disabled> 교차로 </option> | |
33 | - <option v-for="(item, key) in nodeList" :key="key" :value="item['node_id']"> | |
34 | - {{ item['node_name'] }} | |
35 | - </option> | |
36 | - </select> | |
37 | - </div> | |
38 | - <div class="flex-between m-b" id="crslk_azHiddenCk"> | |
39 | - <label for="">방위각</label> | |
40 | - <select name="crslk_azSelectList" id="crslk_azSelectList" v-model="address['crslk_az']"> | |
41 | - <option :value="0" disabled> 방위각 </option> | |
42 | - <option :value="10">북</option> | |
43 | - <option :value="50">북동</option> | |
44 | - <option :value="20">동</option> | |
45 | - <option :value="60">남동</option> | |
46 | - <option :value="30">남</option> | |
47 | - <option :value="70">남서</option> | |
48 | - <option :value="40">서</option> | |
49 | - <option :value="80">북서</option> | |
50 | - </select> | |
51 | - </div> | |
52 | -</template> | |
53 | - | |
54 | -<script> | |
55 | -import axios from 'axios'; | |
56 | - | |
57 | -export default { | |
58 | - props:{ | |
59 | - siDoHiddenCk:Boolean, | |
60 | - gunGuHiddenCk:Boolean, | |
61 | - dongHiddenCk:Boolean, | |
62 | - nodeHiddenCk:Boolean, | |
63 | - crslk_azHiddenCk:Boolean, | |
64 | - }, | |
65 | - data() { | |
66 | - return { | |
67 | - address: { | |
68 | - //지역 설정 | |
69 | - dong_cd : "22030", | |
70 | - siDo_dong_cd : "22", | |
71 | - guGun_dong_cd : "22030", | |
72 | - dong_dong_cd : null, | |
73 | - node_id : null, | |
74 | - zoomLevel : null, | |
75 | - crslk_az : null, | |
76 | - }, | |
77 | - siDoList: [], | |
78 | - gunGuList: [], | |
79 | - dongList: [], | |
80 | - nodeList:[], | |
81 | - }; | |
82 | - }, | |
83 | - | |
84 | - components: { | |
85 | - }, | |
86 | - watch: { | |
87 | - 'address.siDo_dong_cd': function (newValue, oldValue) { | |
88 | - console.log("newValue : ", newValue); | |
89 | - console.log("oldValue : ", oldValue); | |
90 | - this.address.dong_cd = newValue; | |
91 | - this.onEmit(); | |
92 | - this.address.zoomLevel=11.5; | |
93 | - // this.address.guGun_dong_cd = null; | |
94 | - // this.address.dong_dong_cd = null; | |
95 | - this.gunGuList = null; | |
96 | - this.dongList = null; | |
97 | - | |
98 | - this.gunGuSelect(newValue); | |
99 | - | |
100 | - }, | |
101 | - 'address.guGun_dong_cd': function (newValue, oldValue) { | |
102 | - console.log("guGun_dong_cd newValue : ", newValue); | |
103 | - console.log("guGun_dong_cd oldValue : ", oldValue); | |
104 | - this.address.dong_cd = newValue; | |
105 | - this.address.zoomLevel=14; | |
106 | - | |
107 | - this.onEmit(); | |
108 | - | |
109 | - // this.address.dong_dong_cd = null; | |
110 | - this.dongList = null; | |
111 | - if (newValue != null) { | |
112 | - this.dongSelectList(newValue); | |
113 | - } | |
114 | - }, | |
115 | - 'address.dong_dong_cd': function (newValue, oldValue) { | |
116 | - console.log("dong_dong_cd newValue : ", newValue); | |
117 | - console.log("dong_dong_cd oldValue : ", oldValue); | |
118 | - this.address.dong_cd = newValue; | |
119 | - this.address.zoomLevel=15; | |
120 | - this.findNodeUsingDongSelectList(newValue); | |
121 | - this.onEmit(); | |
122 | - }, | |
123 | - 'address.node_id': function (newValue, oldValue) { | |
124 | - console.log("node_id newValue : ", newValue); | |
125 | - console.log("node_id oldValue : ", oldValue); | |
126 | - this.address.node_id = newValue; | |
127 | - this.address.zoomLevel=19; | |
128 | - this.onEmit(); | |
129 | - }, | |
130 | - }, | |
131 | - methods: { | |
132 | - //시/도 받아오기 | |
133 | - siDoSelectList: function () { | |
134 | - const vm = this; | |
135 | - axios({ | |
136 | - url: '/dong/siDoSelectList.json', | |
137 | - method: 'post', | |
138 | - headers: { | |
139 | - 'Content-Type': "application/json; charset=UTF-8", | |
140 | - }, | |
141 | - data: {} | |
142 | - }).then(function (response) { | |
143 | - console.log("siDoSelectList - response : ", response.data); | |
144 | - vm.siDoList = response.data; | |
145 | - }).catch(function (error) { | |
146 | - console.log("siDoSelectList - error : ", error); | |
147 | - }); | |
148 | - }, | |
149 | - | |
150 | - //군/구 받아오기 | |
151 | - gunGuSelect: function (dong_cd) { | |
152 | - const vm = this; | |
153 | - axios({ | |
154 | - url: '/dong/gunGuSelectList.json', | |
155 | - method: 'post', | |
156 | - headers: { | |
157 | - 'Content-Type': "application/json; charset=UTF-8", | |
158 | - }, | |
159 | - data: { 'dong_cd': dong_cd } | |
160 | - }).then(function (response) { | |
161 | - console.log("gunGuSelect - response : ", response.data); | |
162 | - vm.gunGuList = response.data; | |
163 | - }).catch(function (error) { | |
164 | - console.log("gunGuSelect - error : ", error); | |
165 | - }); | |
166 | - }, | |
167 | - | |
168 | - //행정동 받아오기 | |
169 | - dongSelectList: function (dong_cd) { | |
170 | - const vm = this; | |
171 | - axios({ | |
172 | - url: '/dong/dongSelectList.json', | |
173 | - method: 'post', | |
174 | - headers: { | |
175 | - 'Content-Type': "application/json; charset=UTF-8", | |
176 | - }, | |
177 | - data: { 'dong_cd': dong_cd } | |
178 | - }).then(function (response) { | |
179 | - console.log("dongSelectList - response : ", response.data); | |
180 | - vm.dongList = response.data; | |
181 | - }).catch(function (error) { | |
182 | - console.log("dongSelectList - error : ", error); | |
183 | - }); | |
184 | - }, | |
185 | - //노드(교차로) 받아오기 | |
186 | - findNodeUsingDongSelectList: function (dong_cd) { | |
187 | - const vm = this; | |
188 | - axios({ | |
189 | - url: '/node/findNodeUsingDongSelectList.json', | |
190 | - method: 'post', | |
191 | - headers: { | |
192 | - 'Content-Type': "application/json; charset=UTF-8", | |
193 | - }, | |
194 | - data: { 'dong_cd': dong_cd } | |
195 | - }).then(function (response) { | |
196 | - console.log("findNodeUsingDongSelectList - response : ", response.data); | |
197 | - vm.nodeList = response.data; | |
198 | - }).catch(function (error) { | |
199 | - console.log("findNodeUsingDongSelectList - error : ", error); | |
200 | - }); | |
201 | - }, | |
202 | - siDoGunGuSelectF(event){ | |
203 | - this.$parent.siDoGunGuSelectF(event) | |
204 | - }, | |
205 | - dongSelectF(event){ | |
206 | - this.$parent.dongSelectF(event) | |
207 | - }, | |
208 | - nodeSelectF(event){ | |
209 | - this.$parent.nodeSelectF(event) | |
210 | - }, | |
211 | - onEmit() { | |
212 | - console.log("child this.address.dong_cd : ", this.address); | |
213 | - this.$emit("setDongCd", this.address); | |
214 | - | |
215 | - }, | |
216 | - }, | |
217 | - mounted() { | |
218 | - console.log("dongSelectList mounted : "); | |
219 | - this.siDoSelectList(); | |
220 | - this.gunGuSelect(this.address.siDo_dong_cd); | |
221 | - this.dongSelectList(this.address.guGun_dong_cd); | |
222 | - this.onEmit(); | |
223 | - if(this.siDoHiddenCk){ | |
224 | - document.getElementById("siDoHiddenCk").style.display ='none'; | |
225 | - } | |
226 | - if(this.gunGuHiddenCk){ | |
227 | - document.getElementById("gunGuHiddenCk").style.display ='none'; | |
228 | - } | |
229 | - if(this.dongHiddenCk){ | |
230 | - document.getElementById("dongHiddenCk").style.display ='none'; | |
231 | - } | |
232 | - if(this.nodeHiddenCk){ | |
233 | - document.getElementById("nodeHiddenCk").style.display ='none'; | |
234 | - } | |
235 | - if(this.crslk_azHiddenCk){ | |
236 | - document.getElementById("crslk_azHiddenCk").style.display ='none'; | |
237 | - } | |
238 | - }, | |
239 | -}; | |
240 | - | |
241 | -</script> | |
242 | - | |
243 | - | |
244 | - | |
245 | - (No newline at end of file) |
--- client/views/index.ts
+++ client/views/index.ts
... | ... | @@ -10,7 +10,7 @@ |
10 | 10 |
import AppFilters from './pages/AppFilters'; |
11 | 11 |
import App from './pages/App.vue'; |
12 | 12 |
|
13 |
-import OpenLayersMap from "vue3-openlayers"; |
|
13 |
+ |
|
14 | 14 |
import "vue3-openlayers/dist/vue3-openlayers.css"; |
15 | 15 |
|
16 | 16 |
// const vue = createApp(App).use(AppRouter).mount('#root'); |
... | ... | @@ -18,8 +18,6 @@ |
18 | 18 |
vue.use(AppStore); |
19 | 19 |
vue.use(AppRouter); |
20 | 20 |
vue.config.globalProperties.$filters = AppFilters |
21 |
- |
|
22 |
-vue.use(OpenLayersMap); |
|
23 | 21 |
|
24 | 22 |
vue.mount('#root'); |
25 | 23 |
|
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
... | ... | @@ -49,102 +49,21 @@ |
49 | 49 |
</div> |
50 | 50 |
<div class="header_menu"> |
51 | 51 |
<nav class="flex"> |
52 |
- <router-link to="/Introduction.page"> |
|
53 |
- <span |
|
54 |
- @mouseover="showDropdown = true" |
|
55 |
- @mouseleave="showDropdown = false" |
|
56 |
- >플랫폼 소개 |
|
57 |
- </span> |
|
52 |
+ <router-link to="/ApiTokenManagement.page"> |
|
53 |
+ <span v-show="loginCheck()" >API 토큰 관리</span> |
|
58 | 54 |
</router-link> |
59 |
- <div |
|
60 |
- class="nav" |
|
61 |
- v-show="showDropdown" |
|
62 |
- @mouseover="showDropdown = true" |
|
63 |
- @mouseleave="showDropdown = false" |
|
64 |
- > |
|
65 |
- <div class="menu flex-end"> |
|
66 |
- <ul> |
|
67 |
- <li |
|
68 |
- v-for="option in dropdownOptions" |
|
69 |
- :key="option.value" |
|
70 |
- @click="navigateToPage(option)" |
|
71 |
- > |
|
72 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
73 |
- </li> |
|
74 |
- </ul> |
|
75 |
- <ul> |
|
76 |
- <li |
|
77 |
- v-for="option in dropdownOptions2" |
|
78 |
- :key="option.value" |
|
79 |
- @click="navigateToPage(option)" |
|
80 |
- > |
|
81 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
82 |
- </li> |
|
83 |
- </ul> |
|
84 |
- <ul> |
|
85 |
- <li |
|
86 |
- v-for="option in dropdownOptions5" |
|
87 |
- :key="option.value" |
|
88 |
- @click="navigateToPage(option)" |
|
89 |
- > |
|
90 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
91 |
- </li> |
|
92 |
- </ul> |
|
93 |
- <ul> |
|
94 |
- <li |
|
95 |
- v-for="option in dropdownOptions3" |
|
96 |
- :key="option.value" |
|
97 |
- @click="navigateToPage(option)" |
|
98 |
- > |
|
99 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
100 |
- </li> |
|
101 |
- </ul> |
|
102 |
- <ul> |
|
103 |
- <li |
|
104 |
- v-for="option in dropdownOptions4" |
|
105 |
- :key="option.value" |
|
106 |
- @click="navigateToPage(option)" |
|
107 |
- > |
|
108 |
- <router-link :to="option.route">{{ option.label }}</router-link> |
|
109 |
- </li> |
|
110 |
- </ul> |
|
111 |
- </div> |
|
112 |
- </div> |
|
113 |
- |
|
114 |
- <router-link to="/RealtimeStatus.page"> |
|
115 |
- <span |
|
116 |
- @mouseover="showDropdown = true" |
|
117 |
- @mouseleave="showDropdown = false" |
|
118 |
- >현황관제</span |
|
119 |
- > |
|
55 |
+ <router-link to="/RequestLog.page"> |
|
56 |
+ <span v-show="loginCheck()">수집로그</span> |
|
120 | 57 |
</router-link> |
121 |
- <router-link to="/Analysis.page"> |
|
122 |
- <span |
|
123 |
- @mouseover="showDropdown = true" |
|
124 |
- @mouseleave="showDropdown = false" |
|
125 |
- >통계분석 |
|
126 |
- </span> |
|
127 |
- </router-link> |
|
128 |
- <router-link to="/CrosswalkInsert.page"> |
|
129 |
- <span |
|
130 |
- @mouseover="showDropdown = true" |
|
131 |
- @mouseleave="showDropdown = false" |
|
132 |
- >횡단보도 관리</span |
|
133 |
- > |
|
134 |
- </router-link> |
|
135 |
- <router-link to="/UserManagement.page"> |
|
136 |
- <span |
|
137 |
- @mouseover="showDropdown = true" |
|
138 |
- @mouseleave="showDropdown = false" |
|
139 |
- >시스템 관리</span |
|
140 |
- > |
|
141 |
- </router-link> |
|
58 |
+ <router-link to="/ResponseLog.page"> |
|
59 |
+ <span v-show="loginCheck()">발송로그</span> |
|
60 |
+ </router-link> |
|
61 |
+ <router-link to="/ResponseLog.page" > |
|
62 |
+ <button class="logout-btn" @click="logout" v-show="loginCheck()" style="float: right;">로그아웃</button> |
|
63 |
+ </router-link> |
|
142 | 64 |
</nav> |
143 |
- <div class="sub_menu"> |
|
144 |
- <router-link to="/Login.page"> |
|
145 |
- <span>로그인</span> |
|
146 |
- </router-link> |
|
147 |
- <button class="logout-btn" @click="logout" v-show="!store.state.loginUser == false && store.state.loginUser != null">로그아웃</button> |
|
65 |
+ <div class="sub_menu"> |
|
66 |
+ |
|
148 | 67 |
</div> |
149 | 68 |
</div> |
150 | 69 |
</header> |
... | ... | @@ -161,161 +80,35 @@ |
161 | 80 |
imageSrc: 'https://firebasestorage.googleapis.com/v0/b/senior-care-system-dcf90.appspot.com/o/menu2.png?alt=media&token=6f3b2966-0820-419d-ba82-97290e71a7b5', |
162 | 81 |
menuOpen: false, |
163 | 82 |
showDropdown: false, |
164 |
- showSubmenu: false, |
|
165 |
- dropdownOptions: [ |
|
166 |
- { |
|
167 |
- label: "스마트 횡단보도란?", |
|
168 |
- value: "Introduction", |
|
169 |
- route: "/Introduction.page", |
|
170 |
- }, |
|
171 |
- // { label: '매뉴얼 다운로드', value: 'ManualDown', route: '/ManualDown.page' }, |
|
172 |
- ], |
|
173 |
- selectedOption: null, |
|
174 |
- dropdownOptions2: [ |
|
175 |
- { |
|
176 |
- label: "실시간 현황 관제", |
|
177 |
- value: "RealtimeStatus", |
|
178 |
- route: "/RealtimeStatus.page", |
|
179 |
- }, |
|
180 |
- { |
|
181 |
- label: "상황발생 정보 조회", |
|
182 |
- value: "SituationSearch", |
|
183 |
- route: "/SituationSearch.page", |
|
184 |
- }, |
|
185 |
- { |
|
186 |
- label: "장애발생 정보 조회", |
|
187 |
- value: "ErrorSearch", |
|
188 |
- route: "/ErrorSearch.page", |
|
189 |
- }, |
|
190 |
- { |
|
191 |
- label: "횡단보도 목록 조회", |
|
192 |
- value: "CrosswalkListSearch", |
|
193 |
- route: "/CrosswalkListSearch.page", |
|
194 |
- }, |
|
195 |
- ], |
|
196 |
- selectedOption2: null, |
|
197 |
- dropdownOptions3: [ |
|
198 |
- { |
|
199 |
- label: "횡단보도 등록", |
|
200 |
- value: "CrosswalkInsert", |
|
201 |
- route: "/CrosswalkInsert.page", |
|
202 |
- }, |
|
203 |
- { |
|
204 |
- label: "횡단보도 조회", |
|
205 |
- value: "CrosswalkSearch", |
|
206 |
- route: "/CrosswalkSearch.page", |
|
207 |
- }, |
|
208 |
- ], |
|
209 |
- selectedOption3: null, |
|
210 |
- dropdownOptions4: [ |
|
211 |
- { |
|
212 |
- label: "사용자 관리", |
|
213 |
- value: "UserManagement", |
|
214 |
- route: "/UserManagement.page", |
|
215 |
- }, |
|
216 |
- { |
|
217 |
- label: "유지보수담당자 관리", |
|
218 |
- value: "ChargeManagement", |
|
219 |
- route: "/ChargeManagement.page", |
|
220 |
- }, |
|
221 |
- { |
|
222 |
- label: "표준노드 관리", |
|
223 |
- value: "NodeManagement", |
|
224 |
- route: "/NodeManagement.page", |
|
225 |
- }, |
|
226 |
- { |
|
227 |
- label: "행정동 관리", |
|
228 |
- value: "DongManagement", |
|
229 |
- route: "/DongManagement.page", |
|
230 |
- }, |
|
231 |
- { |
|
232 |
- label: "데이터 수집 기록", |
|
233 |
- value: "DataRecord", |
|
234 |
- route: "/DataRecord.page", |
|
235 |
- }, |
|
236 |
- ], |
|
237 |
- selectedOption4: null, |
|
238 |
- dropdownOptions5: [ |
|
239 |
- { label: "통계분석", value: "Analysis", route: "/Analysis.page" }, |
|
240 |
- ], |
|
241 |
- selectedOption5: null, |
|
242 |
- menuItems: [ |
|
243 |
- { |
|
244 |
- title: "플랫폼 소개", |
|
245 |
- open: false, |
|
246 |
- subMenu: [ |
|
247 |
- { title: "스마트 횡단보도란?", route: "/Introduction.page" }, |
|
248 |
- ] |
|
249 |
- }, |
|
250 |
- { |
|
251 |
- title: "현황관제", |
|
252 |
- open: false, |
|
253 |
- subMenu: [ |
|
254 |
- { title: "실시간 현황관제", route: "/RealtimeStatus.page" }, |
|
255 |
- { title: "상황발생 정보조회", route: "/SituationSearch.page" }, |
|
256 |
- { title: "장애 발생 정보조회", route: "/ErrorSearch.page" }, |
|
257 |
- { title: "횡단보도 목록조회", route: "/CrosswalkListSearch.page" }, |
|
258 |
- ], |
|
259 |
- }, |
|
260 |
- { |
|
261 |
- title: "통계분석", |
|
262 |
- open: false, |
|
263 |
- subMenu: [{ title: "통계분석", route: "/Analysis.page" },], |
|
264 |
- }, |
|
265 |
- { |
|
266 |
- title: "횡단보도 관리", |
|
267 |
- open: false, |
|
268 |
- subMenu: [ |
|
269 |
- { title: "횡단보도 등록", route: "/CrosswalkInsert.page" }, |
|
270 |
- { title: "횡단보도 조회", route: "/CrosswalkSearch.page" }, |
|
271 |
- ], |
|
272 |
- }, |
|
273 |
- { |
|
274 |
- title: "시스템 관리", |
|
275 |
- open: false, |
|
276 |
- subMenu: [ |
|
277 |
- { title: "사용자 관리", route: "/UserManagement.page" }, |
|
278 |
- { title: "유지보수 담당자 관리", route: "/ChargeManagement.page" }, |
|
279 |
- { title: "표준노드 관리", route: "/NodeManagement.page" }, |
|
280 |
- { title: "행정동 관리", route: "/DongManagement.page" }, |
|
281 |
- { title: "데이터 수집기록", route: "/DataRecord.page" }, |
|
282 |
- ], |
|
283 |
- }, |
|
284 |
- // { |
|
285 |
- // title: "마이페이지", |
|
286 |
- // open: false, |
|
287 |
- // route: "/Mypage.page" |
|
288 |
- // }, |
|
289 |
- // { |
|
290 |
- // title: "로그인", |
|
291 |
- // open: false, |
|
292 |
- // subMenu: [{ title: "로그인", route: "/Login.page" },], |
|
293 |
- // }, |
|
294 |
- ], |
|
83 |
+ showSubmenu: false, |
|
295 | 84 |
store : useStore(), |
85 |
+ showData : false |
|
296 | 86 |
}; |
297 | 87 |
}, |
88 |
+ computed : { |
|
89 |
+ loginChecks: function(){ |
|
90 |
+ if(sessionStorage.getItem('login') == 'true'){ |
|
91 |
+ return true; |
|
92 |
+ }else{ |
|
93 |
+ return false; |
|
94 |
+ } |
|
95 |
+ }, |
|
96 |
+ }, |
|
298 | 97 |
methods: { |
98 |
+ loginCheck : function(){ |
|
99 |
+ if(sessionStorage.getItem('login') == 'true'){ |
|
100 |
+ return true; |
|
101 |
+ }else{ |
|
102 |
+ return false; |
|
103 |
+ } |
|
104 |
+ }, |
|
299 | 105 |
//로그아웃 |
300 | 106 |
logout: function () { |
301 |
- if (confirm('로그아웃 하시겠습니까?') == false) { |
|
302 |
- return; |
|
303 |
- } |
|
304 |
- let vm = this; |
|
305 |
- axios({ |
|
306 |
- url: "/user/logout.json", |
|
307 |
- method: "post", |
|
308 |
- headers: { |
|
309 |
- "Content-Type": "application/json; charset=UTF-8", |
|
310 |
- }, |
|
311 |
- }).then(function (response) { |
|
312 |
- // console.log("logout - response : ", response); |
|
313 |
- vm.$router.push({ path: '/Login.page', query: {} }); |
|
314 |
- }).catch(function (error) { |
|
315 |
- console.log("logout - error : ", error); |
|
316 |
- }); |
|
317 |
- }, |
|
318 |
- |
|
107 |
+ if (confirm('로그아웃 하시겠습니까?')) { |
|
108 |
+ sessionStorage.setItem("login", false); |
|
109 |
+ this.$router.push({ path: '/Login.page', query: {} }); |
|
110 |
+ } |
|
111 |
+ }, |
|
319 | 112 |
toggleSubMenu(index) { |
320 | 113 |
this.menuItems[index].open = !this.menuItems[index].open; |
321 | 114 |
this.showSubmenu = true; |
--- client/views/pages/Analysis/Analysis.vue
... | ... | @@ -1,316 +0,0 @@ |
1 | -<template> | |
2 | - <div class="flex"> | |
3 | - <button @click="toggleSlide" class="toggle">{{ slideText }}</button> | |
4 | - <div :class="['slide-content left', { active: showSlide }]"> | |
5 | - <div class="wrap flex-between"> | |
6 | - <div class="iconlist"> | |
7 | - <ul> | |
8 | - <li | |
9 | - v-for="item in items" | |
10 | - :key="item.id" | |
11 | - :class="{ active: item.isActive }" | |
12 | - @click="toggleActive(item)" | |
13 | - > | |
14 | - <div></div> | |
15 | - <p>{{ item.name }}</p> | |
16 | - </li> | |
17 | - </ul> | |
18 | - </div> | |
19 | - <div class="search"> | |
20 | - <h2 style="background: #00b050">무단횡단 분석</h2> | |
21 | - <h2>지역별</h2> | |
22 | - <div class="box" style="background: #eaebec"> | |
23 | - <div class="flex gap m-b"> | |
24 | - <label style="width: 7rem">분석날짜</label> | |
25 | - <input type="date" name="" id="" /> | |
26 | - <span>~</span> | |
27 | - <input type="date" name="" id="" /> | |
28 | - </div> | |
29 | - <DongSelectList | |
30 | - @setDongCd="setDongCd" | |
31 | - :azimuthHiddenCk="false" | |
32 | - ></DongSelectList> | |
33 | - <div class="flex-between m-b"> | |
34 | - <label for="">횡단보도</label> | |
35 | - <select name="" id=""></select> | |
36 | - </div> | |
37 | - <div class="flex-center"> | |
38 | - <button type="button" class="btn-2 green-btn btn-l">조회</button> | |
39 | - </div> | |
40 | - </div> | |
41 | - <h2>검색결과</h2> | |
42 | - <div class="box bg-white tab-buttons result"> | |
43 | - <h4>총 <em style="color: #13833b">200</em>건</h4> | |
44 | - <ul> | |
45 | - <li class="result"> | |
46 | - <h5>1</h5> | |
47 | - <p class="m-b">시도: 대구광역시 서구 평리동</p> | |
48 | - <p class="m-b"> | |
49 | - <em style="color: #13833b">장소: 남평리네거리</em> | |
50 | - </p> | |
51 | - <p class="m-b">X좌표: 00.0000</p> | |
52 | - <p class="m-b">Y좌표: 00.0000</p> | |
53 | - <p class="">무단횡단 수: 120</p> | |
54 | - </li> | |
55 | - </ul> | |
56 | - </div> | |
57 | - </div> | |
58 | - </div> | |
59 | - </div> | |
60 | - <div class="right"> | |
61 | - <div class="top flex gap"> | |
62 | - <button>클러스터</button> | |
63 | - <button>레이어</button> | |
64 | - <button>히트맵</button> | |
65 | - </div> | |
66 | - <div> | |
67 | - <OpenLayers ref="open_layers" /> | |
68 | - </div> | |
69 | - </div> | |
70 | - <div class="chart"> | |
71 | - <h2>보행자 수 대비 무단횡단 수</h2> | |
72 | - <div class=""></div> | |
73 | - <h2>무단횡단 비율</h2> | |
74 | - <div class=""> | |
75 | - <h2 style="background: #f7f6f6; color: #333">시/군/구 별</h2> | |
76 | - <div class=""></div> | |
77 | - <h2 style="background: #f7f6f6; color: #333">읍/면/동 별</h2> | |
78 | - <div class=""></div> | |
79 | - </div> | |
80 | - <h2>시/도 전체 시간/요일별 발생현황</h2> | |
81 | - <div class=""></div> | |
82 | - </div> | |
83 | - </div> | |
84 | -</template> | |
85 | -<script> | |
86 | -import Map from "../../component/map/map.vue"; | |
87 | -import MapPage from "../../component/map/map.vue"; | |
88 | -import OpenLayers from "../../component/OpenLayers.vue"; | |
89 | -import { | |
90 | - vworldBaseLayer, | |
91 | - vworldGrayLayer, | |
92 | - vworldMidnightLayer, | |
93 | - vworldHybridLayer, | |
94 | - vworldSatelliteLayer, | |
95 | -} from "../../component/OpenLayersMap.vue"; | |
96 | -import { baseStyles } from "../../component/OpenLayersStyle.vue"; | |
97 | -import axios from "axios"; | |
98 | -import DongSelectList from "../../component/dongSelectList.vue"; | |
99 | - | |
100 | -export default { | |
101 | - data() { | |
102 | - return { | |
103 | - showSlide: false, | |
104 | - slideText: '검색하기', | |
105 | - tabs: [ | |
106 | - { | |
107 | - id: 1, | |
108 | - title: "상황발생현황", | |
109 | - content1: "This is the content for Tab 1", | |
110 | - }, | |
111 | - { | |
112 | - id: 2, | |
113 | - title: "장애발생현황", | |
114 | - content2: "This is the content for Tab 2", | |
115 | - }, | |
116 | - ], | |
117 | - activeTab: 1, | |
118 | - items: [ | |
119 | - { id: 1, name: "무단횡단", isActive: false }, | |
120 | - { id: 2, name: "신호연장", isActive: false }, | |
121 | - { id: 3, name: "우회전 차량", isActive: false }, | |
122 | - { id: 4, name: "장애발생", isActive: false }, | |
123 | - ], | |
124 | - }; | |
125 | - }, | |
126 | - components: { | |
127 | - MapPage: MapPage, | |
128 | - Map, | |
129 | - OpenLayers: OpenLayers, | |
130 | - DongSelectList: DongSelectList, | |
131 | - }, | |
132 | - methods: { | |
133 | - toggleSlide() { | |
134 | - if (this.showSlide) { | |
135 | - this.slideText = "검색하기"; | |
136 | - } else { | |
137 | - this.slideText = "창닫기"; | |
138 | - } | |
139 | - this.showSlide = !this.showSlide; | |
140 | - }, | |
141 | - changeTab(tabId) { | |
142 | - this.activeTab = tabId; | |
143 | - }, | |
144 | - toggleActive(item) { | |
145 | - for (var i = 0; i < 4; i++) { | |
146 | - this.items[i].isActive = false; | |
147 | - } | |
148 | - item.isActive = !item.isActive; | |
149 | - }, | |
150 | - statusSearch: function () { | |
151 | - console.log("statusSearch this.address.dong_cd : ", this.address.dong_cd); | |
152 | - | |
153 | - this.$refs.open_layers.removeLayerAll(); | |
154 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
155 | - // this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','realtimeStatusMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',this.address.dong_cd); | |
156 | - this.$refs.open_layers.addClusterLayer( | |
157 | - "/common/getDongsGeoJson.json", | |
158 | - "realtimeStatusMap", | |
159 | - "EPSG:5181", | |
160 | - "", | |
161 | - "", | |
162 | - this.address.dong_cd | |
163 | - ); | |
164 | - // this.$refs.open_layers.createClusterSource(); | |
165 | - }, | |
166 | - setDongCd(value) { | |
167 | - console.log("value : ", value); | |
168 | - this.address = value; | |
169 | - }, | |
170 | - }, | |
171 | - watch: {}, | |
172 | - computed: {}, | |
173 | - mounted() { | |
174 | - console.log("Main2 mounted"); | |
175 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
176 | - }, | |
177 | -}; | |
178 | -</script> | |
179 | - | |
180 | -<style scoped> | |
181 | -@media all and (max-width: 479px) { | |
182 | - .wrap{margin: 0 !important;} | |
183 | - .result{min-height: 30rem;} | |
184 | - .iconlist { | |
185 | - width: -webkit-fill-available; | |
186 | - height: 6rem; | |
187 | - padding: 1rem; | |
188 | - } | |
189 | - .iconlist ul { | |
190 | - display: flex; | |
191 | - align-items: center; | |
192 | - justify-content: space-around; | |
193 | - } | |
194 | - .top p { | |
195 | - padding-right: 1rem; | |
196 | - } | |
197 | - .chart { | |
198 | - width: -webkit-fill-available !important; | |
199 | - } | |
200 | - | |
201 | - .top { | |
202 | - width: auto; | |
203 | - right: -1rem; | |
204 | - } | |
205 | - .top ul { | |
206 | - width: 137rem; | |
207 | - overflow: hidden; | |
208 | - justify-content: space-between !important; | |
209 | - padding: 2rem 1rem !important; | |
210 | - } | |
211 | - .top li { | |
212 | - display: flex; | |
213 | - align-items: center; | |
214 | - } | |
215 | - .search { | |
216 | - width: inherit; | |
217 | - } | |
218 | - .toggle { | |
219 | - color: #fff; | |
220 | - font-weight: bold; | |
221 | - background: #13833b; | |
222 | - display: block !important; | |
223 | - position: absolute; | |
224 | - z-index: 150; | |
225 | - top: 7.5rem; | |
226 | - right: 1rem; | |
227 | - } | |
228 | - .wrap { | |
229 | - height: auto !important; | |
230 | - width: inherit; | |
231 | - display: block; | |
232 | - } | |
233 | - .slide-content { | |
234 | - position: absolute; | |
235 | - z-index: 104; | |
236 | - top: 0rem; | |
237 | - left: 0rem; | |
238 | - /* width: 46rem;*/ | |
239 | - background-color: #f0f0f0; | |
240 | - transition: transform 0.3s ease; | |
241 | - transform: translateX(100%); | |
242 | - } | |
243 | - | |
244 | - .slide-content.active { | |
245 | - transform: translateX(0); | |
246 | - } | |
247 | -} | |
248 | -.toggle { | |
249 | - display: none; | |
250 | -} | |
251 | -.chart { | |
252 | - width: 600px; | |
253 | -} | |
254 | -.chart div { | |
255 | - min-height: 17.53rem; | |
256 | -} | |
257 | -.chart h2 { | |
258 | - padding: 0.5rem 0; | |
259 | -} | |
260 | -.search .box ul li { | |
261 | - padding: 1rem 1rem 1rem 3rem; | |
262 | -} | |
263 | -.result { | |
264 | - position: relative; | |
265 | -} | |
266 | -h5 { | |
267 | - position: absolute; | |
268 | - left: 0; | |
269 | - font-size: 2rem; | |
270 | -} | |
271 | -.box { | |
272 | - text-align: left; | |
273 | -} | |
274 | -h4 { | |
275 | - position: relative; | |
276 | - border-bottom: 1px solid #e5e3e3; | |
277 | - padding: 0 0 1rem 0; | |
278 | - text-align: left; | |
279 | -} | |
280 | -.btn_set div { | |
281 | - position: absolute; | |
282 | - top: 40px; | |
283 | - width: 313px; | |
284 | - height: 380px; | |
285 | - background: #fff; | |
286 | - padding: 1rem; | |
287 | -} | |
288 | -.bg-white::-webkit-scrollbar-thumb { | |
289 | - background-color: #fff; | |
290 | -} | |
291 | -h2 { | |
292 | - background: #50ba8a; | |
293 | - text-align: center; | |
294 | - color: #fff; | |
295 | - padding: 1.6rem 0; | |
296 | -} | |
297 | - | |
298 | -.top { | |
299 | - background: none; | |
300 | - margin: 2rem; | |
301 | -} | |
302 | -.wrap { | |
303 | - z-index: 100; | |
304 | - top: 0; | |
305 | - height: 865px; | |
306 | -} | |
307 | -.left { | |
308 | - background: #fff; | |
309 | -} | |
310 | -.right { | |
311 | - width: -webkit-fill-available; | |
312 | -} | |
313 | -.top button.clicked { | |
314 | - background: #50ba8a; | |
315 | -} | |
316 | -</style> |
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 |
<div class="main-warp"> |
6 | 6 |
<router-view /> |
7 | 7 |
</div> |
8 |
- <Footer></Footer> |
|
8 |
+ <!-- <Footer></Footer> --> |
|
9 | 9 |
</div> |
10 | 10 |
</template> |
11 | 11 |
|
... | ... | @@ -16,6 +16,10 @@ |
16 | 16 |
import Menu from "../layout/Menu.vue"; |
17 | 17 |
import Footer from "../layout/Footer.vue"; |
18 | 18 |
|
19 |
+var sessionOptions = { |
|
20 |
+ persist: true |
|
21 |
+} |
|
22 |
+ |
|
19 | 23 |
const App = { |
20 | 24 |
data: function () { |
21 | 25 |
return { |
... | ... | @@ -25,33 +29,7 @@ |
25 | 29 |
methods: { |
26 | 30 |
//로그인 사용자 조회 |
27 | 31 |
loginUserSelectOne: function (callback) { |
28 |
- let vm = this; |
|
29 |
- /* axios({ |
|
30 |
- url: "/user/loginUserSelectOne.json", |
|
31 |
- method: "post", |
|
32 |
- headers: { |
|
33 |
- "Content-Type": "application/json; charset=UTF-8", |
|
34 |
- }, |
|
35 |
- }).then(function (response) { |
|
36 |
- console.log("getIsLogin - response : ", response); |
|
37 |
- if (response.data.loginUser != null && response.data.loginUser['user_id'] != null) { |
|
38 |
- vm.store.commit("setLoginUser", response.data.loginUser); |
|
39 |
- } else { |
|
40 |
- vm.store.commit("setLoginUser", null); |
|
41 |
- } |
|
42 |
- if (response.data.key != null && response.data.key['salt'] != null) { |
|
43 |
- vm.store.commit("setKey", response.data.key); |
|
44 |
- // console.log("vm.store",vm.store); |
|
45 |
- // console.log("response.data.key['salt']",response.data.key['salt']); |
|
46 |
- } else { |
|
47 |
- vm.store.commit("setKey", null); |
|
48 |
- } |
|
49 |
- console.log("vm.store : ", vm.store); |
|
50 |
- |
|
51 |
- callback(response.data); |
|
52 |
- }).catch(function (error) { |
|
53 |
- console.log("getIsLogin - error : ", error); |
|
54 |
- });*/ |
|
32 |
+ let vm = this; |
|
55 | 33 |
} |
56 | 34 |
}, |
57 | 35 |
watch: {}, |
... | ... | @@ -61,13 +39,32 @@ |
61 | 39 |
Menu: Menu, |
62 | 40 |
Footer: Footer, |
63 | 41 |
}, |
64 |
- mounted: function () { |
|
65 |
- //vue router에게 페이지 변경 요청을 하여, router가 페이지 변경 전, 실행되는 훅(이벤트) |
|
66 |
- // this.$router.beforeEach((to, from, next) => { |
|
67 |
- //console.log("to : ", to, ", from : ", from); |
|
68 |
- //로그인 사용자 조회 후, callback을 통해 로그인 사용자 정보 받기 |
|
69 |
- // next("/Login.page"); |
|
70 |
- // }); |
|
42 |
+ mounted: function () { |
|
43 |
+ var vm = this; |
|
44 |
+ this.$router.beforeEach((to, from, next) => { |
|
45 |
+ console.log(' xx '); |
|
46 |
+ vm.$forceUpdate(); |
|
47 |
+ let isLogin = sessionStorage.getItem('login'); |
|
48 |
+ if(isLogin == 'true'){ |
|
49 |
+ if (to.path == '/Login.page') { |
|
50 |
+ next('ApiTokenManagement.page'); |
|
51 |
+ } else {//로그인 페이지 이 외의 페이지들을 이동 가능하게 함 |
|
52 |
+ next(); |
|
53 |
+ } |
|
54 |
+ }else{ |
|
55 |
+ if (from.path == '/Login.page') { |
|
56 |
+ next(false); |
|
57 |
+ } else {//로그인 페이지 이외의 페이지에서, 페이지 이동을 하려고 할 때 |
|
58 |
+ //로그인 페이지로 이동은 무조건 가능 |
|
59 |
+ if (to.path == "/Login.page") { |
|
60 |
+ next(); |
|
61 |
+ } else {//로그인 페이지로 무조건 이동 |
|
62 |
+ next("/Login.page"); |
|
63 |
+ } |
|
64 |
+ } |
|
65 |
+ } |
|
66 |
+ |
|
67 |
+ }); |
|
71 | 68 |
}, |
72 | 69 |
}; |
73 | 70 |
|
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
... | ... | @@ -1,52 +1,22 @@ |
1 | 1 |
import { createWebHistory, createRouter } from "vue-router"; |
2 | 2 |
|
3 | 3 |
import Main from '../pages/main/Main.vue'; |
4 |
-import RealtimeStatus from '../pages/RealtimeStatus/RealtimeStatus.vue'; |
|
5 |
-import CrosswalkListSearch from '../pages/RealtimeStatus/CrosswalkListSearch.vue'; |
|
6 |
-import SituationSearch from '../pages/RealtimeStatus/SituationSearch.vue'; |
|
7 |
-import ErrorSearch from '../pages/RealtimeStatus/ErrorSearch.vue'; |
|
8 |
-import Analysis from '../pages/Analysis/Analysis.vue'; |
|
9 |
-import CrosswalkInsert from '../pages/CrosswalkManagement/CrosswalkInsert.vue'; |
|
10 |
-import CrosswalkSearch from '../pages/CrosswalkManagement/CrosswalkSearch.vue'; |
|
11 | 4 |
import UserManagement from '../pages/SystemManagement/UserManagement.vue'; |
12 |
-import DongManagement from '../pages/SystemManagement/DongManagement.vue'; |
|
13 |
-import NodeManagement from '../pages/SystemManagement/NodeManagement.vue'; |
|
14 |
-import ChargeManagement from '../pages/SystemManagement/ChargeManagement.vue'; |
|
15 |
-import DataRecord from '../pages/SystemManagement/DataRecord.vue'; |
|
16 |
-import UserAddForm from '../pages/SystemManagement/UserAddForm.vue'; |
|
17 |
-import UserModifyForm from '../pages/SystemManagement/UserModifyForm.vue'; |
|
18 |
-import ManagerAddForm from '../pages/SystemManagement/ManagerAddForm.vue'; |
|
5 |
+import ApiTokenManagement from '../pages/SystemManagement/ApiTokenManagement.vue'; |
|
6 |
+import RequestLog from '../pages/SystemManagement/RequestLogView.vue'; |
|
7 |
+import ResponseLog from '../pages/SystemManagement/ResponseLogView.vue'; |
|
19 | 8 |
import Mypage from '../pages/User/Mypage.vue'; |
20 | 9 |
import Login from '../pages/main/Login.vue'; |
21 |
-import IdFind from '../pages/main/IdFind.vue'; |
|
22 |
-import Introduction from '../pages/Introduction/Introduction.vue'; |
|
23 |
-import ManualDown from '../pages/Introduction/ManualDown.vue'; |
|
24 |
-import UserModifyForm from '../pages/SystemManagement/UserModifyForm.vue'; |
|
25 | 10 |
|
26 | 11 |
const routes = [ |
27 | 12 |
/* 메인화면 */ |
28 |
- { path: '/', name: 'Main', component: Main}, |
|
29 |
- { path: '/RealtimeStatus.page', name: 'RealtimeStatus', component: RealtimeStatus}, |
|
30 |
- { path: '/Analysis.page', name: 'Analysis', component: Analysis}, |
|
31 |
- { path: '/CrosswalkInsert.page', name: 'CrosswalkInsert', component: CrosswalkInsert}, |
|
32 |
- { path: '/CrosswalkSearch.page', name: 'CrosswalkSearch', component: CrosswalkSearch}, |
|
33 |
- { path: '/UserManagement.page', name: 'UserManagement', component: UserManagement}, |
|
13 |
+ { path: '/', name: 'Main', component: UserManagement}, |
|
14 |
+ { path: 'admin/UserManagement.page', name: 'UserManagement', component: ApiTokenManagement}, |
|
15 |
+ { path: '/RequestLog.page', name: 'RequestLog', component: RequestLog}, |
|
16 |
+ { path: '/ResponseLog.page', name: 'ResponseLog', component: ResposeLog}, |
|
34 | 17 |
{ path: '/Mypage.page', name: 'Mypage', component: Mypage}, |
35 | 18 |
{ path: '/Login.page', name: 'Login', component: Login}, |
36 |
- { path: '/Introduction.page', name: 'Introduction', component: Introduction}, |
|
37 |
- { path: '/ManualDown.page', name: 'ManualDown', component: ManualDown}, |
|
38 |
- { path: '/CrosswalkListSearch.page', name: 'CrosswalkListSearch', component: CrosswalkListSearch}, |
|
39 |
- { path: '/SituationSearch.page', name: 'SituationSearch', component: SituationSearch}, |
|
40 |
- { path: '/ErrorSearch.page', name: 'ErrorSearch', component: ErrorSearch}, |
|
41 |
- { path: '/DongManagement.page', name: 'DongManagement', component: DongManagement}, |
|
42 |
- { path: '/NodeManagement.page', name: 'NodeManagement', component: NodeManagement}, |
|
43 |
- { path: '/ChargeManagement.page', name: 'ChargeManagement', component: ChargeManagement}, |
|
44 |
- { path: '/DataRecord.page', name: 'DataRecord', component: DataRecord}, |
|
45 |
- { path: '/UserAddForm.page', name: 'UserAddForm', component: UserAddForm}, |
|
46 |
- { path: '/UserModifyForm.page', name: 'UserModifyForm', component: UserModifyForm}, |
|
47 |
- { path: '/ManagerAddForm.page', name: 'ManagerAddForm', component: ManagerAddForm}, |
|
48 |
- { path: '/IdFind.page', name: 'IdFind', component: IdFind}, |
|
49 |
- { path: '/UserModifyForm.page', name: 'UserModifyForm', component: UserModifyForm}, |
|
19 |
+ { path: '/ApiTokenManagement.page', name: 'apiApiTokenManagementokenManagement', component: ApiTokenManagement}, |
|
50 | 20 |
]; |
51 | 21 |
|
52 | 22 |
const AppRouter = createRouter({ |
--- client/views/pages/AppRouter.ts
+++ client/views/pages/AppRouter.ts
... | ... | @@ -1,56 +1,22 @@ |
1 | 1 |
import { createWebHistory, createRouter } from "vue-router"; |
2 | 2 |
|
3 | 3 |
import Main from '../pages/main/Main.vue'; |
4 |
-import RealtimeStatus from '../pages/RealtimeStatus/RealtimeStatus.vue'; |
|
5 |
-import CrosswalkListSearch from '../pages/RealtimeStatus/CrosswalkListSearch.vue'; |
|
6 |
-import SituationSearch from '../pages/RealtimeStatus/SituationSearch.vue'; |
|
7 |
-import ErrorSearch from '../pages/RealtimeStatus/ErrorSearch.vue'; |
|
8 |
-import Analysis from '../pages/Analysis/Analysis.vue'; |
|
9 |
-import CrosswalkInsert from '../pages/CrosswalkManagement/CrosswalkInsert.vue'; |
|
10 |
-import CrosswalkSearch from '../pages/CrosswalkManagement/CrosswalkSearch.vue'; |
|
11 | 4 |
import UserManagement from '../pages/SystemManagement/UserManagement.vue'; |
12 |
-import DongManagement from '../pages/SystemManagement/DongManagement.vue'; |
|
13 |
-import NodeManagement from '../pages/SystemManagement/NodeManagement.vue'; |
|
14 |
-import NodeAddForm from '../pages/SystemManagement/NodeAddForm.vue'; |
|
15 |
-import ChargeManagement from '../pages/SystemManagement/ChargeManagement.vue'; |
|
16 |
-import DataRecord from '../pages/SystemManagement/DataRecord.vue'; |
|
17 |
-import UserAddForm from '../pages/SystemManagement/UserAddForm.vue'; |
|
18 |
-import ManagerAddForm from '../pages/SystemManagement/ManagerAddForm.vue'; |
|
19 |
-import AccessRecord from '../pages/SystemManagement/AccessRecord.vue'; |
|
5 |
+import ApiTokenManagement from './SystemManagement/ApiTokenManagement.vue'; |
|
6 |
+import requestLog from './SystemManagement/RequestLogView.vue'; |
|
7 |
+import responseLog from './SystemManagement/ResponseLogView.vue'; |
|
20 | 8 |
import Mypage from '../pages/User/Mypage.vue'; |
21 | 9 |
import Login from '../pages/main/Login.vue'; |
22 |
-import IdFind from '../pages/main/IdFind.vue'; |
|
23 |
-import Introduction from '../pages/Introduction/Introduction.vue'; |
|
24 |
-import ManualDown from '../pages/Introduction/ManualDown.vue'; |
|
25 |
-import UserModifyForm from '../pages/SystemManagement/UserModifyForm.vue'; |
|
26 |
-import ManagerModifyForm from '../pages/SystemManagement/ManagerModifyForm.vue'; |
|
27 | 10 |
|
28 | 11 |
const routes = [ |
29 | 12 |
/* 메인화면 */ |
30 | 13 |
{ path: '/', name: 'Main', component: Main}, |
31 |
- { path: '/RealtimeStatus.page', name: 'RealtimeStatus', component: RealtimeStatus}, |
|
32 |
- { path: '/Analysis.page', name: 'Analysis', component: Analysis}, |
|
33 |
- { path: '/CrosswalkInsert.page', name: 'CrosswalkInsert', component: CrosswalkInsert}, |
|
34 |
- { path: '/CrosswalkSearch.page', name: 'CrosswalkSearch', component: CrosswalkSearch}, |
|
35 | 14 |
{ path: '/UserManagement.page', name: 'UserManagement', component: UserManagement}, |
15 |
+ { path: '/requestLog.page', name: 'requestLog', component: requestLog}, |
|
16 |
+ { path: '/responseLog.page', name: 'resposeLog', component: responseLog}, |
|
36 | 17 |
{ path: '/Mypage.page', name: 'Mypage', component: Mypage}, |
37 | 18 |
{ path: '/Login.page', name: 'Login', component: Login}, |
38 |
- { path: '/Introduction.page', name: 'Introduction', component: Introduction}, |
|
39 |
- { path: '/ManualDown.page', name: 'ManualDown', component: ManualDown}, |
|
40 |
- { path: '/CrosswalkListSearch.page', name: 'CrosswalkListSearch', component: CrosswalkListSearch}, |
|
41 |
- { path: '/SituationSearch.page', name: 'SituationSearch', component: SituationSearch}, |
|
42 |
- { path: '/ErrorSearch.page', name: 'ErrorSearch', component: ErrorSearch}, |
|
43 |
- { path: '/DongManagement.page', name: 'DongManagement', component: DongManagement}, |
|
44 |
- { path: '/NodeManagement.page', name: 'NodeManagement', component: NodeManagement}, |
|
45 |
- { path: '/NodeAddForm.page', name: 'NodeAddForm', component: NodeAddForm}, |
|
46 |
- { path: '/ChargeManagement.page', name: 'ChargeManagement', component: ChargeManagement}, |
|
47 |
- { path: '/DataRecord.page', name: 'DataRecord', component: DataRecord}, |
|
48 |
- { path: '/UserAddForm.page', name: 'UserAddForm', component: UserAddForm}, |
|
49 |
- { path: '/ManagerAddForm.page', name: 'ManagerAddForm', component: ManagerAddForm}, |
|
50 |
- { path: '/IdFind.page', name: 'IdFind', component: IdFind}, |
|
51 |
- { path: '/AccessRecord.page', name: 'AccessRecord', component: AccessRecord}, |
|
52 |
- { path: '/UserModifyForm.page', name: 'UserModifyForm', component: UserModifyForm}, |
|
53 |
- { path: '/ManagerModifyForm.page', name: 'ManagerModifyForm', component: ManagerModifyForm}, |
|
19 |
+ { path: '/ApiTokenManagement.page', name: 'ApiTokenManagement', component: ApiTokenManagement}, |
|
54 | 20 |
]; |
55 | 21 |
|
56 | 22 |
const AppRouter = createRouter({ |
--- client/views/pages/CrosswalkManagement/CrosswalkInsert copy.vue
... | ... | @@ -1,492 +0,0 @@ |
1 | -<template> | |
2 | - <div class="flex"> | |
3 | - <button @click="toggleSlide" class="toggle">검색하기</button> | |
4 | - <div :class="['slide-content left', { active: showSlide }]"> | |
5 | - <div class="wrap flex-between"> | |
6 | - <div class="search"> | |
7 | - <h2>횡단보도 등록</h2> | |
8 | - <div class="box"> | |
9 | - <div class="flex-between m-b"> | |
10 | - <label for="">시/도</label> | |
11 | - <select name="" id=""></select> | |
12 | - </div> | |
13 | - <div class="flex-between m-b"> | |
14 | - <label for="">시/군/구</label> | |
15 | - <select name="" id=""></select> | |
16 | - </div> | |
17 | - <div class="flex-between m-b"> | |
18 | - <label for="">행정동</label> | |
19 | - <select name="" id=""></select> | |
20 | - </div> | |
21 | - <div class="flex-between m-b"> | |
22 | - <label for="">교차로</label> | |
23 | - <select name="" id=""></select> | |
24 | - </div> | |
25 | - <div class="flex-between m-b"> | |
26 | - <label for="">방위각</label> | |
27 | - <select name="" id=""></select> | |
28 | - </div> | |
29 | - <div class="m-b"> | |
30 | - <div class="flex m-b"> | |
31 | - <label for="" class="m-r">횡단보도 좌표</label | |
32 | - ><button>좌표수정</button> | |
33 | - </div> | |
34 | - <div class="flex gap"> | |
35 | - <div class="flex m-b"> | |
36 | - <label class="m-r">위도 : </label> | |
37 | - <input | |
38 | - style="width: 9rem" | |
39 | - type="text" | |
40 | - name="" | |
41 | - id="" | |
42 | - placeholder="00.0000" | |
43 | - /> | |
44 | - </div> | |
45 | - <div class="flex m-b"> | |
46 | - <label class="m-r">경도 : </label> | |
47 | - <input | |
48 | - style="width: 9rem" | |
49 | - type="text" | |
50 | - name="" | |
51 | - id="" | |
52 | - placeholder="00.0000" | |
53 | - /> | |
54 | - </div> | |
55 | - </div> | |
56 | - </div> | |
57 | - <div class=""> | |
58 | - <div class="m-b flex-start" style="margin-top: 3rem"> | |
59 | - <label for="">검지장비 선택</label> | |
60 | - </div> | |
61 | - <div class="flex-between m-b"> | |
62 | - <input type="checkbox" /><label for="">무단횡단</label> | |
63 | - <input type="checkbox" /><label for="">신호연장</label> | |
64 | - <input type="checkbox" /><label for="">우회전차량</label> | |
65 | - </div> | |
66 | - <div class="bottom"> | |
67 | - <div class="flex m-b"> | |
68 | - <label class="m-r">무단횡단 검지 범위 : </label> | |
69 | - <input type="text" name="" id="" placeholder="" /> | |
70 | - </div> | |
71 | - <div class="flex m-b"> | |
72 | - <label class="m-r">왕복차선 정보 : </label> | |
73 | - <input type="text" name="" id="" placeholder="" /> | |
74 | - </div> | |
75 | - <div class="flex m-b"> | |
76 | - <label class="m-r">우회전 차선 유무 : </label> | |
77 | - <select style="width: 9rem" name="" id=""> | |
78 | - <option value=""></option> | |
79 | - </select> | |
80 | - </div> | |
81 | - <div class="flex m-b"> | |
82 | - <label class="m-r">우회전 차선 유형 : </label> | |
83 | - <input type="text" name="" id="" placeholder="" /> | |
84 | - </div> | |
85 | - <div class="flex m-b"> | |
86 | - <label class="m-r">횡단보도 관리자 : </label> | |
87 | - <div class="flex gap"> | |
88 | - <input type="text" name="" id="" placeholder="" /> | |
89 | - <button @click="modal_1 = true">검색</button> | |
90 | - <div class="modal-wrap" v-if="modal_1 == true"> | |
91 | - <div class="modal-bg"></div> | |
92 | - <div class="modal"> | |
93 | - <h2 class="flex-between"> | |
94 | - 횡단보도 유지보수 담당자 검색<button | |
95 | - type="button" | |
96 | - class="gray-btn" | |
97 | - @click="modal_1 = false" | |
98 | - > | |
99 | - <img | |
100 | - src="../../../resources/images/close.png" | |
101 | - alt="" | |
102 | - /> | |
103 | - </button> | |
104 | - </h2> | |
105 | - <div class="modalmain"> | |
106 | - <div | |
107 | - class="flex-end gap m-b" | |
108 | - style="margin-top: 3rem" | |
109 | - > | |
110 | - <select name="" id=""> | |
111 | - <option value="">검색조건</option> | |
112 | - <option value="">이름</option> | |
113 | - <option value="">소속정보</option> | |
114 | - </select> | |
115 | - <input type="text" /> | |
116 | - <button type="button" class="btn-2 green-btn"> | |
117 | - 검색 | |
118 | - </button> | |
119 | - </div> | |
120 | - <table> | |
121 | - <thead> | |
122 | - <tr> | |
123 | - <td>No</td> | |
124 | - <td>이름</td> | |
125 | - <td>전화번호</td> | |
126 | - <td>소속정보</td> | |
127 | - </tr> | |
128 | - </thead> | |
129 | - <tbody> | |
130 | - <tr> | |
131 | - <td></td> | |
132 | - <td></td> | |
133 | - <td></td> | |
134 | - <td></td> | |
135 | - </tr> | |
136 | - </tbody> | |
137 | - </table> | |
138 | - <div class="bottom-wrap"> | |
139 | - <div class="pg-wrap"> | |
140 | - <a href="#" class="pg-item prev">◀</a> | |
141 | - <a href="#" class="pg-item active">1</a> | |
142 | - <a href="#" class="pg-item">2</a> | |
143 | - <a href="#" class="pg-item">3</a> | |
144 | - <a href="#" class="pg-item">4</a> | |
145 | - <a href="#" class="pg-item">5</a> | |
146 | - <a href="#" class="pg-item next">▶</a> | |
147 | - </div> | |
148 | - </div> | |
149 | - </div> | |
150 | - </div> | |
151 | - </div> | |
152 | - </div> | |
153 | - </div> | |
154 | - </div> | |
155 | - </div> | |
156 | - <div class="flex-center gap" style="margin-top: 3rem"> | |
157 | - <button @click="modal_2 = true">등록</button> | |
158 | - <div class="modal-wrap" v-if="modal_2 == true"> | |
159 | - <div class="modal-bg"></div> | |
160 | - <div class="modal2"> | |
161 | - <div class="modalmain2"><h4 class="flex-between"> | |
162 | - 횡단보도를 <em style="color: blue">등록</em> 하시겠습니까? | |
163 | - </h4> | |
164 | - <div class="flex-center gap" style="margin-top: 3rem;"> | |
165 | - <button @click="modal_2 = false">확인</button> | |
166 | - <button @click="modal_2 = false">취소</button> | |
167 | - </div> | |
168 | - </div> | |
169 | - </div> | |
170 | - </div> | |
171 | - <button>취소</button> | |
172 | - </div> | |
173 | - </div> | |
174 | - </div> | |
175 | - </div> | |
176 | - </div> | |
177 | - <div class="right"> | |
178 | - <div><OpenLayers ref="open_layers" /></div> | |
179 | - </div> | |
180 | - </div> | |
181 | -</template> | |
182 | -<style scoped> | |
183 | -@media all and (max-width: 479px) { | |
184 | - .top { | |
185 | - overflow: scroll; | |
186 | - } | |
187 | - .top ul { | |
188 | - width: 137rem; | |
189 | - overflow: hidden; | |
190 | - justify-content: space-between !important; | |
191 | - padding: 2rem 1rem !important; | |
192 | - } | |
193 | - .top li { | |
194 | - display: flex; | |
195 | - } | |
196 | - .search { | |
197 | - width: inherit; | |
198 | - } | |
199 | - .toggle { | |
200 | - color: #fff; | |
201 | - font-weight: bold; | |
202 | - background: #13833b; | |
203 | - display: block !important; | |
204 | - position: absolute; | |
205 | - z-index: 150; | |
206 | - top: 7.5rem; | |
207 | - right: 1rem; | |
208 | - } | |
209 | - .wrap { | |
210 | - height: auto !important; | |
211 | - width: inherit; | |
212 | - } | |
213 | - .slide-content { | |
214 | - position: absolute; | |
215 | - z-index: 97; | |
216 | - top: 6.5rem; | |
217 | - left: -36rem; | |
218 | - width: 34rem; | |
219 | - height: 100vh; | |
220 | - background-color: #f0f0f0; | |
221 | - transition: transform 0.3s ease; | |
222 | - transform: translateX(100%); | |
223 | - } | |
224 | - | |
225 | - .slide-content.active { | |
226 | - transform: translateX(0); | |
227 | - } | |
228 | -} | |
229 | -.toggle { | |
230 | - display: none; | |
231 | -} | |
232 | -label { | |
233 | - width: max-content; | |
234 | - text-align: left; | |
235 | -} | |
236 | -.search .box { | |
237 | - padding: 1rem 2rem; | |
238 | -} | |
239 | -.search input[type="text"] { | |
240 | - width: 9rem; | |
241 | -} | |
242 | - | |
243 | -.btn_set { | |
244 | - position: relative; | |
245 | - border-bottom: 1px solid #e5e3e3; | |
246 | - padding: 0 0 1rem 0; | |
247 | -} | |
248 | -.btn_set div { | |
249 | - position: absolute; | |
250 | - top: 40px; | |
251 | - width: 313px; | |
252 | - height: 380px; | |
253 | - background: #fff; | |
254 | - padding: 1rem; | |
255 | -} | |
256 | -.bg-white { | |
257 | - min-height: 46.6rem; | |
258 | - max-height: 46.6rem; | |
259 | - overflow: scroll; | |
260 | - overflow-x: hidden; | |
261 | -} | |
262 | -.bg-white::-webkit-scrollbar-thumb { | |
263 | - background-color: #fff; | |
264 | -} | |
265 | -h2 { | |
266 | - background: #50ba8a; | |
267 | - text-align: center; | |
268 | - color: #fff; | |
269 | - padding: 1.6rem 0; | |
270 | -} | |
271 | -.top p { | |
272 | - font-size: 15px; | |
273 | -} | |
274 | -.top ul { | |
275 | - padding: 1rem 0; | |
276 | -} | |
277 | -.top li { | |
278 | - width: calc(100% / 6); | |
279 | - text-align: center; | |
280 | -} | |
281 | -.top h3 { | |
282 | - font-size: 20px; | |
283 | -} | |
284 | -.wrap { | |
285 | - z-index: 100; | |
286 | - top: 0; | |
287 | - height: 865px; | |
288 | -} | |
289 | -.left { | |
290 | - background: #fff; | |
291 | -} | |
292 | -.right { | |
293 | - width: -webkit-fill-available; | |
294 | -} | |
295 | -.pg-item { | |
296 | - display: inline-block; | |
297 | - padding: 10px; | |
298 | - color: #949292; | |
299 | -} | |
300 | -table { | |
301 | - width: 100%; | |
302 | - text-align: center; | |
303 | - border-collapse: collapse; | |
304 | -} | |
305 | - | |
306 | -th, | |
307 | -td { | |
308 | - border-left: none; | |
309 | - border-right: none; | |
310 | -} | |
311 | - | |
312 | -table th { | |
313 | - padding: 15px 0; | |
314 | - color: #fff; | |
315 | - background-color: #13833b; | |
316 | -} | |
317 | - | |
318 | -table td { | |
319 | - padding: 10px 0; | |
320 | - border-bottom: 1px solid #e5e5dd; | |
321 | -} | |
322 | - | |
323 | -table thead tr { | |
324 | - background-color: #f7f6f6; | |
325 | -} | |
326 | -.modal2{padding: 3rem;} | |
327 | -.modal2 h4{font-size: 2rem;} | |
328 | -.modal { | |
329 | - width: 100rem; | |
330 | -} | |
331 | -.modalmain { | |
332 | - padding: 1rem; | |
333 | - max-height: 70rem; | |
334 | - overflow: scroll; | |
335 | - overflow-x: hidden; | |
336 | -} | |
337 | -.modalmain select { | |
338 | - width: max-content; | |
339 | -} | |
340 | -.modalmain input[type="text"] { | |
341 | - width: inherit; | |
342 | -} | |
343 | -.modalmain table thead { | |
344 | - background: #f7f6f6; | |
345 | -} | |
346 | -.modalmain table td { | |
347 | - border: 1px solid #eee; | |
348 | -} | |
349 | -.modal h2 { | |
350 | - background: #e5e5dd; | |
351 | - font-size: 2rem; | |
352 | - padding: 1rem; | |
353 | - color: #333; | |
354 | -} | |
355 | -.modal-bg h2 { | |
356 | - background: #e5e5dd; | |
357 | - font-size: 2rem; | |
358 | - padding: 1rem; | |
359 | -} | |
360 | -.modal h3 { | |
361 | - font-size: 1.8rem; | |
362 | - border-bottom: 1px solid #eee; | |
363 | - padding: 1rem 0 0.2rem 0; | |
364 | -} | |
365 | -.modal h4 { | |
366 | - font-size: 1.6rem; | |
367 | - font-weight: 100; | |
368 | - padding: 0.2rem 0 1rem 0; | |
369 | -} | |
370 | -.modal h2 button { | |
371 | - border: 0; | |
372 | - background: none; | |
373 | - height: 30px; | |
374 | - cursor: pointer; | |
375 | -} | |
376 | -.modal-bg button { | |
377 | - border: 0; | |
378 | - background: none; | |
379 | - height: 30px; | |
380 | - cursor: pointer; | |
381 | -} | |
382 | -.modal button img { | |
383 | - width: 25px; | |
384 | -} | |
385 | -</style> | |
386 | -<script> | |
387 | -import axios from 'axios'; | |
388 | -import MapPage from "../../component/MapPage.vue"; | |
389 | -import OpenLayers from "../../component/OpenLayers.vue"; | |
390 | -import { | |
391 | - vworldBaseLayer, | |
392 | - vworldGrayLayer, | |
393 | - vworldMidnightLayer, | |
394 | - vworldHybridLayer, | |
395 | - vworldSatelliteLayer, | |
396 | -} from "../../component/OpenLayersMap.vue"; | |
397 | -import {baseStyles} from '../../component/OpenLayersStyle.vue'; | |
398 | - | |
399 | -var freeBus = { | |
400 | - "type": "FeatureCollection", | |
401 | - "features": [ | |
402 | - { | |
403 | - "type": "Feature", | |
404 | - "properties": { | |
405 | - "popupContent": "18th & California Light Rail Stop", | |
406 | - "data" : 123 | |
407 | - }, | |
408 | - "geometry": { | |
409 | - "type": "Point", | |
410 | - "coordinates": [126.9757184, 37.564388] | |
411 | - } | |
412 | - },{ | |
413 | - "type": "Feature", | |
414 | - "properties": { | |
415 | - "popupContent": "20th & Welton Light Rail Stop", | |
416 | - "data" : 456 | |
417 | - }, | |
418 | - "geometry": { | |
419 | - "type": "Point", | |
420 | - "coordinates": [124.9748523, 37.5796212] | |
421 | - } | |
422 | - } | |
423 | - ] | |
424 | -}; | |
425 | - | |
426 | -export default { | |
427 | - data() { | |
428 | - return { | |
429 | - showSlide: false, | |
430 | - modal_1: false, | |
431 | - modal_2: false, | |
432 | - tabs: [ | |
433 | - { | |
434 | - id: 1, | |
435 | - title: "상황발생현황", | |
436 | - content1: "This is the content for Tab 1", | |
437 | - }, | |
438 | - { | |
439 | - id: 2, | |
440 | - title: "장애발생현황", | |
441 | - content2: "This is the content for Tab 2", | |
442 | - }, | |
443 | - ], | |
444 | - activeTab: 1, | |
445 | - items: [ | |
446 | - { id: 1, name: "무단횡단", isActive: false }, | |
447 | - { id: 2, name: "신호연장", isActive: false }, | |
448 | - { id: 3, name: "우회전 차량", isActive: false }, | |
449 | - { id: 4, name: "장애발생", isActive: false }, | |
450 | - ], | |
451 | - }; | |
452 | - }, | |
453 | - components: { | |
454 | - MapPage: MapPage, | |
455 | - OpenLayers: OpenLayers, | |
456 | - }, | |
457 | - methods: { | |
458 | - toggleSlide() { | |
459 | - this.showSlide = !this.showSlide; | |
460 | - }, | |
461 | - changeTab(tabId) { | |
462 | - this.activeTab = tabId; | |
463 | - }, | |
464 | - toggleActive(item) { | |
465 | - item.isActive = !item.isActive; | |
466 | - }, | |
467 | - childClick : function(prop,coordinate){ | |
468 | - | |
469 | - console.log(prop); | |
470 | - console.log(coordinate); | |
471 | - | |
472 | - // 레이어 삭제 | |
473 | - this.$refs.open_layers.removeLayer('point1'); | |
474 | - | |
475 | - // Icon 그리기 | |
476 | - this.$refs.open_layers.createIcon(coordinate[0],coordinate[1],'/client/resources/images/icon/fin.png',0.3, 'point1'); | |
477 | - | |
478 | - } | |
479 | - }, | |
480 | - watch: {}, | |
481 | - computed: {}, | |
482 | - mounted() { | |
483 | - console.log("Main2 mounted"); | |
484 | - var vm = this; | |
485 | - // 지도 초기화 | |
486 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
487 | - //this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson.json','testMap','EPSG:4326', baseStyles['labelStyle'],'label'); | |
488 | - this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson2.json','testMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon'); | |
489 | - | |
490 | - }, | |
491 | -}; | |
492 | -</script> |
--- client/views/pages/CrosswalkManagement/CrosswalkInsert.vue
... | ... | @@ -1,892 +0,0 @@ |
1 | -<template> | |
2 | - <div class="flex"> | |
3 | - <button @click="toggleSlide" class="toggle">{{ slideText }}</button> | |
4 | - <div :class="['slide-content left', { active: showSlide }]"> | |
5 | - <div class="wrap flex-between"> | |
6 | - <div class="search"> | |
7 | - <h2>횡단보도 등록</h2> | |
8 | - | |
9 | - <div class="box"> | |
10 | - <div class="flex-between m-b" id="siDoHiddenCk"> | |
11 | - <label for="">시/도</label> | |
12 | - <select name="siDoSelectList" id="siDoSelectList" v-model="address['siDo_dong_cd']" @change="siDoGunGuSelectF($event)"> | |
13 | - <option :value=null disabled> 대구광역시</option> | |
14 | - <option v-for="(item, key) in siDoList" :key="key" :value="item['dong_cd']"> | |
15 | - {{ item['dong_nm'] }} | |
16 | - </option> | |
17 | - </select> | |
18 | - </div> | |
19 | - <div class="flex-between m-b" id="gunGuHiddenCk"> | |
20 | - <label for="">시/군/구</label> | |
21 | - <select name="gunGuSelectList" id="gunGuSelectList" v-model="address['guGun_dong_cd']" @change="siDoGunGuSelectF($event)"> | |
22 | - <option :value=null disabled> 서구 </option> | |
23 | - <option v-for="(item, key) in gunGuList" :key="key" :value="item['dong_cd']"> | |
24 | - {{ item['dong_nm'] }} | |
25 | - </option> | |
26 | - </select> | |
27 | - </div> | |
28 | - <div class="flex-between m-b" id="dongHiddenCk"> | |
29 | - <label for="">행정동</label> | |
30 | - <select name="dongSelectList" id="dongSelectList" v-model="address['dong_dong_cd']" @change="dongSelectF($event)"> | |
31 | - <option :value=null disabled> 행정동 </option> | |
32 | - <option v-for="(item, key) in dongList" :key="key" :value="item['dong_cd']"> | |
33 | - {{ item['dong_nm'] }} | |
34 | - </option> | |
35 | - </select> | |
36 | - </div> | |
37 | - <div class="flex-between m-b" id="nodeHiddenCk"> | |
38 | - <label for="">교차로</label> | |
39 | - <select name="nodeSelectList" id="nodeSelectList" v-model="address['node_id']" @change="nodeSelectF($event)"> | |
40 | - <option :value=null disabled> 교차로 </option> | |
41 | - <option v-for="(item, key) in nodeList" :key="key" :value="item['node_id']" > | |
42 | - {{ item['node_name'] }} | |
43 | - </option> | |
44 | - </select> | |
45 | - </div> | |
46 | - <div class="flex-between m-b" id="azimuthHiddenCk"> | |
47 | - <label for="">방위각</label> | |
48 | - <select name="azimutSelectList" id="azimutSelectList" v-model="address['crslk_az']"> | |
49 | - <option :value="0" disabled> 방위각 </option> | |
50 | - <option :value="10">북</option> | |
51 | - <option :value="50">북동</option> | |
52 | - <option :value="20">동</option> | |
53 | - <option :value="60">남동</option> | |
54 | - <option :value="30">남</option> | |
55 | - <option :value="70">남서</option> | |
56 | - <option :value="40">서</option> | |
57 | - <option :value="80">북서</option> | |
58 | - </select> | |
59 | - </div> | |
60 | - | |
61 | - <div class="m-b"> | |
62 | - <div class="flex m-b"> | |
63 | - <label for="" class="m-r">횡단보도 좌표</label><button @click="clickStateChange()">좌표선택</button> | |
64 | - </div> | |
65 | - <div class="flex gap"> | |
66 | - <div class="flex m-b"> | |
67 | - <label class="m-r">위도 : </label> | |
68 | - <input style="width: 9rem" type="text" name="" id="" placeholder="00.0000" v-model="address.coordinate[1]"/> | |
69 | - </div> | |
70 | - <div class="flex m-b"> | |
71 | - <label class="m-r">경도 : </label> | |
72 | - <input style="width: 9rem" type="text" name="" id="" placeholder="00.0000" v-model="address.coordinate[0]"/> | |
73 | - </div> | |
74 | - </div> | |
75 | - </div> | |
76 | - <div class=""> | |
77 | - <div class="m-b flex-start" style="margin-top: 3rem"> | |
78 | - <label for="">검지장비 선택</label> | |
79 | - </div> | |
80 | - <div class="flex-between m-b"> | |
81 | - <input type="checkbox" v-model="condition.wtrms_crosng_eqpmn_instl_yn"/><label for="">무단횡단</label> | |
82 | - <input type="checkbox" v-model="condition.signl_extn_eqpmn_instl_yn"/><label for="">신호연장</label> | |
83 | - <input type="checkbox" v-model="condition.rittrn_vhcle_eqpmn_instl_yn"/><label for="">우회전차량</label> | |
84 | - </div> | |
85 | - <div class="bottom"> | |
86 | - <div class="flex m-b"> | |
87 | - <label class="m-r">무단횡단 검지 범위 : </label> | |
88 | - <input type="text" name="" id="" placeholder="검지 범위 입력" v-model="condition.wtrms_crosng_detct_rate" /> | |
89 | - </div> | |
90 | - <div class="flex m-b"> | |
91 | - <label class="m-r">왕복차선 정보 : </label> | |
92 | - <input type="text" name="" id="" placeholder="왕복 차선 정보 입력" v-model="condition.rndtp_tfclne_info"/> | |
93 | - </div> | |
94 | - <div class="flex m-b"> | |
95 | - <label class="m-r">우회전 차선 유무 : </label> | |
96 | - <select style="width: 9rem" name="" id="" v-model="condition.rittrn_tfclne_yn"> | |
97 | - <option :value="null">우회전 차선 유무 선택</option> | |
98 | - <option :value=true>있음</option> | |
99 | - <option :value=false>없음</option> | |
100 | - </select> | |
101 | - </div> | |
102 | - <div class="flex m-b"> | |
103 | - <label class="m-r">우회전 차선 유형 : </label> | |
104 | - <input type="text" name="" id="" placeholder="우회전 차선 유형 입력" v-model="condition.rittrn_tfclne_ty"/> | |
105 | - </div> | |
106 | - <div class="flex m-b"> | |
107 | - <label class="m-r">횡단보도 관리자 : </label> | |
108 | - <div class="flex gap"> | |
109 | - <input type="text" name="" id="" placeholder="" v-model="managerInfo.mngr_nm"> | |
110 | - <button @click="modal_1 = true">검색</button> | |
111 | - <div class="modal-wrap" v-if="modal_1 == true"> | |
112 | - <div class="modal-bg"></div> | |
113 | - <div class="modal"> | |
114 | - <h2 class="flex-between"> | |
115 | - 횡단보도 유지보수 담당자 검색<button type="button" class="gray-btn" @click="modal_1 = false"> | |
116 | - <img src="../../../resources/images/close.png" alt="" /> | |
117 | - </button> | |
118 | - </h2> | |
119 | - <div class="modalmain"> | |
120 | - <div class="flex-end gap m-b" style="margin-top: 3rem"> | |
121 | - <select name="" id=""> | |
122 | - <option value="">검색조건</option> | |
123 | - <option value="">이름</option> | |
124 | - <option value="">소속정보</option> | |
125 | - </select> | |
126 | - <input type="text" /> | |
127 | - <button type="button" class="btn-2 green-btn"> | |
128 | - 검색 | |
129 | - </button> | |
130 | - </div> | |
131 | - <table> | |
132 | - <thead> | |
133 | - <tr> | |
134 | - <td>No</td> | |
135 | - <td>이름</td> | |
136 | - <td>전화번호</td> | |
137 | - <td>소속정보</td> | |
138 | - </tr> | |
139 | - </thead> | |
140 | - <tbody> | |
141 | - <tr v-for="(item, idx) in managerList" :key="idx" @click="managerSelect(item)"> | |
142 | - <td data-title="No">{{ managerIdx - idx }}</td> | |
143 | - <td data-title="이름">{{ item['mngr_nm'] }}</td> | |
144 | - <td data-title="전화번호">{{ HyphenMinus(item['mngr_telno']) }}</td> | |
145 | - <td data-title="소속정보">{{ item['mngr_ogdp_info'] }}</td> | |
146 | - </tr> | |
147 | - <tr v-show="managerList.length == 0"> | |
148 | - <td class="exception" colspan="9">조회된 데이터가 없습니다</td> | |
149 | - </tr> | |
150 | - </tbody> | |
151 | - </table> | |
152 | - <div class="bottom-wrap"> | |
153 | - <div class="pg-wrap"> | |
154 | - <a href="#" class="pg-item prev">◀</a> | |
155 | - <a href="#" class="pg-item active">1</a> | |
156 | - <a href="#" class="pg-item">2</a> | |
157 | - <a href="#" class="pg-item">3</a> | |
158 | - <a href="#" class="pg-item">4</a> | |
159 | - <a href="#" class="pg-item">5</a> | |
160 | - <a href="#" class="pg-item next">▶</a> | |
161 | - </div> | |
162 | - </div> | |
163 | - </div> | |
164 | - </div> | |
165 | - </div> | |
166 | - </div> | |
167 | - </div> | |
168 | - </div> | |
169 | - </div> | |
170 | - <div class="flex-center gap" style="margin-top: 3rem"> | |
171 | - <button @click="modal_2 = true">등록</button> | |
172 | - <div class="modal-wrap" v-if="modal_2 == true"> | |
173 | - <div class="modal-bg"></div> | |
174 | - <div class="modal2"> | |
175 | - <div class="modalmain2"> | |
176 | - <h4 class="flex-between"> | |
177 | - 횡단보도를 <em style="color: blue">등록</em> 하시겠습니까? | |
178 | - </h4> | |
179 | - <div class="flex-center gap" style="margin-top: 3rem;"> | |
180 | - <button @click="crslkInsert">확인</button> | |
181 | - <button @click="modal_2 = false">취소</button> | |
182 | - </div> | |
183 | - </div> | |
184 | - </div> | |
185 | - </div> | |
186 | - <button>취소</button> | |
187 | - </div> | |
188 | - </div> | |
189 | - </div> | |
190 | - </div> | |
191 | - </div> | |
192 | - <div class="right"> | |
193 | - <div> | |
194 | - <OpenLayers ref="open_layers" /> | |
195 | - </div> | |
196 | - </div> | |
197 | - </div> | |
198 | -</template> | |
199 | - | |
200 | -<script> | |
201 | - | |
202 | -import axios from 'axios'; | |
203 | -import MapPage from "../../component/MapPage.vue"; | |
204 | -import OpenLayers from "../../component/OpenLayers.vue"; | |
205 | -import { | |
206 | - naverBaseLayer, | |
207 | - vworldBaseLayer, | |
208 | - vworldGrayLayer, | |
209 | - vworldMidnightLayer, | |
210 | - vworldHybridLayer, | |
211 | - vworldSatelliteLayer, | |
212 | -} from "../../component/OpenLayersMap.vue"; | |
213 | -import { baseStyles } from '../../component/OpenLayersStyle.vue'; | |
214 | -import DongSelectList from '../../component/dongSelectList.vue'; | |
215 | -import COMMON_UTIL from "../../../resources/js/commonUtil.ts"; | |
216 | -import PaginationButton from "../../component/pagination/PaginationButton.vue"; | |
217 | - | |
218 | -var freeBus = { | |
219 | - "type": "FeatureCollection", | |
220 | - "features": [ | |
221 | - { | |
222 | - "type": "Feature", | |
223 | - "properties": { | |
224 | - "popupContent": "18th & California Light Rail Stop", | |
225 | - "data": 123 | |
226 | - }, | |
227 | - "geometry": { | |
228 | - "type": "Point", | |
229 | - "coordinates": [126.9757184, 37.564388] | |
230 | - } | |
231 | - }, { | |
232 | - "type": "Feature", | |
233 | - "properties": { | |
234 | - "popupContent": "20th & Welton Light Rail Stop", | |
235 | - "data": 456 | |
236 | - }, | |
237 | - "geometry": { | |
238 | - "type": "Point", | |
239 | - "coordinates": [124.9748523, 37.5796212] | |
240 | - } | |
241 | - } | |
242 | - ] | |
243 | -}; | |
244 | - | |
245 | -export default { | |
246 | - data() { | |
247 | - return { | |
248 | - showSlide: false, | |
249 | - slideText: '횡단보도 등록', | |
250 | - address: { | |
251 | - //지역 설정 | |
252 | - dong_cd : "22030", | |
253 | - siDo_dong_cd : "22", | |
254 | - guGun_dong_cd : "22030", | |
255 | - dong_dong_cd : null, | |
256 | - node_id : null, | |
257 | - node_name :null, | |
258 | - zoomLevel : null, | |
259 | - crslk_az : "0", | |
260 | - coordinate : [], | |
261 | - lat : null, | |
262 | - lon : null, | |
263 | - baseSource:"EPSG:5181", | |
264 | - }, | |
265 | - //조건설정 | |
266 | - condition: { | |
267 | - //체크박스(장비 설치 유무) | |
268 | - signl_extn_eqpmn_instl_yn: false, | |
269 | - wtrms_crosng_eqpmn_instl_yn: false, | |
270 | - rittrn_vhcle_eqpmn_instl_yn: false, | |
271 | - //무단횐단 검지 범위 | |
272 | - wtrms_crosng_detct_rate:null, | |
273 | - //왕복차선 정보 | |
274 | - rndtp_tfclne_info:null, | |
275 | - //우회전 차선 유무 | |
276 | - rittrn_tfclne_yn:null, | |
277 | - //우회전 차선 유형 | |
278 | - rittrn_tfclne_ty:null, | |
279 | - }, | |
280 | - managerListSearch :{ | |
281 | - currentPage: 1, | |
282 | - perPage: 10, | |
283 | - searchType: null, | |
284 | - searchText: null, | |
285 | - startDate: null, | |
286 | - endDate: null, | |
287 | - }, | |
288 | - managerInfo:{ | |
289 | - mngr_eml: null, | |
290 | - mngr_nm: null, | |
291 | - mngr_ogdp_info: null, | |
292 | - mngr_telno:null, | |
293 | - mntnce_mngr_id: null, | |
294 | - reg_dt: null, | |
295 | - rgtr_id: null, | |
296 | - }, | |
297 | - managerList:[], | |
298 | - managetListCount:0, | |
299 | - managerIdx: 0, | |
300 | - | |
301 | - | |
302 | - siDoList: [], | |
303 | - gunGuList: [], | |
304 | - dongList: [], | |
305 | - nodeList: [], | |
306 | - | |
307 | - | |
308 | - clickState : false, | |
309 | - modal_1: false, | |
310 | - modal_2: false, | |
311 | - tabs: [ | |
312 | - { | |
313 | - id: 1, | |
314 | - title: "상황발생현황", | |
315 | - content1: "This is the content for Tab 1", | |
316 | - }, | |
317 | - { | |
318 | - id: 2, | |
319 | - title: "장애발생현황", | |
320 | - content2: "This is the content for Tab 2", | |
321 | - }, | |
322 | - ], | |
323 | - activeTab: 1, | |
324 | - items: [ | |
325 | - { id: 1, name: "무단횡단", isActive: false }, | |
326 | - { id: 2, name: "신호연장", isActive: false }, | |
327 | - { id: 3, name: "우회전 차량", isActive: false }, | |
328 | - { id: 4, name: "장애발생", isActive: false }, | |
329 | - ], | |
330 | - }; | |
331 | - }, | |
332 | - components: { | |
333 | - MapPage: MapPage, | |
334 | - OpenLayers: OpenLayers, | |
335 | - DongSelectList: DongSelectList, | |
336 | - }, | |
337 | - methods: { | |
338 | - toggleSlide() { | |
339 | - if (this.showSlide) { | |
340 | - this.slideText = "횡단보도 등록"; | |
341 | - } else { | |
342 | - this.slideText = "창닫기"; | |
343 | - } | |
344 | - this.showSlide = !this.showSlide; | |
345 | - }, | |
346 | - changeTab(tabId) {point_lat | |
347 | - this.activeTab = tabId; | |
348 | - }, | |
349 | - toggleActive(item) { | |
350 | - item.isActive = !item.isActive; | |
351 | - }, | |
352 | - | |
353 | - childClick: function (prop, coordinate) { | |
354 | - if(this.clickState){ | |
355 | - this.address.coordinate=coordinate; | |
356 | - console.log("prop : ", prop); | |
357 | - console.log("coordinate : ", coordinate); | |
358 | - // 레이어 삭제 | |
359 | - this.$refs.open_layers.removeLayer('point1'); | |
360 | - // Icon 그리기 | |
361 | - this.$refs.open_layers.createIcon(coordinate[1], coordinate[0], '/client/resources/images/icon/fin2.png', 0.3, 'point1', 'EPSG:5181'); | |
362 | - this.clickState=false; | |
363 | - } | |
364 | - else{ | |
365 | - this.$refs.open_layers.removeLayer('point1'); | |
366 | - this.address.coordinate[0]=null; | |
367 | - this.address.coordinate[1]=null; | |
368 | - } | |
369 | - }, | |
370 | - moveClick: function (){ | |
371 | - | |
372 | - }, | |
373 | - //시/도 받아오기 | |
374 | - siDoSelectList: function () { | |
375 | - const vm = this; | |
376 | - axios({ | |
377 | - url: '/dong/siDoSelectList.json', | |
378 | - method: 'post', | |
379 | - headers: { | |
380 | - 'Content-Type': "application/json; charset=UTF-8", | |
381 | - }, | |
382 | - data: {} | |
383 | - }).then(function (response) { | |
384 | - console.log("siDoSelectList - response : ", response.data); | |
385 | - vm.siDoList = response.data; | |
386 | - }).catch(function (error) { | |
387 | - console.log("siDoSelectList - error : ", error); | |
388 | - }); | |
389 | - }, | |
390 | - | |
391 | - //군/구 받아오기 | |
392 | - gunGuSelect: function (dong_cd) { | |
393 | - const vm = this; | |
394 | - axios({ | |
395 | - url: '/dong/gunGuSelectList.json', | |
396 | - method: 'post', | |
397 | - headers: { | |
398 | - 'Content-Type': "application/json; charset=UTF-8", | |
399 | - }, | |
400 | - data: { 'dong_cd': dong_cd } | |
401 | - }).then(function (response) { | |
402 | - console.log("gunGuSelect - response : ", response.data); | |
403 | - vm.gunGuList = response.data; | |
404 | - }).catch(function (error) { | |
405 | - console.log("gunGuSelect - error : ", error); | |
406 | - }); | |
407 | - }, | |
408 | - | |
409 | - //행정동 받아오기 | |
410 | - dongSelectList: function (dong_cd) { | |
411 | - const vm = this; | |
412 | - axios({ | |
413 | - url: '/dong/dongSelectList.json', | |
414 | - method: 'post', | |
415 | - headers: { | |
416 | - 'Content-Type': "application/json; charset=UTF-8", | |
417 | - }, | |
418 | - data: { 'dong_cd': dong_cd } | |
419 | - }).then(function (response) { | |
420 | - console.log("dongSelectList - response : ", response.data); | |
421 | - vm.dongList = response.data; | |
422 | - }).catch(function (error) { | |
423 | - console.log("dongSelectList - error : ", error); | |
424 | - }); | |
425 | - }, | |
426 | - | |
427 | - //노드(교차로) 받아오기 | |
428 | - findNodeUsingDongSelectList: function (dong_cd) { | |
429 | - const vm = this; | |
430 | - axios({ | |
431 | - url: '/node/findNodeUsingDongSelectList.json', | |
432 | - method: 'post', | |
433 | - headers: { | |
434 | - 'Content-Type': "application/json; charset=UTF-8", | |
435 | - }, | |
436 | - data: { 'dong_cd': dong_cd } | |
437 | - }).then(function (response) { | |
438 | - console.log("findNodeUsingDongSelectList - response : ", response.data); | |
439 | - vm.nodeList = response.data; | |
440 | - }).catch(function (error) { | |
441 | - console.log("findNodeUsingDongSelectList - error : ", error); | |
442 | - }); | |
443 | - }, | |
444 | - | |
445 | - //횡단보도 등록 | |
446 | - crslkInsert:function(){ | |
447 | - const vm = this; | |
448 | - axios({ | |
449 | - url: "/management/crslkInsert.json", | |
450 | - method: "post", | |
451 | - headers: { | |
452 | - "Content-Type": "application/json; charset=UTF-8", | |
453 | - }, | |
454 | - data: {"address":vm.address,"condition":vm.condition,"managerInfo":vm.managerInfo}, | |
455 | - }) | |
456 | - .then(function (response) { | |
457 | - console.log("crslkInsert - response : ", response.data); | |
458 | - vm.modal_2 = false; | |
459 | - }) | |
460 | - .catch(function (error) { | |
461 | - console.log("crslkInsert - error : ", error); | |
462 | - alert( | |
463 | - "횡단보도 등록 오류, 관리자에게 문의해주세요." | |
464 | - ); | |
465 | - }); | |
466 | - }, | |
467 | - | |
468 | - //횡단보도 유지보수 관리자 목록 조회 | |
469 | - managerSelectList: function () { | |
470 | - const vm = this; | |
471 | - axios({ | |
472 | - url: "/managerSelectList.json", | |
473 | - method: "post", | |
474 | - headers: { | |
475 | - "Content-Type": "application/json; charset=UTF-8", | |
476 | - }, | |
477 | - data: vm.managerListSearch, | |
478 | - }) | |
479 | - .then(function (response) { | |
480 | - console.log("managerSelectList - response : ", response.data); | |
481 | - vm.managerListCount = response.data.managerListCount; | |
482 | - vm.managerList = response.data.managerList; | |
483 | - vm.managerIdx = vm.managerListCount-(vm.managerListSearch.currentPage-1)*vm.managerList.length; | |
484 | - }) | |
485 | - .catch(function (error) { | |
486 | - console.log("managerSelectList - error : ", error); | |
487 | - alert( | |
488 | - "횡단보도 유지보수 관리자 목록 조회 오류, 관리자에게 문의해주세요." | |
489 | - ); | |
490 | - }); | |
491 | - }, | |
492 | - managerSelect:function(managerInfo){ | |
493 | - this.managerInfo=managerInfo; | |
494 | - }, | |
495 | - | |
496 | - // 전화번호 '-' 추가 후 출력 | |
497 | - HyphenMinus: function (telno) { | |
498 | - return COMMON_UTIL.HyphenMinus(telno); | |
499 | - }, | |
500 | - | |
501 | - //날짜 시,분,초 자르기 | |
502 | - yyyymmdd: function (date) { | |
503 | - return COMMON_UTIL.yyyymmdd(date); | |
504 | - }, | |
505 | - | |
506 | - //DongSelectList에서 dong_cd 받아오기 | |
507 | - setDongCd(value) { | |
508 | - console.log("value : ", value); | |
509 | - this.address = value; | |
510 | - }, | |
511 | - | |
512 | - //시/도/군/구 Select 선택시 바로 위치 이동 | |
513 | - siDoGunGuSelectF: function (event) { | |
514 | - //기존 layer 지우기 | |
515 | - this.$refs.open_layers.removeLayerAll(); | |
516 | - //기본 지도 layer 그리기 + 해당 위치로 이동 | |
517 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,event.target.value); | |
518 | - this.$refs.open_layers.setZoom(this.address.zoomLevel); | |
519 | - //polygon 그리기 | |
520 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd); | |
521 | - // 지역 중앙에 노드 + 이름 넣기 | |
522 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsCenterJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd); | |
523 | - | |
524 | - }, | |
525 | - | |
526 | - //행정동 Select 선택시 바로 위치 이동 | |
527 | - dongSelectF: function (event) { | |
528 | - //기존 layer 지우기 | |
529 | - this.$refs.open_layers.removeLayerAll(); | |
530 | - //기본 지도 layer 그리기 + 해당 위치로 이동 | |
531 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,event.target.value); | |
532 | - this.$refs.open_layers.setZoom(this.address.zoomLevel); | |
533 | - //polygon 그리기 | |
534 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd); | |
535 | - // 행정동에 포함된 노드 넣기 | |
536 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getNodesGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd); | |
537 | - }, | |
538 | - | |
539 | - //노드 Select 선택시 바로 위치 이동 | |
540 | - nodeSelectF: function (event) { | |
541 | - //기존 layer 지우기 | |
542 | - this.$refs.open_layers.removeLayerAll(); | |
543 | - //기본 지도 layer 그리기 + 해당 위치로 이동 | |
544 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,this.address.dong_cd, event.target.value); | |
545 | - this.$refs.open_layers.setZoom(this.address.zoomLevel); | |
546 | - //polygon 그리기 | |
547 | - this.$refs.open_layers.addVectorLayerByUrl('/node/getNodeGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd, this.address.node_id); | |
548 | - // 노드 중앙에 노드 그리기 | |
549 | - this.$refs.open_layers.addVectorLayerByUrl('/node/getNodeGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd, this.address.node_id); | |
550 | - }, | |
551 | - | |
552 | - childMoveEnd(zoom) { | |
553 | - console.log("zoom : ", zoom); | |
554 | - if(zoom <= 19) { | |
555 | - // this.$refs.open_layers.removeLayer('multPolygonLayer'); | |
556 | - this.$refs.open_layers.removeLayer('nodeLayer'); | |
557 | - this.$refs.open_layers.addVectorLayerByUrl('/testgetnodeGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label',this.address.dong_cd); | |
558 | - } else if (zoom <= 15) { | |
559 | - this.$refs.open_layers.removeLayer('nodeLayer'); | |
560 | - this.$refs.open_layers.addVectorLayerByUrl('/testDdongGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label',this.address.dong_cd); | |
561 | - } else if (zoom <= 14) { | |
562 | - this.$refs.open_layers.removeLayer('nodeLayer'); | |
563 | - this.$refs.open_layers.addVectorLayerByUrl('/testgetSigunguGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label',this.address.dong_cd); | |
564 | - // this.$refs.open_layers.removeLayer('multPolygonLayer'); | |
565 | - // this.$refs.open_layers.addVectorLayerByUrl('/common/getDongGeoJson.json','multPolygonLayer','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon'); | |
566 | - } | |
567 | - else { | |
568 | - // this.$refs.open_layers.removeLayer('multPolygonLayer'); | |
569 | - // this.$refs.open_layers.addVectorLayerByUrl('/common/getDongGeoJson.json','multPolygonLayer','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon'); | |
570 | - this.$refs.open_layers.removeLayer('nodeLayer'); | |
571 | - this.$refs.open_layers.addVectorLayerByUrl('/testgetSidoGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label',this.address.dong_cd); | |
572 | - } | |
573 | - }, | |
574 | - clickStateChange(){ | |
575 | - this.clickState=true; | |
576 | - } | |
577 | - }, | |
578 | - watch: { | |
579 | - 'address.siDo_dong_cd': function (newValue, oldValue) { | |
580 | - console.log("siDo_dong_cd newValue : ", newValue); | |
581 | - console.log("siDo_dong_cd oldValue : ", oldValue); | |
582 | - this.address.dong_cd = newValue; | |
583 | - this.address.zoomLevel = 11.5; | |
584 | - this.gunGuList = null; | |
585 | - this.dongList = null; | |
586 | - | |
587 | - this.gunGuSelect(newValue); | |
588 | - | |
589 | - }, | |
590 | - 'address.guGun_dong_cd': function (newValue, oldValue) { | |
591 | - console.log("guGun_dong_cd newValue : ", newValue); | |
592 | - console.log("guGun_dong_cd oldValue : ", oldValue); | |
593 | - this.address.dong_cd = newValue; | |
594 | - this.address.zoomLevel = 14; | |
595 | - this.dongList = null; | |
596 | - if (newValue != null) { | |
597 | - this.dongSelectList(newValue); | |
598 | - } | |
599 | - }, | |
600 | - 'address.dong_dong_cd': function (newValue, oldValue) { | |
601 | - console.log("dong_dong_cd newValue : ", newValue); | |
602 | - console.log("dong_dong_cd oldValue : ", oldValue); | |
603 | - this.address.dong_cd = newValue; | |
604 | - this.address.zoomLevel = 15; | |
605 | - this.findNodeUsingDongSelectList(newValue); | |
606 | - }, | |
607 | - 'address.node_id': function (newValue, oldValue) { | |
608 | - console.log("node_id newValue : ", newValue); | |
609 | - console.log("node_id oldValue : ", oldValue); | |
610 | - this.address.node_id = newValue; | |
611 | - this.nodeList.forEach((node)=>{ | |
612 | - if(node.node_id==newValue){ | |
613 | - this.address.node_name=node.node_name; | |
614 | - } | |
615 | - }) | |
616 | - this.address.zoomLevel = 19; | |
617 | - }, | |
618 | - 'address.coordinate': function (newValue, oldValue) { | |
619 | - console.log("coordinate newValue : ", newValue); | |
620 | - console.log("coordinate oldValue : ", oldValue); | |
621 | - this.address.lat=newValue[0]; | |
622 | - this.address.lon=newValue[1]; | |
623 | - }, | |
624 | - 'managerInfo': function (newValue, oldValue) { | |
625 | - console.log("managerInfo newValue : ", newValue); | |
626 | - console.log("managerInfo oldValue : ", oldValue); | |
627 | - }, | |
628 | - }, | |
629 | - computed: {}, | |
630 | - mounted() { | |
631 | - console.log("Main2 mounted"); | |
632 | - this.siDoSelectList(); | |
633 | - this.gunGuSelect(this.address.siDo_dong_cd); | |
634 | - this.dongSelectList(this.address.guGun_dong_cd); | |
635 | - this.managerSelectList(); | |
636 | - // 지도 초기화 | |
637 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
638 | - // 지도 폴리곤 넣기 | |
639 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd); | |
640 | - // 지역 중앙에 노드 + 이름 넣기 | |
641 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsCenterJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd); | |
642 | - | |
643 | - | |
644 | - }, | |
645 | -}; | |
646 | -</script> | |
647 | -<style scoped> | |
648 | -@media all and (max-width: 479px) { | |
649 | - .top { | |
650 | - overflow: scroll; | |
651 | - } | |
652 | - | |
653 | - .top ul { | |
654 | - width: 137rem; | |
655 | - overflow: hidden; | |
656 | - justify-content: space-between !important; | |
657 | - padding: 2rem 1rem !important; | |
658 | - } | |
659 | - | |
660 | - .top li { | |
661 | - display: flex; | |
662 | - } | |
663 | - | |
664 | - .search { | |
665 | - width: inherit; | |
666 | - } | |
667 | - | |
668 | - .toggle { | |
669 | - color: #fff; | |
670 | - font-weight: bold; | |
671 | - background: #13833b; | |
672 | - display: block !important; | |
673 | - position: absolute; | |
674 | - z-index: 150; | |
675 | - top: 1.3rem; | |
676 | - right: 1rem; | |
677 | - } | |
678 | - | |
679 | - .wrap { | |
680 | - height: auto !important; | |
681 | - width: inherit; | |
682 | - margin: 0 !important; | |
683 | - } | |
684 | - | |
685 | - .slide-content { | |
686 | - position: absolute; | |
687 | - z-index: 97; | |
688 | - left: 0; | |
689 | - width: -webkit-fill-available; | |
690 | - height: 100vh; | |
691 | - background-color: #f0f0f0; | |
692 | - transition: transform 0.3s ease; | |
693 | - transform: translateX(100%); | |
694 | - } | |
695 | - | |
696 | - .slide-content.active { | |
697 | - transform: translateX(0); | |
698 | - } | |
699 | -} | |
700 | - | |
701 | -.toggle { | |
702 | - display: none; | |
703 | -} | |
704 | - | |
705 | -label { | |
706 | - width: max-content; | |
707 | - text-align: left; | |
708 | -} | |
709 | - | |
710 | -.search .box { | |
711 | - padding: 1rem 2rem; | |
712 | -} | |
713 | - | |
714 | -.search input[type="text"] { | |
715 | - width: 9rem; | |
716 | -} | |
717 | - | |
718 | -.btn_set { | |
719 | - position: relative; | |
720 | - border-bottom: 1px solid #e5e3e3; | |
721 | - padding: 0 0 1rem 0; | |
722 | -} | |
723 | - | |
724 | -.btn_set div { | |
725 | - position: absolute; | |
726 | - top: 40px; | |
727 | - width: 313px; | |
728 | - height: 380px; | |
729 | - background: #fff; | |
730 | - padding: 1rem; | |
731 | -} | |
732 | - | |
733 | -.bg-white { | |
734 | - min-height: 46.6rem; | |
735 | - max-height: 46.6rem; | |
736 | - overflow: scroll; | |
737 | - overflow-x: hidden; | |
738 | -} | |
739 | - | |
740 | -.bg-white::-webkit-scrollbar-thumb { | |
741 | - background-color: #fff; | |
742 | -} | |
743 | - | |
744 | -h2 { | |
745 | - background: #50ba8a; | |
746 | - text-align: center; | |
747 | - color: #fff; | |
748 | - padding: 1.6rem 0; | |
749 | -} | |
750 | - | |
751 | -.top p { | |
752 | - font-size: 15px; | |
753 | -} | |
754 | - | |
755 | -.top ul { | |
756 | - padding: 1rem 0; | |
757 | -} | |
758 | - | |
759 | -.top li { | |
760 | - width: calc(100% / 6); | |
761 | - text-align: center; | |
762 | -} | |
763 | - | |
764 | -.top h3 { | |
765 | - font-size: 20px; | |
766 | -} | |
767 | - | |
768 | -.wrap { | |
769 | - z-index: 100; | |
770 | - top: 0; | |
771 | - height: 865px; | |
772 | -} | |
773 | - | |
774 | -.left { | |
775 | - background: #fff; | |
776 | -} | |
777 | - | |
778 | -.right { | |
779 | - width: -webkit-fill-available; | |
780 | -} | |
781 | - | |
782 | -.pg-item { | |
783 | - display: inline-block; | |
784 | - padding: 10px; | |
785 | - color: #949292; | |
786 | -} | |
787 | - | |
788 | -table { | |
789 | - width: 100%; | |
790 | - text-align: center; | |
791 | - border-collapse: collapse; | |
792 | -} | |
793 | - | |
794 | -th, | |
795 | -td { | |
796 | - border-left: none; | |
797 | - border-right: none; | |
798 | -} | |
799 | - | |
800 | -table th { | |
801 | - padding: 15px 0; | |
802 | - color: #fff; | |
803 | - background-color: #13833b; | |
804 | -} | |
805 | - | |
806 | -table td { | |
807 | - padding: 10px 0; | |
808 | - border-bottom: 1px solid #e5e5dd; | |
809 | -} | |
810 | - | |
811 | -table thead tr { | |
812 | - background-color: #f7f6f6; | |
813 | -} | |
814 | - | |
815 | -.modal2 { | |
816 | - padding: 3rem; | |
817 | -} | |
818 | - | |
819 | -.modal2 h4 { | |
820 | - font-size: 2rem; | |
821 | -} | |
822 | - | |
823 | -.modal { | |
824 | - width: 100rem; | |
825 | -} | |
826 | - | |
827 | -.modalmain { | |
828 | - padding: 1rem; | |
829 | - max-height: 70rem; | |
830 | - overflow: scroll; | |
831 | - overflow-x: hidden; | |
832 | -} | |
833 | - | |
834 | -.modalmain select { | |
835 | - width: max-content; | |
836 | -} | |
837 | - | |
838 | -.modalmain input[type="text"] { | |
839 | - width: inherit; | |
840 | -} | |
841 | - | |
842 | -.modalmain table thead { | |
843 | - background: #f7f6f6; | |
844 | -} | |
845 | - | |
846 | -.modalmain table td { | |
847 | - border: 1px solid #eee; | |
848 | -} | |
849 | - | |
850 | -.modal h2 { | |
851 | - background: #e5e5dd; | |
852 | - font-size: 2rem; | |
853 | - padding: 1rem; | |
854 | - color: #333; | |
855 | -} | |
856 | - | |
857 | -.modal-bg h2 { | |
858 | - background: #e5e5dd; | |
859 | - font-size: 2rem; | |
860 | - padding: 1rem; | |
861 | -} | |
862 | - | |
863 | -.modal h3 { | |
864 | - font-size: 1.8rem; | |
865 | - border-bottom: 1px solid #eee; | |
866 | - padding: 1rem 0 0.2rem 0; | |
867 | -} | |
868 | - | |
869 | -.modal h4 { | |
870 | - font-size: 1.6rem; | |
871 | - font-weight: 100; | |
872 | - padding: 0.2rem 0 1rem 0; | |
873 | -} | |
874 | - | |
875 | -.modal h2 button { | |
876 | - border: 0; | |
877 | - background: none; | |
878 | - height: 30px; | |
879 | - cursor: pointer; | |
880 | -} | |
881 | - | |
882 | -.modal-bg button { | |
883 | - border: 0; | |
884 | - background: none; | |
885 | - height: 30px; | |
886 | - cursor: pointer; | |
887 | -} | |
888 | - | |
889 | -.modal button img { | |
890 | - width: 25px; | |
891 | -} | |
892 | -</style>(No newline at end of file) |
--- client/views/pages/CrosswalkManagement/CrosswalkSearch.vue
... | ... | @@ -1,304 +0,0 @@ |
1 | -<template> | |
2 | - <div class="flex"> | |
3 | - <div class="left"> | |
4 | - <div class="wrap flex-between"> | |
5 | - <div class="search"> | |
6 | - <h2>횡단보도 조회</h2> | |
7 | - <div class="box"> | |
8 | - <DongSelectList @setDongCd="setDongCd" ref="parent" :crslk_azHiddenCk=true :open_layers="this.$refs.open_layers" | |
9 | - @siDoGunGuSelectF="siDoGunGuSelectF" @dongSelectF="dongSelectF" @nodeSelectF="nodeSelectF"></DongSelectList> | |
10 | - <div class="flex-center"><button class="btn-l">검색</button></div> | |
11 | - </div> | |
12 | - </div> | |
13 | - </div> | |
14 | - </div> | |
15 | - <div class="right"> | |
16 | - <div><OpenLayers ref="open_layers" /></div> | |
17 | - </div> | |
18 | - </div> | |
19 | -</template> | |
20 | - | |
21 | -<script> | |
22 | -import OpenLayers from "../../component/OpenLayers.vue"; | |
23 | -import { | |
24 | - vworldBaseLayer, | |
25 | - vworldGrayLayer, | |
26 | - vworldMidnightLayer, | |
27 | - vworldHybridLayer, | |
28 | - vworldSatelliteLayer, | |
29 | -} from "../../component/OpenLayersMap.vue"; | |
30 | -import { baseStyles } from '../../component/OpenLayersStyle.vue'; | |
31 | -import axios from "axios"; | |
32 | -import DongSelectList from '../../component/dongSelectList.vue'; | |
33 | -import MapPage from "../../component/MapPage.vue"; | |
34 | - | |
35 | -export default { | |
36 | - data() { | |
37 | - return { | |
38 | - address: { | |
39 | - //지역 설정 | |
40 | - dong_cd : "22030", | |
41 | - siDo_dong_cd : "22", | |
42 | - guGun_dong_cd : "22030", | |
43 | - dong_dong_cd : null, | |
44 | - node_id : null, | |
45 | - node_name :null, | |
46 | - zoomLevel : null, | |
47 | - crslk_az : "0", | |
48 | - coordinate : [], | |
49 | - lat : null, | |
50 | - lon : null, | |
51 | - baseSource:"EPSG:5181", | |
52 | - }, | |
53 | - | |
54 | - modal_1: false, | |
55 | - modal_2: false, | |
56 | - tabs: [ | |
57 | - { | |
58 | - id: 1, | |
59 | - title: "상황발생현황", | |
60 | - content1: "This is the content for Tab 1", | |
61 | - }, | |
62 | - { | |
63 | - id: 2, | |
64 | - title: "장애발생현황", | |
65 | - content2: "This is the content for Tab 2", | |
66 | - }, | |
67 | - ], | |
68 | - activeTab: 1, | |
69 | - items: [ | |
70 | - { id: 1, name: "무단횡단", isActive: false }, | |
71 | - { id: 2, name: "신호연장", isActive: false }, | |
72 | - { id: 3, name: "우회전 차량", isActive: false }, | |
73 | - { id: 4, name: "장애발생", isActive: false }, | |
74 | - ], | |
75 | - }; | |
76 | - }, | |
77 | - components: { | |
78 | - OpenLayers: OpenLayers, | |
79 | - DongSelectList: DongSelectList, | |
80 | - }, | |
81 | - methods: { | |
82 | - //DongSelectList에서 dong_cd 받아오기 | |
83 | - setDongCd(value) { | |
84 | - console.log("value : ", value); | |
85 | - this.address = value; | |
86 | - }, | |
87 | - | |
88 | - //시/도/군/구 Select 선택시 바로 위치 이동 | |
89 | - siDoGunGuSelectF: function (event) { | |
90 | - //기존 layer 지우기 | |
91 | - this.$refs.open_layers.removeLayerAll(); | |
92 | - //기본 지도 layer 그리기 + 해당 위치로 이동 | |
93 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,event.target.value); | |
94 | - this.$refs.open_layers.setZoom(this.address.zoomLevel); | |
95 | - //polygon 그리기 | |
96 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd); | |
97 | - // 지역 중앙에 노드 + 이름 넣기 | |
98 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsCenterJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd); | |
99 | - | |
100 | - }, | |
101 | - | |
102 | - //행정동 Select 선택시 바로 위치 이동 | |
103 | - dongSelectF: function (event) { | |
104 | - //기존 layer 지우기 | |
105 | - this.$refs.open_layers.removeLayerAll(); | |
106 | - //기본 지도 layer 그리기 + 해당 위치로 이동 | |
107 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,event.target.value); | |
108 | - this.$refs.open_layers.setZoom(this.address.zoomLevel); | |
109 | - //polygon 그리기 | |
110 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd); | |
111 | - // 행정동에 포함된 노드 넣기 | |
112 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getNodesGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd); | |
113 | - }, | |
114 | - | |
115 | - //노드 Select 선택시 바로 위치 이동 | |
116 | - nodeSelectF: function (event) { | |
117 | - //기존 layer 지우기 | |
118 | - this.$refs.open_layers.removeLayerAll(); | |
119 | - //기본 지도 layer 그리기 + 해당 위치로 이동 | |
120 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,this.address.dong_cd, event.target.value); | |
121 | - this.$refs.open_layers.setZoom(this.address.zoomLevel); | |
122 | - //polygon 그리기 | |
123 | - this.$refs.open_layers.addVectorLayerByUrl('/node/getNodeGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd, this.address.node_id); | |
124 | - // 노드 중앙에 노드 그리기 | |
125 | - this.$refs.open_layers.addVectorLayerByUrl('/node/getNodeGeoJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd, this.address.node_id); | |
126 | - }, | |
127 | - | |
128 | - changeTab(tabId) { | |
129 | - this.activeTab = tabId; | |
130 | - }, | |
131 | - toggleActive(item) { | |
132 | - item.isActive = !item.isActive; | |
133 | - }, | |
134 | - }, | |
135 | - watch: {}, | |
136 | - computed: {}, | |
137 | - mounted() { | |
138 | - console.log("Main2 mounted"); | |
139 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
140 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json', 'multPolygonLayer', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd); | |
141 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsCenterJson.json', 'nodeLayer', 'EPSG:5181', baseStyles['labelStyle'], 'label', this.address.dong_cd); | |
142 | - | |
143 | - }, | |
144 | -}; | |
145 | -</script> | |
146 | -<style scoped> | |
147 | -label { | |
148 | - width: max-content; | |
149 | - text-align: left; | |
150 | -} | |
151 | -.search .box { | |
152 | - padding: 1rem 2rem; | |
153 | -} | |
154 | -.search input[type="text"] { | |
155 | - width: 9rem; | |
156 | -} | |
157 | - | |
158 | -.btn_set { | |
159 | - position: relative; | |
160 | - border-bottom: 1px solid #e5e3e3; | |
161 | - padding: 0 0 1rem 0; | |
162 | -} | |
163 | -.btn_set div { | |
164 | - position: absolute; | |
165 | - top: 40px; | |
166 | - width: 313px; | |
167 | - height: 380px; | |
168 | - background: #fff; | |
169 | - padding: 1rem; | |
170 | -} | |
171 | -.bg-white { | |
172 | - min-height: 46.6rem; | |
173 | - max-height: 46.6rem; | |
174 | - overflow: scroll; | |
175 | - overflow-x: hidden; | |
176 | -} | |
177 | -.bg-white::-webkit-scrollbar-thumb { | |
178 | - background-color: #fff; | |
179 | -} | |
180 | -h2 { | |
181 | - background: #50ba8a; | |
182 | - text-align: center; | |
183 | - color: #fff; | |
184 | - padding: 1.6rem 0; | |
185 | -} | |
186 | -.top p { | |
187 | - font-size: 15px; | |
188 | -} | |
189 | -.top ul { | |
190 | - padding: 1rem 0; | |
191 | -} | |
192 | -.top li { | |
193 | - width: calc(100% / 6); | |
194 | - text-align: center; | |
195 | -} | |
196 | -.top h3 { | |
197 | - font-size: 20px; | |
198 | -} | |
199 | -.wrap { | |
200 | - z-index: 100; | |
201 | - top: 0; | |
202 | - height: 865px; | |
203 | -} | |
204 | -.left { | |
205 | - background: #fff; | |
206 | -} | |
207 | -.right { | |
208 | - width: -webkit-fill-available; | |
209 | -} | |
210 | -.pg-item { | |
211 | - display: inline-block; | |
212 | - padding: 10px; | |
213 | - color: #949292; | |
214 | -} | |
215 | -table { | |
216 | - width: 100%; | |
217 | - text-align: center; | |
218 | - border-collapse: collapse; | |
219 | -} | |
220 | - | |
221 | -th, | |
222 | -td { | |
223 | - border-left: none; | |
224 | - border-right: none; | |
225 | -} | |
226 | - | |
227 | -table th { | |
228 | - padding: 15px 0; | |
229 | - color: #fff; | |
230 | - background-color: #13833b; | |
231 | -} | |
232 | - | |
233 | -table td { | |
234 | - padding: 10px 0; | |
235 | - border-bottom: 1px solid #e5e5dd; | |
236 | -} | |
237 | - | |
238 | -table thead tr { | |
239 | - background-color: #f7f6f6; | |
240 | -} | |
241 | -.modal2 { | |
242 | - padding: 3rem; | |
243 | -} | |
244 | -.modal2 h4 { | |
245 | - font-size: 2rem; | |
246 | -} | |
247 | -.modal { | |
248 | - width: 100rem; | |
249 | -} | |
250 | -.modalmain { | |
251 | - padding: 1rem; | |
252 | - max-height: 70rem; | |
253 | - overflow: scroll; | |
254 | - overflow-x: hidden; | |
255 | -} | |
256 | -.modalmain select { | |
257 | - width: max-content; | |
258 | -} | |
259 | -.modalmain input[type="text"] { | |
260 | - width: inherit; | |
261 | -} | |
262 | -.modalmain table thead { | |
263 | - background: #f7f6f6; | |
264 | -} | |
265 | -.modalmain table td { | |
266 | - border: 1px solid #eee; | |
267 | -} | |
268 | -.modal h2 { | |
269 | - background: #e5e5dd; | |
270 | - font-size: 2rem; | |
271 | - padding: 1rem; | |
272 | - color: #333; | |
273 | -} | |
274 | -.modal-bg h2 { | |
275 | - background: #e5e5dd; | |
276 | - font-size: 2rem; | |
277 | - padding: 1rem; | |
278 | -} | |
279 | -.modal h3 { | |
280 | - font-size: 1.8rem; | |
281 | - border-bottom: 1px solid #eee; | |
282 | - padding: 1rem 0 0.2rem 0; | |
283 | -} | |
284 | -.modal h4 { | |
285 | - font-size: 1.6rem; | |
286 | - font-weight: 100; | |
287 | - padding: 0.2rem 0 1rem 0; | |
288 | -} | |
289 | -.modal h2 button { | |
290 | - border: 0; | |
291 | - background: none; | |
292 | - height: 30px; | |
293 | - cursor: pointer; | |
294 | -} | |
295 | -.modal-bg button { | |
296 | - border: 0; | |
297 | - background: none; | |
298 | - height: 30px; | |
299 | - cursor: pointer; | |
300 | -} | |
301 | -.modal button img { | |
302 | - width: 25px; | |
303 | -} | |
304 | -</style>(No newline at end of file) |
--- client/views/pages/Introduction/Introduction.vue
... | ... | @@ -1,50 +0,0 @@ |
1 | -<template> | |
2 | - <div><h2>플랫폼 소개</h2> | |
3 | - <h3 style="margin-top: 3rem;">1. AI 안정통합 횡단보도 플랫폼이란?</h3> | |
4 | - <p>AI 영상감지, 실시간 신호개방 등 최첨단 기술을 적용하여 횡단보도를 이용하는 보행자 보호를 위한 보행신호 자동연장, | |
5 | -무단횡단 방지, 우회전 차량사고등을 예방하고 주행중인 차량 내비게이션에 실시간으로 횡단보도 내 위험 정보를 제공하여 | |
6 | -교통안전 예방정책을 추진하고, 횡단보도 사고를 줄이는데 목표를 둔 플랫폼 | |
7 | -</p> | |
8 | - <h3 style="margin-top: 3rem;">2. 주요 서비스</h3> | |
9 | - <p>① 보행약자를 위한 보행신호 자동연장 서비스 | |
10 | -</p> | |
11 | -<p>- AI 영상인식으로 사람, 목발, 우산, 휠체어, 유모차 등 보행자를 판별하고 보행자의 상태 정 보를 식별하여 | |
12 | - 신호제어기에 신호연장 신호를 전달</p> | |
13 | - <p>② 무단횡단 방지 및 무단횡단 사고 예방 서비스</p> | |
14 | - <p>- 차량 및 보행신호, 횡단보도 대기공간의 보행대기자를 판별하여 보행신호 시 우회전 차량의 진입 상황을 현장 음향신호 장비로 | |
15 | - 안내</p> | |
16 | - <p>③ 우회전 차량 교통사고 예방 서비스</p> | |
17 | - <p>- 신호대기 상태에서 보행 대기자 판별 및 횡단보도 진입 여부를 인식하고 보행자 무단횡단 발생 시 음향 신호방비로 정보를 전달</p> | |
18 | - <p>④ 차량 운전자 안내를 위한 실시간 내비게이션 안내 서비스</p> | |
19 | - <p>- 횡단보도 대기 공간의 보행대기자를 판별하고 횡단보도 내 무단횡단 및 우회전 준법 주행이 가능한지에 대한 정보를 | |
20 | - 내비게이션을 통해 안내 할 수 있도록 정보 제공</p> | |
21 | - <p>⑤ 실시간 관제 시스템</p> | |
22 | - <p>- 현장 실시간 CCTV 영상을 제공하고, 발생하는 위험/사고현황을 한눈에 쉽게 볼 수 있는 서비스를 제공</p> | |
23 | - <p>⑥ GIS기반 분석 시스템</p> | |
24 | - <p>- 실시간으로 발생하는 위험/사고 정보를 수집하고 수집된 데이터를 활용하여 상황발생 테마별로 데이터를 분석, 시각화 하여 | |
25 | - 현황파악 및 해결책 도출에 도움을 주는 서비스를 제공</p> | |
26 | - </div> | |
27 | -</template> | |
28 | -<style scoped> | |
29 | -@media all and (max-width: 479px) { | |
30 | - div{padding: 3rem 1rem !important;} | |
31 | -} | |
32 | - div{padding: 3rem 15rem; line-height: 4rem;} | |
33 | - h2{font-size: 2rem;} | |
34 | - h3{font-size: 1.8rem;} | |
35 | - p{font-size: 1.6rem;} | |
36 | -</style> | |
37 | - | |
38 | -<script> | |
39 | -export default { | |
40 | - data() { | |
41 | - return {}; | |
42 | - }, | |
43 | - methods: {}, | |
44 | - watch: {}, | |
45 | - computed: {}, | |
46 | - mounted() { | |
47 | - console.log("Main4 mounted"); | |
48 | - }, | |
49 | -}; | |
50 | -</script> |
--- client/views/pages/Introduction/ManualDown.vue
... | ... | @@ -1,17 +0,0 @@ |
1 | -<template> | |
2 | - <div>로그인/로그아웃</div> | |
3 | -</template> | |
4 | - | |
5 | -<script> | |
6 | -export default { | |
7 | - data() { | |
8 | - return {}; | |
9 | - }, | |
10 | - methods: {}, | |
11 | - watch: {}, | |
12 | - computed: {}, | |
13 | - mounted() { | |
14 | - console.log("Main4 mounted"); | |
15 | - }, | |
16 | -}; | |
17 | -</script> |
--- client/views/pages/Introduction/openlayers.vue
... | ... | @@ -1,171 +0,0 @@ |
1 | -<template> | |
2 | - <div class="flex"> | |
3 | - <div class="left"> | |
4 | - <div class="wrap flex-between"> | |
5 | - <div class="iconlist"> | |
6 | - <ul> | |
7 | - <li | |
8 | - v-for="item in items" | |
9 | - :key="item.id" | |
10 | - :class="{ active: item.isActive }" | |
11 | - @click="toggleActive(item)" | |
12 | - > | |
13 | - <div></div> | |
14 | - <p>{{ item.name }}</p> | |
15 | - </li> | |
16 | - </ul> | |
17 | - </div> | |
18 | - <div class="search"> | |
19 | - <h2>지역설정</h2> | |
20 | - <div class="box"> | |
21 | - <div class="flex-between m-b"> | |
22 | - <label for="">시/도</label> | |
23 | - <select name="" id=""></select> | |
24 | - </div> | |
25 | - <div class="flex-between m-b"> | |
26 | - <label for="">시/군/구</label> | |
27 | - <select name="" id=""></select> | |
28 | - </div> | |
29 | - <div class="flex-between m-b"> | |
30 | - <label for="">행정동</label> | |
31 | - <select name="" id=""></select> | |
32 | - </div> | |
33 | - <div class="flex-between m-b"> | |
34 | - <label for="">교차로</label> | |
35 | - <select name="" id=""></select> | |
36 | - </div> | |
37 | - </div> | |
38 | - <h2>조건설정</h2> | |
39 | - <div class="box"> | |
40 | - <div class="flex-between m-b"> | |
41 | - <input type="checkbox" /><label for="">무단횡단</label> | |
42 | - <input type="checkbox" /><label for="">신호연장</label> | |
43 | - <input type="checkbox" /><label for="">신호위반</label> | |
44 | - <input type="checkbox" /><label for="">장애발생</label> | |
45 | - </div> | |
46 | - <div class="flex-between m-b" > | |
47 | - <label for="date-input">일자</label> | |
48 | - <input id="date-input" type="date" v-model="selectedDate" /> ~ <input id="date-input" type="date" v-model="selectedDate" /> | |
49 | - </div> | |
50 | - <div class="flex-between m-b" > | |
51 | - <label for="time-input">시간대</label> | |
52 | - <input | |
53 | - id="time-input" | |
54 | - type="time" | |
55 | - v-model="selectedTime" | |
56 | - />~<input id="time-input" type="time" v-model="selectedTime" /> | |
57 | - </div> | |
58 | - <button class="btn-l green-btn">검색</button> | |
59 | - </div> | |
60 | - <h2>지역설정</h2> | |
61 | - <div class="box bg-white"> | |
62 | - <button c>상황발생현황</button> | |
63 | - <button>장애발생현황</button> | |
64 | - <ul> | |
65 | - <li> | |
66 | - <p class="m-b">발생일시: 2023-05-04 14:27</p> | |
67 | - <p class="m-b">상황명: 무단횡단</p> | |
68 | - <p class="m-b">발생장소: 영재어린이집(서측) 동쪽횡단보도</p> | |
69 | - </li> | |
70 | - </ul> | |
71 | - </div> | |
72 | - </div> | |
73 | - </div> | |
74 | - </div> | |
75 | - <div class="right"> | |
76 | - <div class="top"> | |
77 | - <ul class="flex-end"> | |
78 | - <li> | |
79 | - <p>금일 보행자</p> | |
80 | - <h3>명</h3> | |
81 | - </li> | |
82 | - <li> | |
83 | - <p>금일 무단횡단 발생</p> | |
84 | - <h3>회</h3> | |
85 | - </li> | |
86 | - <li> | |
87 | - <p>금일 신호연장 발생</p> | |
88 | - <h3>회</h3> | |
89 | - </li> | |
90 | - <li> | |
91 | - <p>금일 신호연장 시간</p> | |
92 | - <h3>초</h3> | |
93 | - </li> | |
94 | - <li> | |
95 | - <p>금일 차량 신호위반 발생</p> | |
96 | - <h3>회</h3> | |
97 | - </li> | |
98 | - <li> | |
99 | - <p>금일 장애 발생</p> | |
100 | - <h3>회</h3> | |
101 | - </li> | |
102 | - </ul> | |
103 | - </div> | |
104 | - <div><MapPage /></div> | |
105 | - </div> | |
106 | - </div> | |
107 | -</template> | |
108 | -<style scoped> | |
109 | -.bg-white{min-height: 46.6rem; max-height: 46.6rem; overflow: scroll; overflow-x: hidden;} | |
110 | -.bg-white::-webkit-scrollbar-thumb {background-color: #fff;} | |
111 | -h2 { | |
112 | - background: #50ba8a; | |
113 | - text-align: center; | |
114 | - color: #fff; | |
115 | - padding: 1.6rem 0; | |
116 | -} | |
117 | -.top p { | |
118 | - font-size: 15px; | |
119 | -} | |
120 | -.top ul { | |
121 | - padding: 1rem 0; | |
122 | -} | |
123 | -.top li { | |
124 | - width: calc(100% / 6); | |
125 | - text-align: center; | |
126 | -} | |
127 | -.top h3 { | |
128 | - font-size: 20px; | |
129 | -} | |
130 | -.wrap { | |
131 | - z-index: 100; | |
132 | - top: 0; | |
133 | - height: 865px; | |
134 | -} | |
135 | -.left { | |
136 | - background: #fff; | |
137 | -} | |
138 | -.right { | |
139 | - width: -webkit-fill-available; | |
140 | - | |
141 | -} | |
142 | -</style> | |
143 | -<script> | |
144 | -import MapPage from "../../component/MapPage.vue"; | |
145 | - | |
146 | -export default { | |
147 | - data() { | |
148 | - return { | |
149 | - items: [ | |
150 | - { id: 1, name: "무단횡단", isActive: false }, | |
151 | - { id: 2, name: "신호연장", isActive: false }, | |
152 | - { id: 3, name: "우회전 차량", isActive: false }, | |
153 | - { id: 4, name: "장애발생", isActive: false }, | |
154 | - ], | |
155 | - }; | |
156 | - }, | |
157 | - components: { | |
158 | - MapPage: MapPage, | |
159 | - }, | |
160 | - methods: { | |
161 | - toggleActive(item) { | |
162 | - item.isActive = !item.isActive; | |
163 | - }, | |
164 | - }, | |
165 | - watch: {}, | |
166 | - computed: {}, | |
167 | - mounted() { | |
168 | - console.log("Main2 mounted"); | |
169 | - }, | |
170 | -}; | |
171 | -</script> |
--- client/views/pages/RealtimeStatus/CrosswalkListSearch.vue
... | ... | @@ -1,462 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div class="board-wrap"> | |
4 | - <div class="search-wrap"> | |
5 | - <div class="flex m-b gap mb-block" style="margin-bottom: 2rem"> | |
6 | - <div class="flex gap m-r date" style="margin-right: 5rem"> | |
7 | - <label>조회기간: </label> | |
8 | - <input type="date" name="" id="" /> | |
9 | - <span>~</span> | |
10 | - <input type="date" name="" id="" /> | |
11 | - </div> | |
12 | - <label>지역: </label> | |
13 | - <dongSelectList @setDongCd="setDongCd" :nodeHiddenCk="true" :azimuthHiddenCk="true"></dongSelectList> | |
14 | - </div> | |
15 | - <div class="flex-between gap line"> | |
16 | - <div class="gap flex mb-block"> | |
17 | - <div class="flex m-b gap"> | |
18 | - <label>우회차선: </label> | |
19 | - <select name="" id=""> | |
20 | - <option value="">전체</option> | |
21 | - </select> | |
22 | - <label>왕복차선: </label> | |
23 | - <select name="" id=""> | |
24 | - <option value="">전체</option> | |
25 | - </select> | |
26 | - </div> | |
27 | - <div class="flex"> | |
28 | - <div class="m-r flex gap"> | |
29 | - <label class="m-r">장비: </label> | |
30 | - <label>무단횡단</label> | |
31 | - <input class="m-r" type="checkbox" name="" id="" /> | |
32 | - <label>신호연장</label> | |
33 | - <input class="m-r" type="checkbox" name="" id="" /> | |
34 | - <label>우회차량</label> | |
35 | - <input class="m-r" type="checkbox" name="" id="" /> | |
36 | - </div> | |
37 | - </div> | |
38 | - <div class="flex gap"> | |
39 | - <label>상태: </label> | |
40 | - <select name="" id=""> | |
41 | - <option value="">정상</option> | |
42 | - </select> | |
43 | - <button type="button" class="btn-2 green-btn">조회</button> | |
44 | - </div> | |
45 | - </div> | |
46 | - </div> | |
47 | - </div> | |
48 | - <div> | |
49 | - <table class="pc"> | |
50 | - <!-- <colgroup> | |
51 | - <col style="width: 10%;"> | |
52 | - <col style="width: 20%;"> | |
53 | - <col style="width: 20%;"> | |
54 | - <col style="width: 30%;"> | |
55 | - <col style="width: 20%;"> | |
56 | - </colgroup> --> | |
57 | - <thead> | |
58 | - <tr> | |
59 | - <th>No</th> | |
60 | - <th>설치일자</th> | |
61 | - <th>시/도</th> | |
62 | - <th>시/군/구</th> | |
63 | - <th>행정동</th> | |
64 | - <th>교차로</th> | |
65 | - <th>횡단보도명</th> | |
66 | - </tr> | |
67 | - </thead> | |
68 | - <tbody> | |
69 | - <tr @click="modal_1 = true"> | |
70 | - <td></td> | |
71 | - <td></td> | |
72 | - <td></td> | |
73 | - <td></td> | |
74 | - <td></td> | |
75 | - <td></td> | |
76 | - <td></td> | |
77 | - </tr> | |
78 | - </tbody> | |
79 | - </table> | |
80 | - <table class="mobile"> | |
81 | - <colgroup> | |
82 | - <col style="width: 10%" /> | |
83 | - <col style="width: 20%" /> | |
84 | - </colgroup> | |
85 | - <tbody> | |
86 | - <tr> | |
87 | - <th>No</th> | |
88 | - <td></td> | |
89 | - </tr> | |
90 | - <tr> | |
91 | - <th>설치일자</th> | |
92 | - <td></td> | |
93 | - </tr> | |
94 | - <tr> | |
95 | - <th>시/도</th> | |
96 | - <td></td> | |
97 | - </tr> | |
98 | - <tr> | |
99 | - <th>시/군/구</th> | |
100 | - <td></td> | |
101 | - </tr> | |
102 | - <tr> | |
103 | - <th>행정동</th> | |
104 | - <td></td> | |
105 | - </tr> | |
106 | - <tr> | |
107 | - <th>교차로</th> | |
108 | - <td></td> | |
109 | - </tr> | |
110 | - <tr> | |
111 | - <th>횡단보도명</th> | |
112 | - <td></td> | |
113 | - </tr> | |
114 | - </tbody> | |
115 | - </table> | |
116 | - <div class="modal-wrap" v-if="modal_1 == true"> | |
117 | - <div class="modal-bg"></div> | |
118 | - <div class="modal"> | |
119 | - <h2 class="flex-between"> | |
120 | - 횡단보도 상세정보 | |
121 | - <button type="button" class="gray-btn" @click="modal_1 = false"> | |
122 | - <img src="../../../resources/images/close.png" alt="" /> | |
123 | - </button> | |
124 | - </h2> | |
125 | - <div class="modalmain"> | |
126 | - <div class="flex-between"> | |
127 | - <div class="img">무단횡단검지카메라 이미지</div> | |
128 | - <div class="img">무단횡단검지카메라 이미지</div> | |
129 | - <div class="img">신호연장검지카메라 이미지</div> | |
130 | - <div class="img">신호연장검지카메라 이미지</div> | |
131 | - <div class="img">우회차량검지카메라 이미지</div> | |
132 | - </div> | |
133 | - <table> | |
134 | - <colgroup> | |
135 | - <col style="width: 20%" /> | |
136 | - <col style="width: 20%" /> | |
137 | - <col style="width: 60%" /> | |
138 | - </colgroup> | |
139 | - <tbody> | |
140 | - <tr> | |
141 | - <td colspan="2">시/도</td> | |
142 | - <td></td> | |
143 | - </tr> | |
144 | - <tr> | |
145 | - <td colspan="2">시/군/구</td> | |
146 | - <td></td> | |
147 | - </tr> | |
148 | - <tr> | |
149 | - <td colspan="2">행정동</td> | |
150 | - <td></td> | |
151 | - </tr> | |
152 | - <tr> | |
153 | - <td colspan="2">노드명</td> | |
154 | - <td></td> | |
155 | - </tr> | |
156 | - <tr> | |
157 | - <td colspan="2">방위각</td> | |
158 | - <td></td> | |
159 | - </tr> | |
160 | - <tr> | |
161 | - <td rowspan="2">좌표</td> | |
162 | - <td>경도</td> | |
163 | - </tr> | |
164 | - <tr> | |
165 | - <td>위도</td> | |
166 | - <td></td> | |
167 | - </tr> | |
168 | - <tr> | |
169 | - <td rowspan="3">설치된 검시장비</td> | |
170 | - <td>무단횡단</td> | |
171 | - </tr> | |
172 | - <tr> | |
173 | - <td>신호연장</td> | |
174 | - <td></td> | |
175 | - </tr> | |
176 | - <tr> | |
177 | - <td>우회전차량</td> | |
178 | - <td></td> | |
179 | - </tr> | |
180 | - <tr> | |
181 | - <td colspan="2">무단횡단 검지범위</td> | |
182 | - <td></td> | |
183 | - </tr> | |
184 | - <tr> | |
185 | - <td colspan="2">왕복차선</td> | |
186 | - <td></td> | |
187 | - </tr> | |
188 | - <tr> | |
189 | - <td colspan="2">우회전차선유무</td> | |
190 | - <td></td> | |
191 | - </tr> | |
192 | - <tr> | |
193 | - <td colspan="2">우회전차선유형</td> | |
194 | - <td></td> | |
195 | - </tr> | |
196 | - <tr> | |
197 | - <td colspan="2">등록일자</td> | |
198 | - <td></td> | |
199 | - </tr> | |
200 | - <tr> | |
201 | - <td colspan="2">횡단보도 유지보수 담당자</td> | |
202 | - <td></td> | |
203 | - </tr> | |
204 | - </tbody> | |
205 | - </table> | |
206 | - <h4 style="margin-top: 2rem">횡단보도 유지보수 담당자 정보</h4> | |
207 | - <table> | |
208 | - <colgroup> | |
209 | - <col style="width: 50%" /> | |
210 | - <col style="width: 50%" /> | |
211 | - </colgroup> | |
212 | - <tbody> | |
213 | - <tr> | |
214 | - <td>이름</td> | |
215 | - <td></td> | |
216 | - </tr> | |
217 | - <tr> | |
218 | - <td>이메일</td> | |
219 | - <td></td> | |
220 | - </tr> | |
221 | - <tr> | |
222 | - <td>소속정보</td> | |
223 | - <td></td> | |
224 | - </tr> | |
225 | - </tbody> | |
226 | - </table> | |
227 | - | |
228 | - </div> | |
229 | - </div> | |
230 | - </div> | |
231 | - </div> | |
232 | - <div class="bottom-wrap"> | |
233 | - <div class="pg-wrap"> | |
234 | - <a href="#" class="pg-item prev">◀</a> | |
235 | - <a href="#" class="pg-item active">1</a> | |
236 | - <a href="#" class="pg-item">2</a> | |
237 | - <a href="#" class="pg-item">3</a> | |
238 | - <a href="#" class="pg-item">4</a> | |
239 | - <a href="#" class="pg-item">5</a> | |
240 | - <a href="#" class="pg-item next">▶</a> | |
241 | - </div> | |
242 | - <div class="btn-wrap"> | |
243 | - <router-link to="/UserManagement.page"> | |
244 | - <span class="btn-2 green-btn">Excel로 저장</span> | |
245 | - </router-link> | |
246 | - </div> | |
247 | - </div> | |
248 | - </div> | |
249 | - </div> | |
250 | -</template> | |
251 | - | |
252 | -<script> | |
253 | -import Modal from "../../component/Modal.vue"; | |
254 | -import dongSelectList from '../../component/dongSelectList.vue'; | |
255 | - | |
256 | -export default { | |
257 | - data() { | |
258 | - return { | |
259 | - modal_1: false, | |
260 | - }; | |
261 | - }, | |
262 | - methods: {}, | |
263 | - watch: {}, | |
264 | - computed: { | |
265 | - Modal: Modal, | |
266 | - }, | |
267 | - components: { | |
268 | - dongSelectList: dongSelectList | |
269 | - }, | |
270 | - mounted() { | |
271 | - console.log("Main4 mounted"); | |
272 | - }, | |
273 | -}; | |
274 | -</script> | |
275 | - | |
276 | -<style scoped> | |
277 | -@media all and (max-width: 479px) { | |
278 | - .date { | |
279 | - margin-right: 0 !important; | |
280 | - margin-bottom: 1rem; | |
281 | - } | |
282 | - .line select { | |
283 | - width: 10rem; | |
284 | - } | |
285 | - .local select { | |
286 | - width: 8.7rem; | |
287 | - } | |
288 | -} | |
289 | -.mobile { | |
290 | - display: none; | |
291 | -} | |
292 | -::v-deep select { | |
293 | - width: 15rem; | |
294 | -} | |
295 | -.img { | |
296 | - width: 20rem; | |
297 | - height: 20rem; | |
298 | - border: 1px solid #e5e5dd; | |
299 | -} | |
300 | -label { | |
301 | - width: max-content; | |
302 | -} | |
303 | -select { | |
304 | - width: 15rem; | |
305 | -} | |
306 | -.modal { | |
307 | - width: 100rem; | |
308 | -} | |
309 | -.modalmain { | |
310 | - padding: 1rem; | |
311 | - max-height: 70rem; | |
312 | - overflow: scroll; | |
313 | - overflow-x: hidden; | |
314 | -} | |
315 | -.modalmain table tbody tr:nth-child(odd) { | |
316 | - background: #f7f6f6; | |
317 | -} | |
318 | -.modalmain table tbody tr:nth-child(even) { | |
319 | - background: #ffffff; | |
320 | -} | |
321 | -.modalmain table td { | |
322 | - border: 1px solid #eee; | |
323 | -} | |
324 | -.modal h2 { | |
325 | - background: #e5e5dd; | |
326 | - font-size: 2rem; | |
327 | - padding: 1rem; | |
328 | -} | |
329 | -.modal-bg h2 { | |
330 | - background: #e5e5dd; | |
331 | - font-size: 2rem; | |
332 | - padding: 1rem; | |
333 | -} | |
334 | -.modal h3 { | |
335 | - font-size: 1.8rem; | |
336 | - border-bottom: 1px solid #eee; | |
337 | - padding: 1rem 0 0.2rem 0; | |
338 | -} | |
339 | -.modal h4 { | |
340 | - font-size: 1.6rem; | |
341 | - font-weight: 100; | |
342 | - padding: 0.2rem 0 1rem 0; | |
343 | -} | |
344 | -.modal button { | |
345 | - border: 0; | |
346 | - background: none; | |
347 | - height: 30px; | |
348 | - cursor: pointer; | |
349 | -} | |
350 | -.modal-bg button { | |
351 | - border: 0; | |
352 | - background: none; | |
353 | - height: 30px; | |
354 | - cursor: pointer; | |
355 | -} | |
356 | -.modal button img { | |
357 | - width: 25px; | |
358 | -} | |
359 | -.txt-point { | |
360 | - color: #333; | |
361 | -} | |
362 | -.wrap { | |
363 | - width: 155rem; | |
364 | - margin: 100px auto; | |
365 | -} | |
366 | - | |
367 | -.search-wrap { | |
368 | - margin-bottom: 30px; | |
369 | - background: #f7f6f6; | |
370 | - padding: 1rem; | |
371 | -} | |
372 | - | |
373 | -.search-wrap input, | |
374 | -.search-wrap select { | |
375 | - height: 22.5px; | |
376 | - border-radius: 3px; | |
377 | - border: 1px solid #949292; | |
378 | -} | |
379 | - | |
380 | -.float-right { | |
381 | - float: right; | |
382 | -} | |
383 | - | |
384 | -.clear-fix::after { | |
385 | - content: ""; | |
386 | - display: block; | |
387 | - clear: both; | |
388 | -} | |
389 | - | |
390 | -.search-wrap .float-right form > *:not(:last-child) { | |
391 | - margin-right: 1rem; | |
392 | -} | |
393 | - | |
394 | -table { | |
395 | - width: 100%; | |
396 | - text-align: center; | |
397 | - border-collapse: collapse; | |
398 | -} | |
399 | - | |
400 | -th, | |
401 | -td { | |
402 | - border-left: none; | |
403 | - border-right: none; | |
404 | -} | |
405 | - | |
406 | -table th { | |
407 | - padding: 15px 0; | |
408 | - color: #fff; | |
409 | - background-color: #13833b; | |
410 | -} | |
411 | - | |
412 | -table td { | |
413 | - padding: 10px 0; | |
414 | - border-bottom: 1px solid #e5e5dd; | |
415 | -} | |
416 | - | |
417 | -table tr:nth-child(odd) { | |
418 | - background-color: #f7f6f6; | |
419 | -} | |
420 | - | |
421 | -table tr:nth-child(even) { | |
422 | - background-color: #fdfdf2; | |
423 | -} | |
424 | - | |
425 | -.bottom-wrap { | |
426 | - position: relative; | |
427 | - padding: 1rem 0; | |
428 | -} | |
429 | - | |
430 | -.btn-2 { | |
431 | - display: inline-block; | |
432 | - padding: 0.3rem 2rem; | |
433 | - font-size: 13.333px; | |
434 | -} | |
435 | - | |
436 | -.pg-wrap { | |
437 | - text-align: center; | |
438 | -} | |
439 | - | |
440 | -.pg-item { | |
441 | - display: inline-block; | |
442 | - padding: 10px; | |
443 | - color: #949292; | |
444 | -} | |
445 | - | |
446 | -.pg-item.prev, | |
447 | -.pg-item.next, | |
448 | -.pg-item.active { | |
449 | - color: #13833b; | |
450 | -} | |
451 | - | |
452 | -.btn-wrap { | |
453 | - position: absolute; | |
454 | - right: 0; | |
455 | - top: 1.5em; | |
456 | - z-index: 10; | |
457 | -} | |
458 | - | |
459 | -.btn-wrap button { | |
460 | - cursor: pointer; | |
461 | -} | |
462 | -</style> |
--- client/views/pages/RealtimeStatus/ErrorSearch.vue
... | ... | @@ -1,405 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div class="board-wrap"> | |
4 | - <div class="search-wrap"> | |
5 | - <div class="flex m-b gap mb-block" style="margin-bottom: 2rem"> | |
6 | - <div class="flex gap m-r date" style="margin-right: 5rem"> | |
7 | - <label>조회기간: </label> | |
8 | - <input type="date" name="" id="" /> | |
9 | - <span>~</span> | |
10 | - <input type="date" name="" id="" /> | |
11 | - </div> | |
12 | - <div class="flex gap local"> | |
13 | - <label>지역: </label> | |
14 | - <select name="" id=""> | |
15 | - <option value="">대구광역시</option> | |
16 | - </select> | |
17 | - <select name="" id=""> | |
18 | - <option value="">서구</option> | |
19 | - </select> | |
20 | - <select name="" id=""> | |
21 | - <option value="">전체</option> | |
22 | - </select> | |
23 | - </div> | |
24 | - </div> | |
25 | - <div class="flex-between gap m-b mb-block"> | |
26 | - <div class="gap flex mb-block"> | |
27 | - <div class="m-b"> | |
28 | - <label>장애타입: </label> | |
29 | - <select name="" id=""> | |
30 | - <option value="">전체</option> | |
31 | - </select> | |
32 | - </div> | |
33 | - <div class="m-b"> | |
34 | - <label>장비타입: </label> | |
35 | - <select name="" id=""> | |
36 | - <option value="">전체</option> | |
37 | - </select> | |
38 | - </div> | |
39 | - <div class="m-b flex-between gap"> | |
40 | - <div> | |
41 | - <label>복구여부: </label> | |
42 | - <select name="" id=""> | |
43 | - <option value="">정상</option> | |
44 | - </select> | |
45 | - </div> | |
46 | - <button type="button" class="btn-2 green-btn">조회</button> | |
47 | - </div> | |
48 | - </div> | |
49 | - </div> | |
50 | - </div> | |
51 | - <div> | |
52 | - <table class="pc"> | |
53 | - <!-- <colgroup> | |
54 | - <col style="width: 10%;"> | |
55 | - <col style="width: 20%;"> | |
56 | - <col style="width: 20%;"> | |
57 | - <col style="width: 30%;"> | |
58 | - <col style="width: 20%;"> | |
59 | - </colgroup> --> | |
60 | - <thead> | |
61 | - <tr> | |
62 | - <th>No</th> | |
63 | - <th>장애 발생일시</th> | |
64 | - <th>시/도</th> | |
65 | - <th>시/군/구</th> | |
66 | - <th>행정동</th> | |
67 | - <th>교차로</th> | |
68 | - <th>횡단보도명</th> | |
69 | - <th>장비명</th> | |
70 | - <th>장애명</th> | |
71 | - <th>복구여부</th> | |
72 | - <th>복구시간</th> | |
73 | - </tr> | |
74 | - </thead> | |
75 | - <tbody> | |
76 | - <tr @click="modal_1 = true"> | |
77 | - <td></td> | |
78 | - <td></td> | |
79 | - <td></td> | |
80 | - <td></td> | |
81 | - <td></td> | |
82 | - <td></td> | |
83 | - <td></td> | |
84 | - <td></td> | |
85 | - <td></td> | |
86 | - <td></td> | |
87 | - <td></td> | |
88 | - </tr> | |
89 | - </tbody> | |
90 | - </table> | |
91 | - <table class="mobile"> | |
92 | - <colgroup> | |
93 | - <col style="width: 10%" /> | |
94 | - <col style="width: 20%" /> | |
95 | - </colgroup> | |
96 | - <tbody> | |
97 | - <tr> | |
98 | - <th>No</th> | |
99 | - <td></td> | |
100 | - </tr> | |
101 | - <tr> | |
102 | - <th>장애 발생일시</th> | |
103 | - <td></td> | |
104 | - </tr> | |
105 | - <tr> | |
106 | - <th>시/도</th> | |
107 | - <td></td> | |
108 | - </tr> | |
109 | - <tr> | |
110 | - <th>시/군/구</th> | |
111 | - <td></td> | |
112 | - </tr> | |
113 | - <tr> | |
114 | - <th>행정동</th> | |
115 | - <td></td> | |
116 | - </tr> | |
117 | - <tr> | |
118 | - <th>교차로</th> | |
119 | - <td></td> | |
120 | - </tr> | |
121 | - <tr> | |
122 | - <th>횡단보도명</th> | |
123 | - <td></td> | |
124 | - </tr> | |
125 | - <tr> | |
126 | - <th>장비명</th> | |
127 | - <td></td> | |
128 | - </tr> | |
129 | - <tr> | |
130 | - <th>장애명</th> | |
131 | - <td></td> | |
132 | - </tr> | |
133 | - <tr> | |
134 | - <th>복구여부</th> | |
135 | - <td></td> | |
136 | - </tr> | |
137 | - <tr> | |
138 | - <th>복구시간</th> | |
139 | - <td></td> | |
140 | - </tr> | |
141 | - </tbody> | |
142 | - </table> | |
143 | - <div class="modal-wrap" v-if="modal_1 == true"> | |
144 | - <div class="modal-bg"></div> | |
145 | - <div class="modal"> | |
146 | - <h2 class="flex"> | |
147 | - 장애발생 상세정보 | |
148 | - <button type="button" class="gray-btn" @click="modal_1 = false"> | |
149 | - <img src="../../../resources/images/close.png" alt="" /> | |
150 | - </button> | |
151 | - </h2> | |
152 | - <div class="modalmain"> | |
153 | - <h3>영재어린이집(서측)</h3> | |
154 | - <h4>동쪽횡단보도</h4> | |
155 | - <table> | |
156 | - <colgroup> | |
157 | - <col style="width: 50%" /> | |
158 | - <col style="width: 50%" /> | |
159 | - </colgroup> | |
160 | - <tbody> | |
161 | - <tr> | |
162 | - <td>발생일시</td> | |
163 | - <td></td> | |
164 | - </tr> | |
165 | - <tr> | |
166 | - <td>장비명</td> | |
167 | - <td></td> | |
168 | - </tr> | |
169 | - <tr> | |
170 | - <td>장애명</td> | |
171 | - <td></td> | |
172 | - </tr> | |
173 | - <tr> | |
174 | - <td>복구여부</td> | |
175 | - <td></td> | |
176 | - </tr> | |
177 | - <tr> | |
178 | - <td>복구상태</td> | |
179 | - <td></td> | |
180 | - </tr> | |
181 | - </tbody> | |
182 | - </table> | |
183 | - <h4 style="margin-top: 2rem">횡단보도 유지보수 담당자 정보</h4> | |
184 | - <table> | |
185 | - <colgroup> | |
186 | - <col style="width: 50%" /> | |
187 | - <col style="width: 50%" /> | |
188 | - </colgroup> | |
189 | - <tbody> | |
190 | - <tr> | |
191 | - <td>이름</td> | |
192 | - <td></td> | |
193 | - </tr> | |
194 | - <tr> | |
195 | - <td>이메일</td> | |
196 | - <td></td> | |
197 | - </tr> | |
198 | - <tr> | |
199 | - <td>소속정보</td> | |
200 | - <td></td> | |
201 | - </tr> | |
202 | - </tbody> | |
203 | - </table> | |
204 | - </div> | |
205 | - </div> | |
206 | - </div> | |
207 | - </div> | |
208 | - <div class="bottom-wrap"> | |
209 | - <div class="pg-wrap"> | |
210 | - <a href="#" class="pg-item prev">◀</a> | |
211 | - <a href="#" class="pg-item active">1</a> | |
212 | - <a href="#" class="pg-item">2</a> | |
213 | - <a href="#" class="pg-item">3</a> | |
214 | - <a href="#" class="pg-item">4</a> | |
215 | - <a href="#" class="pg-item">5</a> | |
216 | - <a href="#" class="pg-item next">▶</a> | |
217 | - </div> | |
218 | - <div class="btn-wrap"> | |
219 | - <router-link to="/UserManagement.page"> | |
220 | - <span class="btn-2 green-btn">Excel로 저장</span> | |
221 | - </router-link> | |
222 | - </div> | |
223 | - </div> | |
224 | - </div> | |
225 | - </div> | |
226 | -</template> | |
227 | - | |
228 | -<script> | |
229 | -import Modal from "../../component/Modal.vue"; | |
230 | - | |
231 | -export default { | |
232 | - data() { | |
233 | - return { | |
234 | - modal_1: false, | |
235 | - }; | |
236 | - }, | |
237 | - methods: {}, | |
238 | - watch: {}, | |
239 | - computed: { | |
240 | - Modal: Modal, | |
241 | - }, | |
242 | - mounted() { | |
243 | - console.log("Main4 mounted"); | |
244 | - }, | |
245 | -}; | |
246 | -</script> | |
247 | - | |
248 | -<style scoped> | |
249 | -@media all and (max-width: 479px) { | |
250 | - .local select { width: 8.7rem; | |
251 | - } | |
252 | - .date{margin: 0 0 1rem 0; margin-right: 0rem !important;} | |
253 | - | |
254 | -} | |
255 | -.mobile{display: none;} | |
256 | -label { | |
257 | - width: max-content; | |
258 | -} | |
259 | -select { | |
260 | - width: 15rem; | |
261 | -} | |
262 | -.modal { | |
263 | - width: max-content; | |
264 | -} | |
265 | -.modalmain { | |
266 | - padding: 1rem; | |
267 | -} | |
268 | -.modalmain table tbody tr:nth-child(odd) { | |
269 | - background: #f7f6f6; | |
270 | -} | |
271 | -.modalmain table tbody tr:nth-child(even) { | |
272 | - background: #ffffff; | |
273 | -} | |
274 | -.modalmain table td { | |
275 | - border: 1px solid #eee; | |
276 | -} | |
277 | -.modal h2 { | |
278 | - background: #e5e5dd; | |
279 | - font-size: 2rem; | |
280 | - padding: 1rem; | |
281 | -} | |
282 | -.modal h3 { | |
283 | - font-size: 1.8rem; | |
284 | - border-bottom: 1px solid #eee; | |
285 | - padding: 1rem 0 0.2rem 0; | |
286 | -} | |
287 | -.modal h4 { | |
288 | - font-size: 1.6rem; | |
289 | - font-weight: 100; | |
290 | - padding: 0.2rem 0 1rem 0; | |
291 | -} | |
292 | -.modal button { | |
293 | - border: 0; | |
294 | - background: none; | |
295 | - height: 30px; | |
296 | - padding: 0 0 0 50rem; | |
297 | - cursor: pointer; | |
298 | -} | |
299 | -.modal button img { | |
300 | - width: 25px; | |
301 | -} | |
302 | -.txt-point { | |
303 | - color: #333; | |
304 | -} | |
305 | -.wrap { | |
306 | - width: 155rem; | |
307 | - margin: 100px auto; | |
308 | -} | |
309 | - | |
310 | -.search-wrap { | |
311 | - margin-bottom: 30px; | |
312 | - background: #f7f6f6; | |
313 | - padding: 1rem; | |
314 | -} | |
315 | - | |
316 | -.search-wrap input, | |
317 | -.search-wrap select { | |
318 | - height: 22.5px; | |
319 | - border-radius: 3px; | |
320 | - border: 1px solid #949292; | |
321 | -} | |
322 | - | |
323 | -.float-right { | |
324 | - float: right; | |
325 | -} | |
326 | - | |
327 | -.clear-fix::after { | |
328 | - content: ""; | |
329 | - display: block; | |
330 | - clear: both; | |
331 | -} | |
332 | - | |
333 | -.search-wrap .float-right form > *:not(:last-child) { | |
334 | - margin-right: 1rem; | |
335 | -} | |
336 | - | |
337 | -table { | |
338 | - width: 100%; | |
339 | - text-align: center; | |
340 | - border-collapse: collapse; | |
341 | -} | |
342 | - | |
343 | -th, | |
344 | -td { | |
345 | - border-left: none; | |
346 | - border-right: none; | |
347 | -} | |
348 | - | |
349 | -table th { | |
350 | - padding: 15px 0; | |
351 | - color: #fff; | |
352 | - background-color: #13833b; | |
353 | -} | |
354 | - | |
355 | -table td { | |
356 | - padding: 10px 0; | |
357 | - border-bottom: 1px solid #e5e5dd; | |
358 | -} | |
359 | - | |
360 | -table tr:nth-child(odd) { | |
361 | - background-color: #f7f6f6; | |
362 | -} | |
363 | - | |
364 | -table tr:nth-child(even) { | |
365 | - background-color: #fdfdf2; | |
366 | -} | |
367 | - | |
368 | -.bottom-wrap { | |
369 | - position: relative; | |
370 | - padding: 1rem 0; | |
371 | -} | |
372 | - | |
373 | -.btn-2 { | |
374 | - display: inline-block; | |
375 | - padding: 0.3rem 2rem; | |
376 | - font-size: 13.333px; | |
377 | -} | |
378 | - | |
379 | -.pg-wrap { | |
380 | - text-align: center; | |
381 | -} | |
382 | - | |
383 | -.pg-item { | |
384 | - display: inline-block; | |
385 | - padding: 10px; | |
386 | - color: #949292; | |
387 | -} | |
388 | - | |
389 | -.pg-item.prev, | |
390 | -.pg-item.next, | |
391 | -.pg-item.active { | |
392 | - color: #13833b; | |
393 | -} | |
394 | - | |
395 | -.btn-wrap { | |
396 | - position: absolute; | |
397 | - right: 0; | |
398 | - top: 1.5em; | |
399 | - z-index: 10; | |
400 | -} | |
401 | - | |
402 | -.btn-wrap button { | |
403 | - cursor: pointer; | |
404 | -} | |
405 | -</style> |
--- client/views/pages/RealtimeStatus/RealtimeStatus.vue
... | ... | @@ -1,443 +0,0 @@ |
1 | -<template> | |
2 | - <div class="flex"> | |
3 | - <button @click="toggleSlide" class="toggle">{{ slideText }}</button> | |
4 | - <div :class="['slide-content left', { active: showSlide }]"> | |
5 | - <div class="wrap flex-between"> | |
6 | - <!-- <div class="iconlist"> | |
7 | - <ul> | |
8 | - <li v-for="item in items" :key="item.id" :class="{ active: item.isActive }" @click="toggleActive(item)"> | |
9 | - <div></div> | |
10 | - <p>{{ item.name }}</p> | |
11 | - </li> | |
12 | - </ul> | |
13 | - </div> --> | |
14 | - <div class="search"> | |
15 | - <h2>지역설정</h2> | |
16 | - <div class="box"> | |
17 | - <DongSelectList @setDongCd="setDongCd" :crslk_azHiddenCk=true :open_layers="this.$refs.open_layers"></DongSelectList> | |
18 | - </div> | |
19 | - <h2>조건설정</h2> | |
20 | - <div class="box"> | |
21 | - <div class="flex-between m-b"> | |
22 | - <input type="checkbox" v-model="condition['wtrms']"><label for="">무단횡단</label> | |
23 | - <input type="checkbox" v-model="condition['signExtn']" /><label for="">신호연장</label> | |
24 | - <input type="checkbox" v-model="condition['rittrnVhcle']" /><label for="">신호위반</label> | |
25 | - <input type="checkbox" v-model="condition['eqpmnTrobl']" /><label for="">장애발생</label> | |
26 | - </div> | |
27 | - <div class="flex-between m-b"> | |
28 | - <label for="date-input">일자</label> | |
29 | - <input id="date-input" type="date" v-model="condition['start_date']" :picker-options="startDateOptions" /> ~ | |
30 | - <input id="date-input" type="date" v-model="condition['end_date']" :picker-options="endDateOptions" /> | |
31 | - </div> | |
32 | - <div class="flex-between m-b"> | |
33 | - <label for="time-input">시간대</label> | |
34 | - <input id="time-input" type="time" v-model="condition['start_time']" />~<input id="time-input" type="time" | |
35 | - v-model="condition['end_time']" /> | |
36 | - </div> | |
37 | - <button class="btn-l green-btn" @click="statusSearch" style="padding: 0.5rem 0"> | |
38 | - 검색 | |
39 | - </button> | |
40 | - </div> | |
41 | - <h2>지역설정</h2> | |
42 | - <div class="box bg-white tab-buttons"> | |
43 | - <div class="btn_set flex-center"> | |
44 | - <button class="m-r" v-for="tab in tabs" :key="tab.id" :class="{ active: activeTab === tab.id }" @click="changeTab(tab.id)"> | |
45 | - {{ tab.title }} | |
46 | - </button> | |
47 | - </div> | |
48 | - <div class="tab-content" v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id"> | |
49 | - <ul v-show="tab.content1"> | |
50 | - <li> | |
51 | - <p class="m-b">발생일시: 2023-05-04 14:27</p> | |
52 | - <p class="m-b">상황명: 무단횡단</p> | |
53 | - <p class="">발생장소: 영재어린이집(서측) 동쪽횡단보도</p> | |
54 | - </li> | |
55 | - </ul> | |
56 | - <ul v-show="tab.content2"> | |
57 | - <li> | |
58 | - <p class="m-b">발생일시: 2023-05-04 14:27</p> | |
59 | - <p class="m-b">장애명: CPU 사용 90% 이상</p> | |
60 | - <p class="m-b">발생장소: 영재어린이집(서측) 동쪽횡단보도</p> | |
61 | - <p class="m-b">담당자: 김담당</p> | |
62 | - <p class="m-b">연락처: 010-1234-5678</p> | |
63 | - <p class="">복구여부: 미복구</p> | |
64 | - <!-- <div class="flex-end"><button>확인</button></div> --> | |
65 | - </li> | |
66 | - </ul> | |
67 | - </div> | |
68 | - </div> | |
69 | - </div> | |
70 | - </div> | |
71 | - </div> | |
72 | - <div class="right"> | |
73 | - <div class="top"> | |
74 | - <ul class="flex-end"> | |
75 | - <li> | |
76 | - <p class="flex-center"> | |
77 | - <img | |
78 | - class="m-r" | |
79 | - src="../../../resources/images/icon/scumulativenumberofpedestrians.png" | |
80 | - alt | |
81 | - />금일 보행자 | |
82 | - </p> | |
83 | - <h3>명</h3> | |
84 | - </li> | |
85 | - <li> | |
86 | - <p class="flex-center"> | |
87 | - <img | |
88 | - class="m-r" | |
89 | - src="../../../resources/images/icon/scumulativenumberofpedestrians.png" | |
90 | - alt | |
91 | - />금일 무단횡단 발생 | |
92 | - </p> | |
93 | - <h3>회</h3> | |
94 | - </li> | |
95 | - <li> | |
96 | - <p class="flex-center"> | |
97 | - <img | |
98 | - class="m-r" | |
99 | - src="../../../resources/images/icon/Numberofsignalextensionstoday.png" | |
100 | - alt | |
101 | - />금일 신호연장 발생 | |
102 | - </p> | |
103 | - <h3>회</h3> | |
104 | - </li> | |
105 | - <li> | |
106 | - <p class="flex-center"> | |
107 | - <img | |
108 | - class="m-r" | |
109 | - src="../../../resources/images/icon/Numberofsignalextensionstoday.png" | |
110 | - alt | |
111 | - />금일 신호연장 시간 | |
112 | - </p> | |
113 | - <h3>초</h3> | |
114 | - </li> | |
115 | - <li> | |
116 | - <p class="flex-center"> | |
117 | - <img | |
118 | - class="m-r" | |
119 | - src="../../../resources/images/icon/Numberofsignalviolationstoday.png" | |
120 | - alt | |
121 | - />금일 차량 신호위반 발생 | |
122 | - </p> | |
123 | - <h3>회</h3> | |
124 | - </li> | |
125 | - <li> | |
126 | - <p class="flex-center"> | |
127 | - <img | |
128 | - class="m-r" | |
129 | - src="../../../resources/images/icon/Numberofsignalviolationstoday.png" | |
130 | - alt | |
131 | - />금일 장애 발생 | |
132 | - </p> | |
133 | - <h3>회</h3> | |
134 | - </li> | |
135 | - </ul> | |
136 | - </div> | |
137 | - <div> | |
138 | - <OpenLayers ref="open_layers" /> | |
139 | - </div> | |
140 | - </div> | |
141 | - <div class="chart"> | |
142 | - <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2> | |
143 | - <div class=""></div> | |
144 | - <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2> | |
145 | - <div class=""></div> | |
146 | - <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2> | |
147 | - <div class=""></div> | |
148 | - <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2> | |
149 | - <div class=""></div> | |
150 | - </div> | |
151 | - </div> | |
152 | -</template> | |
153 | -<script> | |
154 | -import OpenLayers from "../../component/OpenLayers.vue"; | |
155 | -import { | |
156 | - vworldBaseLayer, | |
157 | - vworldGrayLayer, | |
158 | - vworldMidnightLayer, | |
159 | - vworldHybridLayer, | |
160 | - vworldSatelliteLayer, | |
161 | -} from "../../component/OpenLayersMap.vue"; | |
162 | -import { baseStyles } from '../../component/OpenLayersStyle.vue'; | |
163 | -import axios from "axios"; | |
164 | -import DongSelectList from '../../component/dongSelectList.vue'; | |
165 | -export default { | |
166 | - data() { | |
167 | - return { | |
168 | - showSlide: false, | |
169 | - slideText: '검색하기', | |
170 | - address: {}, | |
171 | - //조건설정 | |
172 | - condition: { | |
173 | - //체크박스 | |
174 | - signExtn: false, | |
175 | - wtrms: false, | |
176 | - rittrnVhcle: false, | |
177 | - eqpmnTrobl: false, | |
178 | - //일자 | |
179 | - start_date: null, | |
180 | - end_date: null, | |
181 | - //시간대 | |
182 | - start_time: null, | |
183 | - end_time: null, | |
184 | - }, | |
185 | - //달력에서 범위 설정 해주기 위해 (미완) -:picker-options- | |
186 | - startDateOptions: { | |
187 | - disabledDate: this.disabledStDate | |
188 | - }, | |
189 | - endDateOptions: { | |
190 | - disabledDate: this.disabledEdDate | |
191 | - }, | |
192 | - ck : true, | |
193 | - tabs: [ | |
194 | - { | |
195 | - id: 1, | |
196 | - title: "상황발생현황", | |
197 | - content1: "This is the content for Tab 1", | |
198 | - }, | |
199 | - { | |
200 | - id: 2, | |
201 | - title: "장애발생현황", | |
202 | - content2: "This is the content for Tab 2", | |
203 | - }, | |
204 | - ], | |
205 | - activeTab: 1, | |
206 | - items: [ | |
207 | - { id: 1, name: "무단횡단", isActive: true }, | |
208 | - { id: 2, name: "신호연장", isActive: false }, | |
209 | - { id: 3, name: "우회전 차량", isActive: false }, | |
210 | - { id: 4, name: "장애발생", isActive: false }, | |
211 | - ], | |
212 | - }; | |
213 | - }, | |
214 | - components: { | |
215 | - OpenLayers: OpenLayers, | |
216 | - DongSelectList: DongSelectList, | |
217 | - }, | |
218 | - methods: { | |
219 | - toggleSlide() { | |
220 | - if (this.showSlide) { | |
221 | - this.slideText = "검색하기"; | |
222 | - } else { | |
223 | - this.slideText = "창닫기"; | |
224 | - } | |
225 | - this.showSlide = !this.showSlide; | |
226 | - }, | |
227 | - //지역 및 조건 설정 안에 있는 횡단보도의 금일 보행자 무단횡단 신호연장 신호위반 장애발생 위치와 횟수 | |
228 | - | |
229 | - | |
230 | - //지역 및 조건 설정 안에 있는 횡단보도의 위치와 횟수의 합 | |
231 | - | |
232 | - changeTab(tabId) { | |
233 | - this.activeTab = tabId; | |
234 | - }, | |
235 | - toggleActive(item) { | |
236 | - for (var i = 0; i < 4; i++) { | |
237 | - this.items[i].isActive = false; | |
238 | - } | |
239 | - item.isActive = !item.isActive; | |
240 | - }, | |
241 | - // disabledStDate(date){ | |
242 | - // date = moment(String(date)).format('YYYYMMDD') | |
243 | - // return date > moment().format('YYYYMMDD') || date < moment().add(-1, 'years').format('YYYYMMDD') | |
244 | - // }, | |
245 | - disabledEdDate(date) { | |
246 | - return date < this.condition.start_date | |
247 | - }, | |
248 | - statusSearch: function () { | |
249 | - console.log("statusSearch this.address : ", this.address); | |
250 | - //지도 영역 수정 | |
251 | - if(this.address.node_id==null){ | |
252 | - this.$refs.open_layers.removeLayerAll(); | |
253 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,this.address.dong_cd); | |
254 | - this.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json', 'realtimeStatusMap', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd); | |
255 | - } | |
256 | - else{ | |
257 | - this.$refs.open_layers.removeLayerAll(); | |
258 | - // ,this.address.zoomLevel | |
259 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer,this.address.dong_cd, this.address.node_id); | |
260 | - | |
261 | - // this.$refs.open_layers.addVectorLayerByUrl('/node/getNodeGeoJson.json', 'realtimeStatusMap', 'EPSG:5181', baseStyles['MultiPolygon'], 'MultiPolygon', this.address.dong_cd, this.address.node_id); | |
262 | - } | |
263 | - // this.$refs.open_layers.addClusterLayer('/common/getDongsGeoJson.json', 'realtimeStatusMap', 'EPSG:5181', '', '', this.address.dong_cd); | |
264 | - // this.situationOccurrenceStatusSearch(); | |
265 | - | |
266 | - }, | |
267 | - | |
268 | - //상황 발행 현황 검색 | |
269 | - situationOccurrenceStatusSearch: function () { | |
270 | - //검색 데이터 | |
271 | - const vm = this; | |
272 | - axios({ | |
273 | - url: '/statusControl/statusSearch.json', | |
274 | - method: 'post', | |
275 | - headers: { | |
276 | - 'Content-Type': "application/json; charset=UTF-8", | |
277 | - }, | |
278 | - data: { "address": vm.address, "condition": vm.condition } | |
279 | - }).then(function (response) { | |
280 | - console.log("statusSearch - response : ", response.data); | |
281 | - // vm.nodeList = response.data; | |
282 | - }).catch(function (error) { | |
283 | - console.log("statusSearch - error : ", error); | |
284 | - }); | |
285 | - | |
286 | - }, | |
287 | - | |
288 | - //DongSelectList에서 dong_cd 받아오기 | |
289 | - setDongCd(value) { | |
290 | - console.log("value : ", value); | |
291 | - this.address = value; | |
292 | - } | |
293 | - }, | |
294 | - watch: {}, | |
295 | - computed: {}, | |
296 | - mounted() { | |
297 | - console.log("Main2 mounted "); | |
298 | - this.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
299 | - | |
300 | - // this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson.json','testMap','EPSG:4326', baseStyles['labelStyle'],'label'); | |
301 | - }, | |
302 | -}; | |
303 | -</script> | |
304 | - | |
305 | -<style scoped> | |
306 | -@media all and (max-width: 479px) { | |
307 | - | |
308 | - .top h3 {font-size: 15px !important;} | |
309 | - .top p { | |
310 | - padding-right: 1rem; | |
311 | -} | |
312 | - .chart{width: -webkit-fill-available !important;} | |
313 | - | |
314 | - .top { | |
315 | - overflow: scroll; | |
316 | - } | |
317 | - .top ul { | |
318 | - width: 137rem; | |
319 | - overflow: hidden; | |
320 | - justify-content: space-between !important; | |
321 | - padding: 2rem 1rem !important; | |
322 | - } | |
323 | - .top li { | |
324 | - display: flex; | |
325 | - align-items: center; | |
326 | - } | |
327 | - .search { | |
328 | - width: inherit; | |
329 | - } | |
330 | - .toggle { | |
331 | - color: #fff; | |
332 | - font-weight: bold; | |
333 | - background: #13833b; | |
334 | - display: block !important; | |
335 | - position: absolute; | |
336 | - z-index: 150; | |
337 | - top: 7.2rem; | |
338 | - right: 1rem; | |
339 | - } | |
340 | - .wrap { | |
341 | - height: auto !important; | |
342 | - width: inherit; | |
343 | - margin: 0 !important; | |
344 | - } | |
345 | - .slide-content { | |
346 | - position: absolute; | |
347 | - z-index: 97; | |
348 | - top: 6rem; | |
349 | - /* left: -31rem; */ | |
350 | - width: -webkit-fill-available; | |
351 | - height: 100vh; | |
352 | - background-color: #f0f0f0; | |
353 | - transition: transform 0.3s ease; | |
354 | - transform: translateX(100%); | |
355 | - } | |
356 | - | |
357 | - .slide-content.active { | |
358 | - transform: translateX(0); | |
359 | - } | |
360 | -} | |
361 | -.toggle { | |
362 | - display: none; | |
363 | -} | |
364 | -.chart div { | |
365 | - min-height: 13rem; | |
366 | -} | |
367 | - | |
368 | -.chart { | |
369 | - width: 600px; | |
370 | -} | |
371 | - | |
372 | -.search .box ul li { | |
373 | - text-align: left; | |
374 | -} | |
375 | - | |
376 | -.btn_set { | |
377 | - position: relative; | |
378 | - border-bottom: 1px solid #e5e3e3; | |
379 | - padding: 0 0 1rem 0; | |
380 | -} | |
381 | - | |
382 | -.btn_set div { | |
383 | - position: absolute; | |
384 | - top: 40px; | |
385 | - width: 313px; | |
386 | - height: 380px; | |
387 | - background: #fff; | |
388 | - padding: 1rem; | |
389 | -} | |
390 | - | |
391 | -.bg-white { | |
392 | - min-height: 41.6rem; | |
393 | - max-height: 41.6rem; | |
394 | - overflow: scroll; | |
395 | - overflow-x: hidden; | |
396 | -} | |
397 | - | |
398 | -.bg-white::-webkit-scrollbar-thumb { | |
399 | - background-color: #fff; | |
400 | -} | |
401 | - | |
402 | -h2 { | |
403 | - background: #50ba8a; | |
404 | - text-align: center; | |
405 | - color: #fff; | |
406 | - padding: 1.6rem 0; | |
407 | -} | |
408 | - | |
409 | -.top p { | |
410 | - font-size: 15px; | |
411 | -} | |
412 | - | |
413 | -.top ul { | |
414 | - padding: 1rem 0; | |
415 | - justify-content: space-evenly; | |
416 | -} | |
417 | - | |
418 | -.top li { | |
419 | - text-align: center; | |
420 | -} | |
421 | - | |
422 | -.top li img { | |
423 | - width: 20px; | |
424 | -} | |
425 | - | |
426 | -.top h3 { | |
427 | - font-size: 20px; | |
428 | -} | |
429 | - | |
430 | -.wrap { | |
431 | - z-index: 100; | |
432 | - top: 0; | |
433 | - height: 865px; | |
434 | -} | |
435 | - | |
436 | -.left { | |
437 | - background: #fff; | |
438 | -} | |
439 | - | |
440 | -.right { | |
441 | - width: -webkit-fill-available; | |
442 | -} | |
443 | -</style> |
--- client/views/pages/RealtimeStatus/SituationSearch.vue
... | ... | @@ -1,295 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div class="board-wrap"> | |
4 | - <div class="search-wrap"> | |
5 | - <div class="flex-between mb-block"> | |
6 | - <div class="flex gap m-b date"> | |
7 | - <label>날짜를 선택해주세요.</label> | |
8 | - <input type="date" name="" id="" /> | |
9 | - <span>~</span> | |
10 | - <input type="date" name="" id="" /> | |
11 | - </div> | |
12 | - <div class="flex gap m-b"> | |
13 | - <label>시/도</label> | |
14 | - <select name="" id=""> | |
15 | - <option value="">대구광역시</option> | |
16 | - </select> | |
17 | - <label>시/군/구</label> | |
18 | - <select name="" id=""> | |
19 | - <option value="">서구</option> | |
20 | - </select> | |
21 | - <label>행정동</label> | |
22 | - <select name="" id=""> | |
23 | - <option value="">전체</option> | |
24 | - </select> | |
25 | - </div> | |
26 | - <div class="flex gap m-b situ"> | |
27 | - <label>상황명</label> | |
28 | - <select name="" id=""> | |
29 | - <option value="">전체</option> | |
30 | - <option value="">무단횡단</option> | |
31 | - <option value="">신호연장</option> | |
32 | - <option value="">신호위반</option> | |
33 | - </select> | |
34 | - <input type="text" /> | |
35 | - <button type="button" class="btn-2 green-btn">조회</button> | |
36 | - </div> | |
37 | - </div> | |
38 | - </div> | |
39 | - <div> | |
40 | - <table class="pc"> | |
41 | - <!-- <colgroup> | |
42 | - <col style="width: 10%;"> | |
43 | - <col style="width: 20%;"> | |
44 | - <col style="width: 20%;"> | |
45 | - <col style="width: 30%;"> | |
46 | - <col style="width: 20%;"> | |
47 | - </colgroup> --> | |
48 | - <thead> | |
49 | - <tr> | |
50 | - <th>No</th> | |
51 | - <th>발생일시</th> | |
52 | - <th>시/도</th> | |
53 | - <th>시/군/구</th> | |
54 | - <th>행정동</th> | |
55 | - <th>상황명</th> | |
56 | - </tr> | |
57 | - </thead> | |
58 | - <tbody> | |
59 | - <tr @click="modal_1 = true"> | |
60 | - <td></td> | |
61 | - <td></td> | |
62 | - <td></td> | |
63 | - <td></td> | |
64 | - <td></td> | |
65 | - <td></td> | |
66 | - </tr> | |
67 | - </tbody> | |
68 | - </table> | |
69 | - <table class="mobile"> | |
70 | - <colgroup> | |
71 | - <col style="width: 10%" /> | |
72 | - <col style="width: 20%" /> | |
73 | - </colgroup> | |
74 | - <tbody> | |
75 | - <tr> | |
76 | - <th>No</th> | |
77 | - <td></td> | |
78 | - </tr> | |
79 | - <tr> | |
80 | - <th>발생일시</th> | |
81 | - <td></td> | |
82 | - </tr> | |
83 | - <tr> | |
84 | - <th>시/도</th> | |
85 | - <td></td> | |
86 | - </tr> | |
87 | - <tr> | |
88 | - <th>시/군/구</th> | |
89 | - <td></td> | |
90 | - </tr> | |
91 | - <tr> | |
92 | - <th>행정동</th> | |
93 | - <td></td> | |
94 | - </tr> | |
95 | - <tr> | |
96 | - <th>상황명</th> | |
97 | - <td></td> | |
98 | - </tr> | |
99 | - </tbody> | |
100 | - </table> | |
101 | - <div class="modal-wrap" v-if="modal_1 == true"> | |
102 | - <div class="modal-bg"></div> | |
103 | - <div class="modal"> | |
104 | - <h2 class="flex">상황발생 상세정보 <button type="button" class="gray-btn" @click="modal_1 = false"> | |
105 | - <img src="../../../resources/images/close.png" alt=""> | |
106 | - </button></h2> | |
107 | - <div class="modalmain"> | |
108 | - <h3>영재어린이집(서측)</h3> | |
109 | - <h4>동쪽횡단보도</h4> | |
110 | - <table> | |
111 | - <colgroup> | |
112 | - <col style="width: 50%;"> | |
113 | - <col style="width: 50%;"> | |
114 | - </colgroup> | |
115 | - <tbody> | |
116 | - <tr @click="modal_1 = true"> | |
117 | - <td>발생일시</td> | |
118 | - <td>2023-05-03 14:48</td> | |
119 | - </tr> | |
120 | - <tr @click="modal_1 = true"> | |
121 | - <td>상황명</td> | |
122 | - <td>무단횡단</td> | |
123 | - </tr> | |
124 | - <tr @click="modal_1 = true"> | |
125 | - <td>신호상태</td> | |
126 | - <td>적색불</td> | |
127 | - </tr> | |
128 | - </tbody> | |
129 | - </table> | |
130 | - </div> | |
131 | - </div> | |
132 | - </div> | |
133 | - </div> | |
134 | - <div class="bottom-wrap"> | |
135 | - <div class="pg-wrap"> | |
136 | - <a href="#" class="pg-item prev">◀</a> | |
137 | - <a href="#" class="pg-item active">1</a> | |
138 | - <a href="#" class="pg-item">2</a> | |
139 | - <a href="#" class="pg-item">3</a> | |
140 | - <a href="#" class="pg-item">4</a> | |
141 | - <a href="#" class="pg-item">5</a> | |
142 | - <a href="#" class="pg-item next">▶</a> | |
143 | - </div> | |
144 | - <div class="btn-wrap"> | |
145 | - <router-link to="/UserManagement.page"> | |
146 | - <span class="btn-2 green-btn">Excel로 저장</span> | |
147 | - </router-link> | |
148 | - </div> | |
149 | - </div> | |
150 | - </div> | |
151 | - </div> | |
152 | -</template> | |
153 | - | |
154 | -<script> | |
155 | -import Modal from "../../component/Modal.vue"; | |
156 | - | |
157 | -export default { | |
158 | - data() { | |
159 | - return { | |
160 | - modal_1: false, | |
161 | - }; | |
162 | - }, | |
163 | - methods: { | |
164 | - | |
165 | - }, | |
166 | - watch: {}, | |
167 | - computed: { | |
168 | - Modal: Modal, | |
169 | - }, | |
170 | - mounted() { | |
171 | - console.log("Main4 mounted"); | |
172 | - }, | |
173 | -}; | |
174 | -</script> | |
175 | - | |
176 | -<style scoped> | |
177 | -@media all and (max-width: 479px) { | |
178 | - .situ input{width: 13rem;} | |
179 | - .date input{width: 10rem;} | |
180 | - | |
181 | -} | |
182 | -.mobile{display: none;} | |
183 | -.modal{width: max-content;} | |
184 | -.modalmain{ padding: 1rem;} | |
185 | -.modalmain table tbody tr:nth-child(odd){background: #f7f6f6;} | |
186 | -.modalmain table tbody tr:nth-child(even){background: #ffffff;} | |
187 | -.modalmain table td{border: 1px solid #eee;} | |
188 | -.modal h2{background: #e5e5dd; font-size: 2rem; padding: 1rem ;} | |
189 | -.modal h3{font-size: 1.8rem; border-bottom: 1px solid #eee; padding: 1rem 0 0.2rem 0;} | |
190 | -.modal h4{font-size: 1.6rem; font-weight: 100; padding: 0.2rem 0 1rem 0 ;} | |
191 | -.modal button{border: 0; background: none; height: 30px; | |
192 | - padding: 0 0 0 50rem; cursor: pointer;} | |
193 | -.modal button img{width: 25px;} | |
194 | -.txt-point { | |
195 | - color: #333; | |
196 | -} | |
197 | -.wrap { | |
198 | - width: 155rem; | |
199 | - margin: 100px auto; | |
200 | -} | |
201 | - | |
202 | -.search-wrap { | |
203 | - margin-bottom: 30px; | |
204 | -} | |
205 | - | |
206 | -.search-wrap input, | |
207 | -.search-wrap select { | |
208 | - height: 22.5px; | |
209 | - border-radius: 3px; | |
210 | - border: 1px solid #949292; | |
211 | -} | |
212 | - | |
213 | -.float-right { | |
214 | - float: right; | |
215 | -} | |
216 | - | |
217 | -.clear-fix::after { | |
218 | - content: ""; | |
219 | - display: block; | |
220 | - clear: both; | |
221 | -} | |
222 | - | |
223 | -.search-wrap .float-right form > *:not(:last-child) { | |
224 | - margin-right: 1rem; | |
225 | -} | |
226 | - | |
227 | -table { | |
228 | - width: 100%; | |
229 | - text-align: center; | |
230 | - border-collapse: collapse; | |
231 | -} | |
232 | - | |
233 | -th, | |
234 | -td { | |
235 | - border-left: none; | |
236 | - border-right: none; | |
237 | -} | |
238 | - | |
239 | -table th { | |
240 | - padding: 15px 0; | |
241 | - color: #fff; | |
242 | - background-color: #13833b; | |
243 | -} | |
244 | - | |
245 | -table td { | |
246 | - padding: 10px 0; | |
247 | - border-bottom: 1px solid #e5e5dd; | |
248 | -} | |
249 | - | |
250 | -table tr:nth-child(odd) { | |
251 | - background-color: #f7f6f6; | |
252 | -} | |
253 | - | |
254 | -table tr:nth-child(even) { | |
255 | - background-color: #fdfdf2; | |
256 | -} | |
257 | - | |
258 | -.bottom-wrap { | |
259 | - position: relative; | |
260 | - padding: 1rem 0; | |
261 | -} | |
262 | - | |
263 | -.btn-2 { | |
264 | - display: inline-block; | |
265 | - padding: 0.3rem 2rem; | |
266 | - font-size: 13.333px; | |
267 | -} | |
268 | - | |
269 | -.pg-wrap { | |
270 | - text-align: center; | |
271 | -} | |
272 | - | |
273 | -.pg-item { | |
274 | - display: inline-block; | |
275 | - padding: 10px; | |
276 | - color: #949292; | |
277 | -} | |
278 | - | |
279 | -.pg-item.prev, | |
280 | -.pg-item.next, | |
281 | -.pg-item.active { | |
282 | - color: #13833b; | |
283 | -} | |
284 | - | |
285 | -.btn-wrap { | |
286 | - position: absolute; | |
287 | - right: 0; | |
288 | - top: 1.5em; | |
289 | - z-index: 10; | |
290 | -} | |
291 | - | |
292 | -.btn-wrap button { | |
293 | - cursor: pointer; | |
294 | -} | |
295 | -</style> |
--- client/views/pages/SystemManagement/AccessRecord.vue
... | ... | @@ -1,331 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div class="tab-wrap"> | |
4 | - <ul> | |
5 | - <li> | |
6 | - <span class="tab" @click="userSelectListPage">사용자 관리</span> | |
7 | - </li> | |
8 | - <li> | |
9 | - <span class="tab active" @click="accessLogPage">접속기록 조회</span> | |
10 | - </li> | |
11 | - </ul> | |
12 | - </div> | |
13 | - <div class="board-wrap"> | |
14 | - <div> | |
15 | - <h2 class="page-title">접속기록 조회</h2> | |
16 | - </div> | |
17 | - <hr class="margin" /> | |
18 | - <div class="search-wrap clear-fix"> | |
19 | - <div class="float-right flex gap"> | |
20 | - <div class="flex gap m-b"> | |
21 | - <label>접속일자</label> | |
22 | - <input | |
23 | - type="date" | |
24 | - value-format="yyyymmdd" | |
25 | - v-model="userAccessListSearch.startDate" | |
26 | - /> | |
27 | - <span>~</span> | |
28 | - <input | |
29 | - type="date" | |
30 | - value-format="yyyymmdd" | |
31 | - v-model="userAccessListSearch.endDate" | |
32 | - /> | |
33 | - </div> | |
34 | - <div class="flex gap"> | |
35 | - <select v-model="userAccessListSearch.searchType"> | |
36 | - <option value="null" disabled>검색조건</option> | |
37 | - <option value="user_id">ID</option> | |
38 | - <option value="user_nm">이름</option> | |
39 | - </select> | |
40 | - <input | |
41 | - type="text" | |
42 | - placeholder="검색어를 입력 해주세요." | |
43 | - v-model="userAccessListSearch.searchText" | |
44 | - @keyup.enter="userAccessList" | |
45 | - /> | |
46 | - <button type="button" class="green-btn" @click="userAccessSelectList"> | |
47 | - 검색 | |
48 | - </button> | |
49 | - </div> | |
50 | - </div> | |
51 | - </div> | |
52 | - <div> | |
53 | - <table class="pc"> | |
54 | - <colgroup> | |
55 | - <col style="width: 5%" /> | |
56 | - <col style="width: 20%" /> | |
57 | - <col style="width: 15%" /> | |
58 | - <col style="width: 20%" /> | |
59 | - <col style="width: 20%" /> | |
60 | - <col style="width: 20%" /> | |
61 | - </colgroup> | |
62 | - <thead> | |
63 | - <tr> | |
64 | - <th>No</th> | |
65 | - <th>접속자 ID</th> | |
66 | - <th>접속자 이름</th> | |
67 | - <th>접속 일시</th> | |
68 | - <th>접속 IP</th> | |
69 | - <th>접속 타입</th> | |
70 | - </tr> | |
71 | - </thead> | |
72 | - <tbody> | |
73 | - <tr v-for="(item, idx) in userAccessList" :key="idx"> | |
74 | - <td data-title="NO">{{ idx + 1 }}</td> | |
75 | - <td data-title="접속ID">{{ item.user_id }}</td> | |
76 | - <td data-title="접속자이름">{{ item.user_nm }}</td> | |
77 | - <td data-title="접속일시">{{ yyyymmdd(item.cntn_dt) }}</td> | |
78 | - <td data-title="접속IP">{{ item.cntn_ip }}</td> | |
79 | - <td data-title="접속타입">{{ item.cntn_ty }}</td> | |
80 | - </tr> | |
81 | - </tbody> | |
82 | - </table> | |
83 | - <table class="mobile"> | |
84 | - <colgroup> | |
85 | - <col style="width: 10%" /> | |
86 | - <col style="width: 20%" /> | |
87 | - </colgroup> | |
88 | - <tbody> | |
89 | - <tr> | |
90 | - <th>No</th> | |
91 | - <td></td> | |
92 | - </tr> | |
93 | - <tr> | |
94 | - <th>접속자 ID</th> | |
95 | - <td></td> | |
96 | - </tr> | |
97 | - <tr> | |
98 | - <th>접속자 이름</th> | |
99 | - <td></td> | |
100 | - </tr> | |
101 | - <tr> | |
102 | - <th>접속 일시</th> | |
103 | - <td></td> | |
104 | - </tr> | |
105 | - <tr> | |
106 | - <th>접속 IP</th> | |
107 | - <td></td> | |
108 | - </tr> | |
109 | - <tr> | |
110 | - <th>접속 타입</th> | |
111 | - <td></td> | |
112 | - </tr> | |
113 | - </tbody> | |
114 | - </table> | |
115 | - </div> | |
116 | - <div class="bottom-wrap"> | |
117 | - <PaginationButton | |
118 | - v-model:currentPage="userAccessListSearch.currentPage" | |
119 | - :per-page="userAccessListSearch.perPage" | |
120 | - :total-count="userAccessCount" | |
121 | - :max-range="5" | |
122 | - :click="userAccessList" | |
123 | - /> | |
124 | - <div class="btn-wrap"> | |
125 | - <button type="button" class="green-btn">Excel로 저장</button> | |
126 | - </div> | |
127 | - </div> | |
128 | - </div> | |
129 | - </div> | |
130 | -</template> | |
131 | - | |
132 | -<script> | |
133 | -import axios from 'axios'; | |
134 | -import PaginationButton from '../../component/pagination/PaginationButton.vue'; | |
135 | -import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
136 | - | |
137 | -export default { | |
138 | - data: () => { | |
139 | - return { | |
140 | - userAccessListSearch: { | |
141 | - currentPage: 1, | |
142 | - perPage: 10, | |
143 | - searchType: null, | |
144 | - searchText: null, | |
145 | - startDate: null, | |
146 | - endDate: null, | |
147 | - }, | |
148 | - userAccessCount: 0, | |
149 | - userAccessList: [], | |
150 | - }; | |
151 | - }, | |
152 | - methods: { | |
153 | - //접속기록 목록 조회 | |
154 | - userAccessSelectList: function () { | |
155 | - const vm = this; | |
156 | - axios({ | |
157 | - url: "/user/userAccessLog.json", | |
158 | - method: "post", | |
159 | - herders: { | |
160 | - "Content-Type": "application/json; charset=UTF-8", | |
161 | - }, | |
162 | - data: vm.userAccessListSearch, | |
163 | - }) | |
164 | - .then(function (response) { | |
165 | - console.log("userAccessList - response : ", response.data); | |
166 | - vm.userAccessCount = response.data.userAccessCount; | |
167 | - vm.userAccessList = response.data.userAccessList; | |
168 | - }) | |
169 | - .catch(function (error) { | |
170 | - console.log("userAccessList - error : ", error); | |
171 | - alert("접속기록 목록 조회 오류, 관리자에게 문의해주세요."); | |
172 | - }); | |
173 | - }, | |
174 | - | |
175 | - //날짜 시,분,초 자르기 | |
176 | - yyyymmdd: function (date) { | |
177 | - return COMMON_UTIL.yyyymmdd(date); | |
178 | - }, | |
179 | - | |
180 | - //사용자 목록 페이지 이동 | |
181 | - userSelectListPage: function () { | |
182 | - this.$router.push({ path: "/UserManagement.page" }); | |
183 | - }, | |
184 | - | |
185 | - //접속기록조회 페이지 이동 | |
186 | - accessLogPage: function () { | |
187 | - this.$router.push({ path: "/AccessRecord.page" }); | |
188 | - }, | |
189 | - }, | |
190 | - watch: {}, | |
191 | - computed: {}, | |
192 | - components: { | |
193 | - PaginationButton: PaginationButton, | |
194 | - }, | |
195 | - mounted() { | |
196 | - console.log("Main4 mounted"); | |
197 | - this.userAccessSelectList(); | |
198 | - }, | |
199 | -}; | |
200 | -</script> | |
201 | - | |
202 | -<style scoped> | |
203 | -.mobile{display: none;} | |
204 | -.wrap { | |
205 | - width: 155rem; | |
206 | - margin: 100px auto; | |
207 | -} | |
208 | - | |
209 | -.tab-wrap { | |
210 | - margin-bottom: 30px; | |
211 | -} | |
212 | - | |
213 | -.tab-wrap ul { | |
214 | - display: flex; | |
215 | - gap: 2rem; | |
216 | -} | |
217 | - | |
218 | -.tab { | |
219 | - display: inline-block; | |
220 | - width: 20rem; | |
221 | - height: 3rem; | |
222 | - line-height: 3rem; | |
223 | - text-align: center; | |
224 | - border-radius: 5px; | |
225 | - background: #fff; | |
226 | - color: #949292; | |
227 | - border: 1px solid #949292; | |
228 | -} | |
229 | - | |
230 | -.tab.active { | |
231 | - background: #13833b; | |
232 | - color: #fff; | |
233 | - border-color: #13833b; | |
234 | -} | |
235 | - | |
236 | -.search-wrap { | |
237 | - margin-bottom: 30px; | |
238 | -} | |
239 | - | |
240 | -.search-wrap input, | |
241 | -.search-wrap select { | |
242 | - height: 22.5px; | |
243 | - border-radius: 3px; | |
244 | - border: 1px solid #949292; | |
245 | -} | |
246 | - | |
247 | -.float-left { | |
248 | - float: left; | |
249 | -} | |
250 | - | |
251 | -.float-right { | |
252 | - float: right; | |
253 | -} | |
254 | - | |
255 | -.clear-fix::after { | |
256 | - content: ""; | |
257 | - display: block; | |
258 | - clear: both; | |
259 | -} | |
260 | - | |
261 | -.search-wrap .float-right form > *:not(:last-child) { | |
262 | - margin-right: 1rem; | |
263 | -} | |
264 | - | |
265 | -h2.page-title { | |
266 | - font-size: 24px; | |
267 | -} | |
268 | - | |
269 | -hr.margin { | |
270 | - margin: 30px 0; | |
271 | -} | |
272 | - | |
273 | -table { | |
274 | - width: 100%; | |
275 | - text-align: center; | |
276 | - border-collapse: collapse; | |
277 | -} | |
278 | - | |
279 | -th, | |
280 | -td { | |
281 | - border-left: none; | |
282 | - border-right: none; | |
283 | -} | |
284 | - | |
285 | -table th { | |
286 | - padding: 15px 0; | |
287 | - color: #fff; | |
288 | - background-color: #13833b; | |
289 | -} | |
290 | - | |
291 | -table td { | |
292 | - padding: 10px 0; | |
293 | - border-bottom: 1px solid #e5e5dd; | |
294 | -} | |
295 | - | |
296 | -table tr:nth-child(odd) { | |
297 | - background-color: #f7f6f6; | |
298 | -} | |
299 | - | |
300 | -table tr:nth-child(even) { | |
301 | - background-color: #fdfdf2; | |
302 | -} | |
303 | - | |
304 | -.bottom-wrap { | |
305 | - position: relative; | |
306 | - padding: 1rem 0; | |
307 | -} | |
308 | - | |
309 | -.pg-wrap { | |
310 | - text-align: center; | |
311 | -} | |
312 | - | |
313 | -.pg-item { | |
314 | - display: inline-block; | |
315 | - padding: 10px; | |
316 | - color: #949292; | |
317 | -} | |
318 | - | |
319 | -.pg-item.prev, | |
320 | -.pg-item.next, | |
321 | -.pg-item.active { | |
322 | - color: #13833b; | |
323 | -} | |
324 | - | |
325 | -.btn-wrap { | |
326 | - position: absolute; | |
327 | - right: 0; | |
328 | - top: 1.5em; | |
329 | - z-index: 10; | |
330 | -} | |
331 | -</style> |
--- client/views/pages/SystemManagement/NodeManagement.vue
+++ client/views/pages/SystemManagement/ApiTokenManagement.vue
... | ... | @@ -37,7 +37,7 @@ |
37 | 37 |
</thead> |
38 | 38 |
<tbody> |
39 | 39 |
<tr v-for="(item, idx) in tokkenList" :key="idx" @click="nodeSelectOne(item)" v-bind:class="{'select_row' : (item.api_key == selectTokken.api_key) }" > |
40 |
- <td data-title="NO">{{ idx }}</td> |
|
40 |
+ <td data-title="NO">{{ pagenation.totalRow - ((pagenation.currentPage ) * pagenation.perPage) + ( pagenation.perPage - idx) }}</td> |
|
41 | 41 |
<td data-title="토큰">{{ item.api_key }}</td> |
42 | 42 |
<td data-title="사용자명">{{ item.user_nm }}</td> |
43 | 43 |
<td data-title="타입">{{ item.key_type }}</td> |
... | ... | @@ -217,7 +217,7 @@ |
217 | 217 |
}, |
218 | 218 |
|
219 | 219 |
//노드 상세 조회 |
220 |
- nodeSelectOne(nodeOne) { |
|
220 |
+ nodeSelectOne(nodeOne) { |
|
221 | 221 |
const vm = this; |
222 | 222 |
this.selectTokken = Object.assign({}, nodeOne); |
223 | 223 |
}, |
... | ... | @@ -313,7 +313,7 @@ |
313 | 313 |
|
314 | 314 |
.search-wrap input, |
315 | 315 |
.search-wrap select { |
316 |
- height: 22.5px; |
|
316 |
+ height: 22.5px; |
|
317 | 317 |
border-radius: 3px; |
318 | 318 |
border: 1px solid #949292; |
319 | 319 |
} |
... | ... | @@ -403,7 +403,7 @@ |
403 | 403 |
} |
404 | 404 |
|
405 | 405 |
table td { |
406 |
- padding: 10px; |
|
406 |
+ padding: 15px; |
|
407 | 407 |
border-bottom: 1px solid #e5e5dd; |
408 | 408 |
} |
409 | 409 |
|
--- client/views/pages/SystemManagement/ChargeManagement.vue
... | ... | @@ -1,334 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div class="board-wrap"> | |
4 | - <div> | |
5 | - <h2 class="page-title">횡단보도 유지보수 담당자 관리</h2> | |
6 | - </div> | |
7 | - <hr class="margin" /> | |
8 | - <div class="search-wrap clear-fix"> | |
9 | - <div class="float-right flex gap"> | |
10 | - <div class="flex gap date"> | |
11 | - <label>등록일자</label> | |
12 | - <input | |
13 | - type="date" | |
14 | - value-format="yyyyMMdd" | |
15 | - v-model="managerListSearch.startDate" | |
16 | - /> | |
17 | - <span> ~ </span> | |
18 | - <input | |
19 | - type="date" | |
20 | - value-format="yyyyMMdd" | |
21 | - v-model="managerListSearch.endDate" | |
22 | - /> | |
23 | - </div> | |
24 | - <div class="flex gap search"> | |
25 | - <select v-model="managerListSearch.searchType"> | |
26 | - <option value="null" disabled>검색조건</option> | |
27 | - <option value="mngr_nm">이름</option> | |
28 | - <option value="mngr_ogdp_info">소속정보</option> | |
29 | - </select> | |
30 | - <input | |
31 | - type="search" | |
32 | - placeholder="검색어를 입력 해주세요." | |
33 | - v-model="managerListSearch.searchText" | |
34 | - @keyup.enter="managerSelectList" | |
35 | - /> | |
36 | - <button class="btn-2 green-btn" @click="managerSelectList"> | |
37 | - 검색 | |
38 | - </button> | |
39 | - </div> | |
40 | - </div> | |
41 | - </div> | |
42 | - <div> | |
43 | - <table class="pc"> | |
44 | - <colgroup> | |
45 | - <col style="width: 15%" /> | |
46 | - <col style="width: 15%" /> | |
47 | - <col style="width: 25%" /> | |
48 | - <col style="width:15%" /> | |
49 | - <col style="width: 10%" /> | |
50 | - </colgroup> | |
51 | - <thead> | |
52 | - <tr> | |
53 | - <th>No</th> | |
54 | - <th>이름</th> | |
55 | - <th>전화번호</th> | |
56 | - <th>이메일</th> | |
57 | - <th>소속정보</th> | |
58 | - <th>등록일자</th> | |
59 | - </tr> | |
60 | - </thead> | |
61 | - <tbody> | |
62 | - <tr | |
63 | - v-for="(item, idx) in managerList" | |
64 | - :key="idx" | |
65 | - @click="managerSelectOnePage(item)" | |
66 | - > | |
67 | - <td data-title="NO">{{ managerIdx - idx }}</td> | |
68 | - <td data-title="이름">{{ item.mngr_nm }}</td> | |
69 | - <td data-title="전화번호">{{ HyphenMinus(item.mngr_telno) }}</td> | |
70 | - <td data-title="이메일">{{ item.mngr_eml }}</td> | |
71 | - <td data-title="소속정보">{{ item.mngr_ogdp_info }}</td> | |
72 | - <td data-title="등록일자">{{ yyyymmdd(item.reg_dt) }}</td> | |
73 | - </tr> | |
74 | - </tbody> | |
75 | - </table> | |
76 | - <table class="mobile"> | |
77 | - <colgroup> | |
78 | - <col style="width: 10%" /> | |
79 | - <col style="width: 20%" /> | |
80 | - </colgroup> | |
81 | - <tbody | |
82 | - v-for="(item, idx) in managerList" | |
83 | - :key="idx" | |
84 | - @click="managerSelectOnePage(item)" | |
85 | - > | |
86 | - <tr> | |
87 | - <th>No</th> | |
88 | - <td data-title="NO">{{ managerIdx - idx }}</td> | |
89 | - </tr> | |
90 | - <tr> | |
91 | - <th>이름</th> | |
92 | - <td data-title="이름">{{ item.mngr_nm }}</td> | |
93 | - </tr> | |
94 | - <tr> | |
95 | - <th>전화번호</th> | |
96 | - <td data-title="전화번호">{{ HyphenMinus(item.mngr_telno) }}</td> | |
97 | - </tr> | |
98 | - <tr> | |
99 | - <th>이메일</th> | |
100 | - <td data-title="이메일">{{ item.mngr_eml }}</td> | |
101 | - </tr> | |
102 | - <tr> | |
103 | - <th>소속정보</th> | |
104 | - <td data-title="소속정보"> | |
105 | - {{ item.mngr_ogdp_info }} | |
106 | - </td> | |
107 | - </tr> | |
108 | - <tr> | |
109 | - <th>등록일자</th> | |
110 | - <td data-titel="등록일자">{{ yyyymmdd(item.reg_dt) }}</td> | |
111 | - </tr> | |
112 | - | |
113 | - <hr class="margin2 m-b" /> | |
114 | - </tbody> | |
115 | - </table> | |
116 | - </div> | |
117 | - <div class="bottom-wrap"> | |
118 | - <PaginationButton | |
119 | - v-model:currentPage="managerListSearch.currentPage" | |
120 | - :per-page="managerListSearch.perPage" | |
121 | - :total-count="managerListCount" | |
122 | - :max-range="5" | |
123 | - :click="managerSelectList" | |
124 | - /> | |
125 | - <div class="btn-wrap"> | |
126 | - <button @click="managerInsertPage" class="btn-2 green-btn"> | |
127 | - 등록 | |
128 | - </button> | |
129 | - </div> | |
130 | - </div> | |
131 | - </div> | |
132 | - </div> | |
133 | -</template> | |
134 | - | |
135 | -<script> | |
136 | -import axios from "axios"; | |
137 | -import PaginationButton from "../../component/pagination/PaginationButton.vue"; | |
138 | -import COMMON_UTIL from "../../../resources/js/commonUtil.ts"; | |
139 | - | |
140 | -export default { | |
141 | - data: function () { | |
142 | - return { | |
143 | - managerListSearch: { | |
144 | - currentPage: 1, | |
145 | - perPage: 10, | |
146 | - searchType: null, | |
147 | - searchText: null, | |
148 | - startDate: null, | |
149 | - endDate: null, | |
150 | - }, | |
151 | - managerListCount: 0, | |
152 | - managerList: [], | |
153 | - managerIdx: 0 | |
154 | - }; | |
155 | - }, | |
156 | - methods: { | |
157 | - //횡단보도 유지보수 관리자 목록 조회 | |
158 | - managerSelectList: function () { | |
159 | - const vm = this; | |
160 | - axios({ | |
161 | - url: "/managerSelectList.json", | |
162 | - method: "post", | |
163 | - headers: { | |
164 | - "Content-Type": "application/json; charset=UTF-8", | |
165 | - }, | |
166 | - data: vm.managerListSearch, | |
167 | - }) | |
168 | - .then(function (response) { | |
169 | - console.log("managerSelectList - response : ", response.data); | |
170 | - vm.managerListCount = response.data.managerListCount; | |
171 | - vm.managerList = response.data.managerList; | |
172 | - vm.managerIdx = vm.managerListCount-(vm.managerListSearch.currentPage-1)*vm.managerList.length; | |
173 | - }) | |
174 | - .catch(function (error) { | |
175 | - console.log("managerSelectList - error : ", error); | |
176 | - alert( | |
177 | - "횡단보도 유지보수 관리자 목록 조회 오류, 관리자에게 문의해주세요." | |
178 | - ); | |
179 | - }); | |
180 | - }, | |
181 | - | |
182 | - // 전화번호 '-' 추가 후 출력 | |
183 | - HyphenMinus: function (telno) { | |
184 | - return COMMON_UTIL.HyphenMinus(telno); | |
185 | - }, | |
186 | - | |
187 | - //날짜 시,분,초 자르기 | |
188 | - yyyymmdd: function (date) { | |
189 | - return COMMON_UTIL.yyyymmdd(date); | |
190 | - }, | |
191 | - | |
192 | - //횡단보도 유지보수 관리자 상세조회 페이지 이동 | |
193 | - managerSelectOnePage: function (manager) { | |
194 | - this.$router.push({ | |
195 | - path: "/ManagerModifyForm.page", | |
196 | - query: { mntnce_mngr_id: manager.mntnce_mngr_id }, | |
197 | - }); | |
198 | - }, | |
199 | - | |
200 | - //횡단보도 유지보수 관리자 등록 페이지 이동 | |
201 | - managerInsertPage: function () { | |
202 | - this.$router.push({ path: "/ManagerAddForm.page" }); | |
203 | - }, | |
204 | - }, | |
205 | - | |
206 | - watch: {}, | |
207 | - computed: {}, | |
208 | - components: { | |
209 | - PaginationButton: PaginationButton, | |
210 | - }, | |
211 | - mounted() { | |
212 | - console.log("Main4 mounted"); | |
213 | - this.managerSelectList(); | |
214 | - }, | |
215 | -}; | |
216 | -</script> | |
217 | - | |
218 | -<style scoped> | |
219 | -@media all and (max-width: 479px) { | |
220 | - .form-wrap{width: -webkit-fill-available !important;} | |
221 | - .wrap{padding: 0 1rem;} | |
222 | - .date{margin: 0rem 0 1rem 0 !important;} | |
223 | - .search input{width: 14rem;} | |
224 | - .search select{width: 9rem;} | |
225 | -} | |
226 | -.mobile{display: none;} | |
227 | -.date{margin-right: 3rem;} | |
228 | -.wrap { | |
229 | - width: 155rem; | |
230 | - margin: 100px auto; | |
231 | -} | |
232 | - | |
233 | -.search-wrap { | |
234 | - margin-bottom: 30px; | |
235 | -} | |
236 | - | |
237 | -.search-wrap input, | |
238 | -.search-wrap select { | |
239 | - height: 22.5px; | |
240 | - border-radius: 3px; | |
241 | - border: 1px solid #949292; | |
242 | -} | |
243 | - | |
244 | -.float-right { | |
245 | - float: right; | |
246 | -} | |
247 | - | |
248 | -.clear-fix::after { | |
249 | - content: ""; | |
250 | - display: block; | |
251 | - clear: both; | |
252 | -} | |
253 | - | |
254 | -.search-wrap .float-right form > *:not(:last-child) { | |
255 | - margin-right: 1rem; | |
256 | -} | |
257 | - | |
258 | -h2.page-title { | |
259 | - font-size: 24px; | |
260 | -} | |
261 | - | |
262 | -hr.margin { | |
263 | - margin: 30px 0; | |
264 | -} | |
265 | - | |
266 | -table { | |
267 | - width: 100%; | |
268 | - text-align: center; | |
269 | - border-collapse: collapse; | |
270 | -} | |
271 | - | |
272 | -th, | |
273 | -td { | |
274 | - border-left: none; | |
275 | - border-right: none; | |
276 | -} | |
277 | - | |
278 | -table th { | |
279 | - padding: 15px 0; | |
280 | - color: #fff; | |
281 | - background-color: #13833b; | |
282 | -} | |
283 | - | |
284 | -table td { | |
285 | - padding: 10px 0; | |
286 | - border-bottom: 1px solid #e5e5dd; | |
287 | -} | |
288 | - | |
289 | -table tr:nth-child(odd) { | |
290 | - background-color: #f7f6f6; | |
291 | -} | |
292 | - | |
293 | -table tr:nth-child(even) { | |
294 | - background-color: #fdfdf2; | |
295 | -} | |
296 | - | |
297 | -.bottom-wrap { | |
298 | - position: relative; | |
299 | - padding: 1rem 0; | |
300 | -} | |
301 | - | |
302 | -.btn-2 { | |
303 | - display: inline-block; | |
304 | - padding: 0.3rem 2rem; | |
305 | - font-size: 13.333px; | |
306 | -} | |
307 | - | |
308 | -.pg-wrap { | |
309 | - text-align: center; | |
310 | -} | |
311 | - | |
312 | -.pg-item { | |
313 | - display: inline-block; | |
314 | - padding: 10px; | |
315 | - color: #949292; | |
316 | -} | |
317 | - | |
318 | -.pg-item.prev, | |
319 | -.pg-item.next, | |
320 | -.pg-item.active { | |
321 | - color: #13833b; | |
322 | -} | |
323 | - | |
324 | -.btn-wrap { | |
325 | - position: absolute; | |
326 | - right: 0; | |
327 | - top: 1.5em; | |
328 | - z-index: 10; | |
329 | -} | |
330 | - | |
331 | -.btn-wrap button { | |
332 | - cursor: pointer; | |
333 | -} | |
334 | -</style> |
--- client/views/pages/SystemManagement/DataRecord.vue
... | ... | @@ -1,17 +0,0 @@ |
1 | -<template> | |
2 | - <div>통합관리</div> | |
3 | -</template> | |
4 | - | |
5 | -<script> | |
6 | -export default { | |
7 | - data() { | |
8 | - return {}; | |
9 | - }, | |
10 | - methods: {}, | |
11 | - watch: {}, | |
12 | - computed: {}, | |
13 | - mounted() { | |
14 | - console.log("Main4 mounted"); | |
15 | - }, | |
16 | -}; | |
17 | -</script> |
--- client/views/pages/SystemManagement/DongManagement.vue
... | ... | @@ -1,385 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div> | |
4 | - <div class="search-wrap clear-fix"> | |
5 | - <div class="float-left"> | |
6 | - <h3 class="sub-title">행정동 목록</h3> | |
7 | - </div> | |
8 | - <div class="float-right"> | |
9 | - <form action=""> | |
10 | - <select name="" id=""> | |
11 | - <option value="">검색조건</option> | |
12 | - </select> | |
13 | - <input type="text" /> | |
14 | - <button type="button" class="btn-2 green-btn">검색</button> | |
15 | - </form> | |
16 | - </div> | |
17 | - </div> | |
18 | - <div> | |
19 | - <table> | |
20 | - <colgroup> | |
21 | - <col style="width: 5%;"> | |
22 | - <col style="width: 10%;"> | |
23 | - <col style="width: 10%;"> | |
24 | - <col style="width: 20%;"> | |
25 | - <col style="width: 10%;"> | |
26 | - <col style="width: 10%;"> | |
27 | - <col style="width: 15%;"> | |
28 | - <col style="width: 20%;"> | |
29 | - </colgroup> | |
30 | - <thead> | |
31 | - <tr> | |
32 | - <th rowspan="2">순번</th> | |
33 | - <th rowspan="2">ID</th> | |
34 | - <th rowspan="2">한글명</th> | |
35 | - <th rowspan="2">영문명</th> | |
36 | - <th colspan="2">좌표</th> | |
37 | - <th rowspan="2">레이어</th> | |
38 | - <th rowspan="2">등록일</th> | |
39 | - </tr> | |
40 | - <tr> | |
41 | - <th>위도</th> | |
42 | - <th>경도</th> | |
43 | - </tr> | |
44 | - </thead> | |
45 | - <tbody> | |
46 | - <tr> | |
47 | - <td>1</td> | |
48 | - <td>2203060</td> | |
49 | - <td>평리1동</td> | |
50 | - <td>Pyeongni 1–dong</td> | |
51 | - <td>00.000000</td> | |
52 | - <td>00.000000</td> | |
53 | - <td></td> | |
54 | - <td>2023-03-03 12:50</td> | |
55 | - </tr> | |
56 | - </tbody> | |
57 | - </table> | |
58 | - </div> | |
59 | - <div class="bottom-wrap"> | |
60 | - <div class="pg-wrap"> | |
61 | - <a href="#" class="pg-item prev">◀</a> | |
62 | - <a href="#" class="pg-item active">1</a> | |
63 | - <a href="#" class="pg-item">2</a> | |
64 | - <a href="#" class="pg-item">3</a> | |
65 | - <a href="#" class="pg-item">4</a> | |
66 | - <a href="#" class="pg-item">5</a> | |
67 | - <a href="#" class="pg-item next">▶</a> | |
68 | - </div> | |
69 | - </div> | |
70 | - </div> | |
71 | - <div> | |
72 | - <div class="sub-title-wrap"> | |
73 | - <h3 class="sub-title">행정동 정보관</h3> | |
74 | - <span class="btn-2 green-btn">신규등록</span> | |
75 | - </div> | |
76 | - <div> | |
77 | - <table> | |
78 | - <colgroup> | |
79 | - <col style="width: 10%;"> | |
80 | - <col style="width: 10%;"> | |
81 | - <col style="width: 30%;"> | |
82 | - <col style="width: 20%;"> | |
83 | - <col style="width: 30%;"> | |
84 | - </colgroup> | |
85 | - <tbody> | |
86 | - <tr> | |
87 | - <th colspan="2">ID</th> | |
88 | - <td><input type="text" class="full"></td> | |
89 | - <th>레이어</th> | |
90 | - <td><input type="text" class="full"></td> | |
91 | - </tr> | |
92 | - <tr> | |
93 | - <th colspan="2">한글명</th> | |
94 | - <td><input type="text" class="full"></td> | |
95 | - <th>등록일</th> | |
96 | - <td></td> | |
97 | - </tr> | |
98 | - <tr> | |
99 | - <th colspan="2">영문명</th> | |
100 | - <td><input type="text" class="full"></td> | |
101 | - <th>수정일</th> | |
102 | - <td></td> | |
103 | - </tr> | |
104 | - <tr> | |
105 | - <th rowspan="2">좌표</th> | |
106 | - <th class="second">위도</th> | |
107 | - <td><input type="text" class="full"></td> | |
108 | - <th>등록자</th> | |
109 | - <td></td> | |
110 | - </tr> | |
111 | - <tr> | |
112 | - <th class="second">경도</th> | |
113 | - <td><input type="text" class="full"></td> | |
114 | - <th>수정자</th> | |
115 | - <td></td> | |
116 | - </tr> | |
117 | - </tbody> | |
118 | - </table> | |
119 | - </div> | |
120 | - <div class="btn-wrap"> | |
121 | - <button type="button" class="btn-2 gray-btn" @click="modal_2 = true">삭제</button> | |
122 | - <button type="button" class="btn-2 green-btn" @click="modal_1 = true">저장</button> | |
123 | - </div> | |
124 | - </div> | |
125 | - | |
126 | - <div> | |
127 | - <div class="sub-title-wrap"> | |
128 | - <h3 class="sub-title">파일 업로드</h3> | |
129 | - </div> | |
130 | - <div> | |
131 | - <table> | |
132 | - <colgroup> | |
133 | - <col style="width: 30%;"> | |
134 | - <col style="width: 70%;"> | |
135 | - </colgroup> | |
136 | - <tbody> | |
137 | - <tr> | |
138 | - <th>ID</th> | |
139 | - <td class="txt-left"> | |
140 | - <input type="file" name="" id="fileBtn"> | |
141 | - <label for="fileBtn" class="btn-2 green-btn"> | |
142 | - 파일선택 | |
143 | - </label> | |
144 | - <button type="button" class="gray-btn">등록</button> | |
145 | - </td> | |
146 | - </tr> | |
147 | - <tr> | |
148 | - <th>양식다운로드</th> | |
149 | - <td></td> | |
150 | - </tr> | |
151 | - </tbody> | |
152 | - </table> | |
153 | - </div> | |
154 | - </div> | |
155 | - </div> | |
156 | - | |
157 | - <div class="modal-wrap" v-if="modal_1 == true"> | |
158 | - <div class="modal-bg"> | |
159 | - </div> | |
160 | - <div class="modal"> | |
161 | - <p>행정동을 <span class="txt-point">등록</span>하시겠습니까?</p> | |
162 | - <div class="btn-wrap"> | |
163 | - <button type="button" class="green-btn">확인</button> | |
164 | - <button type="button" class="gray-btn" @click="modal_1 = false">취소</button> | |
165 | - </div> | |
166 | - </div> | |
167 | - </div> | |
168 | - | |
169 | - <div class="modal-wrap" v-if="modal_2 == true"> | |
170 | - <div class="modal-bg"> | |
171 | - </div> | |
172 | - <div class="modal"> | |
173 | - <p> | |
174 | - 해당 기능은 데이터 삭제 기능입니다.<br> | |
175 | - 데이터 삭제 후, 조회에서 해당 데이터를 확인할 수 없습니다.<br> | |
176 | - 삭제를 원하시면 아래 삭제 버튼을 눌러주세요. | |
177 | - </p> | |
178 | - <div class="btn-wrap"> | |
179 | - <button type="button" class="green-btn">삭제</button> | |
180 | - <button type="button" class="gray-btn" @click="modal_2 = false">취소</button> | |
181 | - </div> | |
182 | - </div> | |
183 | - </div> | |
184 | -</template> | |
185 | - | |
186 | -<script> | |
187 | -export default { | |
188 | - data() { | |
189 | - return { | |
190 | - modal_1: false, | |
191 | - modal_2: false, | |
192 | - }; | |
193 | - }, | |
194 | - methods: {}, | |
195 | - watch: {}, | |
196 | - computed: {}, | |
197 | - mounted() { | |
198 | - console.log("Main4 mounted"); | |
199 | - }, | |
200 | -}; | |
201 | -</script> | |
202 | - | |
203 | -<style scoped> | |
204 | -.wrap { | |
205 | - width: 155rem; | |
206 | - margin: 100px auto; | |
207 | -} | |
208 | - | |
209 | -.search-wrap, | |
210 | -.sub-title-wrap { | |
211 | - margin-bottom: 30px; | |
212 | -} | |
213 | - | |
214 | -.search-wrap { | |
215 | - margin-bottom: 30px; | |
216 | -} | |
217 | - | |
218 | -.search-wrap input, | |
219 | -.search-wrap select { | |
220 | - height: 22.5px; | |
221 | - border-radius: 3px; | |
222 | - border: 1px solid #949292; | |
223 | -} | |
224 | - | |
225 | -.float-left { | |
226 | - float: left; | |
227 | -} | |
228 | - | |
229 | -.float-left .sub-title, | |
230 | -.sub-title-wrap .sub-title { | |
231 | - font-size: 20px; | |
232 | -} | |
233 | - | |
234 | -.float-right { | |
235 | - float: right; | |
236 | -} | |
237 | - | |
238 | -.sub-title-wrap>* { | |
239 | - display: inline-block; | |
240 | - vertical-align: middle; | |
241 | -} | |
242 | - | |
243 | -.sub-title-wrap>*:not(:last-child) { | |
244 | - margin-right: 2rem; | |
245 | -} | |
246 | - | |
247 | -.full { | |
248 | - width: 100%; | |
249 | -} | |
250 | - | |
251 | -.txt-left { | |
252 | - text-align: left; | |
253 | -} | |
254 | - | |
255 | -.txt-left .green-btn { | |
256 | - margin-right: 2rem; | |
257 | -} | |
258 | - | |
259 | -.btn-2 { | |
260 | - display: inline-block; | |
261 | - padding: 0.3rem 2rem; | |
262 | - font-size: 13.333px; | |
263 | -} | |
264 | - | |
265 | -label.btn-2 { | |
266 | - cursor: pointer; | |
267 | -} | |
268 | - | |
269 | -.clear-fix::after { | |
270 | - content: ""; | |
271 | - display: block; | |
272 | - clear: both; | |
273 | -} | |
274 | - | |
275 | -.search-wrap .float-right form>*:not(:last-child) { | |
276 | - margin-right: 1rem; | |
277 | -} | |
278 | - | |
279 | -table { | |
280 | - width: 100%; | |
281 | - text-align: center; | |
282 | - border-collapse: collapse; | |
283 | -} | |
284 | - | |
285 | -th, | |
286 | -td { | |
287 | - border-left: none; | |
288 | - border-right: none; | |
289 | -} | |
290 | - | |
291 | -table th { | |
292 | - padding: 15px; | |
293 | - color: #fff; | |
294 | - background-color: #13833b; | |
295 | - border-bottom: 1px solid #e5e5dd; | |
296 | -} | |
297 | - | |
298 | -table td { | |
299 | - padding: 10px; | |
300 | - border-bottom: 1px solid #e5e5dd; | |
301 | -} | |
302 | - | |
303 | -table tbody th.second { | |
304 | - background-color: #31a257; | |
305 | -} | |
306 | - | |
307 | -table tr:nth-child(odd) { | |
308 | - background-color: #f7f6f6; | |
309 | -} | |
310 | - | |
311 | -table tr:nth-child(even) { | |
312 | - background-color: #fdfdf2; | |
313 | -} | |
314 | - | |
315 | -.bottom-wrap { | |
316 | - position: relative; | |
317 | - padding: 1rem 0; | |
318 | -} | |
319 | - | |
320 | -.pg-wrap { | |
321 | - text-align: center; | |
322 | -} | |
323 | - | |
324 | -.pg-item { | |
325 | - display: inline-block; | |
326 | - padding: 10px; | |
327 | - color: #949292; | |
328 | -} | |
329 | - | |
330 | -.pg-item.prev, | |
331 | -.pg-item.next, | |
332 | -.pg-item.active { | |
333 | - color: #13833b; | |
334 | -} | |
335 | - | |
336 | -#fileBtn::file-selector-button { | |
337 | - display: none; | |
338 | -} | |
339 | - | |
340 | -.btn-wrap { | |
341 | - text-align: right; | |
342 | - margin-top: 15px; | |
343 | -} | |
344 | - | |
345 | -.btn-wrap>*:not(:last-child) { | |
346 | - margin-right: 15px; | |
347 | -} | |
348 | - | |
349 | -.modal-wrap { | |
350 | - position: fixed; | |
351 | - top: 0; | |
352 | - left: 0; | |
353 | - right: 0; | |
354 | - bottom: 0; | |
355 | -} | |
356 | - | |
357 | -.modal-bg { | |
358 | - position: absolute; | |
359 | - width: 100%; | |
360 | - height: 100%; | |
361 | - background-color: rgba(0, 0, 0, .6); | |
362 | -} | |
363 | - | |
364 | -.modal { | |
365 | - position: absolute; | |
366 | - top: 50%; | |
367 | - left: 50%; | |
368 | - transform: translate(-50%, -50%); | |
369 | - max-width: 350px; | |
370 | - padding: 5rem; | |
371 | - z-index: 2; | |
372 | - background-color: #fff; | |
373 | - border-radius: 1rem; | |
374 | - text-align: center; | |
375 | -} | |
376 | - | |
377 | -.modal .btn-wrap { | |
378 | - margin-top: 15px; | |
379 | - text-align: center; | |
380 | -} | |
381 | - | |
382 | -.txt-point { | |
383 | - color: #13833b; | |
384 | -} | |
385 | -</style>(No newline at end of file) |
--- client/views/pages/SystemManagement/ManagerAddForm.vue
... | ... | @@ -1,297 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div> | |
4 | - <div> | |
5 | - <h2 class="page-title">횡단보도 유지보수 담당자 등록</h2> | |
6 | - </div> | |
7 | - <hr class="margin"> | |
8 | - <div class="form-wrap"> | |
9 | - <div class="flex m-b"> | |
10 | - <span>이름 : </span> | |
11 | - <input type="text" placeholder=" Name" v-model="manager.mngr_nm"> | |
12 | - </div> | |
13 | - <div class="flex m-b"> | |
14 | - <span>전화번호 : </span> | |
15 | - <input type="text" placeholder=" '-' 을 제외하고 입력해주세요." maxlength="13" v-model="telno" @change="phoneCheck" @keyup="getPhoneMask(telno)"> | |
16 | - <p style="color:red" v-if="telno_boolean === false"> 전화번호 9~11자리를 입력해주세요.</p> | |
17 | - </div> | |
18 | - <div class="flex m-b"> | |
19 | - <span>이메일 : </span> | |
20 | - <input type="text" placeholder=" 예) [email protected]" v-model="manager.mngr_eml" @change="emailCheck"> | |
21 | - <p style="color:red" v-if="email_boolean === false"> 잘못된 이메일 형식입니다.</p> | |
22 | - </div> | |
23 | - <div class="flex m-b"> | |
24 | - <span>소속명 : </span> | |
25 | - <input type="text" placeholder=" 소속정보를 입력해주세요." v-model="manager.mngr_ogdp_info"> | |
26 | - </div> | |
27 | - | |
28 | - <div class="btn-wrap"> | |
29 | - <button type="button" class="green-btn" @click="managerInsertCheck">등록</button> | |
30 | - <button class="btn-2 gray-btn" @click="managerSelectListPage">취소</button> | |
31 | - </div> | |
32 | - </div> | |
33 | - </div> | |
34 | - </div> | |
35 | - | |
36 | - <div class="modal-wrap" v-if="modal_insert == true"> | |
37 | - <div class="modal-bg"> | |
38 | - </div> | |
39 | - <div class="modal"> | |
40 | - <p>사용자를 <span class="txt-point">등록</span>하시겠습니까?</p> | |
41 | - <div class="btn-wrap"> | |
42 | - <button type="button" class="green-btn" @click="managerInsert">확인</button> | |
43 | - <button type="button" class="gray-btn" @click="modal_insert = false">취소</button> | |
44 | - </div> | |
45 | - </div> | |
46 | - </div> | |
47 | -</template> | |
48 | - | |
49 | -<script> | |
50 | -import axios from 'axios'; | |
51 | -import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
52 | - | |
53 | -export default { | |
54 | - data: () => { | |
55 | - return { | |
56 | - manager: { | |
57 | - mngr_nm: null, | |
58 | - mngr_telno: null, | |
59 | - mngr_eml: null, | |
60 | - mngr_ogdp_info: null | |
61 | - }, | |
62 | - | |
63 | - telno_boolean: true, | |
64 | - email_boolean: true, | |
65 | - telno: null, | |
66 | - modal_insert: false | |
67 | - }; | |
68 | - }, | |
69 | - methods: { | |
70 | - | |
71 | - //전화번호 입력 시 자동 '-' 삽입 | |
72 | - getPhoneMask: function(telNumber) { | |
73 | - var res = COMMON_UTIL.getMask(telNumber) | |
74 | - this.telno = res | |
75 | - //서버 전송 값에는 '-' 를 제외하고 숫자만 저장 | |
76 | - this.manager.mngr_telno = this.telno.replace(/[^0-9]/g, '') | |
77 | - }, | |
78 | - | |
79 | - emailCheck: function() { | |
80 | - this.email_boolean = true; | |
81 | - if (COMMON_UTIL.checkEmail(this.manager.mngr_eml) === false) this.email_boolean = false; | |
82 | - }, | |
83 | - | |
84 | - phoneCheck: function() { | |
85 | - this.telno_boolean = true; | |
86 | - if (COMMON_UTIL.checkPhone(this.manager.mngr_telno) === false) this.telno_boolean = false; | |
87 | - }, | |
88 | - | |
89 | - // 등록버튼 클릭 시 빈칸 검사 | |
90 | - managerInsertCheck: function() { | |
91 | - | |
92 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_nm) === false) { | |
93 | - alert('이름을 입력해주세요.'); | |
94 | - return false; | |
95 | - } | |
96 | - | |
97 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_telno) === false) { | |
98 | - alert('전화번호를 입력해주세요.'); | |
99 | - return false; | |
100 | - } | |
101 | - | |
102 | - if (COMMON_UTIL.checkPhone(this.manager.mngr_telno) === false) { | |
103 | - alert('전화번호 형식을 확인해주세요.'); | |
104 | - return false; | |
105 | - } | |
106 | - | |
107 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_eml) === false) { | |
108 | - alert('이메일을 입력해주세요.'); | |
109 | - return false; | |
110 | - } | |
111 | - | |
112 | - if (COMMON_UTIL.checkEmail(this.manager.mngr_eml) === false) { | |
113 | - alert('이메일 형식을 확인해주세요.'); | |
114 | - return false; | |
115 | - } | |
116 | - | |
117 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_ogdp_info) === false) { | |
118 | - alert('소속정보를 입력해주세요.'); | |
119 | - return false; | |
120 | - } | |
121 | - | |
122 | - this.modal_insert = true | |
123 | - }, | |
124 | - | |
125 | - // 횡단보도 유지보수 담당자 등록 | |
126 | - managerInsert: function() { | |
127 | - const vm = this; | |
128 | - axios({ | |
129 | - url: '/managerInsert.json', | |
130 | - method: 'post', | |
131 | - herders: { | |
132 | - 'Content-Type': "application/json; charset=UTF-8", | |
133 | - }, | |
134 | - data: vm.manager | |
135 | - }).then(function (response) { | |
136 | - console.log("managerInsert - response : ", response.data); | |
137 | - let result = response.data; | |
138 | - if (result > 0) { | |
139 | - alert("횡단보도 유지보수 담당자 등록을 완료 하였습니다."); | |
140 | - vm.managerSelectListPage(); | |
141 | - } else { | |
142 | - alert('등록 실패, 관리자에게 문의해주세요.'); | |
143 | - vm.modal_insert = false; | |
144 | - } | |
145 | - }).catch(function(error) { | |
146 | - console.log("managerInsert - error : ", error); | |
147 | - alert('횡단보도 유지보수 담당자 등록 오류, 관리자에게 문의해주세요.'); | |
148 | - vm.modal_insert = false; | |
149 | - }) | |
150 | - }, | |
151 | - | |
152 | - //횡단보도 유지보수 관리자 목록 페이지 이동 | |
153 | - managerSelectListPage: function () { | |
154 | - this.$router.push({ path : '/ChargeManagement.page'}); | |
155 | - }, | |
156 | - }, | |
157 | - watch: {}, | |
158 | - computed: {}, | |
159 | - mounted() { | |
160 | - console.log("Main4 mounted"); | |
161 | - }, | |
162 | -}; | |
163 | -</script> | |
164 | - | |
165 | -<style scoped> | |
166 | -@media all and (max-width: 479px) { | |
167 | - .form-wrap{width: -webkit-fill-available !important;} | |
168 | - .wrap{padding: 0 1rem;} | |
169 | - .form-wrap input{min-width: 27rem !important;} | |
170 | -} | |
171 | -.wrap { | |
172 | - width: 155rem; | |
173 | - margin: 100px auto; | |
174 | -} | |
175 | - | |
176 | -.tab-wrap { | |
177 | - margin-bottom: 30px; | |
178 | -} | |
179 | - | |
180 | -.tab-wrap ul { | |
181 | - display: flex; | |
182 | - gap: 2rem; | |
183 | -} | |
184 | - | |
185 | -.tab { | |
186 | - display: inline-block; | |
187 | - width: 20rem; | |
188 | - height: 3rem; | |
189 | - line-height: 3rem; | |
190 | - text-align: center; | |
191 | - border-radius: 5px; | |
192 | - background: #fff; | |
193 | - color: #949292; | |
194 | - border: 1px solid #949292; | |
195 | -} | |
196 | - | |
197 | -.tab.active { | |
198 | - background: #13833b; | |
199 | - color: #fff; | |
200 | - border-color: #13833b; | |
201 | -} | |
202 | - | |
203 | -h2.page-title { | |
204 | - font-size: 24px; | |
205 | -} | |
206 | - | |
207 | -hr.margin { | |
208 | - margin: 30px 0; | |
209 | -} | |
210 | - | |
211 | -.form-wrap { | |
212 | - width: 52rem; | |
213 | - margin: 0 auto; | |
214 | -} | |
215 | - | |
216 | -.idchk { | |
217 | - margin-left: 1rem; | |
218 | -} | |
219 | - | |
220 | -.btn-wrap { | |
221 | - margin-top: 30px; | |
222 | - text-align: center; | |
223 | -} | |
224 | - | |
225 | -.btn-2 { | |
226 | - display: inline-block; | |
227 | - padding: 0.3rem 2rem; | |
228 | - font-size: 13.333px; | |
229 | - color: #000; | |
230 | -} | |
231 | - | |
232 | -.btn-wrap>*:not(:last-child) { | |
233 | - margin-right: 2rem; | |
234 | -} | |
235 | - | |
236 | -.form-wrap .flex span { | |
237 | - display: inline-block; | |
238 | - width: 10rem; | |
239 | - padding: 0 5px; | |
240 | -} | |
241 | - | |
242 | -.form-wrap input:not([type="radio"]) { | |
243 | - min-width: 30rem; | |
244 | -} | |
245 | - | |
246 | -.form-wrap select { | |
247 | - min-width: 9rem; | |
248 | -} | |
249 | - | |
250 | -.form-wrap select:not(:last-child) { | |
251 | - margin-right: 1.5rem; | |
252 | -} | |
253 | - | |
254 | -.form-wrap input[type="radio"] { | |
255 | - vertical-align: middle; | |
256 | -} | |
257 | - | |
258 | -.form-wrap label:not(:last-child) { | |
259 | - margin-right: 2rem; | |
260 | -} | |
261 | - | |
262 | -.modal-wrap { | |
263 | - position: fixed; | |
264 | - top: 0; | |
265 | - left: 0; | |
266 | - right: 0; | |
267 | - bottom: 0; | |
268 | -} | |
269 | - | |
270 | -.modal-bg { | |
271 | - position: absolute; | |
272 | - width: 100%; | |
273 | - height: 100%; | |
274 | - background-color: rgba(0, 0, 0, .6); | |
275 | -} | |
276 | - | |
277 | -.modal { | |
278 | - position: absolute; | |
279 | - top: 50%; | |
280 | - left: 50%; | |
281 | - transform: translate(-50%, -50%); | |
282 | - max-width: 350px; | |
283 | - padding: 5rem; | |
284 | - z-index: 2; | |
285 | - background-color: #fff; | |
286 | - border-radius: 1rem; | |
287 | - text-align: center; | |
288 | -} | |
289 | - | |
290 | -.modal .btn-wrap { | |
291 | - margin-top: 15px; | |
292 | - text-align: center; | |
293 | -} | |
294 | -.txt-point { | |
295 | - color: #13833b; | |
296 | -} | |
297 | -</style>(No newline at end of file) |
--- client/views/pages/SystemManagement/ManagerModifyForm.vue
... | ... | @@ -1,370 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div> | |
4 | - <div> | |
5 | - <h2 class="page-title">횡단보도 유지보수 담당자 정보</h2> | |
6 | - </div> | |
7 | - <hr class="margin"> | |
8 | - <div class="form-wrap"> | |
9 | - <div class="flex m-b"> | |
10 | - <span>이름 : </span> | |
11 | - <input type="text" placeholder=" Name" v-model="manager.mngr_nm"> | |
12 | - </div> | |
13 | - <div class="flex m-b"> | |
14 | - <span>전화번호 : </span> | |
15 | - <input type="text" placeholder=" '-' 을 제외하고 입력해주세요." maxlength="13" v-model="manager.mngr_telno" @change="phoneCheck" @keyup="getPhoneMask(manager.mngr_telno)"> | |
16 | - <p style="color:red" v-if="telno_boolean === false"> 전화번호 9~11자리를 입력해주세요.</p> | |
17 | - </div> | |
18 | - <div class="flex m-b"> | |
19 | - <span>이메일 : </span> | |
20 | - <input type="text" placeholder=" 예) [email protected]" v-model="manager.mngr_eml" @change="emailCheck"> | |
21 | - <p style="color:red" v-if="email_boolean === false"> 잘못된 이메일 형식입니다.</p> | |
22 | - </div> | |
23 | - <div class="flex m-b"> | |
24 | - <span>소속명 : </span> | |
25 | - <input type="text" placeholder=" 소속정보를 입력해주세요." v-model="manager.mngr_ogdp_info"> | |
26 | - </div> | |
27 | - | |
28 | - <div class="btn-wrap"> | |
29 | - <button type="button" class="green-btn" @click="managerUpdateCheck">수정</button> | |
30 | - <button type="button" class="green-btn" @click="modal_delete = true">삭제</button> | |
31 | - <button class="btn-2 gray-btn" @click="managerSelectListPage">취소</button> | |
32 | - </div> | |
33 | - </div> | |
34 | - </div> | |
35 | - </div> | |
36 | - | |
37 | - <div class="modal-wrap" v-if="modal_update == true"> | |
38 | - <div class="modal-bg"> | |
39 | - </div> | |
40 | - <div class="modal"> | |
41 | - <p>수정하신 정보를 <span class="txt-point">저장</span>하시겠습니까?</p> | |
42 | - <div class="btn-wrap"> | |
43 | - <button type="button" class="green-btn" @click="managerUpdate">확인</button> | |
44 | - <button type="button" class="gray-btn" @click="modal_update = false">취소</button> | |
45 | - </div> | |
46 | - </div> | |
47 | - </div> | |
48 | - | |
49 | - <div class="modal-wrap" v-if="modal_delete == true"> | |
50 | - <div class="modal-bg"> | |
51 | - </div> | |
52 | - <div class="modal"> | |
53 | - <p> | |
54 | - 해당 기능은 데이터 <span class="txt-point-red">삭제</span>기능입니다.<br> | |
55 | - 데이터 <span class="txt-point-red">삭제</span> 후, 조회에서 해당 데이터를 확인할 수 없습니다.<br> | |
56 | - <span class="txt-point-red">삭제</span>를 원하시면 아래 삭제 버튼을 눌러주세요. | |
57 | - </p> | |
58 | - <div class="btn-wrap"> | |
59 | - <button type="button" class="green-btn" @click="managerDelete">삭제</button> | |
60 | - <button type="button" class="gray-btn" @click="modal_delete = false">취소</button> | |
61 | - </div> | |
62 | - </div> | |
63 | - </div> | |
64 | -</template> | |
65 | - | |
66 | -<script> | |
67 | -import axios from 'axios'; | |
68 | -import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
69 | -import { useRoute } from 'vue-router'; | |
70 | - | |
71 | -export default { | |
72 | - data: () => { | |
73 | - return { | |
74 | - manager: { | |
75 | - mngr_nm: null, | |
76 | - mngr_telno: null, | |
77 | - mngr_eml: null, | |
78 | - mngr_ogdp_info: null | |
79 | - }, | |
80 | - route: useRoute(), | |
81 | - | |
82 | - telno_boolean: true, | |
83 | - email_boolean: true, | |
84 | - modal_update: false, | |
85 | - modal_delete: false | |
86 | - }; | |
87 | - }, | |
88 | - methods: { | |
89 | - | |
90 | - managerSelectOne: function() { | |
91 | - const vm = this; | |
92 | - axios({ | |
93 | - url: '/managerSelectOne.json', | |
94 | - method: 'post', | |
95 | - headers: { | |
96 | - "Content-Type": "application/json; charset=UTF-8" | |
97 | - }, | |
98 | - data: vm.route.query | |
99 | - }).then(function(response) { | |
100 | - console.log("managerSelectOne - response : ", response.data); | |
101 | - vm.manager = response.data; | |
102 | - vm.manager.mngr_telno = vm.HyphenMinus(response.data.mngr_telno); | |
103 | - }).catch(function(error) { | |
104 | - console.log("managerSelectOne - error : ", error); | |
105 | - }); | |
106 | - }, | |
107 | - | |
108 | - // 전화번호 '-' 추가 후 출력 | |
109 | - HyphenMinus: function (telno) { | |
110 | - return COMMON_UTIL.HyphenMinus(telno); | |
111 | - }, | |
112 | - | |
113 | - //전화번호 입력 시 자동 '-' 삽입 | |
114 | - getPhoneMask: function(telNumber) { | |
115 | - var res = COMMON_UTIL.getMask(telNumber) | |
116 | - this.manager.mngr_telno = res | |
117 | - //서버 전송 값에는 '-' 를 제외하고 숫자만 저장 | |
118 | - this.manager.mngr_telno = this.telno.replace(/[^0-9]/g, '') | |
119 | - }, | |
120 | - | |
121 | - emailCheck: function() { | |
122 | - this.email_boolean = true; | |
123 | - if (COMMON_UTIL.checkEmail(this.manager.mngr_eml) === false) this.email_boolean = false; | |
124 | - }, | |
125 | - | |
126 | - phoneCheck: function() { | |
127 | - this.telno_boolean = true; | |
128 | - if (COMMON_UTIL.checkPhone(this.manager.mngr_telno) === false) this.telno_boolean = false; | |
129 | - }, | |
130 | - | |
131 | - // 수정버튼 클릭 시 빈칸 검사 | |
132 | - managerUpdateCheck: function() { | |
133 | - | |
134 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_nm) === false) { | |
135 | - alert('이름을 입력해주세요.'); | |
136 | - return false; | |
137 | - } | |
138 | - | |
139 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_telno) === false) { | |
140 | - alert('전화번호를 입력해주세요.'); | |
141 | - return false; | |
142 | - } | |
143 | - | |
144 | - if (COMMON_UTIL.checkPhone(this.manager.mngr_telno) === false) { | |
145 | - alert('전화번호 형식을 확인해주세요.'); | |
146 | - return false; | |
147 | - } | |
148 | - | |
149 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_eml) === false) { | |
150 | - alert('이메일을 입력해주세요.'); | |
151 | - return false; | |
152 | - } | |
153 | - | |
154 | - if (COMMON_UTIL.checkEmail(this.manager.mngr_eml) === false) { | |
155 | - alert('이메일 형식을 확인해주세요.'); | |
156 | - return false; | |
157 | - } | |
158 | - | |
159 | - if (COMMON_UTIL.isEmpty(this.manager.mngr_ogdp_info) === false) { | |
160 | - alert('소속정보를 입력해주세요.'); | |
161 | - return false; | |
162 | - } | |
163 | - | |
164 | - this.modal_update = true | |
165 | - }, | |
166 | - | |
167 | - // 횡단보도 유지보수 담당자 수정 | |
168 | - managerUpdate: function() { | |
169 | - const vm = this; | |
170 | - //서버 전송 값에는 '-' 를 제외하고 숫자만 저장 | |
171 | - vm.manager.mngr_telno = vm.manager.mngr_telno.replace(/[^0-9]/g, ''); | |
172 | - | |
173 | - axios({ | |
174 | - url: '/managerUpdate.json', | |
175 | - method: 'post', | |
176 | - herders: { | |
177 | - 'Content-Type': "application/json; charset=UTF-8", | |
178 | - }, | |
179 | - data: vm.manager | |
180 | - }).then(function (response) { | |
181 | - console.log("managerUpdate - response : ", response.data); | |
182 | - let result = response.data; | |
183 | - if (result > 0) { | |
184 | - alert("횡단보도 유지보수 담당자 수정을 완료 하였습니다."); | |
185 | - vm.managerSelectListPage(); | |
186 | - } else { | |
187 | - alert('수정 실패, 관리자에게 문의해주세요.'); | |
188 | - vm.modal_update = false; | |
189 | - } | |
190 | - }).catch(function(error) { | |
191 | - console.log("managerInsert - error : ", error); | |
192 | - alert('횡단보도 유지보수 담당자 등록 오류, 관리자에게 문의해주세요.'); | |
193 | - vm.modal_update = false; | |
194 | - }) | |
195 | - }, | |
196 | - | |
197 | - //횡단보도 유지보수 담당자 삭제 | |
198 | - managerDelete: function() { | |
199 | - const vm = this; | |
200 | - | |
201 | - axios({ | |
202 | - url: '/managerDelete.json', | |
203 | - method: 'post', | |
204 | - headers: { | |
205 | - 'Content-Type': "application/json; charset=UTF-8", | |
206 | - }, | |
207 | - data: vm.manager | |
208 | - }).then(function(response) { | |
209 | - console.log("managerDelete - response : ",response.data); | |
210 | - let result = response.data; | |
211 | - if(result > 0) { | |
212 | - alert("횡단보도 유지보수 담당자 삭제를 완료 하였습니다."); | |
213 | - vm.managerSelectListPage(); | |
214 | - } else { | |
215 | - alert("삭제 실패, 관리자에게 문의해주세요."); | |
216 | - vm.modal_delete = false; | |
217 | - } | |
218 | - }).catch(function (error) { | |
219 | - console.log("managerDelete - error : ", error); | |
220 | - alert("횡단보도 유지보수 담당자 삭제 오류, 관리자에게 문의해주세요."); | |
221 | - vm.modal_delete = false; | |
222 | - }) | |
223 | - }, | |
224 | - | |
225 | - //횡단보도 유지보수 관리자 목록 페이지 이동 | |
226 | - managerSelectListPage: function () { | |
227 | - this.$router.push({ path : '/ChargeManagement.page'}); | |
228 | - }, | |
229 | - }, | |
230 | - watch: {}, | |
231 | - computed: {}, | |
232 | - mounted() { | |
233 | - console.log("Main4 mounted"); | |
234 | - this.managerSelectOne(); | |
235 | - }, | |
236 | -}; | |
237 | -</script> | |
238 | - | |
239 | -<style scoped> | |
240 | -.wrap { | |
241 | - width: 155rem; | |
242 | - margin: 100px auto; | |
243 | -} | |
244 | - | |
245 | -.tab-wrap { | |
246 | - margin-bottom: 30px; | |
247 | -} | |
248 | - | |
249 | -.tab-wrap ul { | |
250 | - display: flex; | |
251 | - gap: 2rem; | |
252 | -} | |
253 | - | |
254 | -.tab { | |
255 | - display: inline-block; | |
256 | - width: 20rem; | |
257 | - height: 3rem; | |
258 | - line-height: 3rem; | |
259 | - text-align: center; | |
260 | - border-radius: 5px; | |
261 | - background: #fff; | |
262 | - color: #949292; | |
263 | - border: 1px solid #949292; | |
264 | -} | |
265 | - | |
266 | -.tab.active { | |
267 | - background: #13833b; | |
268 | - color: #fff; | |
269 | - border-color: #13833b; | |
270 | -} | |
271 | - | |
272 | -h2.page-title { | |
273 | - font-size: 24px; | |
274 | -} | |
275 | - | |
276 | -hr.margin { | |
277 | - margin: 30px 0; | |
278 | -} | |
279 | - | |
280 | -.form-wrap { | |
281 | - width: 52rem; | |
282 | - margin: 0 auto; | |
283 | -} | |
284 | - | |
285 | -.idchk { | |
286 | - margin-left: 1rem; | |
287 | -} | |
288 | - | |
289 | -.btn-wrap { | |
290 | - margin-top: 30px; | |
291 | - text-align: center; | |
292 | -} | |
293 | - | |
294 | -.btn-2 { | |
295 | - display: inline-block; | |
296 | - padding: 0.3rem 2rem; | |
297 | - font-size: 13.333px; | |
298 | - color: #000; | |
299 | -} | |
300 | - | |
301 | -.btn-wrap>*:not(:last-child) { | |
302 | - margin-right: 2rem; | |
303 | -} | |
304 | - | |
305 | -.form-wrap .flex span { | |
306 | - display: inline-block; | |
307 | - width: 10rem; | |
308 | - padding: 0 5px; | |
309 | -} | |
310 | - | |
311 | -.form-wrap input:not([type="radio"]) { | |
312 | - min-width: 30rem; | |
313 | -} | |
314 | - | |
315 | -.form-wrap select { | |
316 | - min-width: 9rem; | |
317 | -} | |
318 | - | |
319 | -.form-wrap select:not(:last-child) { | |
320 | - margin-right: 1.5rem; | |
321 | -} | |
322 | - | |
323 | -.form-wrap input[type="radio"] { | |
324 | - vertical-align: middle; | |
325 | -} | |
326 | - | |
327 | -.form-wrap label:not(:last-child) { | |
328 | - margin-right: 2rem; | |
329 | -} | |
330 | - | |
331 | -.modal-wrap { | |
332 | - position: fixed; | |
333 | - top: 0; | |
334 | - left: 0; | |
335 | - right: 0; | |
336 | - bottom: 0; | |
337 | -} | |
338 | - | |
339 | -.modal-bg { | |
340 | - position: absolute; | |
341 | - width: 100%; | |
342 | - height: 100%; | |
343 | - background-color: rgba(0, 0, 0, .6); | |
344 | -} | |
345 | - | |
346 | -.modal { | |
347 | - position: absolute; | |
348 | - top: 50%; | |
349 | - left: 50%; | |
350 | - transform: translate(-50%, -50%); | |
351 | - max-width: 350px; | |
352 | - padding: 5rem; | |
353 | - z-index: 2; | |
354 | - background-color: #fff; | |
355 | - border-radius: 1rem; | |
356 | - text-align: center; | |
357 | -} | |
358 | - | |
359 | -.modal .btn-wrap { | |
360 | - margin-top: 15px; | |
361 | - text-align: center; | |
362 | -} | |
363 | -.txt-point { | |
364 | - color: #13833b; | |
365 | -} | |
366 | - | |
367 | -.txt-point-red { | |
368 | - color: red; | |
369 | -} | |
370 | -</style>(No newline at end of file) |
--- client/views/pages/SystemManagement/NodeAddForm.vue
... | ... | @@ -1,446 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div> | |
4 | - <div class="sub-title-wrap"> | |
5 | - <h3 class="sub-title">표준노드 등록</h3> | |
6 | - </div> | |
7 | - <div> | |
8 | - <table> | |
9 | - <colgroup> | |
10 | - <col style="width: 10%;"> | |
11 | - <col style="width: 10%;"> | |
12 | - <col style="width: 30%;"> | |
13 | - <col style="width: 20%;"> | |
14 | - <col style="width: 30%;"> | |
15 | - </colgroup> | |
16 | - <tbody> | |
17 | - <tr> | |
18 | - <th colspan="2">ID</th> | |
19 | - <td><input type="text" v-model="node.node_id"></td> | |
20 | - </tr> | |
21 | - <tr> | |
22 | - <th colspan="2">노드명</th> | |
23 | - <td><input type="text" v-model="node.node_name"></td> | |
24 | - </tr> | |
25 | - <tr> | |
26 | - <th colspan="2">읍/면/동</th> | |
27 | - <!-- <td><input type="text" v-model="node.node_type"></td> --> | |
28 | - <td>{{ dong_nm }}</td> | |
29 | - </tr> | |
30 | - <tr> | |
31 | - <th rowspan="2">좌표 <button type="button" class="btn-2 gray-btn" @click="[map_open = true, openMap()]">좌표수정</button></th> | |
32 | - <th class="second">위도</th> | |
33 | - <td>{{ node.lat }}</td> | |
34 | - </tr> | |
35 | - <tr> | |
36 | - <th class="second">경도</th> | |
37 | - <td>{{ node.lon }}</td> | |
38 | - | |
39 | - </tr> | |
40 | - </tbody> | |
41 | - </table> | |
42 | - </div> | |
43 | - <div class="btn-wrap"> | |
44 | - <button type="button" class="btn-2 green-btn" @click="modal_insert = true">등록</button> | |
45 | - <button type="button" class="btn-2 gray-btn" @click="nodeSelectListPage">취소</button> | |
46 | - </div> | |
47 | - </div> | |
48 | - | |
49 | - </div> | |
50 | - <div class="modal-wrap" v-if="modal_insert == true"> | |
51 | - <div class="modal-bg"> | |
52 | - </div> | |
53 | - <div class="modal"> | |
54 | - <p>노드를 <span class="txt-point">등록</span>하시겠습니까?</p> | |
55 | - <div class="btn-wrap"> | |
56 | - <button type="button" class="green-btn" @click="nodeInsert">확인</button> | |
57 | - <button type="button" class="gray-btn" @click="modal_insert = false">취소</button> | |
58 | - </div> | |
59 | - </div> | |
60 | - </div> | |
61 | - | |
62 | - <div class="modal-wrap" v-if="map_open"> | |
63 | - <div class="modal-bg"> | |
64 | - </div> | |
65 | - <div class="modalMap"> | |
66 | - <div class="search"> | |
67 | - <h2>교차로 검색</h2> | |
68 | - <dongSelectList @setDongCd="setDongCd" :nodeHiddenCk="true" :azimuthHiddenCk="true"></dongSelectList> | |
69 | - </div> | |
70 | - <button type="button" class="green-btn" @click="searchDong">검색</button> | |
71 | - <OpenLayers ref="open_layers"/> | |
72 | - <label>위도 : </label> | |
73 | - <input style="width: 20rem" type="text" v-model="map_lat" disabled/> | |
74 | - <label>경도 : </label> | |
75 | - <input style="width: 20rem" type="text" v-model="map_lon" disabled/> | |
76 | - <div class="btn-wrap"> | |
77 | - <button type="button" class="green-btn" @click="selectCoordinate">선택</button> | |
78 | - <button type="button" class="gray-btn" @click="closeMap">취소</button> | |
79 | - </div> | |
80 | - </div> | |
81 | - </div> | |
82 | -</template> | |
83 | - | |
84 | -<script> | |
85 | -import axios from 'axios'; | |
86 | -import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
87 | -import OpenLayers from "../../component/OpenLayers.vue"; | |
88 | -import { | |
89 | - vworldBaseLayer, | |
90 | - vworldGrayLayer, | |
91 | - vworldMidnightLayer, | |
92 | - vworldHybridLayer, | |
93 | - vworldSatelliteLayer, | |
94 | -} from "../../component/OpenLayersMap.vue"; | |
95 | -import {baseStyles} from '../../component/OpenLayersStyle.vue'; | |
96 | -import dongSelectList from '../../component/dongSelectList.vue'; | |
97 | -import { transform } from 'ol/proj'; | |
98 | - | |
99 | -export default { | |
100 | - data:() => { | |
101 | - return { | |
102 | - node: { | |
103 | - node_id: null, | |
104 | - node_name: null, | |
105 | - node_type: null, | |
106 | - lat: null, | |
107 | - lon: null, | |
108 | - // updatedate: null, | |
109 | - dong_cd: '22', | |
110 | - }, | |
111 | - dong_nm: null, | |
112 | - address: {}, | |
113 | - | |
114 | - //modal | |
115 | - modal_insert: false, | |
116 | - | |
117 | - //좌표 modal | |
118 | - map_open: false, | |
119 | - map_lat: null, | |
120 | - map_lon: null, | |
121 | - | |
122 | - }; | |
123 | - }, | |
124 | - methods: { | |
125 | - | |
126 | - //좌표수정 지도 열기 | |
127 | - async openMap() { | |
128 | - const vm = this; | |
129 | - | |
130 | - //OpenLayers 랜더링 후 접근 | |
131 | - await vm.$nextTick(); | |
132 | - //기본맵 세팅 | |
133 | - vm.$refs.open_layers.setBaseMap(vworldBaseLayer); | |
134 | - | |
135 | - //행정동 레이어 | |
136 | - //this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson.json','testMap','EPSG:4326', baseStyles['labelStyle'],'label'); | |
137 | - vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.node.dong_cd); | |
138 | - vm.$refs.open_layers.setZoom(11); | |
139 | - }, | |
140 | - | |
141 | - closeMap() { | |
142 | - const vm = this; | |
143 | - vm.$refs.open_layers.removeLayerAll(); | |
144 | - vm.dong_nm = null; | |
145 | - vm.map_open = false; | |
146 | - }, | |
147 | - | |
148 | - //지도 클릭 이벤트 | |
149 | - childClick(prop,coordinate){ | |
150 | - const vm = this; | |
151 | - console.log(prop); | |
152 | - console.log(coordinate); | |
153 | - | |
154 | - // 레이어 삭제 | |
155 | - vm.$refs.open_layers.removeLayer('nodePoint'); | |
156 | - | |
157 | - // Icon 그리기 | |
158 | - vm.$refs.open_layers.createIcon(coordinate[1],coordinate[0],'/client/resources/images/icon/fin2.png',0.3, 'nodePoint','EPSG:5181'); | |
159 | - | |
160 | - //클릭위치로 이동 | |
161 | - // this.$refs.open_layers.setCenterPosition(coordinate[0],coordinate[1],'EPSG:5181'); | |
162 | - | |
163 | - //좌표계 변환 | |
164 | - var changeCoordinate = transform([coordinate[0],coordinate[1]],'EPSG:5181','EPSG:4326'); | |
165 | - vm.map_lat = changeCoordinate[1]; | |
166 | - vm.map_lon = changeCoordinate[0]; | |
167 | - }, | |
168 | - | |
169 | - //좌표 선택 완료 | |
170 | - selectCoordinate() { | |
171 | - const vm = this; | |
172 | - vm.node.lat = vm.map_lat; | |
173 | - vm.node.lon = vm.map_lon; | |
174 | - vm.map_open = false; | |
175 | - }, | |
176 | - | |
177 | - // 좌표수정에서 교차로 검색시 동레이어, 노드좌표 찍어주기 | |
178 | - searchDong() { | |
179 | - const vm = this; | |
180 | - //기존 레이어 삭제 | |
181 | - vm.$refs.open_layers.removeLayer('nodeMap'); | |
182 | - vm.$refs.open_layers.removeLayer('nodePoint'); | |
183 | - //동 레이어 그리기 | |
184 | - vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.address.dong_cd); | |
185 | - axios({ | |
186 | - url: '/dong/dongCenter.json', | |
187 | - method: 'post', | |
188 | - headers: { | |
189 | - 'Content-Type': "application/json; charset=UTF-8" | |
190 | - }, | |
191 | - data: {'dong_cd' : vm.address.dong_cd} | |
192 | - }).then(function (response) { | |
193 | - console.log("searchNode response : ",response.data); | |
194 | - if(vm.address.guGun_dong_cd === null) { | |
195 | - vm.$refs.open_layers.setZoom(11); | |
196 | - } else if(vm.address.dong_dong_cd === null) { | |
197 | - vm.$refs.open_layers.setZoom(12.5); | |
198 | - } else { | |
199 | - vm.$refs.open_layers.setZoom(16); | |
200 | - } | |
201 | - vm.$refs.open_layers.setCenterPosition(response.data.dong_lat,response.data.dong_lon,'EPSG:5181'); | |
202 | - vm.dong_nm = response.data.dong_nm; | |
203 | - }).catch(function (error) { | |
204 | - console.log("serchNode error : ", error); | |
205 | - alert("검색에 실패 하였습니다. 관리자에게 문의하세요."); | |
206 | - }) | |
207 | - }, | |
208 | - | |
209 | - //노드 등록 | |
210 | - nodeInsert() { | |
211 | - const vm = this; | |
212 | - vm.node.dong_cd = vm.address.dong_dong_cd; | |
213 | - | |
214 | - axios({ | |
215 | - url: '/node/nodeInsert.json', | |
216 | - method: 'post', | |
217 | - headers: { | |
218 | - 'Content-Type': "application/json; charset=UTF-8" | |
219 | - }, | |
220 | - data: vm.node | |
221 | - }).then(function (response) { | |
222 | - console.log("nodeInsert - response : ", response.data); | |
223 | - let result = response.data; | |
224 | - if ( result > 0) { | |
225 | - alert("노드 등록을 완료 하였습니다.") | |
226 | - vm.modal_insert = false; | |
227 | - vm.nodeSelectListPage(); | |
228 | - } else { | |
229 | - alert("등록 실패, 관리자에게 문의해주세요.") | |
230 | - vm.modal_insert = false; | |
231 | - } | |
232 | - }).catch(function (error) { | |
233 | - console.log("nodeInsert - error : ", error); | |
234 | - alert("노드등록 오류, 관리자에게 문의해주세요.") | |
235 | - vm.modal_insert = false; | |
236 | - }) | |
237 | - }, | |
238 | - | |
239 | - //dongSelectList 컴포넌트에서 선택된 dong_cd 셋팅 | |
240 | - setDongCd(value) { | |
241 | - this.address = value; | |
242 | - }, | |
243 | - | |
244 | - //날짜에 '-' 넣기 | |
245 | - dateHyphen(date) { | |
246 | - return COMMON_UTIL.dateHyphen(date); | |
247 | - }, | |
248 | - | |
249 | - nodeSelectListPage() { | |
250 | - this.$router.push({ path: '/NodeManagement.page'}) | |
251 | - } | |
252 | - }, | |
253 | - watch: {}, | |
254 | - computed: {}, | |
255 | - components: { | |
256 | - OpenLayers: OpenLayers, | |
257 | - dongSelectList: dongSelectList | |
258 | - }, | |
259 | - mounted() { | |
260 | - console.log("Main4 mounted"); | |
261 | - }, | |
262 | -}; | |
263 | -</script> | |
264 | - | |
265 | -<style scoped> | |
266 | -.wrap { | |
267 | - width: 155rem; | |
268 | - margin: 100px auto; | |
269 | -} | |
270 | - | |
271 | -.search-wrap { | |
272 | - margin-bottom: 30px; | |
273 | -} | |
274 | - | |
275 | -.search-wrap input, | |
276 | -.search-wrap select { | |
277 | - height: 22.5px; | |
278 | - border-radius: 3px; | |
279 | - border: 1px solid #949292; | |
280 | -} | |
281 | - | |
282 | -.float-left { | |
283 | - float: left; | |
284 | -} | |
285 | - | |
286 | -.float-left .sub-title, | |
287 | -.sub-title-wrap .sub-title { | |
288 | - font-size: 20px; | |
289 | -} | |
290 | - | |
291 | -.float-right { | |
292 | - float: right; | |
293 | -} | |
294 | - | |
295 | -.sub-title-wrap>* { | |
296 | - display: inline-block; | |
297 | - vertical-align: middle; | |
298 | -} | |
299 | - | |
300 | -.sub-title-wrap>*:not(:last-child) { | |
301 | - margin-right: 2rem; | |
302 | -} | |
303 | - | |
304 | -.full { | |
305 | - width: 100%; | |
306 | -} | |
307 | - | |
308 | -.txt-left { | |
309 | - text-align: left; | |
310 | -} | |
311 | - | |
312 | -.txt-left .green-btn { | |
313 | - margin-right: 2rem; | |
314 | -} | |
315 | - | |
316 | -.btn-2 { | |
317 | - display: inline-block; | |
318 | - padding: 0.3rem 2rem; | |
319 | - font-size: 13.333px; | |
320 | -} | |
321 | - | |
322 | -label.btn-2 { | |
323 | - cursor: pointer; | |
324 | -} | |
325 | - | |
326 | -.clear-fix::after { | |
327 | - content: ""; | |
328 | - display: block; | |
329 | - clear: both; | |
330 | -} | |
331 | - | |
332 | -.search-wrap .float-right form>*:not(:last-child) { | |
333 | - margin-right: 1rem; | |
334 | -} | |
335 | - | |
336 | -table { | |
337 | - width: 100%; | |
338 | - text-align: center; | |
339 | - border-collapse: collapse; | |
340 | -} | |
341 | - | |
342 | -th, | |
343 | -td { | |
344 | - border-left: none; | |
345 | - border-right: none; | |
346 | -} | |
347 | -td input{width: -webkit-fill-available;} | |
348 | -table th { | |
349 | - padding: 15px; | |
350 | - color: #fff; | |
351 | - background-color: #13833b; | |
352 | - border-bottom: 1px solid #e5e5dd; | |
353 | -} | |
354 | - | |
355 | -table td { | |
356 | - padding: 10px; | |
357 | - border-bottom: 1px solid #e5e5dd; | |
358 | -} | |
359 | - | |
360 | -table tbody th.second { | |
361 | - background-color: #31a257; | |
362 | -} | |
363 | - | |
364 | -table tr:nth-child(odd) { | |
365 | - background-color: #f7f6f6; | |
366 | -} | |
367 | - | |
368 | -table tr:nth-child(even) { | |
369 | - background-color: #fdfdf2; | |
370 | -} | |
371 | - | |
372 | -.bottom-wrap { | |
373 | - position: relative; | |
374 | - padding: 1rem 0; | |
375 | -} | |
376 | - | |
377 | -.pg-wrap { | |
378 | - text-align: center; | |
379 | -} | |
380 | - | |
381 | -.pg-item { | |
382 | - display: inline-block; | |
383 | - padding: 10px; | |
384 | - color: #949292; | |
385 | -} | |
386 | - | |
387 | -.pg-item.prev, | |
388 | -.pg-item.next, | |
389 | -.pg-item.active { | |
390 | - color: #13833b; | |
391 | -} | |
392 | - | |
393 | -#fileBtn::file-selector-button { | |
394 | - display: none; | |
395 | -} | |
396 | - | |
397 | -.btn-wrap { | |
398 | - text-align: right; | |
399 | - margin-top: 15px; | |
400 | -} | |
401 | - | |
402 | -.btn-wrap>*:not(:last-child) { | |
403 | - margin-right: 15px; | |
404 | -} | |
405 | - | |
406 | - | |
407 | - | |
408 | -.modal-bg { | |
409 | - position: absolute; | |
410 | - width: 100%; | |
411 | - height: 100%; | |
412 | - background-color: rgba(0, 0, 0, .6); | |
413 | -} | |
414 | -.modal { | |
415 | - position: absolute; | |
416 | - top: 50%; | |
417 | - left: 50%; | |
418 | - transform: translate(-50%, -50%); | |
419 | - max-width: 350px; | |
420 | - padding: 5rem; | |
421 | - z-index: 2; | |
422 | - background-color: #fff; | |
423 | - border-radius: 1rem; | |
424 | - text-align: center; | |
425 | -} | |
426 | - | |
427 | -.modalMap { | |
428 | - position: absolute; | |
429 | - top: 50%; | |
430 | - left: 50%; | |
431 | - transform: translate(-50%, -50%); | |
432 | - width: 90%; | |
433 | - padding: 5rem; | |
434 | - z-index: 2; | |
435 | - background-color: #fff; | |
436 | - border-radius: 1rem; | |
437 | -} | |
438 | - | |
439 | -.modal .btn-wrap { | |
440 | - text-align: center; | |
441 | -} | |
442 | - | |
443 | -.txt-point { | |
444 | - color: #13833b; | |
445 | -} | |
446 | -</style>(No newline at end of file) |
+++ client/views/pages/SystemManagement/RequestLogView.vue
... | ... | @@ -0,0 +1,360 @@ |
1 | +<template> | |
2 | + <div class="wrap"> | |
3 | + <div class="board-wrap"> | |
4 | + <div> | |
5 | + <h2 class="page-title">데이터 수집로그</h2> | |
6 | + </div> | |
7 | + <hr class="margin"> | |
8 | + <div class="search-wrap clear-fix"> | |
9 | + <div class="float-left"> | |
10 | + <select v-model="pagenation.option1" @change="search"> | |
11 | + <option value="false">전체</option> | |
12 | + <option value="true"> 오류목록 </option> | |
13 | + </select> | |
14 | + </div> | |
15 | + <div class="float-right flex gap"> | |
16 | + <div class="flex gap m-b"> | |
17 | + <label>등록일자</label> | |
18 | + <input type="date" value-format="yyyy-MM-dd" v-model="pagenation.startDate"/> | |
19 | + <span> ~ </span> | |
20 | + <input type="date" value-format="yyyy-MM-dd" v-model="pagenation.endDate"/> | |
21 | + </div> | |
22 | + <div class="flex gap"> | |
23 | + <select v-model="pagenation.searchType"> | |
24 | + <option value="null" disabled>검색조건</option> | |
25 | + <option value="user_nm">업체명</option> | |
26 | + <option value="api_key">API_KEY</option> | |
27 | + </select> | |
28 | + <input type="search" placeholder="검색어를 입력 해주세요." v-model="pagenation.searchValue" @keyup.enter="search"/> | |
29 | + <button type="button" class="green-btn" @click="search">검색</button> | |
30 | + </div> | |
31 | + </div> | |
32 | + </div> | |
33 | + <div style="min-height: 500px;background: #f7f6f6;"> | |
34 | + <table class="pc"> | |
35 | + <colgroup> | |
36 | + <col style="width: 5%;"> | |
37 | + <col style="width: 20%;"> | |
38 | + <col style="width: 10%;"> | |
39 | + <col style="width: 10%;"> | |
40 | + <col style="width: 15%;"> | |
41 | + <col style="width: 40%;"> | |
42 | + | |
43 | + </colgroup> | |
44 | + <thead> | |
45 | + <tr> | |
46 | + <th>No</th> | |
47 | + <th>노드ID(방향)</th> | |
48 | + <th>업체명</th> | |
49 | + <th>오류발생여부</th> | |
50 | + <th>호출시간</th> | |
51 | + <th>메세지</th> | |
52 | + | |
53 | + </tr> | |
54 | + </thead> | |
55 | + <tbody> | |
56 | + <tr v-for="(item, idx) in apiLogList" :key="idx"> | |
57 | + <td data-title="NO">{{ pagenation.totalRow - ((pagenation.currentPage ) * pagenation.perPage) + ( pagenation.perPage - idx) }}</td> | |
58 | + <td data-title="ID">{{ item.node_id }}({{change_code(item.crslk_az)}})</td> | |
59 | + <td data-title="이름">{{ item.user_nm }}</td> | |
60 | + <td data-title="오류발생여부">{{ item.err_yn }}</td> | |
61 | + <td data-titel="호출시간">{{ item.call_dt}}</td> | |
62 | + <td data-title="메세지">{{ item.msg }}</td> | |
63 | + </tr> | |
64 | + <tr v-if="apiLogList.length == 0"> | |
65 | + <td data-title="NO" colspan="6">조회된 데이터가 없습니다.</td> | |
66 | + </tr> | |
67 | + </tbody> | |
68 | + </table> | |
69 | + </div> | |
70 | + <div class="bottom-wrap"> | |
71 | + <PaginationButton | |
72 | + v-model:currentPage="pagenation.currentPage" | |
73 | + :per-page="pagenation.perPage" :total-count="pagenation.totalRow" :max-range="5" | |
74 | + :click="search" /> | |
75 | + </div> | |
76 | + </div> | |
77 | + </div> | |
78 | +</template> | |
79 | + | |
80 | +<script> | |
81 | +import axios from 'axios'; | |
82 | +import PaginationButton from '../../component/pagination/PaginationButton.vue'; | |
83 | +import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
84 | + | |
85 | +export default { | |
86 | + data: () => { | |
87 | + return { | |
88 | + pagenation: { | |
89 | + currentPage: 1, | |
90 | + perPage: 10, | |
91 | + searchType: null, | |
92 | + searchValue: null, | |
93 | + startDate : null, | |
94 | + endDate : null, | |
95 | + option1 : false, | |
96 | + totalRow : 0, | |
97 | + api_key : '', | |
98 | + node_id : '', | |
99 | + call_dt : null, | |
100 | + reg_dt : '', | |
101 | + err_yn : false, | |
102 | + msg : '', | |
103 | + }, | |
104 | + apiLogList: [], | |
105 | + userIdx: 0 | |
106 | + }; | |
107 | + }, | |
108 | + methods: { | |
109 | + //사용자 목록 조회 | |
110 | + search: function () { | |
111 | + const vm = this; | |
112 | + axios({ | |
113 | + url: '/getApiRequestLog.json', | |
114 | + method: 'post', | |
115 | + headers:{ | |
116 | + 'Content-Type': "application/json; charset=UTF-8", | |
117 | + }, | |
118 | + data: vm.pagenation | |
119 | + }).then(function(response) { | |
120 | + console.log("userSelectList - response : ", response.data); | |
121 | + vm.apiLogList = response.data.apiLogList; | |
122 | + vm.pagenation = response.data.pagenation; | |
123 | + }).catch(function (error) { | |
124 | + console.log("userSelectList - error : ", error); | |
125 | + alert('사용자 목록 조회 오류, 관리자에게 문의해주세요.'); | |
126 | + }) | |
127 | + }, | |
128 | + | |
129 | + // 전화번호 '-' 추가 후 출력 | |
130 | + HyphenMinus: function (telno) { | |
131 | + return COMMON_UTIL.HyphenMinus(telno); | |
132 | + }, | |
133 | + | |
134 | + //날짜 시,분,초 자르기 | |
135 | + yyyymmdd: function (date) { | |
136 | + return COMMON_UTIL.yyyymmdd(date); | |
137 | + }, | |
138 | + | |
139 | + change_code : function(v) | |
140 | + { | |
141 | + let result_val = '전체'; | |
142 | + | |
143 | + if(v==null) v = 0; | |
144 | + | |
145 | + if(v == 10){ | |
146 | + result_val = '북'; | |
147 | + }else if( v == 20){ | |
148 | + result_val = '동'; | |
149 | + }else if( v == 30){ | |
150 | + result_val = '남'; | |
151 | + }else if( v == 40){ | |
152 | + result_val = '서'; | |
153 | + }else if( v == 50){ | |
154 | + result_val = '북동'; | |
155 | + }else if( v == 60){ | |
156 | + result_val = '남동'; | |
157 | + }else if( v == 70){ | |
158 | + result_val = '남서'; | |
159 | + }else if( v == 80){ | |
160 | + result_val = '북서'; | |
161 | + } | |
162 | + return result_val; | |
163 | + } | |
164 | + }, | |
165 | + | |
166 | + watch: {}, | |
167 | + filters : { | |
168 | + crlsk : function(v){ | |
169 | + | |
170 | + console.log(value); | |
171 | + let result_val = '전체'; | |
172 | + if(v == 10){ | |
173 | + result_val = '북'; | |
174 | + }else if( v == 20){ | |
175 | + result_val = '동'; | |
176 | + }else if( v == 30){ | |
177 | + result_val = '남'; | |
178 | + }else if( v == 40){ | |
179 | + result_val = '서'; | |
180 | + }else if( v == 50){ | |
181 | + result_val = '북동'; | |
182 | + }else if( v == 60){ | |
183 | + result_val = '남동'; | |
184 | + }else if( v == 70){ | |
185 | + result_val = '남서'; | |
186 | + }else if( v == 80){ | |
187 | + result_val = '북서'; | |
188 | + } | |
189 | + return result_val; | |
190 | + } | |
191 | + }, | |
192 | + computed: {}, | |
193 | + components: { | |
194 | + 'PaginationButton':PaginationButton, | |
195 | + }, | |
196 | + mounted() { | |
197 | + this.search(); | |
198 | + }, | |
199 | +}; | |
200 | +</script> | |
201 | + | |
202 | +<style scoped> | |
203 | +@media all and (max-width: 479px) { | |
204 | + | |
205 | + .board-wrap{padding: 0 1rem;} | |
206 | + .float-right{display: flow-root; margin: 2rem 0 1rem 0} | |
207 | + .tab-wrap ul{justify-content: center} | |
208 | + .tab{width: 16rem !important;} | |
209 | + .wrap{width: -webkit-fill-available !important; margin: 20px auto !important;} | |
210 | +.mobile{display: block !important;} | |
211 | +.pc{display: none;} | |
212 | +} | |
213 | +.mobile{display: none;} | |
214 | +.wrap { | |
215 | + width: 155rem; | |
216 | + margin: 100px auto; | |
217 | +} | |
218 | + | |
219 | +.tab-wrap { | |
220 | + margin-bottom: 30px; | |
221 | +} | |
222 | + | |
223 | +.tab-wrap ul { | |
224 | + display: flex; | |
225 | + gap: 2rem; | |
226 | +} | |
227 | + | |
228 | +.tab { | |
229 | + display: inline-block; | |
230 | + width: 20rem; | |
231 | + height: 3rem; | |
232 | + line-height: 3rem; | |
233 | + text-align: center; | |
234 | + border-radius: 5px; | |
235 | + background: #fff; | |
236 | + color: #949292; | |
237 | + border: 1px solid #949292; | |
238 | +} | |
239 | + | |
240 | +.tab.active { | |
241 | + background: #13833b; | |
242 | + color: #fff; | |
243 | + border-color: #13833b; | |
244 | +} | |
245 | + | |
246 | +.search-wrap { | |
247 | + margin-bottom: 15px; | |
248 | +} | |
249 | + | |
250 | +.search-wrap input, | |
251 | +.search-wrap select { | |
252 | + height: 30.5px; | |
253 | + padding: 5px; | |
254 | + border-radius: 3px; | |
255 | + border: 1px solid #949292; | |
256 | +} | |
257 | + | |
258 | +.float-left { | |
259 | + float: left; | |
260 | + align-items: flex-start; | |
261 | +} | |
262 | + | |
263 | +.float-right { | |
264 | + float: right; | |
265 | + align-items: flex-start; | |
266 | +} | |
267 | + | |
268 | +.clear-fix::after { | |
269 | + content: ""; | |
270 | + display: block; | |
271 | + clear: both; | |
272 | +} | |
273 | + | |
274 | +.search-wrap .float-right form>*:not(:last-child) { | |
275 | + margin-right: 1rem; | |
276 | +} | |
277 | + | |
278 | +h2.page-title { | |
279 | + font-size: 24px; | |
280 | +} | |
281 | + | |
282 | +hr.margin { | |
283 | + margin: 30px 0; | |
284 | +} | |
285 | + | |
286 | +table { | |
287 | + width: 100%; | |
288 | + text-align: center; | |
289 | + border-collapse: collapse; | |
290 | +} | |
291 | + | |
292 | +th, | |
293 | +td { | |
294 | + border-left: none; | |
295 | + border-right: none; | |
296 | +} | |
297 | + | |
298 | +table th { | |
299 | + padding: 15px 0; | |
300 | + color: #fff; | |
301 | + background-color: #13833b; | |
302 | +} | |
303 | + | |
304 | +table td { | |
305 | + padding: 15px 0; | |
306 | + border-bottom: 1px solid #e5e5dd; | |
307 | +} | |
308 | + | |
309 | +table tr:nth-child(odd) { | |
310 | + background-color: #f7f6f6; | |
311 | +} | |
312 | + | |
313 | +table tr:nth-child(even) { | |
314 | + background-color: #fdfdf2; | |
315 | +} | |
316 | + | |
317 | +.bottom-wrap { | |
318 | + position: relative; | |
319 | + padding: 1rem 0; | |
320 | +} | |
321 | + | |
322 | +.pg-wrap { | |
323 | + text-align: center; | |
324 | +} | |
325 | + | |
326 | +.pg-item { | |
327 | + display: inline-block; | |
328 | + padding: 10px; | |
329 | + color: #949292; | |
330 | +} | |
331 | + | |
332 | +.pg-item.prev, | |
333 | +.pg-item.next, | |
334 | +.pg-item.active { | |
335 | + color: #13833b; | |
336 | +} | |
337 | + | |
338 | +.btn-2 { | |
339 | + display: inline-block; | |
340 | + padding: 0.3rem 2rem; | |
341 | + font-size: 13.333px; | |
342 | +} | |
343 | + | |
344 | +.green-btn { | |
345 | + background: #13833b; | |
346 | + border: 0; | |
347 | + border-radius: 5px; | |
348 | + color: #fff; | |
349 | + height: 30.5px; | |
350 | + padding: 5px; | |
351 | + width: 75px; | |
352 | +} | |
353 | + | |
354 | +.btn-wrap { | |
355 | + position: absolute; | |
356 | + right: 0; | |
357 | + top: 1.5em; | |
358 | + z-index: 10; | |
359 | +} | |
360 | +</style>(No newline at end of file) |
+++ client/views/pages/SystemManagement/ResponseLogView.vue
... | ... | @@ -0,0 +1,359 @@ |
1 | +<template> | |
2 | + <div class="wrap"> | |
3 | + <div class="board-wrap"> | |
4 | + <div> | |
5 | + <h2 class="page-title">데이터 발신로그</h2> | |
6 | + </div> | |
7 | + <hr class="margin"> | |
8 | + <div class="search-wrap clear-fix"> | |
9 | + <div class="float-left"> | |
10 | + <select v-model="pagenation.option1" @change="search"> | |
11 | + <option value="false">전체</option> | |
12 | + <option value="true"> 오류목록 </option> | |
13 | + </select> | |
14 | + </div> | |
15 | + <div class="float-right flex gap"> | |
16 | + <div class="flex gap m-b"> | |
17 | + <label>등록일자</label> | |
18 | + <input type="date" value-format="yyyy-MM-dd" v-model="pagenation.startDate"/> | |
19 | + <span> ~ </span> | |
20 | + <input type="date" value-format="yyyy-MM-dd" v-model="pagenation.endDate"/> | |
21 | + </div> | |
22 | + <div class="flex gap"> | |
23 | + <select v-model="pagenation.searchType"> | |
24 | + <option value="null" disabled>검색조건</option> | |
25 | + <option value="user_nm">업체명</option> | |
26 | + <option value="api_key">API_KEY</option> | |
27 | + </select> | |
28 | + <input type="search" placeholder="검색어를 입력 해주세요." v-model="pagenation.searchValue" @keyup.enter="search"/> | |
29 | + <button type="button" class="green-btn" @click="search">검색</button> | |
30 | + </div> | |
31 | + </div> | |
32 | + </div> | |
33 | + <div style="min-height: 500px;background: #f7f6f6;"> | |
34 | + <table class="pc"> | |
35 | + <colgroup> | |
36 | + <col style="width: 5%;"> | |
37 | + <col style="width: 20%;"> | |
38 | + <col style="width: 10%;"> | |
39 | + <col style="width: 10%;"> | |
40 | + <col style="width: 15%;"> | |
41 | + <col style="width: 40%;"> | |
42 | + | |
43 | + </colgroup> | |
44 | + <thead> | |
45 | + <tr> | |
46 | + <th>No</th> | |
47 | + <th>노드ID(방향)</th> | |
48 | + <th>업체명</th> | |
49 | + <th>오류발생여부</th> | |
50 | + <th>호출시간</th> | |
51 | + <th>메세지</th> | |
52 | + </tr> | |
53 | + </thead> | |
54 | + <tbody> | |
55 | + <tr v-for="(item, idx) in apiLogList" :key="idx"> | |
56 | + <td data-title="NO">{{ pagenation.totalRow - ((pagenation.currentPage ) * pagenation.perPage) + ( pagenation.perPage - idx) }}</td> | |
57 | + <td data-title="ID">{{ item.node_id }}({{change_code(item.crslk_az)}})</td> | |
58 | + <td data-title="이름">{{ item.user_nm }}</td> | |
59 | + <td data-title="오류발생여부">{{ item.err_yn }}</td> | |
60 | + <td data-titel="호출시간">{{ item.call_dt}}</td> | |
61 | + <td data-title="메세지">{{ item.msg }}</td> | |
62 | + </tr> | |
63 | + <tr v-if="apiLogList.length == 0"> | |
64 | + <td data-title="NO" colspan="6">조회된 데이터가 없습니다.</td> | |
65 | + </tr> | |
66 | + </tbody> | |
67 | + </table> | |
68 | + </div> | |
69 | + <div class="bottom-wrap"> | |
70 | + <PaginationButton | |
71 | + v-model:currentPage="pagenation.currentPage" | |
72 | + :per-page="pagenation.perPage" :total-count="pagenation.totalRow" :max-range="5" | |
73 | + :click="search" /> | |
74 | + </div> | |
75 | + </div> | |
76 | + </div> | |
77 | +</template> | |
78 | + | |
79 | +<script> | |
80 | +import axios from 'axios'; | |
81 | +import PaginationButton from '../../component/pagination/PaginationButton.vue'; | |
82 | +import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
83 | + | |
84 | +export default { | |
85 | + data: () => { | |
86 | + return { | |
87 | + pagenation: { | |
88 | + currentPage: 1, | |
89 | + perPage: 10, | |
90 | + searchType: null, | |
91 | + searchValue: null, | |
92 | + startDate : null, | |
93 | + endDate : null, | |
94 | + option1 : false, | |
95 | + totalRow : 0, | |
96 | + api_key : '', | |
97 | + node_id : '', | |
98 | + call_dt : null, | |
99 | + reg_dt : '', | |
100 | + err_yn : false, | |
101 | + msg : '', | |
102 | + }, | |
103 | + apiLogList: [], | |
104 | + userIdx: 0 | |
105 | + }; | |
106 | + }, | |
107 | + methods: { | |
108 | + //사용자 목록 조회 | |
109 | + search: function () { | |
110 | + const vm = this; | |
111 | + axios({ | |
112 | + url: '/getApiResponseLog.json', | |
113 | + method: 'post', | |
114 | + headers:{ | |
115 | + 'Content-Type': "application/json; charset=UTF-8", | |
116 | + }, | |
117 | + data: vm.pagenation | |
118 | + }).then(function(response) { | |
119 | + console.log("userSelectList - response : ", response.data); | |
120 | + vm.apiLogList = response.data.apiLogList; | |
121 | + vm.pagenation = response.data.pagenation; | |
122 | + }).catch(function (error) { | |
123 | + console.log("userSelectList - error : ", error); | |
124 | + alert('사용자 목록 조회 오류, 관리자에게 문의해주세요.'); | |
125 | + }) | |
126 | + }, | |
127 | + | |
128 | + // 전화번호 '-' 추가 후 출력 | |
129 | + HyphenMinus: function (telno) { | |
130 | + return COMMON_UTIL.HyphenMinus(telno); | |
131 | + }, | |
132 | + | |
133 | + //날짜 시,분,초 자르기 | |
134 | + yyyymmdd: function (date) { | |
135 | + return COMMON_UTIL.yyyymmdd(date); | |
136 | + }, | |
137 | + | |
138 | + change_code : function(v) | |
139 | + { | |
140 | + let result_val = '전체'; | |
141 | + | |
142 | + if(v==null) v = 0; | |
143 | + | |
144 | + if(v == 10){ | |
145 | + result_val = '북'; | |
146 | + }else if( v == 20){ | |
147 | + result_val = '동'; | |
148 | + }else if( v == 30){ | |
149 | + result_val = '남'; | |
150 | + }else if( v == 40){ | |
151 | + result_val = '서'; | |
152 | + }else if( v == 50){ | |
153 | + result_val = '북동'; | |
154 | + }else if( v == 60){ | |
155 | + result_val = '남동'; | |
156 | + }else if( v == 70){ | |
157 | + result_val = '남서'; | |
158 | + }else if( v == 80){ | |
159 | + result_val = '북서'; | |
160 | + } | |
161 | + return result_val; | |
162 | + } | |
163 | + }, | |
164 | + | |
165 | + watch: {}, | |
166 | + filters : { | |
167 | + crlsk : function(v){ | |
168 | + | |
169 | + console.log(value); | |
170 | + let result_val = '전체'; | |
171 | + if(v == 10){ | |
172 | + result_val = '북'; | |
173 | + }else if( v == 20){ | |
174 | + result_val = '동'; | |
175 | + }else if( v == 30){ | |
176 | + result_val = '남'; | |
177 | + }else if( v == 40){ | |
178 | + result_val = '서'; | |
179 | + }else if( v == 50){ | |
180 | + result_val = '북동'; | |
181 | + }else if( v == 60){ | |
182 | + result_val = '남동'; | |
183 | + }else if( v == 70){ | |
184 | + result_val = '남서'; | |
185 | + }else if( v == 80){ | |
186 | + result_val = '북서'; | |
187 | + } | |
188 | + return result_val; | |
189 | + } | |
190 | + }, | |
191 | + computed: {}, | |
192 | + components: { | |
193 | + 'PaginationButton':PaginationButton, | |
194 | + }, | |
195 | + mounted() { | |
196 | + this.search(); | |
197 | + }, | |
198 | +}; | |
199 | +</script> | |
200 | + | |
201 | +<style scoped> | |
202 | +@media all and (max-width: 479px) { | |
203 | + | |
204 | + .board-wrap{padding: 0 1rem;} | |
205 | + .float-right{display: flow-root; margin: 2rem 0 1rem 0} | |
206 | + .tab-wrap ul{justify-content: center} | |
207 | + .tab{width: 16rem !important;} | |
208 | + .wrap{width: -webkit-fill-available !important; margin: 20px auto !important;} | |
209 | +.mobile{display: block !important;} | |
210 | +.pc{display: none;} | |
211 | +} | |
212 | +.mobile{display: none;} | |
213 | +.wrap { | |
214 | + width: 155rem; | |
215 | + margin: 100px auto; | |
216 | +} | |
217 | + | |
218 | +.tab-wrap { | |
219 | + margin-bottom: 30px; | |
220 | +} | |
221 | + | |
222 | +.tab-wrap ul { | |
223 | + display: flex; | |
224 | + gap: 2rem; | |
225 | +} | |
226 | + | |
227 | +.tab { | |
228 | + display: inline-block; | |
229 | + width: 20rem; | |
230 | + height: 3rem; | |
231 | + line-height: 3rem; | |
232 | + text-align: center; | |
233 | + border-radius: 5px; | |
234 | + background: #fff; | |
235 | + color: #949292; | |
236 | + border: 1px solid #949292; | |
237 | +} | |
238 | + | |
239 | +.tab.active { | |
240 | + background: #13833b; | |
241 | + color: #fff; | |
242 | + border-color: #13833b; | |
243 | +} | |
244 | + | |
245 | +.search-wrap { | |
246 | + margin-bottom: 15px; | |
247 | +} | |
248 | + | |
249 | +.search-wrap input, | |
250 | +.search-wrap select { | |
251 | + height: 30.5px; | |
252 | + padding: 5px; | |
253 | + border-radius: 3px; | |
254 | + border: 1px solid #949292; | |
255 | +} | |
256 | + | |
257 | +.float-left { | |
258 | + float: left; | |
259 | + align-items: flex-start; | |
260 | +} | |
261 | + | |
262 | +.float-right { | |
263 | + float: right; | |
264 | + align-items: flex-start; | |
265 | +} | |
266 | + | |
267 | +.clear-fix::after { | |
268 | + content: ""; | |
269 | + display: block; | |
270 | + clear: both; | |
271 | +} | |
272 | + | |
273 | +.search-wrap .float-right form>*:not(:last-child) { | |
274 | + margin-right: 1rem; | |
275 | +} | |
276 | + | |
277 | +h2.page-title { | |
278 | + font-size: 24px; | |
279 | +} | |
280 | + | |
281 | +hr.margin { | |
282 | + margin: 30px 0; | |
283 | +} | |
284 | + | |
285 | +table { | |
286 | + width: 100%; | |
287 | + text-align: center; | |
288 | + border-collapse: collapse; | |
289 | +} | |
290 | + | |
291 | +th, | |
292 | +td { | |
293 | + border-left: none; | |
294 | + border-right: none; | |
295 | +} | |
296 | + | |
297 | +table th { | |
298 | + padding: 15px 0; | |
299 | + color: #fff; | |
300 | + background-color: #13833b; | |
301 | +} | |
302 | + | |
303 | +table td { | |
304 | + padding: 15px 0; | |
305 | + border-bottom: 1px solid #e5e5dd; | |
306 | +} | |
307 | + | |
308 | +table tr:nth-child(odd) { | |
309 | + background-color: #f7f6f6; | |
310 | +} | |
311 | + | |
312 | +table tr:nth-child(even) { | |
313 | + background-color: #fdfdf2; | |
314 | +} | |
315 | + | |
316 | +.bottom-wrap { | |
317 | + position: relative; | |
318 | + padding: 1rem 0; | |
319 | +} | |
320 | + | |
321 | +.pg-wrap { | |
322 | + text-align: center; | |
323 | +} | |
324 | + | |
325 | +.pg-item { | |
326 | + display: inline-block; | |
327 | + padding: 10px; | |
328 | + color: #949292; | |
329 | +} | |
330 | + | |
331 | +.pg-item.prev, | |
332 | +.pg-item.next, | |
333 | +.pg-item.active { | |
334 | + color: #13833b; | |
335 | +} | |
336 | + | |
337 | +.btn-2 { | |
338 | + display: inline-block; | |
339 | + padding: 0.3rem 2rem; | |
340 | + font-size: 13.333px; | |
341 | +} | |
342 | + | |
343 | +.green-btn { | |
344 | + background: #13833b; | |
345 | + border: 0; | |
346 | + border-radius: 5px; | |
347 | + color: #fff; | |
348 | + height: 30.5px; | |
349 | + padding: 5px; | |
350 | + width: 75px; | |
351 | +} | |
352 | + | |
353 | +.btn-wrap { | |
354 | + position: absolute; | |
355 | + right: 0; | |
356 | + top: 1.5em; | |
357 | + z-index: 10; | |
358 | +} | |
359 | +</style>(No newline at end of file) |
--- client/views/pages/SystemManagement/UserAddForm.vue
... | ... | @@ -1,408 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div class="tab-wrap"> | |
4 | - <ul> | |
5 | - <li> | |
6 | - <button class="tab active">사용자 관리</button> | |
7 | - </li> | |
8 | - <li> | |
9 | - <button @click="accessLogPage()" class="tab">접속기록 조회</button> | |
10 | - </li> | |
11 | - </ul> | |
12 | - </div> | |
13 | - <div> | |
14 | - <div> | |
15 | - <h2 class="page-title">사용자 등록</h2> | |
16 | - </div> | |
17 | - <hr class="margin"> | |
18 | - <div class="form-wrap"> | |
19 | - <div class="flex m-b"> | |
20 | - <span>아이디 : </span> | |
21 | - <input type="text" placeholder="ID" v-model="user.user_id"> | |
22 | - <button type="button" class="idchk green-btn" @click="idChcek">중복확인</button> | |
23 | - </div> | |
24 | - <div class="flex m-b"> | |
25 | - <span>비밀번호 : </span> | |
26 | - <input type="password" placeholder="Password" v-model="user.user_pw"> | |
27 | - </div> | |
28 | - <div class="flex m-b"> | |
29 | - <span>비밀번호 확인 : </span> | |
30 | - <input type="password" placeholder="Confirm Password" v-model="passwordCheck"> | |
31 | - </div> | |
32 | - <div class="flex m-b"> | |
33 | - <span>이름 : </span> | |
34 | - <input type="text" placeholder="Name" v-model="user.user_nm"> | |
35 | - </div> | |
36 | - <div class="flex m-b"> | |
37 | - <span>전화번호 : </span> | |
38 | - <input type="text" placeholder=" '-' 을 제외하고 입력해주세요." maxlength="13" v-model="user.user_telno" @change="phoneCheck" @keyup="getPhoneMask(user.user_telno)"> | |
39 | - <p style="color:red" v-if="telno_boolean === false"> 전화번호 9~11자리를 입력해주세요.</p> | |
40 | - </div> | |
41 | - <div class="flex m-b"> | |
42 | - <span>이메일 : </span> | |
43 | - <input type="text" placeholder=" 예) [email protected]" v-model="user.user_eml" @change="emailCheck"> | |
44 | - <p style="color:red" v-if="email_boolean === false"> 잘못된 이메일 형식입니다.</p> | |
45 | - </div> | |
46 | - <div class="flex m-b"> | |
47 | - <span>관리구역 : </span> | |
48 | - <dongSelectList @setDongCd="setDongCd" :nodeHiddenCk="true" :azimuthHiddenCk="true"></dongSelectList> | |
49 | - </div> | |
50 | - <div class="flex m-b"> | |
51 | - <span>비고 : </span> | |
52 | - <input type="text" placeholder="참고사항을 입력해주세요." v-model="user.rm"> | |
53 | - </div> | |
54 | - <div class="flex m-b"> | |
55 | - <span>권한 : </span> | |
56 | - <label for="radio_1"> | |
57 | - <input type="radio" name="radio" id="radio_1" value="시청관리자" v-model="user.user_author"> | |
58 | - 시청관리자 | |
59 | - </label> | |
60 | - <label for="radio_2"> | |
61 | - <input type="radio" name="radio" id="radio_2" value="지자체관리자" v-model="user.user_author"> | |
62 | - 지자체관리자 | |
63 | - </label> | |
64 | - </div> | |
65 | - | |
66 | - <div class="btn-wrap"> | |
67 | - <button type="button" class="green-btn" @click="userInsertCheck">등록</button> | |
68 | - <span class="btn-2 gray-btn" @click="userSelectListPage()">취소</span> | |
69 | - </div> | |
70 | - </div> | |
71 | - </div> | |
72 | - </div> | |
73 | - | |
74 | - <div class="modal-wrap" v-if="modal_insert == true"> | |
75 | - <div class="modal-bg"> | |
76 | - </div> | |
77 | - <div class="modal"> | |
78 | - <p>사용자를 <span class="txt-point">등록</span>하시겠습니까?</p> | |
79 | - <div class="btn-wrap"> | |
80 | - <button type="button" class="green-btn" @click="userInsert">확인</button> | |
81 | - <button type="button" class="gray-btn" @click="modal_insert = false">취소</button> | |
82 | - </div> | |
83 | - </div> | |
84 | - </div> | |
85 | -</template> | |
86 | - | |
87 | -<script> | |
88 | -import axios from 'axios'; | |
89 | -import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
90 | -import dongSelectList from '../../component/dongSelectList.vue'; | |
91 | - | |
92 | -export default { | |
93 | - data: () => { | |
94 | - return { | |
95 | - user: { | |
96 | - user_id: null, | |
97 | - user_pw: null, | |
98 | - user_nm: null, | |
99 | - user_telno: null, | |
100 | - user_eml: null, | |
101 | - user_author: null, | |
102 | - dong_cd: null, | |
103 | - rm: null | |
104 | - }, | |
105 | - passwordCheck: null, | |
106 | - passwordCheckFlag: null, | |
107 | - telno_boolean: true, | |
108 | - email_boolean: true, | |
109 | - idChcek_boolean: false, | |
110 | - telno: null, | |
111 | - modal_insert: false, | |
112 | - | |
113 | - //관리구역 행동코드 | |
114 | - address: {} | |
115 | - }; | |
116 | - }, | |
117 | - methods: { | |
118 | - | |
119 | - //ID 중복 검사 | |
120 | - idChcek: function() { | |
121 | - const vm = this; | |
122 | - axios({ | |
123 | - url: '/user/userSelectOne.json', | |
124 | - method: 'post', | |
125 | - herders: { | |
126 | - 'Content-Type': "application/json; charset=UTF-8", | |
127 | - }, | |
128 | - data: vm.user | |
129 | - }).then( function (response) { | |
130 | - console.log("idCheck - response : ", response.data); | |
131 | - if(response.data != null) { | |
132 | - alert("중복된 ID 입니다."); | |
133 | - vm.idChcek_boolean = false; | |
134 | - return false; | |
135 | - } else { | |
136 | - alert("사용가능한 ID 입니다."); | |
137 | - vm.idChcek_boolean = true; | |
138 | - return true; | |
139 | - } | |
140 | - }).catch( function (error) { | |
141 | - console.log("idCheck - error : ", error); | |
142 | - alert("중복검사 오류, 다시 시도해주세요."); | |
143 | - vm.idChcek_boolean = false; | |
144 | - }); | |
145 | - }, | |
146 | - | |
147 | - //전화번호 입력 시 자동 '-' 삽입 | |
148 | - getPhoneMask: function(telNumber) { | |
149 | - var res = COMMON_UTIL.getMask(telNumber) | |
150 | - this.user.user_telno = res | |
151 | - }, | |
152 | - | |
153 | - emailCheck: function() { | |
154 | - this.email_boolean = true; | |
155 | - | |
156 | - if (COMMON_UTIL.checkEmail(this.user.user_eml) === false) | |
157 | - this.email_boolean = false; | |
158 | - }, | |
159 | - | |
160 | - phoneCheck: function() { | |
161 | - this.telno_boolean = true; | |
162 | - | |
163 | - if (COMMON_UTIL.checkPhone(this.user.user_telno) === false) | |
164 | - this.telno_boolean = false; | |
165 | - }, | |
166 | - | |
167 | - // 등록버튼 클릭 시 빈칸 검사 | |
168 | - userInsertCheck: function() { | |
169 | - if (COMMON_UTIL.isEmpty(this.user.user_id) === false) { | |
170 | - alert('ID를 입력해주세요.'); | |
171 | - return false; | |
172 | - } | |
173 | - | |
174 | - if (this.idChcek_boolean === false) { | |
175 | - alert("ID중복검사를 완료해주세요.") | |
176 | - return false; | |
177 | - } | |
178 | - | |
179 | - if (COMMON_UTIL.isEmpty(this.user.user_pw) === false) { | |
180 | - alert('비밀번호를 입력해주세요.'); | |
181 | - return false; | |
182 | - } | |
183 | - | |
184 | - if (COMMON_UTIL.checkPassword(this.user.user_pw, this.passwordCheck) === false) { | |
185 | - alert('비밀번호가 일치하지 않습니다.'); | |
186 | - return false; | |
187 | - } | |
188 | - | |
189 | - if (COMMON_UTIL.isEmpty(this.user.user_nm) === false) { | |
190 | - alert('이름을 입력해주세요.'); | |
191 | - return false; | |
192 | - } | |
193 | - | |
194 | - if (COMMON_UTIL.isEmpty(this.user.user_telno) === false) { | |
195 | - alert('전화번호를 입력해주세요.'); | |
196 | - return false; | |
197 | - } | |
198 | - | |
199 | - if (COMMON_UTIL.checkPhone(this.user.user_telno) === false) { | |
200 | - alert('전화번호 형식을 확인해주세요.'); | |
201 | - return false; | |
202 | - } | |
203 | - | |
204 | - if (COMMON_UTIL.isEmpty(this.user.user_eml) === false) { | |
205 | - alert('이메일을 입력해주세요.'); | |
206 | - return false; | |
207 | - } | |
208 | - | |
209 | - if (COMMON_UTIL.checkEmail(this.user.user_eml) === false) { | |
210 | - alert('이메일 형식을 확인해주세요.'); | |
211 | - return false; | |
212 | - } | |
213 | - | |
214 | - if (COMMON_UTIL.isEmpty(this.address.siDo_dong_cd) === false) { | |
215 | - alert('관리구역을 선택해주세요.'); | |
216 | - return false; | |
217 | - } | |
218 | - | |
219 | - if (COMMON_UTIL.isEmpty(this.user.user_author) === false) { | |
220 | - alert('권한을 선택해주세요.'); | |
221 | - return false; | |
222 | - } | |
223 | - this.modal_insert = true | |
224 | - }, | |
225 | - | |
226 | - // 사용자 등록 | |
227 | - userInsert: function() { | |
228 | - const vm = this; | |
229 | - //서버 전송 값에는 '-' 를 제외하고 숫자만 저장 | |
230 | - vm.user.user_telno = vm.user.user_telno.replace(/[^0-9]/g, ''); | |
231 | - vm.user.dong_cd = vm.address.dong_cd; | |
232 | - axios({ | |
233 | - url: '/user/userInsert.json', | |
234 | - method: 'post', | |
235 | - herders: { | |
236 | - 'Content-Type': "application/json; charset=UTF-8", | |
237 | - }, | |
238 | - data: vm.user | |
239 | - }).then(function (response) { | |
240 | - console.log("userInsert - response : ", response); | |
241 | - let result = response.data; | |
242 | - if (result > 0) { | |
243 | - alert("사용자 등록을 완료 하였습니다."); | |
244 | - vm.userSelectListPage(); | |
245 | - } else { | |
246 | - alert("등록 실패, 관리자에게 문의해주세요."); | |
247 | - vm.modal_insert = false; | |
248 | - } | |
249 | - }).catch(function (error) { | |
250 | - console.log("userInsert - error : ", error); | |
251 | - alert("사용자 등록 오류, 관리자에게 문의해주세요."); | |
252 | - vm.modal_insert = false; | |
253 | - }) | |
254 | - }, | |
255 | - | |
256 | - //사용자 목록 페이지 이동 | |
257 | - userSelectListPage: function () { | |
258 | - this.$router.push({ path: '/UserManagement.page'}); | |
259 | - }, | |
260 | - | |
261 | - //접속기록조회 페이지 이동 | |
262 | - accessLogPage: function () { | |
263 | - this.$router.push({ path: '/AccessRecord.page'}); | |
264 | - }, | |
265 | - | |
266 | - setDongCd(value) { | |
267 | - this.address = value; | |
268 | - }, | |
269 | - }, | |
270 | - watch: {}, | |
271 | - computed: {}, | |
272 | - components: { | |
273 | - dongSelectList: dongSelectList | |
274 | - }, | |
275 | - mounted() { | |
276 | - console.log("Main4 mounted"); | |
277 | - }, | |
278 | -}; | |
279 | -</script> | |
280 | - | |
281 | -<style scoped> | |
282 | -.wrap { | |
283 | - width: 155rem; | |
284 | - margin: 100px auto; | |
285 | -} | |
286 | - | |
287 | -.tab-wrap { | |
288 | - margin-bottom: 30px; | |
289 | -} | |
290 | - | |
291 | -.tab-wrap ul { | |
292 | - display: flex; | |
293 | - gap: 2rem; | |
294 | -} | |
295 | - | |
296 | -.tab { | |
297 | - display: inline-block; | |
298 | - width: 20rem; | |
299 | - height: 3rem; | |
300 | - line-height: 3rem; | |
301 | - text-align: center; | |
302 | - border-radius: 5px; | |
303 | - background: #fff; | |
304 | - color: #949292; | |
305 | - border: 1px solid #949292; | |
306 | -} | |
307 | - | |
308 | -.tab.active { | |
309 | - background: #13833b; | |
310 | - color: #fff; | |
311 | - border-color: #13833b; | |
312 | -} | |
313 | - | |
314 | -h2.page-title { | |
315 | - font-size: 24px; | |
316 | -} | |
317 | - | |
318 | -hr.margin { | |
319 | - margin: 30px 0; | |
320 | -} | |
321 | - | |
322 | -.form-wrap { | |
323 | - width: 52rem; | |
324 | - margin: 0 auto; | |
325 | -} | |
326 | - | |
327 | -.idchk { | |
328 | - margin-left: 1rem; | |
329 | -} | |
330 | - | |
331 | -.btn-wrap { | |
332 | - margin-top: 30px; | |
333 | - text-align: center; | |
334 | -} | |
335 | - | |
336 | -.btn-2 { | |
337 | - display: inline-block; | |
338 | - padding: 0.3rem 2rem; | |
339 | - font-size: 13.333px; | |
340 | - color: #000; | |
341 | -} | |
342 | - | |
343 | -.btn-wrap>*:not(:last-child) { | |
344 | - margin-right: 2rem; | |
345 | -} | |
346 | - | |
347 | -.form-wrap .flex span { | |
348 | - display: inline-block; | |
349 | - width: 10rem; | |
350 | - padding: 0 5px; | |
351 | -} | |
352 | - | |
353 | -.form-wrap input:not([type="radio"]) { | |
354 | - min-width: 30rem; | |
355 | -} | |
356 | - | |
357 | -.form-wrap select { | |
358 | - min-width: 9rem; | |
359 | -} | |
360 | - | |
361 | -.form-wrap select:not(:last-child) { | |
362 | - margin-right: 1.5rem; | |
363 | -} | |
364 | - | |
365 | -.form-wrap input[type="radio"] { | |
366 | - vertical-align: middle; | |
367 | -} | |
368 | - | |
369 | -.form-wrap label:not(:last-child) { | |
370 | - margin-right: 2rem; | |
371 | -} | |
372 | - | |
373 | -.modal-wrap { | |
374 | - position: fixed; | |
375 | - top: 0; | |
376 | - left: 0; | |
377 | - right: 0; | |
378 | - bottom: 0; | |
379 | -} | |
380 | - | |
381 | -.modal-bg { | |
382 | - position: absolute; | |
383 | - width: 100%; | |
384 | - height: 100%; | |
385 | - background-color: rgba(0, 0, 0, .6); | |
386 | -} | |
387 | - | |
388 | -.modal { | |
389 | - position: absolute; | |
390 | - top: 50%; | |
391 | - left: 50%; | |
392 | - transform: translate(-50%, -50%); | |
393 | - max-width: 350px; | |
394 | - padding: 5rem; | |
395 | - z-index: 2; | |
396 | - background-color: #fff; | |
397 | - border-radius: 1rem; | |
398 | - text-align: center; | |
399 | -} | |
400 | - | |
401 | -.modal .btn-wrap { | |
402 | - margin-top: 15px; | |
403 | - text-align: center; | |
404 | -} | |
405 | -.txt-point { | |
406 | - color: #13833b; | |
407 | -} | |
408 | -</style>(No newline at end of file) |
--- client/views/pages/SystemManagement/UserManagement.vue
+++ client/views/pages/SystemManagement/UserManagement.vue
... | ... | @@ -1,140 +1,74 @@ |
1 | 1 |
<template> |
2 |
- <div class="wrap"> |
|
3 |
- <div class="tab-wrap"> |
|
4 |
- <ul> |
|
5 |
- <li> |
|
6 |
- <button class="tab active">사용자 관리</button> |
|
7 |
- </li> |
|
8 |
- <li> |
|
9 |
- <button @click="accessLogPage()" class="tab">접속기록 조회</button> |
|
10 |
- </li> |
|
11 |
- </ul> |
|
12 |
- </div> |
|
2 |
+ <div class="wrap"> |
|
13 | 3 |
<div class="board-wrap"> |
14 | 4 |
<div> |
15 |
- <h2 class="page-title">사용자 관리</h2> |
|
5 |
+ <h2 class="page-title">데이터 수집로그</h2> |
|
16 | 6 |
</div> |
17 | 7 |
<hr class="margin"> |
18 | 8 |
<div class="search-wrap clear-fix"> |
19 | 9 |
<div class="float-left"> |
20 |
- <select v-model="userListSearch.authorFilter" @change="userSelectList"> |
|
21 |
- <option value="null" disabled>권한필터</option> |
|
22 |
- <option value="시청관리자">시청관리자</option> |
|
23 |
- <option value="지자체관리자">지자체관리자</option> |
|
10 |
+ <select v-model="pagenation.option1" @change="search"> |
|
11 |
+ <option value="false">전체</option> |
|
12 |
+ <option value="true"> 오류목록 </option> |
|
24 | 13 |
</select> |
25 | 14 |
</div> |
26 | 15 |
<div class="float-right flex gap"> |
27 | 16 |
<div class="flex gap m-b"> |
28 | 17 |
<label>등록일자</label> |
29 |
- <input type="date" value-format="yyyyMMdd" v-model="userListSearch.startDate"/> |
|
18 |
+ <input type="date" value-format="yyyy-MM-dd" v-model="pagenation.startDate"/> |
|
30 | 19 |
<span> ~ </span> |
31 |
- <input type="date" value-format="yyyyMMdd" v-model="userListSearch.endDate"/> |
|
20 |
+ <input type="date" value-format="yyyy-MM-dd" v-model="pagenation.endDate"/> |
|
32 | 21 |
</div> |
33 | 22 |
<div class="flex gap"> |
34 |
- <select v-model="userListSearch.searchType"> |
|
23 |
+ <select v-model="pagenation.searchType"> |
|
35 | 24 |
<option value="null" disabled>검색조건</option> |
36 |
- <option value="user_id">ID</option> |
|
37 |
- <option value="user_nm">이름</option> |
|
38 |
- <option value="dong_cd">관리구역</option> |
|
25 |
+ <option value="user_nm">업체명</option> |
|
26 |
+ <option value="api_key">API_KEY</option> |
|
39 | 27 |
</select> |
40 |
- <input type="search" placeholder="검색어를 입력 해주세요." v-model="userListSearch.searchText" @keyup.enter="userSelectList"/> |
|
41 |
- <button type="button" class="green-btn" @click="userSelectList">검색</button> |
|
28 |
+ <input type="search" placeholder="검색어를 입력 해주세요." v-model="pagenation.searchValue" @keyup.enter="search"/> |
|
29 |
+ <button type="button" class="green-btn" @click="search">검색</button> |
|
42 | 30 |
</div> |
43 | 31 |
</div> |
44 | 32 |
</div> |
45 |
- <div> |
|
33 |
+ <div style="min-height: 500px;background: #f7f6f6;"> |
|
46 | 34 |
<table class="pc"> |
47 | 35 |
<colgroup> |
48 | 36 |
<col style="width: 5%;"> |
49 |
- <col style="width: 15%;"> |
|
50 |
- <col style="width: 15%;"> |
|
51 |
- <col style="width: 15%;"> |
|
52 |
- <col style="width: 15%;"> |
|
37 |
+ <col style="width: 20%;"> |
|
53 | 38 |
<col style="width: 10%;"> |
54 |
- <col style="width: 15%;"> |
|
55 | 39 |
<col style="width: 10%;"> |
40 |
+ <col style="width: 15%;"> |
|
41 |
+ <col style="width: 40%;"> |
|
42 |
+ |
|
56 | 43 |
</colgroup> |
57 | 44 |
<thead> |
58 | 45 |
<tr> |
59 | 46 |
<th>No</th> |
60 |
- <th>ID</th> |
|
61 |
- <th>이름</th> |
|
62 |
- <th>권한</th> |
|
63 |
- <th>전화번호</th> |
|
64 |
- <th>관리구역</th> |
|
65 |
- <th>등록일자</th> |
|
66 |
- <th>비고</th> |
|
47 |
+ <th>노드ID(방향)</th> |
|
48 |
+ <th>업체명</th> |
|
49 |
+ <th>오류발생여부</th> |
|
50 |
+ <th>호출시간</th> |
|
51 |
+ <th>메세지</th> |
|
52 |
+ |
|
67 | 53 |
</tr> |
68 | 54 |
</thead> |
69 | 55 |
<tbody> |
70 |
- <tr v-for="(item, idx) in userList" :key="idx" @click="userSelectOnePage(item)"> |
|
71 |
- <td data-title="NO">{{ userIdx - idx }}</td> |
|
72 |
- <td data-title="ID">{{ item.user_id }}</td> |
|
56 |
+ <tr v-for="(item, idx) in apiLogList" :key="idx"> |
|
57 |
+ <td data-title="NO">{{ idx }}</td> |
|
58 |
+ <td data-title="ID">{{ item.node_id }}({{change_code(item.crslk_az)}})</td> |
|
73 | 59 |
<td data-title="이름">{{ item.user_nm }}</td> |
74 |
- <td data-title="권한">{{ item.user_author }}</td> |
|
75 |
- <td data-title="전화번호">{{ HyphenMinus(item.user_telno) }}</td> |
|
76 |
- <td data-titel="관리구역">{{ item.sido_nm + " " + item.sigungu_nm + " " + item.dong_nm }}</td> |
|
77 |
- <td data-titel="등록일자">{{ yyyymmdd(item.reg_dt) }}</td> |
|
78 |
- <td data-totel="비고">{{ item.rm }}</td> |
|
60 |
+ <td data-title="오류발생여부">{{ item.err_yn }}</td> |
|
61 |
+ <td data-titel="호출시간">{{ item.call_dt}}</td> |
|
62 |
+ <td data-title="메세지">{{ item.msg }}</td> |
|
79 | 63 |
</tr> |
80 | 64 |
</tbody> |
81 |
- </table> |
|
82 |
- <table class="mobile"> |
|
83 |
- <colgroup> |
|
84 |
- <col style="width: 10%;"> |
|
85 |
- <col style="width: 20%;"> |
|
86 |
- </colgroup> |
|
87 |
- <tbody |
|
88 |
- v-for="(item, idx) in userList" |
|
89 |
- :key="idx" |
|
90 |
- @click="userSelectOnePage(item)" |
|
91 |
- > |
|
92 |
- <tr> |
|
93 |
- <th>No</th> |
|
94 |
- <td data-title="NO">{{ idx + 1 }}</td> |
|
95 |
- </tr> |
|
96 |
- <tr> |
|
97 |
- <th>ID</th> |
|
98 |
- <td data-title="ID">{{ item.user_id }}</td> |
|
99 |
- </tr> |
|
100 |
- <tr> |
|
101 |
- <th>이름</th> |
|
102 |
- <td data-title="이름">{{ item.user_nm }}</td> |
|
103 |
- </tr> |
|
104 |
- <tr> |
|
105 |
- <th>권한</th> |
|
106 |
- <td data-title="권한">{{ item.user_author }}</td> |
|
107 |
- </tr> |
|
108 |
- <tr> |
|
109 |
- <th>전화번호</th> |
|
110 |
- <td data-title="전화번호"> |
|
111 |
- {{ HyphenMinus(item.user_telno) }} |
|
112 |
- </td> |
|
113 |
- </tr> |
|
114 |
- <tr> |
|
115 |
- <th>관리구역</th> |
|
116 |
- <td data-titel="관리구역">{{ item.sido_nm + " " + item.sigungu_nm + " " + item.dong_nm }}</td> |
|
117 |
- </tr> |
|
118 |
- <tr> |
|
119 |
- <th>등록일자</th> |
|
120 |
- <td data-titel="등록일자">{{ yyyymmdd(item.reg_dt) }}</td> |
|
121 |
- </tr> |
|
122 |
- <tr> |
|
123 |
- <th>비고</th> |
|
124 |
- <td data-totel="비고">{{ item.rm }}</td> |
|
125 |
- </tr> |
|
126 |
- <hr class="margin2 m-b" /> |
|
127 |
- </tbody> |
|
128 |
- </table> |
|
65 |
+ </table> |
|
129 | 66 |
</div> |
130 | 67 |
<div class="bottom-wrap"> |
131 | 68 |
<PaginationButton |
132 |
- v-model:currentPage="userListSearch.currentPage" |
|
133 |
- :per-page="userListSearch.perPage" :total-count="userListCount" :max-range="5" |
|
134 |
- :click="userSelectList" /> |
|
135 |
- <div class="btn-wrap"> |
|
136 |
- <button @click="userInsertPage" class="btn-2 green-btn">등록</button> |
|
137 |
- </div> |
|
69 |
+ v-model:currentPage="pagenation.currentPage" |
|
70 |
+ :per-page="pagenation.perPage" :total-count="pagenation.totalRow" :max-range="5" |
|
71 |
+ :click="search" /> |
|
138 | 72 |
</div> |
139 | 73 |
</div> |
140 | 74 |
</div> |
... | ... | @@ -148,37 +82,41 @@ |
148 | 82 |
export default { |
149 | 83 |
data: () => { |
150 | 84 |
return { |
151 |
- userListSearch: { |
|
85 |
+ pagenation: { |
|
152 | 86 |
currentPage: 1, |
153 | 87 |
perPage: 10, |
154 |
- authorFilter: null, |
|
155 | 88 |
searchType: null, |
156 |
- searchText: null, |
|
157 |
- startDate: null, |
|
158 |
- endDate: null |
|
159 |
- }, |
|
160 |
- dong_fullName: null, |
|
161 |
- userListCount: 0, |
|
162 |
- userList: [], |
|
89 |
+ searchValue: null, |
|
90 |
+ startDate : null, |
|
91 |
+ endDate : null, |
|
92 |
+ option1 : false, |
|
93 |
+ totalRow : 0, |
|
94 |
+ api_key : '', |
|
95 |
+ node_id : '', |
|
96 |
+ call_dt : null, |
|
97 |
+ reg_dt : '', |
|
98 |
+ err_yn : false, |
|
99 |
+ msg : '', |
|
100 |
+ }, |
|
101 |
+ apiLogList: [], |
|
163 | 102 |
userIdx: 0 |
164 | 103 |
}; |
165 | 104 |
}, |
166 | 105 |
methods: { |
167 | 106 |
//사용자 목록 조회 |
168 |
- userSelectList: function () { |
|
107 |
+ search: function () { |
|
169 | 108 |
const vm = this; |
170 | 109 |
axios({ |
171 |
- url: '/user/userSelectList.json', |
|
110 |
+ url: '/getApiResponseLog.json', |
|
172 | 111 |
method: 'post', |
173 | 112 |
headers:{ |
174 | 113 |
'Content-Type': "application/json; charset=UTF-8", |
175 | 114 |
}, |
176 |
- data: vm.userListSearch |
|
115 |
+ data: vm.pagenation |
|
177 | 116 |
}).then(function(response) { |
178 | 117 |
console.log("userSelectList - response : ", response.data); |
179 |
- vm.userListCount = response.data.userListCount; |
|
180 |
- vm.userList = response.data.userList; |
|
181 |
- vm.userIdx = vm.userListCount-(vm.userListSearch.currentPage-1)*vm.userList.length; |
|
118 |
+ vm.apiLogList = response.data.apiLogList; |
|
119 |
+ vm.pagenation = response.data.pagenation; |
|
182 | 120 |
}).catch(function (error) { |
183 | 121 |
console.log("userSelectList - error : ", error); |
184 | 122 |
alert('사용자 목록 조회 오류, 관리자에게 문의해주세요.'); |
... | ... | @@ -195,30 +133,65 @@ |
195 | 133 |
return COMMON_UTIL.yyyymmdd(date); |
196 | 134 |
}, |
197 | 135 |
|
198 |
- //접속기록조회 페이지 이동 |
|
199 |
- accessLogPage: function () { |
|
200 |
- this.$router.push({ path: '/AccessRecord.page'}); |
|
201 |
- }, |
|
136 |
+ change_code : function(v) |
|
137 |
+ { |
|
138 |
+ let result_val = '전체'; |
|
202 | 139 |
|
203 |
- //사용자 상세조회 페이지 이동 |
|
204 |
- userSelectOnePage: function(user) { |
|
205 |
- this.$router.push({ path: '/UserModifyForm.page', query: {'user_id':user.user_id}}); |
|
206 |
- }, |
|
140 |
+ if(v==null) v = 0; |
|
207 | 141 |
|
208 |
- //사용자 등록 페이지 이동 |
|
209 |
- userInsertPage: function() { |
|
210 |
- this.$router.push({path: '/UserAddForm.page'}); |
|
211 |
- } |
|
212 |
- }, |
|
142 |
+ if(v == 10){ |
|
143 |
+ result_val = '북'; |
|
144 |
+ }else if( v == 20){ |
|
145 |
+ result_val = '동'; |
|
146 |
+ }else if( v == 30){ |
|
147 |
+ result_val = '남'; |
|
148 |
+ }else if( v == 40){ |
|
149 |
+ result_val = '서'; |
|
150 |
+ }else if( v == 50){ |
|
151 |
+ result_val = '북동'; |
|
152 |
+ }else if( v == 60){ |
|
153 |
+ result_val = '남동'; |
|
154 |
+ }else if( v == 70){ |
|
155 |
+ result_val = '남서'; |
|
156 |
+ }else if( v == 80){ |
|
157 |
+ result_val = '북서'; |
|
158 |
+ } |
|
159 |
+ return result_val; |
|
160 |
+ } |
|
161 |
+ }, |
|
213 | 162 |
|
214 | 163 |
watch: {}, |
164 |
+ filters : { |
|
165 |
+ crlsk : function(v){ |
|
166 |
+ |
|
167 |
+ console.log(value); |
|
168 |
+ let result_val = '전체'; |
|
169 |
+ if(v == 10){ |
|
170 |
+ result_val = '북'; |
|
171 |
+ }else if( v == 20){ |
|
172 |
+ result_val = '동'; |
|
173 |
+ }else if( v == 30){ |
|
174 |
+ result_val = '남'; |
|
175 |
+ }else if( v == 40){ |
|
176 |
+ result_val = '서'; |
|
177 |
+ }else if( v == 50){ |
|
178 |
+ result_val = '북동'; |
|
179 |
+ }else if( v == 60){ |
|
180 |
+ result_val = '남동'; |
|
181 |
+ }else if( v == 70){ |
|
182 |
+ result_val = '남서'; |
|
183 |
+ }else if( v == 80){ |
|
184 |
+ result_val = '북서'; |
|
185 |
+ } |
|
186 |
+ return result_val; |
|
187 |
+ } |
|
188 |
+ }, |
|
215 | 189 |
computed: {}, |
216 | 190 |
components: { |
217 | 191 |
'PaginationButton':PaginationButton, |
218 | 192 |
}, |
219 |
- mounted() { |
|
220 |
- console.log("UserManageMent Join"); |
|
221 |
- this.userSelectList(); |
|
193 |
+ mounted() { |
|
194 |
+ this.search(); |
|
222 | 195 |
}, |
223 | 196 |
}; |
224 | 197 |
</script> |
... | ... | @@ -268,22 +241,25 @@ |
268 | 241 |
} |
269 | 242 |
|
270 | 243 |
.search-wrap { |
271 |
- margin-bottom: 30px; |
|
244 |
+ margin-bottom: 15px; |
|
272 | 245 |
} |
273 | 246 |
|
274 | 247 |
.search-wrap input, |
275 | 248 |
.search-wrap select { |
276 |
- height: 22.5px; |
|
249 |
+ height: 30.5px; |
|
250 |
+ padding: 5px; |
|
277 | 251 |
border-radius: 3px; |
278 | 252 |
border: 1px solid #949292; |
279 | 253 |
} |
280 | 254 |
|
281 | 255 |
.float-left { |
282 | 256 |
float: left; |
257 |
+ align-items: flex-start; |
|
283 | 258 |
} |
284 | 259 |
|
285 | 260 |
.float-right { |
286 | 261 |
float: right; |
262 |
+ align-items: flex-start; |
|
287 | 263 |
} |
288 | 264 |
|
289 | 265 |
.clear-fix::after { |
... | ... | @@ -323,7 +299,7 @@ |
323 | 299 |
} |
324 | 300 |
|
325 | 301 |
table td { |
326 |
- padding: 10px 0; |
|
302 |
+ padding: 15px 0; |
|
327 | 303 |
border-bottom: 1px solid #e5e5dd; |
328 | 304 |
} |
329 | 305 |
|
... | ... | @@ -362,6 +338,16 @@ |
362 | 338 |
font-size: 13.333px; |
363 | 339 |
} |
364 | 340 |
|
341 |
+.green-btn { |
|
342 |
+ background: #13833b; |
|
343 |
+ border: 0; |
|
344 |
+ border-radius: 5px; |
|
345 |
+ color: #fff; |
|
346 |
+ height: 30.5px; |
|
347 |
+ padding: 5px; |
|
348 |
+ width: 75px; |
|
349 |
+} |
|
350 |
+ |
|
365 | 351 |
.btn-wrap { |
366 | 352 |
position: absolute; |
367 | 353 |
right: 0; |
--- client/views/pages/SystemManagement/UserModifyForm.vue
... | ... | @@ -1,442 +0,0 @@ |
1 | -<template> | |
2 | - <div class="wrap"> | |
3 | - <div class="tab-wrap"> | |
4 | - <ul> | |
5 | - <li> | |
6 | - <button class="tab active">사용자 관리</button> | |
7 | - </li> | |
8 | - <li> | |
9 | - <button @click="accessLogPage()" class="tab">접속기록 조회</button> | |
10 | - </li> | |
11 | - </ul> | |
12 | - </div> | |
13 | - <div> | |
14 | - <div> | |
15 | - <h2 class="page-title">사용자 정보</h2> | |
16 | - </div> | |
17 | - <hr class="margin"> | |
18 | - <div class="form-wrap"> | |
19 | - <div class="flex m-b"> | |
20 | - <span>아이디 : </span> | |
21 | - <span>{{ user.user_id }} </span> | |
22 | - </div> | |
23 | - <div class="flex m-b"> | |
24 | - <span>비밀번호 : </span> | |
25 | - <input type="password" placeholder="Password" v-model="user.user_pw"> | |
26 | - </div> | |
27 | - <div class="flex m-b"> | |
28 | - <span>비밀번호 확인 : </span> | |
29 | - <input type="password" placeholder="Confirm Password" v-model="passwordCheck"> | |
30 | - </div> | |
31 | - <div class="flex m-b"> | |
32 | - <span>이름 : </span> | |
33 | - <input type="text" placeholder="Name" v-model="user.user_nm"> | |
34 | - </div> | |
35 | - <div class="flex m-b"> | |
36 | - <span>전화번호 : </span> | |
37 | - <input type="text" placeholder=" '-' 을 제외하고 입력해주세요." maxlength="13" v-model="user.user_telno" @change="phoneCheck" @keyup="getPhoneMask(user.user_telno)"> | |
38 | - <p style="color:red" v-if="telno_boolean === false"> 전화번호 9~11자리를 입력해주세요.</p> | |
39 | - </div> | |
40 | - <div class="flex m-b"> | |
41 | - <span>이메일 : </span> | |
42 | - <input type="text" placeholder=" 예) [email protected]" v-model="user.user_eml" @change="emailCheck"> | |
43 | - <p style="color:red" v-if="email_boolean === false"> 잘못된 이메일 형식입니다.</p> | |
44 | - </div> | |
45 | - <div class="flex m-b"> | |
46 | - <span>관리구역 : </span> | |
47 | - <dongSelectList @setDongCd="setDongCd" :nodeHiddenCk="true" :azimuthHiddenCk="true"></dongSelectList> | |
48 | - </div> | |
49 | - <div class="flex m-b"> | |
50 | - <span>비고 : </span> | |
51 | - <input type="text" placeholder="참고사항을 입력해주세요." v-model="user.rm"> | |
52 | - </div> | |
53 | - <div class="flex m-b"> | |
54 | - <span>권한 : </span> | |
55 | - <label for="radio_1"> | |
56 | - <input type="radio" name="radio" id="radio_1" value="시청관리자" v-model="user.user_author"> | |
57 | - 시청관리자 | |
58 | - </label> | |
59 | - <label for="radio_2"> | |
60 | - <input type="radio" name="radio" id="radio_2" value="지자체관리자" v-model="user.user_author"> | |
61 | - 지자체관리자 | |
62 | - </label> | |
63 | - </div> | |
64 | - | |
65 | - <div class="btn-wrap"> | |
66 | - <button type="button" class="green-btn" @click="userUpdateCheck">수정</button> | |
67 | - <button type="button" class="green-btn" @click="modal_delete = true">삭제</button> | |
68 | - <span class="btn-2 gray-btn" @click="userSelectListPage()">취소</span> | |
69 | - </div> | |
70 | - </div> | |
71 | - </div> | |
72 | - </div> | |
73 | - | |
74 | - <div class="modal-wrap" v-if="modal_update == true"> | |
75 | - <div class="modal-bg"> | |
76 | - </div> | |
77 | - <div class="modal"> | |
78 | - <p>수정하신 정보를 <span class="txt-point">저장</span>하시겠습니까?</p> | |
79 | - <div class="btn-wrap"> | |
80 | - <button type="button" class="green-btn" @click="userUpdate">확인</button> | |
81 | - <button type="button" class="gray-btn" @click="modal_update = false">취소</button> | |
82 | - </div> | |
83 | - </div> | |
84 | - </div> | |
85 | - | |
86 | - <div class="modal-wrap" v-if="modal_delete == true"> | |
87 | - <div class="modal-bg"> | |
88 | - </div> | |
89 | - <div class="modal"> | |
90 | - <p> | |
91 | - 해당 기능은 데이터 <span class="txt-point-red">삭제</span>기능입니다.<br> | |
92 | - 데이터 <span class="txt-point-red">삭제</span> 후, 조회에서 해당 데이터를 확인할 수 없습니다.<br> | |
93 | - <span class="txt-point-red">삭제</span>를 원하시면 아래 삭제 버튼을 눌러주세요. | |
94 | - </p> | |
95 | - <div class="btn-wrap"> | |
96 | - <button type="button" class="green-btn" @click="userDelete">삭제</button> | |
97 | - <button type="button" class="gray-btn" @click="modal_delete = false">취소</button> | |
98 | - </div> | |
99 | - </div> | |
100 | - </div> | |
101 | -</template> | |
102 | - | |
103 | -<script> | |
104 | -import axios from 'axios'; | |
105 | -import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; | |
106 | -import { useRoute } from 'vue-router'; | |
107 | -import dongSelectList from '../../component/dongSelectList.vue'; | |
108 | - | |
109 | -export default { | |
110 | - data: () => { | |
111 | - return { | |
112 | - user: { | |
113 | - user_id: null, | |
114 | - user_pw: null, | |
115 | - user_nm: null, | |
116 | - user_telno: null, | |
117 | - user_eml: null, | |
118 | - user_author: null, | |
119 | - rm: null, | |
120 | - dong_cd: null | |
121 | - }, | |
122 | - route: useRoute(), | |
123 | - | |
124 | - passwordCheck: null, | |
125 | - | |
126 | - telno_boolean: true, | |
127 | - email_boolean: true, | |
128 | - modal_update: false, | |
129 | - modal_delete: false, | |
130 | - | |
131 | - //관리구역 행동코드 | |
132 | - address: {} | |
133 | - }; | |
134 | - }, | |
135 | - methods: { | |
136 | - | |
137 | - //사용자 상세조회 | |
138 | - userSelectOne: function() { | |
139 | - const vm = this; | |
140 | - axios({ | |
141 | - url: '/user/userSelectOne.json', | |
142 | - method: 'post', | |
143 | - headers: { | |
144 | - "Content-Type": "application/json; charset=UTF-8" | |
145 | - }, | |
146 | - data: vm.route.query | |
147 | - }).then(function (response) { | |
148 | - console.log("userSelectOne - response : ", response.data); | |
149 | - vm.user = response.data; | |
150 | - vm.user.user_telno = vm.HyphenMinus(response.data.user_telno); | |
151 | - }).catch(function(error) { | |
152 | - console.log("userSelectOne - error : ", error) | |
153 | - }); | |
154 | - }, | |
155 | - | |
156 | - // 전화번호 '-' 추가 후 출력 | |
157 | - HyphenMinus: function (telno) { | |
158 | - return COMMON_UTIL.HyphenMinus(telno); | |
159 | - }, | |
160 | - | |
161 | - //전화번호 입력 시 자동 '-' 삽입 | |
162 | - getPhoneMask: function(telNumber) { | |
163 | - var res = COMMON_UTIL.getMask(telNumber) | |
164 | - this.user.user_telno = res | |
165 | - // this.user.user_telno = this.user_telno.replace(/[^0-9]/g, '') | |
166 | - }, | |
167 | - | |
168 | - emailCheck: function() { | |
169 | - this.email_boolean = true; | |
170 | - if (COMMON_UTIL.checkEmail(this.user.user_eml) === false) this.email_boolean = false; | |
171 | - }, | |
172 | - | |
173 | - phoneCheck: function() { | |
174 | - this.telno_boolean = true; | |
175 | - if (COMMON_UTIL.checkPhone(this.user.user_telno) === false) this.telno_boolean = false; | |
176 | - }, | |
177 | - | |
178 | - // 수정버튼 클릭 시 빈칸 검사 | |
179 | - userUpdateCheck: function() { | |
180 | - | |
181 | - if (COMMON_UTIL.isEmpty(this.user.user_pw) === false) { | |
182 | - alert('비밀번호를 입력해주세요.'); | |
183 | - return false; | |
184 | - } | |
185 | - | |
186 | - if (COMMON_UTIL.checkPassword(this.user.user_pw, this.passwordCheck) === false) { | |
187 | - alert('비밀번호가 일치하지 않습니다.'); | |
188 | - return false; | |
189 | - } | |
190 | - | |
191 | - if (COMMON_UTIL.isEmpty(this.user.user_nm) === false) { | |
192 | - alert('이름을 입력해주세요.'); | |
193 | - return false; | |
194 | - } | |
195 | - | |
196 | - if (COMMON_UTIL.isEmpty(this.user.user_telno) === false) { | |
197 | - alert('전화번호를 입력해주세요.'); | |
198 | - return false; | |
199 | - } | |
200 | - | |
201 | - if (COMMON_UTIL.checkPhone(this.user.user_telno) === false) { | |
202 | - alert('전화번호 형식을 확인해주세요.'); | |
203 | - return false; | |
204 | - } | |
205 | - | |
206 | - if (COMMON_UTIL.isEmpty(this.user.user_eml) === false) { | |
207 | - alert('이메일을 입력해주세요.'); | |
208 | - return false; | |
209 | - } | |
210 | - | |
211 | - if (COMMON_UTIL.checkEmail(this.user.user_eml) === false) { | |
212 | - alert('이메일 형식을 확인해주세요.'); | |
213 | - return false; | |
214 | - } | |
215 | - | |
216 | - // if (COMMON_UTIL.isEmpty(this.user.) === false) { | |
217 | - // alert('관리구역을 선택해주세요.'); | |
218 | - // return false; | |
219 | - // } | |
220 | - | |
221 | - if (COMMON_UTIL.isEmpty(this.user.user_author) === false) { | |
222 | - alert('권한을 선택해주세요.'); | |
223 | - return false; | |
224 | - } | |
225 | - this.modal_update = true | |
226 | - }, | |
227 | - | |
228 | - userUpdate: function() { | |
229 | - const vm = this; | |
230 | - //서버 전송 값에는 '-' 를 제외하고 숫자만 저장 | |
231 | - vm.user.user_telno = vm.user.user_telno.replace(/[^0-9]/g, ''); | |
232 | - vm.user.dong_cd = vm.address.dong_cd | |
233 | - | |
234 | - axios({ | |
235 | - url: '/user/userUpdate.json', | |
236 | - method: 'post', | |
237 | - headers: { | |
238 | - 'Content-Type': "application/json; charset=UTF-8", | |
239 | - }, | |
240 | - data: vm.user | |
241 | - }).then(function(response) { | |
242 | - console.log("userUpdate - response : ",response.data); | |
243 | - let result = response.data; | |
244 | - if(result > 0) { | |
245 | - alert("사용자 정보 수정을 완료 하였습니다."); | |
246 | - vm.userSelectListPage(); | |
247 | - } else { | |
248 | - alert("수정 실패, 관리자에게 문의해주세요."); | |
249 | - vm.modal_update = false; | |
250 | - } | |
251 | - }).catch(function (error) { | |
252 | - console.log("userUpdate - error : ", error); | |
253 | - alert("사용자정보 수정 오류, 관리자에게 문의해주세요."); | |
254 | - vm.modal_update = false; | |
255 | - }) | |
256 | - }, | |
257 | - | |
258 | - //사용자아이디 사용여부 N | |
259 | - userDelete: function() { | |
260 | - const vm = this; | |
261 | - axios({ | |
262 | - url: '/user/userDelete.json', | |
263 | - method: 'post', | |
264 | - headers: { | |
265 | - 'Content-Type': "application/json; charset=UTF-8", | |
266 | - }, | |
267 | - data: vm.user | |
268 | - }).then(function(response) { | |
269 | - console.log("userUpdate - response : ",response.data); | |
270 | - let result = response.data; | |
271 | - if(result > 0) { | |
272 | - alert("사용자 삭제를 완료 하였습니다."); | |
273 | - vm.userSelectListPage(); | |
274 | - } else { | |
275 | - alert("삭제 실패, 관리자에게 문의해주세요."); | |
276 | - vm.modal_delete = false; | |
277 | - } | |
278 | - }).catch(function (error) { | |
279 | - console.log("userUpdate - error : ", error); | |
280 | - alert("사용자 삭제 오류, 관리자에게 문의해주세요."); | |
281 | - vm.modal_delete = false; | |
282 | - }) | |
283 | - }, | |
284 | - | |
285 | - setDongCd(value) { | |
286 | - this.address = value; | |
287 | - }, | |
288 | - | |
289 | - //사용자 목록 페이지 이동 | |
290 | - userSelectListPage: function () { | |
291 | - this.$router.push({ path: '/UserManagement.page'}); | |
292 | - }, | |
293 | - | |
294 | - //접속기록조회 페이지 이동 | |
295 | - accessLogPage: function () { | |
296 | - this.$router.push({ path: '/AccessRecord.page'}); | |
297 | - }, | |
298 | - }, | |
299 | - watch: {}, | |
300 | - computed: {}, | |
301 | - components: { | |
302 | - dongSelectList: dongSelectList | |
303 | - }, | |
304 | - mounted() { | |
305 | - console.log("UserModifyForm mounted"); | |
306 | - this.userSelectOne(); | |
307 | - }, | |
308 | -}; | |
309 | -</script> | |
310 | - | |
311 | -<style scoped> | |
312 | -.wrap { | |
313 | - width: 155rem; | |
314 | - margin: 100px auto; | |
315 | -} | |
316 | - | |
317 | -.tab-wrap { | |
318 | - margin-bottom: 30px; | |
319 | -} | |
320 | - | |
321 | -.tab-wrap ul { | |
322 | - display: flex; | |
323 | - gap: 2rem; | |
324 | -} | |
325 | - | |
326 | -.tab { | |
327 | - display: inline-block; | |
328 | - width: 20rem; | |
329 | - height: 3rem; | |
330 | - line-height: 3rem; | |
331 | - text-align: center; | |
332 | - border-radius: 5px; | |
333 | - background: #fff; | |
334 | - color: #949292; | |
335 | - border: 1px solid #949292; | |
336 | -} | |
337 | - | |
338 | -.tab.active { | |
339 | - background: #13833b; | |
340 | - color: #fff; | |
341 | - border-color: #13833b; | |
342 | -} | |
343 | - | |
344 | -h2.page-title { | |
345 | - font-size: 24px; | |
346 | -} | |
347 | - | |
348 | -hr.margin { | |
349 | - margin: 30px 0; | |
350 | -} | |
351 | - | |
352 | -.form-wrap { | |
353 | - width: 52rem; | |
354 | - margin: 0 auto; | |
355 | -} | |
356 | - | |
357 | -.idchk { | |
358 | - margin-left: 1rem; | |
359 | -} | |
360 | - | |
361 | -.btn-wrap { | |
362 | - margin-top: 30px; | |
363 | - text-align: center; | |
364 | -} | |
365 | - | |
366 | -.btn-2 { | |
367 | - display: inline-block; | |
368 | - padding: 0.3rem 2rem; | |
369 | - font-size: 13.333px; | |
370 | - color: #000; | |
371 | -} | |
372 | - | |
373 | -.btn-wrap>*:not(:last-child) { | |
374 | - margin-right: 2rem; | |
375 | -} | |
376 | - | |
377 | -.form-wrap .flex span { | |
378 | - display: inline-block; | |
379 | - width: 10rem; | |
380 | - padding: 0 5px; | |
381 | -} | |
382 | - | |
383 | -.form-wrap input:not([type="radio"]) { | |
384 | - min-width: 30rem; | |
385 | -} | |
386 | - | |
387 | -.form-wrap select { | |
388 | - min-width: 9rem; | |
389 | -} | |
390 | - | |
391 | -.form-wrap select:not(:last-child) { | |
392 | - margin-right: 1.5rem; | |
393 | -} | |
394 | - | |
395 | -.form-wrap input[type="radio"] { | |
396 | - vertical-align: middle; | |
397 | -} | |
398 | - | |
399 | -.form-wrap label:not(:last-child) { | |
400 | - margin-right: 2rem; | |
401 | -} | |
402 | - | |
403 | -.modal-wrap { | |
404 | - position: fixed; | |
405 | - top: 0; | |
406 | - left: 0; | |
407 | - right: 0; | |
408 | - bottom: 0; | |
409 | -} | |
410 | - | |
411 | -.modal-bg { | |
412 | - position: absolute; | |
413 | - width: 100%; | |
414 | - height: 100%; | |
415 | - background-color: rgba(0, 0, 0, .6); | |
416 | -} | |
417 | - | |
418 | -.modal { | |
419 | - position: absolute; | |
420 | - top: 50%; | |
421 | - left: 50%; | |
422 | - transform: translate(-50%, -50%); | |
423 | - max-width: 350px; | |
424 | - padding: 5rem; | |
425 | - z-index: 2; | |
426 | - background-color: #fff; | |
427 | - border-radius: 1rem; | |
428 | - text-align: center; | |
429 | -} | |
430 | - | |
431 | -.modal .btn-wrap { | |
432 | - margin-top: 15px; | |
433 | - text-align: center; | |
434 | -} | |
435 | -.txt-point { | |
436 | - color: #13833b; | |
437 | -} | |
438 | - | |
439 | -.txt-point-red { | |
440 | - color: red; | |
441 | -} | |
442 | -</style>(No newline at end of file) |
--- client/views/pages/board/BoardInsert.vue
... | ... | @@ -1,55 +0,0 @@ |
1 | -<template> | |
2 | - <div>test</div> | |
3 | - | |
4 | -</template> | |
5 | - | |
6 | -<script> | |
7 | -import axios from 'axios'; | |
8 | - | |
9 | -export default { | |
10 | - data: () => { | |
11 | - return { | |
12 | - board:{ | |
13 | - board_id:'1', | |
14 | - board_type:'2', | |
15 | - board_name:'3', | |
16 | - comment_at:'4', | |
17 | - write_at:'5', | |
18 | - } | |
19 | - | |
20 | - }; | |
21 | - }, | |
22 | - methods: { | |
23 | - boardInsert: function () { | |
24 | - const vm = this; | |
25 | - | |
26 | - axios({ | |
27 | - url: '/testDataSelectList.json', | |
28 | - method: 'post', | |
29 | - headers: { | |
30 | - 'Content-Type': "application/json; charset=UTF-8", | |
31 | - }, | |
32 | - data: {} | |
33 | - }).then(function (response) { | |
34 | - console.log("test - response : ", response.data); | |
35 | - // vm.orderMoldListCount = response.data.orderMoldListCount; | |
36 | - // vm.orderMoldList = response.data.orderMoldList; | |
37 | - }).catch(function (error) { | |
38 | - console.log("boardInsert - error : ", error); | |
39 | - alert('게시판 생성 오류, 관리자에게 문의해주세요.'); | |
40 | - }); | |
41 | - }, | |
42 | - }, | |
43 | - watch: { | |
44 | - | |
45 | - }, | |
46 | - computed: {}, | |
47 | - components: { | |
48 | - }, | |
49 | - mounted: function () { | |
50 | - console.log("Vue mounted"); | |
51 | - this.boardInsert(); | |
52 | - }, | |
53 | -}; | |
54 | -</script> | |
55 | - |
--- client/views/pages/main/Login.vue
+++ client/views/pages/main/Login.vue
... | ... | @@ -7,19 +7,18 @@ |
7 | 7 |
<hr class="margin"> |
8 | 8 |
<div class="form-wrap"> |
9 | 9 |
<form action=""> |
10 |
- <div class="flex-center m-b"> |
|
10 |
+ <div class="flex-center m-b" style="display: block;"> |
|
11 | 11 |
<label for="id">아이디</label> |
12 | 12 |
<input type="text" name="" id="" ref="user_id" placeholder="ID" v-model="userLogin.user_id" @keyup.enter="login"> |
13 | 13 |
</div> |
14 |
- <div class="flex-center m-b"> |
|
14 |
+ <div class="flex-center m-b" style="display: block;"> |
|
15 | 15 |
<label for="password">비밀번호</label> |
16 | 16 |
<input type="password" name="" id="" ref="user_pw" placeholder="Password" v-model="userLogin.user_pw" @keyup.enter="login"> |
17 |
- </div> |
|
18 |
- <div class="btn-wrap"> |
|
19 |
- <button type="button" class="green-btn btn-l loginbtn" @click="login">로그인</button> |
|
20 |
- <router-link to="/IdFind.page"> <span class="">아이디 찾기</span></router-link> |
|
21 |
- </div> |
|
17 |
+ </div> |
|
22 | 18 |
</form> |
19 |
+ <div class="btn-wrap"> |
|
20 |
+ <button type="button" class="green-btn btn-l loginbtn" @click="login">로그인</button> |
|
21 |
+ </div> |
|
23 | 22 |
</div> |
24 | 23 |
</div> |
25 | 24 |
</div> |
... | ... | @@ -28,65 +27,54 @@ |
28 | 27 |
<script> |
29 | 28 |
import axios from 'axios'; |
30 | 29 |
import crypto from "crypto-js"; |
31 |
-import { useStore } from 'vuex'; |
|
30 |
+import Vue from "vue"; |
|
31 |
+import Vuex from "vuex"; |
|
32 |
+ |
|
33 |
+ |
|
34 |
+//Vue.use(Vuex); |
|
35 |
+ |
|
32 | 36 |
export default { |
33 | 37 |
data() { |
34 | 38 |
return { |
35 | 39 |
userLogin: { |
36 |
- user_id: null, |
|
37 |
- user_pw: null |
|
40 |
+ user_id: '', |
|
41 |
+ user_pw: '' |
|
38 | 42 |
}, |
39 |
- store: useStore(), |
|
40 | 43 |
}; |
41 | 44 |
}, |
42 | 45 |
methods: { |
43 | 46 |
//로그인 |
44 | 47 |
login: function () { |
45 |
- let vm = this; |
|
46 |
- //Encrypt |
|
47 |
- // var iv = this.store.state.key.iv; |
|
48 |
- // var salt = this.store.state.key.salt; |
|
49 |
- // var passPhrase = this.store.state.key.ENC_KEY; |
|
50 |
- var iv = 'e9d3712c4d5c35093d340733b8c26b92'; |
|
51 |
- var salt = 'deafa8b6802cebcc0bcceaaa5f3461a9'; |
|
52 |
- var passPhrase = 'e534cf179007db7e6360ebf95fa5d51c'; |
|
53 |
- var keySize = 128; |
|
54 |
- var iterationCount = 1000; |
|
55 |
- var key128Bits100Iterations = crypto.PBKDF2(passPhrase, |
|
56 |
- crypto.enc.Hex.parse(salt), |
|
57 |
- { keySize: keySize / 32, iterations: iterationCount } |
|
58 |
- ); |
|
48 |
+ let vm = this; |
|
59 | 49 |
|
60 |
- //var encrypted = CryptoJS.AES.encrypt( |
|
61 |
- // this.userLogin.user_pw = crypto.AES.encrypt(this.userLogin.user_pw, key128Bits100Iterations, { iv: crypto.enc.Hex.parse(iv) }).toString(); |
|
50 |
+ // 빈값 제한 |
|
51 |
+ if(this.userLogin.user_id.length < 2){ |
|
52 |
+ alert('아이디를 입력해 주세요'); |
|
53 |
+ return false; |
|
54 |
+ }else if(this.userLogin.user_pw.length < 2){ |
|
55 |
+ alert('비밀번호를 입력해 주세요'); |
|
56 |
+ return false; |
|
57 |
+ } |
|
58 |
+ |
|
62 | 59 |
axios({ |
63 |
- url: '/user/login.json', |
|
60 |
+ url: '/userLogin.json', |
|
64 | 61 |
method: 'post', |
65 | 62 |
headers: { |
66 | 63 |
'Content-Type': 'application/json; charset=UTF-8' |
67 | 64 |
}, |
68 | 65 |
data: vm.userLogin |
69 |
- }).then(function (response) { |
|
70 |
- // console.log("login - response : ", response); |
|
71 |
- if (response.data == true) { |
|
72 |
- vm.$router.push({ path: '/', query: {} }); |
|
73 |
- } else { |
|
74 |
- alert('로그인 정보를 다시 확인해주세요.'); |
|
75 |
- vm.$refs['user_id'].focus(); |
|
66 |
+ }).then(function (response) { |
|
67 |
+ if(response.data.result == 0){ |
|
68 |
+ alert(response.data.message); |
|
69 |
+ sessionStorage.setItem("login", false); |
|
70 |
+ }else{ |
|
71 |
+ sessionStorage.setItem("login", true); |
|
72 |
+ vm.$router.push({ path: '/ApiTokenManagement.page', query: {} }); |
|
76 | 73 |
} |
77 | 74 |
}).catch(function (error) { |
78 |
- console.log("login - error : ", error); |
|
75 |
+ console.log("loginogin - error : ", error); |
|
79 | 76 |
}); |
80 |
- }, |
|
81 |
- // // 암호화 메서드 |
|
82 |
- // cipher : (password, key) => { |
|
83 |
- // const encrypt = crypto.createCipher(AES, key) // des알고리즘과 키를 설정 |
|
84 |
- // const encryptResult = encrypt.update(password, 'utf8', 'base64') // 암호화 |
|
85 |
- // + encrypt.final('base64') // 인코딩 |
|
86 |
- |
|
87 |
- // console.log(encryptResult) |
|
88 |
- // return encryptResult |
|
89 |
- // } |
|
77 |
+ }, |
|
90 | 78 |
}, |
91 | 79 |
watch: {}, |
92 | 80 |
computed: {}, |
... | ... | @@ -176,6 +164,7 @@ |
176 | 164 |
.form-wrap input:not([type="radio"]) { |
177 | 165 |
min-width: 30rem; |
178 | 166 |
min-height: 4rem; |
167 |
+ padding: 5px; |
|
179 | 168 |
} |
180 | 169 |
|
181 | 170 |
.form-wrap select { |
--- client/views/pages/test/TestInsert.jsx
... | ... | @@ -1,20 +0,0 @@ |
1 | -import React from 'react'; | |
2 | - | |
3 | -/** | |
4 | - * @author : 최정우 | |
5 | - * @since : 2022.09.24 | |
6 | - * @dscription : 테스트용 등록 페이지 입니다. | |
7 | - */ | |
8 | -function TestInsert () { | |
9 | - return ( | |
10 | - <> | |
11 | - <div style={{width:'100%', height:'100vh', backgroundColor:'#6799FF', textAlign:'center'}}> | |
12 | - <div style={{margin:'0 auto'}}> | |
13 | - <p>Test용 목록 조회 페이지 입니다</p> | |
14 | - </div> | |
15 | - </div> | |
16 | - </> | |
17 | - ) | |
18 | -} | |
19 | -export default TestInsert; | |
20 | - |
--- client/views/pages/test/TestSelectList.jsx
... | ... | @@ -1,20 +0,0 @@ |
1 | -import React from 'react'; | |
2 | - | |
3 | -/** | |
4 | - * @author : 최정우 | |
5 | - * @since : 2022.09.24 | |
6 | - * @dscription : 테스트용 목록 조회 페이지 입니다. | |
7 | - */ | |
8 | -function TestSelectList () { | |
9 | - return ( | |
10 | - <> | |
11 | - <div style={{width:'100%', height:'100vh', backgroundColor:'#6799FF', textAlign:'center'}}> | |
12 | - <div style={{margin:'0 auto'}}> | |
13 | - <p>Test용 목록 조회 페이지 입니다</p> | |
14 | - </div> | |
15 | - </div> | |
16 | - </> | |
17 | - ) | |
18 | -} | |
19 | -export default TestSelectList; | |
20 | - |
--- client/views/pages/test/TestSelectOne.jsx
... | ... | @@ -1,20 +0,0 @@ |
1 | -import React from 'react'; | |
2 | - | |
3 | -/** | |
4 | - * @author : 최정우 | |
5 | - * @since : 2022.09.24 | |
6 | - * @dscription : 테스트용 상세 조회 페이지 입니다. | |
7 | - */ | |
8 | -function TestSelectOne () { | |
9 | - return ( | |
10 | - <> | |
11 | - <div style={{width:'100%', height:'100vh', backgroundColor:'#6799FF', textAlign:'center'}}> | |
12 | - <div style={{margin:'0 auto'}}> | |
13 | - <p>Test용 상세 조회 페이지 입니다</p> | |
14 | - </div> | |
15 | - </div> | |
16 | - </> | |
17 | - ) | |
18 | -} | |
19 | -export default TestSelectOne; | |
20 | - |
--- client/views/pages/test/TestUpdate.jsx
... | ... | @@ -1,20 +0,0 @@ |
1 | -import React from 'react'; | |
2 | - | |
3 | -/** | |
4 | - * @author : 최정우 | |
5 | - * @since : 2022.09.24 | |
6 | - * @dscription : 테스트용 수정 페이지 입니다. | |
7 | - */ | |
8 | -function TestUpdate () { | |
9 | - return ( | |
10 | - <> | |
11 | - <div style={{width:'100%', height:'100vh', backgroundColor:'#6799FF', textAlign:'center'}}> | |
12 | - <div style={{margin:'0 auto'}}> | |
13 | - <p>Test용 목록 조회 페이지 입니다</p> | |
14 | - </div> | |
15 | - </div> | |
16 | - </> | |
17 | - ) | |
18 | -} | |
19 | -export default TestUpdate; | |
20 | - |
--- package-lock.json
+++ package-lock.json
... | ... | @@ -26,12 +26,13 @@ |
26 | 26 |
"vue": "3.2.40", |
27 | 27 |
"vue-loader": "^17.0.0", |
28 | 28 |
"vue-router": "4.1.5", |
29 |
+ "vue-session": "^1.0.0", |
|
29 | 30 |
"vue-style-loader": "4.1.3", |
30 | 31 |
"vue3-leaflet": "^1.0.46", |
31 | 32 |
"vue3-openlayers": "^0.5.1", |
32 | 33 |
"vue3-sfc-loader": "^0.8.4", |
33 | 34 |
"vuex": "^4.1.0", |
34 |
- "webpack": "5.74.0", |
|
35 |
+ "webpack": "^5.88.1", |
|
35 | 36 |
"webpack-cli": "4.10.0" |
36 | 37 |
}, |
37 | 38 |
"devDependencies": { |
... | ... | @@ -415,9 +416,9 @@ |
415 | 416 |
} |
416 | 417 |
}, |
417 | 418 |
"node_modules/@jridgewell/source-map": { |
418 |
- "version": "0.3.2", |
|
419 |
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", |
|
420 |
- "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", |
|
419 |
+ "version": "0.3.5", |
|
420 |
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", |
|
421 |
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", |
|
421 | 422 |
"dependencies": { |
422 | 423 |
"@jridgewell/gen-mapping": "^0.3.0", |
423 | 424 |
"@jridgewell/trace-mapping": "^0.3.9" |
... | ... | @@ -2075,9 +2076,9 @@ |
2075 | 2076 |
} |
2076 | 2077 |
}, |
2077 | 2078 |
"node_modules/@types/estree": { |
2078 |
- "version": "0.0.51", |
|
2079 |
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", |
|
2080 |
- "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" |
|
2079 |
+ "version": "1.0.1", |
|
2080 |
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", |
|
2081 |
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" |
|
2081 | 2082 |
}, |
2082 | 2083 |
"node_modules/@types/geojson": { |
2083 | 2084 |
"version": "7946.0.8", |
... | ... | @@ -2090,9 +2091,9 @@ |
2090 | 2091 |
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" |
2091 | 2092 |
}, |
2092 | 2093 |
"node_modules/@types/node": { |
2093 |
- "version": "18.11.2", |
|
2094 |
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", |
|
2095 |
- "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" |
|
2094 |
+ "version": "20.4.2", |
|
2095 |
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", |
|
2096 |
+ "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" |
|
2096 | 2097 |
}, |
2097 | 2098 |
"node_modules/@types/proj4": { |
2098 | 2099 |
"version": "2.5.2", |
... | ... | @@ -2230,133 +2231,133 @@ |
2230 | 2231 |
"integrity": "sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==" |
2231 | 2232 |
}, |
2232 | 2233 |
"node_modules/@webassemblyjs/ast": { |
2233 |
- "version": "1.11.1", |
|
2234 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", |
|
2235 |
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", |
|
2234 |
+ "version": "1.11.6", |
|
2235 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", |
|
2236 |
+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", |
|
2236 | 2237 |
"dependencies": { |
2237 |
- "@webassemblyjs/helper-numbers": "1.11.1", |
|
2238 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1" |
|
2238 |
+ "@webassemblyjs/helper-numbers": "1.11.6", |
|
2239 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6" |
|
2239 | 2240 |
} |
2240 | 2241 |
}, |
2241 | 2242 |
"node_modules/@webassemblyjs/floating-point-hex-parser": { |
2242 |
- "version": "1.11.1", |
|
2243 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", |
|
2244 |
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" |
|
2243 |
+ "version": "1.11.6", |
|
2244 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", |
|
2245 |
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" |
|
2245 | 2246 |
}, |
2246 | 2247 |
"node_modules/@webassemblyjs/helper-api-error": { |
2247 |
- "version": "1.11.1", |
|
2248 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", |
|
2249 |
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" |
|
2248 |
+ "version": "1.11.6", |
|
2249 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", |
|
2250 |
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" |
|
2250 | 2251 |
}, |
2251 | 2252 |
"node_modules/@webassemblyjs/helper-buffer": { |
2252 |
- "version": "1.11.1", |
|
2253 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", |
|
2254 |
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" |
|
2253 |
+ "version": "1.11.6", |
|
2254 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", |
|
2255 |
+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" |
|
2255 | 2256 |
}, |
2256 | 2257 |
"node_modules/@webassemblyjs/helper-numbers": { |
2257 |
- "version": "1.11.1", |
|
2258 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", |
|
2259 |
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", |
|
2258 |
+ "version": "1.11.6", |
|
2259 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", |
|
2260 |
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", |
|
2260 | 2261 |
"dependencies": { |
2261 |
- "@webassemblyjs/floating-point-hex-parser": "1.11.1", |
|
2262 |
- "@webassemblyjs/helper-api-error": "1.11.1", |
|
2262 |
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6", |
|
2263 |
+ "@webassemblyjs/helper-api-error": "1.11.6", |
|
2263 | 2264 |
"@xtuc/long": "4.2.2" |
2264 | 2265 |
} |
2265 | 2266 |
}, |
2266 | 2267 |
"node_modules/@webassemblyjs/helper-wasm-bytecode": { |
2267 |
- "version": "1.11.1", |
|
2268 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", |
|
2269 |
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" |
|
2268 |
+ "version": "1.11.6", |
|
2269 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", |
|
2270 |
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" |
|
2270 | 2271 |
}, |
2271 | 2272 |
"node_modules/@webassemblyjs/helper-wasm-section": { |
2272 |
- "version": "1.11.1", |
|
2273 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", |
|
2274 |
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", |
|
2273 |
+ "version": "1.11.6", |
|
2274 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", |
|
2275 |
+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", |
|
2275 | 2276 |
"dependencies": { |
2276 |
- "@webassemblyjs/ast": "1.11.1", |
|
2277 |
- "@webassemblyjs/helper-buffer": "1.11.1", |
|
2278 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
2279 |
- "@webassemblyjs/wasm-gen": "1.11.1" |
|
2277 |
+ "@webassemblyjs/ast": "1.11.6", |
|
2278 |
+ "@webassemblyjs/helper-buffer": "1.11.6", |
|
2279 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
2280 |
+ "@webassemblyjs/wasm-gen": "1.11.6" |
|
2280 | 2281 |
} |
2281 | 2282 |
}, |
2282 | 2283 |
"node_modules/@webassemblyjs/ieee754": { |
2283 |
- "version": "1.11.1", |
|
2284 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", |
|
2285 |
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", |
|
2284 |
+ "version": "1.11.6", |
|
2285 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", |
|
2286 |
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", |
|
2286 | 2287 |
"dependencies": { |
2287 | 2288 |
"@xtuc/ieee754": "^1.2.0" |
2288 | 2289 |
} |
2289 | 2290 |
}, |
2290 | 2291 |
"node_modules/@webassemblyjs/leb128": { |
2291 |
- "version": "1.11.1", |
|
2292 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", |
|
2293 |
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", |
|
2292 |
+ "version": "1.11.6", |
|
2293 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", |
|
2294 |
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", |
|
2294 | 2295 |
"dependencies": { |
2295 | 2296 |
"@xtuc/long": "4.2.2" |
2296 | 2297 |
} |
2297 | 2298 |
}, |
2298 | 2299 |
"node_modules/@webassemblyjs/utf8": { |
2299 |
- "version": "1.11.1", |
|
2300 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", |
|
2301 |
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" |
|
2300 |
+ "version": "1.11.6", |
|
2301 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", |
|
2302 |
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" |
|
2302 | 2303 |
}, |
2303 | 2304 |
"node_modules/@webassemblyjs/wasm-edit": { |
2304 |
- "version": "1.11.1", |
|
2305 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", |
|
2306 |
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", |
|
2305 |
+ "version": "1.11.6", |
|
2306 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", |
|
2307 |
+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", |
|
2307 | 2308 |
"dependencies": { |
2308 |
- "@webassemblyjs/ast": "1.11.1", |
|
2309 |
- "@webassemblyjs/helper-buffer": "1.11.1", |
|
2310 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
2311 |
- "@webassemblyjs/helper-wasm-section": "1.11.1", |
|
2312 |
- "@webassemblyjs/wasm-gen": "1.11.1", |
|
2313 |
- "@webassemblyjs/wasm-opt": "1.11.1", |
|
2314 |
- "@webassemblyjs/wasm-parser": "1.11.1", |
|
2315 |
- "@webassemblyjs/wast-printer": "1.11.1" |
|
2309 |
+ "@webassemblyjs/ast": "1.11.6", |
|
2310 |
+ "@webassemblyjs/helper-buffer": "1.11.6", |
|
2311 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
2312 |
+ "@webassemblyjs/helper-wasm-section": "1.11.6", |
|
2313 |
+ "@webassemblyjs/wasm-gen": "1.11.6", |
|
2314 |
+ "@webassemblyjs/wasm-opt": "1.11.6", |
|
2315 |
+ "@webassemblyjs/wasm-parser": "1.11.6", |
|
2316 |
+ "@webassemblyjs/wast-printer": "1.11.6" |
|
2316 | 2317 |
} |
2317 | 2318 |
}, |
2318 | 2319 |
"node_modules/@webassemblyjs/wasm-gen": { |
2319 |
- "version": "1.11.1", |
|
2320 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", |
|
2321 |
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", |
|
2320 |
+ "version": "1.11.6", |
|
2321 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", |
|
2322 |
+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", |
|
2322 | 2323 |
"dependencies": { |
2323 |
- "@webassemblyjs/ast": "1.11.1", |
|
2324 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
2325 |
- "@webassemblyjs/ieee754": "1.11.1", |
|
2326 |
- "@webassemblyjs/leb128": "1.11.1", |
|
2327 |
- "@webassemblyjs/utf8": "1.11.1" |
|
2324 |
+ "@webassemblyjs/ast": "1.11.6", |
|
2325 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
2326 |
+ "@webassemblyjs/ieee754": "1.11.6", |
|
2327 |
+ "@webassemblyjs/leb128": "1.11.6", |
|
2328 |
+ "@webassemblyjs/utf8": "1.11.6" |
|
2328 | 2329 |
} |
2329 | 2330 |
}, |
2330 | 2331 |
"node_modules/@webassemblyjs/wasm-opt": { |
2331 |
- "version": "1.11.1", |
|
2332 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", |
|
2333 |
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", |
|
2332 |
+ "version": "1.11.6", |
|
2333 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", |
|
2334 |
+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", |
|
2334 | 2335 |
"dependencies": { |
2335 |
- "@webassemblyjs/ast": "1.11.1", |
|
2336 |
- "@webassemblyjs/helper-buffer": "1.11.1", |
|
2337 |
- "@webassemblyjs/wasm-gen": "1.11.1", |
|
2338 |
- "@webassemblyjs/wasm-parser": "1.11.1" |
|
2336 |
+ "@webassemblyjs/ast": "1.11.6", |
|
2337 |
+ "@webassemblyjs/helper-buffer": "1.11.6", |
|
2338 |
+ "@webassemblyjs/wasm-gen": "1.11.6", |
|
2339 |
+ "@webassemblyjs/wasm-parser": "1.11.6" |
|
2339 | 2340 |
} |
2340 | 2341 |
}, |
2341 | 2342 |
"node_modules/@webassemblyjs/wasm-parser": { |
2342 |
- "version": "1.11.1", |
|
2343 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", |
|
2344 |
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", |
|
2343 |
+ "version": "1.11.6", |
|
2344 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", |
|
2345 |
+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", |
|
2345 | 2346 |
"dependencies": { |
2346 |
- "@webassemblyjs/ast": "1.11.1", |
|
2347 |
- "@webassemblyjs/helper-api-error": "1.11.1", |
|
2348 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
2349 |
- "@webassemblyjs/ieee754": "1.11.1", |
|
2350 |
- "@webassemblyjs/leb128": "1.11.1", |
|
2351 |
- "@webassemblyjs/utf8": "1.11.1" |
|
2347 |
+ "@webassemblyjs/ast": "1.11.6", |
|
2348 |
+ "@webassemblyjs/helper-api-error": "1.11.6", |
|
2349 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
2350 |
+ "@webassemblyjs/ieee754": "1.11.6", |
|
2351 |
+ "@webassemblyjs/leb128": "1.11.6", |
|
2352 |
+ "@webassemblyjs/utf8": "1.11.6" |
|
2352 | 2353 |
} |
2353 | 2354 |
}, |
2354 | 2355 |
"node_modules/@webassemblyjs/wast-printer": { |
2355 |
- "version": "1.11.1", |
|
2356 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", |
|
2357 |
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", |
|
2356 |
+ "version": "1.11.6", |
|
2357 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", |
|
2358 |
+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", |
|
2358 | 2359 |
"dependencies": { |
2359 |
- "@webassemblyjs/ast": "1.11.1", |
|
2360 |
+ "@webassemblyjs/ast": "1.11.6", |
|
2360 | 2361 |
"@xtuc/long": "4.2.2" |
2361 | 2362 |
} |
2362 | 2363 |
}, |
... | ... | @@ -2416,9 +2417,9 @@ |
2416 | 2417 |
} |
2417 | 2418 |
}, |
2418 | 2419 |
"node_modules/acorn": { |
2419 |
- "version": "8.8.0", |
|
2420 |
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", |
|
2421 |
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", |
|
2420 |
+ "version": "8.10.0", |
|
2421 |
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", |
|
2422 |
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", |
|
2422 | 2423 |
"bin": { |
2423 | 2424 |
"acorn": "bin/acorn" |
2424 | 2425 |
}, |
... | ... | @@ -2427,9 +2428,9 @@ |
2427 | 2428 |
} |
2428 | 2429 |
}, |
2429 | 2430 |
"node_modules/acorn-import-assertions": { |
2430 |
- "version": "1.8.0", |
|
2431 |
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", |
|
2432 |
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", |
|
2431 |
+ "version": "1.9.0", |
|
2432 |
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", |
|
2433 |
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", |
|
2433 | 2434 |
"peerDependencies": { |
2434 | 2435 |
"acorn": "^8" |
2435 | 2436 |
} |
... | ... | @@ -3003,9 +3004,9 @@ |
3003 | 3004 |
} |
3004 | 3005 |
}, |
3005 | 3006 |
"node_modules/css-loader/node_modules/semver": { |
3006 |
- "version": "7.3.8", |
|
3007 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", |
|
3008 |
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", |
|
3007 |
+ "version": "7.5.4", |
|
3008 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", |
|
3009 |
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", |
|
3009 | 3010 |
"dependencies": { |
3010 | 3011 |
"lru-cache": "^6.0.0" |
3011 | 3012 |
}, |
... | ... | @@ -3170,9 +3171,9 @@ |
3170 | 3171 |
} |
3171 | 3172 |
}, |
3172 | 3173 |
"node_modules/enhanced-resolve": { |
3173 |
- "version": "5.10.0", |
|
3174 |
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", |
|
3175 |
- "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", |
|
3174 |
+ "version": "5.15.0", |
|
3175 |
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", |
|
3176 |
+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", |
|
3176 | 3177 |
"dependencies": { |
3177 | 3178 |
"graceful-fs": "^4.2.4", |
3178 | 3179 |
"tapable": "^2.2.0" |
... | ... | @@ -3193,9 +3194,9 @@ |
3193 | 3194 |
} |
3194 | 3195 |
}, |
3195 | 3196 |
"node_modules/es-module-lexer": { |
3196 |
- "version": "0.9.3", |
|
3197 |
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", |
|
3198 |
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" |
|
3197 |
+ "version": "1.3.0", |
|
3198 |
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", |
|
3199 |
+ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" |
|
3199 | 3200 |
}, |
3200 | 3201 |
"node_modules/es6-promise": { |
3201 | 3202 |
"version": "4.2.8", |
... | ... | @@ -4150,9 +4151,9 @@ |
4150 | 4151 |
} |
4151 | 4152 |
}, |
4152 | 4153 |
"node_modules/make-dir/node_modules/semver": { |
4153 |
- "version": "5.7.1", |
|
4154 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", |
|
4155 |
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", |
|
4154 |
+ "version": "5.7.2", |
|
4155 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", |
|
4156 |
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", |
|
4156 | 4157 |
"bin": { |
4157 | 4158 |
"semver": "bin/semver" |
4158 | 4159 |
} |
... | ... | @@ -5039,9 +5040,9 @@ |
5039 | 5040 |
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" |
5040 | 5041 |
}, |
5041 | 5042 |
"node_modules/schema-utils": { |
5042 |
- "version": "3.1.1", |
|
5043 |
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", |
|
5044 |
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", |
|
5043 |
+ "version": "3.3.0", |
|
5044 |
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", |
|
5045 |
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", |
|
5045 | 5046 |
"dependencies": { |
5046 | 5047 |
"@types/json-schema": "^7.0.8", |
5047 | 5048 |
"ajv": "^6.12.5", |
... | ... | @@ -5056,9 +5057,9 @@ |
5056 | 5057 |
} |
5057 | 5058 |
}, |
5058 | 5059 |
"node_modules/semver": { |
5059 |
- "version": "6.3.0", |
|
5060 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", |
|
5061 |
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", |
|
5060 |
+ "version": "6.3.1", |
|
5061 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", |
|
5062 |
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", |
|
5062 | 5063 |
"bin": { |
5063 | 5064 |
"semver": "bin/semver.js" |
5064 | 5065 |
} |
... | ... | @@ -5105,9 +5106,9 @@ |
5105 | 5106 |
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" |
5106 | 5107 |
}, |
5107 | 5108 |
"node_modules/serialize-javascript": { |
5108 |
- "version": "6.0.0", |
|
5109 |
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", |
|
5110 |
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", |
|
5109 |
+ "version": "6.0.1", |
|
5110 |
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", |
|
5111 |
+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", |
|
5111 | 5112 |
"dependencies": { |
5112 | 5113 |
"randombytes": "^2.1.0" |
5113 | 5114 |
} |
... | ... | @@ -5318,12 +5319,12 @@ |
5318 | 5319 |
} |
5319 | 5320 |
}, |
5320 | 5321 |
"node_modules/terser": { |
5321 |
- "version": "5.15.1", |
|
5322 |
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", |
|
5323 |
- "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", |
|
5322 |
+ "version": "5.19.0", |
|
5323 |
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz", |
|
5324 |
+ "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==", |
|
5324 | 5325 |
"dependencies": { |
5325 |
- "@jridgewell/source-map": "^0.3.2", |
|
5326 |
- "acorn": "^8.5.0", |
|
5326 |
+ "@jridgewell/source-map": "^0.3.3", |
|
5327 |
+ "acorn": "^8.8.2", |
|
5327 | 5328 |
"commander": "^2.20.0", |
5328 | 5329 |
"source-map-support": "~0.5.20" |
5329 | 5330 |
}, |
... | ... | @@ -5335,15 +5336,15 @@ |
5335 | 5336 |
} |
5336 | 5337 |
}, |
5337 | 5338 |
"node_modules/terser-webpack-plugin": { |
5338 |
- "version": "5.3.6", |
|
5339 |
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", |
|
5340 |
- "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", |
|
5339 |
+ "version": "5.3.9", |
|
5340 |
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", |
|
5341 |
+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", |
|
5341 | 5342 |
"dependencies": { |
5342 |
- "@jridgewell/trace-mapping": "^0.3.14", |
|
5343 |
+ "@jridgewell/trace-mapping": "^0.3.17", |
|
5343 | 5344 |
"jest-worker": "^27.4.5", |
5344 | 5345 |
"schema-utils": "^3.1.1", |
5345 |
- "serialize-javascript": "^6.0.0", |
|
5346 |
- "terser": "^5.14.1" |
|
5346 |
+ "serialize-javascript": "^6.0.1", |
|
5347 |
+ "terser": "^5.16.8" |
|
5347 | 5348 |
}, |
5348 | 5349 |
"engines": { |
5349 | 5350 |
"node": ">= 10.13.0" |
... | ... | @@ -5507,9 +5508,9 @@ |
5507 | 5508 |
"dev": true |
5508 | 5509 |
}, |
5509 | 5510 |
"node_modules/ts-loader/node_modules/semver": { |
5510 |
- "version": "7.5.1", |
|
5511 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", |
|
5512 |
- "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", |
|
5511 |
+ "version": "7.5.4", |
|
5512 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", |
|
5513 |
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", |
|
5513 | 5514 |
"dev": true, |
5514 | 5515 |
"dependencies": { |
5515 | 5516 |
"lru-cache": "^6.0.0" |
... | ... | @@ -5755,6 +5756,11 @@ |
5755 | 5756 |
"vue": "^3.2.0" |
5756 | 5757 |
} |
5757 | 5758 |
}, |
5759 |
+ "node_modules/vue-session": { |
|
5760 |
+ "version": "1.0.0", |
|
5761 |
+ "resolved": "https://registry.npmjs.org/vue-session/-/vue-session-1.0.0.tgz", |
|
5762 |
+ "integrity": "sha512-Ep9lRKGgCZdcGV3In3R3zoSp5Wr+hlcIc8WJ9BG+QKzibwaFZnnvp9HBVdd+dU8d6HGLSi5sWywDmd5MkrkfoQ==" |
|
5763 |
+ }, |
|
5758 | 5764 |
"node_modules/vue-style-loader": { |
5759 | 5765 |
"version": "4.1.3", |
5760 | 5766 |
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", |
... | ... | @@ -5850,21 +5856,21 @@ |
5850 | 5856 |
"integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" |
5851 | 5857 |
}, |
5852 | 5858 |
"node_modules/webpack": { |
5853 |
- "version": "5.74.0", |
|
5854 |
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", |
|
5855 |
- "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", |
|
5859 |
+ "version": "5.88.1", |
|
5860 |
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", |
|
5861 |
+ "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", |
|
5856 | 5862 |
"dependencies": { |
5857 | 5863 |
"@types/eslint-scope": "^3.7.3", |
5858 |
- "@types/estree": "^0.0.51", |
|
5859 |
- "@webassemblyjs/ast": "1.11.1", |
|
5860 |
- "@webassemblyjs/wasm-edit": "1.11.1", |
|
5861 |
- "@webassemblyjs/wasm-parser": "1.11.1", |
|
5864 |
+ "@types/estree": "^1.0.0", |
|
5865 |
+ "@webassemblyjs/ast": "^1.11.5", |
|
5866 |
+ "@webassemblyjs/wasm-edit": "^1.11.5", |
|
5867 |
+ "@webassemblyjs/wasm-parser": "^1.11.5", |
|
5862 | 5868 |
"acorn": "^8.7.1", |
5863 |
- "acorn-import-assertions": "^1.7.6", |
|
5869 |
+ "acorn-import-assertions": "^1.9.0", |
|
5864 | 5870 |
"browserslist": "^4.14.5", |
5865 | 5871 |
"chrome-trace-event": "^1.0.2", |
5866 |
- "enhanced-resolve": "^5.10.0", |
|
5867 |
- "es-module-lexer": "^0.9.0", |
|
5872 |
+ "enhanced-resolve": "^5.15.0", |
|
5873 |
+ "es-module-lexer": "^1.2.1", |
|
5868 | 5874 |
"eslint-scope": "5.1.1", |
5869 | 5875 |
"events": "^3.2.0", |
5870 | 5876 |
"glob-to-regexp": "^0.4.1", |
... | ... | @@ -5873,9 +5879,9 @@ |
5873 | 5879 |
"loader-runner": "^4.2.0", |
5874 | 5880 |
"mime-types": "^2.1.27", |
5875 | 5881 |
"neo-async": "^2.6.2", |
5876 |
- "schema-utils": "^3.1.0", |
|
5882 |
+ "schema-utils": "^3.2.0", |
|
5877 | 5883 |
"tapable": "^2.1.1", |
5878 |
- "terser-webpack-plugin": "^5.1.3", |
|
5884 |
+ "terser-webpack-plugin": "^5.3.7", |
|
5879 | 5885 |
"watchpack": "^2.4.0", |
5880 | 5886 |
"webpack-sources": "^3.2.3" |
5881 | 5887 |
}, |
... | ... | @@ -6289,9 +6295,9 @@ |
6289 | 6295 |
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" |
6290 | 6296 |
}, |
6291 | 6297 |
"@jridgewell/source-map": { |
6292 |
- "version": "0.3.2", |
|
6293 |
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", |
|
6294 |
- "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", |
|
6298 |
+ "version": "0.3.5", |
|
6299 |
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", |
|
6300 |
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", |
|
6295 | 6301 |
"requires": { |
6296 | 6302 |
"@jridgewell/gen-mapping": "^0.3.0", |
6297 | 6303 |
"@jridgewell/trace-mapping": "^0.3.9" |
... | ... | @@ -7619,9 +7625,9 @@ |
7619 | 7625 |
} |
7620 | 7626 |
}, |
7621 | 7627 |
"@types/estree": { |
7622 |
- "version": "0.0.51", |
|
7623 |
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", |
|
7624 |
- "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" |
|
7628 |
+ "version": "1.0.1", |
|
7629 |
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", |
|
7630 |
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" |
|
7625 | 7631 |
}, |
7626 | 7632 |
"@types/geojson": { |
7627 | 7633 |
"version": "7946.0.8", |
... | ... | @@ -7634,9 +7640,9 @@ |
7634 | 7640 |
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" |
7635 | 7641 |
}, |
7636 | 7642 |
"@types/node": { |
7637 |
- "version": "18.11.2", |
|
7638 |
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", |
|
7639 |
- "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" |
|
7643 |
+ "version": "20.4.2", |
|
7644 |
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", |
|
7645 |
+ "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" |
|
7640 | 7646 |
}, |
7641 | 7647 |
"@types/proj4": { |
7642 | 7648 |
"version": "2.5.2", |
... | ... | @@ -7761,133 +7767,133 @@ |
7761 | 7767 |
"integrity": "sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==" |
7762 | 7768 |
}, |
7763 | 7769 |
"@webassemblyjs/ast": { |
7764 |
- "version": "1.11.1", |
|
7765 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", |
|
7766 |
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", |
|
7770 |
+ "version": "1.11.6", |
|
7771 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", |
|
7772 |
+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", |
|
7767 | 7773 |
"requires": { |
7768 |
- "@webassemblyjs/helper-numbers": "1.11.1", |
|
7769 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1" |
|
7774 |
+ "@webassemblyjs/helper-numbers": "1.11.6", |
|
7775 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6" |
|
7770 | 7776 |
} |
7771 | 7777 |
}, |
7772 | 7778 |
"@webassemblyjs/floating-point-hex-parser": { |
7773 |
- "version": "1.11.1", |
|
7774 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", |
|
7775 |
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" |
|
7779 |
+ "version": "1.11.6", |
|
7780 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", |
|
7781 |
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" |
|
7776 | 7782 |
}, |
7777 | 7783 |
"@webassemblyjs/helper-api-error": { |
7778 |
- "version": "1.11.1", |
|
7779 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", |
|
7780 |
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" |
|
7784 |
+ "version": "1.11.6", |
|
7785 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", |
|
7786 |
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" |
|
7781 | 7787 |
}, |
7782 | 7788 |
"@webassemblyjs/helper-buffer": { |
7783 |
- "version": "1.11.1", |
|
7784 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", |
|
7785 |
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" |
|
7789 |
+ "version": "1.11.6", |
|
7790 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", |
|
7791 |
+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" |
|
7786 | 7792 |
}, |
7787 | 7793 |
"@webassemblyjs/helper-numbers": { |
7788 |
- "version": "1.11.1", |
|
7789 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", |
|
7790 |
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", |
|
7794 |
+ "version": "1.11.6", |
|
7795 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", |
|
7796 |
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", |
|
7791 | 7797 |
"requires": { |
7792 |
- "@webassemblyjs/floating-point-hex-parser": "1.11.1", |
|
7793 |
- "@webassemblyjs/helper-api-error": "1.11.1", |
|
7798 |
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6", |
|
7799 |
+ "@webassemblyjs/helper-api-error": "1.11.6", |
|
7794 | 7800 |
"@xtuc/long": "4.2.2" |
7795 | 7801 |
} |
7796 | 7802 |
}, |
7797 | 7803 |
"@webassemblyjs/helper-wasm-bytecode": { |
7798 |
- "version": "1.11.1", |
|
7799 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", |
|
7800 |
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" |
|
7804 |
+ "version": "1.11.6", |
|
7805 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", |
|
7806 |
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" |
|
7801 | 7807 |
}, |
7802 | 7808 |
"@webassemblyjs/helper-wasm-section": { |
7803 |
- "version": "1.11.1", |
|
7804 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", |
|
7805 |
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", |
|
7809 |
+ "version": "1.11.6", |
|
7810 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", |
|
7811 |
+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", |
|
7806 | 7812 |
"requires": { |
7807 |
- "@webassemblyjs/ast": "1.11.1", |
|
7808 |
- "@webassemblyjs/helper-buffer": "1.11.1", |
|
7809 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
7810 |
- "@webassemblyjs/wasm-gen": "1.11.1" |
|
7813 |
+ "@webassemblyjs/ast": "1.11.6", |
|
7814 |
+ "@webassemblyjs/helper-buffer": "1.11.6", |
|
7815 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
7816 |
+ "@webassemblyjs/wasm-gen": "1.11.6" |
|
7811 | 7817 |
} |
7812 | 7818 |
}, |
7813 | 7819 |
"@webassemblyjs/ieee754": { |
7814 |
- "version": "1.11.1", |
|
7815 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", |
|
7816 |
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", |
|
7820 |
+ "version": "1.11.6", |
|
7821 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", |
|
7822 |
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", |
|
7817 | 7823 |
"requires": { |
7818 | 7824 |
"@xtuc/ieee754": "^1.2.0" |
7819 | 7825 |
} |
7820 | 7826 |
}, |
7821 | 7827 |
"@webassemblyjs/leb128": { |
7822 |
- "version": "1.11.1", |
|
7823 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", |
|
7824 |
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", |
|
7828 |
+ "version": "1.11.6", |
|
7829 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", |
|
7830 |
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", |
|
7825 | 7831 |
"requires": { |
7826 | 7832 |
"@xtuc/long": "4.2.2" |
7827 | 7833 |
} |
7828 | 7834 |
}, |
7829 | 7835 |
"@webassemblyjs/utf8": { |
7830 |
- "version": "1.11.1", |
|
7831 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", |
|
7832 |
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" |
|
7836 |
+ "version": "1.11.6", |
|
7837 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", |
|
7838 |
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" |
|
7833 | 7839 |
}, |
7834 | 7840 |
"@webassemblyjs/wasm-edit": { |
7835 |
- "version": "1.11.1", |
|
7836 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", |
|
7837 |
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", |
|
7841 |
+ "version": "1.11.6", |
|
7842 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", |
|
7843 |
+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", |
|
7838 | 7844 |
"requires": { |
7839 |
- "@webassemblyjs/ast": "1.11.1", |
|
7840 |
- "@webassemblyjs/helper-buffer": "1.11.1", |
|
7841 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
7842 |
- "@webassemblyjs/helper-wasm-section": "1.11.1", |
|
7843 |
- "@webassemblyjs/wasm-gen": "1.11.1", |
|
7844 |
- "@webassemblyjs/wasm-opt": "1.11.1", |
|
7845 |
- "@webassemblyjs/wasm-parser": "1.11.1", |
|
7846 |
- "@webassemblyjs/wast-printer": "1.11.1" |
|
7845 |
+ "@webassemblyjs/ast": "1.11.6", |
|
7846 |
+ "@webassemblyjs/helper-buffer": "1.11.6", |
|
7847 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
7848 |
+ "@webassemblyjs/helper-wasm-section": "1.11.6", |
|
7849 |
+ "@webassemblyjs/wasm-gen": "1.11.6", |
|
7850 |
+ "@webassemblyjs/wasm-opt": "1.11.6", |
|
7851 |
+ "@webassemblyjs/wasm-parser": "1.11.6", |
|
7852 |
+ "@webassemblyjs/wast-printer": "1.11.6" |
|
7847 | 7853 |
} |
7848 | 7854 |
}, |
7849 | 7855 |
"@webassemblyjs/wasm-gen": { |
7850 |
- "version": "1.11.1", |
|
7851 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", |
|
7852 |
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", |
|
7856 |
+ "version": "1.11.6", |
|
7857 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", |
|
7858 |
+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", |
|
7853 | 7859 |
"requires": { |
7854 |
- "@webassemblyjs/ast": "1.11.1", |
|
7855 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
7856 |
- "@webassemblyjs/ieee754": "1.11.1", |
|
7857 |
- "@webassemblyjs/leb128": "1.11.1", |
|
7858 |
- "@webassemblyjs/utf8": "1.11.1" |
|
7860 |
+ "@webassemblyjs/ast": "1.11.6", |
|
7861 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
7862 |
+ "@webassemblyjs/ieee754": "1.11.6", |
|
7863 |
+ "@webassemblyjs/leb128": "1.11.6", |
|
7864 |
+ "@webassemblyjs/utf8": "1.11.6" |
|
7859 | 7865 |
} |
7860 | 7866 |
}, |
7861 | 7867 |
"@webassemblyjs/wasm-opt": { |
7862 |
- "version": "1.11.1", |
|
7863 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", |
|
7864 |
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", |
|
7868 |
+ "version": "1.11.6", |
|
7869 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", |
|
7870 |
+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", |
|
7865 | 7871 |
"requires": { |
7866 |
- "@webassemblyjs/ast": "1.11.1", |
|
7867 |
- "@webassemblyjs/helper-buffer": "1.11.1", |
|
7868 |
- "@webassemblyjs/wasm-gen": "1.11.1", |
|
7869 |
- "@webassemblyjs/wasm-parser": "1.11.1" |
|
7872 |
+ "@webassemblyjs/ast": "1.11.6", |
|
7873 |
+ "@webassemblyjs/helper-buffer": "1.11.6", |
|
7874 |
+ "@webassemblyjs/wasm-gen": "1.11.6", |
|
7875 |
+ "@webassemblyjs/wasm-parser": "1.11.6" |
|
7870 | 7876 |
} |
7871 | 7877 |
}, |
7872 | 7878 |
"@webassemblyjs/wasm-parser": { |
7873 |
- "version": "1.11.1", |
|
7874 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", |
|
7875 |
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", |
|
7879 |
+ "version": "1.11.6", |
|
7880 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", |
|
7881 |
+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", |
|
7876 | 7882 |
"requires": { |
7877 |
- "@webassemblyjs/ast": "1.11.1", |
|
7878 |
- "@webassemblyjs/helper-api-error": "1.11.1", |
|
7879 |
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", |
|
7880 |
- "@webassemblyjs/ieee754": "1.11.1", |
|
7881 |
- "@webassemblyjs/leb128": "1.11.1", |
|
7882 |
- "@webassemblyjs/utf8": "1.11.1" |
|
7883 |
+ "@webassemblyjs/ast": "1.11.6", |
|
7884 |
+ "@webassemblyjs/helper-api-error": "1.11.6", |
|
7885 |
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", |
|
7886 |
+ "@webassemblyjs/ieee754": "1.11.6", |
|
7887 |
+ "@webassemblyjs/leb128": "1.11.6", |
|
7888 |
+ "@webassemblyjs/utf8": "1.11.6" |
|
7883 | 7889 |
} |
7884 | 7890 |
}, |
7885 | 7891 |
"@webassemblyjs/wast-printer": { |
7886 |
- "version": "1.11.1", |
|
7887 |
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", |
|
7888 |
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", |
|
7892 |
+ "version": "1.11.6", |
|
7893 |
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", |
|
7894 |
+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", |
|
7889 | 7895 |
"requires": { |
7890 |
- "@webassemblyjs/ast": "1.11.1", |
|
7896 |
+ "@webassemblyjs/ast": "1.11.6", |
|
7891 | 7897 |
"@xtuc/long": "4.2.2" |
7892 | 7898 |
} |
7893 | 7899 |
}, |
... | ... | @@ -7931,14 +7937,14 @@ |
7931 | 7937 |
} |
7932 | 7938 |
}, |
7933 | 7939 |
"acorn": { |
7934 |
- "version": "8.8.0", |
|
7935 |
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", |
|
7936 |
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" |
|
7940 |
+ "version": "8.10.0", |
|
7941 |
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", |
|
7942 |
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" |
|
7937 | 7943 |
}, |
7938 | 7944 |
"acorn-import-assertions": { |
7939 |
- "version": "1.8.0", |
|
7940 |
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", |
|
7941 |
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", |
|
7945 |
+ "version": "1.9.0", |
|
7946 |
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", |
|
7947 |
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", |
|
7942 | 7948 |
"requires": {} |
7943 | 7949 |
}, |
7944 | 7950 |
"ajv": { |
... | ... | @@ -8364,9 +8370,9 @@ |
8364 | 8370 |
}, |
8365 | 8371 |
"dependencies": { |
8366 | 8372 |
"semver": { |
8367 |
- "version": "7.3.8", |
|
8368 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", |
|
8369 |
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", |
|
8373 |
+ "version": "7.5.4", |
|
8374 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", |
|
8375 |
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", |
|
8370 | 8376 |
"requires": { |
8371 | 8377 |
"lru-cache": "^6.0.0" |
8372 | 8378 |
} |
... | ... | @@ -8488,9 +8494,9 @@ |
8488 | 8494 |
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" |
8489 | 8495 |
}, |
8490 | 8496 |
"enhanced-resolve": { |
8491 |
- "version": "5.10.0", |
|
8492 |
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", |
|
8493 |
- "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", |
|
8497 |
+ "version": "5.15.0", |
|
8498 |
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", |
|
8499 |
+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", |
|
8494 | 8500 |
"requires": { |
8495 | 8501 |
"graceful-fs": "^4.2.4", |
8496 | 8502 |
"tapable": "^2.2.0" |
... | ... | @@ -8502,9 +8508,9 @@ |
8502 | 8508 |
"integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" |
8503 | 8509 |
}, |
8504 | 8510 |
"es-module-lexer": { |
8505 |
- "version": "0.9.3", |
|
8506 |
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", |
|
8507 |
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" |
|
8511 |
+ "version": "1.3.0", |
|
8512 |
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", |
|
8513 |
+ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" |
|
8508 | 8514 |
}, |
8509 | 8515 |
"es6-promise": { |
8510 | 8516 |
"version": "4.2.8", |
... | ... | @@ -9215,9 +9221,9 @@ |
9215 | 9221 |
}, |
9216 | 9222 |
"dependencies": { |
9217 | 9223 |
"semver": { |
9218 |
- "version": "5.7.1", |
|
9219 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", |
|
9220 |
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" |
|
9224 |
+ "version": "5.7.2", |
|
9225 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", |
|
9226 |
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" |
|
9221 | 9227 |
} |
9222 | 9228 |
} |
9223 | 9229 |
}, |
... | ... | @@ -9861,9 +9867,9 @@ |
9861 | 9867 |
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" |
9862 | 9868 |
}, |
9863 | 9869 |
"schema-utils": { |
9864 |
- "version": "3.1.1", |
|
9865 |
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", |
|
9866 |
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", |
|
9870 |
+ "version": "3.3.0", |
|
9871 |
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", |
|
9872 |
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", |
|
9867 | 9873 |
"requires": { |
9868 | 9874 |
"@types/json-schema": "^7.0.8", |
9869 | 9875 |
"ajv": "^6.12.5", |
... | ... | @@ -9871,9 +9877,9 @@ |
9871 | 9877 |
} |
9872 | 9878 |
}, |
9873 | 9879 |
"semver": { |
9874 |
- "version": "6.3.0", |
|
9875 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", |
|
9876 |
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" |
|
9880 |
+ "version": "6.3.1", |
|
9881 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", |
|
9882 |
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" |
|
9877 | 9883 |
}, |
9878 | 9884 |
"send": { |
9879 | 9885 |
"version": "0.18.0", |
... | ... | @@ -9918,9 +9924,9 @@ |
9918 | 9924 |
} |
9919 | 9925 |
}, |
9920 | 9926 |
"serialize-javascript": { |
9921 |
- "version": "6.0.0", |
|
9922 |
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", |
|
9923 |
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", |
|
9927 |
+ "version": "6.0.1", |
|
9928 |
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", |
|
9929 |
+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", |
|
9924 | 9930 |
"requires": { |
9925 | 9931 |
"randombytes": "^2.1.0" |
9926 | 9932 |
} |
... | ... | @@ -10071,26 +10077,26 @@ |
10071 | 10077 |
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" |
10072 | 10078 |
}, |
10073 | 10079 |
"terser": { |
10074 |
- "version": "5.15.1", |
|
10075 |
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", |
|
10076 |
- "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", |
|
10080 |
+ "version": "5.19.0", |
|
10081 |
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz", |
|
10082 |
+ "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==", |
|
10077 | 10083 |
"requires": { |
10078 |
- "@jridgewell/source-map": "^0.3.2", |
|
10079 |
- "acorn": "^8.5.0", |
|
10084 |
+ "@jridgewell/source-map": "^0.3.3", |
|
10085 |
+ "acorn": "^8.8.2", |
|
10080 | 10086 |
"commander": "^2.20.0", |
10081 | 10087 |
"source-map-support": "~0.5.20" |
10082 | 10088 |
} |
10083 | 10089 |
}, |
10084 | 10090 |
"terser-webpack-plugin": { |
10085 |
- "version": "5.3.6", |
|
10086 |
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", |
|
10087 |
- "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", |
|
10091 |
+ "version": "5.3.9", |
|
10092 |
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", |
|
10093 |
+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", |
|
10088 | 10094 |
"requires": { |
10089 |
- "@jridgewell/trace-mapping": "^0.3.14", |
|
10095 |
+ "@jridgewell/trace-mapping": "^0.3.17", |
|
10090 | 10096 |
"jest-worker": "^27.4.5", |
10091 | 10097 |
"schema-utils": "^3.1.1", |
10092 |
- "serialize-javascript": "^6.0.0", |
|
10093 |
- "terser": "^5.14.1" |
|
10098 |
+ "serialize-javascript": "^6.0.1", |
|
10099 |
+ "terser": "^5.16.8" |
|
10094 | 10100 |
} |
10095 | 10101 |
}, |
10096 | 10102 |
"text-segmentation": { |
... | ... | @@ -10194,9 +10200,9 @@ |
10194 | 10200 |
"dev": true |
10195 | 10201 |
}, |
10196 | 10202 |
"semver": { |
10197 |
- "version": "7.5.1", |
|
10198 |
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", |
|
10199 |
- "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", |
|
10203 |
+ "version": "7.5.4", |
|
10204 |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", |
|
10205 |
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", |
|
10200 | 10206 |
"dev": true, |
10201 | 10207 |
"requires": { |
10202 | 10208 |
"lru-cache": "^6.0.0" |
... | ... | @@ -10359,6 +10365,11 @@ |
10359 | 10365 |
"@vue/devtools-api": "^6.1.4" |
10360 | 10366 |
} |
10361 | 10367 |
}, |
10368 |
+ "vue-session": { |
|
10369 |
+ "version": "1.0.0", |
|
10370 |
+ "resolved": "https://registry.npmjs.org/vue-session/-/vue-session-1.0.0.tgz", |
|
10371 |
+ "integrity": "sha512-Ep9lRKGgCZdcGV3In3R3zoSp5Wr+hlcIc8WJ9BG+QKzibwaFZnnvp9HBVdd+dU8d6HGLSi5sWywDmd5MkrkfoQ==" |
|
10372 |
+ }, |
|
10362 | 10373 |
"vue-style-loader": { |
10363 | 10374 |
"version": "4.1.3", |
10364 | 10375 |
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", |
... | ... | @@ -10444,21 +10455,21 @@ |
10444 | 10455 |
"integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" |
10445 | 10456 |
}, |
10446 | 10457 |
"webpack": { |
10447 |
- "version": "5.74.0", |
|
10448 |
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", |
|
10449 |
- "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", |
|
10458 |
+ "version": "5.88.1", |
|
10459 |
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", |
|
10460 |
+ "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", |
|
10450 | 10461 |
"requires": { |
10451 | 10462 |
"@types/eslint-scope": "^3.7.3", |
10452 |
- "@types/estree": "^0.0.51", |
|
10453 |
- "@webassemblyjs/ast": "1.11.1", |
|
10454 |
- "@webassemblyjs/wasm-edit": "1.11.1", |
|
10455 |
- "@webassemblyjs/wasm-parser": "1.11.1", |
|
10463 |
+ "@types/estree": "^1.0.0", |
|
10464 |
+ "@webassemblyjs/ast": "^1.11.5", |
|
10465 |
+ "@webassemblyjs/wasm-edit": "^1.11.5", |
|
10466 |
+ "@webassemblyjs/wasm-parser": "^1.11.5", |
|
10456 | 10467 |
"acorn": "^8.7.1", |
10457 |
- "acorn-import-assertions": "^1.7.6", |
|
10468 |
+ "acorn-import-assertions": "^1.9.0", |
|
10458 | 10469 |
"browserslist": "^4.14.5", |
10459 | 10470 |
"chrome-trace-event": "^1.0.2", |
10460 |
- "enhanced-resolve": "^5.10.0", |
|
10461 |
- "es-module-lexer": "^0.9.0", |
|
10471 |
+ "enhanced-resolve": "^5.15.0", |
|
10472 |
+ "es-module-lexer": "^1.2.1", |
|
10462 | 10473 |
"eslint-scope": "5.1.1", |
10463 | 10474 |
"events": "^3.2.0", |
10464 | 10475 |
"glob-to-regexp": "^0.4.1", |
... | ... | @@ -10467,9 +10478,9 @@ |
10467 | 10478 |
"loader-runner": "^4.2.0", |
10468 | 10479 |
"mime-types": "^2.1.27", |
10469 | 10480 |
"neo-async": "^2.6.2", |
10470 |
- "schema-utils": "^3.1.0", |
|
10481 |
+ "schema-utils": "^3.2.0", |
|
10471 | 10482 |
"tapable": "^2.1.1", |
10472 |
- "terser-webpack-plugin": "^5.1.3", |
|
10483 |
+ "terser-webpack-plugin": "^5.3.7", |
|
10473 | 10484 |
"watchpack": "^2.4.0", |
10474 | 10485 |
"webpack-sources": "^3.2.3" |
10475 | 10486 |
} |
--- package.json
+++ package.json
... | ... | @@ -21,12 +21,13 @@ |
21 | 21 |
"vue": "3.2.40", |
22 | 22 |
"vue-loader": "^17.0.0", |
23 | 23 |
"vue-router": "4.1.5", |
24 |
+ "vue-session": "^1.0.0", |
|
24 | 25 |
"vue-style-loader": "4.1.3", |
25 | 26 |
"vue3-leaflet": "^1.0.46", |
26 | 27 |
"vue3-openlayers": "^0.5.1", |
27 | 28 |
"vue3-sfc-loader": "^0.8.4", |
28 | 29 |
"vuex": "^4.1.0", |
29 |
- "webpack": "5.74.0", |
|
30 |
+ "webpack": "^5.88.1", |
|
30 | 31 |
"webpack-cli": "4.10.0" |
31 | 32 |
}, |
32 | 33 |
"scripts": { |
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?