최정임 최정임 2023-07-26
230726 최정임 css 수정중
@daf3dc41f05323cd49399d760c964fa91d04ccb6
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -239,4 +239,4 @@
   min-height: 100%;
 }
 .main-warp > div{height: inherit;}
-.left, .right, .right > div, .right > div >div, .right > div >div>#map{height: inherit;}
(No newline at end of file)
+.left, .right, .right > div, .right > div >div{height: inherit;}
(No newline at end of file)
client/resources/css/main.css
--- client/resources/css/main.css
+++ client/resources/css/main.css
@@ -1,8 +1,8 @@
 /* 현황관제 */
-.search{ height: inherit; width: 330px; }
-.search label{width: max-content; font-size: 14px;}
-.search p{font-size: 14px;}
-.search select{width: 20rem;}
+.search{ height: inherit; width: -webkit-fill-available; }
+.search label{width: max-content; font-size: 16px;}
+.search p{font-size: 16px;}
+.search select{width: 20rem;     height: 3rem;}
 .search .box{padding: 1rem;}
 .search .box ul li{padding: 1rem; border-bottom: 1px solid #e5e3e3;}
 .iconlist{width: 55px; background: #d6d6d6; padding: 2rem 0.7rem; text-align: center; height: inherit;}
@@ -19,7 +19,7 @@
 .iconlist li:nth-child(2) div{background-image: url(../images/icon/Signalextensiongray.png);}
 .iconlist li:nth-child(2).active div{background-image: url(../images/icon/Signalextensiongreen.png);}
 
-.top{position: absolute; z-index: 100; background: #fff; top: 0; width: -webkit-fill-available;}
+.top{ z-index: 100; background: #fff; top: 0; width: -webkit-fill-available;}
 .top p {
     font-size: 15px;
   }
client/resources/images/bg/main_bg.png (Binary)
--- client/resources/images/bg/main_bg.png
+++ client/resources/images/bg/main_bg.png
Binary file is not shown
client/views/component/OpenLayers.vue
--- client/views/component/OpenLayers.vue
+++ client/views/component/OpenLayers.vue
@@ -668,7 +668,7 @@
 <style>
 .map {
   width: 100%;
-  height: 861px;
+  height: 100% !important;
 }
 </style>
 
client/views/pages/Analysis/Analysis.vue
--- client/views/pages/Analysis/Analysis.vue
+++ client/views/pages/Analysis/Analysis.vue
@@ -69,26 +69,57 @@
         <OpenLayers ref="open_layers" />
       </div>
     </div>
-    <div class="chart">
-      <h2>보행자 수 대비 무단횡단 수</h2>
-      <div class="flex">
-        <div class="box"><Chart1></Chart1></div>
-        <div class="box"><Chart1></Chart1></div>
+    <div class="chart grid">
+      <div class="boxwrap">
+        <h2>무단횡단 비율</h2>
+        <div class="flex boxwrap">
+          <div class="box">
+            <h2 style="background: #f7f6f6; color: #333">읍/면/동 별</h2>
+            <Chart2></Chart2>
+          </div>
+          <div class="box">
+            <h2 style="background: #f7f6f6; color: #333">교차로 별</h2>
+            <Chart2></Chart2>
+          </div>
+        </div>
       </div>
-      <h2>무단횡단 비율</h2>
-      <div class="">
-        <h2 style="background: #f7f6f6; color: #333">시/군/구 별</h2>
-        <div class=""></div>
-        <h2 style="background: #f7f6f6; color: #333">읍/면/동 별</h2>
-        <div class=""></div>
+      <div class="boxwrap">
+        <h2>발생 현황</h2>
+        <div class="grid" style="height: 100%;">
+          <div class=" flex">
+            <div class="box">
+              <h2 style="background: #f7f6f6; color: #333">월별</h2>
+              <div class="minichart"><Chart1></Chart1></div>
+            </div>
+            <div class="box">
+              <h2 style="background: #f7f6f6; color: #333">요일별</h2>
+              <div class="minichart"><Chart1></Chart1></div>
+            </div>
+          </div>
+          <div class=" flex">
+            <div class="box">
+              <h2 style="background: #f7f6f6; color: #333">월별</h2>
+              <div class="minichart"><Chart3></Chart3></div>
+            </div>
+            <div class="box">
+              <h2 style="background: #f7f6f6; color: #333">요일별</h2>
+              <div class="minichart"><Chart3></Chart3></div>
+            </div>
+          </div>
+        </div>
+      </div>     
+      <div class="boxwrap">
+        <h2>시/도 전체 시간/요일별 발생현황</h2>
+        <div class="minichart"><Chart4></Chart4></div>
       </div>
-      <h2>시/도 전체 시간/요일별 발생현황</h2>
-      <div class=""></div>
     </div>
   </div>
 </template>
 <script>
 import Chart1 from "./Chart1.vue";
+import Chart2 from "./Chart2.vue";
+import Chart3 from "./Chart3.vue";
+import Chart4 from "./Chart4.vue";
 import Map from "../../component/map/map.vue";
 import MapPage from "../../component/map/map.vue";
 import OpenLayers from "../../component/OpenLayers.vue";
@@ -131,6 +162,9 @@
   },
   components: {
     Chart1: Chart1,
+    Chart2: Chart2,
+    Chart3: Chart3,
+    Chart4: Chart4,
     MapPage: MapPage,
     Map,
     OpenLayers: OpenLayers,
@@ -264,12 +298,27 @@
 .toggle {
   display: none;
 }
+.boxwrap {
+  height: 100%;
+}
+.minichart{height: 90%;}
+.inner {
+  width: 100%;
+  height: 100%;
+}
+.inner > div {
+  height: 100%;
+}
 .chart {
   width: 40%;
+  height: 100%;
 }
-.chart .box{width:-webkit-fill-available;}
-.chart div {
-  min-height: 17.53rem;
+.chart .box {
+  width: -webkit-fill-available;
+  height: 100%;
+}
+.chart > div {
+  height: 95%;
 }
 .chart h2 {
   padding: 0.5rem 0;
@@ -313,6 +362,8 @@
 }
 
 .top {
+  position: absolute;
+  top: 0;
   background: none;
   margin: 2rem;
   height: 2rem;
@@ -324,6 +375,7 @@
 }
 .left {
   background: #fff;
+  width: 25%;
 }
 .right {
   width: -webkit-fill-available;
client/views/pages/Analysis/Chart1.vue
--- client/views/pages/Analysis/Chart1.vue
+++ client/views/pages/Analysis/Chart1.vue
@@ -1,8 +1,12 @@
 <template>
-	<!-- <div id="chartdiv" style="width: 100%" ref="chartdiv"></div> -->
-	<div style="width: 100%; height: 20rem;" ref="chartdivWrap">
-        <div ref="chartdiv" id="chartdiv" style="width: 100%; height: 100%; background: #ffffff;"></div>
-    </div>
+  <!-- <div id="chartdiv" style="width: 100%" ref="chartdiv"></div> -->
+  <div style="width: 100%; height: 100%" ref="chartdivWrap">
+    <div
+      ref="chartdiv"
+      id="chartdiv"
+      style="width: 100%; height: 100%; background: #ffffff"
+    ></div>
+  </div>
 </template>
 
 <script>
@@ -13,315 +17,204 @@
 import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
 
 export default {
-	props: {
-		chartDataName: {
-			type: Array,
-			default: []
-		},
-
-		chartData: {
-			type: Array,
-			default: []
-		},
-	},
-
-	data() {
-		return {
-            charts: {},
-		};
-	},
-
-	methods: {
-    
-// 		createChart: function() {
-
-// 			if (COMMON_UTIL.isEmpty(this.charts["chartdiv"]) == false) {
-//                 this.charts["chartdiv"].dispose();
-//             }
-
-//             let chartWarp = this.$refs["chartdivWrap"];
-//             chartWarp.innerHTML = "";
-//             let div = document.createElement("div");
-//             div.style.width = "100%";
-//             div.style.height = "100%";
-//             chartWarp.appendChild(div);
-
-//             let root = am5.Root.new(div);
-//             this.charts["chartdiv"] = root;
-			
-// 			/* Chart code */
-
-
-// // Set themes
-// // https://www.amcharts.com/docs/v5/concepts/themes/
-// root.setThemes([
-//   am5themes_Animated.new(root)
-// ]);
-
-
-// // Create chart
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/
-// let chart = root.container.children.push(am5xy.XYChart.new(root, {
-//   panX: true,
-//   panY: true,
-//   wheelX: "panX",
-//   wheelY: "zoomX",
-//   pinchZoomX: true
-// }));
-
-// // Add cursor
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
-// let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}));
-// cursor.lineY.set("visible", false);
-
-
-// // Create axes
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
-// let xRenderer = am5xy.AxisRendererX.new(root, { minGridDistance: 30 });
-// xRenderer.labels.template.setAll({
-//   rotation: -90,
-//   centerY: am5.p50,
-//   centerX: am5.p100,
-//   paddingRight: 15
-// });
-
-// xRenderer.grid.template.setAll({
-//   location: 1
-// })
-
-// let xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {
-//   maxDeviation: 0.3,
-//   categoryField: "country",
-//   renderer: xRenderer,
-//   tooltip: am5.Tooltip.new(root, {})
-// }));
-
-// let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
-//   maxDeviation: 0.3,
-//   renderer: am5xy.AxisRendererY.new(root, {
-//     strokeOpacity: 0.1
-//   })
-// }));
-
-
-// // Create series
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/series/
-// let series = chart.series.push(am5xy.ColumnSeries.new(root, {
-//   name: "Series 1",
-//   xAxis: xAxis,
-//   yAxis: yAxis,
-//   valueYField: "value",
-//   sequencedInterpolation: true,
-//   categoryXField: "country",
-//   tooltip: am5.Tooltip.new(root, {
-//     labelText: "{valueY}"
-//   })
-// }));
-
-// series.columns.template.setAll({ cornerRadiusTL: 5, cornerRadiusTR: 5, strokeOpacity: 0 });
-// series.columns.template.adapters.add("fill", function(fill, target) {
-//   return chart.get("colors").getIndex(series.columns.indexOf(target));
-// });
-
-// series.columns.template.adapters.add("stroke", function(stroke, target) {
-//   return chart.get("colors").getIndex(series.columns.indexOf(target));
-// });
-
-
-// // Set data
-// let data = [{
-//   country: "USA",
-//   value: 2025
-// }, {
-//   country: "China",
-//   value: 1882
-// }, {
-//   country: "Japan",
-//   value: 1809
-// }, {
-//   country: "Germany",
-//   value: 1322
-// }, {
-//   country: "UK",
-//   value: 1122
-// }, {
-//   country: "France",
-//   value: 1114
-// }, {
-//   country: "India",
-//   value: 984
-// }, {
-//   country: "Spain",
-//   value: 711
-// }, {
-//   country: "Netherlands",
-//   value: 665
-// }, {
-//   country: "South Korea",
-//   value: 443
-// }, {
-//   country: "Canada",
-//   value: 441
-// }];
-
-// xAxis.data.setAll(data);
-// series.data.setAll(data);
-
-
-// // Make stuff animate on load
-// // https://www.amcharts.com/docs/v5/concepts/animations/
-// series.appear(1000);
-// chart.appear(1000, 100);
-// 		}
-	},
-
-	watch: {
-        // 부모 컴포넌트에서 데이터 업데이트 시 자식 컴포넌트도 props 데이터 업데이트
-        // "chartData": function(newValue, oldValue){
-        //     console.log('chartdiv watch: ', newValue, oldValue);
-        //     // 차트 생성 함수
-        //     this.createChart();
-        // }
+  props: {
+    chartDataName: {
+      type: Array,
+      default: [],
     },
 
-	mounted() {
-/* Chart code */
-// Create root element
-// https://www.amcharts.com/docs/v5/getting-started/#Root_element
-let root = am5.Root.new("chartdiv");
+    chartData: {
+      type: Array,
+      default: [],
+    },
+  },
 
+  data() {
+    return {
+      charts: {},
+    };
+  },
 
-// Set themes
-// https://www.amcharts.com/docs/v5/concepts/themes/
-root.setThemes([
-  am5themes_Animated.new(root)
-]);
+  methods: {
+    createChart: function () {
+      console.log("createChart");
+      /* if (COMMON_UTIL.isEmpty(this.charts["chartdiv"]) == false) {
+		  this.charts["chartdiv"].dispose();
+		} */
 
+      let chartWarp = this.$refs["chartdivWrap"];
+      chartWarp.innerHTML = "";
+      let div = document.createElement("div");
+      div.style.width = "100%";
+      div.style.height = "100%";
+      chartWarp.appendChild(div);
 
-// Create chart
-// https://www.amcharts.com/docs/v5/charts/xy-chart/
-let chart = root.container.children.push(am5xy.XYChart.new(root, {
-  panX: true,
-  panY: true,
-  wheelX: "panX",
-  wheelY: "zoomX",
-  pinchZoomX: true
-}));
+      let root = am5.Root.new(div);
+      this.charts["chartdiv"] = root;
 
-// Add cursor
-// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
-let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}));
-cursor.lineY.set("visible", false);
+      /* Chart code */
+      //amChart 로고 삭제
+      root._logo.dispose();
+      // Set themes
+      // https://www.amcharts.com/docs/v5/concepts/themes/
+      root.setThemes([am5themes_Animated.new(root)]);
 
+      // Create chart
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/
+      let chart = root.container.children.push(
+        am5xy.XYChart.new(root, {
+          panX: true,
+          panY: true,
+          wheelX: "panX",
+          wheelY: "zoomX",
+          pinchZoomX: true,
+        })
+      );
 
-// Create axes
-// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
-let xRenderer = am5xy.AxisRendererX.new(root, { minGridDistance: 30 });
-xRenderer.labels.template.setAll({
-  rotation: -90,
-  centerY: am5.p50,
-  centerX: am5.p100,
-  paddingRight: 15
-});
+      // Add cursor
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
+      let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}));
+      cursor.lineY.set("visible", false);
 
-xRenderer.grid.template.setAll({
-  location: 1
-})
+      // Create axes
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
+      let xRenderer = am5xy.AxisRendererX.new(root, { minGridDistance: 30 });
+      xRenderer.labels.template.setAll({
+        centerY: am5.p50,
+        centerX: am5.p100,
+        paddingRight: 15,
+        oversizedBehavior: "truncate",
+        maxWidth: 10,
+        textAlign: "center",
+        ellipsis: "...",
+      });
 
-let xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {
-  maxDeviation: 0.3,
-  categoryField: "country",
-  renderer: xRenderer,
-  tooltip: am5.Tooltip.new(root, {})
-}));
+      xRenderer.grid.template.setAll({
+        location: 1,
+      });
 
-let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
-  maxDeviation: 0.3,
-  renderer: am5xy.AxisRendererY.new(root, {
-    strokeOpacity: 0.1
-  })
-}));
-  //amChart 로고 삭제
-  root._logo.dispose();
+      let xAxis = chart.xAxes.push(
+        am5xy.CategoryAxis.new(root, {
+          maxDeviation: 0.3,
+          categoryField: "country",
+          renderer: xRenderer,
+          tooltip: am5.Tooltip.new(root, {}),
+        })
+      );
 
