허정 허정 2023-08-29
20230829 김하영 시스템관리 표준노드관리 양식다운로드 폰트크기 버튼위치 변경
@f659f41a5905b498d1155b7d982be658b1e8b044
 
.idea/.gitignore (added)
+++ .idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
 
.idea/crosswalk.iml (added)
+++ .idea/crosswalk.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>(파일 끝에 줄바꿈 문자 없음)
 
.idea/libraries/client_19_16.xml (added)
+++ .idea/libraries/client_19_16.xml
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="client_19.16">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/server/modules/db/oracle/client/client_19.16/ucp.jar!/" />
+      <root url="jar://$PROJECT_DIR$/server/modules/db/oracle/client/client_19.16/ojdbc8.jar!/" />
+      <root url="jar://$PROJECT_DIR$/server/modules/db/oracle/client/client_19.16/xstreams.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>(파일 끝에 줄바꿈 문자 없음)
 
.idea/libraries/client_21_6.xml (added)
+++ .idea/libraries/client_21_6.xml
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="client_21.6">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/server/modules/db/oracle/client/client_21.6/ojdbc8.jar!/" />
+      <root url="jar://$PROJECT_DIR$/server/modules/db/oracle/client/client_21.6/ucp.jar!/" />
+      <root url="jar://$PROJECT_DIR$/server/modules/db/oracle/client/client_21.6/xstreams.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>(파일 끝에 줄바꿈 문자 없음)
 
.idea/misc.xml (added)
+++ .idea/misc.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_14" default="false" project-jdk-name="15" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>(파일 끝에 줄바꿈 문자 없음)
 
.idea/modules.xml (added)
+++ .idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/crosswalk.iml" filepath="$PROJECT_DIR$/.idea/crosswalk.iml" />
+    </modules>
+  </component>
+</project>(파일 끝에 줄바꿈 문자 없음)
 
.idea/vcs.xml (added)
+++ .idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>(파일 끝에 줄바꿈 문자 없음)
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -31,6 +31,10 @@
 }
 .s-btn {
   width: 15rem;
+  /* border: 1px solid red; */
+}
+.green-btn-s {
+  background-color: red;
 }
 input[type="text"] {
   height: 3rem;
@@ -287,6 +291,8 @@
   background: #13833b;
   border: 0;
   border-radius: 5px;
+  /* border: 1px solid red; */
+
   color: #fff;
 }
 .gr-btn {
client/views/pages/SystemManagement/DongManagement.vue
--- client/views/pages/SystemManagement/DongManagement.vue
+++ client/views/pages/SystemManagement/DongManagement.vue
@@ -18,14 +18,14 @@
       <div>
         <table>
           <colgroup>
-            <col style="width: 5%;">
-            <col style="width: 10%;">
-            <col style="width: 10%;">
-            <col style="width: 20%;">
-            <col style="width: 10%;">
-            <col style="width: 10%;">
-            <col style="width: 15%;">
-            <col style="width: 20%;">
+            <col style="width: 5%" />
+            <col style="width: 10%" />
+            <col style="width: 10%" />
+            <col style="width: 20%" />
+            <col style="width: 10%" />
+            <col style="width: 10%" />
+            <col style="width: 15%" />
+            <col style="width: 20%" />
           </colgroup>
           <thead>
             <tr>
@@ -76,41 +76,41 @@
       <div>
         <table>
           <colgroup>
-            <col style="width: 10%;">
-            <col style="width: 10%;">
-            <col style="width: 30%;">
-            <col style="width: 20%;">
-            <col style="width: 30%;">
+            <col style="width: 10%" />
+            <col style="width: 10%" />
+            <col style="width: 30%" />
+            <col style="width: 20%" />
+            <col style="width: 30%" />
           </colgroup>
           <tbody>
             <tr>
               <th colspan="2">ID</th>
-              <td><input type="text" class="full"></td>
+              <td><input type="text" class="full" /></td>
               <th>레이어</th>
-              <td><input type="text" class="full"></td>
+              <td><input type="text" class="full" /></td>
             </tr>
             <tr>
               <th colspan="2">한글명</th>
-              <td><input type="text" class="full"></td>
+              <td><input type="text" class="full" /></td>
               <th>등록일</th>
               <td></td>
             </tr>
             <tr>
               <th colspan="2">영문명</th>
-              <td><input type="text" class="full"></td>
+              <td><input type="text" class="full" /></td>
               <th>수정일</th>
               <td></td>
             </tr>
             <tr>
               <th rowspan="2">좌표</th>
               <th class="second">위도</th>
-              <td><input type="text" class="full"></td>
+              <td><input type="text" class="full" /></td>
               <th>등록자</th>
               <td></td>
             </tr>
             <tr>
               <th class="second">경도</th>
-              <td><input type="text" class="full"></td>
+              <td><input type="text" class="full" /></td>
               <th>수정자</th>
               <td></td>
             </tr>
@@ -118,8 +118,12 @@
         </table>
       </div>
       <div class="btn-wrap">
-        <button type="button" class="btn-2 gray-btn" @click="modal_2 = true">삭제</button>
-        <button type="button" class="btn-2 green-btn" @click="modal_1 = true">저장</button>
+        <button type="button" class="btn-2 gray-btn" @click="modal_2 = true">
+          삭제
+        </button>
+        <button type="button" class="btn-2 green-btn" @click="modal_1 = true">
+          저장
+        </button>
       </div>
     </div>
 
@@ -130,17 +134,15 @@
       <div>
         <table>
           <colgroup>
-            <col style="width: 30%;">
-            <col style="width: 70%;">
+            <col style="width: 30%" />
+            <col style="width: 70%" />
           </colgroup>
           <tbody>
             <tr>
               <th>ID</th>
               <td class="txt-left">
-                <input type="file" name="" id="fileBtn">
-                <label for="fileBtn" class="btn-2 green-btn">
-                  파일선택
-                </label>
+                <input type="file" name="" id="fileBtn" />
+                <label for="fileBtn" class="btn-2 green-btn"> 파일선택 </label>
                 <button type="button" class="gray-btn">등록</button>
               </td>
             </tr>
@@ -155,29 +157,31 @@
   </div>
 
   <div class="modal-wrap" v-if="modal_1 == true">
-    <div class="modal-bg">
-    </div>
+    <div class="modal-bg"></div>
     <div class="modal">
       <p>행정동을 <span class="txt-point">등록</span>하시겠습니까?</p>
       <div class="btn-wrap">
         <button type="button" class="green-btn">확인</button>
-        <button type="button" class="gray-btn" @click="modal_1 = false">취소</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-bg"></div>
     <div class="modal">
       <p>
-        해당 기능은 데이터 삭제 기능입니다.<br>
-        데이터 삭제 후, 조회에서 해당 데이터를 확인할 수 없습니다.<br>
+        해당 기능은 데이터 삭제 기능입니다.<br />
+        데이터 삭제 후, 조회에서 해당 데이터를 확인할 수 없습니다.<br />
         삭제를 원하시면 아래 삭제 버튼을 눌러주세요.
       </p>
       <div class="btn-wrap">
         <button type="button" class="green-btn">삭제</button>
-        <button type="button" class="gray-btn" @click="modal_2 = false">취소</button>
+        <button type="button" class="gray-btn" @click="modal_2 = false">
+          취소
+        </button>
       </div>
     </div>
   </div>
@@ -235,12 +239,12 @@
   float: right;
 }
 
