최정임 최정임 2023-06-02
230602 최정임 프론트 작업중
@41882d55c0ac0bd5b4a8728fc09f955a129bb227
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -146,10 +146,60 @@
   margin-left: 32rem !important;
 }
 
-.m-b{margin-bottom: 0.5rem;}
+.m-b{margin-bottom: 1rem;}
 .m-r{margin-right: 1rem;}
-
+.gap{gap: 1rem;}
 button{padding: 0.3rem 2rem;}
 .btn-l{width: -webkit-fill-available;}
 .green-btn{background: #13833b; border: 0; border-radius: 5px; color: #fff;}
-.gray-btn{background: #f9f9f9; border: 1px solid #c8c5c5; border-radius: 5px;}
(No newline at end of file)
+.gray-btn{background: #f9f9f9; border: 1px solid #c8c5c5; border-radius: 5px;}
+
+
+/*스크롤바디자인*/
+::-webkit-scrollbar {
+  width: 8px;
+}
+::-webkit-scrollbar-thumb {
+  background-color: #c4c7cc;
+  border-radius: 10px;
+}
+::-webkit-scrollbar-track {
+  background-color: #eef3fa;
+  border-radius: 10px;
+}
+
+/* 모달 */
+.modal-wrap {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 50;
+}
+
+.modal-bg {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, .6);
+}
+
+.modal {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);    
+  z-index: 2;
+  background-color: #fff;
+  
+  text-align: center;
+}
+
+.modal .btn-wrap {
+  margin-top: 15px;
+  text-align: center;
+}
+.txt-point {
+  color: #13833b;
+}
(No newline at end of file)
client/resources/css/layout.css
--- client/resources/css/layout.css
+++ client/resources/css/layout.css
@@ -55,19 +55,17 @@
 
 .verticalbar {
   width: 155rem;
-  height: 15rem;
   border-radius: 15px;
   background-color: #dddddd;
   margin-bottom: 3rem;
-  display: block;
-  padding: 2rem;
+  padding: 1rem;
 }
 .bar_title {
   color: #3b3d3d;
   font-size: 28px;
   font-weight: bolder;
-  margin-left: 6rem;
-  margin-right: 12rem;
+  width: 41rem;
+  padding-left: 9rem;
 }
 
 .barinfo {
@@ -78,11 +76,9 @@
   justify-content: center;
   font-size: 16px;
   color: #949292;
-  margin-left: 10rem;
 }
 
 .bar_element {
-  height: 15rem;
   width: 15rem;
   text-align: center;
 }
@@ -91,24 +87,18 @@
   background: #ffffff;
   border-radius: 15px;
   width: 76rem;
-  height: 35rem;
   box-shadow: 0px 5px 20px #00000038;
   padding: 2rem;
 }
 
 .board_title {
   color: #13833b;
-  width: 70rem;
   font-size: 26px;
-  margin-bottom: 2.5rem;
-  margin-left: 8rem;
 }
 .board_add {
   color: #565757;
   transition: 0.3s;
   font-size: 26px;
-  margin-left: 43.6rem;
-  margin-right: 2rem;
 }
 .board_add:hover {
   color: #13833b;
@@ -118,9 +108,9 @@
 .boardinfo {
   color: #3e4141;
   font-size: 20px;
-  padding: 2rem;
+  padding: 2rem 2rem 0 2rem;
 }
-
+.boardinfo .board_element:last-child{margin: 0;}
 .beforetxt {
   font-size: 10px;
   color: #13833b;
@@ -131,7 +121,7 @@
   display: flex;
   flex-wrap: wrap;
   align-items: center;
-  margin-bottom: 25px;
+  margin-bottom: 15px;
   justify-content: space-between;
   align-items: center;
 }
@@ -143,9 +133,9 @@
 
 .boxmenu {
   display: flex;
-  height: 13.5rem;
   background-color: #fdfdf2;
   box-shadow: 0px 5px 20px #00000038;
+  padding: 1rem;
 }
 /* .box {
   width: 29%;
@@ -177,7 +167,7 @@
 
 .boxborder {
   content: "";
-  height: 10.5rem;
+  height: 6rem;
   border-right: 2px solid #9c9b9a;
   float: right;
   position: relative;
 
client/resources/images/close.png (Binary) (added)
+++ client/resources/images/close.png
Binary file is not shown
client/resources/images/icon/scumulativenumberofpedestrians.png (Binary) (Renamed from client/resources/images/icon/today'scumulativenumberofpedestrians.png (Binary))
--- client/resources/images/icon/today'scumulativenumberofpedestrians.png
+++ client/resources/images/icon/scumulativenumberofpedestrians.png
Binary file is not shown
 
client/resources/js/commonUtil.js (added)
+++ client/resources/js/commonUtil.js
@@ -0,0 +1,507 @@
+/**
+ * @author 최정우
+
+ * @since 2019.12.06
+ *
+ * 공통 자바스크립트 Util입니다.
+ */
+
+const COMMON_UTIL = (function () {
+
+	var _utils = {
+		/**
+		 * 빈 객체 여부
+		 */
+		isEmpty: function (data) {
+			if (data === undefined || data === null || data === "" || data.length === 0 || (data.constructor == Object && Object.keys(data).length === 0)) {
+				if ((typeof data) === "number") {
+					return false
+				} else {
+					return true;
+				}
+			} else {
+				return false;
+			}
+		},
+
+		/**
+		 * empty to null
+		 */
+		toNull: function (data) {
+			if(data === undefined || data === "") {
+				try {
+					data = null;
+					return data;
+				} catch (e) {
+					console.log("commonUtil.js - empty to null convert error : ", e);
+					return data;
+				}
+			} else {
+				return data;
+			}
+		},
+
+		/**
+		 * string to JSON
+		 */
+		toJson: function (data) {
+			if ("string" === (typeof data)) {
+				try {
+					return JSON.parse(data);
+				} catch (e) {
+					console.log("commonUtil.js - string to json convert error : ", e);
+					return data;
+				}
+			} else {
+				return data;
+			}
+		},
+
+		/**
+		 * string to JSON
+		 */
+		toJson: function (data) {
+			if ("string" === (typeof data)) {
+				try {
+					return JSON.parse(data);
+				} catch (e) {
+					console.log("commonUtil.js - string to json convert error : ", e);
+					return data;
+				}
+			} else {
+				return data;
+			}
+		},
+
+		/**
+		 * JSON to string
+		 */
+		toString: function (data) {
+			try {
+				return JSON.parse(data);
+			} catch (e) {
+				console.log("commonUtil.js - json to string convert error : ", e);
+				return data;
+			}
+		},
+
+		/**
+		 * 다중 separator split
+		 */
+		split: function (text, separator) {
+			var words = [];
+			if (this.isEmpty(text) == false && this.isEmpty(separator) == false && separator.length > 0) {
+				words.push(text);
+				for (var i = 0; i < separator.length; i++) {
+					var subWords = [];
+					for (var j = 0; j < words.length; j++) {
+						if (this.isEmpty(words[j]) == false && this.isEmpty(separator[i]) == false) {
+							subWords = subWords.concat(words[j].split(separator[i]));
+						} else {
+							if (words[j] == false) {
+								subWords.push(words[j]);
+							} else {
+								continue;
+							}
+						}
+					}
+					words = subWords;
+				}
+				return words;
+			} else {
+				if (this.isEmpty(text) == false) {
+					words.push(text);
+				}
+				return words;
+			}
+		},
+
+		/**
+		 * 객체 깊은 복사
+		 */
+		copyObject: function (obj) {
+			if (obj === null || typeof(obj) !== 'object') return obj;
+
+			try {
+				return JSON.parse(JSON.stringify(obj));
+			} catch (e) {
+				console.log("commonUtil.js - copyObject error : ", e);
+				return null;
+			}
+		},
+		/**
+		 * 날짜 + 시간 구하기
+		 *
+		 *
+
+		 */
+		getDateTime : function () {
+			return this.getDate()+ " " + this.getFullTime();
+		},
+
+		/**
+		 * 날짜 구하기
+		 *
+		 * param 설명
+		 *
+		 * options = {
+		 * 	 addYear(Integer),
+		 *   addMonth(Integer),
+		 *   addDay(Integer),
+		 *   separator(String)
+		 * }
+		 */
+		getDate: function (options) {
+
+			if (this.isEmpty(options) == true) {
+				options = {
+					addYear: 0,
+					addMonth: 0,
+					addDay: 0,
+					separator: '-'
+				}
+			} else {
+				options.addYear = options.addYear || 0;
+				options.addMonth = options.addMonth || 0;
+				options.addDay = options.addDay || 0;
+				options.separator = options.separator || '-';
+			}
+
+			var date = new Date();
+			date.setFullYear(date.getFullYear() + options.addYear);
+			date.setMonth(date.getMonth() + options.addMonth);
+			date.setDate(date.getDate() + options.addDay);
+
+			var yyyy = date.getFullYear();
+			var mm = date.getMonth() + 1;
+			var dd = date.getDate();
+
+			return yyyy + options.separator + this.prefixZero(mm, 2) + options.separator + this.prefixZero(dd, 2);
+		},
+
+		/**
+		 * 현재 년도 조회
+		 */
+		getYear: function () {
+			var date = new Date();
+			return date.getFullYear();
+		},
+
+		/**
+		 * 현재 월 조회
+		 */
+		getMonth: function () {
+			var date = new Date();
+			return date.getMonth() + 1;
+		},
+
+		/**
+		 * 현재 월 조회
+		 */
+		getFullMonth: function () {
+			var date = new Date();
+			return this.prefixZero((date.getMonth() + 1), 2);
+		},
+
+		/**
+		 * 현재 일 조회
+		 */
+		getDay: function () {
+			var date = new Date();
+			return date.getDate();
+		},
+
+		/**
+		 * 현재 일 조회
+		 */
+		getFullDay: function () {
+			var date = new Date();
+			return this.prefixZero(date.getDate(), 2);
+		},
+
+		/**
+		 * 현재 시간 조회
+		 */
+		getHour: function () {
+			var date = new Date();
+			return date.getFullYear();
+		},
+
+		/**
+		 * 현재 분 조회
+		 */
+		getMinute: function () {
+			var date = new Date();
+			return date.getMinutes() + 1;
+		},
+
+		/**
+		 * 현재 초 조회
+		 */
+		getSeconds: function () {
+			var date = new Date();
+			return date.getSeconds();
+		},
+
+		/**
+		 * 시간 구하기
+		 *
+		 * param 설명
+		 *
+		 * options = {
+		 * 	 addHour(Integer),
+		 *   addMinute(Integer),
+		 *   addSeconds(Integer),
+		 *   separator(String)
+		 * }
+		 */
+		getFullTime: function (options) {
+			if (this.isEmpty(options) == true) {
+				options = {
+					addHour: 0,
+					addMinute: 0,
+					addSeconds: 0,
+					separator: '-'
+				}
+			} else {
+				options.addHour = options.addHour || 0;
+				options.addMinute = options.addMinute || 0;
+				options.addSeconds = options.addSeconds || 0;
+				options.separator = options.separator || ':';
+			}
+
+			var date = new Date();
+			date.setHours(date.getHours() + options.addHour);
+			date.setMinutes(date.getMinutes() + options.addMinute);
+			date.setSeconds(date.getSeconds() + options.addSeconds);
+
+			var h = date.getHours();
+			var m = date.getMinutes();
+			var s = date.getSeconds();
+
+			return this.prefixZero(h, 2) + ":" + this.prefixZero(m, 2) + ":" + this.prefixZero(s, 2);
+		},
+
+		/**
+		 * 시간 구하기
+		 *
+		 * param 설명
+		 *
+		 * options = {
+		 * 	 addHour(Integer),
+		 *   addMinute(Integer),
+		 *   separator(String)
+		 * }
+		 */
+		getTime: function (options) {
+			if (this.isEmpty(options) == true) {
+				options = {
+					addHour: 0,
+					addMinute: 0,
+					separator: '-'
+				}
+			} else {
+				options.addHour = options.addHour || 0;
+				options.addMinute = options.addMinute || 0;
+				options.separator = options.separator || ':';
+			}
+
+			var date = new Date();
+			date.setHours(date.getHours() + options.addHour);
+			date.setMinutes(date.getMinutes() + options.addMinute);
+
+			var h = date.getHours();
+			var m = date.getMinutes();
+
+			return this.prefixZero(h, 2) + ":" + this.prefixZero(m, 2);
+		},
+
+		/**
+		 * 특정 길이만큼 앞에'0' 붙이기
+		 *
+		 * param 설명
+		 *
+		 * text(String or Integer): 맨 뒤에 붙일 문자열(숫자든 문자든 상관웞음)
+		 * length(Integer): 해당 값 만큼 '0'을 붙임 (단, text의 문자열 길이를 뺌)
+		 * ex) this.prefixZero(2, 5) => 00002, this.prefixZero(20, 5) => 00020
+		 *
+		 */
+		prefixZero: function (text, length) {
+			var zero = '';
+			var suffix = text;
+
+			if ((typeof text) === "number") {
+				suffix = text.toString();
+			}
+
+
+			if (suffix.length < length) {
+				for (let i = 0; i < length - suffix.length; i++) {
+					zero += '0';
+				}
+			}
+			return zero + suffix;
+		},
+
+		/**
+		 * Date => text
+		 */
+		dateToText: function (date) {
+			var d = new Date(date);
+			var yyyy = d.getFullYear();
+			var mm = d.getMonth() + 1;
+			var dd = d.getDate();
+			return yyyy + "-" + this.prefixZero(mm, 2) + "-" + this.prefixZero(dd, 2);
+		},
+
+		/**
+		 * 최솟값은 포함, 최댓값은 제외한 정수 난수 생성(최솟값 ~ 최댓값 - 1)
+		 *
+		 * param 설명
+		 *
+		 * min(Integer): 난수 생성시, 최소값
+		 * max(Integer): 난수 생성시, 최대값
+		 *
+		 * ex) getRandomInt(2, 5) => 2~5사이의 정수 난수 값 리턴
+		 */
+		getRandomInt: function (min, max) {
+			min = Math.ceil(min);
+			max = Math.floor(max);
+			return Math.floor(Math.random() * (max - min)) + min;
+		},
+
+		/**
+		 * 현재 시스템의 URL 조회
+		 *
+		 * ex) http://localohst:8080, https://www.naver.com
+		 */
+		getSystemURL: function () {
+			var url = window.location.protocol
+			+ "//" + window.location.host;
+			return url;
+		},
+
+		/**
+		 * 현재 시스템의 URL 경로  조회
+		 *
+		 * ex) http://localohst:8080/dataset/datasetPostList => /dataset/datasetPostList
+		 */
+		getSystemPath: function () {
+			var path = window.location.pathname;
+			return path;
+		},
+
+		/**
+		 * 3글자 마다 콤마 찍기 (돈)
+		 *
+		 * ex) 10000 => 10,000
+		 */
+		comma: function (text) {
+			try {
+				return text.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
+			} catch (e) {
+				if (this.isEmpty(text) == true) {
+					return "-";
+				} else {
+					return text;
+				}
+			}
+		},
+
+		/**
+		 * 3글자 마다 콤마 찍기 (돈)
+		 *
+		 * ex) 10,000 => 10000
+		 */
+		removeComma: function (text) {
+			try {
+				return text.toString().replace(/,/g, "");;
+			} catch (e) {
+				if (this.isEmpty(text) == true) {
+					return "-";
+				} else {
+					return text;
+				}
+			}
+		},
+
+		/**
+		 * json 데이터 가지고 오기 (외부 JSON 파일 PATH or URL) (동기 요청)
+		 */
+		getJsonByPromise: function (url, isAsync) {
+			if (this.isEmpty(url) == true) {
+				new Error('COMMON_UTIL - getJson(url, isAsync) Error : url(parameter) is empty')
+			}
+			if (this.isEmpty(isAsync) == true) {
+				isAsync = true;
+			}
+
+			return new Promise(function (resolve, reject) {
+				var xhr = new XMLHttpRequest();
+				xhr.onload = function (e) {
+					if (xhr.readyState === 4) {
+						if (xhr.status === 200) {
+							resolve(JSON.parse(this.responseText));
+						} else {
+							reject(this);
+						}
+					}
+				};
+				xhr.onerror = function (e) {
+					reject(this);
+				};
+				xhr.open("GET", url, isAsync);
+				//xhr.responseType='json';
+				xhr.send(null);
+			});
+		},
+
+		/**
+		 * json 데이터 가지고 오기 (동기 요청) (외부 JSON 파일 PATH or URL)
+		 */
+		getJsonBySync: function (url) {
+			var result = {};
+			if (this.isEmpty(url) == true) {
+				new Error('COMMON_UTIL - getJson(url, isAsync) Error : url(parameter) is empty')
+				return result;
+			}
+
+			var xhr = new XMLHttpRequest();
+			xhr.onload = function (e) {
+				if (xhr.readyState === 4) {
+					if (xhr.status === 200) {
+						result = JSON.parse(this.responseText);
+					} else {
+						console.error(this);
+					}
+				}
+			};
+			xhr.onerror = function (e) {
+				console.error(this);
+			};
+			xhr.open("GET", url, false);
+			xhr.send(null);
+
+			return result;
+		},
+
+	}
+
+
+	//초기화
+	function init() {
+        //console.info('commonUtil.js initialized.');
+        return _utils;
+    }
+
+
+	return init();
+
+})();
+
+
+export default COMMON_UTIL;
+
+
+
+
client/views/component/MapPage.vue
--- client/views/component/MapPage.vue
+++ client/views/component/MapPage.vue
@@ -23,7 +23,7 @@
       /* global kakao */
       script.onload = () => kakao.maps.load(this.loadMap);
       script.src =
-        "http://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=d0f88d63bd41b545d08ea9984995f082&libraries=clusterer";
+        "http://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=d0f88d63bd41b545d08ea9984995f082";
       document.head.appendChild(script);
     },
     loadMap() {
 
client/views/component/Modal.vue (added)
+++ client/views/component/Modal.vue
@@ -0,0 +1,55 @@
+<template>
+    <div class="modal" v-if="visible">
+      
+      <div class="modal-content">
+        <slot></slot>
+      </div>
+      <!-- <div class="modal-overlay" @click="close"></div> -->
+    </div>
+  </template>
+  
+  <script>
+  export default {
+    props: {
+      visible: {
+        type: Boolean,
+        required: true,
+      },
+    },
+    methods: {
+      close() {
+        this.$emit("close");
+      },
+    },
+  };
+  </script>
+  
+  <style scoped>
+  .modal {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    z-index: 9999;
+  }
+  
+  .modal-overlay {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    /* background-color: rgba(0, 0, 0, 0.5); */
+  }
+  
+  .modal-content {
+    background-color: white;
+    /* padding: 20px; */
+    border-radius: 5px;
+    border: 1px solid black;
+  }
+  </style>(No newline at end of file)
 
client/views/index.js (added)
+++ client/views/index.js
@@ -0,0 +1,18 @@
+/**
+ * @author : 최정우
+ * @since : 2022.10.19
+ * @dscription : Vue를 활용한 Client단 구현의 시작점(Index) Component 입니다.
+ */
+import { createApp } from 'vue';
+
+import AppRouter from './pages/AppRouter.js';
+import App from './pages/App.vue';
+
+const vue = createApp(App).use(AppRouter).mount('#root');
+
+if (!APP_USER_HTTP_REQUEST_URL && APP_USER_HTTP_REQUEST_URL != '/') {
+    console.log('index.js APP_USER_HTTP_REQUEST_URL : ', APP_USER_HTTP_REQUEST_URL);
+    AppRouter.push({ path: APP_USER_HTTP_REQUEST_URL, query: {}})
+}
+
+
client/views/layout/Header.vue
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
@@ -96,10 +96,10 @@
       selectedOption: null,
       showDropdown2: false,
       dropdownOptions2: [
-        { label: '실시간 현황 관제', value: 'Introduction', route: '/Introduction.page' },
+        { label: '실시간 현황 관제', value: 'RealtimeStatus', route: '/RealtimeStatus.page' },
         { label: '상황발생 정보 조회', value: 'SituationSearch', route: '/SituationSearch.page' },
         { label: '장애발생 정보 조회', value: 'ErrorSearch', route: '/ErrorSearch.page' },
-        { label: '횡단보도 조회', value: 'CrosswalkListSearch', route: '/CrosswalkListSearch.page' },
+        { label: '횡단보도 목록 조회', value: 'CrosswalkListSearch', route: '/CrosswalkListSearch.page' },
       ],
       selectedOption2: null,
       showDropdown3: false,
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -35,7 +35,7 @@
 </script>
 
 <style scoped>
-.main-warp{position: relative;}
+.main-warp{position: relative; height: 865px;}
 [v-cloak] {
   display: none;
 }
 
client/views/pages/AppRouter.js (added)
+++ client/views/pages/AppRouter.js
@@ -0,0 +1,53 @@
+import { createWebHistory, createRouter } from "vue-router";
+
+import Main from '../pages/main/Main.vue';
+import RealtimeStatus from '../pages/RealtimeStatus/RealtimeStatus.vue';
+import CrosswalkListSearch from '../pages/RealtimeStatus/CrosswalkListSearch.vue';
+import SituationSearch from '../pages/RealtimeStatus/SituationSearch.vue';
+import ErrorSearch from '../pages/RealtimeStatus/ErrorSearch.vue';
+import Analysis from '../pages/Analysis/Analysis.vue';
+import CrosswalkInsert from '../pages/CrosswalkManagement/CrosswalkInsert.vue';
+import CrosswalkSearch from '../pages/CrosswalkManagement/CrosswalkSearch.vue';
+import UserManagement from '../pages/SystemManagement/UserManagement.vue';
+import DongManagement from '../pages/SystemManagement/DongManagement.vue';
+import NodeManagement from '../pages/SystemManagement/NodeManagement.vue';
+import ChargeManagement from '../pages/SystemManagement/ChargeManagement.vue';
+import DataRecord from '../pages/SystemManagement/DataRecord.vue';
+import UserAddForm from '../pages/SystemManagement/UserAddForm.vue';
+import ManagerAddForm from '../pages/SystemManagement/ManagerAddForm.vue';
+import Mypage from '../pages/User/Mypage.vue';
+import Login from '../pages/main/Login.vue';
+import IdFind from '../pages/main/IdFind.vue';
+import Introduction from '../pages/Introduction/Introduction.vue';
+import ManualDown from '../pages/Introduction/ManualDown.vue';
+
+const routes = [
+    /* 메인화면 */
+    { path: '/', name: 'Main', component: Main},
+    { path: '/RealtimeStatus.page', name: 'RealtimeStatus', component: RealtimeStatus},
+    { path: '/Analysis.page', name: 'Analysis', component: Analysis},
+    { path: '/CrosswalkInsert.page', name: 'CrosswalkInsert', component: CrosswalkInsert},
+    { path: '/CrosswalkSearch.page', name: 'CrosswalkSearch', component: CrosswalkSearch},
+    { path: '/UserManagement.page', name: 'UserManagement', component: UserManagement},
+    { path: '/Mypage.page', name: 'Mypage', component: Mypage},
+    { path: '/Login.page', name: 'Login', component: Login},
+    { path: '/Introduction.page', name: 'Introduction', component: Introduction},
+    { path: '/ManualDown.page', name: 'ManualDown', component: ManualDown},
+    { path: '/CrosswalkListSearch.page', name: 'CrosswalkListSearch', component: CrosswalkListSearch},
+    { path: '/SituationSearch.page', name: 'SituationSearch', component: SituationSearch},
+    { path: '/ErrorSearch.page', name: 'ErrorSearch', component: ErrorSearch},
+    { path: '/DongManagement.page', name: 'DongManagement', component: DongManagement},
+    { path: '/NodeManagement.page', name: 'NodeManagement', component: NodeManagement},
+    { path: '/ChargeManagement.page', name: 'ChargeManagement', component: ChargeManagement},
+    { path: '/DataRecord.page', name: 'DataRecord', component: DataRecord},
+    { path: '/UserAddForm.page', name: 'UserAddForm', component: UserAddForm},
+    { path: '/ManagerAddForm.page', name: 'ManagerAddForm', component: ManagerAddForm},
+    { path: '/IdFind.page', name: 'IdFind', component: IdFind},
+];
+
+const AppRouter = createRouter({
+    history: createWebHistory(),
+    routes,
+});
+
+export default AppRouter;(No newline at end of file)
client/views/pages/RealtimeStatus/CrosswalkListSearch.vue
--- client/views/pages/RealtimeStatus/CrosswalkListSearch.vue
+++ client/views/pages/RealtimeStatus/CrosswalkListSearch.vue
@@ -1,131 +1,361 @@
 <template>
- <div class="flex">
-   <div class="left">
-      <div class="wrap flex-between">
-        <div class="iconlist"><ul>
-          <li></li>
-          <li></li>
-          <li></li>
-          <li></li>
-        </ul></div>
-        <div>
-          <div class="">
-            <h2>지역설정</h2>
-            <div>
-              <label for="">시/도</label>
-              <select name="" id=""></select>
-            </div>
-            <div>
-              <label for="">시/군/구</label>
-              <select name="" id=""></select>
-            </div>
-            <div>
-              <label for="">행정동</label>
-              <select name="" id=""></select>
-            </div>
-            <div>
-              <label for="">교차로</label>
-              <select name="" id=""></select>
-            </div>
-            <h2>조건설정</h2>
-            <div class="flex">
-              <input type="checkbox" /><label for="">무단횡단</label>
-              <input type="checkbox" /><label for="">신호연장</label>
-              <input type="checkbox" /><label for="">신호위반</label>
-              <input type="checkbox" /><label for="">장애발생</label>
-            </div>
-            <div>
-              <label for="date-input">일자</label>
-              <input id="date-input" type="date" v-model="selectedDate" />
-            </div>
-            <div>
-              <label for="time-input">시간대</label>
-              <input id="time-input" type="time" v-model="selectedTime" />~<input
-                id="time-input"
-                type="time"
-                v-model="selectedTime"
-              />
-            </div>
-            <button>검색</button>
+  <div class="wrap">
+    <div class="board-wrap">
+      <div class="search-wrap">
+        <div class="flex m-b gap" style="margin-bottom: 2rem;">
+          <div class="flex gap m-r" style="margin-right: 5rem;">
+            <label>조회기간: </label>
+            <input type="date" name="" id="" />
+            <span>~</span>
+            <input type="date" name="" id="" />
           </div>
-          <div class="">
-            <h2>지역설정</h2>
-            <button>상황발생현황</button>
-            <button>장애발생현황</button>
-            <ul>
-              <li>
-                <p>발생일시: 2023-05-04 14:27</p>
-                <p>상황명: 무단횡단</p>
-                <p>발생장소: 영재어린이집(서측)</p>
-              </li>
-            </ul>
+          <div class="flex gap">
+            <label>지역: </label>
+            <select name="" id="">
+              <option value="">대구광역시</option>
+            </select>
+            <select name="" id="">
+              <option value="">서구</option>
+            </select>
+            <select name="" id="">
+              <option value="">전체</option>
+            </select>            
+          </div>
+        </div>
+        <div class="flex-between gap">
+         <div class="gap flex">
+            <label>우회차선: </label>
+              <select name="" id="">
+                <option value="">전체</option>
+              </select>
+            <label>왕복차선: </label>
+              <select name="" id="">
+                <option value="">전체</option>
+              </select>
+            <div class="m-r flex">
+              <label class="m-r">장비: </label>
+              <label>무단횡단</label>
+              <input class="m-r" type="checkbox" name="" id="" />
+              <label>신호연장</label>
+              <input class="m-r" type="checkbox" name="" id="" />
+              <label>우회차량</label>
+              <input class="m-r" type="checkbox" name="" id="" />
+            </div>
+            <label>상태: </label>
+              <select name="" id="">
+                <option value="">정상</option>
+              </select>
+         </div>
+
+            <button type="button" class="btn-2 green-btn">조회</button>
+        </div>
+
+      </div>
+      <div>
+        <table>
+          <!-- <colgroup>
+            <col style="width: 10%;">
+            <col style="width: 20%;">
+            <col style="width: 20%;">
+            <col style="width: 30%;">
+            <col style="width: 20%;">
+          </colgroup> -->
+          <thead>
+            <tr>
+              <th>No</th>
+              <th>설치일자</th>
+              <th>시/도</th>
+              <th>시/군/구</th>
+              <th>행정동</th>
+              <th>교차로</th>
+              <th>횡단보도명</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr @click="modal_1 = true">
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+            </tr>
+          </tbody>
+        </table>
+        <div class="modal-wrap" v-if="modal_1 == true">
+          <div class="modal-bg"></div>
+          <div class="modal">
+            <h2 class="flex-between">횡단보도 상세정보 <button type="button" class="gray-btn" @click="modal_1 = false">
+                <img src="../../../resources/images/close.png" alt="">
+              </button></h2>
+              <div class="flex-between">
+                <div class="img">무단횡단검지카메라 이미지</div>
+                <div class="img">무단횡단검지카메라 이미지</div>
+                <div class="img">신호연장검지카메라 이미지</div>
+                <div class="img">신호연장검지카메라 이미지</div>
+                <div class="img">우회차량검지카메라 이미지</div>
+              </div>
+            <div class="modalmain">
+              <table>
+            <colgroup>
+              <col style="width: 20%;">
+              <col style="width: 20%;">
+              <col style="width: 60%;">
+            </colgroup>
+            <tbody>
+              <tr >
+                <td colspan="2">시/도</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">시/군/구</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">행정동</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">노드명</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">방위각</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td rowspan="2">좌표</td>
+                <td>경도</td>
+              </tr>
+              <tr >
+                <td>위도</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td rowspan="3">설치된 검시장비</td>
+                <td>무단횡단</td>
+              </tr>
+              <tr >
+                <td>신호연장</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>우회전차량</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">무단횡단 검지범위</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">왕복차선</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">우회전차선유무</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">우회전차선유형</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">등록일자</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td colspan="2">횡단보도 유지보수 담당자</td>
+                <td></td>
+              </tr>
+              
+            </tbody>
+          </table>
+              <h4 style="margin-top: 2rem;">횡단보도 유지보수 담당자 정보</h4>
+              <table>
+            <colgroup>
+              <col style="width: 50%;">
+              <col style="width: 50%;">
+            </colgroup>
+            <tbody>
+              <tr >
+                <td>이름</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>이메일</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>소속정보</td>
+                <td></td>
+              </tr>
+            </tbody>
+          </table>
+            </div>
           </div>
         </div>
       </div>
-   </div>
-   <div class="right">
-      <div class="top">
-          <ul class="flex-end">
-            <li>
-              <p>금일 보행자</p>
-              <h3>명</h3>
-            </li>
-            <li>
-              <p>금일 무단횡단 발생</p>
-              <h3>회</h3>
-            </li>
-            <li>
-              <p>금일 신호연장 발생</p>
-              <h3>회</h3>
-            </li>
-            <li>
-              <p>금일 신호연장 시간</p>
-              <h3>초</h3>
-            </li>
-            <li>
-              <p>금일 차량 신호위반 발생</p>
-              <h3>회</h3>
-            </li>
-            <li>
-              <p>금일 장애 발생</p>
-              <h3>회</h3>
-            </li>
-          </ul>
+      <div class="bottom-wrap">
+        <div class="pg-wrap">
+          <a href="#" class="pg-item prev">◀</a>
+          <a href="#" class="pg-item active">1</a>
+          <a href="#" class="pg-item">2</a>
+          <a href="#" class="pg-item">3</a>
+          <a href="#" class="pg-item">4</a>
+          <a href="#" class="pg-item">5</a>
+          <a href="#" class="pg-item next">▶</a>
         </div>
-      <div><MapPage /></div>
-   </div>
- </div>
-  
+        <div class="btn-wrap">
+          <router-link to="/UserManagement.page">
+            <span class="btn-2 green-btn">Excel로 저장</span>
+          </router-link>
+        </div>
+      </div>
+    </div>
+  </div>
 </template>
-<style scoped>
-.top p{font-size: 15px;}
-.top ul{padding: 1rem 0;}
-.top li{width: 267px; text-align: center;}
-.top h3{font-size: 20px;}
-.wrap {
-  z-index: 100;
-  top: 0;
-}
-.left {
-  background: #fff;
-  width: 300px;
-}
-</style>
+
 <script>
-import MapPage from "../../component/MapPage.vue";
+import Modal from "../../component/Modal.vue";
 
 export default {
   data() {
-    return {};
+    return {
+      modal_1: false,
+    };
   },
-  components: {
-    MapPage: MapPage,
+  methods: {
+    
   },
-  methods: {},
   watch: {},
-  computed: {},
+  computed: {
+    Modal: Modal,
+  },
   mounted() {
-    console.log("Main2 mounted");
+    console.log("Main4 mounted");
   },
 };
 </script>
+
+<style scoped>
+.img{width: 20rem; height: 20rem; border: 1px solid #e5e5dd;}
+label{width: max-content;}
+select{width: 15rem;}
+.modal{width: 100rem;     max-height: 70rem;
+    overflow: scroll;
+    overflow-x: hidden;}
+.modalmain{ padding: 1rem;}
+.modalmain table tbody tr:nth-child(odd){background: #f7f6f6;}
+.modalmain table tbody tr:nth-child(even){background: #ffffff;}
+.modalmain table td{border: 1px solid #eee;}
+.modal h2{background: #e5e5dd; font-size: 2rem; padding: 1rem ;}
+.modal h3{font-size: 1.8rem; border-bottom: 1px solid #eee; padding: 1rem  0  0.2rem 0;}
+.modal h4{font-size: 1.6rem; font-weight: 100; padding: 0.2rem 0 1rem 0 ;}
+.modal button{border: 0; background: none;     height: 30px;
+    cursor: pointer;}
+.modal button img{width: 25px;}
+.txt-point {
+  color: #333;
+}
+.wrap {
+  width: 155rem;
+  margin: 100px auto;
+}
+
+.search-wrap {
+  margin-bottom: 30px;
+  background: #f7f6f6;
+  padding: 1rem;
+}
+
+.search-wrap input,
+.search-wrap select {
+  height: 22.5px;
+  border-radius: 3px;
+  border: 1px solid #949292;
+}
+
+.float-right {
+  float: right;
+}
+
+.clear-fix::after {
+  content: "";
+  display: block;
+  clear: both;
+}
+
+.search-wrap .float-right form > *:not(:last-child) {
+  margin-right: 1rem;
+}
+
+table {
+  width: 100%;
+  text-align: center;
+  border-collapse: collapse;
+}
+
+th,
+td {
+  border-left: none;
+  border-right: none;
+}
+
+table th {
+  padding: 15px 0;
+  color: #fff;
+  background-color: #13833b;
+}
+
+table td {
+  padding: 10px 0;
+  border-bottom: 1px solid #e5e5dd;
+}
+
+table tr:nth-child(odd) {
+  background-color: #f7f6f6;
+}
+
+table tr:nth-child(even) {
+  background-color: #fdfdf2;
+}
+
+.bottom-wrap {
+  position: relative;
+  padding: 1rem 0;
+}
+
+.btn-2 {
+  display: inline-block;
+  padding: 0.3rem 2rem;
+  font-size: 13.333px;
+}
+
+.pg-wrap {
+  text-align: center;
+}
+
+.pg-item {
+  display: inline-block;
+  padding: 10px;
+  color: #949292;
+}
+
+.pg-item.prev,
+.pg-item.next,
+.pg-item.active {
+  color: #13833b;
+}
+
+.btn-wrap {
+  position: absolute;
+  right: 0;
+  top: 1.5em;
+  z-index: 10;
+}
+
+.btn-wrap button {
+  cursor: pointer;
+}
+</style>
client/views/pages/RealtimeStatus/ErrorSearch.vue
--- client/views/pages/RealtimeStatus/ErrorSearch.vue
+++ client/views/pages/RealtimeStatus/ErrorSearch.vue
@@ -1,171 +1,305 @@
 <template>
-  <div class="flex">
-    <div class="left">
-      <div class="wrap flex-between">
-        <div class="iconlist">
-          <ul>
-            <li
-              v-for="item in items"
-              :key="item.id"
-              :class="{ active: item.isActive }"
-              @click="toggleActive(item)"
-            >
-              <div></div>
-              <p>{{ item.name }}</p>
-            </li>
-          </ul>
+  <div class="wrap">
+    <div class="board-wrap">
+      <div class="search-wrap">
+        <div class="flex m-b gap" style="margin-bottom: 2rem;">
+          <div class="flex gap m-r" style="margin-right: 5rem;">
+            <label>조회기간: </label>
+            <input type="date" name="" id="" />
+            <span>~</span>
+            <input type="date" name="" id="" />
+          </div>
+          <div class="flex gap">
+            <label>지역: </label>
+            <select name="" id="">
+              <option value="">대구광역시</option>
+            </select>
+            <select name="" id="">
+              <option value="">서구</option>
+            </select>
+            <select name="" id="">
+              <option value="">전체</option>
+            </select>            
+          </div>
         </div>
-        <div class="search">
-          <h2>지역설정</h2>
-          <div class="box">
-            <div class="flex-between m-b">
-              <label for="">시/도</label>
-              <select name="" id=""></select>
+        <div class="flex-between gap">
+         <div class="gap flex">
+            <label>장애타입: </label>
+              <select name="" id="">
+                <option value="">전체</option>
+              </select>
+            <label>장비타입: </label>
+              <select name="" id="">
+                <option value="">전체</option>
+              </select>
+            <label>복구여부: </label>
+              <select name="" id="">
+                <option value="">정상</option>
+              </select>
+         </div>
+            <button type="button" class="btn-2 green-btn">조회</button>
+        </div>
+
+      </div>
+      <div>
+        <table>
+          <!-- <colgroup>
+            <col style="width: 10%;">
+            <col style="width: 20%;">
+            <col style="width: 20%;">
+            <col style="width: 30%;">
+            <col style="width: 20%;">
+          </colgroup> -->
+          <thead>
+            <tr>
+              <th>No</th>
+              <th>장애 발생일시</th>
+              <th>시/도</th>
+              <th>시/군/구</th>
+              <th>행정동</th>
+              <th>교차로</th>
+              <th>횡단보도명</th>
+              <th>장비명</th>
+              <th>장애명</th>
+              <th>복구여부</th>
+              <th>복구시간</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr @click="modal_1 = true">
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+            </tr>
+          </tbody>
+        </table>
+        <div class="modal-wrap" v-if="modal_1 == true">
+          <div class="modal-bg"></div>
+          <div class="modal">
+            <h2 class="flex">장애발생 상세정보 <button type="button" class="gray-btn" @click="modal_1 = false">
+                <img src="../../../resources/images/close.png" alt="">
+              </button></h2>
+            <div class="modalmain">
+              <h3>영재어린이집(서측)</h3>
+              <h4>동쪽횡단보도</h4>
+              <table>
+            <colgroup>
+              <col style="width: 50%;">
+              <col style="width: 50%;">
+            </colgroup>
+            <tbody>
+              <tr >
+                <td>발생일시</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>장비명</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>장애명</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>복구여부</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>복구상태</td>
+                <td></td>
+              </tr>
+            </tbody>
+          </table>
+              <h4 style="margin-top: 2rem;">횡단보도 유지보수 담당자 정보</h4>
+              <table>
+            <colgroup>
+              <col style="width: 50%;">
+              <col style="width: 50%;">
+            </colgroup>
+            <tbody>
+              <tr >
+                <td>이름</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>이메일</td>
+                <td></td>
+              </tr>
+              <tr >
+                <td>소속정보</td>
+                <td></td>
+              </tr>
+            </tbody>
+          </table>
             </div>
-            <div class="flex-between m-b">
-              <label for="">시/군/구</label>
-              <select name="" id=""></select>
-            </div>
-            <div class="flex-between m-b">
-              <label for="">행정동</label>
-              <select name="" id=""></select>
-            </div>
-            <div class="flex-between m-b">
-              <label for="">교차로</label>
-              <select name="" id=""></select>
-            </div>
-          </div>
-          <h2>조건설정</h2>
-          <div class="box">
-            <div class="flex-between m-b">
-              <input type="checkbox" /><label for="">무단횡단</label>
-              <input type="checkbox" /><label for="">신호연장</label>
-              <input type="checkbox" /><label for="">신호위반</label>
-              <input type="checkbox" /><label for="">장애발생</label>
-            </div>
-            <div class="flex-between m-b" >
-              <label for="date-input">일자</label>
-              <input id="date-input" type="date" v-model="selectedDate" /> ~ <input id="date-input" type="date" v-model="selectedDate" />
-            </div>
-            <div class="flex-between m-b" >
-              <label for="time-input">시간대</label>
-              <input
-                id="time-input"
-                type="time"
-                v-model="selectedTime"
-              />~<input id="time-input" type="time" v-model="selectedTime" />
-            </div>
-            <button class="btn-l green-btn">검색</button>
-          </div>
-          <h2>지역설정</h2>
-          <div class="box bg-white">
-            <button c>상황발생현황</button>
-            <button>장애발생현황</button>
-            <ul>
-              <li>
-                <p class="m-b">발생일시: 2023-05-04 14:27</p>
-                <p class="m-b">상황명: 무단횡단</p>
-                <p class="m-b">발생장소: 영재어린이집(서측) 동쪽횡단보도</p>
-              </li>
-            </ul>
           </div>
         </div>
       </div>
-    </div>
-    <div class="right">
-      <div class="top">
-        <ul class="flex-end">
-          <li>
-            <p>금일 보행자</p>
-            <h3>명</h3>
-          </li>
-          <li>
-            <p>금일 무단횡단 발생</p>
-            <h3>회</h3>
-          </li>
-          <li>
-            <p>금일 신호연장 발생</p>
-            <h3>회</h3>
-          </li>
-          <li>
-            <p>금일 신호연장 시간</p>
-            <h3>초</h3>
-          </li>
-          <li>
-            <p>금일 차량 신호위반 발생</p>
-            <h3>회</h3>
-          </li>
-          <li>
-            <p>금일 장애 발생</p>
-            <h3>회</h3>
-          </li>
-        </ul>
+      <div class="bottom-wrap">
+        <div class="pg-wrap">
+          <a href="#" class="pg-item prev">◀</a>
+          <a href="#" class="pg-item active">1</a>
+          <a href="#" class="pg-item">2</a>
+          <a href="#" class="pg-item">3</a>
+          <a href="#" class="pg-item">4</a>
+          <a href="#" class="pg-item">5</a>
+          <a href="#" class="pg-item next">▶</a>
+        </div>
+        <div class="btn-wrap">
+          <router-link to="/UserManagement.page">
+            <span class="btn-2 green-btn">Excel로 저장</span>
+          </router-link>
+        </div>
       </div>
-      <div><MapPage /></div>
     </div>
   </div>
 </template>
-<style scoped>
-.bg-white{min-height: 46.6rem; max-height: 46.6rem; overflow: scroll; overflow-x: hidden;}
-.bg-white::-webkit-scrollbar-thumb {background-color: #fff;}
-h2 {
-  background: #50ba8a;
-  text-align: center;
-  color: #fff;
-  padding: 1.6rem 0;
-}
-.top p {
-  font-size: 15px;
-}
-.top ul {
-  padding: 1rem 0;
-}
-.top li {
-  width: calc(100% / 6);
-  text-align: center;
-}
-.top h3 {
-  font-size: 20px;
-}
-.wrap {
-  z-index: 100;
-  top: 0;
-  height: 865px;
-}
-.left {
-  background: #fff;
-}
-.right {
-  width: -webkit-fill-available;
-  
-}
-</style>
+
 <script>
-import MapPage from "../../component/MapPage.vue";
+import Modal from "../../component/Modal.vue";
 
 export default {
   data() {
     return {
-      items: [
-        { id: 1, name: "무단횡단", isActive: false },
-        { id: 2, name: "신호연장", isActive: false },
-        { id: 3, name: "우회전 차량", isActive: false },
-        { id: 4, name: "장애발생", isActive: false },
-      ],
+      modal_1: false,
     };
   },
-  components: {
-    MapPage: MapPage,
-  },
   methods: {
-    toggleActive(item) {
-      item.isActive = !item.isActive;
-    },
+    
   },
   watch: {},
-  computed: {},
+  computed: {
+    Modal: Modal,
+  },
   mounted() {
-    console.log("Main2 mounted");
+    console.log("Main4 mounted");
   },
 };
 </script>
+
+<style scoped>
+label{width: max-content;}
+select{width: 15rem;}
+.modal{width: max-content;}
+.modalmain{ padding: 1rem;}
+.modalmain table tbody tr:nth-child(odd){background: #f7f6f6;}
+.modalmain table tbody tr:nth-child(even){background: #ffffff;}
+.modalmain table td{border: 1px solid #eee;}
+.modal h2{background: #e5e5dd; font-size: 2rem; padding: 1rem ;}
+.modal h3{font-size: 1.8rem; border-bottom: 1px solid #eee; padding: 1rem  0  0.2rem 0;}
+.modal h4{font-size: 1.6rem; font-weight: 100; padding: 0.2rem 0 1rem 0 ;}
+.modal button{border: 0; background: none;     height: 30px;
+    padding: 0 0 0 50rem; cursor: pointer;}
+.modal button img{width: 25px;}
+.txt-point {
+  color: #333;
+}
+.wrap {
+  width: 155rem;
+  margin: 100px auto;
+}
+
+.search-wrap {
+  margin-bottom: 30px;
+  background: #f7f6f6;
+  padding: 1rem;
+}
+
+.search-wrap input,
+.search-wrap select {
+  height: 22.5px;
+  border-radius: 3px;
+  border: 1px solid #949292;
+}
+
+.float-right {
+  float: right;
+}
+
+.clear-fix::after {
+  content: "";
+  display: block;
+  clear: both;
+}
+
+.search-wrap .float-right form > *:not(:last-child) {
+  margin-right: 1rem;
+}
+
+table {
+  width: 100%;
+  text-align: center;
+  border-collapse: collapse;
+}
+
+th,
+td {
+  border-left: none;
+  border-right: none;
+}
+
+table th {
+  padding: 15px 0;
+  color: #fff;
+  background-color: #13833b;
+}
+
+table td {
+  padding: 10px 0;
+  border-bottom: 1px solid #e5e5dd;
+}
+
+table tr:nth-child(odd) {
+  background-color: #f7f6f6;
+}
+
+table tr:nth-child(even) {
+  background-color: #fdfdf2;
+}
+
+.bottom-wrap {
+  position: relative;
+  padding: 1rem 0;
+}
+
+.btn-2 {
+  display: inline-block;
+  padding: 0.3rem 2rem;
+  font-size: 13.333px;
+}
+
+.pg-wrap {
+  text-align: center;
+}
+
+.pg-item {
+  display: inline-block;
+  padding: 10px;
+  color: #949292;
+}
+
+.pg-item.prev,
+.pg-item.next,
+.pg-item.active {
+  color: #13833b;
+}
+
+.btn-wrap {
+  position: absolute;
+  right: 0;
+  top: 1.5em;
+  z-index: 10;
+}
+
+.btn-wrap button {
+  cursor: pointer;
+}
+</style>
client/views/pages/RealtimeStatus/RealtimeStatus.vue
--- client/views/pages/RealtimeStatus/RealtimeStatus.vue
+++ client/views/pages/RealtimeStatus/RealtimeStatus.vue
@@ -55,19 +55,35 @@
                 v-model="selectedTime"
               />~<input id="time-input" type="time" v-model="selectedTime" />
             </div>
-            <button class="btn-l green-btn">검색</button>
+            <button class="btn-l green-btn" style="padding: 0.5rem 0;">검색</button>
           </div>
           <h2>지역설정</h2>
-          <div class="box bg-white">
-            <button c>상황발생현황</button>
-            <button>장애발생현황</button>
-            <ul>
-              <li>
-                <p class="m-b">발생일시: 2023-05-04 14:27</p>
-                <p class="m-b">상황명: 무단횡단</p>
-                <p class="m-b">발생장소: 영재어린이집(서측) 동쪽횡단보도</p>
-              </li>
-            </ul>
+          <div class="box bg-white tab-buttons">
+            <div class="btn_set flex-center">
+              <button class="m-r"  v-for="tab in tabs"
+        :key="tab.id"
+        :class="{ 'active': activeTab === tab.id }"
+        @click="changeTab(tab.id)">{{ tab.title }}</button>
+            </div>
+            <div class="tab-content" v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id">
+              <ul v-show="tab.content1">
+                <li >
+                  <p class="m-b">발생일시: 2023-05-04 14:27</p>
+                  <p class="m-b">상황명: 무단횡단</p>
+                  <p class="">발생장소: 영재어린이집(서측) 동쪽횡단보도</p>
+                </li>
+              </ul>
+              <ul v-show="tab.content2">
+                <li >
+                  <p class="m-b">발생일시: 2023-05-04 14:27</p>
+                  <p class="m-b">장애명: CPU 사용 90% 이상</p>
+                  <p class="m-b">발생장소: 영재어린이집(서측) 동쪽횡단보도</p>
+                  <p class="m-b">담당자: 김담당</p>
+                  <p class="">연락처: 010-1234-5678</p>
+                  <div class="flex-end"><button >확인</button></div>
+                </li>
+              </ul>
+            </div>
           </div>
         </div>
       </div>
@@ -106,6 +122,11 @@
   </div>
 </template>
 <style scoped>
+.btn_set{position: relative; border-bottom: 1px solid #e5e3e3; padding: 0 0 1rem 0;}
+.btn_set div{position: absolute; top: 40px;
+    width: 313px;
+    height: 380px;
+  background: #fff; padding: 1rem;}
 .bg-white{min-height: 46.6rem; max-height: 46.6rem; overflow: scroll; overflow-x: hidden;}
 .bg-white::-webkit-scrollbar-thumb {background-color: #fff;}
 h2 {
@@ -146,6 +167,11 @@
 export default {
   data() {
     return {
+      tabs: [
+        { id: 1, title: '상황발생현황', content1: 'This is the content for Tab 1' },
+        { id: 2, title: '장애발생현황', content2: 'This is the content for Tab 2' },
+      ],
+      activeTab: 1,
       items: [
         { id: 1, name: "무단횡단", isActive: false },
         { id: 2, name: "신호연장", isActive: false },
@@ -158,6 +184,9 @@
     MapPage: MapPage,
   },
   methods: {
+    changeTab(tabId) {
+      this.activeTab = tabId;
+    },
     toggleActive(item) {
       item.isActive = !item.isActive;
     },
client/views/pages/RealtimeStatus/SituationSearch.vue
--- client/views/pages/RealtimeStatus/SituationSearch.vue
+++ client/views/pages/RealtimeStatus/SituationSearch.vue
@@ -1,171 +1,255 @@
 <template>
-  <div class="flex">
-    <div class="left">
-      <div class="wrap flex-between">
-        <div class="iconlist">
-          <ul>
-            <li
-              v-for="item in items"
-              :key="item.id"
-              :class="{ active: item.isActive }"
-              @click="toggleActive(item)"
-            >
-              <div></div>
-              <p>{{ item.name }}</p>
-            </li>
-          </ul>
-        </div>
-        <div class="search">
-          <h2>지역설정</h2>
-          <div class="box">
-            <div class="flex-between m-b">
-              <label for="">시/도</label>
-              <select name="" id=""></select>
-            </div>
-            <div class="flex-between m-b">
-              <label for="">시/군/구</label>
-              <select name="" id=""></select>
-            </div>
-            <div class="flex-between m-b">
-              <label for="">행정동</label>
-              <select name="" id=""></select>
-            </div>
-            <div class="flex-between m-b">
-              <label for="">교차로</label>
-              <select name="" id=""></select>
-            </div>
+  <div class="wrap">
+    <div class="board-wrap">
+      <div class="search-wrap">
+        <div class="flex-between">
+          <div class="flex gap">
+            <label>날짜를 선택해주세요.</label>
+            <input type="date" name="" id="" />
+            <span>~</span>
+            <input type="date" name="" id="" />
           </div>
-          <h2>조건설정</h2>
-          <div class="box">
-            <div class="flex-between m-b">
-              <input type="checkbox" /><label for="">무단횡단</label>
-              <input type="checkbox" /><label for="">신호연장</label>
-              <input type="checkbox" /><label for="">신호위반</label>
-              <input type="checkbox" /><label for="">장애발생</label>
-            </div>
-            <div class="flex-between m-b" >
-              <label for="date-input">일자</label>
-              <input id="date-input" type="date" v-model="selectedDate" /> ~ <input id="date-input" type="date" v-model="selectedDate" />
-            </div>
-            <div class="flex-between m-b" >
-              <label for="time-input">시간대</label>
-              <input
-                id="time-input"
-                type="time"
-                v-model="selectedTime"
-              />~<input id="time-input" type="time" v-model="selectedTime" />
-            </div>
-            <button class="btn-l green-btn">검색</button>
-          </div>
-          <h2>지역설정</h2>
-          <div class="box bg-white">
-            <button c>상황발생현황</button>
-            <button>장애발생현황</button>
-            <ul>
-              <li>
-                <p class="m-b">발생일시: 2023-05-04 14:27</p>
-                <p class="m-b">상황명: 무단횡단</p>
-                <p class="m-b">발생장소: 영재어린이집(서측) 동쪽횡단보도</p>
-              </li>
-            </ul>
+          <div class="flex gap">
+            <label>시/도</label>
+            <select name="" id="">
+              <option value="">대구광역시</option>
+            </select>
+            <label>시/군/구</label>
+            <select name="" id="">
+              <option value="">서구</option>
+            </select>
+            <label>행정동</label>
+            <select name="" id="">
+              <option value="">전체</option>
+            </select>
+            <label>상황명</label>
+            <select name="" id="">
+              <option value="">전체</option>
+              <option value="">무단횡단</option>
+              <option value="">신호연장</option>
+              <option value="">신호위반</option>
+            </select>
+            <input type="text" />
+            <button type="button" class="btn-2 green-btn">조회</button>
           </div>
         </div>
       </div>
-    </div>
-    <div class="right">
-      <div class="top">
-        <ul class="flex-end">
-          <li>
-            <p>금일 보행자</p>
-            <h3>명</h3>
-          </li>
-          <li>
-            <p>금일 무단횡단 발생</p>
-            <h3>회</h3>
-          </li>
-          <li>
-            <p>금일 신호연장 발생</p>
-            <h3>회</h3>
-          </li>
-          <li>
-            <p>금일 신호연장 시간</p>
-            <h3>초</h3>
-          </li>
-          <li>
-            <p>금일 차량 신호위반 발생</p>
-            <h3>회</h3>
-          </li>
-          <li>
-            <p>금일 장애 발생</p>
-            <h3>회</h3>
-          </li>
-        </ul>
+      <div>
+        <table>
+          <!-- <colgroup>
+            <col style="width: 10%;">
+            <col style="width: 20%;">
+            <col style="width: 20%;">
+            <col style="width: 30%;">
+            <col style="width: 20%;">
+          </colgroup> -->
+          <thead>
+            <tr>
+              <th>No</th>
+              <th>발생일시</th>
+              <th>시/도</th>
+              <th>시/군/구</th>
+              <th>행정동</th>
+              <th>상황명</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr @click="modal_1 = true">
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+            </tr>
+          </tbody>
+        </table>
+        <div class="modal-wrap" v-if="modal_1 == true">
+          <div class="modal-bg"></div>
+          <div class="modal">
+            <h2 class="flex">상황발생 상세정보 <button type="button" class="gray-btn" @click="modal_1 = false">
+                <img src="../../../resources/images/close.png" alt="">
+              </button></h2>
+            <div class="modalmain">
+              <h3>영재어린이집(서측)</h3>
+              <h4>동쪽횡단보도</h4>
+              <table>
+            <colgroup>
+              <col style="width: 50%;">
+              <col style="width: 50%;">
+            </colgroup>
+            <tbody>
+              <tr @click="modal_1 = true">
+                <td>발생일시</td>
+                <td>2023-05-03 14:48</td>
+              </tr>
+              <tr @click="modal_1 = true">
+                <td>상황명</td>
+                <td>무단횡단</td>
+              </tr>
+              <tr @click="modal_1 = true">
+                <td>신호상태</td>
+                <td>적색불</td>
+              </tr>
+            </tbody>
+          </table>
+            </div>
+          </div>
+        </div>
       </div>
-      <div><MapPage /></div>
+      <div class="bottom-wrap">
+        <div class="pg-wrap">
+          <a href="#" class="pg-item prev">◀</a>
+          <a href="#" class="pg-item active">1</a>
+          <a href="#" class="pg-item">2</a>
+          <a href="#" class="pg-item">3</a>
+          <a href="#" class="pg-item">4</a>
+          <a href="#" class="pg-item">5</a>
+          <a href="#" class="pg-item next">▶</a>
+        </div>
+        <div class="btn-wrap">
+          <router-link to="/UserManagement.page">
+            <span class="btn-2 green-btn">Excel로 저장</span>
+          </router-link>
+        </div>
+      </div>
     </div>
   </div>
 </template>
-<style scoped>
-.bg-white{min-height: 46.6rem; max-height: 46.6rem; overflow: scroll; overflow-x: hidden;}
-.bg-white::-webkit-scrollbar-thumb {background-color: #fff;}
-h2 {
-  background: #50ba8a;
-  text-align: center;
-  color: #fff;
-  padding: 1.6rem 0;
-}
-.top p {
-  font-size: 15px;
-}
-.top ul {
-  padding: 1rem 0;
-}
-.top li {
-  width: calc(100% / 6);
-  text-align: center;
-}
-.top h3 {
-  font-size: 20px;
-}
-.wrap {
-  z-index: 100;
-  top: 0;
-  height: 865px;
-}
-.left {
-  background: #fff;
-}
-.right {
-  width: -webkit-fill-available;
-  
-}
-</style>
+
 <script>
-import MapPage from "../../component/MapPage.vue";
+import Modal from "../../component/Modal.vue";
 
 export default {
   data() {
     return {
-      items: [
-        { id: 1, name: "무단횡단", isActive: false },
-        { id: 2, name: "신호연장", isActive: false },
-        { id: 3, name: "우회전 차량", isActive: false },
-        { id: 4, name: "장애발생", isActive: false },
-      ],
+      modal_1: false,
     };
   },
-  components: {
-    MapPage: MapPage,
-  },
   methods: {
-    toggleActive(item) {
-      item.isActive = !item.isActive;
-    },
+    
   },
   watch: {},
-  computed: {},
+  computed: {
+    Modal: Modal,
+  },
   mounted() {
-    console.log("Main2 mounted");
+    console.log("Main4 mounted");
   },
 };
 </script>
+
+<style scoped>
+.modal{width: max-content;}
+.modalmain{ padding: 1rem;}
+.modalmain table tbody tr:nth-child(odd){background: #f7f6f6;}
+.modalmain table tbody tr:nth-child(even){background: #ffffff;}
+.modalmain table td{border: 1px solid #eee;}
+.modal h2{background: #e5e5dd; font-size: 2rem; padding: 1rem ;}
+.modal h3{font-size: 1.8rem; border-bottom: 1px solid #eee; padding: 1rem  0  0.2rem 0;}
+.modal h4{font-size: 1.6rem; font-weight: 100; padding: 0.2rem 0 1rem 0 ;}
+.modal button{border: 0; background: none;     height: 30px;
+    padding: 0 0 0 50rem; cursor: pointer;}
+.modal button img{width: 25px;}
+.txt-point {
+  color: #333;
+}
+.wrap {
+  width: 155rem;
+  margin: 100px auto;
+}
+
+.search-wrap {
+  margin-bottom: 30px;
+}
+
+.search-wrap input,
+.search-wrap select {
+  height: 22.5px;
+  border-radius: 3px;
+  border: 1px solid #949292;
+}
+
+.float-right {
+  float: right;
+}
+
+.clear-fix::after {
+  content: "";
+  display: block;
+  clear: both;
+}
+
+.search-wrap .float-right form > *:not(:last-child) {
+  margin-right: 1rem;
+}
+
+table {
+  width: 100%;
+  text-align: center;
+  border-collapse: collapse;
+}
+
+th,
+td {
+  border-left: none;
+  border-right: none;
+}
+
+table th {
+  padding: 15px 0;
+  color: #fff;
+  background-color: #13833b;
+}
+
+table td {
+  padding: 10px 0;
+  border-bottom: 1px solid #e5e5dd;
+}
+
+table tr:nth-child(odd) {
+  background-color: #f7f6f6;
+}
+
+table tr:nth-child(even) {
+  background-color: #fdfdf2;
+}
+
+.bottom-wrap {
+  position: relative;
+  padding: 1rem 0;
+}
+
+.btn-2 {
+  display: inline-block;
+  padding: 0.3rem 2rem;
+  font-size: 13.333px;
+}
+
+.pg-wrap {
+  text-align: center;
+}
+
+.pg-item {
+  display: inline-block;
+  padding: 10px;
+  color: #949292;
+}
+
+.pg-item.prev,
+.pg-item.next,
+.pg-item.active {
+  color: #13833b;
+}
+
+.btn-wrap {
+  position: absolute;
+  right: 0;
+  top: 1.5em;
+  z-index: 10;
+}
+
+.btn-wrap button {
+  cursor: pointer;
+}
+</style>
client/views/pages/SystemManagement/ChargeManagement.vue
--- client/views/pages/SystemManagement/ChargeManagement.vue
+++ client/views/pages/SystemManagement/ChargeManagement.vue
@@ -1,9 +1,5 @@
 <template>
   <div class="wrap">
-    <div>
-      <h2 class="page-title">횡단보도 유지보수 담당자</h2>
-    </div>
-    <hr class="margin">
     <div class="board-wrap">
       <div class="search-wrap clear-fix">
         <div class="float-right">
@@ -60,7 +56,7 @@
           <a href="#" class="pg-item next">▶</a>
         </div>
         <div class="btn-wrap">
-          <router-link to="/ManagerAddForm.page">
+          <router-link to="/UserManagement.page">
             <span class="btn-2 green-btn">등록</span>
           </router-link>
         </div>
@@ -112,14 +108,6 @@
 
 .search-wrap .float-right form>*:not(:last-child) {
   margin-right: 1rem;
-}
-
-h2.page-title {
-  font-size: 24px;
-}
-
-hr.margin {
-  margin: 30px 0;
 }
 
 table {
client/views/pages/SystemManagement/DongManagement.vue
--- client/views/pages/SystemManagement/DongManagement.vue
+++ client/views/pages/SystemManagement/DongManagement.vue
@@ -1,10 +1,6 @@
 <template>
   <div class="wrap">
     <div>
-      <h2 class="page-title">행정동 관리</h2>
-    </div>
-    <hr class="margin">
-    <div>
       <div class="search-wrap clear-fix">
         <div class="float-left">
           <h3 class="sub-title">행정동 목록</h3>
@@ -57,16 +53,6 @@
               <td></td>
               <td>2023-03-03 12:50</td>
             </tr>
-            <tr>
-              <td>1</td>
-              <td>2203060</td>
-              <td>평리1동</td>
-              <td>Pyeongni 1–dong</td>
-              <td>00.000000</td>
-              <td>00.000000</td>
-              <td></td>
-              <td>2023-03-03 12:50</td>
-            </tr>
           </tbody>
         </table>
       </div>
@@ -84,7 +70,7 @@
     </div>
     <div>
       <div class="sub-title-wrap">
-        <h3 class="sub-title">행정동 정보관리</h3>
+        <h3 class="sub-title">행정동 정보관</h3>
         <span class="btn-2 green-btn">신규등록</span>
       </div>
       <div>
@@ -249,18 +235,6 @@
   float: right;
 }
 
-h2.page-title {
-  font-size: 24px;
-}
-
-hr.margin {
-  margin: 30px 0;
-}
-
-.sub-title-wrap {
-  margin: 30px 0;
-}
-
 .sub-title-wrap>* {
   display: inline-block;
   vertical-align: middle;
@@ -407,4 +381,5 @@
 
 .txt-point {
   color: #13833b;
-}</style>
(No newline at end of file)
+}
+</style>
(No newline at end of file)
client/views/pages/SystemManagement/ManagerAddForm.vue
--- client/views/pages/SystemManagement/ManagerAddForm.vue
+++ client/views/pages/SystemManagement/ManagerAddForm.vue
@@ -1,8 +1,18 @@
 <template>
   <div class="wrap">
+    <div class="tab-wrap">
+      <ul>
+        <li>
+          <a href="" class="tab active">사용자 관리</a>
+        </li>
+        <li>
+          <a href="" class="tab">접속기록 조회</a>
+        </li>
+      </ul>
+    </div>
     <div>
       <div>
-        <h2 class="page-title">횡단보도 유지보수 담당자 등록</h2>
+        <h2 class="page-title">횡단보도 유지보수 담당자</h2>
       </div>
       <hr class="margin">
       <div class="form-wrap">
@@ -19,25 +29,11 @@
             <span>이메일 : </span>
             <input type="text" name="" id="" placeholder="E-Mail">
           </div>
-          <div class="flex m-b">
-            <span>소속명 : </span>
-            <input type="text" name="" id="" placeholder="Affiliation Name">
-          </div>
 
           <div class="btn-wrap">
-            <button type="button" class="green-btn m-r" @click="modal_1 = true">등록</button>
+            <button type="button" class="green-btn" @click="modal_1 = true">등록</button>
             <router-link to="/UserManagement.page">
               <span class="btn-2 gray-btn">취소</span>
-            </router-link>
-          </div>
-
-          <div class="btn-wrap">
-            <div class="m-b">
-              <button type="button" class="green-btn m-r" @click="modal_1 = true">등록</button>
-              <button type="button" class="gray-btn" @click="modal_2 = true">삭제</button>
-            </div>
-            <router-link to="/UserManagement.page">
-              <span class="btn-3 gray-btn">취소</span>
             </router-link>
           </div>
         </form>
@@ -51,23 +47,8 @@
     <div class="modal">
       <p>사용자를 <span class="txt-point">등록</span>하시겠습니까?</p>
       <div class="btn-wrap">
-        <button type="button" class="green-btn m-r">확인</button>
+        <button type="button" class="green-btn">확인</button>
         <button type="button" class="gray-btn" @click="modal_1 = false">취소</button>
-      </div>
-    </div>
-  </div>
-  <div class="modal-wrap" v-if="modal_2 == true">
-    <div class="modal-bg">
-    </div>
-    <div class="modal">
-      <p>
-        해당 기능은 데이터 삭제 기능입니다.<br>
-        데이터 삭제 후, 조회에서 해당 데이터를 확인할 수 없습니다.<br>
-        삭제를 원하시면 아래 삭제 버튼을 눌러주세요.
-      </p>
-      <div class="btn-wrap">
-        <button type="button" class="green-btn m-r">삭제</button>
-        <button type="button" class="gray-btn" @click="modal_2 = false">취소</button>
       </div>
     </div>
   </div>
@@ -78,7 +59,6 @@
   data() {
     return {
       modal_1: false,
-      modal_2: false,
     };
   },
   methods: {},
@@ -96,6 +76,33 @@
   margin: 100px auto;
 }
 
+.tab-wrap {
+  margin-bottom: 30px;
+}
+
+.tab-wrap ul {
+  display: flex;
+  gap: 2rem;
+}
+
+.tab {
+  display: inline-block;
+  width: 20rem;
+  height: 3rem;
+  line-height: 3rem;
+  text-align: center;
+  border-radius: 5px;
+  background: #fff;
+  color: #949292;
+  border: 1px solid #949292;
+}
+
+.tab.active {
+  background: #13833b;
+  color: #fff;
+  border-color: #13833b;
+}
+
 h2.page-title {
   font-size: 24px;
 }
@@ -104,26 +111,29 @@
   margin: 30px 0;
 }
 
+.form-wrap {
+  width: 52rem;
+  margin: 0 auto;
+}
+
+.idchk {
+  margin-left: 1rem;
+}
+
 .btn-wrap {
   margin-top: 30px;
   text-align: center;
 }
 
-.btn-2,
-.btn-3 {
+.btn-2 {
   display: inline-block;
   padding: 0.3rem 2rem;
   font-size: 13.333px;
   color: #000;
 }
 
-.btn-3 {
-  width: 145px;
-}
-
-.form-wrap {
-  width: 40rem;
-  margin: 0 auto;
+.btn-wrap>*:not(:last-child) {
+  margin-right: 2rem;
 }
 
 .form-wrap .flex span {
@@ -184,7 +194,6 @@
   margin-top: 15px;
   text-align: center;
 }
-
 .txt-point {
   color: #13833b;
 }
client/views/pages/SystemManagement/NodeManagement.vue
--- client/views/pages/SystemManagement/NodeManagement.vue
+++ client/views/pages/SystemManagement/NodeManagement.vue
@@ -1,10 +1,6 @@
 <template>
   <div class="wrap">
     <div>
-      <h2 class="page-title">표준노드 관리</h2>
-    </div>
-    <hr class="margin">
-    <div>
       <div class="search-wrap clear-fix">
         <div class="float-left">
           <h3 class="sub-title">표준노드 목록</h3>
@@ -54,15 +50,6 @@
               <td>128.666666</td>
               <td>2023-03-03 12:50</td>
             </tr>
-            <tr>
-              <td>1</td>
-              <td>1550006621</td>
-              <td>테이큰 네거리</td>
-              <td>105</td>
-              <td>33.888888</td>
-              <td>128.666666</td>
-              <td>2023-03-03 12:50</td>
-            </tr>
           </tbody>
         </table>
       </div>
@@ -80,7 +67,7 @@
     </div>
     <div>
       <div class="sub-title-wrap">
-        <h3 class="sub-title">표준노드 정보관리</h3>
+        <h3 class="sub-title">표준노드 목록</h3>
         <span class="btn-2 green-btn">신규등록</span>
       </div>
       <div>
@@ -236,17 +223,6 @@
 
 .float-right {
   float: right;
-}
-
-h2.page-title {
-  font-size: 24px;
-}
-
-hr.margin {
-  margin: 30px 0;
-}
-.sub-title-wrap {
-  margin: 30px 0;
 }
 
 .sub-title-wrap>* {
client/views/pages/SystemManagement/UserAddForm.vue
--- client/views/pages/SystemManagement/UserAddForm.vue
+++ client/views/pages/SystemManagement/UserAddForm.vue
@@ -3,14 +3,10 @@
     <div class="tab-wrap">
       <ul>
         <li>
-          <router-link to="/UserManagement.page">
-            <span class="tab active">사용자 관리</span>
-          </router-link>
+          <a href="" class="tab active">사용자 관리</a>
         </li>
         <li>
-          <router-link to="/AccessRecord.page">
-            <span class="tab">접속기록 조회</span>
-          </router-link>
+          <a href="" class="tab">접속기록 조회</a>
         </li>
       </ul>
     </div>
@@ -75,19 +71,9 @@
           </div>
 
           <div class="btn-wrap">
-            <button type="button" class="green-btn m-r" @click="modal_1 = true">등록</button>
+            <button type="button" class="green-btn" @click="modal_1 = true">등록</button>
             <router-link to="/UserManagement.page">
               <span class="btn-2 gray-btn">취소</span>
-            </router-link>
-          </div>
-
-          <div class="btn-wrap">
-            <div class="m-b">
-              <button type="button" class="green-btn m-r" @click="modal_1 = true">등록</button>
-              <button type="button" class="gray-btn" @click="modal_2 = true">삭제</button>
-            </div>
-            <router-link to="/UserManagement.page">
-              <span class="btn-3 gray-btn">취소</span>
             </router-link>
           </div>
         </form>
@@ -101,24 +87,8 @@
     <div class="modal">
       <p>사용자를 <span class="txt-point">등록</span>하시겠습니까?</p>
       <div class="btn-wrap">
-        <button type="button" class="green-btn m-r">확인</button>
+        <button type="button" class="green-btn">확인</button>
         <button type="button" class="gray-btn" @click="modal_1 = false">취소</button>
-      </div>
-    </div>
-  </div>
-
-  <div class="modal-wrap" v-if="modal_2 == true">
-    <div class="modal-bg">
-    </div>
-    <div class="modal">
-      <p>
-        해당 기능은 데이터 삭제 기능입니다.<br>
-        데이터 삭제 후, 조회에서 해당 데이터를 확인할 수 없습니다.<br>
-        삭제를 원하시면 아래 삭제 버튼을 눌러주세요.
-      </p>
-      <div class="btn-wrap">
-        <button type="button" class="green-btn m-r">삭제</button>
-        <button type="button" class="gray-btn" @click="modal_2 = false">취소</button>
       </div>
     </div>
   </div>
@@ -129,7 +99,6 @@
   data() {
     return {
       modal_1: false,
-      modal_2: false,
     };
   },
   methods: {},
@@ -196,16 +165,15 @@
   text-align: center;
 }
 
-.btn-2,
-.btn-3 {
+.btn-2 {
   display: inline-block;
   padding: 0.3rem 2rem;
   font-size: 13.333px;
   color: #000;
 }
 
-.btn-3 {
-  width: 145px;
+.btn-wrap>*:not(:last-child) {
+  margin-right: 2rem;
 }
 
 .form-wrap .flex span {
@@ -266,7 +234,6 @@
   margin-top: 15px;
   text-align: center;
 }
-
 .txt-point {
   color: #13833b;
 }
client/views/pages/SystemManagement/UserManagement.vue
--- client/views/pages/SystemManagement/UserManagement.vue
+++ client/views/pages/SystemManagement/UserManagement.vue
@@ -3,14 +3,10 @@
     <div class="tab-wrap">
       <ul>
         <li>
-          <router-link to="/UserManagement.page">
-            <span class="tab active">사용자 관리</span>
-          </router-link>
+          <a href="" class="tab active">사용자 관리</a>
         </li>
         <li>
-          <router-link to="/AccessRecord.page">
-            <span class="tab">접속기록 조회</span>
-          </router-link>
+          <a href="" class="tab">접속기록 조회</a>
         </li>
       </ul>
     </div>
 
client/views/pages/main/IdFind.vue (added)
+++ client/views/pages/main/IdFind.vue
@@ -0,0 +1,177 @@
+<template>
+  <div class="wrap">
+    <div>
+      <div>
+        <h2 class="page-title">Login</h2>
+      </div>
+      <hr class="margin">
+      <div class="form-wrap">
+        <form action="">
+          <div class="flex m-b">
+            <span>이름 : </span>
+            <input type="text" name="" id="" placeholder="이름">
+          </div>
+          <div class="flex m-b">
+            <span>이메일 : </span>
+            <input type="password" name="" id="" placeholder="e-mail">
+          </div>
+          
+
+          <div class="btn-wrap">
+            <button type="button" class="green-btn m-r" @click="modal_1 = true">찾기</button>
+            <router-link to="">
+              <span class="btn-2 gray-btn">취소</span>
+            </router-link>
+          </div>
+        </form>
+      </div>
+    </div>
+  </div>
+
+  
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      modal_1: false,
+    };
+  },
+  methods: {},
+  watch: {},
+  computed: {},
+  mounted() {
+    console.log("Main4 mounted");
+  },
+};
+</script>
+
+<style scoped>
+.btn-wrap span{font-size: 13px; margin-top: 2rem;}
+.loginbtn{padding: 1rem 0; margin-bottom: 1rem;}
+.wrap {
+  width: 155rem;
+  margin: 100px auto;
+}
+
+.tab-wrap {
+  margin-bottom: 30px;
+}
+
+.tab-wrap ul {
+  display: flex;
+  gap: 2rem;
+}
+
+.tab {
+  display: inline-block;
+  width: 20rem;
+  height: 3rem;
+  line-height: 3rem;
+  text-align: center;
+  border-radius: 5px;
+  background: #fff;
+  color: #949292;
+  border: 1px solid #949292;
+}
+
+.tab.active {
+  background: #13833b;
+  color: #fff;
+  border-color: #13833b;
+}
+
+h2.page-title {
+  font-size: 24px;
+}
+
+hr.margin {
+  margin: 30px 0;
+}
+
+.form-wrap {
+  width: 52rem;
+  margin: 0 auto;
+}
+
+.idchk {
+  margin-left: 1rem;
+}
+
+.btn-wrap {
+  margin-top: 30px;
+  text-align: center;
+}
+
+.btn-2 {
+  display: inline-block;
+  padding: 0.3rem 2rem;
+  font-size: 13.333px;
+  color: #000;
+}
+
+
+.form-wrap .flex span {
+  display: inline-block;
+  width: 10rem;
+  padding: 0 5px;
+}
+
+.form-wrap input:not([type="radio"]) {
+  min-width: 30rem;
+  min-height: 4rem;
+}
+
+.form-wrap select {
+  min-width: 9rem;
+}
+
+.form-wrap select:not(:last-child) {
+  margin-right: 1.5rem;
+}
+
+.form-wrap input[type="radio"] {
+  vertical-align: middle;
+}
+
+.form-wrap label:not(:last-child) {
+  margin-right: 2rem;
+}
+
+.modal-wrap {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.modal-bg {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, .6);
+}
+
+.modal {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  max-width: 350px;
+  padding: 5rem;
+  z-index: 2;
+  background-color: #fff;
+  border-radius: 1rem;
+  text-align: center;
+}
+
+.modal .btn-wrap {
+  margin-top: 15px;
+  text-align: center;
+}
+.txt-point {
+  color: #13833b;
+}
+</style>(No newline at end of file)
client/views/pages/main/Login.vue
--- client/views/pages/main/Login.vue
+++ client/views/pages/main/Login.vue
@@ -1,11 +1,38 @@
 <template>
-  <div>로그인/로그아웃</div>
+  <div class="wrap">
+    <div>
+      <div>
+        <h2 class="page-title">Login</h2>
+      </div>
+      <hr class="margin">
+      <div class="form-wrap">
+        <form action="">
+          <div class="flex-center m-b">
+            <input type="text" name="" id="" placeholder="ID">
+          </div>
+          <div class="flex-center m-b">
+            <input type="password" name="" id="" placeholder="Password">
+          </div>   
+    
+
+          <div class="btn-wrap">
+            <button type="button" class="green-btn btn-l loginbtn" @click="modal_1 = true">로그인</button>
+            <router-link to="/IdFind.page"> <span class="">아이디 찾기</span></router-link>
+          </div>
+        </form>
+      </div>
+    </div>
+  </div>
+
+  
 </template>
 
 <script>
 export default {
   data() {
-    return {};
+    return {
+      modal_1: false,
+    };
   },
   methods: {},
   watch: {},
@@ -15,3 +42,132 @@
   },
 };
 </script>
+
+<style scoped>
+.btn-wrap span{font-size: 13px; margin-top: 2rem; color: #333;}
+.loginbtn{padding: 1rem 0; margin-bottom: 1rem;}
+.wrap {
+  width: 155rem;
+  margin: 100px auto;
+}
+
+.tab-wrap {
+  margin-bottom: 30px;
+}
+
+.tab-wrap ul {
+  display: flex;
+  gap: 2rem;
+}
+
+.tab {
+  display: inline-block;
+  width: 20rem;
+  height: 3rem;
+  line-height: 3rem;
+  text-align: center;
+  border-radius: 5px;
+  background: #fff;
+  color: #949292;
+  border: 1px solid #949292;
+}
+
+.tab.active {
+  background: #13833b;
+  color: #fff;
+  border-color: #13833b;
+}
+
+h2.page-title {
+  font-size: 24px;
+}
+
+hr.margin {
+  margin: 30px 0;
+}
+
+.form-wrap {
+  width: 30rem;
+  margin: 0 auto;
+}
+
+.idchk {
+  margin-left: 1rem;
+}
+
+.btn-wrap {
+  margin-top: 30px;
+  text-align: center;
+}
+
+.btn-2 {
+  display: inline-block;
+  padding: 0.3rem 2rem;
+  font-size: 13.333px;
+  color: #000;
+}
+
+
+.form-wrap .flex span {
+  display: inline-block;
+  width: 10rem;
+  padding: 0 5px;
+}
+
+.form-wrap input:not([type="radio"]) {
+  min-width: 30rem;
+  min-height: 4rem;
+}
+
+.form-wrap select {
+  min-width: 9rem;
+}
+
+.form-wrap select:not(:last-child) {
+  margin-right: 1.5rem;
+}
+
+.form-wrap input[type="radio"] {
+  vertical-align: middle;
+}
+
+.form-wrap label:not(:last-child) {
+  margin-right: 2rem;
+}
+
+.modal-wrap {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.modal-bg {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, .6);
+}
+
+.modal {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  max-width: 350px;
+  padding: 5rem;
+  z-index: 2;
+  background-color: #fff;
+  border-radius: 1rem;
+  text-align: center;
+}
+
+.modal .btn-wrap {
+  margin-top: 15px;
+  text-align: center;
+}
+.txt-point {
+  color: #13833b;
+}
+</style>
(No newline at end of file)
client/views/pages/main/Main.vue
--- client/views/pages/main/Main.vue
+++ client/views/pages/main/Main.vue
@@ -1,97 +1,103 @@
 <template>
   <div class="boxmenu">
-    <div class="box">
-      <img src="" alt />
-      <span class="box_title">금일 누적보행자 수</span>
-      <br />
+    <div class="box ">
+      <div class="flex">
+        <img src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />
+        <span class="box_title">금일 누적보행자 수</span>
+      </div>
       <span class="box_num">00</span>
       <span class="box_subtxt">명</span>
     </div>
     <div class="boxborder"></div>
     <div class="box">
-      <img src="" alt />
-      <span class="box_title">금일 무단횡단 발생</span>
-      <br />
+      <div class="flex">
+        <img src="../../../resources/images/icon/scumulativenumberofpedestrians.png" alt />
+        <span class="box_title">금일 무단횡단 발생</span>
+      </div>
       <span class="box_num">00</span>
       <span class="box_subtxt">회</span>
     </div>
 
     <div class="boxborder"></div>
     <div class="box">
-      <img src="" alt />
-      <span class="box_title">금일 신호연장 발생 수</span>
-      <br />
+      <div class="flex">
+        <img src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />
+        <span class="box_title">금일 신호연장 발생 수</span>
+      </div>
       <span class="box_num">00</span>
       <span class="box_subtxt">회</span>
     </div>
 
     <div class="boxborder"></div>
     <div class="box">
-      <img src="" alt />
-      <span class="box_title">금일 신호연장</span>
-      <br />
+      <div class="flex">
+        <img src="../../../resources/images/icon/Numberofsignalextensionstoday.png" alt />
+        <span class="box_title">금일 신호연장</span>
+      </div>
       <span class="box_num">00</span>
       <span class="box_subtxt">초</span>
     </div>
 
     <div class="boxborder"></div>
     <div class="box">
-      <img src="" alt />
-      <span class="box_title">금일 신호 위반 발생</span>
-      <br />
+      <div class="flex">
+        <img src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />
+        <span class="box_title">금일 신호 위반 발생</span>
+      </div>
       <span class="box_num">00</span>
       <span class="box_subtxt">회</span>
     </div>
 
     <div class="boxborder"></div>
     <div class="box">
-      <img src="" alt />
-      <span class="box_title">금일 장애 발생 수</span>
-      <br />
+      <div class="flex">
+        <img src="../../../resources/images/icon/Numberofsignalviolationstoday.png" alt />
+        <span class="box_title">금일 장애 발생 수</span>
+      </div>
       <span class="box_num">00</span>
       <span class="box_subtxt">회</span>
     </div>
   </div>
   <div class="main_section">
     <h1>AI 안전통합 횡단보도 플랫폼</h1>
-    <div class="verticalbar">
+    <div class="verticalbar flex">
       <span class="bar_title">실시간 관제</span>
       <div class="barinfo">
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/Real-timestatuscontrol.png" alt="" />
           <span class="elementtxt">실시간 현황 관제</span>
         </div>
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/Lifeoccurrenceinformationinquiry.png" alt="" />
           <span class="elementtxt">생활발생 정보 조회</span>
         </div>
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/Failureoccurrenceinformationinquiry.png" alt="" />
           <span class="elementtxt">장애발생 정보 조회</span>
         </div>
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/Crosswalkinquiry.png" alt="" />
           <span class="elementtxt">횡단보도 조회</span>
         </div>
       </div>
     </div>
-    <div class="verticalbar">
+    <div class="verticalbar flex">
       <span class="bar_title">통계 분석</span>
       <div class="barinfo">
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/Jaywalking.png" alt="" />
           <span class="elementtxt">무단횡단</span>
         </div>
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/anextensionoftime.png" alt="" />
           <span class="elementtxt">시간 연장</span>
         </div>
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/rightturn.png" alt="" />
           <span class="elementtxt">우회전 위반 차</span>
         </div>
         <div class="bar_element">
-          <img src="" alt="" />
+          <img src="../../../resources/images/icon/dang.png" alt="" />
           <span class="elementtxt">장애 발생</span>
         </div>
       </div>
@@ -99,11 +105,17 @@
   </div>
   <div class="main_bottom">
     <div class="board">
-      <img class="board_logo" src="" alt="" />
-      <span class="board_title">장애 발생 내역</span>
-      <router-link to="/Main3">
-        <span class="board_add">+</span>
-      </router-link>
+      <div class="flex-between">
+        <div class="flex gap">
+          <img class="board_logo" src="../../../resources/images/icon/nemo.png" alt="" />
+          <span class="board_title">장애 발생 내역</span>
+        </div>
+        <div>
+          <router-link to="/Main3">
+            <span class="board_add">+</span>
+          </router-link>
+        </div>
+      </div>
       <div class="boardinfo">
         <div class="board_element">
           <span class="elementtxt">
@@ -138,11 +150,17 @@
       </div>
     </div>
     <div class="board">
-      <img class="board_logo" src="" alt="" />
-      <span class="board_title">상황 발생 내역</span>
-      <router-link to="/Main3">
-        <span class="board_add">+</span>
-      </router-link>
+      <div class="flex-between">
+        <div class="flex gap">
+          <img class="board_logo" src="../../../resources/images/icon/nemo.png" alt="" />
+          <span class="board_title">상황 발생 내역</span>
+        </div>
+        <div>
+          <router-link to="/Main3">
+            <span class="board_add">+</span>
+          </router-link>
+        </div>
+      </div>
       <div class="boardinfo">
         <div class="board_element">
           <span class="elementtxt">
@@ -194,6 +212,9 @@
 };
 </script>
 <style>
+.box{text-align: end;}
+.boxmenu{justify-content: space-around;}
+.boxmenu img{width: 35px;}
 template {
   background-color: #f7f7f6;
 }
@@ -207,8 +228,7 @@
 .main_section h1 {
   font-size: 48px;
   color: #13833b;
-  margin-top: 5rem;
-  margin-bottom: 5rem;
+  margin: 3rem 0;
 }
 .main_bottom {
   display: flex;
Add a comment
List