-  
+      let yAxis = chart.yAxes.push(
+        am5xy.ValueAxis.new(root, {
+          maxDeviation: 0.3,
+          renderer: am5xy.AxisRendererY.new(root, {
+            strokeOpacity: 0.1,
+          }),
+        })
+      );
 
-// Create series
-// https://www.amcharts.com/docs/v5/charts/xy-chart/series/
-let series = chart.series.push(am5xy.ColumnSeries.new(root, {
-  name: "Series 1",
-  xAxis: xAxis,
-  yAxis: yAxis,
-  valueYField: "value",
-  sequencedInterpolation: true,
-  categoryXField: "country",
-  tooltip: am5.Tooltip.new(root, {
-    labelText: "{valueY}"
-  })
-}));
+      // Create series
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/series/
+      let series = chart.series.push(
+        am5xy.ColumnSeries.new(root, {
+          name: "Series 1",
+          xAxis: xAxis,
+          yAxis: yAxis,
+          valueYField: "value",
+          sequencedInterpolation: true,
+          categoryXField: "country",
+          tooltip: am5.Tooltip.new(root, {
+            labelText: "{valueY}",
+          }),
+        })
+      );
 
-series.columns.template.setAll({ cornerRadiusTL: 5, cornerRadiusTR: 5, strokeOpacity: 0 });
-series.columns.template.adapters.add("fill", function(fill, target) {
-  return chart.get("colors").getIndex(series.columns.indexOf(target));
-});
+      series.columns.template.setAll({
+        cornerRadiusTL: 5,
+        cornerRadiusTR: 5,
+        strokeOpacity: 0,
+      });
+      series.columns.template.adapters.add("fill", function (fill, target) {
+        return chart.get("colors").getIndex(series.columns.indexOf(target));
+      });
 
