김성원 김성원 2023-07-11
API 토큰관리
@bffab9d80159c1329112c33dd311b0e04a8e8fa9
 
client/views/index.jsx (deleted)
--- client/views/index.jsx
@@ -1,17 +0,0 @@
-/**
- * @author : 최정우
- * @since : 2022.09.20
- * @dscription : React를 활용한 Client단 구현의 시작점(Index) Component 입니다.
- */
-
- import React from 'react';
- import ReactDOM from 'react-dom/client';
- 
- //Application Root component
- import App from './pages/App.jsx';
- 
- const root = ReactDOM.createRoot(document.getElementById('root'));
- root.render(<App/>);
- 
- 
- (No newline at end of file)
 
client/views/layout/Header.jsx (deleted)
--- client/views/layout/Header.jsx
@@ -1,25 +0,0 @@
-import React from 'react';
-
-function Header () {
-
-    const [headerData, setHeaderData] = React.useState(0);
-    console.log('Header headerData : ', headerData);
-
-    function headerDataChange () {
-        for (let i = 0; i < 10; i++) {
-            setHeaderData(headerData + 1);
-        }
-        console.log('function headerDataChange headerData : ', headerData);
-    }
-
-    
-
-    return (
-        <div>
-            헤더입니다.
-            <button onClick={headerDataChange}>+1</button>
-        </div>
-    )
-}
-
-export default Header;(No newline at end of file)
client/views/layout/Header.vue
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
@@ -29,11 +29,8 @@
             </li>
            
           </ul>
-        </li>
-        <li style="color: #3fb52d"><router-link to="/Mypage.page">
-          마이페이지
-        </router-link></li>
-            <li style="color: #3fb52d"><router-link to="/Login.page">
+        </li>       
+        <li style="color: #3fb52d"><router-link to="/Login.page">
           로그인
         </router-link></li>
       </ul>
@@ -143,10 +140,7 @@
           >
         </router-link>
       </nav>
-      <div class="sub_menu">
-        <router-link to="/Mypage.page">
-          <span>마이페이지</span>
-        </router-link>
+      <div class="sub_menu">       
         <router-link to="/Login.page">
           <span>로그인</span>
         </router-link>
@@ -154,68 +148,6 @@
       </div>
     </div>
   </header>
-
-  <!-- 가로 467px 일때 실행되는 template 평소엔 display:none -->
-
-  <!-- <div class="submenu" v-show="showSubmenu">/// -->
-  <!-- <ul class="submenu" >
-      <li>
-        <router-link to="/Introduction.page">
-            <a href="#">플랫폼 소개<i class="fa fa-chevron-down"></i></a>
-          </router-link>
-          <ul>
-            <li>스마트 횡단보도란?</li>
-          </ul>
-        </li>
-        <li>
-          <router-link to="/Analysis.page">
-            <a href="#">현황관제<i class="fa fa-chevron-down"></i></a>
-          </router-link>
-          <ul>
-            <li>실시간 현황관제</li>
-            <li>상황발생 정보조회</li>
-            <li>장애 발생 정보조회</li>
-            <li>횡단보도 목록조회</li>
-          </ul>
-        </li>
-        <li>
-          <router-link to="/Analysis.page">
-            <a href="#">통계분석<i class="fa fa-chevron-down"></i></a>
-          </router-link>
-          <ul>
-            <li>통계분석</li>
-          </ul>
-        </li>
-        <li>
-          <router-link to="/CrosswalkInsert.page">
-            <a href="#">횡단보도 관리<i class="fa fa-chevron-down"></i></a>
-          </router-link>
-          <ul>
-            <li>횡단보도 등록</li>
-            <li>횡단보도 조회</li>
-          </ul>
-        </li>
-        <li>
-          <router-link to="/UserManagement.page">
-            <a href="#">시스템 관리<i class="fa fa-chevron-down"></i></a>
-          </router-link>
-          <ul>
-            <li>사용자 관리</li>
-            <li>유지보수 담당자 관리</li>
-            <li>표준노드 관리</li>
-            <li>행정동 관리</li>
-            <li>데이터 수집기록</li>
-          </ul>
-        </li>
-        <li>
-          <router-link to="/Mypage.page"> 마이페이지 </router-link>
-        </li>
-        <li>
-          <router-link to="/Login.page">
-            <a href="#">로그인</a>
-          </router-link>
-        </li>
-      </ul> -->
 </template>
 
 <script>
 
