
--- client/resources/css/common.css
+++ client/resources/css/common.css
... | ... | @@ -18,40 +18,20 @@ |
18 | 18 |
align-items: center; |
19 | 19 |
} |
20 | 20 |
|
21 |
+.main-wrap > div{ |
|
22 |
+ height: 100%; |
|
23 |
+} |
|
21 | 24 |
|
22 | 25 |
.content-box { |
23 | 26 |
width: 100%; |
24 |
- padding: 15px; |
|
27 |
+ height: 100%; |
|
28 |
+ padding: 30px; |
|
25 | 29 |
background-color: #fff; |
26 | 30 |
height: 100%; |
27 | 31 |
} |
28 | 32 |
|
29 |
-.content-head { |
|
30 |
- width: 100%; |
|
31 |
- border-bottom: 1px solid #eee; |
|
32 |
- padding: 15px 0; |
|
33 |
-} |
|
34 |
- |
|
35 |
-.content-subtitle { |
|
36 |
- color: #aaa; |
|
37 |
- margin-bottom: 15px; |
|
38 |
-} |
|
39 |
- |
|
40 |
-.content-body { |
|
41 |
- padding: 30px 0; |
|
42 |
-} |
|
43 |
- |
|
44 |
-.content-simple{ |
|
45 |
- font-size: 1.4rem; |
|
46 |
- font-weight: 700; |
|
47 |
- margin-bottom: 15px; |
|
48 |
- line-height: 160%; |
|
49 |
-} |
|
50 |
- |
|
51 |
-.item-box li { |
|
52 |
- background-color: #fff; |
|
53 |
- padding: 30px; |
|
54 |
- border: 1px solid #ddd; |
|
33 |
+.main-title{ |
|
34 |
+ padding: 10px 0; |
|
55 | 35 |
} |
56 | 36 |
|
57 | 37 |
/* btn */ |
... | ... | @@ -102,142 +82,3 @@ |
102 | 82 |
margin-left: 5px; |
103 | 83 |
} |
104 | 84 |
|
105 |
- |
|
106 |
-/* 토글 */ |
|
107 |
-.toggle_box { |
|
108 |
- display: flex; |
|
109 |
- justify-content: center; |
|
110 |
- align-items: center; |
|
111 |
-} |
|
112 |
- |
|
113 |
-.custom_input { |
|
114 |
- display: none; |
|
115 |
-} |
|
116 |
- |
|
117 |
-.custom_input+label.toggle_btn_label { |
|
118 |
- position: relative; |
|
119 |
- width: 100px; |
|
120 |
- height: 30px; |
|
121 |
-} |
|
122 |
- |
|
123 |
-.custom_input+label.toggle_btn_label>span { |
|
124 |
- position: absolute; |
|
125 |
- cursor: pointer; |
|
126 |
- top: 0; |
|
127 |
- left: 0; |
|
128 |
- right: 0; |
|
129 |
- bottom: 0; |
|
130 |
- background-color: #ccc; |
|
131 |
- transition: all .4s; |
|
132 |
- |
|
133 |
-} |
|
134 |
- |
|
135 |
-.custom_input+label.toggle_btn_label>span:before { |
|
136 |
- display: flex; |
|
137 |
- position: absolute; |
|
138 |
- height: 30px; |
|
139 |
- width: fit-content; |
|
140 |
- padding: 0 15px; |
|
141 |
- left: 0; |
|
142 |
- bottom: 0; |
|
143 |
- background-color: #5cb85c; |
|
144 |
- color: #fff; |
|
145 |
- content: "ON"; |
|
146 |
- align-items: center; |
|
147 |
- font-weight: bold; |
|
148 |
- color: rgb(29, 29, 29); |
|
149 |
- -webkit-transition: all .4s; |
|
150 |
- transition: all .4s; |
|
151 |
-} |
|
152 |
- |
|
153 |
-.custom_input:checked+label.toggle_btn_label>span { |
|
154 |
- background-color: black; |
|
155 |
-} |
|
156 |
- |
|
157 |
-.custom_input:checked+label.toggle_btn_label>span:before { |
|
158 |
- -webkit-transform: translateX(calc(10rem - 100%)); |
|
159 |
- -ms-transform: translateX(calc(10rem - 100%)); |
|
160 |
- transform: translateX(calc(10rem - 100%)); |
|
161 |
- right: 0; |
|
162 |
- bottom: 0; |
|
163 |
- content: "OFF"; |
|
164 |
- background-color: #f8f8f8; |
|
165 |
-} |
|
166 |
- |
|
167 |
-.custom_input:disabled+label.toggle_btn_label { |
|
168 |
- display: none; |
|
169 |
-} |
|
170 |
- |
|
171 |
-.toggle_box>span { |
|
172 |
- font-size: 1.2rem; |
|
173 |
- margin-right: 10px; |
|
174 |
-} |
|
175 |
- |
|
176 |
-/* input */ |
|
177 |
- |
|
178 |
-.input-half { |
|
179 |
- width: 45%; |
|
180 |
- height: 35px; |
|
181 |
- padding: 12px; |
|
182 |
- border-radius: 4px; |
|
183 |
- border: 1.5px solid lightgrey; |
|
184 |
- outline: none; |
|
185 |
- transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1); |
|
186 |
- box-shadow: 0px 0px 20px -18px; |
|
187 |
-} |
|
188 |
- |
|
189 |
-.input-full { |
|
190 |
- width: 100%; |
|
191 |
- height: 35px; |
|
192 |
- padding: 12px; |
|
193 |
- border-radius: 4px; |
|
194 |
- border: 1.5px solid lightgrey; |
|
195 |
- outline: none; |
|
196 |
- transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1); |
|
197 |
- box-shadow: 0px 0px 20px -18px; |
|
198 |
-} |
|
199 |
- |
|
200 |
-.input-full:hover, |
|
201 |
-.input-half:hover { |
|
202 |
- border: 2px solid lightgrey; |
|
203 |
- box-shadow: 0px 0px 20px -17px; |
|
204 |
-} |
|
205 |
- |
|
206 |
-.input-full:active, |
|
207 |
-.input-half:active { |
|
208 |
- transform: scale(0.95); |
|
209 |
-} |
|
210 |
- |
|
211 |
-.input-full:focus, |
|
212 |
-.input-half:focus { |
|
213 |
- border: 2px solid grey; |
|
214 |
-} |
|
215 |
- |
|
216 |
- |
|
217 |
-/* icon */ |
|
218 |
- |
|
219 |
-.icon span { |
|
220 |
- border-radius: 50px; |
|
221 |
- border: 1px solid #333; |
|
222 |
- padding: 4px 7px; |
|
223 |
- margin-left: 5px; |
|
224 |
-} |
|
225 |
- |
|
226 |
-.icon-red span { |
|
227 |
- border: 1px solid red; |
|
228 |
-} |
|
229 |
- |
|
230 |
-.icon-red span i { |
|
231 |
- color: red; |
|
232 |
-} |
|
233 |
- |
|
234 |
-input[type="checkbox"], |
|
235 |
-input[type="radio"]{ |
|
236 |
- margin-right: 5px; |
|
237 |
-} |
|
238 |
- |
|
239 |
-.check-box{ |
|
240 |
- display: flex; |
|
241 |
- align-items: center; |
|
242 |
- margin-right: 10px; |
|
243 |
-}(No newline at end of file) |
--- client/views/index.html
+++ client/views/index.html
... | ... | @@ -7,10 +7,9 @@ |
7 | 7 |
<meta name="description" content="Node Vue Web"> |
8 | 8 |
<link rel="stylesheet" href="/client/resources/css/reset.css"> |
9 | 9 |
<link rel="stylesheet" href="/client/resources/css/common.css"> |
10 |
- <link rel="stylesheet" href="/client/resources/css/main.css"> |
|
11 | 10 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"> |
12 | 11 |
<script src="/client/resources/js/jquery-2.1.1.min.js"></script> |
13 |
- <title>웰라인 시스템</title> |
|
12 |
+ <title>AI 디지털교과서 통합지원센터</title> |
|
14 | 13 |
</head> |
15 | 14 |
|
16 | 15 |
<body> |
--- client/views/layout/Menu.vue
+++ client/views/layout/Menu.vue
... | ... | @@ -1,60 +1,17 @@ |
1 | 1 |
<template> |
2 | 2 |
<nav class="main-menu"> |
3 |
- <div class="menu-head"> |
|
4 |
- <div><i class="fa-solid fa-bars"></i></div> |
|
5 |
- <h1 class="logo"><router-link to="/">웰라인</router-link></h1> |
|
3 |
+ <div class="logo-wrap"> |
|
4 |
+ <h1 class="logo"><router-link to="/">AI 디지털교과서 통합지원센터</router-link></h1> |
|
6 | 5 |
</div> |
7 |
- <ul class="menu-body"> |
|
8 |
- <li class="menu-title">Dashboard</li> |
|
9 |
- <li><router-link to="/"><i class="fa-solid fa-layer-group"></i>Dashboard</router-link></li> |
|
10 |
- <li class="menu-title">DR자원관리</li> |
|
11 |
- <li><router-link to="/management.page"><i class="fa-solid fa-folder-open"></i>수요반응자원 관리</router-link></li> |
|
12 |
- <li><router-link to="/contract.page"><i class="fa-solid fa-copy"></i>참여고객 관리</router-link></li> |
|
13 |
- <li @click="toggleSubMenu('rrmse')"> |
|
14 |
- <a class="flex"><span class="flex"><i class="fa-solid fa-flag"></i>RRMSE(제안용)</span><span><i |
|
15 |
- :class="{ 'fa-solid fa-chevron-up': !isRRMSESubMenuOpen, 'fa-solid fa-chevron-down': isRRMSESubMenuOpen }"></i></span> |
|
16 |
- </a> |
|
17 |
- <ul class="sub-menu" :style="{ 'max-height': isRRMSESubMenuOpen ? '200px' : '0' }"> |
|
18 |
- <li @click="stopToggleSubMenuClick"><router-link to="/rrmsePropose.page">산출의뢰</router-link></li> |
|
19 |
- <li @click="stopToggleSubMenuClick"><router-link to="/rrmseCalculationLog.page">산출이력</router-link></li> |
|
6 |
+ <ul> |
|
7 |
+ <li v-for="(menu, index) in menuList" :key="index" @click="toggleMenu(menu)"> |
|
8 |
+ <router-link :to="menu.path">{{ menu.pathName }}<span v-html="menu.icon"></span></router-link> |
|
9 |
+ <ul v-if="menu.subMenu" class="sub-menu" :style="{ 'max-height': menu.isOpen ? '200px' : '0' }"> |
|
10 |
+ <li v-for="(subMenu, subIndex) in menu.subMenu" :key="subIndex"> |
|
11 |
+ <router-link :to="subMenu.path">{{ subMenu.pathName }}</router-link> |
|
12 |
+ </li> |
|
20 | 13 |
</ul> |
21 | 14 |
</li> |
22 |
- <li class="menu-title">DR이벤트관리</li> |
|
23 |
- <li><router-link to="/reduceState.page"><i class="fa-solid fa-chart-simple"></i>감축현황</router-link></li> |
|
24 |
- <li><router-link to="/reduceReport.page"><i class="fa-solid fa-print"></i>감축결과보고서</router-link></li> |
|
25 |
- <li class="menu-title">전력사용현황</li> |
|
26 |
- <li @click="toggleSubMenu('translate')"> |
|
27 |
- <a class="flex"><span><i class="fa-solid fa-clock-rotate-left"></i>데이터송수신현황</span><span><i |
|
28 |
- :class="{ 'fa-solid fa-chevron-up': !isTranslateSubMenuOpen, 'fa-solid fa-chevron-down': isTranslateSubMenuOpen }"></i></span></a> |
|
29 |
- <ul class="sub-menu" :style="{ 'max-height': isTranslateSubMenuOpen ? '200px' : '0' }"> |
|
30 |
- <li @click="stopToggleSubMenuClick"><router-link to="/translateDay.page">일별</router-link></li> |
|
31 |
- <li @click="stopToggleSubMenuClick"><router-link to="/translateContract.page">참여고객별</router-link></li> |
|
32 |
- <li @click="stopToggleSubMenuClick"><router-link to="/dataStatus.page">데이터수집현황</router-link></li> |
|
33 |
- </ul> |
|
34 |
- </li> |
|
35 |
- <li><router-link to="/analysis.page"><i class="fa-solid fa-chart-line"></i>전력사용량/CBL 통계</router-link></li> |
|
36 |
- <li><router-link to="/cblAnalysis.page"><i class="fa-solid fa-code-fork"></i>CBL분석</router-link></li> |
|
37 |
- <li><router-link to="/device.page"><i class="fa-solid fa-location-crosshairs"></i>5분검침기 현황</router-link></li> |
|
38 |
- <li class="menu-title">수요사업자관리</li> |
|
39 |
- <li @click="toggleSubMenu('sms')"> |
|
40 |
- <a class="flex"><span><i class="fa-solid fa-comment"></i>SMS 발송관리</span><span><i |
|
41 |
- :class="{ 'fa-solid fa-chevron-up': !isSMSSubMenuOpen, 'fa-solid fa-chevron-down': isSMSSubMenuOpen }"></i></span></a> |
|
42 |
- <ul class="sub-menu" :style="{ 'max-height': isSMSSubMenuOpen ? '200px' : '0' }"> |
|
43 |
- <li @click="stopToggleSubMenuClick"><router-link to="/smsAutoSend.page">자동발송설정</router-link></li> |
|
44 |
- <li @click="stopToggleSubMenuClick"><router-link to="/smsManualSend.page">수동발송</router-link></li> |
|
45 |
- <li @click="stopToggleSubMenuClick"><router-link to="/smsLog.page">발송이력</router-link></li> |
|
46 |
- </ul> |
|
47 |
- </li> |
|
48 |
- <li @click="toggleSubMenu('email')"> |
|
49 |
- <a class="flex"><span><i class="fa-solid fa-envelope"></i>E-mail발송관리</span><span><i |
|
50 |
- :class="{ 'fa-solid fa-chevron-up': !isEmailSubMenuOpen, 'fa-solid fa-chevron-down': isEmailSubMenuOpen }"></i></span></a> |
|
51 |
- <ul class="sub-menu" :style="{ 'max-height': isEmailSubMenuOpen ? '200px' : '0' }"> |
|
52 |
- <li @click="stopToggleSubMenuClick"><router-link to="/emailAutoSend.page">자동발송설정</router-link></li> |
|
53 |
- <li @click="stopToggleSubMenuClick"><router-link to="/emailLog.page">발송이력</router-link></li> |
|
54 |
- </ul> |
|
55 |
- </li> |
|
56 |
- <li class="menu-title">시스템관리</li> |
|
57 |
- <li><router-link to="/system.page"><i class="fa-solid fa-user"></i>회원관리</router-link></li> |
|
58 | 15 |
</ul> |
59 | 16 |
</nav> |
60 | 17 |
</template> |
... | ... | @@ -63,25 +20,32 @@ |
63 | 20 |
export default { |
64 | 21 |
data() { |
65 | 22 |
return { |
66 |
- isRRMSESubMenuOpen: false, |
|
67 |
- isTranslateSubMenuOpen: false, |
|
68 |
- isEmailSubMenuOpen: false, |
|
69 |
- isSMSSubMenuOpen: false, |
|
23 |
+ menuList: [ |
|
24 |
+ { path: "/main.page", pathName: "대시보드" }, |
|
25 |
+ { path: "/notice.page", pathName: "커뮤니티", subMenu: [{ path: "/notice.page", pathName: "공지사항" }, { path: "/new.page", pathName: "홍보/뉴스" }], icon: "<i class='fa-solid fa-angle-right'></i>", isOpen: false }, |
|
26 |
+ { path: "/document.page", pathName: "자료실", subMenu: [{ path: "/document.page", pathName: "기술문서" }, { path: "/reference.page", pathName: "자료집" }], icon: "<i class='fa-solid fa-angle-right'></i>", isOpen: false }, |
|
27 |
+ { path: "/statistics.page", pathName: "통계서비스" }, |
|
28 |
+ { path: "/corporatePR.page", pathName: "네트워킹", subMenu: [{ path: "/corporatePR.page", pathName: "기업홍보관" }], icon: "<i class='fa-solid fa-angle-right'></i>", isOpen: false }, |
|
29 |
+ { path: "/modal.page", pathName: "팝업관리" }, |
|
30 |
+ { path: "/email.page", pathName: "메일발송" }, |
|
31 |
+ { path: "/userSelectList.page", pathName: "사용자관리" }, |
|
32 |
+ { path: "/subscription .page", pathName: "구독서비스" }, |
|
33 |
+ ] |
|
70 | 34 |
}; |
71 | 35 |
}, |
72 | 36 |
methods: { |
73 |
- toggleSubMenu(menu) { |
|
74 |
- if (menu === 'rrmse') { |
|
75 |
- this.isRRMSESubMenuOpen = !this.isRRMSESubMenuOpen; |
|
76 |
- } else if (menu === 'translate') { |
|
77 |
- this.isTranslateSubMenuOpen = !this.isTranslateSubMenuOpen; |
|
78 |
- } else if (menu === 'email') { |
|
79 |
- this.isEmailSubMenuOpen = !this.isEmailSubMenuOpen; |
|
80 |
- } else if (menu === 'sms') { |
|
81 |
- this.isSMSSubMenuOpen = !this.isSMSSubMenuOpen; |
|
37 |
+ //토글 메뉴 |
|
38 |
+ toggleMenu(menu) { |
|
39 |
+ console.log(menu); |
|
40 |
+ if (menu.hasOwnProperty('isOpen')) { |
|
41 |
+ menu.isOpen = !menu.isOpen; |
|
42 |
+ if (menu.isOpen) { |
|
43 |
+ menu.icon = "<i class='fa-solid fa-angle-down'></i>"; |
|
44 |
+ } else { |
|
45 |
+ menu.icon = "<i class='fa-solid fa-angle-right'></i>"; |
|
46 |
+ } |
|
82 | 47 |
} |
83 | 48 |
}, |
84 |
- |
|
85 | 49 |
// 하위메뉴 클릭 시 메뉴 닫힘 방지 |
86 | 50 |
stopToggleSubMenuClick(event) { |
87 | 51 |
event.stopPropagation(); |
... | ... | @@ -121,80 +85,39 @@ |
121 | 85 |
box-shadow: inset 0px 0px 5px white; |
122 | 86 |
} |
123 | 87 |
|
124 |
-.menu-head { |
|
125 |
- width: 100%; |
|
126 |
- padding: 15px 25px; |
|
127 |
- display: flex; |
|
128 |
- justify-content: flex-start; |
|
129 |
- align-items: center; |
|
130 |
-} |
|
131 |
- |
|
132 |
-.menu-head i { |
|
133 |
- font-size: 1.2rem; |
|
134 |
- color: #fff; |
|
135 |
- margin-right: 20px; |
|
136 |
-} |
|
137 |
- |
|
138 |
-.menu-head .logo { |
|
139 |
- font-size: 2rem; |
|
140 |
- font-weight: 800; |
|
141 |
-} |
|
142 |
- |
|
143 |
-.menu-head .logo a { |
|
144 |
- color: #fff; |
|
145 |
-} |
|
146 |
- |
|
147 |
-.menu-body li.menu-title { |
|
148 |
- color: #6e82a5; |
|
149 |
- font-size: 1.3rem; |
|
150 |
- padding: 10px 15px; |
|
151 |
-} |
|
152 |
- |
|
153 |
-.menu-body li a { |
|
88 |
+.logo-wrap h1 a { |
|
154 | 89 |
display: block; |
155 |
- padding: 10px 15px; |
|
156 |
- color: #eee; |
|
157 |
- font-family: Nunito, sans-serif; |
|
158 |
- font-size: 1.3rem; |
|
90 |
+ font-size: 2rem; |
|
91 |
+ font-weight: 900; |
|
92 |
+ color: #fff; |
|
93 |
+ padding: 30px 15px; |
|
159 | 94 |
} |
160 | 95 |
|
161 |
-.menu-body li a.router-link-active { |
|
162 |
- background-color: #F5F6FA; |
|
163 |
- color: #333; |
|
164 |
- border-radius: 50px 0 0 50px; |
|
165 |
-} |
|
166 |
- |
|
167 |
-.menu-body li a.flex { |
|
168 |
- display: flex; |
|
169 |
- justify-content: space-between; |
|
170 |
- align-items: center; |
|
171 |
-} |
|
172 |
- |
|
173 |
-.menu-body { |
|
96 |
+.main-menu>ul { |
|
174 | 97 |
padding: 30px 0; |
175 | 98 |
} |
176 | 99 |
|
177 |
-.menu-body .fa-solid { |
|
178 |
- width: 20px; |
|
179 |
- font-size: 1.3rem; |
|
100 |
+.main-menu>ul>li>a, |
|
101 |
+.sub-menu>li>a { |
|
102 |
+ display: block; |
|
103 |
+ color: #fff; |
|
104 |
+ padding: 10px 15px; |
|
105 |
+} |
|
106 |
+ |
|
107 |
+.main-menu>ul>li>a { |
|
108 |
+ font-size: 1.6rem; |
|
109 |
+ display: flex; |
|
110 |
+ justify-content: space-between; |
|
180 | 111 |
} |
181 | 112 |
|
182 | 113 |
.sub-menu { |
183 |
- background-color: #1d2c3f; |
|
184 |
- max-height: 0; |
|
114 |
+ background-color: #203248; |
|
185 | 115 |
overflow: hidden; |
186 |
- transition: max-height 0.3s ease; |
|
116 |
+ transition: all 0.5s ease-in-out; |
|
187 | 117 |
} |
188 | 118 |
|
189 |
-.sub-menu li a { |
|
190 |
- display: block; |
|
191 |
- padding: 10px 35px; |
|
192 |
-} |
|
193 |
- |
|
194 |
-.menu-body .fa-solid.fa-chevron-up, |
|
195 |
-.menu-body .fa-solid.fa-chevron-down { |
|
196 |
- font-size: 1.2rem; |
|
197 |
- display: inline-block; |
|
198 |
- text-align: right; |
|
119 |
+.sub-menu>li>a { |
|
120 |
+ font-size: 1.3rem; |
|
121 |
+ padding: 10px 30px; |
|
199 | 122 |
} |
200 | 123 |
</style> |
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
... | ... | @@ -59,7 +59,7 @@ |
59 | 59 |
} |
60 | 60 |
|
61 | 61 |
.main-wrap { |
62 |
- padding: 10px; |
|
62 |
+ padding: 30px; |
|
63 | 63 |
grid-area: main; |
64 | 64 |
} |
65 | 65 |
</style>(No newline at end of file) |
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
... | ... | @@ -1,13 +1,17 @@ |
1 | 1 |
import { createWebHistory, createRouter } from "vue-router"; |
2 | 2 |
|
3 | 3 |
import Main from "../pages/main/Main.vue"; |
4 |
- |
|
5 | 4 |
import Login from "../pages/login/Login.vue"; |
5 |
+import UserSelectList from "../pages/user/UserSelectList.vue"; |
|
6 |
+import UserSelectOne from "../pages/user/UserSelectOne.vue"; |
|
7 |
+ |
|
6 | 8 |
|
7 | 9 |
const routes = [ |
8 | 10 |
/* 메인화면 */ |
9 | 11 |
{ path: "/", name: "Main", component: Main }, |
10 | 12 |
{ path: "/login.page", name: "Login", component: Login }, |
13 |
+ { path: "/userSelectList.page", name: "UserSelectList", component: UserSelectList }, |
|
14 |
+ { path: "/userSelectOne.page", name: "UserSelectOne", component: UserSelectOne }, |
|
11 | 15 |
]; |
12 | 16 |
|
13 | 17 |
const AppRouter = createRouter({ |
--- client/views/pages/login/Login.vue
+++ client/views/pages/login/Login.vue
... | ... | @@ -14,47 +14,3 @@ |
14 | 14 |
mounted() { }, |
15 | 15 |
}; |
16 | 16 |
</script> |
17 |
- |
|
18 |
-.login-wrap, |
|
19 |
-.login-wrap>div, |
|
20 |
-.login-content, |
|
21 |
-.img-content { |
|
22 |
- width: 100%; |
|
23 |
- height: 100%; |
|
24 |
-} |
|
25 |
- |
|
26 |
-.login-content, |
|
27 |
-.img-content { |
|
28 |
- flex: 0 0 50%; |
|
29 |
-} |
|
30 |
- |
|
31 |
- |
|
32 |
-.login-content { |
|
33 |
- background: #fff; |
|
34 |
- padding: 50px; |
|
35 |
-} |
|
36 |
- |
|
37 |
-.login-content p{ |
|
38 |
- font-size: 2rem; |
|
39 |
- font-weight: 800; |
|
40 |
-} |
|
41 |
- |
|
42 |
-.login{ |
|
43 |
- min-width: 50%; |
|
44 |
- max-width: 400px; |
|
45 |
- margin: 0 auto; |
|
46 |
- text-align: center; |
|
47 |
- padding: 150px 0; |
|
48 |
-} |
|
49 |
- |
|
50 |
-.login h2 img{ |
|
51 |
- width: 50%; |
|
52 |
- margin-bottom: 30px; |
|
53 |
-} |
|
54 |
- |
|
55 |
-input[type="text"], |
|
56 |
-input[type="password"]{ |
|
57 |
- display: block; |
|
58 |
- margin-bottom: 10px; |
|
59 |
-} |
|
60 |
-</style>(No newline at end of file) |
--- client/views/pages/main/Main.vue
+++ client/views/pages/main/Main.vue
... | ... | @@ -17,63 +17,3 @@ |
17 | 17 |
mounted() {} |
18 | 18 |
} |
19 | 19 |
</script> |
20 |
- |
|
21 |
-.grid { |
|
22 |
- display: grid; |
|
23 |
- grid-template-columns: 1.3fr 0.7fr; |
|
24 |
- grid-template-rows: 0.5fr 1fr; |
|
25 |
- gap: 10px; |
|
26 |
-} |
|
27 |
- |
|
28 |
-.absorption { |
|
29 |
- grid-column: 1/3; |
|
30 |
-} |
|
31 |
- |
|
32 |
-.content-head h2 { |
|
33 |
- flex: 0 0 65%; |
|
34 |
-} |
|
35 |
- |
|
36 |
-.content-head .select-wrap { |
|
37 |
- flex: 0 0 35%; |
|
38 |
-} |
|
39 |
- |
|
40 |
-select { |
|
41 |
- min-width: 33%; |
|
42 |
-} |
|
43 |
- |
|
44 |
-.conten-sumarry p { |
|
45 |
- font-size: 1.4rem; |
|
46 |
- text-align: center; |
|
47 |
-} |
|
48 |
- |
|
49 |
-.conten-sumarry p span { |
|
50 |
- font-size: 3rem; |
|
51 |
- font-weight: 800; |
|
52 |
- color: #006dd3; |
|
53 |
-} |
|
54 |
- |
|
55 |
-.content-body .base { |
|
56 |
- font-size: 1.2rem; |
|
57 |
- text-align: right; |
|
58 |
- color: #aaa; |
|
59 |
- margin-bottom: 10px; |
|
60 |
-} |
|
61 |
- |
|
62 |
-.content-body ul li{ |
|
63 |
- margin-bottom: 20px; |
|
64 |
-} |
|
65 |
- |
|
66 |
-.content-body ul li:last-child{ |
|
67 |
- margin-bottom: 0; |
|
68 |
-} |
|
69 |
- |
|
70 |
-.content-body table td { |
|
71 |
- padding: 5px; |
|
72 |
- font-size: 1.2rem; |
|
73 |
-} |
|
74 |
- |
|
75 |
-.content-body table .topic td { |
|
76 |
- font-size: 1.4rem; |
|
77 |
- font-weight: 800; |
|
78 |
-} |
|
79 |
-</style>(No newline at end of file) |
+++ client/views/pages/user/UserInsert.vue
... | ... | @@ -0,0 +1,0 @@ |
+++ client/views/pages/user/UserSelectList.vue
... | ... | @@ -0,0 +1,143 @@ |
1 | +<template> | |
2 | + <div class="user-wrap"> | |
3 | + <div class="content-box"> | |
4 | + <div class="title-wrap"> | |
5 | + <h2 class="main-title">회원관리</h2> | |
6 | + </div> | |
7 | + <div class="content-wrap"> | |
8 | + <ul class="tab-menu"> | |
9 | + <li v-for="(tab, index) in tabMenu" :key="index"> | |
10 | + <a @click="currentTab = index" :class="{ active: currentTab === index }">{{ tab }}</a> | |
11 | + </li> | |
12 | + </ul> | |
13 | + <div class="tab-content"> | |
14 | + <div v-show="currentTab == 0"> | |
15 | + <table> | |
16 | + <thead> | |
17 | + <tr> | |
18 | + <th>아이디</th> | |
19 | + <th>기업명</th> | |
20 | + <th>담당자명</th> | |
21 | + <th>이메일</th> | |
22 | + </tr> | |
23 | + </thead> | |
24 | + <tbody> | |
25 | + <tr v-for="(user,index) in user1" :key="index"> | |
26 | + <td>{{ user.id }}</td> | |
27 | + <td>{{ user.company }}</td> | |
28 | + <td>{{ user.name }}</td> | |
29 | + <td>{{ user.email }}</td> | |
30 | + </tr> | |
31 | + </tbody> | |
32 | + </table> | |
33 | + </div> | |
34 | + <div v-show="currentTab == 1"> | |
35 | + <table> | |
36 | + <thead> | |
37 | + <tr> | |
38 | + <th>아이디</th> | |
39 | + <th>기업명</th> | |
40 | + <th>담당자명</th> | |
41 | + <th>이메일</th> | |
42 | + </tr> | |
43 | + </thead> | |
44 | + <tbody> | |
45 | + <tr v-for="(user,index) in user2" :key="index"> | |
46 | + <td>{{ user.id }}</td> | |
47 | + <td>{{ user.company }}</td> | |
48 | + <td>{{ user.name }}</td> | |
49 | + <td>{{ user.email }}</td> | |
50 | + </tr> | |
51 | + </tbody> | |
52 | + </table> | |
53 | + </div> | |
54 | + <div v-show="currentTab == 2"> | |
55 | + <table> | |
56 | + <thead> | |
57 | + <tr> | |
58 | + <th>아이디</th> | |
59 | + <th>기업명</th> | |
60 | + <th>담당자명</th> | |
61 | + <th>이메일</th> | |
62 | + </tr> | |
63 | + </thead> | |
64 | + <tbody> | |
65 | + <tr v-for="(user,index) in user3" :key="index"> | |
66 | + <td>{{ user.id }}</td> | |
67 | + <td>{{ user.company }}</td> | |
68 | + <td>{{ user.name }}</td> | |
69 | + <td>{{ user.email }}</td> | |
70 | + </tr> | |
71 | + </tbody> | |
72 | + </table> | |
73 | + <div class="btn-wrap"> | |
74 | + <button class="blue-btn">등록</button> | |
75 | + </div> | |
76 | + </div> | |
77 | + </div> | |
78 | + </div> | |
79 | + </div> | |
80 | + | |
81 | + </div> | |
82 | +</template> | |
83 | +<script> | |
84 | +export default { | |
85 | + data() { | |
86 | + return { | |
87 | + currentTab: 0, | |
88 | + tabMenu: ['일반회원', '기관회원', '관리자'], | |
89 | + user1:[ | |
90 | + {id:"test1",company:"test1C",name:"user1",email:"[email protected]"}, | |
91 | + {id:"teste2",company:"test2C",name:"user2",email:"[email protected]"}, | |
92 | + {id:"test3",company:"test3C",name:"user3",email:"[email protected]"}, | |
93 | + ], | |
94 | + user2:[ | |
95 | + {id:"test1",company:"test1C",name:"user1",email:"[email protected]"}, | |
96 | + {id:"teste2",company:"test2C",name:"user2",email:"[email protected]"}, | |
97 | + {id:"test3",company:"test3C",name:"user3",email:"[email protected]"}, | |
98 | + ], | |
99 | + user3:[ | |
100 | + {id:"test1",company:"test1C",name:"user1",email:"[email protected]"}, | |
101 | + {id:"teste2",company:"test2C",name:"user2",email:"[email protected]"}, | |
102 | + {id:"test3",company:"test3C",name:"user3",email:"[email protected]"}, | |
103 | + ] | |
104 | + }; | |
105 | + }, | |
106 | + methods: {}, | |
107 | + watch: {}, | |
108 | + computed: {}, | |
109 | + components: {}, | |
110 | + mounted() { }, | |
111 | +}; | |
112 | +</script> | |
113 | +<style scoped> | |
114 | +.tab-menu{ | |
115 | + display: flex; | |
116 | + justify-content: flex-start; | |
117 | + align-items: center; | |
118 | +} | |
119 | +.tab-menu li a{ | |
120 | + padding: 10px 15px; | |
121 | + display: block; | |
122 | + font-size: 1.6rem; | |
123 | + border-radius: 5px 5px 0 0; | |
124 | + cursor: pointer; | |
125 | + border: 1px solid #ddd; | |
126 | + border-bottom: 0; | |
127 | +} | |
128 | + | |
129 | +.tab-menu li a.active{ | |
130 | + background-color: #f8f8f8; | |
131 | + color: #2b7cff; | |
132 | + font-weight: 800; | |
133 | + border: 0; | |
134 | +} | |
135 | + | |
136 | +.tab-content{ | |
137 | + width: 100%; | |
138 | + height: 100%; | |
139 | + background-color: #f8f8f8; | |
140 | + padding: 15px; | |
141 | + | |
142 | +} | |
143 | +</style> |
+++ client/views/pages/user/UserSelectOne.vue
... | ... | @@ -0,0 +1,38 @@ |
1 | +<template> | |
2 | + <div class="user-wrap"> | |
3 | + <div class="content-box"> | |
4 | + <div class="title-wrap"> | |
5 | + <h2 class="main-title">회원관리</h2> | |
6 | + </div> | |
7 | + <div class="content-wrap"> | |
8 | + <ul class="tab-menu"> | |
9 | + <li v-for="(tab, index) in tabMenu" :key="index" :class="{ active: currentTab === index }"> | |
10 | + <a href="#" v-on:click="currentTab = index">{{ tab }}</a> | |
11 | + </li> | |
12 | + </ul> | |
13 | + <div class="tab-content"> | |
14 | + <div v-show="currentTab == 0">1</div> | |
15 | + <div v-show="currentTab == 1">2</div> | |
16 | + <div v-show="currentTab == 2">3</div> | |
17 | + </div> | |
18 | + </div> | |
19 | + </div> | |
20 | + | |
21 | + </div> | |
22 | +</template> | |
23 | +<script> | |
24 | +export default { | |
25 | + data() { | |
26 | + return { | |
27 | + currentTab: 0, | |
28 | + tabMenu: ['일반회원', '기관회원', '관리자'] | |
29 | + }; | |
30 | + }, | |
31 | + methods: {}, | |
32 | + watch: {}, | |
33 | + computed: {}, | |
34 | + components: {}, | |
35 | + mounted() { }, | |
36 | +}; | |
37 | +</script> | |
38 | +<style scoped></style>> |
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?