-.sub-title-wrap>* {
+.sub-title-wrap > * {
   display: inline-block;
   vertical-align: middle;
 }
 
-.sub-title-wrap>*:not(:last-child) {
+.sub-title-wrap > *:not(:last-child) {
   margin-right: 2rem;
 }
 
@@ -254,6 +258,7 @@
 
 .txt-left .green-btn {
   margin-right: 2rem;
+  /* border: 1px solid red; */
 }
 
 .btn-2 {
@@ -272,7 +277,7 @@
   clear: both;
 }
 
-.search-wrap .float-right form>*:not(:last-child) {
+.search-wrap .float-right form > *:not(:last-child) {
   margin-right: 1rem;
 }
 
@@ -342,7 +347,7 @@
   margin-top: 15px;
 }
 
-.btn-wrap>*:not(:last-child) {
+.btn-wrap > *:not(:last-child) {
   margin-right: 15px;
 }
 
@@ -358,7 +363,7 @@
   position: absolute;
   width: 100%;
   height: 100%;
-  background-color: rgba(0, 0, 0, .6);
+  background-color: rgba(0, 0, 0, 0.6);
 }
 
 .modal {
@@ -382,4 +387,4 @@
 .txt-point {
   color: #13833b;
 }
-</style>
(파일 끝에 줄바꿈 문자 없음)
+</style>
client/views/pages/SystemManagement/NodeAddForm.vue
--- client/views/pages/SystemManagement/NodeAddForm.vue
+++ client/views/pages/SystemManagement/NodeAddForm.vue
@@ -7,20 +7,20 @@
       <div>
         <table>
           <colgroup>
-            <col style="width: 10%;">
-            <col style="width: 10%;">
-            <col style="width: 30%;">
-            <col style="width: 20%;">
-            <col style="width: 30%;">
+            <col style="width: 10%" />
+            <col style="width: 10%" />
+            <col style="width: 30%" />
+            <col style="width: 20%" />
+            <col style="width: 30%" />
           </colgroup>
           <tbody>
             <tr>
               <th colspan="2">ID</th>
-              <td><input type="text" v-model="node.node_id"></td>
+              <td><input type="text" v-model="node.node_id" /></td>
             </tr>
             <tr>
               <th colspan="2">노드명</th>
-              <td><input type="text" v-model="node.node_name"></td>
+              <td><input type="text" v-model="node.node_name" /></td>
             </tr>
             <tr>
               <th colspan="2">읍/면/동</th>
@@ -28,54 +28,78 @@
               <td>{{ dong_nm }}</td>
             </tr>
             <tr>
-              <th rowspan="2">좌표  <button type="button" class="btn-2 gray-btn" @click="[map_open = true, openMap()]">좌표수정</button></th>
+              <th rowspan="2">
+                좌표
+                <button
+                  type="button"
+                  class="btn-2 gray-btn"
+                  @click="[(map_open = true), openMap()]"
+                >
+                  좌표수정
+                </button>
+              </th>
               <th class="second">위도</th>
               <td>{{ node.lat }}</td>
             </tr>
             <tr>
               <th class="second">경도</th>
               <td>{{ node.lon }}</td>
-             
             </tr>
           </tbody>
         </table>
       </div>
       <div class="btn-wrap">
-        <button type="button" class="btn-2 green-btn" @click="nodeInsertCheck">등록</button>
-        <button type="button" class="btn-2 gray-btn" @click="nodeSelectListPage">취소</button>
+        <button type="button" class="btn-2 green-btn" @click="nodeInsertCheck">
+          등록
+        </button>
+        <button
+          type="button"
+          class="btn-2 gray-btn"
+          @click="nodeSelectListPage"
+        >
+          취소
+        </button>
       </div>
     </div>
-
   </div>
   <div class="modal-wrap" v-if="modal_insert == true">
-    <div class="modal-bg">
-    </div>
+    <div class="modal-bg"></div>
     <div class="modal">
       <p>노드를 <span class="txt-point">등록</span>하시겠습니까?</p>
       <div class="btn-wrap">
-        <button type="button" class="green-btn" @click="nodeInsert">확인</button>
-        <button type="button" class="gray-btn" @click="modal_insert = false">취소</button>
+        <button type="button" class="green-btn" @click="nodeInsert">
+          확인
+        </button>
+        <button type="button" class="gray-btn" @click="modal_insert = false">
+          취소
+        </button>
       </div>
     </div>
   </div>
 
   <div class="modal-wrap" v-if="map_open">
-    <div class="modal-bg">
-    </div>
+    <div class="modal-bg"></div>
     <div class="modalMap">
       <div class="search">
         <h2>교차로 검색</h2>
-        <dongSelectList @setDongCd="setDongCd" ref="parent" :nodeHiddenCk="true" :crslk_azHiddenCk="true"></dongSelectList>
-             <!-- @siDoGunGuSelectF="siDoGunGuSelectF" @dongSelectF="dongSelectF" @nodeSelectF="nodeSelectF"></dongSelectList> -->
+        <dongSelectList
+          @setDongCd="setDongCd"
+          ref="parent"
+          :nodeHiddenCk="true"
+          :crslk_azHiddenCk="true"
+        ></dongSelectList>
+        <!-- @siDoGunGuSelectF="siDoGunGuSelectF" @dongSelectF="dongSelectF" @nodeSelectF="nodeSelectF"></dongSelectList> -->
       </div>
       <button type="button" class="green-btn" @click="searchDong">검색</button>
-      <OpenLayers  ref="open_layers"/>
-          <label>위도 : </label>
-          <input style="width: 20rem" type="text" v-model="map_lat" disabled/>
-          <label>경도 : </label>
-          <input style="width: 20rem" type="text" v-model="map_lon" disabled/>
+      <OpenLayers ref="open_layers" />
+      <label>위도 : </label>
+      <input style="width: 20rem" type="text" v-model="map_lat" disabled />
+      <label>경도 : </label>
+      <input style="width: 20rem" type="text" v-model="map_lon" disabled />
       <div class="btn-wrap">
-        <button type="button" class="green-btn" @click="selectCoordinate">선택</button>
+        <button type="button" class="green-btn" @click="selectCoordinate">
+          선택
+        </button>
         <button type="button" class="gray-btn" @click="closeMap">취소</button>
       </div>
     </div>
@@ -83,8 +107,8 @@
 </template>
 
 <script>
-import axios from 'axios';
-import COMMON_UTIL from '../../../resources/js/commonUtil.ts';
+import axios from "axios";
+import COMMON_UTIL from "../../../resources/js/commonUtil.ts";
 import OpenLayers from "../../component/OpenLayers.vue";
 import {
   vworldBaseLayer,
@@ -93,12 +117,12 @@
   vworldHybridLayer,
   vworldSatelliteLayer,
 } from "../../component/OpenLayersMap.vue";
-import {baseStyles} from '../../component/OpenLayersStyle.vue';
-import dongSelectList from '../../component/dongSelectList.vue';
-import { transform } from 'ol/proj';
+import { baseStyles } from "../../component/OpenLayersStyle.vue";
+import dongSelectList from "../../component/dongSelectList.vue";
+import { transform } from "ol/proj";
 
 export default {
-  data:() => {
+  data: () => {
     return {
       node: {
         node_id: null,
@@ -106,8 +130,8 @@
         node_type: null,
         lat: null,
         lon: null,
-      //  updatedate: null,
-        dong_cd: '22',
+        //  updatedate: null,
+        dong_cd: "22",
       },
       dong_nm: null,
       address: {},
@@ -115,27 +139,32 @@
       //modal
       modal_insert: false,
 
-      //좌표 modal 
+      //좌표 modal
       map_open: false,
       map_lat: null,
       map_lon: null,
-
     };
   },
   methods: {
-
     //좌표수정 지도 열기
     async openMap() {
-      const vm  = this;
+      const vm = this;
 
       //OpenLayers 랜더링 후 접근
       await vm.$nextTick();
       //기본맵 세팅
       vm.$refs.open_layers.setBaseMap(vworldBaseLayer);
-      
+
       //행정동 레이어
-      //this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson.json','testMap','EPSG:4326', baseStyles['labelStyle'],'label');    
-      vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.node.dong_cd);
+      //this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson.json','testMap','EPSG:4326', baseStyles['labelStyle'],'label');
+      vm.$refs.open_layers.addVectorLayerByUrl(
+        "/common/getDongsGeoJson.json",
+        "nodeMap",
+        "EPSG:5181",
+        baseStyles["MultiPolygon"],
+        "MultiPolygon",
+        vm.node.dong_cd
+      );
       // vm.$refs.open_layers.setZoom(11);
     },
 
@@ -170,22 +199,33 @@
     },
 
     //지도 클릭 이벤트
-    childClick(prop,coordinate){        
-      const vm = this; 
+    childClick(prop, coordinate) {
+      const vm = this;
       console.log(prop);
       console.log(coordinate);
- 
+
       // 레이어 삭제
-      vm.$refs.open_layers.removeLayer('nodePoint');
-      
-      // Icon 그리기 
-      vm.$refs.open_layers.createIcon(coordinate[1],coordinate[0],'/client/resources/images/icon/fin2.png',0.3, 'nodePoint','EPSG:5181');
-      
+      vm.$refs.open_layers.removeLayer("nodePoint");
+
+      // Icon 그리기
+      vm.$refs.open_layers.createIcon(
+        coordinate[1],
+        coordinate[0],
+        "/client/resources/images/icon/fin2.png",
+        0.3,
+        "nodePoint",
+        "EPSG:5181"
+      );
+
       //클릭위치로 이동
       //  this.$refs.open_layers.setCenterPosition(coordinate[0],coordinate[1],'EPSG:5181');
 
       //좌표계 변환
-      var changeCoordinate = transform([coordinate[0],coordinate[1]],'EPSG:5181','EPSG:4326');
+      var changeCoordinate = transform(
+        [coordinate[0], coordinate[1]],
+        "EPSG:5181",
+        "EPSG:4326"
+      );
       vm.map_lat = changeCoordinate[1];
       vm.map_lon = changeCoordinate[0];
     },
@@ -193,91 +233,106 @@
     //지도 휠 사용
     childWheel(coordinate) {},
 
-     //좌표 선택 완료
-     selectCoordinate() {
-      const vm = this; 
+    //좌표 선택 완료
+    selectCoordinate() {
+      const vm = this;
       vm.node.lat = vm.map_lat;
       vm.node.lon = vm.map_lon;
       vm.map_open = false;
-     },
+    },
 
-     // 좌표수정에서 교차로 검색시 동레이어, 노드좌표 찍어주기
-     searchDong() {
+    // 좌표수정에서 교차로 검색시 동레이어, 노드좌표 찍어주기
+    searchDong() {
       const vm = this;
       //기존 레이어 삭제
-      vm.$refs.open_layers.removeLayer('nodeMap');
-      vm.$refs.open_layers.removeLayer('nodePoint');
+      vm.$refs.open_layers.removeLayer("nodeMap");
+      vm.$refs.open_layers.removeLayer("nodePoint");
       //동 레이어 그리기
-      vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.address.dong_cd);
+      vm.$refs.open_layers.addVectorLayerByUrl(
+        "/common/getDongsGeoJson.json",
+        "nodeMap",
+        "EPSG:5181",
+        baseStyles["MultiPolygon"],
+        "MultiPolygon",
+        vm.address.dong_cd
+      );
       axios({
-        url: '/dong/dongCenter.json',
-        method: 'post',
+        url: "/dong/dongCenter.json",
+        method: "post",
         headers: {
-          'Content-Type': "application/json; charset=UTF-8"
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        data: {'dong_cd' : vm.address.dong_cd}
-      }).then(function (response) {
-        console.log("searchNode response : ",response.data);
-        if(vm.address.guGun_dong_cd === null) {
-          vm.$refs.open_layers.setZoom(11);
-        } else if(vm.address.dong_dong_cd === null) {
-          vm.$refs.open_layers.setZoom(12.5);
-        } else {
-          vm.$refs.open_layers.setZoom(16);
-        }
-        vm.$refs.open_layers.setCenterPosition(response.data.dong_lat,response.data.dong_lon,'EPSG:5181');
-        vm.dong_nm = response.data.dong_nm;
-        console.log("vm.dong_nm  :  ", vm.dong_nm);
-      }).catch(function (error) {
-        console.log("serchNode error : ", error);
-        alert("검색에 실패 하였습니다. 관리자에게 문의하세요.");
+        data: { dong_cd: vm.address.dong_cd },
       })
-     },
+        .then(function (response) {
+          console.log("searchNode response : ", response.data);
+          if (vm.address.guGun_dong_cd === null) {
+            vm.$refs.open_layers.setZoom(11);
+          } else if (vm.address.dong_dong_cd === null) {
+            vm.$refs.open_layers.setZoom(12.5);
+          } else {
+            vm.$refs.open_layers.setZoom(16);
+          }
+          vm.$refs.open_layers.setCenterPosition(
+            response.data.dong_lat,
+            response.data.dong_lon,
+            "EPSG:5181"
+          );
+          vm.dong_nm = response.data.dong_nm;
+          console.log("vm.dong_nm  :  ", vm.dong_nm);
+        })
+        .catch(function (error) {
+          console.log("serchNode error : ", error);
+          alert("검색에 실패 하였습니다. 관리자에게 문의하세요.");
+        });
+    },
 
     //노드 등록
     nodeInsert() {
       const vm = this;
       vm.node.dong_cd = vm.address.dong_dong_cd;
-      
+
       axios({
-        url: '/node/nodeInsert.json',
-        method: 'post',
+        url: "/node/nodeInsert.json",
+        method: "post",
         headers: {
-          'Content-Type': "application/json; charset=UTF-8"
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        data: vm.node
-      }).then(function (response) {
-        console.log("nodeInsert - response : ", response.data);
-        let result = response.data;
-        if ( result > 0) {
-          alert("노드 등록을 완료 하였습니다.")
-          vm.modal_insert = false;
-          vm.nodeSelectListPage();
-        } else {
-          alert("등록 실패, 관리자에게 문의해주세요.")
-          vm.modal_insert = false;
-        }
-      }).catch(function (error) {
-        console.log("nodeInsert - error : ", error);
-        alert("노드등록 오류, 관리자에게 문의해주세요.")
-        vm.modal_insert = false;
+        data: vm.node,
       })
+        .then(function (response) {
+          console.log("nodeInsert - response : ", response.data);
+          let result = response.data;
+          if (result > 0) {
+            alert("노드 등록을 완료 하였습니다.");
+            vm.modal_insert = false;
+            vm.nodeSelectListPage();
+          } else {
+            alert("등록 실패, 관리자에게 문의해주세요.");
+            vm.modal_insert = false;
+          }
+        })
+        .catch(function (error) {
+          console.log("nodeInsert - error : ", error);
+          alert("노드등록 오류, 관리자에게 문의해주세요.");
+          vm.modal_insert = false;
+        });
     },
 
     //등록 유효성 검사
-    nodeInsertCheck: function() {
+    nodeInsertCheck: function () {
       if (COMMON_UTIL.isEmpty(this.node.node_id) === false) {
-        alert('노드ID를 입력해주세요.');
+        alert("노드ID를 입력해주세요.");
         return false;
       }
 
       if (COMMON_UTIL.isEmpty(this.node.node_name) === false) {
-        alert("노드명을 입력해주세요.")
+        alert("노드명을 입력해주세요.");
         return false;
       }
 
       this.modal_insert = true;
-    },  
+    },
 
     //dongSelectList 컴포넌트에서 선택된 dong_cd 셋팅
     setDongCd(value) {
@@ -290,14 +345,14 @@
     },
 
     nodeSelectListPage() {
-      this.$router.push({ path: '/NodeManagement.page'})
-    }
+      this.$router.push({ path: "/NodeManagement.page" });
+    },
   },
   watch: {},
   computed: {},
   components: {
     OpenLayers: OpenLayers,
-    dongSelectList: dongSelectList
+    dongSelectList: dongSelectList,
   },
   mounted() {
     console.log("Main4 mounted");
@@ -335,12 +390,12 @@
   float: right;
 }
 
-.sub-title-wrap>* {
+.sub-title-wrap > * {
   display: inline-block;
   vertical-align: middle;
 }
 
-.sub-title-wrap>*:not(:last-child) {
+.sub-title-wrap > *:not(:last-child) {
   margin-right: 2rem;
 }
 
@@ -354,6 +409,7 @@
 
 .txt-left .green-btn {
   margin-right: 2rem;
+  /* border: 1px solid red; */
 }
 
 .btn-2 {
@@ -372,7 +428,7 @@
   clear: both;
 }
 
-.search-wrap .float-right form>*:not(:last-child) {
+.search-wrap .float-right form > *:not(:last-child) {
   margin-right: 1rem;
 }
 
@@ -387,7 +443,9 @@
   border-left: none;
   border-right: none;
 }
-td input{width: -webkit-fill-available;}
+td input {
+  width: -webkit-fill-available;
+}
 table th {
   padding: 15px;
   color: #fff;
@@ -442,17 +500,15 @@
   margin-top: 15px;
 }
 
-.btn-wrap>*:not(:last-child) {
+.btn-wrap > *:not(:last-child) {
   margin-right: 15px;
 }
-
-
 
 .modal-bg {
   position: absolute;
   width: 100%;
   height: 100%;
-  background-color: rgba(0, 0, 0, .6);
+  background-color: rgba(0, 0, 0, 0.6);
 }
 .modal {
   position: absolute;
@@ -486,4 +542,4 @@
 .txt-point {
   color: #13833b;
 }
-</style>
(파일 끝에 줄바꿈 문자 없음)
+</style>
client/views/pages/SystemManagement/NodeManagement.vue
--- client/views/pages/SystemManagement/NodeManagement.vue
+++ client/views/pages/SystemManagement/NodeManagement.vue
@@ -1,11 +1,14 @@
 <template>
   <div class="wrap">
-    <div >
-      
-    <h2 style="color: #10833b" class="flex gap"><img src="../../../resources/images/bar.png" alt="">표준노드 관리</h2>
-    <div style="margin-left: 2rem;" class="m-b3">시스템 관리&nbsp;&#62;&nbsp;<em class="green2 lined">표준노드 관리</em> </div>
-   
-    <!--
+    <div>
+      <h2 style="color: #10833b" class="flex gap">
+        <img src="../../../resources/images/bar.png" alt="" />표준노드 관리
+      </h2>
+      <div style="margin-left: 2rem" class="m-b3">
+        시스템 관리&nbsp;&#62;&nbsp;<em class="green2 lined">표준노드 관리</em>
+      </div>
+
+      <!--
     <div class="search-wrap clear-fix">
         <div class=" flex-end gap">
           <select v-model="nodeListSearch.searchType">
@@ -30,27 +33,45 @@
       </div>
     -->
 
-    <!-- 검색 -->
-    <div class="de_Search" >
-      <table class="troubleTable">
-      <tbody>        
-          <tr>                     
-              <th>검색</th>               
-              <td colspan="7" >     
+      <!-- 검색 -->
+      <div class="de_Search">
+        <table class="troubleTable">
+          <tbody>
+            <tr>
+              <th>검색</th>
+              <td colspan="7">
                 <select v-model="nodeListSearch.searchType">
                   <option value="null">검색조건</option>
                   <option value="node_id">ID</option>
                   <option value="node_nm">노드명</option>
                 </select>
-                <input type="text" placeholder="검색어를 입력 해주세요." v-model="nodeListSearch.searchText" @keyup.enter="nodeSelectList" style="width: 78%;" />
-                <button type="button" class="green-btn" style="margin-left: 5px;padding: 5px;width: 10rem; float: right;" @click="nodeSelectList()">검색</button>
-              </td> 
-          </tr>
-      </tbody>
-      </table>
-    </div>
+                <input
+                  type="text"
+                  placeholder="검색어를 입력 해주세요."
+                  v-model="nodeListSearch.searchText"
+                  @keyup.enter="nodeSelectList"
+                  style="width: 78%"
+                />
+                <button
+                  type="button"
+                  class="green-btn"
+                  style="
+                    margin-left: 5px;
+                    padding: 5px;
+                    width: 10rem;
+                    float: right;
+                  "
+                  @click="nodeSelectList()"
+                >
+                  검색
+                </button>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
 
-      <div  class="pc">
+      <div class="pc">
         <table>
           <colgroup>
             <col style="width: 5%" />
@@ -63,14 +84,14 @@
           </colgroup>
           <thead>
             <tr>
-              <th >순번</th>
-              <th >ID</th>
-              <th >노드위치</th>
-              <th >노드명</th>
-              <th >위도</th>
-              <th >경도</th>
-              <th >등록일</th>
-            </tr>          
+              <th>순번</th>
+              <th>ID</th>
+              <th>노드위치</th>
+              <th>노드명</th>
+              <th>위도</th>
+              <th>경도</th>
+              <th>등록일</th>
+            </tr>
           </thead>
           <tbody>
             <tr
@@ -113,12 +134,14 @@
     </div>
     <div class="pc">
       <div class="sub-title-wrap flex-between m-b">
-        <h3 class="sub-title ">표준노드 정보관리</h3>
+        <h3 class="sub-title">표준노드 정보관리</h3>
         <!-- <button class="btn-2 green-btn" @click="nodeInsertPage">신규등록</button>-->
-        <button class="btn-2 green-btn s-btn " @click="createNode()">신규등록</button>
+        <button class="btn-2 green-btn s-btn" @click="createNode()">
+          신규등록
+        </button>
       </div>
-      <div class="de_Search">    
-        <table class="troubleTable"  style="margin-bottom:5px;">
+      <div class="de_Search">
+        <table class="troubleTable" style="margin-bottom: 5px">
           <colgroup>
             <col style="width: 10%" />
             <col style="width: 10%" />
@@ -177,7 +200,7 @@
           type="button"
           class="btn-2 green-btn s-btn"
           @click="modal_update = true"
-          style="width:auto;"
+          style="width: auto"
         >
           수정
         </button>
@@ -186,7 +209,7 @@
           type="button"
           class="btn-2 green-btn s-btn"
           @click="nodeInsertCheck"
-          style="width:auto;"
+          style="width: auto"
         >
           등록
         </button>
@@ -194,7 +217,7 @@
           type="button"
           class="btn-2 gray-btn s-btn"
           @click="modal_delete = true"
-          style="width:auto;"
+          style="width: auto"
         >
           삭제
         </button>
@@ -215,17 +238,41 @@
               <th>첨부파일</th>
               <td class="txt-left flex gap">
                 <input type="file" name="" id="fileBtn" />
-                <label for="fileBtn" class="btn-2 green-btn s-btn" style="height: 3rem; text-align: center; line-height: 3rem;"> 파일선택 </label>
-                <button type="button" class="gray-btn s-btn" @click="nodeExcelInsert">
+                <label
+                  for="fileBtn"
+                  class="btn-2 green-btn s-btn"
+                  style="height: 3rem; text-align: center; line-height: 3rem"
+                >
+                  파일선택
+                </label>
+                <button
+                  type="button"
+                  class="gray-btn s-btn"
+                  @click="nodeExcelInsert"
+                >
                   등록
                 </button>
               </td>
             </tr>
-            <tr>
+            <tr style="position: relative">
               <th>양식다운로드</th>
               <td class="txt-left flex gap">
-                <div>Excel을 이용한 노드등록은 양식에 따라 작성 후 등록해주시기 바랍니다.</div>
-                <button type="button" class="btn-2 green-btn s-btn" @click="nodeInsertForm">양식다운로드</button>
+                <div width="-webkit-fill-available" style="font-size: 13px">
+                  Excel을 이용한 노드등록은 양식에 따라 작성 후 등록해주시기
+                  바랍니다.
+                </div>
+                <button
+                  type="button"
+                  class="btn-2 green-btn s-btn green-btn-s"
+                  style="
+                    width: 125px !important;
+                    position: absolute;
+                    right: -1rem;
+                  "
+                  @click="nodeInsertForm"
+                >
+                  양식다운로드
+                </button>
               </td>
             </tr>
           </tbody>
@@ -233,7 +280,6 @@
       </div>
     </div>
   </div>
-  
 
   <div class="modal-wrap" v-if="modal_update == true">
     <div class="modal-bg"></div>
@@ -299,26 +345,37 @@
     </div>
   </div>
   -->
-  <div class="modal-wrap" v-if="map_open" >
-    <div class="modal-bg">
-    </div>
-    <div class="modalMap" style="min-width: 850px;">
-      <div class="de_Search" >
+  <div class="modal-wrap" v-if="map_open">
+    <div class="modal-bg"></div>
+    <div class="modalMap" style="min-width: 850px">
+      <div class="de_Search">
         <table class="troubleTable">
-        <tbody>        
-            <tr>                     
-                <th>검색</th>               
-                <td colspan="7" class="gap" >     
-                  <dongSelectListSimple
-                    @setDongCd="setDongCd"
-                    ref="parent"
-                    :nodeHiddenCk="true"
-                    :crslk_azHiddenCk="true"
-                  ></dongSelectListSimple>
-                  <button type="button" class="green-btn" style="margin-left: 5px;padding: 5px;width: 10rem; float: right;" @click="searchDong">검색</button>
-                </td> 
+          <tbody>
+            <tr>
+              <th>검색</th>
+              <td colspan="7" class="gap">
+                <dongSelectListSimple
+                  @setDongCd="setDongCd"
+                  ref="parent"
+                  :nodeHiddenCk="true"
+                  :crslk_azHiddenCk="true"
+                ></dongSelectListSimple>
+                <button
+                  type="button"
+                  class="green-btn"
+                  style="
+                    margin-left: 5px;
+                    padding: 5px;
+                    width: 10rem;
+                    float: right;
+                  "
+                  @click="searchDong"
+                >
+                  검색
+                </button>
+              </td>
             </tr>
-        </tbody>
+          </tbody>
         </table>
       </div>
 
@@ -340,16 +397,21 @@
       <div class="flex-between">
         <div class="flex gap">
           <label>위도 : </label>
-          <input style="width: 20rem;margin-right:1rem;" type="text" v-model="map_lat" disabled />
+          <input
+            style="width: 20rem; margin-right: 1rem"
+            type="text"
+            v-model="map_lat"
+            disabled
+          />
           <label>경도 : </label>
           <input style="width: 20rem" type="text" v-model="map_lon" disabled />
         </div>
       </div>
-      <div class="btn-wrap" style="margin-top: 4rem; text-align: center;">  
+      <div class="btn-wrap" style="margin-top: 4rem; text-align: center">
         <button type="button" class="green-btn s-btn" @click="selectCoordinate">
           선택
         </button>
-        <button type="button" class="gray-btn s-btn" @click="closeMap"> 
+        <button type="button" class="gray-btn s-btn" @click="closeMap">
           취소
         </button>
       </div>
@@ -440,21 +502,46 @@
       await vm.$nextTick();
       //수정 전 좌표 modal에서 보여주기
       if (!vm.createMode) {
-        console.log("위도경도 넣기!!!!!!!")
+        console.log("위도경도 넣기!!!!!!!");
         vm.map_lat = vm.node.lat;
         vm.map_lon = vm.node.lon;
       }
       //기본맵 세팅
       vm.$refs.open_layers.setBaseMap(vworldBaseLayer);
-      //노드위치로 이동     
-       if(!vm.createMode){
-        vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.node.dong_cd);
-        vm.$refs.open_layers.setCenterPosition(vm.node.lat,vm.node.lon,'EPSG:4326');
-        vm.$refs.open_layers.createIcon(vm.node.lat,vm.node.lon,'/client/resources/images/icon/fin2.png',0.3, 'nodePoint','EPSG:4326');
+      //노드위치로 이동
+      if (!vm.createMode) {
+        vm.$refs.open_layers.addVectorLayerByUrl(
+          "/common/getDongsGeoJson.json",
+          "nodeMap",
+          "EPSG:5181",
+          baseStyles["MultiPolygon"],
+          "MultiPolygon",
+          vm.node.dong_cd
+        );
+        vm.$refs.open_layers.setCenterPosition(
+          vm.node.lat,
+          vm.node.lon,
+          "EPSG:4326"
+        );
+        vm.$refs.open_layers.createIcon(
+          vm.node.lat,
+          vm.node.lon,
+          "/client/resources/images/icon/fin2.png",
+          0.3,
+          "nodePoint",
+          "EPSG:4326"
+        );
         vm.$refs.open_layers.setZoom(19);
-       }else{
-        vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.address.dong_cd);
-       }
+      } else {
+        vm.$refs.open_layers.addVectorLayerByUrl(
+          "/common/getDongsGeoJson.json",
+          "nodeMap",
+          "EPSG:5181",
+          baseStyles["MultiPolygon"],
+          "MultiPolygon",
+          vm.address.dong_cd
+        );
+      }
     },
 
     closeMap() {
@@ -506,38 +593,52 @@
     searchDong() {
       const vm = this;
       //기존 레이어 삭제
-      vm.$refs.open_layers.removeLayer('nodeMap');
-      vm.$refs.open_layers.removeLayer('nodePoint');
+      vm.$refs.open_layers.removeLayer("nodeMap");
+      vm.$refs.open_layers.removeLayer("nodePoint");
       //동 레이어 그리기
-      vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongsGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.address.dong_cd);
+      vm.$refs.open_layers.addVectorLayerByUrl(
+        "/common/getDongsGeoJson.json",
+        "nodeMap",
+        "EPSG:5181",
+        baseStyles["MultiPolygon"],
+        "MultiPolygon",
+        vm.address.dong_cd
+      );
       axios({
-        url: '/dong/dongCenter.json',
-        method: 'post',
+        url: "/dong/dongCenter.json",
+        method: "post",
         headers: {
-          'Content-Type': "application/json; charset=UTF-8"
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        data: {'dong_cd' : vm.address.dong_cd}
-      }).then(function (response) {
-        console.log("searchNode response : ",response.data);
-        if(vm.address.guGun_dong_cd === null) {
-          vm.$refs.open_layers.setZoom(11);
-        } else if(vm.address.dong_dong_cd === null) {
-          vm.$refs.open_layers.setZoom(12.5);
-        } else {
-          vm.$refs.open_layers.setZoom(16);
-        }
-        vm.$refs.open_layers.setCenterPosition(response.data.dong_lat,response.data.dong_lon,'EPSG:5181');
-        vm.dong_fullName =  response.data.sido_nm +
-                            " " +
-                            response.data.sigungu_nm +
-                            " " +
-                            response.data.dong_nm;
-        console.log("vm.dong_nm  :  ", vm.dongdong_fullName_nm);
-      }).catch(function (error) {
-        console.log("serchNode error : ", error);
-        alert("검색에 실패 하였습니다. 관리자에게 문의하세요.");
+        data: { dong_cd: vm.address.dong_cd },
       })
-     },
+        .then(function (response) {
+          console.log("searchNode response : ", response.data);
+          if (vm.address.guGun_dong_cd === null) {
+            vm.$refs.open_layers.setZoom(11);
+          } else if (vm.address.dong_dong_cd === null) {
+            vm.$refs.open_layers.setZoom(12.5);
+          } else {
+            vm.$refs.open_layers.setZoom(16);
+          }
+          vm.$refs.open_layers.setCenterPosition(
+            response.data.dong_lat,
+            response.data.dong_lon,
+            "EPSG:5181"
+          );
+          vm.dong_fullName =
+            response.data.sido_nm +
+            " " +
+            response.data.sigungu_nm +
+            " " +
+            response.data.dong_nm;
+          console.log("vm.dong_nm  :  ", vm.dongdong_fullName_nm);
+        })
+        .catch(function (error) {
+          console.log("serchNode error : ", error);
+          alert("검색에 실패 하였습니다. 관리자에게 문의하세요.");
+        });
+    },
 
     //노드 엑셀 업로드
     nodeExcelInsert() {
@@ -557,10 +658,12 @@
         .then(function (response) {
           console.log("nodeExcelInsert - response : ", response.data);
           let insert = response.data.insert;
-          if (insert > 0 ) {
+          if (insert > 0) {
             alert(insert + "건의 노드 등록완료.");
           } else {
-            alert("업로드 파일의 모든 데이터는 이미 ID가 존재하거나 등록할 수 없는 데이터 입니다.");
+            alert(
+              "업로드 파일의 모든 데이터는 이미 ID가 존재하거나 등록할 수 없는 데이터 입니다."
+            );
           }
           vm.nodeSelectList();
         })
@@ -645,12 +748,12 @@
       }
 
       if (COMMON_UTIL.isEmpty(this.node.lat) === false) {
-        alert("위도를 입력해주세요.")
+        alert("위도를 입력해주세요.");
         return false;
       }
 
       if (COMMON_UTIL.isEmpty(this.node.lon) === false) {
-        alert("경도를 입력해주세요.")
+        alert("경도를 입력해주세요.");
         return false;
       }
 
@@ -765,7 +868,7 @@
     },
 
     //노드 엑셀등록 양식다운로드
-    nodeInsertForm: function() {
+    nodeInsertForm: function () {
       const vm = this;
       axios({
         url: "/node/nodeExcelForm.json",
@@ -773,15 +876,19 @@
         herders: {
           "Content-Type": "application/json; charset=UTF-8",
         },
-        responseType: 'arraybuffer',
+        responseType: "arraybuffer",
       })
         .then(function (response) {
           console.log("errorExcel - response : ", response.data);
-          const url = window.URL.createObjectURL(new Blob([response.data], { type: response.headers["content-type"] }));
+          const url = window.URL.createObjectURL(
+            new Blob([response.data], {
+              type: response.headers["content-type"],
+            })
+          );
           const link = document.createElement("a");
           link.href = url;
           let today = COMMON_UTIL.today();
-          link.download = '[' + today + ']' + '노드등록양식';
+          link.download = "[" + today + "]" + "노드등록양식";
           link.click();
           window.URL.revokeObjectURL(url);
         })
@@ -817,7 +924,7 @@
       this.createMode = true;
       this.map_disabled = false;
       this.dong_fullName = null;
-    }
+    },
   },
   watch: {},
   computed: {},
@@ -829,7 +936,6 @@
   mounted() {
     console.log("Main4 mounted");
     this.nodeSelectList();
-    
   },
 };
 </script>
@@ -1012,7 +1118,10 @@
   height: auto;
   width: -webkit-fill-available;
 }
-.modalMap .chart {height:70%; margin: 0rem;}
+.modalMap .chart {
+  height: 70%;
+  margin: 0rem;
+}
 
 .modalMap {
   position: absolute;
@@ -1035,5 +1144,4 @@
 .txt-point {
   color: #13833b;
 }
-
 </style>
package-lock.json
--- package-lock.json
+++ package-lock.json
@@ -1,9 +1,13 @@
 {
   "name": "crosswalk",
+  "version": "1.0.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
+      "name": "crosswalk",
+      "version": "1.0.0",
+      "license": "MIT",
       "dependencies": {
         "@amcharts/amcharts5": "^5.4.1",
         "@amcharts/amcharts5-geodata": "^5.1.1",
yarn.lock
--- yarn.lock
+++ yarn.lock
This diff is too big to display.
Add a comment
List