client/views/layout/Menu.jsx (deleted)
--- client/views/layout/Menu.jsx
@@ -1,17 +0,0 @@
-import React from 'react';
-import { BrowserRouter, Link } from 'react-router-dom';
-
-function Menu () {
-    return (
-        <>
-            <div>
-                <BrowserRouter>
-                    <Link to="/">Home</Link>
-                </BrowserRouter>
-            </div>
-        </>
-        
-    )
-}
-
-export default Menu;(No newline at end of file)
 
client/views/pages/App.jsx (deleted)
--- client/views/pages/App.jsx
@@ -1,29 +0,0 @@
-/**
- * @author : 최정우
- * @since : 2022.09.20
- * @dscription : React를 활용한 Client단 구현 대상인 Application의 시작점(Index) Component 입니다.
- */
- import React from 'react';
-
- //Application의 Route 정보를 관리하는 Component
- import AppRoute from './AppRoute.jsx';
- 
- //Test Layout
- import Header from '../layout/Header.jsx';
- import Menu from '../layout/Menu.jsx';
- import Footer from '../layout/Footer.jsx';
- 
- function App() {
-     return (
-         <div id="App">
-             <Header></Header>
-             <Menu></Menu>
-             <div id="pages">
-                 <AppRoute/>
-             </div>
-             <Footer></Footer>
-         </div>
-     )
- }
- 
- export default App;(No newline at end of file)
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -26,7 +26,7 @@
         //로그인 사용자 조회
         loginUserSelectOne: function (callback) {
             let vm = this;
-            axios({
+           /* axios({
                 url: "/user/loginUserSelectOne.json",
                 method: "post",
                 headers: {
@@ -51,7 +51,7 @@
                 callback(response.data);
             }).catch(function (error) {
                 console.log("getIsLogin - error : ", error);
-            });
+            });*/
         }
     },
   watch: {},
@@ -59,60 +59,15 @@
   components: {
     Header: Header,
     Menu: Menu,
-    Footer: Footer,
+    Footer: Footer, 
   },
   mounted: function () {
-        //vue router에게 페이지 변경 요청을 하여, router가 페이지 변경 전, 실행되는 훅(이벤트)
-        this.$router.beforeEach((to, from, next) => {
+      //vue router에게 페이지 변경 요청을 하여, router가 페이지 변경 전, 실행되는 훅(이벤트)
+       // this.$router.beforeEach((to, from, next) => { 
             //console.log("to : ", to, ", from : ", from);
             //로그인 사용자 조회 후, callback을 통해 로그인 사용자 정보 받기
-            this.loginUserSelectOne(function (store) {
-                //로그인 유무(로그인 정보가 있으면 True, 없으면 False)
-                let isLogin = (store.loginUser != null && store.loginUser['user_id'] != null);
-                //로그인 상태 일 때
-                if (isLogin == true) {
-                    //로그인 페이지 이동은 못하게 함
-                    if (to.path == '/Login.page') {
-                        next(false);
-                    } else {//로그인 페이지 이 외의 페이지들을 이동 가능하게 함
-                        next();
-                    }
-                } else {//로그인 상태가 아닐 때
-                    //로그인 페이지에서 다른 페이지로 이동하려고 할 때, 이동 못하게 함
-                    if (from.path == '/Login.page') {
-                        next(false);
-                    } else {//로그인 페이지 이외의 페이지에서, 페이지 이동을 하려고 할 때
-                        //로그인 페이지로 이동은 무조건 가능
-                        if (to.path == "/Login.page") {
-                            next();
-                        } else {//로그인 페이지로 무조건 이동
-                            next("/Login.page");
-                        }
-                    }
-                }
-                /* if (to.path == "/") {
-                    if (isLogin == true) {
-                        next();
-                    } else {
-                        next("/login.page");
-                    }
-                } else {
-                    if (isLogin == true) {
-                        if (to.path == "/login.page") {
-                            next(from.path);
-                        } else {
-                            next();
-                        }
-                    } else {
-                        if (to.path == "/login.page") {
-                            next();
-                        } else {
-                            next("/login.page");
-                        }
-                    }
-                } */
-            });
-        });
+      //      next("/Login.page");
+      //  });
     },
 };
 
 