-series.columns.template.adapters.add("stroke", function(stroke, target) {
-  return chart.get("colors").getIndex(series.columns.indexOf(target));
-});
+      series.columns.template.adapters.add("stroke", function (stroke, target) {
+        return chart.get("colors").getIndex(series.columns.indexOf(target));
+      });
 
+      // Set data
+      let data = [
+        {
+          country: "USA",
+          value: 2025,
+        },
+        {
+          country: "China",
+          value: 1882,
+        },
+        {
+          country: "Japan",
+          value: 1809,
+        },
+        {
+          country: "Germany",
+          value: 1322,
+        },
+        {
+          country: "UK",
+          value: 1122,
+        },
+        {
+          country: "France",
+          value: 1114,
+        },
+        {
+          country: "India",
+          value: 984,
+        },
+        {
+          country: "Spain",
+          value: 711,
+        },
+        {
+          country: "Netherlands",
+          value: 665,
+        },
+        {
+          country: "South Korea",
+          value: 443,
+        },
+        {
+          country: "Canada",
+          value: 441,
+        },
+      ];
 
-// Set data
-let data = [{
-  country: "USA",
-  value: 2025
-}, {
-  country: "China",
-  value: 1882
-}, {
-  country: "Japan",
-  value: 1809
-}, {
-  country: "Germany",
-  value: 1322
-}, {
-  country: "UK",
-  value: 1122
-}, {
-  country: "France",
-  value: 1114
-}, {
-  country: "India",
-  value: 984
-}, {
-  country: "Spain",
-  value: 711
-}, {
-  country: "Netherlands",
-  value: 665
-}, {
-  country: "South Korea",
-  value: 443
-}, {
-  country: "Canada",
-  value: 441
-}];
+      xAxis.data.setAll(data);
+      series.data.setAll(data);
 
-xAxis.data.setAll(data);
-series.data.setAll(data);
+      // Make stuff animate on load
+      // https://www.amcharts.com/docs/v5/concepts/animations/
+      series.appear(1000);
+      chart.appear(1000, 100);
+    },
+  },
 
+  watch: {
+    // 부모 컴포넌트에서 데이터 업데이트 시 자식 컴포넌트도 props 데이터 업데이트
+    // "chartData": function(newValue, oldValue){
+    //     console.log('chartdiv watch: ', newValue, oldValue);
+    //     // 차트 생성 함수
+    //     this.createChart();
+    // }
+  },
 
