![](/assets/images/project_default_logo.png)
![](/assets/images/default-avatar-128.png)
240228김하영 최초커밋
@ae387a1abfaee0cb6257e0c6274dd19c2bace283
+++ .gitignore
... | ... | @@ -0,0 +1,3 @@ |
1 | +client/build/ | |
2 | +server/logs/ | |
3 | +node_modules/(No newline at end of file) |
+++ .idea/workspace.xml
... | ... | @@ -0,0 +1,85 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project version="4"> | |
3 | + <component name="BranchesTreeState"> | |
4 | + <expand> | |
5 | + <path> | |
6 | + <item name="ROOT" type="e8cecc67:BranchNodeDescriptor" /> | |
7 | + <item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" /> | |
8 | + </path> | |
9 | + <path> | |
10 | + <item name="ROOT" type="e8cecc67:BranchNodeDescriptor" /> | |
11 | + <item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" /> | |
12 | + </path> | |
13 | + <path> | |
14 | + <item name="ROOT" type="e8cecc67:BranchNodeDescriptor" /> | |
15 | + <item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" /> | |
16 | + <item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" /> | |
17 | + </path> | |
18 | + </expand> | |
19 | + <select /> | |
20 | + </component> | |
21 | + <component name="ChangeListManager"> | |
22 | + <list default="true" id="01a0e0f0-fcc8-4169-b6ce-2029ac7ac3d2" name="Default Changelist" comment=""> | |
23 | + <change beforePath="$PROJECT_DIR$/client/resources/css/style.css" beforeDir="false" afterPath="$PROJECT_DIR$/client/resources/css/style.css" afterDir="false" /> | |
24 | + <change beforePath="$PROJECT_DIR$/client/views/layout/Header.vue" beforeDir="false" afterPath="$PROJECT_DIR$/client/views/layout/Header.vue" afterDir="false" /> | |
25 | + <change beforePath="$PROJECT_DIR$/client/views/pages/AppRouter.js" beforeDir="false" afterPath="$PROJECT_DIR$/client/views/pages/AppRouter.js" afterDir="false" /> | |
26 | + <change beforePath="$PROJECT_DIR$/client/views/pages/main/Main.vue" beforeDir="false" afterPath="$PROJECT_DIR$/client/views/pages/main/Main.vue" afterDir="false" /> | |
27 | + </list> | |
28 | + <option name="SHOW_DIALOG" value="false" /> | |
29 | + <option name="HIGHLIGHT_CONFLICTS" value="true" /> | |
30 | + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | |
31 | + <option name="LAST_RESOLUTION" value="IGNORE" /> | |
32 | + </component> | |
33 | + <component name="Git.Settings"> | |
34 | + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> | |
35 | + </component> | |
36 | + <component name="ProjectId" id="2V3300o3WOe3QmLYJYN8OWl5Oj6" /> | |
37 | + <component name="ProjectViewState"> | |
38 | + <option name="hideEmptyMiddlePackages" value="true" /> | |
39 | + <option name="showLibraryContents" value="true" /> | |
40 | + </component> | |
41 | + <component name="PropertiesComponent"> | |
42 | + <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" /> | |
43 | + <property name="RunOnceActivity.ShowReadmeOnStart" value="true" /> | |
44 | + <property name="WebServerToolWindowFactoryState" value="false" /> | |
45 | + <property name="aspect.path.notification.shown" value="true" /> | |
46 | + <property name="last_opened_file_path" value="$PROJECT_DIR$/../../../intellij/workspace/project_setting_manual" /> | |
47 | + <property name="settings.editor.selected.configurable" value="configurable.group.language" /> | |
48 | + </component> | |
49 | + <component name="SvnConfiguration"> | |
50 | + <configuration /> | |
51 | + </component> | |
52 | + <component name="TaskManager"> | |
53 | + <task active="true" id="Default" summary="Default task"> | |
54 | + <changelist id="01a0e0f0-fcc8-4169-b6ce-2029ac7ac3d2" name="Default Changelist" comment="" /> | |
55 | + <created>1694050710013</created> | |
56 | + <option name="number" value="Default" /> | |
57 | + <option name="presentableId" value="Default" /> | |
58 | + <updated>1694050710013</updated> | |
59 | + <workItem from="1694050711402" duration="740000" /> | |
60 | + <workItem from="1694053838386" duration="18000" /> | |
61 | + </task> | |
62 | + <servers /> | |
63 | + </component> | |
64 | + <component name="TypeScriptGeneratedFilesManager"> | |
65 | + <option name="version" value="2" /> | |
66 | + </component> | |
67 | + <component name="Vcs.Log.Tabs.Properties"> | |
68 | + <option name="TAB_STATES"> | |
69 | + <map> | |
70 | + <entry key="MAIN"> | |
71 | + <value> | |
72 | + <State /> | |
73 | + </value> | |
74 | + </entry> | |
75 | + </map> | |
76 | + </option> | |
77 | + <option name="oldMeFiltersMigrated" value="true" /> | |
78 | + </component> | |
79 | + <component name="WindowStateProjectService"> | |
80 | + <state x="1061" y="455" key="FileChooserDialogImpl" timestamp="1694053854393"> | |
81 | + <screen x="0" y="0" width="2560" height="1400" /> | |
82 | + </state> | |
83 | + <state x="1061" y="455" key="FileChooserDialogImpl/0.0.2560.1400/[email protected]" timestamp="1694053854393" /> | |
84 | + </component> | |
85 | +</project>(No newline at end of file) |
+++ Global.js
... | ... | @@ -0,0 +1,17 @@ |
1 | +const PROJECT_NAME = 'NodeJS Web Server Framework(Vue)'; | |
2 | +const PROJECT_VERSION = '1.0'; | |
3 | +const BASE_DIR = __dirname; | |
4 | +const LOG_BASE_DIR = `${__dirname}/server/logs`; | |
5 | +const SERVICE_STATUS = process.env.NODE_ENV;//development, production | |
6 | +const PORT = 80; | |
7 | +const API_SERVER_HOST = 'localhost:8080'; | |
8 | + | |
9 | +module.exports = { | |
10 | + PROJECT_NAME, | |
11 | + PROJECT_VERSION, | |
12 | + BASE_DIR, | |
13 | + LOG_BASE_DIR, | |
14 | + SERVICE_STATUS, | |
15 | + PORT, | |
16 | + API_SERVER_HOST | |
17 | +}(No newline at end of file) |
+++ SQL
... | ... | @@ -0,0 +1,33 @@ |
1 | +-- create test SCHEMA(mariaDB) | |
2 | +CREATE SCHEMA test DEFAULT CHARACTER SET utf8mb4; | |
3 | + | |
4 | +-- use test SCHEMA(mariaDB) | |
5 | +use test; | |
6 | + | |
7 | +-- create product table(mariaDB) | |
8 | +CREATE TABLE product | |
9 | +( | |
10 | + product_index INT PRIMARY KEY AUTO_INCREMENT, | |
11 | + product_name VARCHAR(50), | |
12 | + product_category VARCHAR(50), | |
13 | + product_price INT, | |
14 | + product_explan TEXT, | |
15 | + product_writer VARCHAR(50), | |
16 | + product_date DATE | |
17 | +) DEFAULT CHARACTER SET utf8mb4; | |
18 | + | |
19 | +-- create product_order table(mariaDB) | |
20 | +CREATE TABLE product_order | |
21 | +( | |
22 | + order_index INT, | |
23 | + order_product_number INT, | |
24 | + order_product_name VARCHAR(50), | |
25 | + order_product_category VARCHAR(50), | |
26 | + order_product_temperature VARCHAR(50), | |
27 | + order_amount INT, | |
28 | + order_price INT, | |
29 | + order_user VARCHAR(50), | |
30 | + order_date DATE, | |
31 | + order_state VARCHAR(50), | |
32 | + PRIMARY KEY(order_index, order_product_number) | |
33 | +) DEFAULT CHARACTER SET utf8mb4;(No newline at end of file) |
+++ client/resources/css/component.css
... | ... | @@ -0,0 +1,662 @@ |
1 | +@charset "utf-8"; | |
2 | + | |
3 | +/* box */ | |
4 | +.content { | |
5 | + width: 100%; | |
6 | + height: 100%; | |
7 | +} | |
8 | + | |
9 | +.row { | |
10 | + padding-top: 5px; | |
11 | + padding-bottom: 5px; | |
12 | +} | |
13 | + | |
14 | +.box { | |
15 | + background-color: var(--white); | |
16 | + height: 100%; | |
17 | + padding: 15px; | |
18 | + border-radius: 10px; | |
19 | + box-shadow: 0 0 5px var(--light); | |
20 | +} | |
21 | + | |
22 | +.box-title { | |
23 | + font-size: 1.8rem; | |
24 | + font-weight: bold; | |
25 | + padding-bottom: 10px; | |
26 | + margin-bottom: 10px; | |
27 | + border-bottom: 1px solid var(--dark); | |
28 | +} | |
29 | + | |
30 | +.box-inner-title { | |
31 | + font-size: 1.6rem; | |
32 | + font-weight: bold; | |
33 | +} | |
34 | + | |
35 | +.chart-title { | |
36 | + font-size: 1.4rem; | |
37 | + font-weight: bold; | |
38 | +} | |
39 | + | |
40 | +.content-box { | |
41 | + height: calc(100% - 48px); | |
42 | + /* background-color: aliceblue; */ | |
43 | +} | |
44 | + | |
45 | + | |
46 | + | |
47 | + | |
48 | +/* btn */ | |
49 | +.small-btn { | |
50 | + width: 120px; | |
51 | + padding: 5px 10px; | |
52 | + border-radius: 5px; | |
53 | + font-size: 1.3rem; | |
54 | +} | |
55 | + | |
56 | +.large-btn { | |
57 | + width: 100%; | |
58 | + padding: 5px 15px; | |
59 | + border-radius: 5px; | |
60 | +} | |
61 | + | |
62 | +.icon-btn { | |
63 | + padding: 5px; | |
64 | + border-radius: 50%; | |
65 | +} | |
66 | + | |
67 | +.close-btn{ | |
68 | + font-size: 1.6rem; | |
69 | + font-weight: 900; | |
70 | +} | |
71 | + | |
72 | + | |
73 | +.logout-btn::before { | |
74 | + content: ""; | |
75 | + width: 1px; | |
76 | + height: 10px; | |
77 | + position: absolute; | |
78 | + top: 50%; | |
79 | + left: 0; | |
80 | + transform: translateY(-50%); | |
81 | + background-color: #aaa; | |
82 | +} | |
83 | + | |
84 | +.close-btn { | |
85 | + color: #d6def6; | |
86 | +} | |
87 | + | |
88 | +.blue-btn, | |
89 | +.blue-border-btn:hover { | |
90 | + background-color: var(--blue); | |
91 | + color: var(--white); | |
92 | + transition: all 0.3s ease-in-out; | |
93 | +} | |
94 | + | |
95 | +.red-btn, | |
96 | +.red-border-btn:hover { | |
97 | + background-color: var(--red); | |
98 | + color: var(--white); | |
99 | + transition: all 0.3s ease-in-out; | |
100 | +} | |
101 | + | |
102 | +.green-btn, | |
103 | +.green-border-btn:hover { | |
104 | + background-color: var(--green); | |
105 | + color: var(--white); | |
106 | + transition: all 0.3s ease-in-out; | |
107 | +} | |
108 | + | |
109 | +.orange-btn, | |
110 | +.orange-border-btn:hover { | |
111 | + background-color: var(--orange); | |
112 | + color: var(--white); | |
113 | + transition: all 0.3s ease-in-out; | |
114 | +} | |
115 | + | |
116 | +.darkg-btn, | |
117 | +.darkg-border-btn:hover { | |
118 | + background-color: var(--darkG); | |
119 | + color: var(--white); | |
120 | + transition: all 0.3s ease-in-out; | |
121 | +} | |
122 | + | |
123 | +.gray-btn, | |
124 | +.gray-border-btn:hover { | |
125 | + background-color: #eee; | |
126 | + color: #333; | |
127 | + transition: all 0.3s ease-in-out; | |
128 | +} | |
129 | + | |
130 | + | |
131 | +.blue-border-btn { | |
132 | + border: 1px solid var(--blue); | |
133 | + color: var(--blue); | |
134 | + background-color: var(--white); | |
135 | +} | |
136 | + | |
137 | +.red-border-btn { | |
138 | + border: 1px solid var(--red); | |
139 | + color: var(--red); | |
140 | + background-color: var(--white); | |
141 | +} | |
142 | + | |
143 | +.green-border-btn { | |
144 | + border: 1px solid var(--green); | |
145 | + color: var(--green); | |
146 | + background-color: var(--white); | |
147 | +} | |
148 | + | |
149 | +.orange-border-btn { | |
150 | + border: 1px solid var(--orange); | |
151 | + ; | |
152 | + color: var(--orange); | |
153 | + background-color: var(--white); | |
154 | +} | |
155 | + | |
156 | +.darkg-border-btn { | |
157 | + border: 1px solid #434343; | |
158 | + color: #434343; | |
159 | + background-color: var(--white); | |
160 | +} | |
161 | + | |
162 | +.gray-border-btn { | |
163 | + border: 1px solid #aaa; | |
164 | + color: #aaa; | |
165 | + background-color: var(--white); | |
166 | +} | |
167 | + | |
168 | +.white-border-btn { | |
169 | + border: 1px solid var(--white); | |
170 | + color: var(--white); | |
171 | + background-color: transparent; | |
172 | +} | |
173 | + | |
174 | +.tp-btn { | |
175 | + background-color: transparent; | |
176 | + width: 15px; | |
177 | + height: 15px; | |
178 | + margin-left: 10px; | |
179 | +} | |
180 | + | |
181 | +button:disabled { | |
182 | + background-color: #eee; | |
183 | + color: #333; | |
184 | +} | |
185 | + | |
186 | +.del-icon-btn { | |
187 | + width: 25px; | |
188 | + height: 25px; | |
189 | + padding: 5px; | |
190 | + background-color: var(--red); | |
191 | + color: var(--white); | |
192 | + border-radius: 50%; | |
193 | +} | |
194 | + | |
195 | +.set-icon-btn { | |
196 | + width: 25px; | |
197 | + height: 25px; | |
198 | + padding: 5px; | |
199 | + background-color: var(--darkG); | |
200 | + color: var(--white); | |
201 | + border-radius: 50%; | |
202 | +} | |
203 | + | |
204 | + | |
205 | + | |
206 | + | |
207 | +/* 박스 컴포넌트 스타일 */ | |
208 | +.component-wrap { | |
209 | + width: 100%; | |
210 | + height: 100%; | |
211 | + padding: 8px; | |
212 | + border-radius: 5px; | |
213 | + background-color: #f8f8f8; | |
214 | +} | |
215 | + | |
216 | +.data-title { | |
217 | + font-size: 1.4rem; | |
218 | + font-weight: 500; | |
219 | +} | |
220 | + | |
221 | + | |
222 | +.data-number, | |
223 | +.data-caption { | |
224 | + font-size: 1.6rem; | |
225 | + font-weight: bold; | |
226 | +} | |
227 | + | |
228 | +.data-unit { | |
229 | + font-size: 1.4rem; | |
230 | + font-weight: 200; | |
231 | +} | |
232 | + | |
233 | +.data-icon { | |
234 | + min-width: 30px; | |
235 | + min-height: 30px; | |
236 | + width: 40px; | |
237 | + height: 40px; | |
238 | + max-width: 100%; | |
239 | + max-height: 100%; | |
240 | +} | |
241 | + | |
242 | + | |
243 | +.data-icon p { | |
244 | + font-size: 1.6rem; | |
245 | + font-weight: bold; | |
246 | + text-align: center; | |
247 | + line-height: 50px; | |
248 | + background-color: var(--orange); | |
249 | + border-radius: 5px; | |
250 | +} | |
251 | + | |
252 | + | |
253 | +/* 모달 */ | |
254 | +.modal-wrapper { | |
255 | + background-color: rgba(0, 0, 0, 0.5); | |
256 | + position: fixed; | |
257 | + width: 100%; | |
258 | + height: 100%; | |
259 | + top: 0; | |
260 | + left: 0; | |
261 | + display: flex; | |
262 | + justify-content: center; | |
263 | + align-items: center; | |
264 | + z-index: 11000; | |
265 | +} | |
266 | + | |
267 | +.modal-container { | |
268 | + background: #fff; | |
269 | + min-width: 500px; | |
270 | + width: 30%; | |
271 | + height:80%; | |
272 | + border-radius: 5px; | |
273 | + display: grid; | |
274 | + grid-template-rows: auto 1fr auto; | |
275 | + padding: 20px; | |
276 | + box-sizing: border-box; | |
277 | + max-height: 95%; | |
278 | + min-height: 500px; | |
279 | +} | |
280 | + | |
281 | +.modal-title { | |
282 | + width: 100%; | |
283 | + border-bottom: 1px solid #d4cccc; | |
284 | + padding: 10px 0; | |
285 | +} | |
286 | + | |
287 | +.modal-subtitle { | |
288 | + font-size: 1.3rem; | |
289 | + font-weight: 600; | |
290 | +} | |
291 | + | |
292 | +.modal-content-monthly { | |
293 | + width: 100%; | |
294 | + padding: 20px 0; | |
295 | + overflow-y: auto; | |
296 | +} | |
297 | + | |
298 | +.large-modal { | |
299 | + width: 90%; | |
300 | +} | |
301 | + | |
302 | +.small-modal { | |
303 | + min-width: 200px; | |
304 | + min-height: 200px; | |
305 | + max-width: 450px; | |
306 | + height: auto; | |
307 | + max-height: 50%; | |
308 | +} | |
309 | + | |
310 | +.list-modal { | |
311 | + width: 80%; | |
312 | + height: 80%; | |
313 | +} | |
314 | + | |
315 | +.alert-write { | |
316 | + font-size: 1.6rem; | |
317 | + line-height: 180%; | |
318 | +} | |
319 | + | |
320 | + | |
321 | +.modal-content-monthly::-webkit-scrollbar { | |
322 | + width: 10px; | |
323 | +} | |
324 | + | |
325 | +.modal-content-monthly::-webkit-scrollbar-thumb { | |
326 | + background-color: #6b6b6b; | |
327 | + border-radius: 10px; | |
328 | + background-clip: padding-box; | |
329 | + border: 2px solid transparent; | |
330 | +} | |
331 | + | |
332 | +.modal-content-monthly::-webkit-scrollbar-track { | |
333 | + background-color: #eee; | |
334 | + border-radius: 10px; | |
335 | + box-shadow: inset 0px 0px 5px white; | |
336 | +} | |
337 | + | |
338 | +.modal-end { | |
339 | + width: 100%; | |
340 | + padding: 15px 0; | |
341 | + border-top: 1px solid #eee; | |
342 | +} | |
343 | + | |
344 | +.alert-modal .modal-end button, | |
345 | +.small-modal .modal-end button { | |
346 | + margin-left: 0; | |
347 | +} | |
348 | + | |
349 | +.full-input, | |
350 | +.full-select { | |
351 | + width: 100%; | |
352 | +} | |
353 | + | |
354 | + | |
355 | +/* margin */ | |
356 | + | |
357 | +/* margin-left 왼쪽 */ | |
358 | +.ml0 { | |
359 | + margin-left: 0%; | |
360 | +} | |
361 | +.ml1 { | |
362 | + margin-left: 1%; | |
363 | +} | |
364 | +.ml2{ | |
365 | + margin-left: 2%; | |
366 | +} | |
367 | +.ml3{ | |
368 | + margin-left: 3%; | |
369 | +} | |
370 | +.ml4{ | |
371 | + margin-left: 4%; | |
372 | +} | |
373 | +.ml5 { | |
374 | + margin-left: 5%; | |
375 | +} | |
376 | +.ml6{ | |
377 | + margin-left: 6%; | |
378 | +} | |
379 | +.ml7{ | |
380 | + margin-left: 7%; | |
381 | +} | |
382 | +.ml8{ | |
383 | + margin-left: 8%; | |
384 | +} | |
385 | +.ml9{ | |
386 | + margin-left: 9%; | |
387 | +} | |
388 | +.ml10 { | |
389 | + margin-left: 10%; | |
390 | +} | |
391 | +.ml15 { | |
392 | + margin-left: 15%; | |
393 | +} | |
394 | +.ml20 { | |
395 | + margin-left: 20%; | |
396 | +} | |
397 | + | |
398 | +/* margin-right 오른쪽 */ | |
399 | +.mr0 { | |
400 | + margin-right: 0%; | |
401 | +} | |
402 | +.mr1 { | |
403 | + margin-right: 1%; | |
404 | +} | |
405 | +.mr2{ | |
406 | + margin-right: 2%; | |
407 | +} | |
408 | +.mr3{ | |
409 | + margin-right: 3%; | |
410 | +} | |
411 | +.mr4{ | |
412 | + margin-right: 4%; | |
413 | +} | |
414 | +.mr5 { | |
415 | + margin-right: 5%; | |
416 | +} | |
417 | +.mr6{ | |
418 | + margin-right: 6%; | |
419 | +} | |
420 | +.mr7{ | |
421 | + margin-right: 7%; | |
422 | +} | |
423 | +.mr8{ | |
424 | + margin-right: 8%; | |
425 | +} | |
426 | +.mr9{ | |
427 | + margin-right: 9%; | |
428 | +} | |
429 | +.mr10 { | |
430 | + margin-right: 10%; | |
431 | +} | |
432 | +.mr15 { | |
433 | + margin-right: 15%; | |
434 | +} | |
435 | +.mr20 { | |
436 | + margin-right: 20%; | |
437 | +} | |
438 | +/* margin-top 윗쪽 */ | |
439 | +.mt0 { | |
440 | + margin-top: 0%; | |
441 | +} | |
442 | +.mt1 { | |
443 | + margin-top: 1%; | |
444 | +} | |
445 | +.mt2{ | |
446 | + margin-top: 2%; | |
447 | +} | |
448 | +.mt3{ | |
449 | + margin-top: 3%; | |
450 | +} | |
451 | +.mt4{ | |
452 | + margin-top: 4%; | |
453 | +} | |
454 | +.mt5 { | |
455 | + margin-top: 5%; | |
456 | +} | |
457 | +.mt6{ | |
458 | + margin-top: 6%; | |
459 | +} | |
460 | +.mt7{ | |
461 | + margin-top: 7%; | |
462 | +} | |
463 | +.mt8{ | |
464 | + margin-top: 8%; | |
465 | +} | |
466 | +.mt9{ | |
467 | + margin-top: 9%; | |
468 | +} | |
469 | +.mt10 { | |
470 | + margin-top: 10%; | |
471 | +} | |
472 | +.mt15 { | |
473 | + margin-top: 15%; | |
474 | +} | |
475 | +.mt20 { | |
476 | + margin-top: 20%; | |
477 | +} | |
478 | + | |
479 | +/* margin-bottom 아래쪽 */ | |
480 | + | |
481 | +.mb0 { | |
482 | + margin-bottom: 0%; | |
483 | +} | |
484 | +.mb1 { | |
485 | + margin-bottom: 1%; | |
486 | +} | |
487 | +.mb2{ | |
488 | + margin-bottom: 2%; | |
489 | +} | |
490 | +.mb3{ | |
491 | + margin-bottom: 3%; | |
492 | +} | |
493 | +.mb4{ | |
494 | + margin-bottom: 4%; | |
495 | +} | |
496 | +.mb5 { | |
497 | + margin-bottom: 5%; | |
498 | +} | |
499 | +.mb6{ | |
500 | + margin-bottom: 6%; | |
501 | +} | |
502 | +.mb7{ | |
503 | + margin-bottom: 7%; | |
504 | +} | |
505 | +.mb8{ | |
506 | + margin-bottom: 8%; | |
507 | +} | |
508 | +.mb9{ | |
509 | + margin-bottom: 9%; | |
510 | +} | |
511 | +.mb10 { | |
512 | + margin-bottom: 10%; | |
513 | +} | |
514 | +.mb15 { | |
515 | + margin-bottom: 15%; | |
516 | +} | |
517 | +.mb20 { | |
518 | + margin-bottom: 20%; | |
519 | +} | |
520 | + | |
521 | + | |
522 | +/* padding */ | |
523 | +.pd0 { | |
524 | + padding: 0%; | |
525 | +} | |
526 | +.pd1 { | |
527 | + padding: 1%; | |
528 | +} | |
529 | +.pd2{ | |
530 | + padding: 2%; | |
531 | +} | |
532 | +.pd3{ | |
533 | + padding: 3%; | |
534 | +} | |
535 | +.pd4{ | |
536 | + padding: 4%; | |
537 | +} | |
538 | +.pd5 { | |
539 | + padding: 5%; | |
540 | +} | |
541 | +.pd6{ | |
542 | + padding: 6%; | |
543 | +} | |
544 | +.pd7{ | |
545 | + padding: 7%; | |
546 | +} | |
547 | +.pd8{ | |
548 | + padding: 8%; | |
549 | +} | |
550 | +.pd9{ | |
551 | + padding: 9%; | |
552 | +} | |
553 | +.pd10 { | |
554 | + padding: 10%; | |
555 | +} | |
556 | +.pd15 { | |
557 | + padding: 15%; | |
558 | +} | |
559 | +.pd20 { | |
560 | + padding: 20%; | |
561 | +} | |
562 | + | |
563 | +/* padding-top */ | |
564 | +.pt0 { | |
565 | + padding-top: 0%; | |
566 | +} | |
567 | +.pt1 { | |
568 | + padding-top: 1%; | |
569 | +} | |
570 | +.pt2{ | |
571 | + padding-top: 2%; | |
572 | +} | |
573 | +.pt3{ | |
574 | + padding-top: 3%; | |
575 | +} | |
576 | +.pt4{ | |
577 | + padding-top: 4%; | |
578 | +} | |
579 | +.pt5 { | |
580 | + padding-top: 5%; | |
581 | +} | |
582 | +.pt6{ | |
583 | + padding-top: 6%; | |
584 | +} | |
585 | +.pt7{ | |
586 | + padding-top: 7%; | |
587 | +} | |
588 | +.pt8{ | |
589 | + padding-top: 8%; | |
590 | +} | |
591 | +.pt9{ | |
592 | + padding-top: 9%; | |
593 | +} | |
594 | +.pt10 { | |
595 | + padding-top: 10%; | |
596 | +} | |
597 | +.pt15 { | |
598 | + padding-top: 15%; | |
599 | +} | |
600 | +.pt20 { | |
601 | + padding-top: 20%; | |
602 | +} | |
603 | +/* padding-bottom */ | |
604 | +.pb0 { | |
605 | + padding-bottom: 0%; | |
606 | +} | |
607 | +.pb1 { | |
608 | + padding-bottom: 1%; | |
609 | +} | |
610 | +.pb2{ | |
611 | + padding-bottom: 2%; | |
612 | +} | |
613 | +.pb3{ | |
614 | + padding-bottom: 3%; | |
615 | +} | |
616 | +.pb4{ | |
617 | + padding-bottom: 4%; | |
618 | +} | |
619 | +.pb5 { | |
620 | + padding-bottom: 5%; | |
621 | +} | |
622 | +.pb6{ | |
623 | + padding-bottom: 6%; | |
624 | +} | |
625 | +.pb7{ | |
626 | + padding-bottom: 7%; | |
627 | +} | |
628 | +.pb8{ | |
629 | + padding-bottom: 8%; | |
630 | +} | |
631 | +.pb9{ | |
632 | + padding-bottom: 9%; | |
633 | +} | |
634 | +.pb10 { | |
635 | + padding-bottom: 10%; | |
636 | +} | |
637 | +.pb15 { | |
638 | + padding-bottom: 15%; | |
639 | +} | |
640 | +.pb20 { | |
641 | + padding-bottom: 20%; | |
642 | +} | |
643 | + | |
644 | + | |
645 | +/* text 정렬 */ | |
646 | +.text-lf { | |
647 | + text-align: left; | |
648 | +} | |
649 | + | |
650 | +.text-ct { | |
651 | + text-align: center; | |
652 | +} | |
653 | + | |
654 | +.text-rg { | |
655 | + text-align: right; | |
656 | +} | |
657 | + | |
658 | + | |
659 | +/* 기타 공용 */ | |
660 | +.cursor{ | |
661 | + cursor: pointer; | |
662 | +}(No newline at end of file) |
+++ client/resources/css/grid.css
... | ... | @@ -0,0 +1,257 @@ |
1 | +@charset "utf-8"; | |
2 | + | |
3 | +.container { | |
4 | + width: 100%; | |
5 | + padding-right: 15px; | |
6 | + padding-left: 15px; | |
7 | + margin-right: auto; | |
8 | + margin-left: auto; | |
9 | +} | |
10 | +/* 480 small */ | |
11 | +@media (min-width: 480px) { | |
12 | + .container { | |
13 | + max-width: 768px; | |
14 | + } | |
15 | +} | |
16 | + | |
17 | +/* 768 medium */ | |
18 | +@media (min-width: 768px) { | |
19 | + .container { | |
20 | + max-width: 1024px; | |
21 | + } | |
22 | +} | |
23 | +/* 1024 large */ | |
24 | +@media (min-width: 1024px) { | |
25 | + .container { | |
26 | + max-width: 1280px; | |
27 | + } | |
28 | +} | |
29 | +/* 1280 Xlarge */ | |
30 | +@media (min-width: 1280px) { | |
31 | + .container{ | |
32 | + max-width: 100%; | |
33 | + } | |
34 | +} | |
35 | + | |
36 | + | |
37 | +.flex { | |
38 | + display: flex; | |
39 | + flex-wrap: wrap; | |
40 | +} | |
41 | + | |
42 | +.flex-column { | |
43 | + display: flex; | |
44 | + flex-direction: column; | |
45 | +} | |
46 | + | |
47 | +.no-gutters { | |
48 | + margin-right: 0; | |
49 | + margin-left: 0; | |
50 | +} | |
51 | + | |
52 | + | |
53 | +.no-gutters>.gd, | |
54 | +.no-gutters>[class*="col-"] { | |
55 | + padding-right: 0; | |
56 | + padding-left: 0; | |
57 | +} | |
58 | + | |
59 | +.gd-1, | |
60 | +.gd-2, | |
61 | +.gd-3, | |
62 | +.gd-4, | |
63 | +.gd-5, | |
64 | +.gd-6, | |
65 | +.gd-7, | |
66 | +.gd-8, | |
67 | +.gd-9, | |
68 | +.gd-10, | |
69 | +.gd-11, | |
70 | +.gd-12, | |
71 | +.gd, | |
72 | +.gd-auto, | |
73 | +.gd-sm-1, | |
74 | +.gd-sm-2, | |
75 | +.gd-sm-3, | |
76 | +.gd-sm-4, | |
77 | +.gd-sm-5, | |
78 | +.gd-sm-6, | |
79 | +.gd-sm-7, | |
80 | +.gd-sm-8, | |
81 | +.gd-sm-9, | |
82 | +.gd-sm-10, | |
83 | +.gd-sm-11, | |
84 | +.gd-sm-12, | |
85 | +.gd-sm, | |
86 | +.gd-sm-auto, | |
87 | +.gd-md-1, | |
88 | +.gd-md-2, | |
89 | +.gd-md-3, | |
90 | +.gd-md-4, | |
91 | +.gd-md-5, | |
92 | +.gd-md-6, | |
93 | +.gd-md-7, | |
94 | +.gd-md-8, | |
95 | +.gd-md-9, | |
96 | +.gd-md-10, | |
97 | +.gd-md-11, | |
98 | +.gd-md-12, | |
99 | +.gd-md, | |
100 | +.gd-md-auto, | |
101 | +.gd-lg-1, | |
102 | +.gd-lg-2, | |
103 | +.gd-lg-3, | |
104 | +.gd-lg-4, | |
105 | +.gd-lg-5, | |
106 | +.gd-lg-6, | |
107 | +.gd-lg-7, | |
108 | +.gd-lg-8, | |
109 | +.gd-lg-9, | |
110 | +.gd-lg-10, | |
111 | +.gd-lg-11, | |
112 | +.gd-lg-12, | |
113 | +.gd-lg, | |
114 | +.gd-lg-auto, | |
115 | +.gd-xl-1, | |
116 | +.gd-xl-2, | |
117 | +.gd-xl-3, | |
118 | +.gd-xl-4, | |
119 | +.gd-xl-5, | |
120 | +.gd-xl-6, | |
121 | +.gd-xl-7, | |
122 | +.gd-xl-8, | |
123 | +.gd-xl-9, | |
124 | +.gd-xl-10, | |
125 | +.gd-xl-11, | |
126 | +.gd-xl-12, | |
127 | +.gd-xl, | |
128 | +.gd-xl-auto { | |
129 | + position: relative; | |
130 | + width: 100%; | |
131 | + min-height: 1px; | |
132 | + padding-right: 10px; | |
133 | + padding-left: 10px; | |
134 | +} | |
135 | + | |
136 | + | |
137 | +.gd { | |
138 | + -ms-flex-preferred-size: 0; | |
139 | + flex-basis: 0; | |
140 | + -ms-flex-positive: 1; | |
141 | + flex-grow: 1; | |
142 | + max-width: 100%; | |
143 | +} | |
144 | + | |
145 | +.gd-auto { | |
146 | + -ms-flex: 0 0 auto; | |
147 | + flex: 0 0 auto; | |
148 | + width: auto; | |
149 | + max-width: none; | |
150 | +} | |
151 | + | |
152 | +.gd-1 { | |
153 | + -ms-flex: 0 0 8.333333%; | |
154 | + flex: 0 0 8.333333%; | |
155 | + max-width: 8.333333%; | |
156 | +} | |
157 | + | |
158 | +.gd-2 { | |
159 | + -ms-flex: 0 0 16.666667%; | |
160 | + flex: 0 0 16.666667%; | |
161 | + max-width: 16.666667%; | |
162 | +} | |
163 | + | |
164 | +.gd-3 { | |
165 | + -ms-flex: 0 0 25%; | |
166 | + flex: 0 0 25%; | |
167 | + max-width: 25%; | |
168 | +} | |
169 | + | |
170 | +.gd-4 { | |
171 | + -ms-flex: 0 0 33.333333%; | |
172 | + flex: 0 0 33.333333%; | |
173 | + max-width: 33.333333%; | |
174 | +} | |
175 | + | |
176 | +.gd-5 { | |
177 | + -ms-flex: 0 0 41.666667%; | |
178 | + flex: 0 0 41.666667%; | |
179 | + max-width: 41.666667%; | |
180 | +} | |
181 | + | |
182 | +.gd-6 { | |
183 | + -ms-flex: 0 0 50%; | |
184 | + flex: 0 0 50%; | |
185 | + max-width: 50%; | |
186 | +} | |
187 | + | |
188 | +.gd-7 { | |
189 | + -ms-flex: 0 0 58.333333%; | |
190 | + flex: 0 0 58.333333%; | |
191 | + max-width: 58.333333%; | |
192 | +} | |
193 | + | |
194 | +.gd-8 { | |
195 | + -ms-flex: 0 0 66.666667%; | |
196 | + flex: 0 0 66.666667%; | |
197 | + max-width: 66.666667%; | |
198 | +} | |
199 | + | |
200 | +.gd-9 { | |
201 | + -ms-flex: 0 0 75%; | |
202 | + flex: 0 0 75%; | |
203 | + max-width: 75%; | |
204 | +} | |
205 | + | |
206 | +.gd-10 { | |
207 | + -ms-flex: 0 0 83.333333%; | |
208 | + flex: 0 0 83.333333%; | |
209 | + max-width: 83.333333%; | |
210 | +} | |
211 | + | |
212 | +.gd-11 { | |
213 | + -ms-flex: 0 0 91.666667%; | |
214 | + flex: 0 0 91.666667%; | |
215 | + max-width: 91.666667%; | |
216 | +} | |
217 | + | |
218 | +.gd-12 { | |
219 | + -ms-flex: 0 0 100%; | |
220 | + flex: 0 0 100%; | |
221 | + max-width: 100%; | |
222 | +} | |
223 | + | |
224 | + | |
225 | + | |
226 | +.justify-start { | |
227 | + justify-content: flex-start; | |
228 | +} | |
229 | + | |
230 | +.justify-center { | |
231 | + justify-content: center; | |
232 | +} | |
233 | + | |
234 | +.justify-end { | |
235 | + justify-content: flex-end; | |
236 | +} | |
237 | + | |
238 | +.justify-between { | |
239 | + justify-content: space-between; | |
240 | +} | |
241 | + | |
242 | +.justify-around { | |
243 | + justify-content: space-around; | |
244 | +} | |
245 | + | |
246 | +.align-start { | |
247 | + align-items: flex-start; | |
248 | +} | |
249 | + | |
250 | + | |
251 | +.align-center { | |
252 | + align-items: center; | |
253 | +} | |
254 | + | |
255 | +.align-end { | |
256 | + align-items: flex-end; | |
257 | +} |
+++ client/resources/css/layout.css
... | ... | @@ -0,0 +1,0 @@ |
+++ client/resources/css/reset.css
... | ... | @@ -0,0 +1,166 @@ |
1 | +@charset "utf-8"; | |
2 | + | |
3 | +:root { | |
4 | + --blue: #007bff; | |
5 | + --skyblue: #c9e3ff; | |
6 | + --indigo: #6610f2; | |
7 | + --purple: #6f42c1; | |
8 | + --pink: #e83e8c; | |
9 | + --red: #dc3545; | |
10 | + --orange: #fd7e14; | |
11 | + --yellow: #ffc107; | |
12 | + --green: #28a745; | |
13 | + --teal: #20c997; | |
14 | + --cyan: #17a2b8; | |
15 | + --white: #fff; | |
16 | + --gray: #6c757d; | |
17 | + --gray-dark: #343a40; | |
18 | + --primary: #007bff; | |
19 | + --secondary: #6c757d; | |
20 | + --success: #28a745; | |
21 | + --info: #17a2b8; | |
22 | + --main:#388d6e; | |
23 | + --warning: #ffc107; | |
24 | + --danger: #dc3545; | |
25 | + --light: #f8f9fa; | |
26 | + --dark: #343a40; | |
27 | + --light:#eeeeee; | |
28 | +} | |
29 | + | |
30 | +/* box-sizing 규칙을 명시합니다. */ | |
31 | +*, | |
32 | +*::before, | |
33 | +*::after { | |
34 | + box-sizing: border-box; | |
35 | + margin: 0; | |
36 | + padding: 0; | |
37 | +} | |
38 | + | |
39 | +/* 폰트 크기의 팽창을 방지합니다. */ | |
40 | +html { | |
41 | + -moz-text-size-adjust: none; | |
42 | + -webkit-text-size-adjust: none; | |
43 | + text-size-adjust: none; | |
44 | + font-size: 10px; | |
45 | +} | |
46 | + | |
47 | +/* 기본 여백을 제거하여 작성된 CSS를 더 잘 제어할 수 있습니다. */ | |
48 | +body, | |
49 | +h1, | |
50 | +h2, | |
51 | +h3, | |
52 | +h4, | |
53 | +p, | |
54 | +figure, | |
55 | +blockquote, | |
56 | +dl, | |
57 | +dd { | |
58 | + margin-block-end: 0; | |
59 | +} | |
60 | + | |
61 | +/* list를 role값으로 갖는 ul, ol 요소의 기본 목록 스타일을 제거합니다. */ | |
62 | +ul[role='list'], | |
63 | +ol[role='list'] { | |
64 | + list-style: none; | |
65 | +} | |
66 | + | |
67 | +/* 핵심 body의 기본값을 설정합니다. */ | |
68 | +body,#root { | |
69 | + min-height: 100vh; | |
70 | + line-height: 1.5; | |
71 | + background-color: var(--main); | |
72 | +} | |
73 | + | |
74 | +/* 제목 요소와 상호작용하는 요소에 대해 line-height를 더 짧게 설정합니다. */ | |
75 | +h1, | |
76 | +h2, | |
77 | +h3, | |
78 | +h4, | |
79 | +button, | |
80 | +input, | |
81 | +label { | |
82 | + line-height: 1.1; | |
83 | +} | |
84 | + | |
85 | +/* 제목에 대한 text-wrap을 balance로 설정합니다. */ | |
86 | +h1, | |
87 | +h2, | |
88 | +h3, | |
89 | +h4 { | |
90 | + text-wrap: balance; | |
91 | +} | |
92 | + | |
93 | +/* 클래스가 없는 기본 a 태그 요소는 기본 스타일을 가져옵니다. */ | |
94 | +a:not([class]) { | |
95 | + text-decoration-skip-ink: auto; | |
96 | + color: currentColor; | |
97 | +} | |
98 | + | |
99 | +/* 이미지 관련 작업을 더 쉽게 합니다. */ | |
100 | +img, | |
101 | +picture { | |
102 | + max-width: 100%; | |
103 | + display: block; | |
104 | +} | |
105 | + | |
106 | +/* input 및 button 항목들이 글꼴을 상속하도록 합니다. */ | |
107 | +input, | |
108 | +button, | |
109 | +textarea, | |
110 | +select { | |
111 | + font: inherit; | |
112 | +} | |
113 | + | |
114 | +button{ | |
115 | + background: inherit ; | |
116 | + border:none; | |
117 | + box-shadow:none; | |
118 | + border-radius:0; | |
119 | + padding:0; | |
120 | + overflow:visible; | |
121 | + cursor:pointer | |
122 | +} | |
123 | + | |
124 | +/* 행 속성이 없는 textarea가 너무 작지 않도록 합니다. */ | |
125 | +textarea:not([rows]) { | |
126 | + min-height: 10em; | |
127 | +} | |
128 | + | |
129 | +/* 고정된 모든 항목에는 여분의 스크롤 여백이 있어야 합니다. */ | |
130 | +:target { | |
131 | + scroll-margin-block: 5ex; | |
132 | +} | |
133 | + | |
134 | +table{ | |
135 | + min-width: 100%; | |
136 | + border-collapse: collapse; | |
137 | + table-layout: fixed; | |
138 | +} | |
139 | + | |
140 | +table th, | |
141 | +table td{ | |
142 | + font-size: 1.3rem; | |
143 | +} | |
144 | + | |
145 | +select,input{ | |
146 | + padding: 10px; | |
147 | + border: 1px solid #ddd; | |
148 | + border-radius: 5px; | |
149 | +} | |
150 | + | |
151 | + | |
152 | +/* 스크롤바 디자인 */ | |
153 | +::-webkit-scrollbar { | |
154 | + width: 8px; | |
155 | + height: 8px; | |
156 | +} | |
157 | + | |
158 | +::-webkit-scrollbar-thumb { | |
159 | + background-color: #ededed; | |
160 | + border-radius: 10px; | |
161 | +} | |
162 | + | |
163 | +::-webkit-scrollbar-track { | |
164 | + background-color: #fff; | |
165 | + border-radius: 10px; | |
166 | +}(No newline at end of file) |
+++ client/resources/css/responsive.css
... | ... | @@ -0,0 +1,0 @@ |
+++ client/resources/css/style.css
... | ... | @@ -0,0 +1,0 @@ |
+++ client/resources/img/common/common/history_top_bg.png
Binary file is not shown |
+++ client/resources/img/common/history_top_bg.png
Binary file is not shown |
+++ client/views/index.html
... | ... | @@ -0,0 +1,16 @@ |
1 | +<!DOCTYPE html> | |
2 | +<html> | |
3 | + <head> | |
4 | + <meta charset="UTF-8"> | |
5 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
6 | + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |
7 | + <meta name="description" content="Node Vue Web"> | |
8 | + <link rel="stylesheet" href="/client/resources/css/style.css"> | |
9 | + <title>Component</title> | |
10 | + </head> | |
11 | + | |
12 | + <body> | |
13 | + <div id="root"></div> | |
14 | + <script src="/client/build/bundle.js"></script> | |
15 | + </body> | |
16 | +</html>(No newline at end of file) |
+++ client/views/index.js
... | ... | @@ -0,0 +1,12 @@ |
1 | +/** | |
2 | + * @author : 하석형 | |
3 | + * @since : 2023.08.24 | |
4 | + * @dscription : Vue를 활용한 Client단 구현의 시작점(Index) Component 입니다. | |
5 | + */ | |
6 | +import { createApp } from 'vue'; | |
7 | + | |
8 | +import AppRouter from './pages/AppRouter.js'; | |
9 | +import App from './pages/App.vue'; | |
10 | + | |
11 | +// const vue = createApp(App).mount('#root'); | |
12 | +const vue = createApp(App).use(AppRouter).mount('#root');(No newline at end of file) |
+++ client/views/pages/App.vue
... | ... | @@ -0,0 +1,39 @@ |
1 | +<template> | |
2 | + <div class="wrapper"> | |
3 | + <Header></Header> | |
4 | + <div class="main-warp"> | |
5 | + <router-view/> | |
6 | + </div> | |
7 | + </div> | |
8 | +</template> | |
9 | + | |
10 | +<script> | |
11 | +import Header from '../pages/layout/Header.vue'; | |
12 | + | |
13 | + | |
14 | +const App = { | |
15 | + data: () => { | |
16 | + return { | |
17 | + } | |
18 | + }, | |
19 | + methods: { | |
20 | + | |
21 | + }, | |
22 | + watch: { | |
23 | + | |
24 | + }, | |
25 | + computed: { | |
26 | + | |
27 | + }, | |
28 | + components: { | |
29 | + 'Header': Header | |
30 | + | |
31 | + }, | |
32 | + mounted: () => { | |
33 | + console.log('Vue mounted'); | |
34 | + } | |
35 | +} | |
36 | + | |
37 | +export default App; | |
38 | +</script> | |
39 | + |
+++ client/views/pages/AppRouter.js
... | ... | @@ -0,0 +1,21 @@ |
1 | +import { createWebHistory, createRouter } from "vue-router"; | |
2 | + | |
3 | +// import Main from "../pages/main/Main.vue"; | |
4 | +import Main from "../pages/main/Main.vue"; | |
5 | +import Button from "../pages/main/Main.vue"; | |
6 | + | |
7 | + | |
8 | +const routes = [ | |
9 | + /* 메인화면 */ | |
10 | + { path: "/", name: "/", component: Main }, | |
11 | + { path: "/", name: "/Button.page", component: Button }, | |
12 | + | |
13 | + | |
14 | +]; | |
15 | + | |
16 | +const AppRouter = createRouter({ | |
17 | + history: createWebHistory(), | |
18 | + routes, | |
19 | +}); | |
20 | + | |
21 | +export default AppRouter; |
+++ client/views/pages/component/Button.vue
... | ... | @@ -0,0 +1,0 @@ |
+++ client/views/pages/component/Pagination.vue
... | ... | @@ -0,0 +1,0 @@ |
+++ client/views/pages/component/Searchbar.vue
... | ... | @@ -0,0 +1,0 @@ |
+++ client/views/pages/component/Table.vue
... | ... | @@ -0,0 +1,0 @@ |
+++ client/views/pages/layout/Header.vue
... | ... | @@ -0,0 +1,27 @@ |
1 | +<template> | |
2 | + <div>Hader.vue</div> | |
3 | + | |
4 | +</template> | |
5 | + | |
6 | +<script> | |
7 | +export default { | |
8 | + data () { | |
9 | + return { | |
10 | + } | |
11 | + }, | |
12 | + methods: { | |
13 | + | |
14 | + }, | |
15 | + watch: { | |
16 | + | |
17 | + }, | |
18 | + computed: { | |
19 | + | |
20 | + }, | |
21 | + mounted() { | |
22 | + } | |
23 | +} | |
24 | +</script> | |
25 | +<style> | |
26 | + | |
27 | +</style>(No newline at end of file) |
+++ client/views/pages/layout/Menu.vue
... | ... | @@ -0,0 +1,0 @@ |
+++ client/views/pages/main/Main.vue
... | ... | @@ -0,0 +1,37 @@ |
1 | +<template> | |
2 | + <div>Main.vue</div> | |
3 | + | |
4 | +</template> | |
5 | + | |
6 | +<script> | |
7 | +export default { | |
8 | + data () { | |
9 | + return { | |
10 | + } | |
11 | + }, | |
12 | + methods: { | |
13 | + | |
14 | + }, | |
15 | + watch: { | |
16 | + | |
17 | + }, | |
18 | + computed: { | |
19 | + | |
20 | + }, | |
21 | + mounted() { | |
22 | + console.log('Main mounted'); | |
23 | + } | |
24 | +} | |
25 | +</script> | |
26 | +<style> | |
27 | +*{ | |
28 | + box-sizing: border-box; | |
29 | + margin: 0; | |
30 | + padding: 0; | |
31 | +} | |
32 | +div{ | |
33 | + width:100% ; | |
34 | + height: 100%; | |
35 | + border: 1px solid red; | |
36 | +} | |
37 | +</style>(No newline at end of file) |
+++ webpack.config.js
... | ... | @@ -0,0 +1,42 @@ |
1 | +const { VueLoaderPlugin } = require("vue-loader"); | |
2 | + | |
3 | +const {PROJECT_NAME, BASE_DIR, SERVICE_STATUS} = require('./Global'); | |
4 | + | |
5 | +module.exports = { | |
6 | + name: PROJECT_NAME, | |
7 | + mode: SERVICE_STATUS, | |
8 | + devtool: 'eval', | |
9 | + | |
10 | + entry: { | |
11 | + app: [`${BASE_DIR}/client/views/index.js`] | |
12 | + }, | |
13 | + | |
14 | + module: { | |
15 | + rules: [{ | |
16 | + test: /\.vue?$/, | |
17 | + loader: 'vue-loader', | |
18 | + }, { | |
19 | + test: /\.(js|jsx)?$/, | |
20 | + loader: 'babel-loader', | |
21 | + }, { | |
22 | + test: /\.css$/, | |
23 | + use: ['vue-style-loader', 'css-loader'] | |
24 | + }, { | |
25 | + test: /\.(jpe?g|png|gif|svg|ttf|eot|woff|woff2)$/i, | |
26 | + use: [{ | |
27 | + loader:'url-loader', | |
28 | + options:{ | |
29 | + limit:8192, | |
30 | + fallback:require.resolve('file-loader') | |
31 | + } | |
32 | + }] | |
33 | + }], | |
34 | + }, | |
35 | + | |
36 | + plugins: [new VueLoaderPlugin()], | |
37 | + | |
38 | + output: { | |
39 | + path: `${BASE_DIR}/client/build`, // __dirname: webpack.config.js 파일이 위치한 경로 | |
40 | + filename: 'bundle.js' | |
41 | + }, | |
42 | +}(No newline at end of file) |
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?