client/views/pages/AppRoute.jsx (deleted)
--- client/views/pages/AppRoute.jsx
@@ -1,22 +0,0 @@
-/**
- * @author : 최정우
- * @since : 2022.09.20
- * @dscription : Application의 Route 정보를 관리하는 Component 입니다.
- */
- import React from 'react';
- //react router 라이브러리 import
- import { BrowserRouter, Routes, Route } from 'react-router-dom';
- 
- import Main from './main/Main.jsx';
- 
- function AppRoute () {
-     return (
-         <BrowserRouter>
-             <Routes>
-                 <Route path="/" element={<Main/>}></Route>
-             </Routes>
-         </BrowserRouter>
-     )
- }
- 
- export default AppRoute;(No newline at end of file)
client/views/pages/SystemManagement/NodeManagement.vue
--- client/views/pages/SystemManagement/NodeManagement.vue
+++ client/views/pages/SystemManagement/NodeManagement.vue
@@ -3,69 +3,63 @@
     <div>
       <div class="search-wrap clear-fix">
         <div class="float-left">
-          <h3 class="sub-title">표준노드 목록</h3>
+          <h3 class="sub-title">API 토큰 사용 목록</h3>
         </div>
         <div class="float-right">
-          <select v-model="nodeListSearch.searchType">
+          <select v-model="pagenation.searchType" style="padding:5px; height: 100%;">
             <option value="null">검색조건</option>
-            <option value="node_id">ID</option>
-            <option value="node_nm">노드명</option>
+            <option value="api_key">토큰</option>
+            <option value="user_nm">사용자명</option> 
           </select>
-          <input type="search" placeholder="검색어를 입력 해주세요." v-model="nodeListSearch.searchText" @keyup.enter="nodeSelectList"/>
-          <button type="button" class="btn-2 green-btn" @click="nodeSelectList()">검색</button>
+          <input type="search" placeholder="검색어를 입력 해주세요." v-model="pagenation.searchValue" @keyup.enter="selectTokkenList" style="padding:5px; height: 100%; margin: 0px 5px;" />
+          <button type="button" class="btn-2 green-btn" @click="selectTokkenList()" style="padding:5px; width:75px; height: 100%;">검색</button>
         </div>
       </div>
-      <div>
+      <div style="min-height: 500px;background: #f7f6f6;">
         <table>
           <colgroup>
             <col style="width: 5%;">
-            <col style="width: 15%;">
+            <col style="width: 35%;">
             <col style="width: 20%;">
             <col style="width: 20%;">
             <col style="width: 10%;">
-            <col style="width: 10%;">
-            <col style="width: 20%;">
+            <col style="width: 10%;">          
           </colgroup>
           <thead>
             <tr>
-              <th rowspan="2">순번</th>
-              <th rowspan="2">ID</th>
-              <th rowspan="2">노드위치</th>
-              <th rowspan="2">노드명</th>
-              <th colspan="2">좌표</th>
-            <!-- <th rowspan="2">등록일</th> --> 
-            </tr>
-            <tr>
-              <th>위도</th>
-              <th>경도</th>
+              <th >순번</th>
+              <th >토큰</th>
+              <th >사용자명</th>
+              <th >타입</th>
+              <th >사용유무</th>
+              <th >생성일</th>
             </tr>
           </thead>
           <tbody>
-            <tr v-for="(item, idx) in nodeList" :key="idx" @click="nodeSelectOne(item)">
-              <td data-title="NO">{{ nodeIdx - idx }}</td>
-              <td data-title="ID">{{ item.node_id }}</td>
-              <td data-title="노드위치">{{ item.sido_nm + " " + item.sigungu_nm + " " + item.dong_nm }}</td>
-              <td data-title="노드명">{{ item.node_name }}</td>
-              <td data-title="위도">{{ item.lat }}</td>
-              <td data-title="경도">{{ item.lon }}</td>
-             <!-- <td data-title="등록날짜">{{ dateHyphen(item.updatedate) }}</td> --> 
+            <tr v-for="(item, idx) in tokkenList" :key="idx" @click="nodeSelectOne(item)" v-bind:class="{'select_row' : (item.api_key == selectTokken.api_key) }" >
+              <td data-title="NO">{{ idx }}</td>
+              <td data-title="토큰">{{ item.api_key }}</td>
+              <td data-title="사용자명">{{ item.user_nm }}</td>
+              <td data-title="타입">{{ item.key_type }}</td>
+              <td data-title="사용유무">{{ item.use_yn }}</td>           
+              <td data-title="생성일">{{ dateHyphen(item.reg_dt) }}</td>
             </tr>
           </tbody>
         </table>
       </div>
       <div class="bottom-wrap">
         <PaginationButton