-// Make stuff animate on load
-// https://www.amcharts.com/docs/v5/concepts/animations/
-series.appear(1000);
-chart.appear(1000, 100);
-	},
+  mounted() {
+    this.createChart();
+  },
 };
 </script>
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style scoped>
 #chartdiv {
-	height: 50rem;
-	padding-top: 2rem;
 }
 </style>
 
client/views/pages/Analysis/Chart2.vue (added)
+++ client/views/pages/Analysis/Chart2.vue
@@ -0,0 +1,135 @@
+<template>
+  <!-- <div id="chartdiv" style="width: 100%" ref="chartdiv"></div> -->
+  <div style="width: 100%; height: inherit;" ref="chartdivWrap">
+    <div
+      ref="chartdiv"
+      id="chartdiv"
+      style="width: 100%; height: 100%; background: #ffffff"
+    ></div>
+  </div>
+</template>
+
+<script>
+import COMMON_UTIL from "../../../resources/js/commonUtil.js";
+
+import * as am5 from "@amcharts/amcharts5";
+import * as am5percent from "@amcharts/amcharts5/percent";
+import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
+
+export default {
+  props: {
+    chartDataName: {
+      type: Array,
+      default: [],
+    },
+
+    chartData: {
+      type: Array,
+      default: [],
+    },
+  },
+
+  data() {
+    return {
+      charts: {},
+    };
+  },
+
+  methods: {
+    createChart: function () {
+      console.log("createChart");
+      /* if (COMMON_UTIL.isEmpty(this.charts["chartdiv"]) == false) {
+        this.charts["chartdiv"].dispose();
+      } */
+
+      let chartWarp = this.$refs["chartdivWrap"];
+      chartWarp.innerHTML = "";
+      let div = document.createElement("div");
+      div.style.width = "100%";
+      div.style.height = "100%";
+      chartWarp.appendChild(div);
+
+      let root = am5.Root.new(div);
+      this.charts["chartdiv"] = root;
+
+      /* Chart code */
+      //amChart 로고 삭제
+      root._logo.dispose();
+      // Set themes
+      // https://www.amcharts.com/docs/v5/concepts/themes/
+      root.setThemes([am5themes_Animated.new(root)]);
+
+     // Create chart
+// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/
+let chart = root.container.children.push(
+  am5percent.PieChart.new(root, {
+    endAngle: 270
+  })
+);
+
+// Create series
+// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Series
+let series = chart.series.push(
+  am5percent.PieSeries.new(root, {
+    valueField: "value",
+    categoryField: "category",
+    endAngle: 270
+  })
+);
+
+series.states.create("hidden", {
+  endAngle: -90
+});
+
+// Set data
+// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data
+series.data.setAll([{
+  category: "Lithuania",
+  value: 501.9
+}, {
+  category: "Czechia",
+  value: 301.9
+}, {
+  category: "Ireland",
+  value: 201.1
+}, {
+  category: "Germany",
+  value: 165.8
+}, {
+  category: "Australia",
+  value: 139.9
+}, {
+  category: "Austria",
+  value: 128.3
+}, {
+  category: "UK",
+  value: 99
+}]);
+
+series.appear(1000, 100);
+
+    },
+  },
+
+  watch: {
+    // 부모 컴포넌트에서 데이터 업데이트 시 자식 컴포넌트도 props 데이터 업데이트
+    // "chartData": function(newValue, oldValue){
+    //     console.log('chartdiv watch: ', newValue, oldValue);
+    //     // 차트 생성 함수
+    //     this.createChart();
+    // }
+  },
+
+  mounted() {
+    this.createChart();
+  },
+};
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+#chartdiv {
+  height: 50rem;
+  padding-top: 2rem;
+}
+</style>
 
client/views/pages/Analysis/Chart3.vue (added)
+++ client/views/pages/Analysis/Chart3.vue
@@ -0,0 +1,169 @@
+<template>
+  <!-- <div id="chartdiv" style="width: 100%" ref="chartdiv"></div> -->
+  <div style="width: 100%; height: inherit;" ref="chartdivWrap">
+    <div
+      ref="chartdiv"
+      id="chartdiv"
+      style="width: 100%; height: 100%; background: #ffffff"
+    ></div>
+  </div>
+</template>
+
+<script>
+import COMMON_UTIL from "../../../resources/js/commonUtil.js";
+
+import * as am5 from "@amcharts/amcharts5";
+import * as am5xy from "@amcharts/amcharts5/xy";
+import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
+
+export default {
+  props: {
+    chartDataName: {
+      type: Array,
+      default: [],
+    },
+
+    chartData: {
+      type: Array,
+      default: [],
+    },
+  },
+
+  data() {
+    return {
+      charts: {},
+    };
+  },
+
+  methods: {
+    createChart: function () {
+      console.log("createChart");
+      /* if (COMMON_UTIL.isEmpty(this.charts["chartdiv"]) == false) {
+        this.charts["chartdiv"].dispose();
+      } */
+
+      let chartWarp = this.$refs["chartdivWrap"];
+      chartWarp.innerHTML = "";
+      let div = document.createElement("div");
+      div.style.width = "100%";
+      div.style.height = "100%";
+      chartWarp.appendChild(div);
+
+      let root = am5.Root.new(div);
+      this.charts["chartdiv"] = root;
+
+      /* Chart code */
+      //amChart 로고 삭제
+      root._logo.dispose();
+      // Set themes
+      // https://www.amcharts.com/docs/v5/concepts/themes/
+      root.setThemes([am5themes_Animated.new(root)]);
+
+    // Create chart
+// https://www.amcharts.com/docs/v5/charts/xy-chart/
+let chart = root.container.children.push(am5xy.XYChart.new(root, {
+  panX: false,
+  panY: false,
+  wheelX: "panX",
+  wheelY: "zoomX"
+}));
+
+
+// Add cursor
+// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
+let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {
+  behavior: "zoomX"
+}));
+cursor.lineY.set("visible", false);
+
+let date = new Date();
+date.setHours(0, 0, 0, 0);
+let value = 100;
+
+function generateData() {
+  value = Math.round((Math.random() * 10 - 5) + value);
+  am5.time.add(date, "day", 1);
+  return {
+    date: date.getTime(),
+    value: value
+  };
+}
+
+function generateDatas(count) {
+  let data = [];
+  for (var i = 0; i < count; ++i) {
+    data.push(generateData());
+  }
+  return data;
+}
+
+
+// Create axes
+// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
+let xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, {
+  maxDeviation: 0,
+  baseInterval: {
+    timeUnit: "day",
+    count: 1
+  },
+  renderer: am5xy.AxisRendererX.new(root, {
+    minGridDistance: 60
+  }),
+  tooltip: am5.Tooltip.new(root, {})
+}));
+
+let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
+  renderer: am5xy.AxisRendererY.new(root, {})
+}));
+
+
+// Add series
+// https://www.amcharts.com/docs/v5/charts/xy-chart/series/
+let series = chart.series.push(am5xy.ColumnSeries.new(root, {
+  name: "Series",
+  xAxis: xAxis,
+  yAxis: yAxis,
+  valueYField: "value",
+  valueXField: "date",
+  tooltip: am5.Tooltip.new(root, {
+    labelText: "{valueY}"
+  })
+}));
+
+series.columns.template.setAll({ strokeOpacity: 0 })
+
+
+let data = generateDatas(50);
+series.data.setAll(data);
+
+
+// Make stuff animate on load
+// https://www.amcharts.com/docs/v5/concepts/animations/
+series.appear(1000);
+chart.appear(1000, 100);
+
+    },
+  },
+
+  watch: {
+    // 부모 컴포넌트에서 데이터 업데이트 시 자식 컴포넌트도 props 데이터 업데이트
+    // "chartData": function(newValue, oldValue){
+    //     console.log('chartdiv watch: ', newValue, oldValue);
+    //     // 차트 생성 함수
+    //     this.createChart();
+    // }
+  },
+
+  mounted() {
+    this.createChart();
+  },
+};
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+#chartdiv {
+  height: 50rem;
+  padding-top: 2rem;
+}
+</style>
 
