diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/2024-Herethon-2.iml b/.idea/2024-Herethon-2.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/2024-Herethon-2.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..30bab2a --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..07115cd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9807037 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index bfd6cd3..d289499 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,82 @@ # 2024-Herethon-2 2024 ์—ฌ๊ธฐํ†ค : HERETHON 2์กฐ

- +![image](https://github.com/2024-HERETHON/2024-Herethon-2/assets/128278212/5eb332b5-dced-484d-9cc9-e7aa85a118da) + +๐Ÿ‘‰๐Ÿป [์„œ๋น„์Šค ๋ฐ”๋กœ๊ฐ€๊ธฐ](http://15.164.255.252/) +- id : Stuck +- password : Stuck1234!! + +๐Ÿ‘‰๐Ÿป [์—ฌ๊ธฐํ†ค ๊ธฐ์‚ฌ ๋ณด๊ธฐ](https://n.news.naver.com/article/092/0002337413?sid=105) -๐Ÿ‘‰๐Ÿป ์„œ๋น„์Šค ๋ฐ”๋กœ๊ฐ€๊ธฐ

### ๐Ÿ“™ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ -์šฐ๋ฆฌ ์„œ๋น„์Šค๋Š” ๋ง์ด์ฃ ~ +STUCK์€ ์ž๊ธฐ์ฃผ๋„ํ•™์Šต์„ ์œ„ํ•œ AI ๋ฌธ์ œ์ƒ์„ฑ ๋ฐ ์งˆ์˜์‘๋‹ต ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. +ํ•™์ƒ๋“ค์˜ ์ž๊ธฐ์ฃผ๋„์  ํ•™์Šต ํƒœ๋„ ์ •๋ฆฝ์„ ๋ชฉํ‘œ๋กœ ๋งŒ๋“ค์–ด์ง„ STUCK์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์†Œ๋น„์ž๋“ค์˜ painpoint๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. +#### 1. ๋ฌธ์ œํ’€๊ธฐ +* ๋ฌธ์ œ ์ƒ์„ฑ ํƒญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ €์žฅํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์„ ํƒํ•œ ํ›„ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* ๋ฌธ์ œ์˜ ์ด๋ฆ„, ์ƒ์„ฑํ•  ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜, ๋ฌธ์ œ์˜ ์œ ํ˜•(๊ฐ๊ด€์‹, ์ฃผ๊ด€์‹), ์ƒ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๊ต์žฌ์˜ pdf๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+
+ + + + +* ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•œ ํ›„ ๋ฌธ์ œ ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ๋‹ค๋ฉด ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€์˜ ํ…์ŠคํŠธ๋ฅผ google cloud vision API๋ฅผ ํ†ตํ•ด ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. +* ์ถ”์ถœํ•œ ํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กฌํ”„ํŒ…์„ ํ†ตํ•ด chatGPT์—๊ฒŒ ๋ฌธ์ œ ์ƒ์„ฑ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. +* chatGPT์˜ ์‘๋‹ต์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. +* ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค๋ฉด ์ฑ„์  ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* ์ƒ์„ฑํ•œ ๋ฌธ์ œ๋Š” PDF์™€ WORD ํ˜•ํƒœ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + * ์ž์ฃผ ๋ณด๋Š” ๋ฌธ์ œ๋Š” ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋‚˜์ค‘์— MySTUCK ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +

+ + + + +#### 2. ์งˆ๋ฌธํ•˜๊ธฐ +* ์งˆ๋ฌธํ•˜๊ธฐ ํƒญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋ฌธ์ œํ’€๊ธฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋”๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. +* ์งˆ๋ฌธํ•  ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜๊ณ  ์งˆ๋ฌธ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. +* ์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด ์™ผ์ชฝ์—๋Š” chatGPT๋ฅผ ์ด์šฉํ•œ ์งˆ์˜์‘๋‹ต, ์˜ค๋ฅธ์ชฝ์€ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. +* ์งˆ์˜์‘๋‹ต ์ฑ„ํŒ… ๋‚ด์šฉ, ๋ฉ”๋ชจ ๋ชจ๋‘ PDF์™€ WORD๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* ํ‹€๋ฆฐ ๋ฌธ์ œ๋งŒ ๋ณด๊ธฐ, ๋‹ค์‹œ ํ’€๊ธฐ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. +* ์ž์ฃผ ๋ณด๋Š” ์งˆ๋ฌธํ•˜๊ธฐ๋Š” ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋‚˜์ค‘์— MySTUCK ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ + + + +#### 3. My Stuck +* ์ด์ „๊นŒ์ง€ ์ƒ์„ฑํ–ˆ๋˜ ํด๋” ๋ฐ ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. +* ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ํŒŒ์ผํƒ์ƒ‰๊ธฐ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋ฉฐ, ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์‚ญ์ œ, ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํด๋” ๋ฐ ํŒŒ์ผ ์ด๋™ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. +* ํด๋” ๋ฐ ํŒŒ์ผ ์ฐพ๊ธฐ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. +* ์ฆ๊ฒจ์ฐพ๊ธฐํ•œ ํ•ญ๋ชฉ์€ ์•„๋ž˜์— ํšŒ์ƒ‰์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

+ + + +#### 4. MyPage +* ๋ชฉํ‘œ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* ์บ˜๋ฆฐ๋”์™€ ์—ฐ๋™ํ–ˆ์œผ๋ฉฐ ํ•  ์ผ์„ ์™„์ˆ˜ํ•œ ๋‚ ์ด ์žˆ๋‹ค๋ฉด ํŒŒ๋ž€์ƒ‰ ๋ฐฐ๊ฒฝ, ํ•  ์ผ์„ ์™„์ˆ˜ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. +* ๋ฃจํ‹ด, ํ•  ์ผ์€ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. +* ๋ชฉํ‘œ์„ค์ • ์•„๋ž˜๋ฅผ ์Šคํฌ๋กคํ•˜๋ฉด ๋‚ด ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ + + +#### 5. Home +* ์›”๊ฐ„ ๋‹ฌ์„ฑ๋ฅ , ์ฃผ๊ฐ„ ๋‹ฌ์„ฑ๋ฅ , ์ผ๊ฐ„ ๋‹ฌ์„ฑ๋ฅ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* ์ฆ๊ฒจ์ฐพ๊ธฐํ•œ ํ•ญ๋ชฉ, ์ตœ๊ทผ ์—ด์–ด๋ณธ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ + + +#### 6. ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ +* ์•„์ด๋””๋ฅผ ์žƒ์–ด๋ฒ„๋ ธ์„ ๊ฒฝ์šฐ ์ด๋ฉ”์ผ ์ž…๋ ฅ์„ ํ†ตํ•ด ๊ฐ€์ž…ํ–ˆ์„ ๋•Œ์˜ ์•„์ด๋””๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žƒ์–ด๋ฒ„๋ ธ์„ ๊ฒฝ์šฐ ์ด๋ฉ”์•Œ, ID ์ž…๋ ฅ์„ ํ†ตํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ + + + + +

+### ๊ฐœ๋ฐœ๊ธฐ๊ฐ„ +2024.06.25 ~ 2024.07.06

### ๐Ÿฆ STUCK ๊ฐœ๋ฐœ ํŒ€์› ์†Œ๊ฐœ @@ -17,10 +86,11 @@ |
| |
๊ธฐํš, ๋””์ž์ธ
| #### ๏ธFront-end -|
๋ฐ•์ˆ˜์ง„
|
์†ก์œ ์„ 
| + +|
์ตœ์ˆ˜์ง„
|
์†ก์œ ์„ 
| |---------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| |
|
| -|
์—ญํ• 1
|
์—ญํ• 2
| +|
์—ญํ• 1
|
์—ญํ• 2
| |
[@jinsujini](https://github.com/jinsujini)
|
[@s-uxun](https://github.com/s-uxun)
| #### Back-end diff --git a/StuckProject/STUCKQUIZ_PDF.pdf b/StuckProject/STUCKQUIZ_PDF.pdf new file mode 100644 index 0000000..7fe9bbd Binary files /dev/null and b/StuckProject/STUCKQUIZ_PDF.pdf differ diff --git a/StuckProject/qna/models.py b/StuckProject/qna/models.py index 8056ade..c2063fc 100644 --- a/StuckProject/qna/models.py +++ b/StuckProject/qna/models.py @@ -9,6 +9,7 @@ class QuestionRoom(models.Model): folder = models.ForeignKey(to=Folder, on_delete=models.CASCADE,related_name="qnas") file = models.FileField(upload_to="file/%Y/%m/%d/") memo = models.CharField(max_length=10000, blank=True) + created_at = models.DateField(auto_now_add=True) class Chat(models.Model): diff --git a/StuckProject/qna/templates/qna/create_question_room.html b/StuckProject/qna/templates/qna/create_question_room.html index 9499d8e..9dc580c 100644 --- a/StuckProject/qna/templates/qna/create_question_room.html +++ b/StuckProject/qna/templates/qna/create_question_room.html @@ -1,96 +1,78 @@ {% extends "base.html" %} {% load static %} {% block content %} - - - - - ์งˆ๋ฌธํ•˜๊ธฐ - - -
- {% csrf_token %} -
-
-
-
์งˆ๋ฌธ ํŒŒ์ผ๋ช…
- -
-
-
-
+ +
+ - - + } + + + -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/StuckProject/qna/templates/qna/landing.html b/StuckProject/qna/templates/qna/landing.html new file mode 100644 index 0000000..5e75e02 --- /dev/null +++ b/StuckProject/qna/templates/qna/landing.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} {% load static %} {% block content %} + + + + + + Document + + + +
+ +
+ ๋žœ๋”ฉ์ด๋ฏธ์ง€ +

๊ต์žฌ ๋‚ด์šฉ ์งˆ๋ฌธํ•˜๊ธฐ

+
+
+ + + +{% endblock %} \ No newline at end of file diff --git a/StuckProject/qna/templates/qna/question_room.html b/StuckProject/qna/templates/qna/question_room.html index 7e6d98c..f39ff76 100644 --- a/StuckProject/qna/templates/qna/question_room.html +++ b/StuckProject/qna/templates/qna/question_room.html @@ -1,14 +1,15 @@ {% extends "base.html" %} {% load static %} {% block content %} +{% load custom_filters %} - + Document - - - + + +
@@ -16,19 +17,26 @@ -
{{ question_room.file.name }}
+
{{ question_room.file.name|filename }}
+ + {% if not question_room in request.user.customuser.scrap_question_rooms.all %} + {% else %} + + + + {% endif %} @@ -38,7 +46,7 @@
{{ question_room.file.name }}
- {% for chat in chats %} + {% for chat in chats %}

์‚ฌ์šฉ์ž @@ -51,7 +59,7 @@
{{ question_room.file.name }}

{{ chat.gpt_chat | linebreaks }}

- {% endfor %} + {% endfor %}
{{ question_room.file.name }} method="POST" class="chat-form" > - {% csrf_token %} - - -
+ {% csrf_token %} +
+ + +
+
- + + + + + + {{ question_room.created_at }}
- {% csrf_token %} - - -
- - - pdf๋กœ ๋ฉ”๋ชจ ์ €์žฅ - word๋กœ ๋ฉ”๋ชจ ์ €์žฅ + {% csrf_token %} + + +
- + {% endblock %} diff --git a/StuckProject/qna/templates/qna/select_folder.html b/StuckProject/qna/templates/qna/select_folder.html index 81f9b06..e60d845 100644 --- a/StuckProject/qna/templates/qna/select_folder.html +++ b/StuckProject/qna/templates/qna/select_folder.html @@ -8,6 +8,12 @@ + +

์ €์žฅํ•  ํด๋” ์ •ํ•˜๊ธฐ

@@ -23,6 +29,7 @@

์ €์žฅํ•  ํด๋” ์ •ํ•˜๊ธฐ

class="left_circle" /> + {% else %} ์ €์žฅํ•  ํด๋” ์ •ํ•˜๊ธฐ {% endif %}
- {% if folder %} {{ path }} {% else %} - ์ด๋ฏธ์ง€ ์„ค๋ช… + + + {% if folder %}
MY STUCK / {{ path }}
+ + {% else %} + ์ด๋ฏธ์ง€ ์„ค๋ช… +
MY STUCK /
{% endif %}
+
{% if folder %}
์ €์žฅํ•  ํด๋” ์ •ํ•˜๊ธฐ
+
@@ -114,6 +124,7 @@
์ƒˆ๋กœ์šด ํด๋” ์ƒ์„ฑํ•˜๊ธฐ
{% endif %}
+
diff --git a/StuckProject/qna/urls.py b/StuckProject/qna/urls.py index b09b4e7..9a750ee 100644 --- a/StuckProject/qna/urls.py +++ b/StuckProject/qna/urls.py @@ -4,6 +4,7 @@ app_name = 'qna' urlpatterns = [ + path('qna/landing-page', landing_page, name="landing-page"), path('select-folder//', select_folder, name='select-folder'), path('folder/add//', add_folder, name='add-folder'), path('folder//create-question-room/', create_question_room, name="create-question-room"), diff --git a/StuckProject/qna/views.py b/StuckProject/qna/views.py index 25f27af..2db1ba2 100644 --- a/StuckProject/qna/views.py +++ b/StuckProject/qna/views.py @@ -34,6 +34,10 @@ from docx.shared import Pt from docx.oxml.ns import qn +@login_required +def landing_page(request): + return render(request, 'qna/landing.html') + # ํ€ด์ฆˆ ์ƒ์„ฑ ์ „ ํด๋” ์„ ํƒ @login_required def select_folder(request, folder_id=None): diff --git a/StuckProject/quiz/templates/quiz/create_quiz.html b/StuckProject/quiz/templates/quiz/create_quiz.html index 99cc7ac..3827dd3 100644 --- a/StuckProject/quiz/templates/quiz/create_quiz.html +++ b/StuckProject/quiz/templates/quiz/create_quiz.html @@ -1,120 +1,106 @@ {% extends "base.html" %} {% load static %} {% block content %} - - - - - ํ€ด์ฆˆ ์ƒ์„ฑ - - -
- {% csrf_token %} -
-
-
-
๋ฌธ์ œ ํŒŒ์ผ๋ช…
- -
-
- - -
-
- - -
-
-
-
+ {% if message %} + {{message}} + {% endif %} + +
+ - - + } + + + -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/StuckProject/quiz/templates/quiz/home.html b/StuckProject/quiz/templates/quiz/home.html index 4b0b305..99a482c 100644 --- a/StuckProject/quiz/templates/quiz/home.html +++ b/StuckProject/quiz/templates/quiz/home.html @@ -30,7 +30,7 @@
{{ request.user.username }}
{{ request.user.customuser.resolution }}
-
+
{{ current_year }}๋…„ {{ current_month }}์›” ์˜ ์›”๊ฐ„ ๋ชฉํ‘œ๋‹ฌ์„ฑ๋ฅ  {{ month_completion_rate }}%
@@ -54,7 +54,7 @@
{{ current_year }}๋…„ {{ current_month }}์›” {{ current_day
-
+

{{ week_month }}

@@ -287,12 +287,12 @@
{% endfor %} {% for scrap in quiz_scraps %}
  • - {{ scrap.quiz.title }}
  • + {{ scrap.quiz.title }} {% endfor %} {% for scrap in question_room_scraps %}
  • - {{ scrap.question_room.title }}
  • + {{ scrap.question_room.title }} {% endfor %}
    @@ -303,11 +303,17 @@
    {% for doc in documents %}
  • {% if doc.type == 'quiz' %} + - {{ doc.obj.title }} + + {{ doc.obj.title }} + {% elif doc.type == 'questionroom' %} + - {{ doc.obj.title }} + + {{ doc.obj.title }} + {% endif %}
  • {% endfor %} @@ -323,11 +329,17 @@
    {% else %} - ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š” + + +
    {% endif %} + {% endblock %} \ No newline at end of file diff --git a/StuckProject/quiz/urls.py b/StuckProject/quiz/urls.py index ed86c4b..f89f61b 100644 --- a/StuckProject/quiz/urls.py +++ b/StuckProject/quiz/urls.py @@ -9,6 +9,7 @@ urlpatterns = [ path('', home, name="home"), path('week//', home), + path('quiz/landing-page', landing_page, name="landing-page"), # ํด๋” path('folder//', view_folder, name='folder-view'), diff --git a/StuckProject/quiz/views.py b/StuckProject/quiz/views.py index e3ce523..7e166de 100644 --- a/StuckProject/quiz/views.py +++ b/StuckProject/quiz/views.py @@ -32,6 +32,10 @@ from docx import Document +@login_required +def landing_page(request): + return render(request, 'quiz/landing.html') + def calculate_week_number_within_month(today): # ๋‹ฌ์˜ ์ฒซ๋ฒˆ์งธ ๊ณ„์‚ฐ first_day_of_month = date(today.year, today.month, 1) diff --git a/StuckProject/static/css/create_question_room.css b/StuckProject/static/css/create_question_room.css index 373f56b..20e180c 100644 --- a/StuckProject/static/css/create_question_room.css +++ b/StuckProject/static/css/create_question_room.css @@ -1,5 +1,5 @@ main { - width: 80%; + width: 1280px; margin: 0 auto; } @@ -60,7 +60,7 @@ select { align-items: center; } -button { +.button { display: flex; justify-content: center; align-items: center; @@ -111,3 +111,34 @@ p { height: 1px; opacity: 10; } + +.loading-screen { + display: none; /* ์ดˆ๊ธฐ์—๋Š” ๋ณด์ด์ง€ ์•Š๋„๋ก ์„ค์ • */ + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.7); /* ๋ฐ˜ํˆฌ๋ช…ํ•œ ๋ฐฐ๊ฒฝ์ƒ‰ */ + z-index: 9999; /* ๋‹ค๋ฅธ ์š”์†Œ๋“ค๋ณด๋‹ค ์œ„์— ํ‘œ์‹œ */ + justify-content: center; + align-items: center; +} + +.loading-spinner { + border: 4px solid rgba(255, 255, 255, 0.3); /* ํˆฌ๋ช…ํ•œ ํ…Œ๋‘๋ฆฌ */ + border-top: 4px solid #ffffff; /* ํฐ์ƒ‰์˜ ์œ—๋ถ€๋ถ„ ํ…Œ๋‘๋ฆฌ */ + border-radius: 50%; /* ์›ํ˜• ๋ชจ์–‘์„ ์œ„ํ•œ ํ…Œ๋‘๋ฆฌ ๋ฐ˜์ง€๋ฆ„ */ + width: 50px; + height: 50px; + animation: spin 1s linear infinite; /* ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜ */ +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/StuckProject/static/css/create_quiz.css b/StuckProject/static/css/create_quiz.css index 373f56b..f82cc5f 100644 --- a/StuckProject/static/css/create_quiz.css +++ b/StuckProject/static/css/create_quiz.css @@ -1,8 +1,10 @@ main { - width: 80%; + width: 1280px; margin: 0 auto; } - +.navbar .nav-qna * { + color: #09A8FA; +} h6, label { margin: 0; @@ -60,7 +62,7 @@ select { align-items: center; } -button { +.button { display: flex; justify-content: center; align-items: center; @@ -111,3 +113,30 @@ p { height: 1px; opacity: 10; } + +.loading-screen { + display: none; /* ์ดˆ๊ธฐ์—๋Š” ๋ณด์ด์ง€ ์•Š๋„๋ก ์„ค์ • */ + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.7); /* ๋ฐ˜ํˆฌ๋ช…ํ•œ ๋ฐฐ๊ฒฝ์ƒ‰ */ + z-index: 9999; /* ๋‹ค๋ฅธ ์š”์†Œ๋“ค๋ณด๋‹ค ์œ„์— ํ‘œ์‹œ */ + justify-content: center; + align-items: center; +} + +.loading-spinner { + border: 4px solid rgba(255, 255, 255, 0.3); /* ํˆฌ๋ช…ํ•œ ํ…Œ๋‘๋ฆฌ */ + border-top: 4px solid #ffffff; /* ํฐ์ƒ‰์˜ ์œ—๋ถ€๋ถ„ ํ…Œ๋‘๋ฆฌ */ + border-radius: 50%; /* ์›ํ˜• ๋ชจ์–‘์„ ์œ„ํ•œ ํ…Œ๋‘๋ฆฌ ๋ฐ˜์ง€๋ฆ„ */ + width: 50px; + height: 50px; + animation: spin 1s linear infinite; /* ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜ */ +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} \ No newline at end of file diff --git a/StuckProject/static/css/forgot_id.css b/StuckProject/static/css/forgot_id.css index 764fedb..9608a88 100644 --- a/StuckProject/static/css/forgot_id.css +++ b/StuckProject/static/css/forgot_id.css @@ -73,7 +73,7 @@ input{ input::placeholder { color: #D2D2D2; } - input[type="submit"] { + input[type="submit"] , button[type = "submit"]{ margin-top: 50px; width: 586px; height: 60px; diff --git a/StuckProject/static/css/home.css b/StuckProject/static/css/home.css index 91dd40a..f3c9c30 100644 --- a/StuckProject/static/css/home.css +++ b/StuckProject/static/css/home.css @@ -2,14 +2,22 @@ main { width: 1305px; margin: 0 auto; } +.landing{ + width: 100%; +} .navbar .nav-home * { color: #09A8FA; } .mini-folder , .mini-quiz, .mini-test{ width: 20px; + height: 20px; margin-right: 10px; + margin-bottom: 10px; } +.mini-folder a, .mini-quiz a, .mini-test a{ + line-height: 20px; +} .today { font-weight: bold; background-color: #09A8FA; @@ -50,7 +58,7 @@ main { flex-direction: column; background-color: #F1F1F1; width: 280px; - height: 550px; + height: 380px; border-radius: 20px; } @@ -92,7 +100,7 @@ main { } .progress-container { - width: 575px; + width: 900px; background-color: #F1F1F1; border-radius: 25px; overflow: hidden; @@ -312,10 +320,11 @@ main { margin-left: 10px; color: #757575; } -.scrap-list li{ +.scrap-list li, .recent li{ height: 20px; display: flex; align-items: center; + margin: 10px 0; } a{ cursor: pointer; diff --git a/StuckProject/static/css/landing.css b/StuckProject/static/css/landing.css new file mode 100644 index 0000000..5cdc0d4 --- /dev/null +++ b/StuckProject/static/css/landing.css @@ -0,0 +1,21 @@ +main{ + width: 1280px; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: center; +} +main a{ + width: 1200px; + height: 132px; + color: white; + background-color: #09A8FA; + display: flex; + justify-content: center; + text-decoration: none; + margin: 30px; + border-radius: 10px; +} +.empty{ + height: 50px; +} diff --git a/StuckProject/static/css/mypage.css b/StuckProject/static/css/mypage.css index d33fbf4..2b11cd4 100644 --- a/StuckProject/static/css/mypage.css +++ b/StuckProject/static/css/mypage.css @@ -1,7 +1,8 @@ .navbar .nav-mypage * { color: #09A8FA; } - +.profile-img{ + margin-top:20px;} body { background-color: #FAFAFA; } diff --git a/StuckProject/static/css/question_room.css b/StuckProject/static/css/question_room.css new file mode 100644 index 0000000..21f229e --- /dev/null +++ b/StuckProject/static/css/question_room.css @@ -0,0 +1,218 @@ +main { + display: flex; + flex-grow: 1; + width: 1280px; + height: calc(100vh - 90px); /* header ๋†’์ด๋ฅผ ๋บ€ ์ „์ฒด ํŽ˜์ด์ง€ ๋†’์ด */ + margin: 0 auto; +} + +.left_main, +.right_main { + width: 50%; + display: flex; + flex-direction: column; + padding: 20px; +} + +.titletop { + display: flex; +} + +.icons { + margin-left: 42px; + margin-bottom: 10px; +} + +.left_main { + background-color: #f8f8f8; + position: relative; + padding-top: 0; +} + +.right_main { + background-color: white; + overflow-y: auto; +} + +.left_allow { + width: 23px; + height: 28px; + margin-right: 15px; +} + +.left_title h5 { + display: flex; + justify-content: center; + align-items: center; + border-radius: 15px; + background: var(--Primary, #09a8fa); + color: white; + font-size: 18px; + width: auto; + padding: 10px; + margin-left: 10px; +} + +.left_title div { + display: flex; + align-items: center; +} + +.left_title div a { + margin-left: 10px; +} + +.left_title { + flex-shrink: 0; /* ํฌ๊ธฐ ์กฐ์ • ๋ฐฉ์ง€ */ +} + +.chat-container { + display: flex; + flex-direction: column; + flex-grow: 1; /* ๋‚จ์€ ๊ณต๊ฐ„ ๋ชจ๋‘ ์ฐจ์ง€ */ + overflow: hidden; /* ๋‚ด๋ถ€ ์Šคํฌ๋กค ํ™œ์„ฑํ™” */ + background-color: #f8f8f8; /* ๋ฐฐ๊ฒฝ์ƒ‰ ์„ค์ • */ + padding-bottom: 80px; /* ์ฑ„ํŒ… ์ž…๋ ฅ ํผ ๊ณต๊ฐ„ ํ™•๋ณด */ +} + +.chat { + flex-grow: 1; + overflow-y: auto; /* ์ฑ„ํŒ… ๋‚ด์šฉ ์Šคํฌ๋กค ๊ฐ€๋Šฅ */ + padding: 20px; + background-color: #f8f8f8; /* ๋ฐฐ๊ฒฝ์ƒ‰ ์„ค์ • */ + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* Internet Explorer 10+ */ +} + +.chat::-webkit-scrollbar { + width: 0; + height: 0; /* Chrome, Safari, Opera */ +} + +.chat-form { + position: absolute; + bottom: 0; + left: 20px; + right: 20px; + display: flex; + align-items: center; + padding: 20px; + background-color: #f8f8f8; /* ๋ฐฐ๊ฒฝ์ƒ‰ ์„ค์ • */ +} + +.chat-form input { + flex-grow: 1; + margin-right: 10px; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; +} + +.chat-form button { + padding: 10px 20px; + background: var(--Primary, #09a8fa); + color: white; + border: none; + border-radius: 5px; +} + +.chatname { + display: flex; + align-items: center; + font-weight: 700; +} + +.right_main { + padding: 20px; + display: flex; + flex-direction: column; + gap: 20px; +} + +.right_main form { + display: flex; + flex-direction: column; + gap: 10px; +} + +.right_main textarea { + flex-grow: 1; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; +} + +.right_main button { + padding: 10px; + background: var(--Primary, #09a8fa); + color: white; + border: none; + border-radius: 5px; +} + +.input_q { + display: flex; + align-items: center; + background: #f8f8f8; + border-radius: 30px; + padding: 5px; + width: 100%; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); +} + +.input_q input { + flex-grow: 1; + border: none; + outline: none; + padding: 10px 15px; + border-radius: 30px; + background: transparent; +} + +.input_q button { + background: #09a8fa; + border: none; + outline: none; + display: flex; + justify-content: center; + align-items: center; + padding: 10px; + border-radius: 50%; + cursor: pointer; + width: 40px; + height: 40px; + margin-left: 5px; +} + +.input_q button img { + width: 20px; + height: 20px; +} + +.profile { + width: 30px; + height: 30px; + margin-right: 10px; +} + +.s-icon { + margin-right: 10px; +} + +.right_title { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 10px; +} + +.typo { + margin-left: 5px; + width: 24px; + height: 24px; +} + +textarea { + height: 380px; + resize: none; +} \ No newline at end of file diff --git a/StuckProject/static/css/results.css b/StuckProject/static/css/results.css index 631ade2..647bff2 100644 --- a/StuckProject/static/css/results.css +++ b/StuckProject/static/css/results.css @@ -1,9 +1,130 @@ -body { - width: 90%; - margin: auto; - background-color: #f1f1f1; + +.test_main { + width: 1440px; + margin: 0 auto; + display: flex; + + +} + +.wrap{ + display: flex; + flex-direction: column; + flex: 1; + +} +.result{ + height: fit-content; + padding: 20px; + flex: 1; + background-color: #F1F1F1; +} +h5 { + margin: 0; +} + +.test_info { + width: 1400px; + display: grid; + grid-template-columns: 1fr 7fr 2fr; + margin: 0 auto; + justify-content: center; + align-items: center; + gap: 20px; + padding: 20px; + padding-top: 20px; + padding-bottom: 5px; + border-bottom: 1.3px solid gray; +} + +.test_info > div, +.test_info > h5 { + display: flex; + flex-direction: column; + justify-content: center; + padding: 10px; +} + +.grid1 { + width: 89px; + height: 30px; + display: inline-flex; + justify-self: center; + align-items: center; + color: white; + border-radius: 100px; + background: #09a8fa; + font-size: 24px; + margin-bottom: 35px; +} + +.grid2 h5 { + font-size: 28px; + padding: 0; + display: flex; + flex-direction: column; + justify-content: flex-start; +} + +.grid2 p { + font-size: 16px; + justify-content: flex-start; + color: gray; +} + +.grid3 p { + margin: 3px; + padding: 0; } +.download { + display: flex; + justify-content: flex-end; + margin-top: 18px; + column-gap: 18px; +} + +label { + font-weight: 600; + font-size: 20px; +} + +input { + display: flex; + width: 320px; + height: 33px; + padding: 1px 18px; + align-items: center; + gap: 10px; + border-radius: 20px; + border: 0.5px solid var(--Secondary-Disabled, rgba(59, 59, 59, 0.2)); + background: var(--Teritary-Disabled, rgba(241, 241, 241, 0.2)); + box-shadow: -3px 4px 4px -3px rgba(0, 0, 0, 0.1) inset; + margin-bottom: 40px; +} + +button { + display: flex; + width: 342px; + padding: 19px 66px; + justify-content: center; + align-items: center; + gap: 10px; + border-radius: 20px; + background: #09a8fa; + border: none; + color: white; + font-size: 18px; + font-weight: 700; + margin: 60px auto; +} + +.questions { + margin-bottom: 40px; + color: #F1F1F1; +} + + .result_top { margin-top: 40px; display: flex; @@ -48,3 +169,22 @@ img { background: var(--Primary, #09a8fa); text-decoration: none; } +.nodisplay{ + display: none; +} +.nodisplay *{ +display: none; +} +.gray *{ + color: #CECECE; + +} +.gray input{ + border: 1px solid #CECECE; +} +.gray .questions{ + margin-top: 50px; +} +.empty{ + height: 100px; +} \ No newline at end of file diff --git a/StuckProject/static/css/select_folder.css b/StuckProject/static/css/select_folder.css index 3903db9..0b48c0f 100644 --- a/StuckProject/static/css/select_folder.css +++ b/StuckProject/static/css/select_folder.css @@ -1,8 +1,40 @@ .main { - width: 80%; + width: 1240px; margin: 0 auto; } - +.bf_select .rootpath{ + color: #3b3b3b; + width: fit-content; + background-color: rgba(0, 0, 0, 0); +} +.empty{ + height: 50px; +} +section a img{ + color: #3b3b3b; + text-decoration: none; + padding: 5px 10px; + height: fit-content; +} +section a{ + color: #3b3b3b; + text-decoration: none; + +} +section a p{ + height: fit-content; +} +section a:hover img{ + background-color: #f1f1f1; + padding: 5px 10px; + border-radius: 20px; +} +section a:hover p{ + height: fit-content; + border-radius: 10px; + background-color: #09a8fa; + color: #f1f1f1; +} h6 { margin: 0; } diff --git a/StuckProject/static/css/test.css b/StuckProject/static/css/test.css index 5e0c765..ce7dcf2 100644 --- a/StuckProject/static/css/test.css +++ b/StuckProject/static/css/test.css @@ -1,18 +1,35 @@ -main { - width: 80%; + +.test_main { + width: 1440px; margin: 0 auto; + display: flex; + + } +.wrap{ + display: flex; + flex-direction: column; + flex: 1; +} +.result{ + padding: 20px; + flex: 1; + background-color: #F1F1F1; +} h5 { margin: 0; } .test_info { + width: 1400px; display: grid; grid-template-columns: 1fr 7fr 2fr; + margin: 0 auto; justify-content: center; align-items: center; gap: 20px; + padding: 20px; padding-top: 20px; padding-bottom: 5px; border-bottom: 1.3px solid gray; @@ -103,3 +120,68 @@ button { .questions { margin-bottom: 40px; } + + +.result_top { + margin-top: 40px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.result_top h1 { + font-size: 30px; + font-weight: 900; + color: #3b3b3b; + margin: 0; +} + +img { + margin-left: 5px; +} + +.boldP { + font-weight: 700; +} + +.buttons { + display: flex; + justify-content: flex-end; + column-gap: 20px; + padding: 25px 0; + border-top: solid 1.5px rgb(216, 216, 216); +} + +.b1, +.b2, +.b3 { + color: white; + display: flex; + padding: 7px 15px; + justify-content: center; + align-items: center; + gap: 10px; + border: none; + border-radius: 100px; + background: var(--Primary, #09a8fa); + text-decoration: none; +} +.nodisplay{ + display: none; +} +.nodisplay *{ +display: none; +} +.gray *{ + color: #CECECE; + +} +.gray input{ + border: 1px solid #CECECE; +} +.gray .questions{ + margin-top: 50px; +} +.empty{ + height: 100px; +} \ No newline at end of file diff --git a/StuckProject/static/css/view_folder.css b/StuckProject/static/css/view_folder.css index da91096..0d24ceb 100644 --- a/StuckProject/static/css/view_folder.css +++ b/StuckProject/static/css/view_folder.css @@ -1,5 +1,30 @@ .navbar .nav-mystuck * { - color: #09A8FA; + color: #09a8fa; +} +section a img { + color: #3b3b3b; + text-decoration: none; + padding: 5px 10px; + height: fit-content; +} +section a { + color: #3b3b3b; + text-decoration: none; +} +section a p { + height: fit-content; +} +section a:hover img { + background-color: #f1f1f1; + padding: 5px 10px; + border-radius: 20px; +} +section a:hover p { + height: fit-content; + padding: 0 10px; + border-radius: 10px; + background-color: #09a8fa; + color: #f1f1f1; } .empty { @@ -12,15 +37,11 @@ a { text-decoration: none; } -a:hover { - text-decoration: underline; -} - .scrap { width: 1120px; height: 153px; padding: 40px; - border: 2px solid #D8D8D8; + border: 2px solid #d8d8d8; border-radius: 20px; color: #3b3b3b; } @@ -71,15 +92,15 @@ h4 { #trash-bin p { font-size: 20px; - line-height:180px; + line-height: 180px; font-weight: bold; color: #757575; } -.rootpath{ +.rootpath { color: #757575; margin-right: 10px; } -.path-title{ +.path-title { margin-left: 0; padding-left: 0; } @@ -87,13 +108,11 @@ h4 { font-size: 12px; color: #3b3b3b; margin-top: -75px; - } .top { display: flex; justify-content: space-between; - } .delete { @@ -127,31 +146,31 @@ h4 { .title { color: #3b3b3b; } -.folder-title img{ +.folder-title img { width: 21px; height: 36px; } -.scrap{ +.scrap { margin: 0 auto; } -.error{ +.error { position: absolute; margin-top: 73px; margin-left: -120px; font-size: 14px; - } .find { display: flex; align-items: center; width: 100%; } -.bf_select .path-title{ +.bf_select .path-title { color: #3b3b3b; background-color: rgba(0, 0, 0, 0); } -.find .sc1 a, .find .sc2 { +.find .sc1 a, +.find .sc2 { display: flex; margin: 20px; width: fit-content; @@ -162,17 +181,17 @@ h4 { border-radius: 20px; border: 1px solid #f1f1f1; } -.sc2 input[type="text"]{ +.sc2 input[type="text"] { width: 250px; font-size: 16px; color: #3b3b3b; background-color: rgba(0, 0, 0, 0); border: none; } -.sc2 input[type="text"]::placeholder{ +.sc2 input[type="text"]::placeholder { color: #3b3b3b; } -.sc2 button{ +.sc2 button { padding: 5px 10px; font-size: 16px; color: #ffffff; @@ -181,7 +200,7 @@ h4 { text-align: center; border: none; } -.sc2 input[type="text"]:focus{ +.sc2 input[type="text"]:focus { outline: none; } .find img { @@ -194,7 +213,6 @@ h4 { display: flex; align-items: center; gap: 16px; - } .left_circle { @@ -203,7 +221,6 @@ h4 { .left_circle_white { width: 21px; - } .bf_select { @@ -288,11 +305,6 @@ makequestion_before { .input_foldername button { padding: 7px 15px; border-radius: 100px; - background: var(--Primary-Hover, - linear-gradient(0deg, - rgba(255, 255, 255, 0.3) 0%, - rgba(255, 255, 255, 0.3) 100%), - #09a8fa); border: none; height: 31px; width: 81px; @@ -324,7 +336,6 @@ h4 h6 { height: 80px; } - .detail { display: flex; align-items: center; @@ -395,14 +406,18 @@ h4 h6 { .input_foldername button { padding: 7px 15px; border-radius: 100px; - background: var(--Primary-Hover, - linear-gradient(0deg, - rgba(255, 255, 255, 0.3) 0%, - rgba(255, 255, 255, 0.3) 100%), - #09a8fa); + background: var( + --Primary-Hover, + linear-gradient( + 0deg, + rgba(255, 255, 255, 0.3) 0%, + rgba(255, 255, 255, 0.3) 100% + ), + #09a8fa + ); border: none; height: 31px; width: 81px; font-size: 14px; color: white; -} \ No newline at end of file +} diff --git a/StuckProject/static/img/landing.png b/StuckProject/static/img/landing.png new file mode 100644 index 0000000..18ebc3a Binary files /dev/null and b/StuckProject/static/img/landing.png differ diff --git a/StuckProject/static/img/landing.svg b/StuckProject/static/img/landing.svg new file mode 100644 index 0000000..3662c85 --- /dev/null +++ b/StuckProject/static/img/landing.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StuckProject/static/img/qna-landing.svg b/StuckProject/static/img/qna-landing.svg new file mode 100644 index 0000000..3d08bf9 --- /dev/null +++ b/StuckProject/static/img/qna-landing.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/StuckProject/static/img/s-icon.png b/StuckProject/static/img/s-icon.png new file mode 100644 index 0000000..89c6494 Binary files /dev/null and b/StuckProject/static/img/s-icon.png differ diff --git a/StuckProject/static/img/send.png b/StuckProject/static/img/send.png new file mode 100644 index 0000000..aa28521 Binary files /dev/null and b/StuckProject/static/img/send.png differ diff --git a/StuckProject/static/img/typo.png b/StuckProject/static/img/typo.png new file mode 100644 index 0000000..e9433f1 Binary files /dev/null and b/StuckProject/static/img/typo.png differ diff --git a/StuckProject/static/js/test.js b/StuckProject/static/js/test.js new file mode 100644 index 0000000..cea54cc --- /dev/null +++ b/StuckProject/static/js/test.js @@ -0,0 +1,22 @@ +document.addEventListener("DOMContentLoaded", function () { + + const resultbtn = document.querySelector(".gotoresult"); + const result = document.querySelector(".result"); + const download = document.querySelector(".download"); + const test = document.querySelector(".test_main .wrap"); + resultbtn.addEventListener("click", ()=>{ + result.classList.remove("nodisplay"); + download.classList.add("nodisplay"); + test.classList.add("gray"); + + resultbtn.classList.add("nodisplay"); + window.scrollTo({ + top: 0, + behavior: 'smooth' + }); + }) + window.scrollTo({ + top: 0, + behavior: 'smooth' + }); +}) \ No newline at end of file diff --git a/StuckProject/templates/base.html b/StuckProject/templates/base.html index eb7742f..b90e560 100644 --- a/StuckProject/templates/base.html +++ b/StuckProject/templates/base.html @@ -19,8 +19,8 @@