-        v-model:currentPage="nodeListSearch.currentPage"
-        :per-page="nodeListSearch.perPage" :total-count="nodeListCount" :max-range="5"
-        :click="nodeSelectList" />
+        v-model:currentPage="pagenation.currentPage"
+        :per-page="pagenation.perPage" :total-count="pagenation.totalRow" :max-range="5"
+        :click="selectTokkenList" />
       </div>
     </div>
     <div>
-      <div class="sub-title-wrap">
-        <h3 class="sub-title">표준노드 정보관리</h3>
-        <button class="btn-2 green-btn" @click="nodeInsertPage">신규등록</button>
+      <div class="sub-title-wrap" style="margin-bottom: 30px;">
+        <h3 class="sub-title">API 토큰 정보관리</h3>
+        <button class="btn-2 green-btn" @click="createTokken()">신규등록</button>
       </div>
-      <div>
+      <div >
         <table>
           <colgroup>
             <col style="width: 10%;">
@@ -74,78 +68,50 @@
             <col style="width: 20%;">
             <col style="width: 30%;">
           </colgroup>
-          <tbody>
+          <tbody><div class=""></div>
             <tr>
-              <th colspan="2">ID</th>
-              <td>{{ node.node_id }}</td>
+              <th colspan="2">토큰</th>
+              <td>{{ selectTokken.api_key}}</td>
               <th>등록일</th>
-              <td>{{ node.updatedate }}</td>
+              <td>{{ selectTokken.reg_dt}}</td>
             </tr>
             <tr>
-              <th colspan="2">노드명</th>
-              <td><input type="text" v-model="node.node_name"></td>
-              <th>수정일</th>
-              <td></td>
+              <th colspan="2">사용자 명</th>
+              <td><input type="text" v-model="selectTokken.user_nm" :disabled="updateMode" ></td> 
+              <th>사용유무</th>
+              <td>
+                <select v-model="selectTokken.use_yn" :disabled="updateMode">
+                  <option value="true">사용</option>
+                  <option value="false">미사용</option> 
+                </select>
+            
+                
+                </td>
             </tr>
             <tr>
-              <th colspan="2">노드위치</th>
+              <th colspan="2">타입</th>
               <!-- <td><input type="text" v-model="node.node_type"></td> -->
-              <td>{{ dong_fullName }}</td>
-              <th>등록자</th>
+              <td>
+                 <select v-model="selectTokken.key_type" :disabled="updateMode">
+                  <option value="IN">수집</option>
+                  <option value="OUT">전송</option> 
+                 </select>               
+              </td>
+              <th>-</th>
               <td></td>
-            </tr>
-            <tr>
-              <th rowspan="2">좌표  <button type="button" class="btn-2 gray-btn" :disabled=" map_disabled === true" @click="[map_open = true, openMap()]">좌표수정</button></th>
-              <th class="second">위도</th>
-              <td>{{ node.lat }}</td>
-              <th>수정자</th>
-              <td></td>
-            </tr>
-            <tr>
-              <th class="second">경도</th>
-              <td>{{ node.lon }}</td>
-             
-            </tr>
+            </tr>           
           </tbody>
         </table>
       </div>
       <div class="btn-wrap">
-        <button type="button" class="btn-2 green-btn" @click="modal_update = true">수정</button>
-        <button type="button" class="btn-2 gray-btn" @click="modal_delete = true">삭제</button>
-      </div>
-    </div>
-
-    <div>
-      <div class="sub-title-wrap">
-        <h3 class="sub-title">파일 업로드</h3>
-      </div>
-      <div>
-        <table>
-          <colgroup>
-            <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>
-                <button type="button" class="gray-btn" @click="nodeExcelInsert">등록</button>
-              </td>
-            </tr>
-            <tr>
-              <th>양식다운로드</th>
-              <td></td>
-            </tr>
-          </tbody>
-        </table>
+        <button type="button" class="btn-2 green-btn" @click="updateMode = false" v-if="updateMode">수정</button>
+        <button type="button" class="btn-2 green-btn" @click="updateKey()" v-else>등록</button>             
+        <button type="button" class="btn-2 gray-btn"  @click="updateCancle()" >취소</button>
       </div>
     </div>
   </div>
 