client/views/pages/Analysis/Chart4.vue (added)
+++ client/views/pages/Analysis/Chart4.vue
@@ -0,0 +1,249 @@
+<template>
+  <!-- <div id="chartdiv" style="width: 100%" ref="chartdiv"></div> -->
+  <div style="width: 100%; height: inherit;" ref="chartdivWrap">
+    <div
+      ref="chartdiv"
+      id="chartdiv"
+      style="width: 100%; height: 100%; background: #ffffff"
+    ></div>
+  </div>
+</template>
+
+<script>
+import COMMON_UTIL from "../../../resources/js/commonUtil.js";
+
+import * as am5 from "@amcharts/amcharts5";
+import * as am5xy from "@amcharts/amcharts5/xy";
+import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
+
+export default {
+  props: {
+    chartDataName: {
+      type: Array,
+      default: [],
+    },
+
+    chartData: {
+      type: Array,
+      default: [],
+    },
+  },
+
+  data() {
+    return {
+      charts: {},
+    };
+  },
+
+  methods: {
+    createChart: function () {
+      console.log("createChart");
+      /* if (COMMON_UTIL.isEmpty(this.charts["chartdiv"]) == false) {
+        this.charts["chartdiv"].dispose();
+      } */
+
+      let chartWarp = this.$refs["chartdivWrap"];
+      chartWarp.innerHTML = "";
+      let div = document.createElement("div");
+      div.style.width = "100%";
+      div.style.height = "100%";
+      chartWarp.appendChild(div);
+
+      let root = am5.Root.new(div);
+      this.charts["chartdiv"] = root;
+
+      /* Chart code */
+      //amChart 로고 삭제
+      root._logo.dispose();
+      // Set themes
+      // https://www.amcharts.com/docs/v5/concepts/themes/
+      root.setThemes([am5themes_Animated.new(root)]);
+
+   // Create chart
+// https://www.amcharts.com/docs/v5/charts/xy-chart/
+let chart = root.container.children.push(
+  am5xy.XYChart.new(root, {
+    panX: false,
+    panY: false,
+    wheelX: "none",
+    wheelY: "none"
+  })
+);
+
+
+// Create axes
+// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
+let yRenderer = am5xy.AxisRendererY.new(root, { minGridDistance: 30 });
+yRenderer.grid.template.set("location", 1);
+
+let yAxis = chart.yAxes.push(
+  am5xy.CategoryAxis.new(root, {
+    maxDeviation: 0,
+    categoryField: "country",
+    renderer: yRenderer
+  })
+);
+
+let xAxis = chart.xAxes.push(
+  am5xy.ValueAxis.new(root, {
+    maxDeviation: 0,
+    min: 0,
+    renderer: am5xy.AxisRendererX.new(root, {
+      visible: true,
+      strokeOpacity: 0.1
+    })
+  })
+);
+
+
+// Create series
+// https://www.amcharts.com/docs/v5/charts/xy-chart/series/
+let series = chart.series.push(
+  am5xy.ColumnSeries.new(root, {
+    name: "Series 1",
+    xAxis: xAxis,
+    yAxis: yAxis,
+    valueXField: "value",
+    sequencedInterpolation: true,
+    categoryYField: "country"
+  })
+);
+
+let columnTemplate = series.columns.template;
+
+columnTemplate.setAll({
+  draggable: true,
+  cursorOverStyle: "pointer",
+  tooltipText: "drag to rearrange",
+  cornerRadiusBR: 10,
+  cornerRadiusTR: 10,
+  strokeOpacity: 0
+});
+columnTemplate.adapters.add("fill", (fill, target) => {
+  return chart.get("colors").getIndex(series.columns.indexOf(target));
+});
+
+columnTemplate.adapters.add("stroke", (stroke, target) => {
+  return chart.get("colors").getIndex(series.columns.indexOf(target));
+});
+
+columnTemplate.events.on("dragstop", () => {
+  sortCategoryAxis();
+});
+
+// Get series item by category
+function getSeriesItem(category) {
+  for (var i = 0; i < series.dataItems.length; i++) {
+    let dataItem = series.dataItems[i];
+    if (dataItem.get("categoryY") == category) {
+      return dataItem;
+    }
+  }
+}
+
+
+// Axis sorting
+function sortCategoryAxis() {
+  // Sort by value
+  series.dataItems.sort(function(x, y) {
+    return y.get("graphics").y() - x.get("graphics").y();
+  });
+
+  let easing = am5.ease.out(am5.ease.cubic);
+
+  // Go through each axis item
+  am5.array.each(yAxis.dataItems, function(dataItem) {
+    // get corresponding series item
+    let seriesDataItem = getSeriesItem(dataItem.get("category"));
+
+    if (seriesDataItem) {
+      // get index of series data item
+      let index = series.dataItems.indexOf(seriesDataItem);
+
+      let column = seriesDataItem.get("graphics");
+
+      // position after sorting
+      let fy =
+        yRenderer.positionToCoordinate(yAxis.indexToPosition(index)) -
+        column.height() / 2;
+
+      // set index to be the same as series data item index
+      if (index != dataItem.get("index")) {
+        dataItem.set("index", index);
+
+        // current position
+        let x = column.x();
+        let y = column.y();
+
+        column.set("dy", -(fy - y));
+        column.set("dx", x);
+
+        column.animate({ key: "dy", to: 0, duration: 600, easing: easing });
+        column.animate({ key: "dx", to: 0, duration: 600, easing: easing });
+      } else {
+        column.animate({ key: "y", to: fy, duration: 600, easing: easing });
+        column.animate({ key: "x", to: 0, duration: 600, easing: easing });
+      }
+    }
+  });
+
+  // Sort axis items by index.
+  // This changes the order instantly, but as dx and dy is set and animated,
+  // they keep in the same places and then animate to true positions.
+  yAxis.dataItems.sort(function(x, y) {
+    return x.get("index") - y.get("index");
+  });
+}
+
+// Set data
+let data = [{
+  country: "USA",
+  value: 2025
+}, {
+  country: "China",
+  value: 1882
+}, {
+  country: "Japan",
+  value: 1809
+}, {
+  country: "Germany",
+  value: 1322
+}, {
+  country: "UK",
+  value: 1122
+}];
+
+yAxis.data.setAll(data);
+series.data.setAll(data);
+
+
+// Make stuff animate on load
+// https://www.amcharts.com/docs/v5/concepts/animations/
+series.appear(1000);
+chart.appear(1000, 100);
+
+    },
+  },
+
+  watch: {
+    // 부모 컴포넌트에서 데이터 업데이트 시 자식 컴포넌트도 props 데이터 업데이트
+    // "chartData": function(newValue, oldValue){
+    //     console.log('chartdiv watch: ', newValue, oldValue);
+    //     // 차트 생성 함수
+    //     this.createChart();
+    // }
+  },
+
+  mounted() {
+    this.createChart();
+  },
+};
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+#chartdiv {
+  height: 50rem;
+  padding-top: 2rem;
+}
+</style>
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -5,7 +5,7 @@
     <div class="main-warp">
       <router-view />
     </div>
