
--- client/views/index.jsx
... | ... | @@ -1,17 +0,0 @@ |
1 | -/** | |
2 | - * @author : 최정우 | |
3 | - * @since : 2022.09.20 | |
4 | - * @dscription : React를 활용한 Client단 구현의 시작점(Index) Component 입니다. | |
5 | - */ | |
6 | - | |
7 | - import React from 'react'; | |
8 | - import ReactDOM from 'react-dom/client'; | |
9 | - | |
10 | - //Application Root component | |
11 | - import App from './pages/App.jsx'; | |
12 | - | |
13 | - const root = ReactDOM.createRoot(document.getElementById('root')); | |
14 | - root.render(<App/>); | |
15 | - | |
16 | - | |
17 | - (No newline at end of file) |
--- client/views/layout/Header.jsx
... | ... | @@ -1,25 +0,0 @@ |
1 | -import React from 'react'; | |
2 | - | |
3 | -function Header () { | |
4 | - | |
5 | - const [headerData, setHeaderData] = React.useState(0); | |
6 | - console.log('Header headerData : ', headerData); | |
7 | - | |
8 | - function headerDataChange () { | |
9 | - for (let i = 0; i < 10; i++) { | |
10 | - setHeaderData(headerData + 1); | |
11 | - } | |
12 | - console.log('function headerDataChange headerData : ', headerData); | |
13 | - } | |
14 | - | |
15 | - | |
16 | - | |
17 | - return ( | |
18 | - <div> | |
19 | - 헤더입니다. | |
20 | - <button onClick={headerDataChange}>+1</button> | |
21 | - </div> | |
22 | - ) | |
23 | -} | |
24 | - | |
25 | -export default Header;(No newline at end of file) |
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
... | ... | @@ -29,11 +29,8 @@ |
29 | 29 |
</li> |
30 | 30 |
|
31 | 31 |
</ul> |
32 |
- </li> |
|
33 |
- <li style="color: #3fb52d"><router-link to="/Mypage.page"> |
|
34 |
- 마이페이지 |
|
35 |
- </router-link></li> |
|
36 |
- <li style="color: #3fb52d"><router-link to="/Login.page"> |
|
32 |
+ </li> |
|
33 |
+ <li style="color: #3fb52d"><router-link to="/Login.page"> |
|
37 | 34 |
로그인 |
38 | 35 |
</router-link></li> |
39 | 36 |
</ul> |
... | ... | @@ -143,10 +140,7 @@ |
143 | 140 |
> |
144 | 141 |
</router-link> |
145 | 142 |
</nav> |
146 |
- <div class="sub_menu"> |
|
147 |
- <router-link to="/Mypage.page"> |
|
148 |
- <span>마이페이지</span> |
|
149 |
- </router-link> |
|
143 |
+ <div class="sub_menu"> |
|
150 | 144 |
<router-link to="/Login.page"> |
151 | 145 |
<span>로그인</span> |
152 | 146 |
</router-link> |
... | ... | @@ -154,68 +148,6 @@ |
154 | 148 |
</div> |
155 | 149 |
</div> |
156 | 150 |
</header> |
157 |
- |
|
158 |
- <!-- 가로 467px 일때 실행되는 template 평소엔 display:none --> |
|
159 |
- |
|
160 |
- <!-- <div class="submenu" v-show="showSubmenu">/// --> |
|
161 |
- <!-- <ul class="submenu" > |
|
162 |
- <li> |
|
163 |
- <router-link to="/Introduction.page"> |
|
164 |
- <a href="#">플랫폼 소개<i class="fa fa-chevron-down"></i></a> |
|
165 |
- </router-link> |
|
166 |
- <ul> |
|
167 |
- <li>스마트 횡단보도란?</li> |
|
168 |
- </ul> |
|
169 |
- </li> |
|
170 |
- <li> |
|
171 |
- <router-link to="/Analysis.page"> |
|
172 |
- <a href="#">현황관제<i class="fa fa-chevron-down"></i></a> |
|
173 |
- </router-link> |
|
174 |
- <ul> |
|
175 |
- <li>실시간 현황관제</li> |
|
176 |
- <li>상황발생 정보조회</li> |
|
177 |
- <li>장애 발생 정보조회</li> |
|
178 |
- <li>횡단보도 목록조회</li> |
|
179 |
- </ul> |
|
180 |
- </li> |
|
181 |
- <li> |
|
182 |
- <router-link to="/Analysis.page"> |
|
183 |
- <a href="#">통계분석<i class="fa fa-chevron-down"></i></a> |
|
184 |
- </router-link> |
|
185 |
- <ul> |
|
186 |
- <li>통계분석</li> |
|
187 |
- </ul> |
|
188 |
- </li> |
|
189 |
- <li> |
|
190 |
- <router-link to="/CrosswalkInsert.page"> |
|
191 |
- <a href="#">횡단보도 관리<i class="fa fa-chevron-down"></i></a> |
|
192 |
- </router-link> |
|
193 |
- <ul> |
|
194 |
- <li>횡단보도 등록</li> |
|
195 |
- <li>횡단보도 조회</li> |
|
196 |
- </ul> |
|
197 |
- </li> |
|
198 |
- <li> |
|
199 |
- <router-link to="/UserManagement.page"> |
|
200 |
- <a href="#">시스템 관리<i class="fa fa-chevron-down"></i></a> |
|
201 |
- </router-link> |
|
202 |
- <ul> |
|
203 |
- <li>사용자 관리</li> |
|
204 |
- <li>유지보수 담당자 관리</li> |
|
205 |
- <li>표준노드 관리</li> |
|
206 |
- <li>행정동 관리</li> |
|
207 |
- <li>데이터 수집기록</li> |
|
208 |
- </ul> |
|
209 |
- </li> |
|
210 |
- <li> |
|
211 |
- <router-link to="/Mypage.page"> 마이페이지 </router-link> |
|
212 |
- </li> |
|
213 |
- <li> |
|
214 |
- <router-link to="/Login.page"> |
|
215 |
- <a href="#">로그인</a> |
|
216 |
- </router-link> |
|
217 |
- </li> |
|
218 |
- </ul> --> |
|
219 | 151 |
</template> |
220 | 152 |
|
221 | 153 |
<script> |
--- client/views/layout/Menu.jsx
... | ... | @@ -1,17 +0,0 @@ |
1 | -import React from 'react'; | |
2 | -import { BrowserRouter, Link } from 'react-router-dom'; | |
3 | - | |
4 | -function Menu () { | |
5 | - return ( | |
6 | - <> | |
7 | - <div> | |
8 | - <BrowserRouter> | |
9 | - <Link to="/">Home</Link> | |
10 | - </BrowserRouter> | |
11 | - </div> | |
12 | - </> | |
13 | - | |
14 | - ) | |
15 | -} | |
16 | - | |
17 | -export default Menu;(No newline at end of file) |
--- client/views/pages/App.jsx
... | ... | @@ -1,29 +0,0 @@ |
1 | -/** | |
2 | - * @author : 최정우 | |
3 | - * @since : 2022.09.20 | |
4 | - * @dscription : React를 활용한 Client단 구현 대상인 Application의 시작점(Index) Component 입니다. | |
5 | - */ | |
6 | - import React from 'react'; | |
7 | - | |
8 | - //Application의 Route 정보를 관리하는 Component | |
9 | - import AppRoute from './AppRoute.jsx'; | |
10 | - | |
11 | - //Test Layout | |
12 | - import Header from '../layout/Header.jsx'; | |
13 | - import Menu from '../layout/Menu.jsx'; | |
14 | - import Footer from '../layout/Footer.jsx'; | |
15 | - | |
16 | - function App() { | |
17 | - return ( | |
18 | - <div id="App"> | |
19 | - <Header></Header> | |
20 | - <Menu></Menu> | |
21 | - <div id="pages"> | |
22 | - <AppRoute/> | |
23 | - </div> | |
24 | - <Footer></Footer> | |
25 | - </div> | |
26 | - ) | |
27 | - } | |
28 | - | |
29 | - export default App;(No newline at end of file) |
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
... | ... | @@ -26,7 +26,7 @@ |
26 | 26 |
//로그인 사용자 조회 |
27 | 27 |
loginUserSelectOne: function (callback) { |
28 | 28 |
let vm = this; |
29 |
- axios({ |
|
29 |
+ /* axios({ |
|
30 | 30 |
url: "/user/loginUserSelectOne.json", |
31 | 31 |
method: "post", |
32 | 32 |
headers: { |
... | ... | @@ -51,7 +51,7 @@ |
51 | 51 |
callback(response.data); |
52 | 52 |
}).catch(function (error) { |
53 | 53 |
console.log("getIsLogin - error : ", error); |
54 |
- }); |
|
54 |
+ });*/ |
|
55 | 55 |
} |
56 | 56 |
}, |
57 | 57 |
watch: {}, |
... | ... | @@ -59,60 +59,15 @@ |
59 | 59 |
components: { |
60 | 60 |
Header: Header, |
61 | 61 |
Menu: Menu, |
62 |
- Footer: Footer, |
|
62 |
+ Footer: Footer, |
|
63 | 63 |
}, |
64 | 64 |
mounted: function () { |
65 |
- //vue router에게 페이지 변경 요청을 하여, router가 페이지 변경 전, 실행되는 훅(이벤트) |
|
66 |
- this.$router.beforeEach((to, from, next) => { |
|
65 |
+ //vue router에게 페이지 변경 요청을 하여, router가 페이지 변경 전, 실행되는 훅(이벤트) |
|
66 |
+ // this.$router.beforeEach((to, from, next) => { |
|
67 | 67 |
//console.log("to : ", to, ", from : ", from); |
68 | 68 |
//로그인 사용자 조회 후, callback을 통해 로그인 사용자 정보 받기 |
69 |
- this.loginUserSelectOne(function (store) { |
|
70 |
- //로그인 유무(로그인 정보가 있으면 True, 없으면 False) |
|
71 |
- let isLogin = (store.loginUser != null && store.loginUser['user_id'] != null); |
|
72 |
- //로그인 상태 일 때 |
|
73 |
- if (isLogin == true) { |
|
74 |
- //로그인 페이지 이동은 못하게 함 |
|
75 |
- if (to.path == '/Login.page') { |
|
76 |
- next(false); |
|
77 |
- } else {//로그인 페이지 이 외의 페이지들을 이동 가능하게 함 |
|
78 |
- next(); |
|
79 |
- } |
|
80 |
- } else {//로그인 상태가 아닐 때 |
|
81 |
- //로그인 페이지에서 다른 페이지로 이동하려고 할 때, 이동 못하게 함 |
|
82 |
- if (from.path == '/Login.page') { |
|
83 |
- next(false); |
|
84 |
- } else {//로그인 페이지 이외의 페이지에서, 페이지 이동을 하려고 할 때 |
|
85 |
- //로그인 페이지로 이동은 무조건 가능 |
|
86 |
- if (to.path == "/Login.page") { |
|
87 |
- next(); |
|
88 |
- } else {//로그인 페이지로 무조건 이동 |
|
89 |
- next("/Login.page"); |
|
90 |
- } |
|
91 |
- } |
|
92 |
- } |
|
93 |
- /* if (to.path == "/") { |
|
94 |
- if (isLogin == true) { |
|
95 |
- next(); |
|
96 |
- } else { |
|
97 |
- next("/login.page"); |
|
98 |
- } |
|
99 |
- } else { |
|
100 |
- if (isLogin == true) { |
|
101 |
- if (to.path == "/login.page") { |
|
102 |
- next(from.path); |
|
103 |
- } else { |
|
104 |
- next(); |
|
105 |
- } |
|
106 |
- } else { |
|
107 |
- if (to.path == "/login.page") { |
|
108 |
- next(); |
|
109 |
- } else { |
|
110 |
- next("/login.page"); |
|
111 |
- } |
|
112 |
- } |
|
113 |
- } */ |
|
114 |
- }); |
|
115 |
- }); |
|
69 |
+ // next("/Login.page"); |
|
70 |
+ // }); |
|
116 | 71 |
}, |
117 | 72 |
}; |
118 | 73 |
|
--- client/views/pages/AppRoute.jsx
... | ... | @@ -1,22 +0,0 @@ |
1 | -/** | |
2 | - * @author : 최정우 | |
3 | - * @since : 2022.09.20 | |
4 | - * @dscription : Application의 Route 정보를 관리하는 Component 입니다. | |
5 | - */ | |
6 | - import React from 'react'; | |
7 | - //react router 라이브러리 import | |
8 | - import { BrowserRouter, Routes, Route } from 'react-router-dom'; | |
9 | - | |
10 | - import Main from './main/Main.jsx'; | |
11 | - | |
12 | - function AppRoute () { | |
13 | - return ( | |
14 | - <BrowserRouter> | |
15 | - <Routes> | |
16 | - <Route path="/" element={<Main/>}></Route> | |
17 | - </Routes> | |
18 | - </BrowserRouter> | |
19 | - ) | |
20 | - } | |
21 | - | |
22 | - export default AppRoute;(No newline at end of file) |
--- client/views/pages/SystemManagement/NodeManagement.vue
+++ client/views/pages/SystemManagement/NodeManagement.vue
... | ... | @@ -3,69 +3,63 @@ |
3 | 3 |
<div> |
4 | 4 |
<div class="search-wrap clear-fix"> |
5 | 5 |
<div class="float-left"> |
6 |
- <h3 class="sub-title">표준노드 목록</h3> |
|
6 |
+ <h3 class="sub-title">API 토큰 사용 목록</h3> |
|
7 | 7 |
</div> |
8 | 8 |
<div class="float-right"> |
9 |
- <select v-model="nodeListSearch.searchType"> |
|
9 |
+ <select v-model="pagenation.searchType" style="padding:5px; height: 100%;"> |
|
10 | 10 |
<option value="null">검색조건</option> |
11 |
- <option value="node_id">ID</option> |
|
12 |
- <option value="node_nm">노드명</option> |
|
11 |
+ <option value="api_key">토큰</option> |
|
12 |
+ <option value="user_nm">사용자명</option> |
|
13 | 13 |
</select> |
14 |
- <input type="search" placeholder="검색어를 입력 해주세요." v-model="nodeListSearch.searchText" @keyup.enter="nodeSelectList"/> |
|
15 |
- <button type="button" class="btn-2 green-btn" @click="nodeSelectList()">검색</button> |
|
14 |
+ <input type="search" placeholder="검색어를 입력 해주세요." v-model="pagenation.searchValue" @keyup.enter="selectTokkenList" style="padding:5px; height: 100%; margin: 0px 5px;" /> |
|
15 |
+ <button type="button" class="btn-2 green-btn" @click="selectTokkenList()" style="padding:5px; width:75px; height: 100%;">검색</button> |
|
16 | 16 |
</div> |
17 | 17 |
</div> |
18 |
- <div> |
|
18 |
+ <div style="min-height: 500px;background: #f7f6f6;"> |
|
19 | 19 |
<table> |
20 | 20 |
<colgroup> |
21 | 21 |
<col style="width: 5%;"> |
22 |
- <col style="width: 15%;"> |
|
22 |
+ <col style="width: 35%;"> |
|
23 | 23 |
<col style="width: 20%;"> |
24 | 24 |
<col style="width: 20%;"> |
25 | 25 |
<col style="width: 10%;"> |
26 |
- <col style="width: 10%;"> |
|
27 |
- <col style="width: 20%;"> |
|
26 |
+ <col style="width: 10%;"> |
|
28 | 27 |
</colgroup> |
29 | 28 |
<thead> |
30 | 29 |
<tr> |
31 |
- <th rowspan="2">순번</th> |
|
32 |
- <th rowspan="2">ID</th> |
|
33 |
- <th rowspan="2">노드위치</th> |
|
34 |
- <th rowspan="2">노드명</th> |
|
35 |
- <th colspan="2">좌표</th> |
|
36 |
- <!-- <th rowspan="2">등록일</th> --> |
|
37 |
- </tr> |
|
38 |
- <tr> |
|
39 |
- <th>위도</th> |
|
40 |
- <th>경도</th> |
|
30 |
+ <th >순번</th> |
|
31 |
+ <th >토큰</th> |
|
32 |
+ <th >사용자명</th> |
|
33 |
+ <th >타입</th> |
|
34 |
+ <th >사용유무</th> |
|
35 |
+ <th >생성일</th> |
|
41 | 36 |
</tr> |
42 | 37 |
</thead> |
43 | 38 |
<tbody> |
44 |
- <tr v-for="(item, idx) in nodeList" :key="idx" @click="nodeSelectOne(item)"> |
|
45 |
- <td data-title="NO">{{ nodeIdx - idx }}</td> |
|
46 |
- <td data-title="ID">{{ item.node_id }}</td> |
|
47 |
- <td data-title="노드위치">{{ item.sido_nm + " " + item.sigungu_nm + " " + item.dong_nm }}</td> |
|
48 |
- <td data-title="노드명">{{ item.node_name }}</td> |
|
49 |
- <td data-title="위도">{{ item.lat }}</td> |
|
50 |
- <td data-title="경도">{{ item.lon }}</td> |
|
51 |
- <!-- <td data-title="등록날짜">{{ dateHyphen(item.updatedate) }}</td> --> |
|
39 |
+ <tr v-for="(item, idx) in tokkenList" :key="idx" @click="nodeSelectOne(item)" v-bind:class="{'select_row' : (item.api_key == selectTokken.api_key) }" > |
|
40 |
+ <td data-title="NO">{{ idx }}</td> |
|
41 |
+ <td data-title="토큰">{{ item.api_key }}</td> |
|
42 |
+ <td data-title="사용자명">{{ item.user_nm }}</td> |
|
43 |
+ <td data-title="타입">{{ item.key_type }}</td> |
|
44 |
+ <td data-title="사용유무">{{ item.use_yn }}</td> |
|
45 |
+ <td data-title="생성일">{{ dateHyphen(item.reg_dt) }}</td> |
|
52 | 46 |
</tr> |
53 | 47 |
</tbody> |
54 | 48 |
</table> |
55 | 49 |
</div> |
56 | 50 |
<div class="bottom-wrap"> |
57 | 51 |
<PaginationButton |
58 |
- v-model:currentPage="nodeListSearch.currentPage" |
|
59 |
- :per-page="nodeListSearch.perPage" :total-count="nodeListCount" :max-range="5" |
|
60 |
- :click="nodeSelectList" /> |
|
52 |
+ v-model:currentPage="pagenation.currentPage" |
|
53 |
+ :per-page="pagenation.perPage" :total-count="pagenation.totalRow" :max-range="5" |
|
54 |
+ :click="selectTokkenList" /> |
|
61 | 55 |
</div> |
62 | 56 |
</div> |
63 | 57 |
<div> |
64 |
- <div class="sub-title-wrap"> |
|
65 |
- <h3 class="sub-title">표준노드 정보관리</h3> |
|
66 |
- <button class="btn-2 green-btn" @click="nodeInsertPage">신규등록</button> |
|
58 |
+ <div class="sub-title-wrap" style="margin-bottom: 30px;"> |
|
59 |
+ <h3 class="sub-title">API 토큰 정보관리</h3> |
|
60 |
+ <button class="btn-2 green-btn" @click="createTokken()">신규등록</button> |
|
67 | 61 |
</div> |
68 |
- <div> |
|
62 |
+ <div > |
|
69 | 63 |
<table> |
70 | 64 |
<colgroup> |
71 | 65 |
<col style="width: 10%;"> |
... | ... | @@ -74,78 +68,50 @@ |
74 | 68 |
<col style="width: 20%;"> |
75 | 69 |
<col style="width: 30%;"> |
76 | 70 |
</colgroup> |
77 |
- <tbody> |
|
71 |
+ <tbody><div class=""></div> |
|
78 | 72 |
<tr> |
79 |
- <th colspan="2">ID</th> |
|
80 |
- <td>{{ node.node_id }}</td> |
|
73 |
+ <th colspan="2">토큰</th> |
|
74 |
+ <td>{{ selectTokken.api_key}}</td> |
|
81 | 75 |
<th>등록일</th> |
82 |
- <td>{{ node.updatedate }}</td> |
|
76 |
+ <td>{{ selectTokken.reg_dt}}</td> |
|
83 | 77 |
</tr> |
84 | 78 |
<tr> |
85 |
- <th colspan="2">노드명</th> |
|
86 |
- <td><input type="text" v-model="node.node_name"></td> |
|
87 |
- <th>수정일</th> |
|
88 |
- <td></td> |
|
79 |
+ <th colspan="2">사용자 명</th> |
|
80 |
+ <td><input type="text" v-model="selectTokken.user_nm" :disabled="updateMode" ></td> |
|
81 |
+ <th>사용유무</th> |
|
82 |
+ <td> |
|
83 |
+ <select v-model="selectTokken.use_yn" :disabled="updateMode"> |
|
84 |
+ <option value="true">사용</option> |
|
85 |
+ <option value="false">미사용</option> |
|
86 |
+ </select> |
|
87 |
+ |
|
88 |
+ |
|
89 |
+ </td> |
|
89 | 90 |
</tr> |
90 | 91 |
<tr> |
91 |
- <th colspan="2">노드위치</th> |
|
92 |
+ <th colspan="2">타입</th> |
|
92 | 93 |
<!-- <td><input type="text" v-model="node.node_type"></td> --> |
93 |
- <td>{{ dong_fullName }}</td> |
|
94 |
- <th>등록자</th> |
|
94 |
+ <td> |
|
95 |
+ <select v-model="selectTokken.key_type" :disabled="updateMode"> |
|
96 |
+ <option value="IN">수집</option> |
|
97 |
+ <option value="OUT">전송</option> |
|
98 |
+ </select> |
|
99 |
+ </td> |
|
100 |
+ <th>-</th> |
|
95 | 101 |
<td></td> |
96 |
- </tr> |
|
97 |
- <tr> |
|
98 |
- <th rowspan="2">좌표 <button type="button" class="btn-2 gray-btn" :disabled=" map_disabled === true" @click="[map_open = true, openMap()]">좌표수정</button></th> |
|
99 |
- <th class="second">위도</th> |
|
100 |
- <td>{{ node.lat }}</td> |
|
101 |
- <th>수정자</th> |
|
102 |
- <td></td> |
|
103 |
- </tr> |
|
104 |
- <tr> |
|
105 |
- <th class="second">경도</th> |
|
106 |
- <td>{{ node.lon }}</td> |
|
107 |
- |
|
108 |
- </tr> |
|
102 |
+ </tr> |
|
109 | 103 |
</tbody> |
110 | 104 |
</table> |
111 | 105 |
</div> |
112 | 106 |
<div class="btn-wrap"> |
113 |
- <button type="button" class="btn-2 green-btn" @click="modal_update = true">수정</button> |
|
114 |
- <button type="button" class="btn-2 gray-btn" @click="modal_delete = true">삭제</button> |
|
115 |
- </div> |
|
116 |
- </div> |
|
117 |
- |
|
118 |
- <div> |
|
119 |
- <div class="sub-title-wrap"> |
|
120 |
- <h3 class="sub-title">파일 업로드</h3> |
|
121 |
- </div> |
|
122 |
- <div> |
|
123 |
- <table> |
|
124 |
- <colgroup> |
|
125 |
- <col style="width: 30%;"> |
|
126 |
- <col style="width: 70%;"> |
|
127 |
- </colgroup> |
|
128 |
- <tbody> |
|
129 |
- <tr> |
|
130 |
- <th>ID</th> |
|
131 |
- <td class="txt-left"> |
|
132 |
- <input type="file" name="" id="fileBtn"> |
|
133 |
- <label for="fileBtn" class="btn-2 green-btn"> |
|
134 |
- 파일선택 |
|
135 |
- </label> |
|
136 |
- <button type="button" class="gray-btn" @click="nodeExcelInsert">등록</button> |
|
137 |
- </td> |
|
138 |
- </tr> |
|
139 |
- <tr> |
|
140 |
- <th>양식다운로드</th> |
|
141 |
- <td></td> |
|
142 |
- </tr> |
|
143 |
- </tbody> |
|
144 |
- </table> |
|
107 |
+ <button type="button" class="btn-2 green-btn" @click="updateMode = false" v-if="updateMode">수정</button> |
|
108 |
+ <button type="button" class="btn-2 green-btn" @click="updateKey()" v-else>등록</button> |
|
109 |
+ <button type="button" class="btn-2 gray-btn" @click="updateCancle()" >취소</button> |
|
145 | 110 |
</div> |
146 | 111 |
</div> |
147 | 112 |
</div> |
148 | 113 |
|
114 |
+ <!-- 저장 팝업 --> |
|
149 | 115 |
<div class="modal-wrap" v-if="modal_update == true"> |
150 | 116 |
<div class="modal-bg"> |
151 | 117 |
</div> |
... | ... | @@ -158,6 +124,7 @@ |
158 | 124 |
</div> |
159 | 125 |
</div> |
160 | 126 |
|
127 |
+ <!-- 삭제 팝업 --> |
|
161 | 128 |
<div class="modal-wrap" v-if="modal_delete == true"> |
162 | 129 |
<div class="modal-bg"> |
163 | 130 |
</div> |
... | ... | @@ -172,68 +139,44 @@ |
172 | 139 |
<button type="button" class="gray-btn" @click="modal_delete = false">취소</button> |
173 | 140 |
</div> |
174 | 141 |
</div> |
175 |
- </div> |
|
176 |
- |
|
177 |
- <div class="modal-wrap" v-if="map_open"> |
|
178 |
- <div class="modal-bg"> |
|
179 |
- </div> |
|
180 |
- <div class="modalMap"> |
|
181 |
- <h2>좌표 선택</h2> |
|
182 |
- <label>위도 : </label> |
|
183 |
- <input style="width: 20rem" type="text" v-model="map_lat" disabled/> |
|
184 |
- <label>경도 : </label> |
|
185 |
- <input style="width: 20rem" type="text" v-model="map_lon" disabled/> |
|
186 |
- <label>노드명 : </label> |
|
187 |
- <input style="width: 20rem" type="text" v-model="node.node_name" disabled/> |
|
188 |
- <button type="button" class="green-btn" @click="selectCoordinate">선택</button> |
|
189 |
- <button type="button" class="gray-btn" @click="closeMap">취소</button> |
|
190 |
- <OpenLayers ref="open_layers"/> |
|
191 |
- </div> |
|
192 |
- </div> |
|
142 |
+ </div> |
|
193 | 143 |
</template> |
194 | 144 |
|
195 | 145 |
<script> |
196 | 146 |
import axios from 'axios'; |
197 | 147 |
import PaginationButton from '../../component/pagination/PaginationButton.vue'; |
198 | 148 |
import COMMON_UTIL from '../../../resources/js/commonUtil.ts'; |
199 |
-import OpenLayers from "../../component/OpenLayers.vue"; |
|
200 |
-import { |
|
201 |
- vworldBaseLayer, |
|
202 |
- vworldGrayLayer, |
|
203 |
- vworldMidnightLayer, |
|
204 |
- vworldHybridLayer, |
|
205 |
- vworldSatelliteLayer, |
|
206 |
-} from "../../component/OpenLayersMap.vue"; |
|
207 |
-import {baseStyles} from '../../component/OpenLayersStyle.vue'; |
|
208 |
-import dongSelectList from '../../component/dongSelectList.vue'; |
|
209 |
-import { transform } from 'ol/proj'; |
|
210 | 149 |
|
211 | 150 |
export default { |
212 | 151 |
data:() => { |
213 | 152 |
return { |
214 |
- nodeListSearch: { |
|
153 |
+ pagenation: { |
|
215 | 154 |
currentPage: 1, |
216 | 155 |
perPage: 10, |
217 | 156 |
searchType: null, |
218 |
- searchText: null |
|
157 |
+ searchValue: null, |
|
158 |
+ totalRow : 0, |
|
159 |
+ api_key : '', |
|
160 |
+ user_nm : '', |
|
161 |
+ use_yn : false, |
|
162 |
+ reg_dt : '', |
|
163 |
+ key_type : 'out' |
|
219 | 164 |
}, |
220 |
- |
|
221 | 165 |
node: { |
222 | 166 |
node_id: null, |
223 | 167 |
node_name: null, |
224 | 168 |
node_type: null, |
225 | 169 |
lat: null, |
226 |
- lon: null, |
|
227 |
- // updatedate: null, |
|
170 |
+ lon: null, |
|
228 | 171 |
dong_cd: null, |
229 | 172 |
dong_nm: null, |
230 | 173 |
sido_nm: null, |
231 | 174 |
sigungu_nm: null |
232 | 175 |
}, |
233 |
- |
|
234 | 176 |
address: {}, |
235 | 177 |
nodeListCount: 0, |
236 |
- nodeList: [], |
|
178 |
+ tokkenList: [], |
|
179 |
+ selectTokken : {}, |
|
237 | 180 |
nodeIdx: 0, |
238 | 181 |
dong_fullName: null, |
239 | 182 |
//modal |
... | ... | @@ -245,264 +188,40 @@ |
245 | 188 |
map_open: false, |
246 | 189 |
map_lat: null, |
247 | 190 |
map_lon: null, |
248 |
- |
|
191 |
+ updateMode : true, |
|
249 | 192 |
}; |
250 | 193 |
}, |
251 | 194 |
methods: { |
252 |
- |
|
253 |
- //좌표수정 지도 열기 |
|
254 |
- async openMap() { |
|
255 |
- const vm = this; |
|
256 |
- |
|
257 |
- //OpenLayers 랜더링 후 접근 |
|
258 |
- await vm.$nextTick(); |
|
259 |
- //수정 전 좌표 modal에서 보여주기 |
|
260 |
- vm.map_lat = vm.node.lat; |
|
261 |
- vm.map_lon = vm.node.lon; |
|
262 |
- //기본맵 세팅 |
|
263 |
- vm.$refs.open_layers.setBaseMap(vworldBaseLayer); |
|
264 |
- |
|
265 |
- //행정동 레이어 |
|
266 |
- //this.$refs.open_layers.addVectorLayerByUrl('/testDongGeoJson.json','testMap','EPSG:4326', baseStyles['labelStyle'],'label'); |
|
267 |
- vm.$refs.open_layers.addVectorLayerByUrl('/node/getNodeGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.node.dong_cd); |
|
268 |
- |
|
269 |
- //노드위치로 이동 |
|
270 |
- vm.$refs.open_layers.removeLayer('nodePoint'); |
|
271 |
- vm.$refs.open_layers.setCenterPosition(vm.node.lat,vm.node.lon,'EPSG:4326'); |
|
272 |
- vm.$refs.open_layers.createIcon(vm.node.lat,vm.node.lon,'/client/resources/images/icon/fin.png',0.3, 'nodePoint','EPSG:4326'); |
|
273 |
- vm.$refs.open_layers.setZoom(19); |
|
274 |
- }, |
|
275 |
- |
|
276 |
- |
|
277 |
- closeMap() { |
|
278 |
- const vm = this; |
|
279 |
- vm.$refs.open_layers.removeLayerAll(); |
|
280 |
- vm.map_open = false; |
|
281 |
- }, |
|
282 |
- |
|
283 |
- //지도 클릭 이벤트 |
|
284 |
- childClick(prop,coordinate){ |
|
285 |
- const vm = this; |
|
286 |
- console.log(prop); |
|
287 |
- console.log("coordinate",coordinate); |
|
288 |
- |
|
289 |
- // 레이어 삭제 |
|
290 |
- vm.$refs.open_layers.removeLayer('nodePoint'); |
|
291 |
- |
|
292 |
- // Icon 그리기 |
|
293 |
- vm.$refs.open_layers.createIcon(coordinate[1],coordinate[0],'/client/resources/images/icon/fin2.png',0.3, 'nodePoint','EPSG:5181'); |
|
294 |
- |
|
295 |
- //클릭위치로 이동 |
|
296 |
- // this.$refs.open_layers.setCenterPosition(coordinate[0],coordinate[1],'EPSG:5181'); |
|
297 |
- |
|
298 |
- //좌표계 변환 |
|
299 |
- var changeCoordinate = transform([coordinate[0],coordinate[1]],'EPSG:5181','EPSG:4326'); |
|
300 |
- vm.map_lat = changeCoordinate[1]; |
|
301 |
- vm.map_lon = changeCoordinate[0]; |
|
302 |
- }, |
|
303 |
- |
|
304 |
- //좌표 선택 완료 |
|
305 |
- selectCoordinate() { |
|
306 |
- const vm = this; |
|
307 |
- vm.node.lat = vm.map_lat; |
|
308 |
- vm.node.lon = vm.map_lon; |
|
309 |
- vm.map_open = false; |
|
310 |
- }, |
|
311 |
- |
|
312 |
- // 좌표수정에서 교차로 검색시 동레이어, 노드좌표 찍어주기 |
|
313 |
- // searchNode() { |
|
314 |
- // const vm = this; |
|
315 |
- // //기존 레이어 삭제 |
|
316 |
- // vm.$refs.open_layers.removeLayer('nodeMap'); |
|
317 |
- // vm.$refs.open_layers.removeLayer('nodePoint'); |
|
318 |
- // //동 레이어 그리기 |
|
319 |
- // vm.$refs.open_layers.addVectorLayerByUrl('/common/getDongGeoJson.json','nodeMap','EPSG:5181', baseStyles['MultiPolygon'],'MultiPolygon',vm.address.dong_dong_cd); |
|
320 |
- // axios({ |
|
321 |
- // url: '/node/nodeSelectOne.json', |
|
322 |
- // method: 'post', |
|
323 |
- // headers: { |
|
324 |
- // 'Content-Type': "application/json; charset=UTF-8" |
|
325 |
- // }, |
|
326 |
- // data: {'node_id' : vm.address.node_id} |
|
327 |
- // }).then(function (response) { |
|
328 |
- // console.log("searchNode response : ",response.data); |
|
329 |
- // vm.$refs.open_layers.createIcon(response.data.lat,response.data.lon,'/client/resources/images/icon/fin2.png',0.3, 'nodePoint','EPSG:4326'); |
|
330 |
- // vm.$refs.open_layers.setCenterPosition(response.data.lat,response.data.lon,'EPSG:4326'); |
|
331 |
- // vm.$refs.open_layers.zoomChange(19); |
|
332 |
- |
|
333 |
- // }).catch(function (error) { |
|
334 |
- // console.log("serchNode error : ", error); |
|
335 |
- // alert("검색에 실패 하였습니다. 관리자에게 문의하세요."); |
|
336 |
- // }) |
|
337 |
- // }, |
|
338 |
- |
|
339 |
- //노드 엑셀 업로드 |
|
340 |
- nodeExcelInsert() { |
|
341 |
- const vm = this; |
|
342 |
- var form = new FormData(); |
|
343 |
- var file = document.getElementById("fileBtn");; |
|
344 |
- console.log(file.files[0]); |
|
345 |
- form.append("file", file.files[0]); |
|
346 |
- axios({ |
|
347 |
- url: '/node/nodeExcelRead.json', |
|
348 |
- method: 'post', |
|
349 |
- hearders: { |
|
350 |
- 'Content-Type': "multipart/form-data", |
|
351 |
- }, |
|
352 |
- data: form |
|
353 |
- }).then(function (response) { |
|
354 |
- console.log("nodeExcelInsert - response : ", response.data); |
|
355 |
- let insert = response.data.insert; |
|
356 |
- let error = response.data.error; |
|
357 |
- if (insert > 0 && error > 0) { |
|
358 |
- alert(insert + "건의 노드 등록완료, " + error + "건은 이미 ID가 존재하는 데이터 입니다.") |
|
359 |
- vm.nodeSelectList(); |
|
360 |
- } else if(insert === 0) { |
|
361 |
- alert("업로드 파일의 모든 데이터(" + error + "건)는 이미 ID가 존재하는 데이터 입니다.") |
|
362 |
- vm.nodeSelectList(); |
|
363 |
- } else if(insert > 0 && error === 0) { |
|
364 |
- alert(insert + "건의 노드 등록완료.") |
|
365 |
- vm.nodeSelectList(); |
|
366 |
- } |
|
367 |
- }).catch(function (error) { |
|
368 |
- console.log("nodeExcelInsert - error", error); |
|
369 |
- alert("파일 등록 오류, 관리자에게 문의해주세요.") |
|
370 |
- }) |
|
371 |
- }, |
|
372 |
- |
|
195 |
+ |
|
373 | 196 |
//노드목록 조회 |
374 |
- nodeSelectList() { |
|
197 |
+ selectTokkenList() { |
|
375 | 198 |
const vm = this; |
199 |
+ |
|
200 |
+ console.log(vm.pagenation) |
|
376 | 201 |
axios({ |
377 |
- url: '/node/nodeSelectList.json', |
|
378 |
- method: 'post', |
|
202 |
+ url: '/getApiKeyList.json', |
|
203 |
+ method: 'post', |
|
379 | 204 |
headers: { |
380 | 205 |
'Content-Type': "application/json; charset=UTF-8", |
381 | 206 |
}, |
382 |
- data: vm.nodeListSearch |
|
383 |
- }).then(function (response) { |
|
207 |
+ data: vm.pagenation |
|
208 |
+ }).then(function (response) { |
|
384 | 209 |
console.log("nodeSelectList - response : ", response.data); |
385 |
- vm.nodeListCount = response.data.nodeListCount; |
|
386 |
- vm.nodeList = response.data.nodeList; |
|
387 |
- vm.nodeIdx = vm.nodeListCount-(vm.nodeListSearch.currentPage-1)*vm.nodeList.length; |
|
210 |
+ vm.pagenation = response.data.pagenation; |
|
211 |
+ vm.tokkenList = response.data.tokkenList; |
|
212 |
+ // vm.nodeIdx = vm.nodeListCount-(vm.nodeListSearch.currentPage-1)*vm.nodeList.length; |
|
388 | 213 |
}).catch(function (error) { |
389 | 214 |
console.log("nodeSelectList - error : ", error); |
390 | 215 |
alert("노드 목록 조회 오류, 관리자에게 문의해주세요."); |
391 | 216 |
}); |
392 | 217 |
}, |
393 | 218 |
|
394 |
- //노드 수정 |
|
395 |
- nodeUpdate() { |
|
396 |
- const vm = this; |
|
397 |
- if(vm.address.dong_dong_cd != null) { |
|
398 |
- vm.node.dong_cd = vm.address.dong_dong_cd |
|
399 |
- }; |
|
400 |
- axios({ |
|
401 |
- url: '/node/nodeUpdate.json', |
|
402 |
- method: 'post', |
|
403 |
- headers: { |
|
404 |
- 'Content-Type': "application/json; charset=UTF-8" |
|
405 |
- }, |
|
406 |
- data: vm.node |
|
407 |
- }).then(function (response) { |
|
408 |
- console.log("nodeUpdate - response : ", response.data); |
|
409 |
- let result = response.data; |
|
410 |
- if( result > 0) { |
|
411 |
- alert("노드 수정을 완료 하였습니다."); |
|
412 |
- vm.modal_update = false; |
|
413 |
- vm.nodeSelectList(); |
|
414 |
- vm.node = { |
|
415 |
- node_id: null, |
|
416 |
- node_name: null, |
|
417 |
- node_type: null, |
|
418 |
- lat: null, |
|
419 |
- lon: null, |
|
420 |
- // updatedate: null, |
|
421 |
- dong_cd: null, |
|
422 |
- dong_nm: null, |
|
423 |
- sido_nm: null, |
|
424 |
- sigungu_nm: null |
|
425 |
- }; |
|
426 |
- vm.dong_fullName = null; |
|
427 |
- vm.id_disabled = false; |
|
428 |
- } else { |
|
429 |
- alert("수정 실패, 관리자에게 문의해주세요."); |
|
430 |
- vm.modal_update = false; |
|
431 |
- } |
|
432 |
- }).catch( function (error) { |
|
433 |
- console.log("nodeUpdate - error : ", error); |
|
434 |
- alert("노드수정 오류, 관리자에게 문의해주세요."); |
|
435 |
- vm.modal_update = false; |
|
436 |
- }) |
|
437 |
- }, |
|
438 |
- |
|
439 |
- //노드 삭제 |
|
440 |
- nodeDelete() { |
|
441 |
- const vm = this; |
|
442 |
- axios({ |
|
443 |
- url: '/node/nodeDelete.json', |
|
444 |
- method: 'post', |
|
445 |
- headers: { |
|
446 |
- 'Content-Type': "application/json; charset=UTF-8" |
|
447 |
- }, |
|
448 |
- data: vm.node |
|
449 |
- }).then( function (response) { |
|
450 |
- console.log("nodeDelete - response : ", response.data); |
|
451 |
- let result = response.data; |
|
452 |
- if( result > 0) { |
|
453 |
- alert("노드 삭제를 완료 하였습니다."); |
|
454 |
- vm.modal_delete = false; |
|
455 |
- vm.nodeSelectList(); |
|
456 |
- vm.node = { |
|
457 |
- node_id: null, |
|
458 |
- node_name: null, |
|
459 |
- node_type: null, |
|
460 |
- lat: null, |
|
461 |
- lon: null, |
|
462 |
- // updatedate: null, |
|
463 |
- dong_cd: null, |
|
464 |
- dong_nm: null, |
|
465 |
- sido_nm: null, |
|
466 |
- sigungu_nm: null |
|
467 |
- }; |
|
468 |
- vm.dong_fullName = null; |
|
469 |
- } else { |
|
470 |
- alert("삭제 실패, 관리자에게 문의해주세요."); |
|
471 |
- vm.modal_delete = false; |
|
472 |
- } |
|
473 |
- }).catch( function (error) { |
|
474 |
- console.log("nodeDelete - error : ", error); |
|
475 |
- alert("노드삭제 오류, 관리자에게 문의해주세요."); |
|
476 |
- vm.modal_delete = false; |
|
477 |
- }) |
|
478 |
- }, |
|
479 |
- |
|
480 | 219 |
//노드 상세 조회 |
481 | 220 |
nodeSelectOne(nodeOne) { |
482 | 221 |
const vm = this; |
483 |
- axios({ |
|
484 |
- url: '/node/nodeSelectOne.json', |
|
485 |
- method: 'post', |
|
486 |
- headers: { |
|
487 |
- 'Content-Type': "application/json; charset=UTF-8" |
|
488 |
- }, |
|
489 |
- data: nodeOne |
|
490 |
- }).then(function(response) { |
|
491 |
- console.log("nodeSelectOne - response : ", response.data); |
|
492 |
- vm.node = response.data; |
|
493 |
- vm.map_disabled = false; |
|
494 |
- vm.dong_fullName = response.data.sido_nm + " " + response.data.sigungu_nm + " " + response.data.dong_nm; |
|
495 |
- }).catch(function(error) { |
|
496 |
- console.log("nodeSelectOne - error : ", error); |
|
497 |
- }); |
|
222 |
+ this.selectTokken = Object.assign({}, nodeOne); |
|
498 | 223 |
}, |
499 |
- |
|
500 |
- //dongSelectList 컴포넌트에서 선택된 dong_cd 셋팅 |
|
501 |
- setDongCd(value) { |
|
502 |
- console.log("value : ", value); |
|
503 |
- this.address = value; |
|
504 |
- }, |
|
505 |
- |
|
224 |
+ |
|
506 | 225 |
//날짜에 '-' 넣기 |
507 | 226 |
dateHyphen(date) { |
508 | 227 |
return COMMON_UTIL.dateHyphen(date); |
... | ... | @@ -510,18 +229,69 @@ |
510 | 229 |
|
511 | 230 |
nodeInsertPage() { |
512 | 231 |
this.$router.push({ path: '/NodeAddForm.page'}) |
232 |
+ }, |
|
233 |
+ |
|
234 |
+ createTokken() { |
|
235 |
+ this.updateMode = false; |
|
236 |
+ this.selectTokken = {}; |
|
237 |
+ this.selectTokken.api_key = '자동생성'; |
|
238 |
+ this.selectTokken.reg_dt = '자동생성'; |
|
239 |
+ this.selectTokken.use_yn = true; |
|
240 |
+ this.selectTokken.key_type = 'OUT'; |
|
241 |
+ // this.$router.push({ path: '/NodeAddForm.page'}) |
|
242 |
+ }, |
|
243 |
+ |
|
244 |
+ // 수정 모드 끄시 |
|
245 |
+ updateCancle() { |
|
246 |
+ this.updateMode = true; |
|
247 |
+ |
|
248 |
+ }, |
|
249 |
+ |
|
250 |
+ // 데이터 저장 |
|
251 |
+ updateKey() { |
|
252 |
+ const vm = this; |
|
253 |
+ |
|
254 |
+ console.log(this.pagenation); |
|
255 |
+ console.log(this.selectTokken); |
|
256 |
+ |
|
257 |
+ // 사용자명 유효성 검사 |
|
258 |
+ if(this.selectTokken.user_nm.length < 3 ){ |
|
259 |
+ alert('사용자명은 최소 2글자 이상이여야 합니다.'); |
|
260 |
+ } |
|
261 |
+ |
|
262 |
+ axios({ |
|
263 |
+ url: '/setApiKeyData.json', |
|
264 |
+ method: 'post', |
|
265 |
+ headers: { |
|
266 |
+ 'Content-Type': "application/json; charset=UTF-8" |
|
267 |
+ }, |
|
268 |
+ data: vm.selectTokken |
|
269 |
+ }).then(function (response) { |
|
270 |
+ console.log("nodeUpdate - response : ", response.data); |
|
271 |
+ let result = response.data; |
|
272 |
+ vm.selectTokkenList(); |
|
273 |
+ alert(response.data.message); |
|
274 |
+ }).catch( function (error) { |
|
275 |
+ console.log("nodeUpdate - error : ", error); |
|
276 |
+ alert("API 토큰 등록 오류, 관리자에게 문의해주세요."); |
|
277 |
+ vm.modal_update = false; |
|
278 |
+ }) |
|
279 |
+ |
|
280 |
+ |
|
281 |
+ |
|
513 | 282 |
} |
514 | 283 |
}, |
284 |
+ |
|
285 |
+ |
|
515 | 286 |
watch: {}, |
516 | 287 |
computed: {}, |
517 | 288 |
components: { |
518 |
- PaginationButton:PaginationButton, |
|
519 |
- OpenLayers: OpenLayers, |
|
520 |
- dongSelectList: dongSelectList |
|
289 |
+ PaginationButton:PaginationButton, |
|
521 | 290 |
}, |
522 |
- mounted() { |
|
523 |
- console.log("Main4 mounted"); |
|
524 |
- this.nodeSelectList(); |
|
291 |
+ mounted() { |
|
292 |
+ let vm = this; |
|
293 |
+ this.selectTokkenList(); |
|
294 |
+ |
|
525 | 295 |
}, |
526 | 296 |
}; |
527 | 297 |
</script> |
... | ... | @@ -530,6 +300,11 @@ |
530 | 300 |
.wrap { |
531 | 301 |
width: 155rem; |
532 | 302 |
margin: 100px auto; |
303 |
+} |
|
304 |
+ |
|
305 |
+.select_row{ |
|
306 |
+ background: #cd7d09 !important; |
|
307 |
+ color: white; |
|
533 | 308 |
} |
534 | 309 |
|
535 | 310 |
.search-wrap { |
... | ... | @@ -578,8 +353,10 @@ |
578 | 353 |
} |
579 | 354 |
|
580 | 355 |
.btn-2 { |
581 |
- display: inline-block; |
|
582 |
- padding: 0.3rem 2rem; |
|
356 |
+ display: inline-block; |
|
357 |
+ padding: 5px; |
|
358 |
+ width: 75px; |
|
359 |
+ height: 100%; |
|
583 | 360 |
font-size: 13.333px; |
584 | 361 |
} |
585 | 362 |
|
... | ... | @@ -608,7 +385,16 @@ |
608 | 385 |
border-left: none; |
609 | 386 |
border-right: none; |
610 | 387 |
} |
611 |
-td input{width: -webkit-fill-available;} |
|
388 |
+td input{width: -webkit-fill-available; |
|
389 |
+ width: 100%; |
|
390 |
+ padding: 5px; |
|
391 |
+} |
|
392 |
+ |
|
393 |
+td select{width: -webkit-fill-available; |
|
394 |
+ width: 100%; |
|
395 |
+ padding: 5px; |
|
396 |
+} |
|
397 |
+ |
|
612 | 398 |
table th { |
613 | 399 |
padding: 15px; |
614 | 400 |
color: #fff; |
... | ... | @@ -666,8 +452,6 @@ |
666 | 452 |
.btn-wrap>*:not(:last-child) { |
667 | 453 |
margin-right: 15px; |
668 | 454 |
} |
669 |
- |
|
670 |
- |
|
671 | 455 |
|
672 | 456 |
.modal-bg { |
673 | 457 |
position: absolute; |
--- client/views/pages/main/Login.vue
+++ client/views/pages/main/Login.vue
... | ... | @@ -15,8 +15,6 @@ |
15 | 15 |
<label for="password">비밀번호</label> |
16 | 16 |
<input type="password" name="" id="" ref="user_pw" placeholder="Password" v-model="userLogin.user_pw" @keyup.enter="login"> |
17 | 17 |
</div> |
18 |
- |
|
19 |
- |
|
20 | 18 |
<div class="btn-wrap"> |
21 | 19 |
<button type="button" class="green-btn btn-l loginbtn" @click="login">로그인</button> |
22 | 20 |
<router-link to="/IdFind.page"> <span class="">아이디 찾기</span></router-link> |
... | ... | @@ -24,9 +22,7 @@ |
24 | 22 |
</form> |
25 | 23 |
</div> |
26 | 24 |
</div> |
27 |
- </div> |
|
28 |
- |
|
29 |
- |
|
25 |
+ </div> |
|
30 | 26 |
</template> |
31 | 27 |
|
32 | 28 |
<script> |
--- client/views/pages/main/Main.jsx
... | ... | @@ -1,16 +0,0 @@ |
1 | -import React from 'react'; | |
2 | - | |
3 | -import TestCompoent from '../../component/test/TestCompoent.jsx'; | |
4 | - | |
5 | -function Main () { | |
6 | - return ( | |
7 | - <> | |
8 | - <div> | |
9 | - 메인 페이지 입니다. | |
10 | - <TestCompoent/> | |
11 | - </div> | |
12 | - </> | |
13 | - ) | |
14 | -} | |
15 | - | |
16 | -export default Main;(No newline at end of file) |
--- package-lock.json
+++ package-lock.json
... | ... | @@ -1,5 +1,5 @@ |
1 | 1 |
{ |
2 |
- "name": "crosswalk", |
|
2 |
+ "name": "crosswalk_trans_manage", |
|
3 | 3 |
"lockfileVersion": 2, |
4 | 4 |
"requires": true, |
5 | 5 |
"packages": { |
--- server/modules/web/Server.js
+++ server/modules/web/Server.js
... | ... | @@ -78,7 +78,7 @@ |
78 | 78 |
*/ |
79 | 79 |
webServer.use('*.json', expressProxy(API_SERVER_HOST, { |
80 | 80 |
proxyReqPathResolver: function (request) { |
81 |
- //console.log('request : ', request.url, request.params[0]); |
|
81 |
+ console.log('request : ', request.url, request.params[0]); |
|
82 | 82 |
return `${request.params['0']}.json`; |
83 | 83 |
} |
84 | 84 |
})); |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?