+  <!--  저장 팝업   -->
   <div class="modal-wrap" v-if="modal_update == true">
     <div class="modal-bg">
     </div>
@@ -158,6 +124,7 @@
     </div>
   </div>
 
+  <!--  삭제 팝업   -->
   <div class="modal-wrap"  v-if="modal_delete == true">
     <div class="modal-bg">
     </div>
@@ -172,68 +139,44 @@
         <button type="button" class="gray-btn" @click="modal_delete = false">취소</button>
       </div>
     </div>
-  </div>
-
-  <div class="modal-wrap" v-if="map_open">
-    <div class="modal-bg">
-    </div>
-    <div class="modalMap">
-        <h2>좌표 선택</h2>
-        <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/>
-          <label>노드명 : </label>
-          <input style="width: 20rem" type="text" v-model="node.node_name" disabled/>
-          <button type="button" class="green-btn" @click="selectCoordinate">선택</button>
-        <button type="button" class="gray-btn" @click="closeMap">취소</button>
-      <OpenLayers  ref="open_layers"/>
-    </div>
-  </div>
+  </div>  
 </template>
 
 <script>
 import axios from 'axios';
 import PaginationButton from '../../component/pagination/PaginationButton.vue';
 import COMMON_UTIL from '../../../resources/js/commonUtil.ts';