-    <Footer></Footer>
+    <!-- <Footer></Footer> -->
   </div>
 </template>
 
client/views/pages/CrosswalkManagement/CrosswalkInsert.vue
--- client/views/pages/CrosswalkManagement/CrosswalkInsert.vue
+++ client/views/pages/CrosswalkManagement/CrosswalkInsert.vue
@@ -985,6 +985,7 @@
 
 .left {
   background: #fff;
+  width: 25%;
 }
 
 .right {
client/views/pages/RealtimeStatus/Chart1.vue
--- client/views/pages/RealtimeStatus/Chart1.vue
+++ client/views/pages/RealtimeStatus/Chart1.vue
@@ -1,8 +1,12 @@
 <template>
-	<!-- <div id="chartdiv" style="width: 100%" ref="chartdiv"></div> -->
-	<div style="width: 100%; height: 20rem;" ref="chartdivWrap">
-        <div ref="chartdiv" id="chartdiv" style="width: 100%; height: 100%; background: #ffffff;"></div>
-    </div>
+  <!-- <div id="chartdiv" style="width: 100%" ref="chartdiv"></div> -->
+  <div style="width: 100%; height: 100%" ref="chartdivWrap">
+    <div
+      ref="chartdiv"
+      id="chartdiv"
+      style="width: 100%; height: 100%; background: #ffffff"
+    ></div>
+  </div>
 </template>
 
 <script>
@@ -13,312 +17,204 @@
 import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
 
 export default {
-	props: {
-		chartDataName: {
-			type: Array,
-			default: []
-		},
-
-		chartData: {
-			type: Array,
-			default: []
-		},
-	},
-
-	data() {
-		return {
-            charts: {},
-		};
-	},
-
-	methods: {
-// 		createChart: function() {
-
-// 			if (COMMON_UTIL.isEmpty(this.charts["chartdiv"]) == false) {
-//                 this.charts["chartdiv"].dispose();
-//             }
-
-//             let chartWarp = this.$refs["chartdivWrap"];
-//             chartWarp.innerHTML = "";
-//             let div = document.createElement("div");
-//             div.style.width = "100%";
-//             div.style.height = "100%";
-//             chartWarp.appendChild(div);
-
-//             let root = am5.Root.new(div);
-//             this.charts["chartdiv"] = root;
-			
-// 			/* Chart code */
-
-
-// // Set themes
-// // https://www.amcharts.com/docs/v5/concepts/themes/
-// root.setThemes([
-//   am5themes_Animated.new(root)
-// ]);
-
-
-// // Create chart
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/
-// let chart = root.container.children.push(am5xy.XYChart.new(root, {
-//   panX: true,
-//   panY: true,
-//   wheelX: "panX",
-//   wheelY: "zoomX",
-//   pinchZoomX: true
-// }));
-
-// // Add cursor
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
-// let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}));
-// cursor.lineY.set("visible", false);
-
-
-// // Create axes
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
-// let xRenderer = am5xy.AxisRendererX.new(root, { minGridDistance: 30 });
-// xRenderer.labels.template.setAll({
-//   rotation: -90,
-//   centerY: am5.p50,
-//   centerX: am5.p100,
-//   paddingRight: 15
-// });
-
-// xRenderer.grid.template.setAll({
-//   location: 1
-// })
-
-// let xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {
-//   maxDeviation: 0.3,
-//   categoryField: "country",
-//   renderer: xRenderer,
-//   tooltip: am5.Tooltip.new(root, {})
-// }));
-
-// let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
-//   maxDeviation: 0.3,
-//   renderer: am5xy.AxisRendererY.new(root, {
-//     strokeOpacity: 0.1
-//   })
-// }));
-
-
-// // Create series
-// // https://www.amcharts.com/docs/v5/charts/xy-chart/series/
-// let series = chart.series.push(am5xy.ColumnSeries.new(root, {
-//   name: "Series 1",
-//   xAxis: xAxis,
-//   yAxis: yAxis,
-//   valueYField: "value",
-//   sequencedInterpolation: true,
-//   categoryXField: "country",
-//   tooltip: am5.Tooltip.new(root, {
-//     labelText: "{valueY}"
-//   })
-// }));
-
-// series.columns.template.setAll({ cornerRadiusTL: 5, cornerRadiusTR: 5, strokeOpacity: 0 });
-// series.columns.template.adapters.add("fill", function(fill, target) {
-//   return chart.get("colors").getIndex(series.columns.indexOf(target));
-// });
-
-// series.columns.template.adapters.add("stroke", function(stroke, target) {
-//   return chart.get("colors").getIndex(series.columns.indexOf(target));
-// });
-
-
-// // Set data
-// let data = [{
-//   country: "USA",
-//   value: 2025
-// }, {
-//   country: "China",
-//   value: 1882
-// }, {
-//   country: "Japan",
-//   value: 1809
-// }, {
-//   country: "Germany",
-//   value: 1322
-// }, {
-//   country: "UK",
-//   value: 1122
-// }, {
-//   country: "France",
-//   value: 1114
-// }, {
-//   country: "India",
-//   value: 984
-// }, {
-//   country: "Spain",
-//   value: 711
-// }, {
-//   country: "Netherlands",
-//   value: 665
-// }, {
-//   country: "South Korea",
-//   value: 443
-// }, {
-//   country: "Canada",
-//   value: 441
-// }];
-
-// xAxis.data.setAll(data);
-// series.data.setAll(data);
-
-
-// // Make stuff animate on load
-// // https://www.amcharts.com/docs/v5/concepts/animations/
-// series.appear(1000);
-// chart.appear(1000, 100);
-// 		}
-	},
-
-	watch: {
-        // 부모 컴포넌트에서 데이터 업데이트 시 자식 컴포넌트도 props 데이터 업데이트
-        // "chartData": function(newValue, oldValue){
-        //     console.log('chartdiv watch: ', newValue, oldValue);
-        //     // 차트 생성 함수
-        //     this.createChart();
-        // }
+  props: {
+    chartDataName: {
+      type: Array,
+      default: [],
     },
 
-	mounted() {
-/* Chart code */
-// Create root element
-// https://www.amcharts.com/docs/v5/getting-started/#Root_element
-let root = am5.Root.new("chartdiv");
+    chartData: {
+      type: Array,
+      default: [],
+    },
+  },
 
+  data() {
+    return {
+      charts: {},
+    };
+  },
 
-// Set themes
-// https://www.amcharts.com/docs/v5/concepts/themes/
-root.setThemes([
-  am5themes_Animated.new(root)
-]);
+  methods: {
+    createChart: function () {
+      console.log("createChart");
+      /* if (COMMON_UTIL.isEmpty(this.charts["chartdiv"]) == false) {
+		  this.charts["chartdiv"].dispose();
+		} */
 
+      let chartWarp = this.$refs["chartdivWrap"];
+      chartWarp.innerHTML = "";
+      let div = document.createElement("div");
+      div.style.width = "100%";
+      div.style.height = "100%";
+      chartWarp.appendChild(div);
 
-// Create chart
-// https://www.amcharts.com/docs/v5/charts/xy-chart/
-let chart = root.container.children.push(am5xy.XYChart.new(root, {
-  panX: true,
-  panY: true,
-  wheelX: "panX",
-  wheelY: "zoomX",
-  pinchZoomX: true
-}));
+      let root = am5.Root.new(div);
+      this.charts["chartdiv"] = root;
 
-// Add cursor
-// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
-let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}));
-cursor.lineY.set("visible", false);
+      /* Chart code */
+      //amChart 로고 삭제
+      root._logo.dispose();
+      // Set themes
+      // https://www.amcharts.com/docs/v5/concepts/themes/
+      root.setThemes([am5themes_Animated.new(root)]);
 
+      // Create chart
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/
+      let chart = root.container.children.push(
+        am5xy.XYChart.new(root, {
+          panX: true,
+          panY: true,
+          wheelX: "panX",
+          wheelY: "zoomX",
+          pinchZoomX: true,
+        })
+      );
 
-// Create axes
-// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
-let xRenderer = am5xy.AxisRendererX.new(root, { minGridDistance: 30 });
-xRenderer.labels.template.setAll({
-  rotation: -90,
-  centerY: am5.p50,
-  centerX: am5.p100,
-  paddingRight: 15
-});
+      // Add cursor
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
+      let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}));
+      cursor.lineY.set("visible", false);
 
