

Merge branch 'master' of http://210.180.118.83/jhpark/cms_frontend
@4c123060a603aa8610fc5694863942d99bb6e3f0
--- client/resources/js/defaultDateParams.js
+++ client/resources/js/defaultDateParams.js
... | ... | @@ -36,26 +36,67 @@ |
36 | 36 |
}, |
37 | 37 |
|
38 | 38 |
// 조회기간 유효성 검사 |
39 |
+ // validateDate(event, cate) { |
|
40 |
+ // const val = event.target.value; // 변경된 날짜 값 |
|
41 |
+ // // 시작일 변경 시 |
|
42 |
+ // if (cate === "startDt") { |
|
43 |
+ // if (this.searchDate.endDt !== null && this.searchDate.endDt < val) { |
|
44 |
+ // alert("시작일은 종료일보다 클 수 없습니다."); |
|
45 |
+ // this.searchDate.startDt = null; // 유효하지 않은 경우, 시작일을 초기화 |
|
46 |
+ // } else { |
|
47 |
+ // this.searchDate.startDt = val; |
|
48 |
+ // } |
|
49 |
+ // } |
|
50 |
+ // // 종료일 변경 시 |
|
51 |
+ // else if (cate === "endDt") { |
|
52 |
+ // if (this.searchDate.startDt !== null && this.searchDate.startDt > val) { |
|
53 |
+ // alert("종료일은 시작일보다 작을 수 없습니다."); |
|
54 |
+ // this.searchDate.endDt = null; // 유효하지 않은 경우, 종료일을 초기화 |
|
55 |
+ // } else { |
|
56 |
+ // this.searchDate.endDt = val; |
|
57 |
+ // } |
|
58 |
+ // } |
|
59 |
+ // }, |
|
60 |
+ |
|
39 | 61 |
validateDate(event, cate) { |
40 |
- const val = event.target.value; // 변경된 날짜 값 |
|
41 |
- // 시작일 변경 시 |
|
62 |
+ let val; |
|
63 |
+ |
|
64 |
+ // 값이 Date 객체인지 확인 |
|
65 |
+ if (event instanceof Date) { |
|
66 |
+ const year = event.getFullYear(); |
|
67 |
+ const month = ('00' + (event.getMonth() + 1)).slice(-2); |
|
68 |
+ const day = ('00' + event.getDate()).slice(-2); |
|
69 |
+ |
|
70 |
+ val = `${year}-${month}-${day}`; |
|
71 |
+ } |
|
72 |
+ // 값이 Event 객체인지 확인 |
|
73 |
+ else if (event instanceof Event) { |
|
74 |
+ val = event.target.value; // input에서 직접 입력된 값 |
|
75 |
+ } |
|
76 |
+ // 그 외의 경우 처리 불필요 (예외 처리) |
|
77 |
+ else { |
|
78 |
+ console.error("Invalid date input:", event); |
|
79 |
+ return; |
|
80 |
+ } |
|
81 |
+ |
|
82 |
+ // 시작일 검증 |
|
42 | 83 |
if (cate === "startDt") { |
43 |
- if (this.searchDate.endDt !== null && this.searchDate.endDt < val) { |
|
84 |
+ if (this.searchDate.endDt && this.searchDate.endDt < val) { |
|
44 | 85 |
alert("시작일은 종료일보다 클 수 없습니다."); |
45 |
- this.searchDate.startDt = null; // 유효하지 않은 경우, 시작일을 초기화 |
|
86 |
+ this.searchDate.startDt = null; |
|
46 | 87 |
} else { |
47 | 88 |
this.searchDate.startDt = val; |
48 | 89 |
} |
49 | 90 |
} |
50 |
- // 종료일 변경 시 |
|
91 |
+ // 종료일 검증 |
|
51 | 92 |
else if (cate === "endDt") { |
52 |
- if (this.searchDate.startDt !== null && this.searchDate.startDt > val) { |
|
93 |
+ if (this.searchDate.startDt && this.searchDate.startDt > val) { |
|
53 | 94 |
alert("종료일은 시작일보다 작을 수 없습니다."); |
54 |
- this.searchDate.endDt = null; // 유효하지 않은 경우, 종료일을 초기화 |
|
95 |
+ this.searchDate.endDt = null; |
|
55 | 96 |
} else { |
56 | 97 |
this.searchDate.endDt = val; |
57 | 98 |
} |
58 | 99 |
} |
59 |
- }, |
|
100 |
+ } |
|
60 | 101 |
} |
61 | 102 |
}(No newline at end of file) |
--- client/resources/scss/admin/content.scss
+++ client/resources/scss/admin/content.scss
... | ... | @@ -112,7 +112,12 @@ |
112 | 112 |
|
113 | 113 |
|
114 | 114 |
.form-select { |
115 |
- width: 200px; |
|
115 |
+ min-width: 135px; |
|
116 |
+ max-width: 300px; |
|
117 |
+ |
|
118 |
+ &.fixed{ |
|
119 |
+ width: 135px; |
|
120 |
+ } |
|
116 | 121 |
} |
117 | 122 |
|
118 | 123 |
.form-control { |
... | ... | @@ -347,7 +352,7 @@ |
347 | 352 |
} |
348 | 353 |
|
349 | 354 |
.tbl-wrap{ |
350 |
- height: 100%; |
|
355 |
+ // height: 100%; |
|
351 | 356 |
|
352 | 357 |
&.overflow-y{ |
353 | 358 |
overflow-y: auto; |
... | ... | @@ -362,3 +367,36 @@ |
362 | 367 |
border-right:0; |
363 | 368 |
} |
364 | 369 |
} |
370 |
+ |
|
371 |
+.mb30{ |
|
372 |
+ margin-bottom: 3rem; |
|
373 |
+} |
|
374 |
+ |
|
375 |
+.dp__main{ |
|
376 |
+ height: 100%; |
|
377 |
+ >div:first-child{ |
|
378 |
+ height: 100%; |
|
379 |
+ *{ |
|
380 |
+ height: 100%; |
|
381 |
+ } |
|
382 |
+ .dp__input{ |
|
383 |
+ width: 100%; |
|
384 |
+ border: none; |
|
385 |
+ background-color: transparent; |
|
386 |
+ transition: none; |
|
387 |
+ line-height: 100%; |
|
388 |
+ padding: 0; |
|
389 |
+ font-size: 1.5rem; |
|
390 |
+ } |
|
391 |
+ .dp__icon{ |
|
392 |
+ display: none; |
|
393 |
+ } |
|
394 |
+ |
|
395 |
+ } |
|
396 |
+ |
|
397 |
+ .dp__menu, |
|
398 |
+ .dp__selection_preview, |
|
399 |
+ .dp__action_button{ |
|
400 |
+ font-size: 1.5rem; |
|
401 |
+ } |
|
402 |
+}(No newline at end of file) |
--- client/views/component/userInfo/UserInfoInsert.vue
+++ client/views/component/userInfo/UserInfoInsert.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>{{pageTit}}</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
... | ... | @@ -306,7 +306,7 @@ |
306 | 306 |
defaultUserInfoParams, |
307 | 307 |
} from "../../../resources/js/defaultUserInfoParams"; |
308 | 308 |
import validateParams from "../../../resources/js/validateParams"; |
309 |
-import PagiNavigationBar from "../paginavigationbar/PagiNavigationBar.vue"; |
|
309 |
+ |
|
310 | 310 |
|
311 | 311 |
// COMPONENT |
312 | 312 |
import UserAuthorList from "./UserAuthorList.vue"; |
... | ... | @@ -320,7 +320,7 @@ |
320 | 320 |
|
321 | 321 |
export default { |
322 | 322 |
mixins: [validateParams], |
323 |
- components: { UserAuthorList,PagiNavigationBar }, |
|
323 |
+ components: { UserAuthorList }, |
|
324 | 324 |
props: { |
325 | 325 |
pageId: { |
326 | 326 |
type: String, |
--- client/views/component/userInfo/UserInfoView.vue
+++ client/views/component/userInfo/UserInfoView.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>{{pageTit}}</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
... | ... | @@ -263,14 +263,14 @@ |
263 | 263 |
|
264 | 264 |
// COMPONENT |
265 | 265 |
import UserAuthorList from "./UserAuthorList.vue"; |
266 |
-import PagiNavigationBar from "../paginavigationbar/PagiNavigationBar.vue"; |
|
266 |
+ |
|
267 | 267 |
|
268 | 268 |
// API |
269 | 269 |
import { mbrDetailProc } from "../../../resources/api/mbrInfo"; |
270 | 270 |
import { mbrDeleteProc } from "../../../resources/api/mbrInfo"; |
271 | 271 |
|
272 | 272 |
export default { |
273 |
- components: { UserAuthorList,PagiNavigationBar }, |
|
273 |
+ components: { UserAuthorList }, |
|
274 | 274 |
props: { |
275 | 275 |
pageId: { |
276 | 276 |
type: String, |
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementInsert.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementInsert.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>게시판 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>게시판 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="search-bar "> |
12 | 12 |
<select name="selectType" id="selectType" class="form-select sm" v-model="search.searchType"> |
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectListOne.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectListOne.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>게시판 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="form-box mb30"> |
12 | 12 |
<div class="form-box-title"> |
--- client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
+++ client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>금지어 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="search-bar"> |
12 | 12 |
<select class="form-select sm"> |
... | ... | @@ -44,18 +44,12 @@ |
44 | 44 |
<div class="modal-title"> |
45 | 45 |
<p>금지어 추가</p> |
46 | 46 |
</div> |
47 |
- <button class="close-btn" @click="modalClose">X</button> |
|
47 |
+ <button class="btn-close" @click="fnModalClose"></button> |
|
48 | 48 |
</template> |
49 |
- <div class="search mb30"> |
|
50 |
- <div class="flex justify-start align-center"> |
|
51 |
- <div class="gd-10 pl0"> |
|
52 |
- <input type="text" class="full-input" placeholder="추가할 금지어를 입력해주세요." v-model="inputWordNm" |
|
53 |
- @keyup.enter="addinputWord" /> |
|
54 |
- </div> |
|
55 |
- <div class="gd-2 pl0 pr0"> |
|
56 |
- <button class="large-btn blue-border-btn" @click="addinputWord">추가</button> |
|
57 |
- </div> |
|
58 |
- </div> |
|
49 |
+ <div class="search-bar"> |
|
50 |
+ <input type="text" class="form-control sm" placeholder="추가할 금지어를 입력해주세요." v-model="inputWordNm" |
|
51 |
+ @keyup.enter="addinputWord" /> |
|
52 |
+ <button class="btn sm ico-befor ico-plus" @click="addinputWord">추가</button> |
|
59 | 53 |
</div> |
60 | 54 |
<ul style="height:calc(100% - 118px)" class="overflow-y"> |
61 | 55 |
<li v-for="(item, index) in wordsArr" class="word-item pd10 border radius mb5" :key="index"> |
... | ... | @@ -64,8 +58,8 @@ |
64 | 58 |
</li> |
65 | 59 |
</ul> |
66 | 60 |
<template v-slot:footer> |
67 |
- <button class="large-btn darkg-border-btn ml0" @click="modalClose">취소</button> |
|
68 |
- <button class="large-btn blue-btn ml0" @click="fnSave">등록</button> |
|
61 |
+ <button class="btn sm tertiary" @click="modalClose">취소</button> |
|
62 |
+ <button class="btn sm primary" @click="fnSave">등록</button> |
|
69 | 63 |
</template> |
70 | 64 |
</Modal> |
71 | 65 |
</template> |
--- client/views/pages/adm/departmentManagement/DepartmentManagement.vue
+++ client/views/pages/adm/departmentManagement/DepartmentManagement.vue
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 |
<div class="page-title"> |
6 | 6 |
<p>부서관리</p> |
7 | 7 |
</div> |
8 |
- <PagiNavigationBar /> |
|
8 |
+ |
|
9 | 9 |
</div> |
10 | 10 |
<div class="setting-box"> |
11 | 11 |
<div class="node-zone"> |
--- client/views/pages/adm/log/LoginLog.vue
+++ client/views/pages/adm/log/LoginLog.vue
... | ... | @@ -1,80 +1,81 @@ |
1 | 1 |
<template> |
2 |
- <div class="content"> |
|
3 |
- <div class="admin-page-title point-font2 mb30"> |
|
4 |
- <p>로그인 이력</p> |
|
5 |
- </div> |
|
6 |
- <div class="search-bar mb15"> |
|
7 |
- <div class="flex justify-end align-center no-gutters"> |
|
8 |
- <div class="gd-3 flex justify-end align-center"> |
|
9 |
- <div class="gd-5 pl0"> |
|
2 |
+ <div class="content-zone"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="title-zone"> |
|
6 |
+ <div class="page-title"> |
|
7 |
+ <p>로그인 이력</p> |
|
8 |
+ </div> |
|
9 |
+ |
|
10 |
+ </div> |
|
11 |
+ <div class="search-bar"> |
|
12 |
+ <div class="form-control sm cal"> |
|
10 | 13 |
<VueDatePicker |
11 |
- time-picker-inline |
|
14 |
+ InlineOptions |
|
12 | 15 |
placeholder="시작일" |
13 | 16 |
locale="ko" |
17 |
+ :enable-time-picker="false" |
|
18 |
+ :format="formatDate" |
|
14 | 19 |
v-model="search['startDt']" |
15 | 20 |
/> |
16 | 21 |
</div> |
17 |
- <div class="pd10">-</div> |
|
18 |
- <div class="gd-5"> |
|
19 |
- <VueDatePicker |
|
20 |
- time-picker-inline |
|
22 |
+ <div class="mark">-</div> |
|
23 |
+ <div class="form-control sm cal"> |
|
24 |
+ <VueDatePicker |
|
25 |
+ InlineOptions |
|
21 | 26 |
placeholder="종료일" |
22 | 27 |
locale="ko" |
28 |
+ :enable-time-picker="false" |
|
29 |
+ :format="formatDate" |
|
23 | 30 |
v-model="search['endDt']" |
24 | 31 |
/> |
25 | 32 |
</div> |
26 |
- </div> |
|
27 |
- <div class="gd-4 mr10"> |
|
28 |
- <div class="border"> |
|
29 |
- <select |
|
30 |
- name="selectType" |
|
31 |
- id="selectType" |
|
32 |
- class="border-none gd-2" |
|
33 |
- v-model="search['searchType']" |
|
33 |
+ <select |
|
34 |
+ name="selectType" |
|
35 |
+ id="selectType" |
|
36 |
+ class="form-select sm" |
|
37 |
+ v-model="search['searchType']" |
|
38 |
+ > |
|
39 |
+ <option value="">전체</option> |
|
40 |
+ <option |
|
41 |
+ v-for="(item, idx) in codeList" |
|
42 |
+ :key="idx" |
|
43 |
+ :value="item.cd" |
|
34 | 44 |
> |
35 |
- <option value="">전체</option> |
|
36 |
- <option |
|
37 |
- v-for="(item, idx) in codeList" |
|
38 |
- :key="idx" |
|
39 |
- :value="item.cd" |
|
40 |
- > |
|
41 |
- {{ item.cdNm }} |
|
42 |
- </option> |
|
43 |
- </select> |
|
44 |
- <input |
|
45 |
- type="text" |
|
46 |
- class="full-input border-none gd-10 condition-input" |
|
47 |
- v-model="search['searchText']" |
|
48 |
- v-on:keyup.enter="fnViewList" |
|
49 |
- placeholder="검색명을 입력하세요" |
|
50 |
- /> |
|
51 |
- </div> |
|
52 |
- </div> |
|
53 |
- <div class="gd-1"> |
|
54 |
- <button class="large-btn blue-border-btn" @click="fnViewList"> |
|
45 |
+ {{ item.cdNm }} |
|
46 |
+ </option> |
|
47 |
+ </select> |
|
48 |
+ <input |
|
49 |
+ type="text" |
|
50 |
+ class="form-control sm" |
|
51 |
+ v-model="search['searchText']" |
|
52 |
+ v-on:keyup.enter="fnViewList" |
|
53 |
+ placeholder="검색명을 입력하세요" |
|
54 |
+ /> |
|
55 |
+ <button class="btn sm ico-before ico-sch" @click="fnViewList"> |
|
55 | 56 |
검색 |
56 | 57 |
</button> |
57 | 58 |
</div> |
59 |
+ <div class="tbl-wrap"> |
|
60 |
+ <ListTable |
|
61 |
+ :colgroup="colgroup" |
|
62 |
+ :thead="thead" |
|
63 |
+ :tbody="tbody" |
|
64 |
+ :className="'data'" |
|
65 |
+ /> |
|
66 |
+ </div> |
|
58 | 67 |
</div> |
59 | 68 |
</div> |
60 |
- <div class="table-zone"> |
|
61 |
- <ListTable |
|
62 |
- :colgroup="colgroup" |
|
63 |
- :thead="thead" |
|
64 |
- :tbody="tbody" |
|
65 |
- :className="'admin-list'" |
|
66 |
- /> |
|
67 |
- </div> |
|
68 |
- <div class="flex justify-center align-center no-gutters"> |
|
69 |
- <div class="gd-10"> |
|
70 |
- <PaginationButton |
|
71 |
- :className="'admin-pagination'" |
|
72 |
- v-model:currentPage="search['currentPage']" |
|
73 |
- :pagination="search" |
|
74 |
- :click="fnViewList" |
|
75 |
- /> |
|
76 |
- </div> |
|
77 |
- </div> |
|
69 |
+ </div> |
|
70 |
+ <div class="btn-wrap list"> |
|
71 |
+ <div></div> |
|
72 |
+ <PaginationButton |
|
73 |
+ :className="'admin-pagination'" |
|
74 |
+ v-model:currentPage="search['currentPage']" |
|
75 |
+ :pagination="search" |
|
76 |
+ :click="fnViewList" |
|
77 |
+ /> |
|
78 |
+ <div></div> |
|
78 | 79 |
</div> |
79 | 80 |
</template> |
80 | 81 |
|
... | ... | @@ -171,6 +172,15 @@ |
171 | 172 |
} |
172 | 173 |
}, |
173 | 174 |
//─────axios─────┘ |
175 |
+ |
|
176 |
+ // 날짜포맷 |
|
177 |
+ formatDate(date) { |
|
178 |
+ const year = date.getFullYear(); |
|
179 |
+ const month = ('00' + (date.getMonth() + 1)).slice(-2); |
|
180 |
+ const day = ('00' + date.getDate()).slice(-2); |
|
181 |
+ return `${year}-${month}-${day}`; |
|
182 |
+ } |
|
183 |
+ |
|
174 | 184 |
}, |
175 | 185 |
}; |
176 | 186 |
</script> |
--- client/views/pages/adm/log/PersonalDataLog.vue
+++ client/views/pages/adm/log/PersonalDataLog.vue
... | ... | @@ -1,35 +1,34 @@ |
1 | 1 |
<template> |
2 |
- <div class="content"> |
|
2 |
+ <div class="content-zone"> |
|
3 | 3 |
<div class="admin-page-title point-font2 mb30"> |
4 | 4 |
<p>개인정보 조회 이력</p> |
5 | 5 |
</div> |
6 |
- <div class="search-bar mb15"> |
|
7 |
- <div class="flex justify-end align-center no-gutters"> |
|
8 |
- <div class="gd-3 flex justify-end align-center"> |
|
9 |
- <div class="gd-5 pl0"> |
|
10 |
- <VueDatePicker |
|
11 |
- time-picker-inline |
|
12 |
- placeholder="시작일" |
|
13 |
- locale="ko" |
|
14 |
- v-model="search['startDt']" |
|
6 |
+ <div class="search-bar"> |
|
7 |
+ <div class="form-control sm cal"> |
|
8 |
+ <VueDatePicker |
|
9 |
+ InlineOptions |
|
10 |
+ placeholder="시작일" |
|
11 |
+ locale="ko" |
|
12 |
+ :enable-time-picker="false" |
|
13 |
+ :format="formatDate" |
|
14 |
+ v-model="search['startDt']" |
|
15 | 15 |
/> |
16 |
- </div> |
|
17 |
- <div class="pd10">-</div> |
|
18 |
- <div class="gd-5"> |
|
19 |
- <VueDatePicker |
|
20 |
- time-picker-inline |
|
21 |
- placeholder="종료일" |
|
22 |
- locale="ko" |
|
23 |
- v-model="search['endDt']" |
|
24 |
- /> |
|
25 |
- </div> |
|
26 |
- </div> |
|
27 |
- <div class="gd-4 mr10"> |
|
28 |
- <div class="border"> |
|
16 |
+ </div> |
|
17 |
+ <div class="mark">-</div> |
|
18 |
+ <div class="form-control sm cal"> |
|
19 |
+ <VueDatePicker |
|
20 |
+ InlineOptions |
|
21 |
+ placeholder="종료일" |
|
22 |
+ locale="ko" |
|
23 |
+ :enable-time-picker="false" |
|
24 |
+ :format="formatDate" |
|
25 |
+ v-model="search['endDt']" |
|
26 |
+ /> |
|
27 |
+ </div> |
|
29 | 28 |
<select |
30 | 29 |
name="selectType" |
31 | 30 |
id="selectType" |
32 |
- class="border-none gd-2" |
|
31 |
+ class="form-select sm" |
|
33 | 32 |
v-model="search['searchType']" |
34 | 33 |
> |
35 | 34 |
<option value="">전체</option> |
... | ... | @@ -43,53 +42,52 @@ |
43 | 42 |
</select> |
44 | 43 |
<input |
45 | 44 |
type="text" |
46 |
- class="full-input border-none gd-10 condition-input" |
|
45 |
+ class="form-control sm" |
|
47 | 46 |
v-model="search['searchText']" |
48 | 47 |
v-on:keyup.enter="fnViewList" |
49 | 48 |
placeholder="검색명을 입력하세요" |
50 | 49 |
/> |
51 |
- </div> |
|
52 |
- </div> |
|
53 |
- <div class="gd-1"> |
|
54 | 50 |
<button class="large-btn blue-border-btn" @click="fnViewList"> |
55 | 51 |
검색 |
56 | 52 |
</button> |
57 |
- </div> |
|
58 |
- </div> |
|
59 | 53 |
</div> |
60 |
- <div class="table-zone"> |
|
54 |
+ <div class="tbl-wrap"> |
|
61 | 55 |
<ListTable |
62 | 56 |
:colgroup="colgroup" |
63 | 57 |
:thead="thead" |
64 | 58 |
:tbody="tbody" |
65 |
- :className="'admin-list'" |
|
59 |
+ :className="'data cursor'" |
|
66 | 60 |
@listClick="fnViewDetail" |
67 | 61 |
/> |
68 | 62 |
</div> |
69 |
- <div class="flex justify-center align-center no-gutters"> |
|
70 |
- <div class="gd-10"> |
|
71 |
- <PaginationButton |
|
72 |
- :className="'admin-pagination'" |
|
73 |
- v-model:currentPage="search['currentPage']" |
|
74 |
- :pagination="search" |
|
75 |
- :click="fnViewList" |
|
76 |
- /> |
|
77 |
- </div> |
|
78 |
- </div> |
|
79 |
- <!-- 개인 정보 조회 사유 모달 --> |
|
80 |
- <Modal :showModal="isOpen"> |
|
81 |
- <template v-slot:header> |
|
82 |
- <div class="modal-title"> |
|
83 |
- <p>개인 정보 조회 사유</p> |
|
84 |
- </div> |
|
85 |
- <button class="close-btn" @click="fnModalClose">X</button> |
|
86 |
- </template> |
|
87 |
- <div> |
|
88 |
- <textarea v-model="prvcInqHstry['inqRsn']" disabled></textarea> |
|
89 |
- </div> |
|
90 |
- <template v-slot:footer></template> |
|
91 |
- </Modal> |
|
92 | 63 |
</div> |
64 |
+ <div class="btn-wrap list"> |
|
65 |
+ <div></div> |
|
66 |
+ <PaginationButton |
|
67 |
+ :className="'admin-pagination'" |
|
68 |
+ v-model:currentPage="search['currentPage']" |
|
69 |
+ :pagination="search" |
|
70 |
+ :click="fnViewList" |
|
71 |
+ /> |
|
72 |
+ <div></div> |
|
73 |
+ </div> |
|
74 |
+ <!-- 개인 정보 조회 사유 모달 --> |
|
75 |
+ <Modal :showModal="isOpen"> |
|
76 |
+ <template v-slot:header> |
|
77 |
+ <div class="modal-title"> |
|
78 |
+ <p>개인 정보 조회 사유</p> |
|
79 |
+ </div> |
|
80 |
+ <button class="btn-close" @click="fnModalClose"></button> |
|
81 |
+ </template> |
|
82 |
+ <div> |
|
83 |
+ <textarea v-model="prvcInqHstry['inqRsn']" disabled class="form-control"></textarea> |
|
84 |
+ </div> |
|
85 |
+ <template v-slot:footer> |
|
86 |
+ <button class="btn sm tertiary" @click="fnModalClose"> |
|
87 |
+ 확인 |
|
88 |
+ </button> |
|
89 |
+ </template> |
|
90 |
+ </Modal> |
|
93 | 91 |
</template> |
94 | 92 |
|
95 | 93 |
<script> |
... | ... | @@ -208,6 +206,23 @@ |
208 | 206 |
} |
209 | 207 |
}, |
210 | 208 |
//─────axios─────┘}, |
209 |
+ // 날짜포맷 |
|
210 |
+ formatDate(date) { |
|
211 |
+ const year = date.getFullYear(); |
|
212 |
+ const month = date.getMonth() + 1; |
|
213 |
+ const day = date.getDate(); |
|
214 |
+ |
|
215 |
+ // 날짜 앞에 0을 붙여야 하는 경우 |
|
216 |
+ if (month || day < 10) { |
|
217 |
+ const zeroDay = ('00' + day).slice(-2); |
|
218 |
+ const zeroMonth = ('00' + month).slice(-2); |
|
219 |
+ |
|
220 |
+ return `${year}-${zeroMonth}-${zeroDay}`; |
|
221 |
+ } else { |
|
222 |
+ |
|
223 |
+ return `${year}-${month}-${day}`; |
|
224 |
+ } |
|
225 |
+ } |
|
211 | 226 |
}, |
212 | 227 |
}; |
213 | 228 |
</script> |
--- client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
+++ client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>관리자 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="search-bar"> |
12 | 12 |
<select class="form-select sm" v-model="search['searchType']"> |
... | ... | @@ -72,7 +72,7 @@ |
72 | 72 |
// COMPONENT |
73 | 73 |
import ListTable from "../../../../component/table/ListTable.vue"; |
74 | 74 |
import PaginationButton from "../../../../component/pagination/PaginationButton.vue"; |
75 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
75 |
+ |
|
76 | 76 |
|
77 | 77 |
// RESOURCES |
78 | 78 |
import queryParams from "../../../../../resources/js/queryParams"; |
... | ... | @@ -87,7 +87,7 @@ |
87 | 87 |
components: { |
88 | 88 |
ListTable: ListTable, |
89 | 89 |
PaginationButton: PaginationButton, |
90 |
- PagiNavigationBar: PagiNavigationBar |
|
90 |
+ |
|
91 | 91 |
}, |
92 | 92 |
data() { |
93 | 93 |
return { |
--- client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
+++ client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>일반회원 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="search-bar"> |
12 | 12 |
<select class="form-select sm" v-model="search['searchType']"> |
... | ... | @@ -95,7 +95,7 @@ |
95 | 95 |
import Modal from "../../../../component/modal/Modal.vue"; |
96 | 96 |
import ListTable from "../../../../component/table/ListTable.vue"; |
97 | 97 |
import PaginationButton from "../../../../component/pagination/PaginationButton.vue"; |
98 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
98 |
+ |
|
99 | 99 |
|
100 | 100 |
// RESOURCES |
101 | 101 |
import queryParams from "../../../../../resources/js/queryParams"; |
... | ... | @@ -111,7 +111,7 @@ |
111 | 111 |
Modal: Modal, |
112 | 112 |
ListTable: ListTable, |
113 | 113 |
PaginationButton: PaginationButton, |
114 |
- PagiNavigationBar: PagiNavigationBar |
|
114 |
+ |
|
115 | 115 |
}, |
116 | 116 |
data() { |
117 | 117 |
return { |
--- client/views/pages/adm/popup/PopupManagementInsert.vue
+++ client/views/pages/adm/popup/PopupManagementInsert.vue
... | ... | @@ -1,299 +1,228 @@ |
1 | 1 |
<template> |
2 |
- <div class="content admin-style"> |
|
3 |
- <div class="admin-page-title point-font2 mb30"> |
|
4 |
- <p>팝업 관리</p> |
|
5 |
- </div> |
|
6 |
- <details open class="form-table-style mb30"> |
|
7 |
- <summary class="point-font2"> |
|
8 |
- <p class="summary-style pl10">기본정보</p> |
|
9 |
- </summary> |
|
10 |
- <div class="pt10 pb10"> |
|
11 |
- <table class="form-table"> |
|
12 |
- <colgroup> |
|
13 |
- <col width="50%" /> |
|
14 |
- <col width="50%" /> |
|
15 |
- </colgroup> |
|
16 |
- <tr> |
|
17 |
- <td> |
|
18 |
- <div class="gd-12 pr0"> |
|
19 |
- <label for="" class="form-title point-font2 mb10">제목</label> |
|
2 |
+ <div class="content-zone"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="title-zone"> |
|
6 |
+ <div class="page-title"> |
|
7 |
+ <p>팝업 관리</p> |
|
8 |
+ </div> |
|
9 |
+ |
|
10 |
+ </div> |
|
11 |
+ <div class="form-box"> |
|
12 |
+ <div class="form-box-title"> |
|
13 |
+ <p>기본정보</p> |
|
14 |
+ </div> |
|
15 |
+ <div class="form-content"> |
|
16 |
+ <div> |
|
17 |
+ <label class="form-title">제목</label> |
|
18 |
+ <input |
|
19 |
+ type="text" |
|
20 |
+ class="form-control sm" |
|
21 |
+ v-model="popup['popupTtl']" |
|
22 |
+ ref="popupTtl" |
|
23 |
+ placeholder="제목을 입력하세요." |
|
24 |
+ /> |
|
25 |
+ </div> |
|
26 |
+ <div> |
|
27 |
+ <label class="form-title">게시일</label> |
|
28 |
+ <div class="input-group"> |
|
29 |
+ <VueDatePicker |
|
30 |
+ v-model="popup['bgngDt']" |
|
31 |
+ ref="bgngDt" |
|
32 |
+ time-picker-inline |
|
33 |
+ placeholder="시작일" |
|
34 |
+ locale="ko" |
|
35 |
+ inputFormat="yyyy-mm-dd" |
|
36 |
+ /> |
|
37 |
+ <div class="pd10">-</div> |
|
38 |
+ <VueDatePicker |
|
39 |
+ v-model="popup['endDt']" |
|
40 |
+ ref="endDt" |
|
41 |
+ time-picker-inline |
|
42 |
+ placeholder="종료일" |
|
43 |
+ locale="ko" |
|
44 |
+ inputFormat="yyyy-mm-dd" |
|
45 |
+ /> |
|
46 |
+ </div> |
|
47 |
+ </div> |
|
48 |
+ <div> |
|
49 |
+ <label class="form-title">팝업크기</label> |
|
50 |
+ <div class="input-group"> |
|
51 |
+ <select class="form-select sm fixed" v-model="popup['popupSizeType']"> |
|
52 |
+ <option value="fixed">고정값</option> |
|
53 |
+ <option value="custom">사용자지정</option> |
|
54 |
+ </select> |
|
55 |
+ |
|
56 |
+ <!-- 고정값 --> |
|
57 |
+ <template v-if="popup['popupSizeType'] == 'fixed'"> |
|
58 |
+ <div |
|
59 |
+ v-for="(popupSize, index) of popupSizes" |
|
60 |
+ :key="index" |
|
61 |
+ class="form-check" |
|
62 |
+ > |
|
63 |
+ <input |
|
64 |
+ type="radio" |
|
65 |
+ :id="popupSize['id']" |
|
66 |
+ class="mr5" |
|
67 |
+ v-model="popup['popupSize']" |
|
68 |
+ :value="popupSize['id']" |
|
69 |
+ ref="popupSize" |
|
70 |
+ /> |
|
71 |
+ <label :for="popupSize['id']"> |
|
72 |
+ {{ popupSize["wdthLen"] }}X{{ popupSize["vrtcLen"] }} |
|
73 |
+ </label> |
|
74 |
+ </div> |
|
75 |
+ </template> |
|
76 |
+ <!-- 사용자 지정 --> |
|
77 |
+ <template v-if="popup['popupSizeType'] == 'custom'"> |
|
78 |
+ <input |
|
79 |
+ type="text" |
|
80 |
+ class="form-control sm" |
|
81 |
+ v-model="popup['wdthLen']" |
|
82 |
+ placeholder="가로 길이를 입력하세요." |
|
83 |
+ /> |
|
84 |
+ <div class="pd10">x</div> |
|
85 |
+ <input |
|
86 |
+ type="text" |
|
87 |
+ class="form-control sm" |
|
88 |
+ v-model="popup['vrtcLen']" |
|
89 |
+ placeholder="세로 길이를 입력하세요." |
|
90 |
+ /> |
|
91 |
+ </template> |
|
92 |
+ </div> |
|
93 |
+ </div> |
|
94 |
+ <div > |
|
95 |
+ <label class="form-title">업로드 형식</label> |
|
96 |
+ <div class="check-area"> |
|
97 |
+ <div class="form-check"> |
|
98 |
+ <input |
|
99 |
+ type="radio" |
|
100 |
+ id="image" |
|
101 |
+ class="mr5" |
|
102 |
+ v-model="popup['popupType']" |
|
103 |
+ value="image" |
|
104 |
+ /> |
|
105 |
+ <label for="image">이미지</label> |
|
106 |
+ </div> |
|
107 |
+ <div class="form-check"> |
|
108 |
+ <input |
|
109 |
+ type="radio" |
|
110 |
+ id="video" |
|
111 |
+ class="mr5" |
|
112 |
+ v-model="popup['popupType']" |
|
113 |
+ value="video" |
|
114 |
+ /> |
|
115 |
+ <label for="video">영상</label> |
|
116 |
+ </div> |
|
117 |
+ </div> |
|
118 |
+ </div> |
|
119 |
+ <template v-if="popup['popupType'] == 'image'"> |
|
120 |
+ <div> |
|
121 |
+ <label class="form-title">이미지 첨부파일</label> |
|
122 |
+ |
|
123 |
+ <div |
|
124 |
+ v-for="(file, index) of this.fileList" |
|
125 |
+ :key="index" |
|
126 |
+ class="input-group" |
|
127 |
+ style="height: 100%" |
|
128 |
+ > |
|
129 |
+ <p v-if="file['fileId'] != null"> |
|
130 |
+ {{ file["fileNm"] }}.{{ file["extnNm"] }} |
|
131 |
+ </p> |
|
132 |
+ <p v-else>{{ file.name }}</p> |
|
133 |
+ <button |
|
134 |
+ class="icon-btn pd0" |
|
135 |
+ @click="fnFileDelete(file, index)" |
|
136 |
+ > |
|
137 |
+ <svg-icon |
|
138 |
+ type="mdi" |
|
139 |
+ :width="15" |
|
140 |
+ :height="15" |
|
141 |
+ :path="path" |
|
142 |
+ ></svg-icon> |
|
143 |
+ </button> |
|
144 |
+ </div> |
|
145 |
+ <div v-if="fileList.length < 1"> |
|
146 |
+ <label |
|
147 |
+ for="file" |
|
148 |
+ class="large-btn blue-border-btn text-ct" |
|
149 |
+ > |
|
150 |
+ 파일찾기 |
|
151 |
+ </label> |
|
152 |
+ <input |
|
153 |
+ type="file" |
|
154 |
+ id="file" |
|
155 |
+ ref="file" |
|
156 |
+ @change="fnFileInsert" |
|
157 |
+ /> |
|
158 |
+ </div> |
|
159 |
+ </div> |
|
160 |
+ |
|
161 |
+ <div> |
|
162 |
+ <label class="form-title">링크 URL</label> |
|
20 | 163 |
<input |
21 | 164 |
type="text" |
22 |
- class="full-input" |
|
23 |
- v-model="popup['popupTtl']" |
|
24 |
- ref="popupTtl" |
|
25 |
- placeholder="제목을 입력하세요." |
|
165 |
+ class="form-control sm" |
|
166 |
+ placeholder="이미지 주소를 입력하세요." |
|
167 |
+ v-model="popup['linkUrl']" |
|
168 |
+ :disabled="popup['popupType'] != 'image'" |
|
169 |
+ ref="linkUrl" |
|
26 | 170 |
/> |
27 | 171 |
</div> |
28 |
- </td> |
|
29 |
- <td> |
|
30 |
- <div class="gd-12 pl0"> |
|
31 |
- <label for="" class="form-title point-font2 mb10">게시일</label> |
|
32 |
- <div class="flex justify-start align-center no-gutters"> |
|
33 |
- <div class="gd-3"> |
|
34 |
- <VueDatePicker |
|
35 |
- v-model="popup['bgngDt']" |
|
36 |
- ref="bgngDt" |
|
37 |
- time-picker-inline |
|
38 |
- placeholder="시작일" |
|
39 |
- locale="ko" |
|
40 |
- inputFormat="yyyy-mm-dd" |
|
41 |
- /> |
|
42 |
- </div> |
|
43 |
- <div class="pd10">-</div> |
|
44 |
- <div class="gd-3"> |
|
45 |
- <VueDatePicker |
|
46 |
- v-model="popup['endDt']" |
|
47 |
- ref="endDt" |
|
48 |
- time-picker-inline |
|
49 |
- placeholder="종료일" |
|
50 |
- locale="ko" |
|
51 |
- inputFormat="yyyy-mm-dd" |
|
52 |
- /> |
|
53 |
- </div> |
|
54 |
- </div> |
|
55 |
- </div> |
|
56 |
- </td> |
|
57 |
- </tr> |
|
58 |
- <tr> |
|
59 |
- <td> |
|
60 |
- <div class="gd-12 pr0"> |
|
61 |
- <label for="" class="form-title point-font2 mb10"> |
|
62 |
- 팝업크기 |
|
63 |
- </label> |
|
64 |
- <div class="flex align-center"> |
|
65 |
- <div class="gd-3 pl0"> |
|
66 |
- <select class="full-input" v-model="popup['popupSizeType']"> |
|
67 |
- <option value="fixed">고정값</option> |
|
68 |
- <option value="custom">사용자지정</option> |
|
69 |
- </select> |
|
70 |
- </div> |
|
71 |
- <div class="gd-9 pr0"> |
|
72 |
- <!-- 고정값 --> |
|
73 |
- <div |
|
74 |
- v-if="popup['popupSizeType'] == 'fixed'" |
|
75 |
- class="flex align-center no-gutters" |
|
76 |
- > |
|
77 |
- <div |
|
78 |
- v-for="(popupSize, index) of popupSizes" |
|
79 |
- :key="index" |
|
80 |
- class="gd-3" |
|
81 |
- > |
|
82 |
- <input |
|
83 |
- type="radio" |
|
84 |
- :id="popupSize['id']" |
|
85 |
- class="mr5" |
|
86 |
- v-model="popup['popupSize']" |
|
87 |
- :value="popupSize['id']" |
|
88 |
- ref="popupSize" |
|
89 |
- /> |
|
90 |
- <label :for="popupSize['id']"> |
|
91 |
- {{ popupSize["wdthLen"] }}X{{ popupSize["vrtcLen"] }} |
|
92 |
- </label> |
|
93 |
- </div> |
|
94 |
- </div> |
|
95 |
- <!-- 사용자 지정 --> |
|
96 |
- <div |
|
97 |
- v-if="popup['popupSizeType'] == 'custom'" |
|
98 |
- class="flex align-center no-gutters" |
|
99 |
- > |
|
100 |
- <div class="gd-5"> |
|
101 |
- <input |
|
102 |
- type="text" |
|
103 |
- class="full-input" |
|
104 |
- v-model="popup['wdthLen']" |
|
105 |
- placeholder="가로 길이를 입력하세요." |
|
106 |
- /> |
|
107 |
- </div> |
|
108 |
- <div class="pd10">x</div> |
|
109 |
- <div class="gd-5"> |
|
110 |
- <input |
|
111 |
- type="text" |
|
112 |
- class="full-input" |
|
113 |
- v-model="popup['vrtcLen']" |
|
114 |
- placeholder="세로 길이를 입력하세요." |
|
115 |
- /> |
|
116 |
- </div> |
|
117 |
- </div> |
|
118 |
- </div> |
|
119 |
- </div> |
|
120 |
- </div> |
|
121 |
- </td> |
|
122 |
- <td> |
|
123 |
- <div class="gd-12 pl0"> |
|
124 |
- <label for="" class="form-title point-font2 mb10"> |
|
125 |
- 업로드 형식 |
|
126 |
- </label> |
|
127 |
- <div class="flex align-center no-gutters"> |
|
128 |
- <div class="gd-5"> |
|
129 |
- <input |
|
130 |
- type="radio" |
|
131 |
- id="image" |
|
132 |
- class="mr5" |
|
133 |
- v-model="popup['popupType']" |
|
134 |
- value="image" |
|
135 |
- /> |
|
136 |
- <label for="image">이미지</label> |
|
137 |
- </div> |
|
138 |
- <div class="gd-5"> |
|
139 |
- <input |
|
140 |
- type="radio" |
|
141 |
- id="video" |
|
142 |
- class="mr5" |
|
143 |
- v-model="popup['popupType']" |
|
144 |
- value="video" |
|
145 |
- /> |
|
146 |
- <label for="video">영상</label> |
|
147 |
- </div> |
|
148 |
- </div> |
|
149 |
- </div> |
|
150 |
- </td> |
|
151 |
- </tr> |
|
152 |
- <template v-if="popup['popupType'] == 'image'"> |
|
153 |
- <tr> |
|
154 |
- <td colspan="2"> |
|
155 |
- <div class="gd-12 pr0"> |
|
156 |
- <label for="" class="form-title point-font2 mb10"> |
|
157 |
- 이미지 첨부파일 |
|
158 |
- </label> |
|
159 |
- <div class="flex align-center"> |
|
160 |
- <div class="gd-10 pl0"> |
|
161 |
- <div class="filebox"> |
|
162 |
- <input |
|
163 |
- v-if="fileList.length < 1" |
|
164 |
- class="upload-name full-input" |
|
165 |
- placeholder="첨부파일이 없습니다." |
|
166 |
- disabled |
|
167 |
- /> |
|
168 |
- <div |
|
169 |
- v-else |
|
170 |
- v-for="(file, index) of this.fileList" |
|
171 |
- :key="index" |
|
172 |
- class="flex justify-between align-center border pl10 pr10" |
|
173 |
- style="height: 100%" |
|
174 |
- > |
|
175 |
- <p v-if="file['fileId'] != null"> |
|
176 |
- {{ file["fileNm"] }}.{{ file["extnNm"] }} |
|
177 |
- </p> |
|
178 |
- <p v-else>{{ file.name }}</p> |
|
179 |
- <button |
|
180 |
- class="icon-btn pd0" |
|
181 |
- @click="fnFileDelete(file, index)" |
|
182 |
- > |
|
183 |
- <svg-icon |
|
184 |
- type="mdi" |
|
185 |
- :width="15" |
|
186 |
- :height="15" |
|
187 |
- :path="path" |
|
188 |
- ></svg-icon> |
|
189 |
- </button> |
|
190 |
- </div> |
|
191 |
- </div> |
|
192 |
- </div> |
|
193 |
- <div class="gd-2 pl0 pr0"> |
|
194 |
- <label |
|
195 |
- for="file" |
|
196 |
- class="large-btn blue-border-btn text-ct" |
|
197 |
- > |
|
198 |
- 파일찾기 |
|
199 |
- </label> |
|
200 |
- <input |
|
201 |
- type="file" |
|
202 |
- id="file" |
|
203 |
- ref="file" |
|
204 |
- @change="fnFileInsert" |
|
205 |
- /> |
|
206 |
- </div> |
|
207 |
- </div> |
|
208 |
- </div> |
|
209 |
- </td> |
|
210 |
- </tr> |
|
211 |
- <tr> |
|
212 |
- <td colspan="2"> |
|
213 |
- <div class="gd-12"> |
|
214 |
- <label for="" class="form-title point-font2 mb10"> |
|
215 |
- 링크 URL |
|
216 |
- </label> |
|
172 |
+ </template> |
|
173 |
+ <template v-if="popup['popupType'] == 'video'"> |
|
174 |
+ <div> |
|
175 |
+ <label class="form-title">동영상 URL</label> |
|
217 | 176 |
<input |
218 | 177 |
type="text" |
219 |
- class="full-input" |
|
220 |
- placeholder="이미지 주소를 입력하세요." |
|
221 |
- v-model="popup['linkUrl']" |
|
222 |
- :disabled="popup['popupType'] != 'image'" |
|
223 |
- ref="linkUrl" |
|
178 |
+ class="form-control" |
|
179 |
+ placeholder="동영상 주소를 입력하세요." |
|
180 |
+ v-model="popup['vdoUrl']" |
|
181 |
+ :disabled="popup['popupType'] != 'video'" |
|
182 |
+ ref="vdoUrl" |
|
224 | 183 |
/> |
225 | 184 |
</div> |
226 |
- </td> |
|
227 |
- </tr> |
|
228 |
- </template> |
|
229 |
- <tr v-if="popup['popupType'] == 'video'"> |
|
230 |
- <td colspan="2"> |
|
231 |
- <div class="gd-12"> |
|
232 |
- <label for="" class="form-title point-font2 mb10"> |
|
233 |
- 동영상 URL |
|
234 |
- </label> |
|
235 |
- <input |
|
236 |
- type="text" |
|
237 |
- class="full-input" |
|
238 |
- placeholder="동영상 주소를 입력하세요." |
|
239 |
- v-model="popup['vdoUrl']" |
|
240 |
- :disabled="popup['popupType'] != 'video'" |
|
241 |
- ref="vdoUrl" |
|
242 |
- /> |
|
243 |
- </div> |
|
244 |
- </td> |
|
245 |
- </tr> |
|
246 |
- <tr> |
|
247 |
- <td> |
|
248 |
- <div class="gd-12 pr0"> |
|
249 |
- <label for="" class="form-title point-font2 mb10"> |
|
250 |
- 팝업 노출 페이지 |
|
251 |
- </label> |
|
252 |
- <select |
|
253 |
- class="full-input" |
|
254 |
- v-model="popup['pageType']" |
|
255 |
- ref="pageType" |
|
185 |
+ </template> |
|
186 |
+ <div> |
|
187 |
+ <label class="form-title">팝업 노출 페이지</label> |
|
188 |
+ <select |
|
189 |
+ class="form-select sm " |
|
190 |
+ v-model="popup['pageType']" |
|
191 |
+ ref="pageType" |
|
192 |
+ > |
|
193 |
+ <option value="">팝업을 노출할 페이지를 선택하세요.</option> |
|
194 |
+ <option |
|
195 |
+ v-for="(item, index) of codeList" |
|
196 |
+ :key="index" |
|
197 |
+ :value="item.cd" |
|
256 | 198 |
> |
257 |
- <option value="">팝업을 노출할 페이지를 선택하세요.</option> |
|
258 |
- <option |
|
259 |
- v-for="(item, index) of codeList" |
|
260 |
- :key="index" |
|
261 |
- :value="item.cd" |
|
262 |
- > |
|
263 |
- {{ item.cdNm }} |
|
264 |
- </option> |
|
265 |
- </select> |
|
266 |
- </div> |
|
267 |
- </td> |
|
268 |
- <td> |
|
269 |
- <div class="gd-12 pl0"> |
|
270 |
- <label for="" class="form-title point-font2 mb10">순서</label> |
|
271 |
- <select class="full-input" v-model="popup['sn']" ref="sn"> |
|
272 |
- <option value="0">순서를 선택하세요.</option> |
|
273 |
- <option value="1">1</option> |
|
274 |
- <option value="2">2</option> |
|
275 |
- <option value="3">3</option> |
|
276 |
- <option value="4">4</option> |
|
277 |
- <option value="5">5</option> |
|
278 |
- </select> |
|
279 |
- </div> |
|
280 |
- </td> |
|
281 |
- </tr> |
|
282 |
- </table> |
|
283 |
- </div> |
|
284 |
- </details> |
|
285 |
- <div class="flex justify-end align-center no-gutters"> |
|
286 |
- <div class="gd-1 mr10"> |
|
287 |
- <button class="large-btn blue-btn" @click="fnUpsert"> |
|
288 |
- <span v-if="this.$route.query.pageId == null">저장</span> |
|
289 |
- <span v-else>수정</span> |
|
290 |
- </button> |
|
291 |
- </div> |
|
292 |
- <div class="gd-1"> |
|
293 |
- <button class="large-btn gray-btn" @click="fnCancel">취소</button> |
|
199 |
+ {{ item.cdNm }} |
|
200 |
+ </option> |
|
201 |
+ </select> |
|
202 |
+ </div> |
|
203 |
+ <div> |
|
204 |
+ <label class="form-title">순서</label> |
|
205 |
+ <select class="form-select sm " v-model="popup['sn']" ref="sn"> |
|
206 |
+ <option value="0">순서를 선택하세요.</option> |
|
207 |
+ <option value="1">1</option> |
|
208 |
+ <option value="2">2</option> |
|
209 |
+ <option value="3">3</option> |
|
210 |
+ <option value="4">4</option> |
|
211 |
+ <option value="5">5</option> |
|
212 |
+ </select> |
|
213 |
+ </div> |
|
214 |
+ </div> |
|
215 |
+ </div> |
|
294 | 216 |
</div> |
295 | 217 |
</div> |
296 | 218 |
</div> |
219 |
+ <div class="btn-wrap"> |
|
220 |
+ <button class="btn sm primary" @click="fnUpsert"> |
|
221 |
+ <span v-if="this.$route.query.pageId == null">저장</span> |
|
222 |
+ <span v-else>수정</span> |
|
223 |
+ </button> |
|
224 |
+ <button class="btn sm tertiary" @click="fnCancel">취소</button> |
|
225 |
+ </div> |
|
297 | 226 |
</template> |
298 | 227 |
|
299 | 228 |
<script> |
--- client/views/pages/adm/popup/PopupManagementSelectList.vue
+++ client/views/pages/adm/popup/PopupManagementSelectList.vue
... | ... | @@ -1,61 +1,58 @@ |
1 | 1 |
<template> |
2 |
- <div class="content"> |
|
3 |
- <div class="admin-page-title point-font2 mb30"> |
|
4 |
- <p>팝업 관리</p> |
|
5 |
- </div> |
|
6 |
- <div class="search-bar mb15"> |
|
7 |
- <div class="flex justify-end align-center no-gutters"> |
|
8 |
- <div class="gd-6 mr10"> |
|
9 |
- <div class="border"> |
|
10 |
- <select class="border-none gd-2" v-model="search['searchType']"> |
|
11 |
- <option value="">전체</option> |
|
12 |
- <option value="popup_ttl">제목</option> |
|
13 |
- <option value="mbr_nm">작성자</option> |
|
14 |
- </select> |
|
15 |
- <input |
|
16 |
- type="text" |
|
17 |
- class="full-input border-none gd-10 condition-input" |
|
18 |
- v-model="search['searchText']" |
|
19 |
- v-on:keyup.enter="fnViewList" |
|
20 |
- placeholder="검색명을 입력하세요" |
|
21 |
- /> |
|
2 |
+ <div class="content-zone"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="title-zone"> |
|
6 |
+ <div class="page-title"> |
|
7 |
+ <p>팝업 관리</p> |
|
22 | 8 |
</div> |
9 |
+ |
|
23 | 10 |
</div> |
24 |
- <div class="gd-1"> |
|
25 |
- <button class="large-btn blue-border-btn" @click="fnViewList"> |
|
11 |
+ <div class="search-bar"> |
|
12 |
+ <select class="form-select sm" v-model="search['searchType']"> |
|
13 |
+ <option value="">전체</option> |
|
14 |
+ <option value="popup_ttl">제목</option> |
|
15 |
+ <option value="mbr_nm">작성자</option> |
|
16 |
+ </select> |
|
17 |
+ <input |
|
18 |
+ type="text" |
|
19 |
+ class="form-control sm" |
|
20 |
+ v-model="search['searchText']" |
|
21 |
+ v-on:keyup.enter="fnViewList" |
|
22 |
+ placeholder="검색명을 입력하세요" |
|
23 |
+ /> |
|
24 |
+ <button class="btn sm ico-before ico-sch" @click="fnViewList"> |
|
26 | 25 |
검색 |
27 | 26 |
</button> |
28 | 27 |
</div> |
29 |
- </div> |
|
30 |
- </div> |
|
31 |
- <ListTable |
|
32 |
- :className="'admin-list cmmn-table'" |
|
33 |
- :colgroup="colgroup" |
|
34 |
- :thead="thead" |
|
35 |
- :tbody="tbody" |
|
36 |
- @listClick="fnViewDetail" |
|
37 |
- /> |
|
38 |
- <div class="flex justify-between align-center no-gutters"> |
|
39 |
- <div class="gd-1"></div> |
|
40 |
- <div class="gd-10"> |
|
41 |
- <PaginationButton |
|
42 |
- :className="'admin-pagination'" |
|
43 |
- v-model:currentPage="search['currentPage']" |
|
44 |
- :pagination="search" |
|
45 |
- :click="fnViewList" |
|
28 |
+ <div class="tbl-wrap"> |
|
29 |
+ <ListTable |
|
30 |
+ :className="'data cursor'" |
|
31 |
+ :colgroup="colgroup" |
|
32 |
+ :thead="thead" |
|
33 |
+ :tbody="tbody" |
|
34 |
+ @listClick="fnViewDetail" |
|
46 | 35 |
/> |
47 |
- </div> |
|
48 |
- <div class="gd-1"> |
|
49 |
- <button |
|
50 |
- class="large-btn blue-btn" |
|
51 |
- @click="fnInsert" |
|
52 |
- v-if="pageAuth.regAuthrt == 'Y'" |
|
53 |
- > |
|
54 |
- 등록 |
|
55 |
- </button> |
|
36 |
+ </div> |
|
56 | 37 |
</div> |
57 | 38 |
</div> |
58 | 39 |
</div> |
40 |
+ <div class="btn-wrap list"> |
|
41 |
+ <div></div> |
|
42 |
+ <PaginationButton |
|
43 |
+ :className="'admin-pagination'" |
|
44 |
+ v-model:currentPage="search['currentPage']" |
|
45 |
+ :pagination="search" |
|
46 |
+ :click="fnViewList" |
|
47 |
+ /> |
|
48 |
+ <button |
|
49 |
+ class="btn sm primary" |
|
50 |
+ @click="fnInsert" |
|
51 |
+ v-if="pageAuth.regAuthrt == 'Y'" |
|
52 |
+ > |
|
53 |
+ 등록 |
|
54 |
+ </button> |
|
55 |
+ </div> |
|
59 | 56 |
</template> |
60 | 57 |
|
61 | 58 |
<script> |
--- client/views/pages/adm/popup/PopupManagementSelectListOne.vue
+++ client/views/pages/adm/popup/PopupManagementSelectListOne.vue
... | ... | @@ -1,235 +1,207 @@ |
1 | 1 |
<template> |
2 |
- <div class="content admin-style"> |
|
3 |
- <div class="admin-page-title point-font2 mb30"> |
|
4 |
- <p>팝업 관리</p> |
|
5 |
- </div> |
|
6 |
- <details open class="form-table-style mb30"> |
|
7 |
- <summary class="point-font2"> |
|
8 |
- <p class="summary-style pl10">기본정보</p> |
|
9 |
- </summary> |
|
10 |
- <div class="pt10 pb10"> |
|
11 |
- <table class="form-table"> |
|
12 |
- <colgroup> |
|
13 |
- <col width="50%" /> |
|
14 |
- <col width="50%" /> |
|
15 |
- </colgroup> |
|
16 |
- <tr> |
|
17 |
- <td> |
|
18 |
- <div class="gd-12 pr0"> |
|
19 |
- <label for="" class="form-title point-font2 mb10">제목</label> |
|
20 |
- <input |
|
21 |
- type="text" |
|
22 |
- class="full-input" |
|
23 |
- v-model="popup['popupTtl']" |
|
24 |
- ref="popupTtl" |
|
25 |
- disabled |
|
26 |
- /> |
|
27 |
- </div> |
|
28 |
- </td> |
|
29 |
- <td> |
|
30 |
- <div class="gd-12 pl0"> |
|
31 |
- <label for="" class="form-title point-font2 mb10">게시일</label> |
|
32 |
- <div class="flex justify-start align-center no-gutters"> |
|
33 |
- <div class="gd-3"> |
|
34 |
- <input |
|
35 |
- type="datetime" |
|
36 |
- class="full-input" |
|
37 |
- v-model="popup['bgngDt']" |
|
38 |
- ref="bgngDt" |
|
39 |
- disabled |
|
40 |
- /> |
|
41 |
- </div> |
|
42 |
- <div class="pd10">-</div> |
|
43 |
- <div class="gd-3"> |
|
44 |
- <input |
|
45 |
- type="datetime" |
|
46 |
- class="full-input" |
|
47 |
- v-model="popup['endDt']" |
|
48 |
- ref="endDt" |
|
49 |
- disabled |
|
50 |
- /> |
|
51 |
- </div> |
|
52 |
- </div> |
|
53 |
- </div> |
|
54 |
- </td> |
|
55 |
- </tr> |
|
56 |
- <tr> |
|
57 |
- <td> |
|
58 |
- <div class="gd-12 pr0"> |
|
59 |
- <label for="" class="form-title point-font2 mb10"> |
|
60 |
- 팝업크기 |
|
61 |
- </label> |
|
62 |
- <div class="flex align-center"> |
|
63 |
- <div class="gd-3 pl0"> |
|
64 |
- <select |
|
65 |
- class="full-input" |
|
66 |
- v-model="popup['popupSizeType']" |
|
67 |
- disabled |
|
68 |
- > |
|
69 |
- <option value="fixed">고정값</option> |
|
70 |
- <option value="custom">사용자지정</option> |
|
71 |
- </select> |
|
72 |
- </div> |
|
73 |
- <div class="gd-9 pr0"> |
|
74 |
- <!-- 고정값 --> |
|
75 |
- <div |
|
76 |
- v-if="popup['popupSizeType'] == 'fixed'" |
|
77 |
- class="flex align-center no-gutters" |
|
78 |
- > |
|
79 |
- <div |
|
80 |
- v-for="(popupSize, index) of popupSizes" |
|
81 |
- :key="index" |
|
82 |
- class="gd-3" |
|
83 |
- > |
|
84 |
- <input |
|
85 |
- type="radio" |
|
86 |
- :id="popupSize['id']" |
|
87 |
- class="mr5" |
|
88 |
- v-model="popup['popupSize']" |
|
89 |
- :value="popupSize['id']" |
|
90 |
- ref="popupSize" |
|
91 |
- disabled |
|
92 |
- /> |
|
93 |
- <label :for="popupSize['id']"> |
|
94 |
- {{ popupSize["wdthLen"] }}X{{ popupSize["vrtcLen"] }} |
|
95 |
- </label> |
|
96 |
- </div> |
|
97 |
- </div> |
|
98 |
- <!-- 사용자 지정 --> |
|
99 |
- <div |
|
100 |
- v-if="popup['popupSizeType'] == 'custom'" |
|
101 |
- class="flex align-center no-gutters" |
|
102 |
- > |
|
103 |
- <div class="gd-5"> |
|
104 |
- <input |
|
105 |
- type="text" |
|
106 |
- class="full-input" |
|
107 |
- v-model="popup['wdthLen']" |
|
108 |
- disabled |
|
109 |
- /> |
|
110 |
- </div> |
|
111 |
- <div class="pd10">x</div> |
|
112 |
- <div class="gd-5"> |
|
113 |
- <input |
|
114 |
- type="text" |
|
115 |
- class="full-input" |
|
116 |
- v-model="popup['vrtcLen']" |
|
117 |
- disabled |
|
118 |
- /> |
|
119 |
- </div> |
|
120 |
- </div> |
|
121 |
- </div> |
|
122 |
- </div> |
|
123 |
- </div> |
|
124 |
- </td> |
|
125 |
- <td> |
|
126 |
- <div class="gd-12 pl0"> |
|
127 |
- <label for="" class="form-title point-font2 mb10"> |
|
128 |
- 업로드 형식 |
|
129 |
- </label> |
|
130 |
- <div class="flex align-center no-gutters"> |
|
131 |
- <div class="gd-5"> |
|
132 |
- <input |
|
133 |
- type="radio" |
|
134 |
- id="image" |
|
135 |
- class="mr5" |
|
136 |
- v-model="popup['popupType']" |
|
137 |
- value="image" |
|
138 |
- disabled |
|
139 |
- /> |
|
140 |
- <label for="image">이미지</label> |
|
141 |
- </div> |
|
142 |
- <div class="gd-5"> |
|
143 |
- <input |
|
144 |
- type="radio" |
|
145 |
- id="video" |
|
146 |
- class="mr5" |
|
147 |
- v-model="popup['popupType']" |
|
148 |
- value="video" |
|
149 |
- disabled |
|
150 |
- /> |
|
151 |
- <label for="video">영상</label> |
|
152 |
- </div> |
|
153 |
- </div> |
|
154 |
- </div> |
|
155 |
- </td> |
|
156 |
- </tr> |
|
157 |
- <template v-if="popup['popupType'] == 'image'"> |
|
158 |
- <tr> |
|
159 |
- <td colspan="2"> |
|
160 |
- <div class="gd-12 pr0"> |
|
161 |
- <label for="" class="form-title point-font2 mb10"> |
|
162 |
- 이미지 첨부파일 |
|
163 |
- </label> |
|
164 |
- <div class="flex align-center"> |
|
165 |
- <div class="gd-10 pl0"> |
|
166 |
- <div class="filebox"> |
|
167 |
- <input |
|
168 |
- class="upload-name full-input" |
|
169 |
- :placeholder=" |
|
170 |
- fileList.length < 1 |
|
171 |
- ? '첨부파일이 없습니다.' |
|
172 |
- : fileList[0]['fileNm'] + |
|
173 |
- '.' + |
|
174 |
- fileList[0]['extnNm'] |
|
175 |
- " |
|
176 |
- disabled |
|
177 |
- /> |
|
178 |
- </div> |
|
179 |
- </div> |
|
180 |
- <div class="gd-2 pl0 pr0"> |
|
181 |
- <button |
|
182 |
- for="file" |
|
183 |
- class="large-btn gray-border-btn text-ct" |
|
184 |
- disabled |
|
185 |
- > |
|
186 |
- 파일찾기 |
|
187 |
- </button> |
|
188 |
- </div> |
|
189 |
- </div> |
|
190 |
- </div> |
|
191 |
- </td> |
|
192 |
- </tr> |
|
193 |
- <tr> |
|
194 |
- <td colspan="2"> |
|
195 |
- <div class="gd-12"> |
|
196 |
- <label for="" class="form-title point-font2 mb10"> |
|
197 |
- 링크 URL |
|
198 |
- </label> |
|
199 |
- <input |
|
200 |
- type="text" |
|
2 |
+ <div class="content-zone"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="title-zone"> |
|
6 |
+ <div class="page-title"> |
|
7 |
+ <p>팝업 관리</p> |
|
8 |
+ </div> |
|
9 |
+ |
|
10 |
+ </div> |
|
11 |
+ <div class="form-box"> |
|
12 |
+ <div class="form-box-title"> |
|
13 |
+ <p>기본정보</p> |
|
14 |
+ </div> |
|
15 |
+ <div class="form-content"> |
|
16 |
+ <div> |
|
17 |
+ <p class="form-title">제목</p> |
|
18 |
+ <p>{{ popup['popupTtl'] }}</p> |
|
19 |
+ <!-- <input |
|
20 |
+ type="text" |
|
21 |
+ class="full-input" |
|
22 |
+ v-model="popup['popupTtl']" |
|
23 |
+ ref="popupTtl" |
|
24 |
+ disabled |
|
25 |
+ /> --> |
|
26 |
+ </div> |
|
27 |
+ <div> |
|
28 |
+ <p class="form-title">게시일</p> |
|
29 |
+ <p>{{ popup['bgngDt'] +"-"+ popup['endDt'] }}</p> |
|
30 |
+ |
|
31 |
+ <!-- <input |
|
32 |
+ type="datetime" |
|
201 | 33 |
class="full-input" |
202 |
- v-model="popup['linkUrl']" |
|
203 |
- ref="linkUrl" |
|
34 |
+ v-model="popup['bgngDt']" |
|
35 |
+ ref="bgngDt" |
|
204 | 36 |
disabled |
205 | 37 |
/> |
38 |
+ |
|
39 |
+ <div class="pd10">-</div> |
|
40 |
+ |
|
41 |
+ <input |
|
42 |
+ type="datetime" |
|
43 |
+ class="full-input" |
|
44 |
+ v-model="popup['endDt']" |
|
45 |
+ ref="endDt" |
|
46 |
+ disabled |
|
47 |
+ /> --> |
|
48 |
+ |
|
49 |
+ |
|
50 |
+ </div> |
|
51 |
+ <div> |
|
52 |
+ <p class="form-title">팝업크기</p> |
|
53 |
+ <p>{{ popup['wdthLen'] + "X" + popup['vrtcLen']}}</p> |
|
54 |
+ |
|
55 |
+ <!-- <div class="flex align-center"> |
|
56 |
+ <div class="gd-3 pl0"> |
|
57 |
+ <select |
|
58 |
+ class="full-input" |
|
59 |
+ v-model="popup['popupSizeType']" |
|
60 |
+ disabled |
|
61 |
+ > |
|
62 |
+ <option value="fixed">고정값</option> |
|
63 |
+ <option value="custom">사용자지정</option> |
|
64 |
+ </select> |
|
206 | 65 |
</div> |
207 |
- </td> |
|
208 |
- </tr> |
|
209 |
- </template> |
|
210 |
- <tr v-if="popup['popupType'] == 'video'"> |
|
211 |
- <td colspan="2"> |
|
212 |
- <div class="gd-12"> |
|
213 |
- <label for="" class="form-title point-font2 mb10"> |
|
214 |
- 동영상 URL |
|
215 |
- </label> |
|
216 |
- <input |
|
66 |
+ <div class="gd-9 pr0"> |
|
67 |
+ <div |
|
68 |
+ v-if="popup['popupSizeType'] == 'fixed'" |
|
69 |
+ class="flex align-center no-gutters" |
|
70 |
+ > |
|
71 |
+ <div |
|
72 |
+ v-for="(popupSize, index) of popupSizes" |
|
73 |
+ :key="index" |
|
74 |
+ class="gd-3" |
|
75 |
+ > |
|
76 |
+ <input |
|
77 |
+ type="radio" |
|
78 |
+ :id="popupSize['id']" |
|
79 |
+ class="mr5" |
|
80 |
+ v-model="popup['popupSize']" |
|
81 |
+ :value="popupSize['id']" |
|
82 |
+ ref="popupSize" |
|
83 |
+ disabled |
|
84 |
+ /> |
|
85 |
+ <label :for="popupSize['id']"> |
|
86 |
+ {{ popupSize["wdthLen"] }}X{{ popupSize["vrtcLen"] }} |
|
87 |
+ </label> |
|
88 |
+ </div> |
|
89 |
+ </div> |
|
90 |
+ <div |
|
91 |
+ v-if="popup['popupSizeType'] == 'custom'" |
|
92 |
+ class="flex align-center no-gutters" |
|
93 |
+ > |
|
94 |
+ <div class="gd-5"> |
|
95 |
+ <input |
|
96 |
+ type="text" |
|
97 |
+ class="full-input" |
|
98 |
+ v-model="popup['wdthLen']" |
|
99 |
+ disabled |
|
100 |
+ /> |
|
101 |
+ </div> |
|
102 |
+ <div class="pd10">x</div> |
|
103 |
+ <div class="gd-5"> |
|
104 |
+ <input |
|
105 |
+ type="text" |
|
106 |
+ class="full-input" |
|
107 |
+ v-model="popup['vrtcLen']" |
|
108 |
+ disabled |
|
109 |
+ /> |
|
110 |
+ </div> |
|
111 |
+ </div> |
|
112 |
+ </div> |
|
113 |
+ </div> --> |
|
114 |
+ </div> |
|
115 |
+ <div> |
|
116 |
+ <p class="form-title">업로드 형식 </p> |
|
117 |
+ <p>{{ popup['popupType'] }}</p> |
|
118 |
+ <!-- <div class="flex align-center no-gutters"> |
|
119 |
+ <div class="gd-5"> |
|
120 |
+ <input |
|
121 |
+ type="radio" |
|
122 |
+ id="image" |
|
123 |
+ class="mr5" |
|
124 |
+ v-model="popup['popupType']" |
|
125 |
+ value="image" |
|
126 |
+ disabled |
|
127 |
+ /> |
|
128 |
+ <label for="image">이미지</label> |
|
129 |
+ </div> |
|
130 |
+ <div class="gd-5"> |
|
131 |
+ <input |
|
132 |
+ type="radio" |
|
133 |
+ id="video" |
|
134 |
+ class="mr5" |
|
135 |
+ v-model="popup['popupType']" |
|
136 |
+ value="video" |
|
137 |
+ disabled |
|
138 |
+ /> |
|
139 |
+ <label for="video">영상</label> |
|
140 |
+ </div> |
|
141 |
+ </div> --> |
|
142 |
+ </div> |
|
143 |
+ <template v-if="popup['popupType'] == 'image'"> |
|
144 |
+ <div> |
|
145 |
+ <p class="form-title">이미지 첨부파일</p> |
|
146 |
+ <p v-if="fileList.length < 1">첨부파일이 없습니다.</p> |
|
147 |
+ <p v-else>{{ fileList[0]['fileNm'] + '.' + fileList[0]['extnNm'] }}</p> |
|
148 |
+ <!-- <div class="flex align-center"> |
|
149 |
+ <div class="gd-10 pl0"> |
|
150 |
+ <div class="filebox"> |
|
151 |
+ <input |
|
152 |
+ class="upload-name full-input" |
|
153 |
+ :placeholder=" |
|
154 |
+ fileList.length < 1 |
|
155 |
+ ? '첨부파일이 없습니다.' |
|
156 |
+ : fileList[0]['fileNm'] + |
|
157 |
+ '.' + |
|
158 |
+ fileList[0]['extnNm'] |
|
159 |
+ " |
|
160 |
+ disabled |
|
161 |
+ /> |
|
162 |
+ </div> |
|
163 |
+ </div> |
|
164 |
+ <div class="gd-2 pl0 pr0"> |
|
165 |
+ <button |
|
166 |
+ for="file" |
|
167 |
+ class="large-btn gray-border-btn text-ct" |
|
168 |
+ disabled |
|
169 |
+ > |
|
170 |
+ 파일찾기 |
|
171 |
+ </button> |
|
172 |
+ </div> |
|
173 |
+ </div> --> |
|
174 |
+ </div> |
|
175 |
+ <div> |
|
176 |
+ <p class="form-title">링크 URL</p> |
|
177 |
+ <p v-if="popup['linkUrl'] != null || popup['linkUrl'] != ''">{{ popup['linkUrl'] }}</p> |
|
178 |
+ <p v-else>링크가 없습니다.</p> |
|
179 |
+ <!-- <input |
|
217 | 180 |
type="text" |
218 | 181 |
class="full-input" |
219 |
- v-model="popup['vdoUrl']" |
|
220 |
- ref="vdoUrl" |
|
182 |
+ v-model="popup['linkUrl']" |
|
183 |
+ ref="linkUrl" |
|
221 | 184 |
disabled |
222 |
- /> |
|
185 |
+ /> --> |
|
223 | 186 |
</div> |
224 |
- </td> |
|
225 |
- </tr> |
|
226 |
- <tr> |
|
227 |
- <td> |
|
228 |
- <div class="gd-12 pr0"> |
|
229 |
- <label for="" class="form-title point-font2 mb10"> |
|
230 |
- 팝업 노출 페이지 |
|
231 |
- </label> |
|
232 |
- <select |
|
187 |
+ </template> |
|
188 |
+ <template v-if="popup['popupType'] == 'video'"> |
|
189 |
+ <div> |
|
190 |
+ <p class="form-title">동영상 URL</p> |
|
191 |
+ <p>{{ popup['vdoUrl'] }}</p> |
|
192 |
+ <!-- <input |
|
193 |
+ type="text" |
|
194 |
+ class="full-input" |
|
195 |
+ v-model="popup['vdoUrl']" |
|
196 |
+ ref="vdoUrl" |
|
197 |
+ disabled |
|
198 |
+ /> --> |
|
199 |
+ </div> |
|
200 |
+ </template> |
|
201 |
+ <div> |
|
202 |
+ <p class="form-title point-font2 mb10"> 팝업 노출 페이지</p> |
|
203 |
+ <p>{{ popup['pageType'] }}</p> |
|
204 |
+ <!-- <select |
|
233 | 205 |
class="full-input" |
234 | 206 |
v-model="popup['pageType']" |
235 | 207 |
ref="pageType" |
... | ... | @@ -243,13 +215,12 @@ |
243 | 215 |
> |
244 | 216 |
{{ item.cdNm }} |
245 | 217 |
</option> |
246 |
- </select> |
|
218 |
+ </select> --> |
|
247 | 219 |
</div> |
248 |
- </td> |
|
249 |
- <td> |
|
250 |
- <div class="gd-12 pl0"> |
|
251 |
- <label for="" class="form-title point-font2 mb10">순서</label> |
|
252 |
- <select |
|
220 |
+ <div> |
|
221 |
+ <p class="form-title">순서</p> |
|
222 |
+ <p>{{ popup['sn'] }}</p> |
|
223 |
+ <!-- <select |
|
253 | 224 |
class="full-input" |
254 | 225 |
v-model="popup['sn']" |
255 | 226 |
ref="sn" |
... | ... | @@ -261,37 +232,30 @@ |
261 | 232 |
<option value="3">3</option> |
262 | 233 |
<option value="4">4</option> |
263 | 234 |
<option value="5">5</option> |
264 |
- </select> |
|
235 |
+ </select> --> |
|
265 | 236 |
</div> |
266 |
- </td> |
|
267 |
- </tr> |
|
268 |
- </table> |
|
269 |
- </div> |
|
270 |
- </details> |
|
271 |
- <div class="flex justify-end align-center no-gutters"> |
|
272 |
- <div class="gd-1 mr10"> |
|
273 |
- <button class="large-btn gray-btn" @click="fnList">목록</button> |
|
274 |
- </div> |
|
275 |
- <div class="gd-1 mr10"> |
|
276 |
- <button |
|
277 |
- class="large-btn blue-btn" |
|
278 |
- @click="fnUpdate" |
|
279 |
- v-if="pageAuth.mdfcnAuthrt == 'Y'" |
|
280 |
- > |
|
281 |
- 수정 |
|
282 |
- </button> |
|
283 |
- </div> |
|
284 |
- <div class="gd-1"> |
|
285 |
- <button |
|
286 |
- class="large-btn red-border-btn" |
|
287 |
- @click="fnDelete" |
|
288 |
- v-if="pageAuth.delAuthrt == 'Y'" |
|
289 |
- > |
|
290 |
- 삭제 |
|
291 |
- </button> |
|
237 |
+ </div> |
|
238 |
+ </div> |
|
292 | 239 |
</div> |
293 | 240 |
</div> |
294 | 241 |
</div> |
242 |
+ <div class="btn-wrap"> |
|
243 |
+ <button class="btn sm tertiary" @click="fnList">목록</button> |
|
244 |
+ <button |
|
245 |
+ class="btn sm primary" |
|
246 |
+ @click="fnUpdate" |
|
247 |
+ v-if="pageAuth.mdfcnAuthrt == 'Y'" |
|
248 |
+ > |
|
249 |
+ 수정 |
|
250 |
+ </button> |
|
251 |
+ <button |
|
252 |
+ class="btn sm red" |
|
253 |
+ @click="fnDelete" |
|
254 |
+ v-if="pageAuth.delAuthrt == 'Y'" |
|
255 |
+ > |
|
256 |
+ 삭제 |
|
257 |
+ </button> |
|
258 |
+ </div> |
|
295 | 259 |
</template> |
296 | 260 |
|
297 | 261 |
<script> |
--- client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
+++ client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 |
<div class="page-title"> |
6 | 6 |
<p>공통코드관리</p> |
7 | 7 |
</div> |
8 |
- <PagiNavigationBar /> |
|
8 |
+ |
|
9 | 9 |
</div> |
10 | 10 |
<div class="setting-box"> |
11 | 11 |
<div class="node-zone"> |
... | ... | @@ -102,7 +102,7 @@ |
102 | 102 |
<script> |
103 | 103 |
import draggable from "vuedraggable"; |
104 | 104 |
import Hierachy from "../../../../component/hierachy/HierachyDraggable.vue"; |
105 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
105 |
+ |
|
106 | 106 |
import { |
107 | 107 |
findAll, |
108 | 108 |
findByCd, |
... | ... | @@ -116,7 +116,6 @@ |
116 | 116 |
components: { |
117 | 117 |
draggable: draggable, |
118 | 118 |
Hierachy: Hierachy, |
119 |
- PagiNavigationBar: PagiNavigationBar, |
|
120 | 119 |
}, |
121 | 120 |
data() { |
122 | 121 |
return { |
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>콘텐츠 유형 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
... | ... | @@ -114,12 +114,11 @@ |
114 | 114 |
import { findByContsType } from "../../../../../resources/api/contsType"; |
115 | 115 |
import { updateProc } from "../../../../../resources/api/contsType"; |
116 | 116 |
import validationParams from "../../../../../resources/js/validateParams"; |
117 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
117 |
+ |
|
118 | 118 |
|
119 | 119 |
export default { |
120 | 120 |
mixins: [validationParams], |
121 | 121 |
components: { |
122 |
- PagiNavigationBar: PagiNavigationBar, |
|
123 | 122 |
}, |
124 | 123 |
data() { |
125 | 124 |
return { |
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>콘텐츠 유형 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="search-bar"> |
12 | 12 |
<input |
... | ... | @@ -56,7 +56,7 @@ |
56 | 56 |
import { toRaw } from "vue"; |
57 | 57 |
import queryParams from "../../../../../resources/js/queryParams"; |
58 | 58 |
import { defaultSearchParams } from "../../../../../resources/js/defaultSearchParams"; |
59 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
59 |
+ |
|
60 | 60 |
|
61 | 61 |
// API |
62 | 62 |
import { findAll } from "../../../../../resources/api/contsType"; |
... | ... | @@ -66,7 +66,6 @@ |
66 | 66 |
components: { |
67 | 67 |
ListTable: ListTable, |
68 | 68 |
PaginationButton: PaginationButton, |
69 |
- PagiNavigationBar: PagiNavigationBar, |
|
70 | 69 |
}, |
71 | 70 |
data() { |
72 | 71 |
return { |
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>콘텐츠 유형 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
... | ... | @@ -121,7 +121,7 @@ |
121 | 121 |
findByContsType, |
122 | 122 |
deleteProc, |
123 | 123 |
} from "../../../../../resources/api/contsType"; |
124 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
124 |
+ |
|
125 | 125 |
|
126 | 126 |
export default { |
127 | 127 |
data() { |
... | ... | @@ -133,7 +133,6 @@ |
133 | 133 |
}; |
134 | 134 |
}, |
135 | 135 |
components: { |
136 |
- PagiNavigationBar: PagiNavigationBar, |
|
137 | 136 |
}, |
138 | 137 |
created() { |
139 | 138 |
this.fnViewDetail(); |
--- client/views/pages/adm/statistics/BbsStatistics.vue
+++ client/views/pages/adm/statistics/BbsStatistics.vue
... | ... | @@ -1,92 +1,111 @@ |
1 | 1 |
<template> |
2 |
- <div class="content admin-style overflow-y"> |
|
3 |
- <div class="admin-page-title point-font2 mb30"> |
|
4 |
- <p>게시판 접속 통계</p> |
|
5 |
- </div> |
|
6 |
- <div class="flex justify-between aling-center no-gutters mb30"> |
|
7 |
- <div class="gd-6 flex justify-start align-center"> |
|
8 |
- <div class="gd-4 pl0"> |
|
9 |
- <input |
|
10 |
- type="date" |
|
11 |
- class="full-input" |
|
12 |
- v-model="searchDate.startDt" |
|
13 |
- @change="validateDate($event, 'startDt')" |
|
14 |
- /> |
|
2 |
+ <div class="content-zone full-page"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="title-zone"> |
|
6 |
+ <div class="page-title"> |
|
7 |
+ <p>게시판 접속 통계</p> |
|
8 |
+ </div> |
|
9 |
+ |
|
15 | 10 |
</div> |
16 |
- <div>-</div> |
|
17 |
- <div class="gd-4"> |
|
18 |
- <input |
|
19 |
- type="date" |
|
20 |
- class="full-input" |
|
21 |
- v-model="searchDate.endDt" |
|
22 |
- @change="validateDate($event, 'endDt')" |
|
23 |
- /> |
|
11 |
+ <div class="search-bar mb30"> |
|
12 |
+ <div class="form-control sm cal"> |
|
13 |
+ <VueDatePicker |
|
14 |
+ InlineOptions |
|
15 |
+ placeholder="시작일" |
|
16 |
+ locale="ko" |
|
17 |
+ :enable-time-picker="false" |
|
18 |
+ :format="formatDate" |
|
19 |
+ v-model="searchDate.startDt" |
|
20 |
+ @update:model-value="validateDate($event, 'startDt')" |
|
21 |
+ /> |
|
22 |
+ </div> |
|
23 |
+ <!-- <input |
|
24 |
+ type="date" |
|
25 |
+ class="form-control sm datepicker" |
|
26 |
+ v-model="searchDate.startDt" |
|
27 |
+ @change="validateDate($event, 'startDt')" |
|
28 |
+ /> --> |
|
29 |
+ <div class="mark">-</div> |
|
30 |
+ <div class="form-control sm cal"> |
|
31 |
+ <VueDatePicker |
|
32 |
+ InlineOptions |
|
33 |
+ placeholder="종료일" |
|
34 |
+ locale="ko" |
|
35 |
+ :enable-time-picker="false" |
|
36 |
+ :format="formatDate" |
|
37 |
+ v-model="searchDate.endDt" |
|
38 |
+ @update:model-value="validateDate($event, 'endDt')" |
|
39 |
+ /> |
|
40 |
+ </div> |
|
41 |
+ <!-- <input |
|
42 |
+ type="date" |
|
43 |
+ class="form-control sm datepicker" |
|
44 |
+ v-model="searchDate.endDt" |
|
45 |
+ @change="validateDate($event, 'endDt')" |
|
46 |
+ /> --> |
|
47 |
+ <button class="btn sm primary" @click="axiosSelectList"> |
|
48 |
+ 조회 |
|
49 |
+ </button> |
|
50 |
+ <button |
|
51 |
+ class="large-btn green-border-btn" |
|
52 |
+ v-if="pageAuth.fileDwnldAuthrt == 'Y' && bbsCnt > 0" |
|
53 |
+ @click="fnDownload" |
|
54 |
+ > |
|
55 |
+ 다운로드 |
|
56 |
+ </button> |
|
24 | 57 |
</div> |
25 |
- <div class="gd-2"> |
|
26 |
- <button class="large-btn blue-border-btn" @click="axiosSelectList"> |
|
27 |
- 조회 |
|
28 |
- </button> |
|
58 |
+ <div class="chart-zone mb30" v-show="bbsCnt > 0"> |
|
59 |
+ <div class="chart-info"> |
|
60 |
+ <p class="detail-text"> |
|
61 |
+ 방문자 총 |
|
62 |
+ <span class="detail-bold blue">{{ totalCnt }}</span> |
|
63 |
+ 명 |
|
64 |
+ </p> |
|
65 |
+ </div> |
|
66 |
+ <div class="chart-wrap" ref="chartdiv" :style="heightStyle"> |
|
67 |
+ <ClusteredBarChart :chartData="chartData" columnX="menu" /> |
|
68 |
+ </div> |
|
69 |
+ </div> |
|
70 |
+ <div class="tbl-wrap"> |
|
71 |
+ <table class="tbl data mixing"> |
|
72 |
+ <colgroup> |
|
73 |
+ <col width="25%" /> |
|
74 |
+ <col width="25%" /> |
|
75 |
+ <col width="25%" /> |
|
76 |
+ <col width="25%" /> |
|
77 |
+ </colgroup> |
|
78 |
+ <thead> |
|
79 |
+ <tr> |
|
80 |
+ <th rowspan="2">구분</th> |
|
81 |
+ <th colspan="3">사용자 구분</th> |
|
82 |
+ </tr> |
|
83 |
+ <tr> |
|
84 |
+ <th class="text-ct">관리자</th> |
|
85 |
+ <th class="text-ct">사용자</th> |
|
86 |
+ <th class="text-ct">비로그인 사용자</th> |
|
87 |
+ </tr> |
|
88 |
+ </thead> |
|
89 |
+ <tbody> |
|
90 |
+ <template v-if="bbsCnt > 0"> |
|
91 |
+ <tr v-for="(tr, index) of chartData" :key="index"> |
|
92 |
+ <td class="text-ct">{{ tr.menu }}</td> |
|
93 |
+ <td class="text-rg">{{ tr["관리자"] }}</td> |
|
94 |
+ <td class="text-rg">{{ tr["사용자"] }}</td> |
|
95 |
+ <td class="text-rg">{{ tr["비로그인 사용자"] }}</td> |
|
96 |
+ </tr> |
|
97 |
+ </template> |
|
98 |
+ <template v-else> |
|
99 |
+ <tr> |
|
100 |
+ <td colspan="4" class="text-ct"> |
|
101 |
+ 등록된 정보가 존재하지 않습니다. |
|
102 |
+ </td> |
|
103 |
+ </tr> |
|
104 |
+ </template> |
|
105 |
+ </tbody> |
|
106 |
+ </table> |
|
29 | 107 |
</div> |
30 | 108 |
</div> |
31 |
- <div class="gd-1"> |
|
32 |
- <button |
|
33 |
- class="large-btn green-border-btn" |
|
34 |
- v-if="pageAuth.fileDwnldAuthrt == 'Y' && bbsCnt > 0" |
|
35 |
- @click="fnDownload" |
|
36 |
- > |
|
37 |
- 다운로드 |
|
38 |
- </button> |
|
39 |
- </div> |
|
40 |
- </div> |
|
41 |
- <div class="chart-zone mb30" v-show="bbsCnt > 0"> |
|
42 |
- <div class="chart-info"> |
|
43 |
- <p class="detail-text"> |
|
44 |
- 방문자 총 |
|
45 |
- <span class="detail-bold blue">{{ totalCnt }}</span> |
|
46 |
- 명 |
|
47 |
- </p> |
|
48 |
- </div> |
|
49 |
- <div class="chart-wrap" ref="chartdiv" :style="heightStyle"> |
|
50 |
- <ClusteredBarChart :chartData="chartData" columnX="menu" /> |
|
51 |
- </div> |
|
52 |
- </div> |
|
53 |
- <div class="table-zone"> |
|
54 |
- <table class="list-table admin-list complex-table"> |
|
55 |
- <colgroup> |
|
56 |
- <col width="25%" /> |
|
57 |
- <col width="25%" /> |
|
58 |
- <col width="25%" /> |
|
59 |
- <col width="25%" /> |
|
60 |
- </colgroup> |
|
61 |
- <thead> |
|
62 |
- <tr> |
|
63 |
- <th rowspan="2">구분</th> |
|
64 |
- <th colspan="3">사용자 구분</th> |
|
65 |
- </tr> |
|
66 |
- <tr> |
|
67 |
- <th class="text-ct">관리자</th> |
|
68 |
- <th class="text-ct">사용자</th> |
|
69 |
- <th class="text-ct">비로그인 사용자</th> |
|
70 |
- </tr> |
|
71 |
- </thead> |
|
72 |
- <tbody> |
|
73 |
- <template v-if="bbsCnt > 0"> |
|
74 |
- <tr v-for="(tr, index) of chartData" :key="index"> |
|
75 |
- <td class="text-ct">{{ tr.menu }}</td> |
|
76 |
- <td class="text-rg">{{ tr["관리자"] }}</td> |
|
77 |
- <td class="text-rg">{{ tr["사용자"] }}</td> |
|
78 |
- <td class="text-rg">{{ tr["비로그인 사용자"] }}</td> |
|
79 |
- </tr> |
|
80 |
- </template> |
|
81 |
- <template v-else> |
|
82 |
- <tr> |
|
83 |
- <td colspan="4" class="text-ct"> |
|
84 |
- 등록된 정보가 존재하지 않습니다. |
|
85 |
- </td> |
|
86 |
- </tr> |
|
87 |
- </template> |
|
88 |
- </tbody> |
|
89 |
- </table> |
|
90 | 109 |
</div> |
91 | 110 |
</div> |
92 | 111 |
</template> |
... | ... | @@ -228,6 +247,14 @@ |
228 | 247 |
}); |
229 | 248 |
}); |
230 | 249 |
}, |
250 |
+ |
|
251 |
+ // 날짜포맷 |
|
252 |
+ formatDate(date) { |
|
253 |
+ const year = date.getFullYear(); |
|
254 |
+ const month = ('00' + (date.getMonth() + 1)).slice(-2); |
|
255 |
+ const day = ('00' + date.getDate()).slice(-2); |
|
256 |
+ return `${year}-${month}-${day}`; |
|
257 |
+ } |
|
231 | 258 |
}, |
232 | 259 |
}; |
233 | 260 |
</script>(No newline at end of file) |
--- client/views/pages/adm/statistics/MenuStatistics.vue
+++ client/views/pages/adm/statistics/MenuStatistics.vue
... | ... | @@ -1,92 +1,111 @@ |
1 | 1 |
<template> |
2 |
- <div class="content admin-style overflow-y"> |
|
3 |
- <div class="admin-page-title point-font2 mb30"> |
|
4 |
- <p>메뉴별 접속 통계</p> |
|
5 |
- </div> |
|
6 |
- <div class="flex justify-between aling-center no-gutters mb30"> |
|
7 |
- <div class="gd-6 flex justify-start align-center"> |
|
8 |
- <div class="gd-4 pl0"> |
|
9 |
- <input |
|
10 |
- type="date" |
|
11 |
- class="full-input" |
|
12 |
- v-model="searchDate.startDt" |
|
13 |
- @change="validateDate($event, 'startDt')" |
|
14 |
- /> |
|
2 |
+ <div class="content-zone full-page"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="title-zone"> |
|
6 |
+ <div class="page-title"> |
|
7 |
+ <p>메뉴별 접속 통계</p> |
|
8 |
+ </div> |
|
9 |
+ |
|
15 | 10 |
</div> |
16 |
- <div>-</div> |
|
17 |
- <div class="gd-4"> |
|
18 |
- <input |
|
19 |
- type="date" |
|
20 |
- class="full-input" |
|
21 |
- v-model="searchDate.endDt" |
|
22 |
- @change="validateDate($event, 'endDt')" |
|
23 |
- /> |
|
11 |
+ <div class="search-bar mb30"> |
|
12 |
+ <div class="form-control sm cal"> |
|
13 |
+ <VueDatePicker |
|
14 |
+ InlineOptions |
|
15 |
+ placeholder="시작일" |
|
16 |
+ locale="ko" |
|
17 |
+ :enable-time-picker="false" |
|
18 |
+ :format="formatDate" |
|
19 |
+ v-model="searchDate.startDt" |
|
20 |
+ @update:model-value="validateDate($event, 'startDt')" |
|
21 |
+ /> |
|
22 |
+ </div> |
|
23 |
+ <!-- <input |
|
24 |
+ type="date" |
|
25 |
+ class="form-control sm" |
|
26 |
+ v-model="searchDate.startDt" |
|
27 |
+ @change="validateDate($event, 'startDt')" |
|
28 |
+ /> --> |
|
29 |
+ <div>-</div> |
|
30 |
+ <div class="form-control sm cal"> |
|
31 |
+ <VueDatePicker |
|
32 |
+ InlineOptions |
|
33 |
+ placeholder="종료일" |
|
34 |
+ locale="ko" |
|
35 |
+ :enable-time-picker="false" |
|
36 |
+ :format="formatDate" |
|
37 |
+ v-model="searchDate.endDt" |
|
38 |
+ @update:model-value="validateDate($event, 'endDt')" |
|
39 |
+ /> |
|
40 |
+ </div> |
|
41 |
+ <!-- <input |
|
42 |
+ type="date" |
|
43 |
+ class="form-control sm" |
|
44 |
+ v-model="searchDate.endDt" |
|
45 |
+ @change="validateDate($event, 'endDt')" |
|
46 |
+ /> --> |
|
47 |
+ <button class="btn sm primary" @click="axiosSelectList"> |
|
48 |
+ 조회 |
|
49 |
+ </button> |
|
50 |
+ <button |
|
51 |
+ class="large-btn green-border-btn" |
|
52 |
+ v-if="pageAuth.fileDwnldAuthrt == 'Y'" |
|
53 |
+ @click="fnDownload" |
|
54 |
+ > |
|
55 |
+ 다운로드 |
|
56 |
+ </button> |
|
24 | 57 |
</div> |
25 |
- <div class="gd-2"> |
|
26 |
- <button class="large-btn blue-border-btn" @click="axiosSelectList"> |
|
27 |
- 조회 |
|
28 |
- </button> |
|
58 |
+ <div class="chart-zone mb30" v-show="menuCnt > 0"> |
|
59 |
+ <div class="chart-info"> |
|
60 |
+ <p class="detail-text"> |
|
61 |
+ 방문자 총 |
|
62 |
+ <span class="detail-bold blue">{{ totalCnt }}</span> |
|
63 |
+ 명 |
|
64 |
+ </p> |
|
65 |
+ </div> |
|
66 |
+ <div class="chart-wrap" ref="chartdiv" :style="heightStyle"> |
|
67 |
+ <ClusteredBarChart :chartData="chartData" columnX="menu" /> |
|
68 |
+ </div> |
|
69 |
+ </div> |
|
70 |
+ <div class="tbl-wrap"> |
|
71 |
+ <table class="tbl data mixing"> |
|
72 |
+ <colgroup> |
|
73 |
+ <col width="25%" /> |
|
74 |
+ <col width="25%" /> |
|
75 |
+ <col width="25%" /> |
|
76 |
+ <col width="25%" /> |
|
77 |
+ </colgroup> |
|
78 |
+ <thead> |
|
79 |
+ <tr> |
|
80 |
+ <th rowspan="2">구분</th> |
|
81 |
+ <th colspan="3">사용자 구분</th> |
|
82 |
+ </tr> |
|
83 |
+ <tr> |
|
84 |
+ <th class="text-ct">관리자</th> |
|
85 |
+ <th class="text-ct">사용자</th> |
|
86 |
+ <th class="text-ct">비로그인 사용자</th> |
|
87 |
+ </tr> |
|
88 |
+ </thead> |
|
89 |
+ <tbody> |
|
90 |
+ <template v-if="menuCnt > 0"> |
|
91 |
+ <tr v-for="(tr, index) of chartData" :key="index"> |
|
92 |
+ <td class="text-ct">{{ tr.menu }}</td> |
|
93 |
+ <td class="text-rg">{{ tr["관리자"] }}</td> |
|
94 |
+ <td class="text-rg">{{ tr["사용자"] }}</td> |
|
95 |
+ <td class="text-rg">{{ tr["비로그인 사용자"] }}</td> |
|
96 |
+ </tr> |
|
97 |
+ </template> |
|
98 |
+ <template v-else> |
|
99 |
+ <tr> |
|
100 |
+ <td colspan="4" class="text-ct"> |
|
101 |
+ 등록된 정보가 존재하지 않습니다. |
|
102 |
+ </td> |
|
103 |
+ </tr> |
|
104 |
+ </template> |
|
105 |
+ </tbody> |
|
106 |
+ </table> |
|
29 | 107 |
</div> |
30 | 108 |
</div> |
31 |
- <div class="gd-1"> |
|
32 |
- <button |
|
33 |
- class="large-btn green-border-btn" |
|
34 |
- v-if="pageAuth.fileDwnldAuthrt == 'Y'" |
|
35 |
- @click="fnDownload" |
|
36 |
- > |
|
37 |
- 다운로드 |
|
38 |
- </button> |
|
39 |
- </div> |
|
40 |
- </div> |
|
41 |
- <div class="chart-zone mb30" v-show="menuCnt > 0"> |
|
42 |
- <div class="chart-info"> |
|
43 |
- <p class="detail-text"> |
|
44 |
- 방문자 총 |
|
45 |
- <span class="detail-bold blue">{{ totalCnt }}</span> |
|
46 |
- 명 |
|
47 |
- </p> |
|
48 |
- </div> |
|
49 |
- <div class="chart-wrap" ref="chartdiv" :style="heightStyle"> |
|
50 |
- <ClusteredBarChart :chartData="chartData" columnX="menu" /> |
|
51 |
- </div> |
|
52 |
- </div> |
|
53 |
- <div class="table-zone"> |
|
54 |
- <table class="list-table admin-list complex-table"> |
|
55 |
- <colgroup> |
|
56 |
- <col width="25%" /> |
|
57 |
- <col width="25%" /> |
|
58 |
- <col width="25%" /> |
|
59 |
- <col width="25%" /> |
|
60 |
- </colgroup> |
|
61 |
- <thead> |
|
62 |
- <tr> |
|
63 |
- <th rowspan="2">구분</th> |
|
64 |
- <th colspan="3">사용자 구분</th> |
|
65 |
- </tr> |
|
66 |
- <tr> |
|
67 |
- <th class="text-ct">관리자</th> |
|
68 |
- <th class="text-ct">사용자</th> |
|
69 |
- <th class="text-ct">비로그인 사용자</th> |
|
70 |
- </tr> |
|
71 |
- </thead> |
|
72 |
- <tbody> |
|
73 |
- <template v-if="menuCnt > 0"> |
|
74 |
- <tr v-for="(tr, index) of chartData" :key="index"> |
|
75 |
- <td class="text-ct">{{ tr.menu }}</td> |
|
76 |
- <td class="text-rg">{{ tr["관리자"] }}</td> |
|
77 |
- <td class="text-rg">{{ tr["사용자"] }}</td> |
|
78 |
- <td class="text-rg">{{ tr["비로그인 사용자"] }}</td> |
|
79 |
- </tr> |
|
80 |
- </template> |
|
81 |
- <template v-else> |
|
82 |
- <tr> |
|
83 |
- <td colspan="4" class="text-ct"> |
|
84 |
- 등록된 정보가 존재하지 않습니다. |
|
85 |
- </td> |
|
86 |
- </tr> |
|
87 |
- </template> |
|
88 |
- </tbody> |
|
89 |
- </table> |
|
90 | 109 |
</div> |
91 | 110 |
</div> |
92 | 111 |
</template> |
... | ... | @@ -227,6 +246,13 @@ |
227 | 246 |
}); |
228 | 247 |
}); |
229 | 248 |
}, |
249 |
+ // 날짜포맷 |
|
250 |
+ formatDate(date) { |
|
251 |
+ const year = date.getFullYear(); |
|
252 |
+ const month = ('00' + (date.getMonth() + 1)).slice(-2); |
|
253 |
+ const day = ('00' + date.getDate()).slice(-2); |
|
254 |
+ return `${year}-${month}-${day}`; |
|
255 |
+ } |
|
230 | 256 |
}, |
231 | 257 |
}; |
232 | 258 |
</script>(No newline at end of file) |
--- client/views/pages/adm/statistics/UserStatistics.vue
+++ client/views/pages/adm/statistics/UserStatistics.vue
... | ... | @@ -1,85 +1,108 @@ |
1 | 1 |
<template> |
2 |
- <div class="content admin-style overflow-y"> |
|
3 |
- <div class="admin-page-title point-font2 mb30"> |
|
4 |
- <p>사용자 접속 통계</p> |
|
5 |
- </div> |
|
6 |
- <div class="flex justify-between aling-center no-gutters mb30"> |
|
7 |
- <div class="gd-6 flex justify-start align-center"> |
|
8 |
- <div class="gd-4 pl0"> |
|
9 |
- <input |
|
2 |
+ <div class="content-zone full-page"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="title-zone"> |
|
6 |
+ <div class="page-title"> |
|
7 |
+ <p>사용자 접속 통계</p> |
|
8 |
+ </div> |
|
9 |
+ |
|
10 |
+ </div> |
|
11 |
+ <div class="search-bar mb30"> |
|
12 |
+ <div class="form-control sm cal"> |
|
13 |
+ <VueDatePicker |
|
14 |
+ InlineOptions |
|
15 |
+ placeholder="종료일" |
|
16 |
+ locale="ko" |
|
17 |
+ :enable-time-picker="false" |
|
18 |
+ :format="formatDate" |
|
19 |
+ v-model="searchDate.startDt" |
|
20 |
+ @update:model-value="validateDate($event, 'startDt')" |
|
21 |
+ /> |
|
22 |
+ </div> |
|
23 |
+ <!-- <input |
|
10 | 24 |
type="date" |
11 |
- class="full-input" |
|
25 |
+ class="form-control sm" |
|
12 | 26 |
v-model="searchDate.startDt" |
13 | 27 |
@change="validateDate($event, 'startDt')" |
14 |
- /> |
|
15 |
- </div> |
|
16 |
- <div>-</div> |
|
17 |
- <div class="gd-4"> |
|
18 |
- <input |
|
28 |
+ /> --> |
|
29 |
+ <div class="mark">-</div> |
|
30 |
+ <div class="form-control sm cal"> |
|
31 |
+ <VueDatePicker |
|
32 |
+ InlineOptions |
|
33 |
+ placeholder="종료일" |
|
34 |
+ locale="ko" |
|
35 |
+ :enable-time-picker="false" |
|
36 |
+ :format="formatDate" |
|
37 |
+ v-model="searchDate.endDt" |
|
38 |
+ @update:model-value="validateDate($event, 'endDt')" |
|
39 |
+ /> |
|
40 |
+ </div> |
|
41 |
+ <!-- <input |
|
19 | 42 |
type="date" |
20 |
- class="full-input" |
|
43 |
+ class="form-control sm" |
|
21 | 44 |
v-model="searchDate.endDt" |
22 | 45 |
@change="validateDate($event, 'endDt')" |
23 |
- /> |
|
24 |
- </div> |
|
25 |
- <div class="gd-2"> |
|
26 |
- <button class="large-btn blue-border-btn" @click="axiosSelectList"> |
|
46 |
+ /> --> |
|
47 |
+ |
|
48 |
+ |
|
49 |
+ <button class="btn sm primary" @click="axiosSelectList"> |
|
27 | 50 |
조회 |
28 | 51 |
</button> |
52 |
+ |
|
53 |
+ <button |
|
54 |
+ class="large-btn green-border-btn" |
|
55 |
+ v-if="pageAuth.fileDwnldAuthrt == 'Y'" |
|
56 |
+ @click="fnDownload" |
|
57 |
+ > |
|
58 |
+ 다운로드 |
|
59 |
+ </button> |
|
60 |
+ |
|
61 |
+ </div> |
|
62 |
+ <div class="chart-zone mb30"> |
|
63 |
+ <div class="chart-info"> |
|
64 |
+ <p class="detail-text"> |
|
65 |
+ 방문자 총 |
|
66 |
+ <span class="detail-bold blue">{{ totalCnt }}</span> |
|
67 |
+ 명 |
|
68 |
+ </p> |
|
69 |
+ </div> |
|
70 |
+ <div class="chart-wrap" ref="chartdiv"> |
|
71 |
+ <ClusteredColumnChart :chartData="chartData" columnX="date" /> |
|
72 |
+ </div> |
|
73 |
+ </div> |
|
74 |
+ <div class="tbl-wrap"> |
|
75 |
+ <table class="tbl data mixing"> |
|
76 |
+ <colgroup> |
|
77 |
+ <template v-for="(key, index) of chartData[0]" :key="index"> |
|
78 |
+ <col |
|
79 |
+ v-if="index > 1" |
|
80 |
+ :width="100 / chartData[0].length - 2 + '%'" |
|
81 |
+ /> |
|
82 |
+ </template> |
|
83 |
+ </colgroup> |
|
84 |
+ <thead> |
|
85 |
+ <tr> |
|
86 |
+ <th rowspan="2">구분</th> |
|
87 |
+ <th colspan="3">사용자 구분</th> |
|
88 |
+ </tr> |
|
89 |
+ <tr> |
|
90 |
+ <th class="text-ct">관리자</th> |
|
91 |
+ <th class="text-ct">사용자</th> |
|
92 |
+ <th class="text-ct">비로그인 사용자</th> |
|
93 |
+ </tr> |
|
94 |
+ </thead> |
|
95 |
+ <tbody> |
|
96 |
+ <tr v-for="(tr, index) of chartData" :key="index"> |
|
97 |
+ <td class="text-ct">{{ tr.date }}</td> |
|
98 |
+ <td class="text-rg">{{ tr["관리자"] }}</td> |
|
99 |
+ <td class="text-rg">{{ tr["사용자"] }}</td> |
|
100 |
+ <td class="text-rg">{{ tr["비로그인 사용자"] }}</td> |
|
101 |
+ </tr> |
|
102 |
+ </tbody> |
|
103 |
+ </table> |
|
29 | 104 |
</div> |
30 | 105 |
</div> |
31 |
- <div class="gd-1"> |
|
32 |
- <button |
|
33 |
- class="large-btn green-border-btn" |
|
34 |
- v-if="pageAuth.fileDwnldAuthrt == 'Y'" |
|
35 |
- @click="fnDownload" |
|
36 |
- > |
|
37 |
- 다운로드 |
|
38 |
- </button> |
|
39 |
- </div> |
|
40 |
- </div> |
|
41 |
- <div class="chart-zone mb30"> |
|
42 |
- <div class="chart-info"> |
|
43 |
- <p class="detail-text"> |
|
44 |
- 방문자 총 |
|
45 |
- <span class="detail-bold blue">{{ totalCnt }}</span> |
|
46 |
- 명 |
|
47 |
- </p> |
|
48 |
- </div> |
|
49 |
- <div class="chart-wrap" ref="chartdiv"> |
|
50 |
- <ClusteredColumnChart :chartData="chartData" columnX="date" /> |
|
51 |
- </div> |
|
52 |
- </div> |
|
53 |
- <div class="table-zone"> |
|
54 |
- <table class="list-table admin-list complex-table"> |
|
55 |
- <colgroup> |
|
56 |
- <template v-for="(key, index) of chartData[0]" :key="index"> |
|
57 |
- <col |
|
58 |
- v-if="index > 1" |
|
59 |
- :width="100 / chartData[0].length - 2 + '%'" |
|
60 |
- /> |
|
61 |
- </template> |
|
62 |
- </colgroup> |
|
63 |
- <thead> |
|
64 |
- <tr> |
|
65 |
- <th rowspan="2">구분</th> |
|
66 |
- <th colspan="3">사용자 구분</th> |
|
67 |
- </tr> |
|
68 |
- <tr> |
|
69 |
- <th class="text-ct">관리자</th> |
|
70 |
- <th class="text-ct">사용자</th> |
|
71 |
- <th class="text-ct">비로그인 사용자</th> |
|
72 |
- </tr> |
|
73 |
- </thead> |
|
74 |
- <tbody> |
|
75 |
- <tr v-for="(tr, index) of chartData" :key="index"> |
|
76 |
- <td class="text-ct">{{ tr.date }}</td> |
|
77 |
- <td class="text-rg">{{ tr["관리자"] }}</td> |
|
78 |
- <td class="text-rg">{{ tr["사용자"] }}</td> |
|
79 |
- <td class="text-rg">{{ tr["비로그인 사용자"] }}</td> |
|
80 |
- </tr> |
|
81 |
- </tbody> |
|
82 |
- </table> |
|
83 | 106 |
</div> |
84 | 107 |
</div> |
85 | 108 |
</template> |
... | ... | @@ -212,6 +235,13 @@ |
212 | 235 |
}); |
213 | 236 |
}); |
214 | 237 |
}, |
238 |
+ // 날짜포맷 |
|
239 |
+ formatDate(date) { |
|
240 |
+ const year = date.getFullYear(); |
|
241 |
+ const month = ('00' + (date.getMonth() + 1)).slice(-2); |
|
242 |
+ const day = ('00' + date.getDate()).slice(-2); |
|
243 |
+ return `${year}-${month}-${day}`; |
|
244 |
+ } |
|
215 | 245 |
}, |
216 | 246 |
}; |
217 | 247 |
</script>(No newline at end of file) |
--- client/views/pages/adm/system/LoginPolicy/LoginPolicy.vue
+++ client/views/pages/adm/system/LoginPolicy/LoginPolicy.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>로그인 정책 설정</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div open class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
--- client/views/pages/adm/system/contextPath/ContextPathSelectList.vue
+++ client/views/pages/adm/system/contextPath/ContextPathSelectList.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>컨텍스트 패스 관리</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="search-bar "> |
12 | 12 |
<input |
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>IP접근제어</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
... | ... | @@ -48,11 +48,10 @@ |
48 | 48 |
|
49 | 49 |
<script> |
50 | 50 |
import { findByAcces, save, update } from '../../../../../resources/api/accesCtrl' |
51 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
51 |
+ |
|
52 | 52 |
|
53 | 53 |
export default { |
54 | 54 |
components: { |
55 |
- PagiNavigationBar: PagiNavigationBar, |
|
56 | 55 |
}, |
57 | 56 |
data() { |
58 | 57 |
return { |
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>IP접근제어</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div class="search-bar"> |
12 | 12 |
<select |
... | ... | @@ -72,14 +72,13 @@ |
72 | 72 |
import { toRaw } from "vue"; |
73 | 73 |
import queryParams from "../../../../../resources/js/queryParams"; |
74 | 74 |
import { defaultSearchParams } from "../../../../../resources/js/defaultSearchParams"; |
75 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
75 |
+ |
|
76 | 76 |
|
77 | 77 |
export default { |
78 | 78 |
mixins: [queryParams], |
79 | 79 |
components: { |
80 | 80 |
ListTable: ListTable, |
81 | 81 |
PaginationButton: PaginationButton, |
82 |
- PagiNavigationBar: PagiNavigationBar, |
|
83 | 82 |
}, |
84 | 83 |
data() { |
85 | 84 |
return { |
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="page-title"> |
7 | 7 |
<p>IP접근제어</p> |
8 | 8 |
</div> |
9 |
- <PagiNavigationBar /> |
|
9 |
+ |
|
10 | 10 |
</div> |
11 | 11 |
<div open class="form-box"> |
12 | 12 |
<div class="form-box-title"> |
... | ... | @@ -53,11 +53,10 @@ |
53 | 53 |
<script> |
54 | 54 |
import { findByAcces, del } from "../../../../../resources/api/accesCtrl"; |
55 | 55 |
import queryParams from "../../../../../resources/js/queryParams"; |
56 |
-import PagiNavigationBar from "../../../../component/paginavigationbar/PagiNavigationBar.vue"; |
|
56 |
+ |
|
57 | 57 |
export default { |
58 | 58 |
mixins: [queryParams], |
59 | 59 |
components: { |
60 |
- PagiNavigationBar: PagiNavigationBar, |
|
61 | 60 |
}, |
62 | 61 |
data() { |
63 | 62 |
return { |
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?