-import OpenLayers from "../../component/OpenLayers.vue";
-import {
-  vworldBaseLayer,
-  vworldGrayLayer,
-  vworldMidnightLayer,
-  vworldHybridLayer,
-  vworldSatelliteLayer,
-} from "../../component/OpenLayersMap.vue";
-import {baseStyles} from '../../component/OpenLayersStyle.vue';
-import dongSelectList from '../../component/dongSelectList.vue';
-import { transform } from 'ol/proj';
 
 export default {
   data:() => {
     return {
-      nodeListSearch: {
+      pagenation: {
         currentPage: 1,
         perPage: 10,
         searchType: null,
-        searchText: null
+        searchValue: null,
+        totalRow : 0,
+        api_key : '',
+        user_nm : '',
+        use_yn : false,
+        reg_dt : '',
+        key_type : 'out'
       },
-
       node: {
         node_id: null,
         node_name: null,
         node_type: null,
         lat: null,
-        lon: null,
-      //  updatedate: null,
+        lon: null,    
         dong_cd: null,
         dong_nm: null,
         sido_nm: null,
         sigungu_nm: null
       },
-
       address: {},
       nodeListCount: 0,
-      nodeList: [],
+      tokkenList: [],
+      selectTokken : {},
       nodeIdx: 0,
       dong_fullName: null,
       //modal
@@ -245,264 +188,40 @@
       map_open: false,
       map_lat: null,
       map_lon: null,
-
+      updateMode : true,
     };
   },
   methods: {
-
-    //좌표수정 지도 열기
-    async openMap() {
-      const vm  = this;
-
-      //OpenLayers 랜더링 후 접근
-      await vm.$nextTick();
-      //수정 전 좌표 modal에서 보여주기
-      vm.map_lat = vm.node.lat;
-      vm.map_lon = vm.node.lon;
-      //기본맵 세팅
-      vm.$refs.open_layers.setBaseMap(vworldBaseLayer);
-      
-      //행정동 레이어
-      //this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson.json','testMap','EPSG:4326', baseStyles['labelStyle'],'label');    
-      vm.$refs.open_layers.addVectorLayerByUrl('/node/getNodeGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.node.dong_cd);
-
-      //노드위치로 이동
-      vm.$refs.open_layers.removeLayer('nodePoint');
-      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/fin.png',0.3, 'nodePoint','EPSG:4326');
-      vm.$refs.open_layers.setZoom(19);
-    },
-    
-
-    closeMap() {
-      const vm = this;
-      vm.$refs.open_layers.removeLayerAll();
-      vm.map_open = false;
-    },
-
-    //지도 클릭 이벤트
-    childClick(prop,coordinate){        
-      const vm = this; 
-      console.log(prop);
-      console.log("coordinate",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');
-      
-      //클릭위치로 이동
-      //  this.$refs.open_layers.setCenterPosition(coordinate[0],coordinate[1],'EPSG:5181');
-
-      //좌표계 변환
-      var changeCoordinate = transform([coordinate[0],coordinate[1]],'EPSG:5181','EPSG:4326');
-      vm.map_lat = changeCoordinate[1];
-      vm.map_lon = changeCoordinate[0];
-    },
-
-     //좌표 선택 완료
-     selectCoordinate() {
-      const vm = this; 
-      vm.node.lat = vm.map_lat;
-      vm.node.lon = vm.map_lon;
-      vm.map_open = false;
-     },
-
-     // 좌표수정에서 교차로 검색시 동레이어, 노드좌표 찍어주기
-    //  searchNode() {
-    //   const vm = this;
-    //   //기존 레이어 삭제
-    //   vm.$refs.open_layers.removeLayer('nodeMap');
-    //   vm.$refs.open_layers.removeLayer('nodePoint');
-    //   //동 레이어 그리기
-    //   vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.address.dong_dong_cd);
-    //   axios({
-    //     url: '/node/nodeSelectOne.json',
-    //     method: 'post',
-    //     headers: {
-    //       'Content-Type': "application/json; charset=UTF-8"
-    //     },
-    //     data: {'node_id' : vm.address.node_id}
-    //   }).then(function (response) {
-    //     console.log("searchNode response : ",response.data);
-    //     vm.$refs.open_layers.createIcon(response.data.lat,response.data.lon,'/client/resources/images/icon/fin2.png',0.3, 'nodePoint','EPSG:4326');
-    //     vm.$refs.open_layers.setCenterPosition(response.data.lat,response.data.lon,'EPSG:4326');
-    //     vm.$refs.open_layers.zoomChange(19);
-
-    //   }).catch(function (error) {
-    //     console.log("serchNode error : ", error);
-    //     alert("검색에 실패 하였습니다. 관리자에게 문의하세요.");
-    //   })
-    //  },
-
-    //노드 엑셀 업로드
-    nodeExcelInsert() {
-      const vm = this;
-      var form = new FormData();
-      var file = document.getElementById("fileBtn");;
-      console.log(file.files[0]);
-      form.append("file", file.files[0]);
-      axios({
-        url: '/node/nodeExcelRead.json',
-        method: 'post',
-        hearders: {
-          'Content-Type': "multipart/form-data",
-        },
-        data: form
-      }).then(function (response) {
-        console.log("nodeExcelInsert - response : ", response.data);
-        let insert = response.data.insert;
-        let error = response.data.error;
-        if (insert > 0 && error > 0) {
-          alert(insert + "건의 노드 등록완료, " + error + "건은 이미 ID가 존재하는 데이터 입니다.")
-          vm.nodeSelectList();
-        } else if(insert === 0) {
-          alert("업로드 파일의 모든 데이터(" + error + "건)는 이미 ID가 존재하는 데이터 입니다.")
-          vm.nodeSelectList();
-        } else if(insert > 0 && error === 0) {
-          alert(insert + "건의 노드 등록완료.")
-          vm.nodeSelectList();
-        }
-      }).catch(function (error) {
-        console.log("nodeExcelInsert - error", error);
-        alert("파일 등록 오류, 관리자에게 문의해주세요.")
-      })
-    },
-
+   
     //노드목록 조회
-    nodeSelectList() {
+    selectTokkenList() {
       const vm = this;
+
+      console.log(vm.pagenation)
       axios({
-        url: '/node/nodeSelectList.json',
-        method: 'post',
+        url: '/getApiKeyList.json',
+        method: 'post', 
         headers: {
           'Content-Type': "application/json; charset=UTF-8",
         },
-        data: vm.nodeListSearch
-      }).then(function (response) {
+        data: vm.pagenation
+      }).then(function (response) { 
         console.log("nodeSelectList - response : ", response.data);
-        vm.nodeListCount = response.data.nodeListCount;
-        vm.nodeList = response.data.nodeList;
-        vm.nodeIdx = vm.nodeListCount-(vm.nodeListSearch.currentPage-1)*vm.nodeList.length;
+        vm.pagenation = response.data.pagenation;
+        vm.tokkenList = response.data.tokkenList;
+       // vm.nodeIdx = vm.nodeListCount-(vm.nodeListSearch.currentPage-1)*vm.nodeList.length;
       }).catch(function (error) {
         console.log("nodeSelectList - error : ", error);
         alert("노드 목록 조회 오류, 관리자에게 문의해주세요.");
       });
     },
 
-    //노드 수정
-    nodeUpdate() {
-      const vm = this;
-      if(vm.address.dong_dong_cd != null) {
-        vm.node.dong_cd = vm.address.dong_dong_cd
-      };
-      axios({
-        url: '/node/nodeUpdate.json',
-        method: 'post',
-        headers: {
-          'Content-Type': "application/json; charset=UTF-8"
-        },
-        data: vm.node
-      }).then(function (response) {
-        console.log("nodeUpdate - response : ", response.data);
-        let result = response.data;
-        if( result > 0) {
-          alert("노드 수정을 완료 하였습니다.");
-          vm.modal_update = false;
-          vm.nodeSelectList();
-          vm.node = {
-            node_id: null,
-            node_name: null,
-            node_type: null,
-            lat: null,
-            lon: null,
-          //  updatedate: null,
-            dong_cd: null,
-            dong_nm: null,
-            sido_nm: null,
-            sigungu_nm: null
-          };
-          vm.dong_fullName = null;
-          vm.id_disabled = false;
-        } else {
-          alert("수정 실패, 관리자에게 문의해주세요.");
-          vm.modal_update = false;
-        }
-      }).catch( function (error) {
-        console.log("nodeUpdate - error : ", error);
-        alert("노드수정 오류, 관리자에게 문의해주세요.");
-        vm.modal_update = false;
-      })
-    },
-
-    //노드 삭제
-    nodeDelete() {
-      const vm = this;
-      axios({
-        url: '/node/nodeDelete.json',
-        method: 'post',
-        headers: {
-          'Content-Type': "application/json; charset=UTF-8"
-        },
-        data: vm.node
-      }).then( function (response) {
-        console.log("nodeDelete - response : ", response.data);
-        let result = response.data;
-        if( result > 0) {
-          alert("노드 삭제를 완료 하였습니다.");
-          vm.modal_delete = false;
-          vm.nodeSelectList();
-          vm.node = {
-            node_id: null,
-            node_name: null,
-            node_type: null,
-            lat: null,
-            lon: null,
-          //  updatedate: null,
-            dong_cd: null,
-            dong_nm: null,
-            sido_nm: null,
-            sigungu_nm: null
-          };
-          vm.dong_fullName = null;
-        } else {
-          alert("삭제 실패, 관리자에게 문의해주세요.");
-          vm.modal_delete = false;
-        }
-      }).catch( function (error) {
-        console.log("nodeDelete - error : ", error);
-        alert("노드삭제 오류, 관리자에게 문의해주세요.");
-        vm.modal_delete = false;
-      })
-    },
-
     //노드 상세 조회 
     nodeSelectOne(nodeOne) {
       const vm = this;
-      axios({
-        url: '/node/nodeSelectOne.json',
-        method: 'post',
-        headers: {
-          'Content-Type': "application/json; charset=UTF-8"
-        },
-        data: nodeOne
-      }).then(function(response) {
-        console.log("nodeSelectOne - response : ", response.data);
-        vm.node = response.data;
-        vm.map_disabled = false;
-        vm.dong_fullName = response.data.sido_nm + " " + response.data.sigungu_nm + " " + response.data.dong_nm;
-      }).catch(function(error) {
-        console.log("nodeSelectOne - error : ", error);
-      });
+      this.selectTokken =  Object.assign({}, nodeOne); 
     },
-
-    //dongSelectList 컴포넌트에서 선택된 dong_cd 셋팅
-    setDongCd(value) {
-      console.log("value : ", value);
-      this.address = value;
-    },
-
+    
     //날짜에 '-' 넣기
     dateHyphen(date) {
       return COMMON_UTIL.dateHyphen(date);
@@ -510,18 +229,69 @@
 
     nodeInsertPage() {
       this.$router.push({ path: '/NodeAddForm.page'})
+    },
+
+    createTokken() {
+      this.updateMode = false;
+      this.selectTokken = {};
+      this.selectTokken.api_key = '자동생성';
+      this.selectTokken.reg_dt = '자동생성';
+      this.selectTokken.use_yn = true;
+      this.selectTokken.key_type = 'OUT';
+    //  this.$router.push({ path: '/NodeAddForm.page'})
+    },
+
+    // 수정 모드 끄시 
+    updateCancle() {
+       this.updateMode = true;
+       
+    },
+
+    // 데이터 저장 
+    updateKey() {     
+      const vm = this;
+
+      console.log(this.pagenation);
+      console.log(this.selectTokken);    
+
+      // 사용자명 유효성 검사 
+      if(this.selectTokken.user_nm.length < 3 ){
+           alert('사용자명은 최소 2글자 이상이여야 합니다.');
+      }
+
+      axios({
+        url: '/setApiKeyData.json',
+        method: 'post',
+        headers: {
+          'Content-Type': "application/json; charset=UTF-8"
+        },
+        data: vm.selectTokken
+      }).then(function (response) {
+        console.log("nodeUpdate - response : ", response.data);
+        let result = response.data;
+        vm.selectTokkenList();
+        alert(response.data.message);
+      }).catch( function (error) {
+        console.log("nodeUpdate - error : ", error);
+        alert("API 토큰 등록 오류, 관리자에게 문의해주세요.");
+        vm.modal_update = false;
+      })
+
+
+
     }
   },
+
+
   watch: {},
   computed: {},
   components: {
-    PaginationButton:PaginationButton,
-    OpenLayers: OpenLayers,
-    dongSelectList: dongSelectList
+    PaginationButton:PaginationButton,   
   },
-  mounted() {
-    console.log("Main4 mounted");
-    this.nodeSelectList();
+  mounted() {    
+    let vm = this;
+    this.selectTokkenList();
+
   },
 };
 </script>
@@ -530,6 +300,11 @@
 .wrap {
   width: 155rem;
   margin: 100px auto;
+}
+
+.select_row{
+    background: #cd7d09 !important;
+    color: white;
 }
 
 .search-wrap {
@@ -578,8 +353,10 @@
 }
 
 .btn-2 {
-  display: inline-block;
-  padding: 0.3rem 2rem;
+  display: inline-block; 
+  padding: 5px;
+  width: 75px;
+  height: 100%;
   font-size: 13.333px;
 }
 
@@ -608,7 +385,16 @@
   border-left: none;
   border-right: none;
 }
-td input{width: -webkit-fill-available;}
+td input{width: -webkit-fill-available;
+    width: 100%;
+    padding: 5px;
+}
+
+td select{width: -webkit-fill-available;
+    width: 100%;
+    padding: 5px;
+}
+
 table th {
   padding: 15px;
   color: #fff;
@@ -666,8 +452,6 @@
 .btn-wrap>*:not(:last-child) {
   margin-right: 15px;
 }
-
-
 
 .modal-bg {
   position: absolute;
client/views/pages/main/Login.vue
--- client/views/pages/main/Login.vue
+++ client/views/pages/main/Login.vue
@@ -15,8 +15,6 @@
             <label for="password">비밀번호</label>
             <input type="password" name="" id="" ref="user_pw" placeholder="Password" v-model="userLogin.user_pw" @keyup.enter="login">
           </div>   
-    
-
           <div class="btn-wrap">
             <button type="button" class="green-btn btn-l loginbtn"  @click="login">로그인</button>
             <router-link to="/IdFind.page"> <span class="">아이디 찾기</span></router-link>
@@ -24,9 +22,7 @@
         </form>
       </div>
     </div>
-  </div>
-
-  
+  </div>  
 </template>
 
 <script>
 
client/views/pages/main/Main.jsx (deleted)
--- client/views/pages/main/Main.jsx
@@ -1,16 +0,0 @@
-import React from 'react';
-
-import TestCompoent from '../../component/test/TestCompoent.jsx';
-
-function Main () {
-    return (
-        <>
-            <div>
-                메인 페이지 입니다.
-                <TestCompoent/>
-            </div>
-        </>
-    )
-}
-
-export default Main;(No newline at end of file)
package-lock.json
--- package-lock.json
+++ package-lock.json
@@ -1,5 +1,5 @@
 {
-  "name": "crosswalk",
+  "name": "crosswalk_trans_manage",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
server/modules/web/Server.js
--- server/modules/web/Server.js
+++ server/modules/web/Server.js
@@ -78,7 +78,7 @@
  */
 webServer.use('*.json', expressProxy(API_SERVER_HOST, {
     proxyReqPathResolver: function (request) {
-        //console.log('request : ', request.url, request.params[0]);
+        console.log('request : ', request.url, request.params[0]);
         return `${request.params['0']}.json`;
     }
 }));
Add a comment
List