-xRenderer.grid.template.setAll({
-  location: 1
-})
+      // Create axes
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
+      let xRenderer = am5xy.AxisRendererX.new(root, { minGridDistance: 30 });
+      xRenderer.labels.template.setAll({
+        centerY: am5.p50,
+        centerX: am5.p100,
+        paddingRight: 15,
+        oversizedBehavior: "truncate",
+        maxWidth: 10,
+        textAlign: "center",
+        ellipsis: "...",
+      });
 
-let xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {
-  maxDeviation: 0.3,
-  categoryField: "country",
-  renderer: xRenderer,
-  tooltip: am5.Tooltip.new(root, {})
-}));
+      xRenderer.grid.template.setAll({
+        location: 1,
+      });
 
-let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
-  maxDeviation: 0.3,
-  renderer: am5xy.AxisRendererY.new(root, {
-    strokeOpacity: 0.1
-  })
-}));
-  //amChart 로고 삭제
-  root._logo.dispose();
+      let xAxis = chart.xAxes.push(
+        am5xy.CategoryAxis.new(root, {
+          maxDeviation: 0.3,
+          categoryField: "country",
+          renderer: xRenderer,
+          tooltip: am5.Tooltip.new(root, {}),
+        })
+      );
 
-// Create series
-// https://www.amcharts.com/docs/v5/charts/xy-chart/series/
-let series = chart.series.push(am5xy.ColumnSeries.new(root, {
-  name: "Series 1",
-  xAxis: xAxis,
-  yAxis: yAxis,
-  valueYField: "value",
-  sequencedInterpolation: true,
-  categoryXField: "country",
-  tooltip: am5.Tooltip.new(root, {
-    labelText: "{valueY}"
-  })
-}));
+      let yAxis = chart.yAxes.push(
+        am5xy.ValueAxis.new(root, {
+          maxDeviation: 0.3,
+          renderer: am5xy.AxisRendererY.new(root, {
+            strokeOpacity: 0.1,
+          }),
+        })
+      );
 
-series.columns.template.setAll({ cornerRadiusTL: 5, cornerRadiusTR: 5, strokeOpacity: 0 });
-series.columns.template.adapters.add("fill", function(fill, target) {
-  return chart.get("colors").getIndex(series.columns.indexOf(target));
-});
+      // Create series
+      // https://www.amcharts.com/docs/v5/charts/xy-chart/series/
+      let series = chart.series.push(
+        am5xy.ColumnSeries.new(root, {
+          name: "Series 1",
+          xAxis: xAxis,
+          yAxis: yAxis,
+          valueYField: "value",
+          sequencedInterpolation: true,
+          categoryXField: "country",
+          tooltip: am5.Tooltip.new(root, {
+            labelText: "{valueY}",
+          }),
+        })
+      );
 
-series.columns.template.adapters.add("stroke", function(stroke, target) {
-  return chart.get("colors").getIndex(series.columns.indexOf(target));
-});
+      series.columns.template.setAll({
+        cornerRadiusTL: 5,
+        cornerRadiusTR: 5,
+        strokeOpacity: 0,
+      });
+      series.columns.template.adapters.add("fill", function (fill, target) {
+        return chart.get("colors").getIndex(series.columns.indexOf(target));
+      });
 
+      series.columns.template.adapters.add("stroke", function (stroke, target) {
+        return chart.get("colors").getIndex(series.columns.indexOf(target));
+      });
 
-// Set data
-let data = [{
-  country: "USA",
-  value: 2025
-}, {
-  country: "China",
-  value: 1882
-}, {
-  country: "Japan",
-  value: 1809
-}, {
-  country: "Germany",
-  value: 1322
-}, {
-  country: "UK",
-  value: 1122
-}, {
-  country: "France",
-  value: 1114
-}, {
-  country: "India",
-  value: 984
-}, {
-  country: "Spain",
-  value: 711
-}, {
-  country: "Netherlands",
-  value: 665
-}, {
-  country: "South Korea",
-  value: 443
-}, {
-  country: "Canada",
-  value: 441
-}];
+      // Set data
+      let data = [
+        {
+          country: "USA",
+          value: 2025,
+        },
+        {
+          country: "China",
+          value: 1882,
+        },
+        {
+          country: "Japan",
+          value: 1809,
+        },
+        {
+          country: "Germany",
+          value: 1322,
+        },
+        {
+          country: "UK",
+          value: 1122,
+        },
+        {
+          country: "France",
+          value: 1114,
+        },
+        {
+          country: "India",
+          value: 984,
+        },
+        {
+          country: "Spain",
+          value: 711,
+        },
+        {
+          country: "Netherlands",
+          value: 665,
+        },
+        {
+          country: "South Korea",
+          value: 443,
+        },
+        {
+          country: "Canada",
+          value: 441,
+        },
+      ];
 
-xAxis.data.setAll(data);
-series.data.setAll(data);
+      xAxis.data.setAll(data);
+      series.data.setAll(data);
 
+      // Make stuff animate on load
+      // https://www.amcharts.com/docs/v5/concepts/animations/
+      series.appear(1000);
+      chart.appear(1000, 100);
+    },
+  },
 
-// Make stuff animate on load
-// https://www.amcharts.com/docs/v5/concepts/animations/
-series.appear(1000);
-chart.appear(1000, 100);
-	},
+  watch: {
+    // 부모 컴포넌트에서 데이터 업데이트 시 자식 컴포넌트도 props 데이터 업데이트
+    // "chartData": function(newValue, oldValue){
+    //     console.log('chartdiv watch: ', newValue, oldValue);
+    //     // 차트 생성 함수
+    //     this.createChart();
+    // }
+  },
+
+  mounted() {
+    this.createChart();
+  },
 };
 </script>
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style scoped>
 #chartdiv {
-	height: 50rem;
-	padding-top: 2rem;
 }
 </style>
client/views/pages/RealtimeStatus/RealtimeStatus.vue
--- client/views/pages/RealtimeStatus/RealtimeStatus.vue
+++ client/views/pages/RealtimeStatus/RealtimeStatus.vue
@@ -41,8 +41,8 @@
           <h2>지역설정</h2>
           <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 class="m-r flex" v-for="tab in tabs" :key="tab.id" :class="{ active: activeTab === tab.id }" @click="changeTab(tab.id)">
+                {{ tab.title }} <img src="../../../resources/images/warning.png" alt="">
               </button>
             </div>
             <div class="tab-content" v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id">
@@ -138,15 +138,23 @@
         <OpenLayers ref="open_layers" />
       </div>
     </div>
-    <div class="chart">
-      <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
-      <div class=""><Chart1></Chart1></div>
-      <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
-      <div class=""></div>
-      <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
-      <div class=""></div>
-      <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
-      <div class=""></div>
+    <div class="chart grid">
+      <div>
+        <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
+        <div class="box"><Chart1></Chart1></div>
+      </div>
+      <div>
+        <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
+        <div class="box"><Chart1></Chart1></div>
+      </div>
+     <div>
+        <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
+        <div class="box"><Chart1></Chart1></div>
+     </div>
+      <div>
+        <h2>금일 횡단보도 별 무단횡단 발생 건수 (상위10개소)</h2>
+        <div class="box"><Chart1></Chart1></div>
+      </div>
     </div>
   </div>
 </template>
@@ -423,18 +431,19 @@
 .toggle {
   display: none;
 }
-.chart div {
-  /* min-height: 13rem; */
+.chart > div {
+  height: 100%;
 }
-
+.chart .box{height: 85%;}
 .chart {
-  width: 600px;
+  width: 30%;
+  height: 100%;
 }
-
 .search .box ul li {
   text-align: left;
 }
-
+.search .box button{font-size: 16px; padding:0.3rem 4rem;}
+.search .box button img{width: 20px;}
 .btn_set {
   position: relative;
   border-bottom: 1px solid #e5e3e3;
@@ -451,8 +460,8 @@
 }
 
 .bg-white {
-  min-height: 41.6rem;
-  max-height: 41.6rem;
+  min-height: 100%;
+  max-height: 100%;
   overflow: scroll;
   overflow-x: hidden;
 }
@@ -468,12 +477,11 @@
   padding: 1.6rem 0;
 }
 .top {
-  position: inherit;
     z-index: 100;
     background: #fff;
     top: 0;
     /* width: -webkit-fill-available; */
-    height: auto !important;
+    height: 68px !important;
   }
 .top p {
   font-size: 15px;
@@ -504,6 +512,7 @@
 
 .left {
   background: #fff;
+  width: 25%;
 }
 
 .right {
client/views/pages/main/Main.vue
--- client/views/pages/main/Main.vue
+++ client/views/pages/main/Main.vue
@@ -210,10 +210,14 @@
         </div>
       </div>
     </div>
+    <Footer></Footer>
   </div>
+  
 </template>
 
 <script>
+import Footer from "../../layout/Footer.vue";
+
 export default {
   data() {
     return {};
@@ -221,7 +225,7 @@
   methods: {},
   watch: {},
   computed: {},
-  components: {},
+  components: {Footer: Footer,},
   mounted() {
     console.log("main mounted");
   },
@@ -249,7 +253,7 @@
 .mainbottom {
   background: #f7f7f6;
   padding-top: 2%;
-    height: 100% !important;
+    height: 52% !important;
 }
 .barinfo {
   display: grid;
Add a comment
List