Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
students
Today KU
Commits
52f6e103
Commit
52f6e103
authored
Nov 05, 2021
by
Choi Ga Young
Browse files
Merge remote-tracking branch 'origin/kimpen' into rkyoung7
parents
ec8f789e
dbfd910e
Changes
24
Show whitespace changes
Inline
Side-by-side
client/src/apis/plan.api.js
View file @
52f6e103
...
...
@@ -7,20 +7,6 @@ const getDetail = async (planId) => {
return
data
}
// const addPlan = async (info, id) => {
// console.log('addPlan 확인', id)
// const url = `${baseUrl}/api/plan/addplan/${id}`
// const { data } = await axios.post(url, { info, id });
// return data
// }
// const editPlan = async (info, id) => {
// console.log('editPlan확인', id)
// const url = `${baseUrl}/api/plan/edit/${id}`
// const { data } = await axios.put(url, { info, id });
// return data
// }
const
submit
=
async
(
info
)
=>
{
const
url
=
`
${
baseUrl
}
/api/plan`
const
{
data
}
=
await
axios
.
post
(
url
,
info
)
...
...
@@ -41,8 +27,6 @@ const remove = async (planId) => {
const
planApi
=
{
getDetail
,
// addPlan,
// editPlan,
submit
,
edit
,
remove
...
...
client/src/apis/todo.api.js
0 → 100644
View file @
52f6e103
import
axios
from
"
axios
"
;
import
baseUrl
from
"
../utils/baseUrl
"
;
const
getTodo
=
async
(
userId
,
date
=
""
,
todoId
=
""
)
=>
{
const
{
data
}
=
await
axios
.
get
(
`
${
baseUrl
}
/api/todo/
${
userId
}
?todoId=
${
todoId
}
&date=
${
date
}
`
)
return
data
}
const
submit
=
async
(
todo
,
userId
)
=>
{
const
{
data
}
=
await
axios
.
post
(
`
${
baseUrl
}
/api/todo/
${
userId
}
`
,
todo
)
return
data
}
const
edit
=
async
(
todo
,
userId
)
=>
{
const
{
data
}
=
await
axios
.
put
(
`
${
baseUrl
}
/api/todo/
${
userId
}
?todoId=
${
todo
.
id
}
`
,
todo
)
return
data
}
const
remove
=
async
(
todoId
,
userId
)
=>
{
const
{
data
}
=
await
axios
.
delete
(
`
${
baseUrl
}
/api/todo/
${
userId
}
?todoId=
${
todoId
}
`
)
return
data
}
const
todoApi
=
{
getTodo
,
submit
,
edit
,
remove
}
export
default
todoApi
\ No newline at end of file
client/src/components/Buttons/AddBtn.js
View file @
52f6e103
import
{
useParams
}
from
"
react-router-dom
"
;
import
TodoModal
from
"
../Modal/TodoModal
"
;
import
styles
from
"
./buttons.module.scss
"
;
const
AddBtn
=
()
=>
{
const
{
date
}
=
useParams
()
return
(
<>
<
i
className
=
{
`bi bi-plus-circle me-2 mb-1
${
styles
.
icon
}
`
}
data
-
bs
-
toggle
=
"
modal
"
data
-
bs
-
target
=
"
#todomodal
"
><
/i
>
<
TodoModal
/>
<
TodoModal
curDate
=
{
date
}
/
>
<
/
>
)
}
...
...
client/src/components/Buttons/buttons.module.scss
View file @
52f6e103
...
...
@@ -16,6 +16,7 @@
.icon
{
color
:
crimson
;
font-size
:
2
.7em
;
cursor
:
pointer
;
}
.backBtn
{
...
...
client/src/components/Calendar/AdminMonthly.js
View file @
52f6e103
...
...
@@ -93,6 +93,11 @@ const AdminMonthly = () => {
const
weekList
=
[
"
일
"
,
"
월
"
,
"
화
"
,
"
수
"
,
"
목
"
,
"
금
"
,
"
토
"
]
return
weekList
[
date
.
dow
]
}}
views
=
{{
dayGridMonth
:
{
dayMaxEvents
:
3
}
}}
validRange
=
{{
start
:
moment
(
initialDate
).
subtract
(
3
,
'
years
'
).
format
(
'
YYYY-MM[-01]
'
),
end
:
moment
(
initialDate
).
add
(
3
,
'
years
'
).
add
(
1
,
'
months
'
).
format
(
'
YYYY-MM[-01]
'
)
...
...
@@ -128,6 +133,10 @@ const AdminMonthly = () => {
}}
timeZone
=
"
local
"
events
=
{
scheduleList
}
eventLimit
=
{
3
}
moreLinkContent
=
{
function
(
arg
)
{
return
arg
.
shortText
}}
themeSystem
=
'
bootstrap
'
height
=
'
78vh
'
/>
...
...
client/src/components/Calendar/Monthly.js
View file @
52f6e103
...
...
@@ -88,6 +88,11 @@ const Monthly = () => {
const
weekList
=
[
"
일
"
,
"
월
"
,
"
화
"
,
"
수
"
,
"
목
"
,
"
금
"
,
"
토
"
]
return
weekList
[
date
.
dow
]
}}
views
=
{{
dayGridMonth
:
{
dayMaxEvents
:
3
}
}}
validRange
=
{{
start
:
moment
(
initialDate
).
subtract
(
3
,
'
years
'
).
format
(
'
YYYY-MM[-01]
'
),
end
:
moment
(
initialDate
).
add
(
3
,
'
years
'
).
add
(
1
,
'
months
'
).
format
(
'
YYYY-MM[-01]
'
)
...
...
@@ -120,7 +125,13 @@ const Monthly = () => {
dateClick
=
{({
dateStr
})
=>
history
.
push
(
`/schedule/
${
dateStr
}
`
)}
timeZone
=
"
local
"
themeSystem
=
'
bootstrap
'
eventLimit
=
"
3
"
eventLimit
=
{
3
}
moreLinkClick
=
{
function
(
arg
)
{
console
.
log
(
"
click..?
"
,
arg
)
}}
moreLinkContent
=
{
function
(
arg
)
{
return
arg
.
shortText
}}
height
=
'
80vh
'
/>
<
DatePickerModal
initialDate
=
{
initialDate
}
changeDate
=
{
changeDate
}
setChangeDate
=
{
setChangeDate
}
show
=
{
show
}
setShow
=
{
setShow
}
/
>
...
...
client/src/components/Form/StudyPlanEditForm.js
View file @
52f6e103
...
...
@@ -11,10 +11,8 @@ const StudyPlanEditForm = () => {
const
{
user
}
=
useAuth
();
const
params
=
useParams
();
const
[
disabled
,
setDisabled
]
=
useState
(
true
)
const
[
selected
,
setSelected
]
=
useState
(
""
);
const
[
error
,
setError
]
=
useState
(
""
);
const
[
success
,
setSuccess
]
=
useState
(
false
)
const
[
subjectName
,
setSubjectName
]
=
useState
(
""
);
const
[
studyplan
,
setStudyplan
]
=
useState
({
studyplanTitle
:
""
,
endDate
:
""
,
...
...
@@ -43,13 +41,8 @@ const StudyPlanEditForm = () => {
useEffect
(()
=>
{
getSubject
(
user
.
id
)
console
.
log
(
"
useEffect params 확인
"
,
params
)
if
(
params
.
subjectId
)
setStudyplan
({...
studyplan
,
selected
:
params
.
subjectId
})
else
if
(
params
.
planId
)
getInfo
(
params
.
planId
);
// if (params.hasOwnProperty('planId')) {
// console.log('planId params확인');
// getInfo(params.planId);
// }
},
[])
async
function
getSubject
(
id
)
{
...
...
@@ -66,29 +59,7 @@ const StudyPlanEditForm = () => {
try
{
setError
(
""
)
const
result
=
await
planApi
.
getDetail
(
planId
)
console
.
log
(
'
수정 getInfo result
'
,
result
)
setStudyplan
({
...
studyplan
,
...
result
})
// setSubjectName(result.subjectName)
// if (result.endTime) {
// setStudyplan({
// studyplanTitle: result.title,
// endDate: result.endDate,
// endTime: result.endTime,
// memo: result.memo,
// deadline: result.deadline,
// selected: result.subjectId
// })
// setSubjectName(result.subjectName)
// } else {
// setStudyplan({
// studyplanTitle: result.title,
// endDate: result.endDate,
// memo: result.memo,
// deadline: result.deadline,
// selected: result.subjectId
// })
// setSubjectName(result.subjectName)
// }
}
catch
(
error
)
{
catchErrors
(
error
,
setError
)
}
...
...
client/src/components/Form/SubjectForm.js
View file @
52f6e103
...
...
@@ -9,14 +9,14 @@ import styles from "./form.module.scss";
const
SubjectForm
=
()
=>
{
const
{
user
}
=
useAuth
();
const
{
subjectId
}
=
useParams
();
const
[
success
,
setSuccess
]
=
useState
(
false
)
const
[
success
,
setSuccess
]
=
useState
(
false
)
;
const
[
error
,
setError
]
=
useState
(
""
);
const
[
disabled
,
setDisabled
]
=
useState
(
true
)
const
[
disabled
,
setDisabled
]
=
useState
(
true
)
;
const
[
subject
,
setSubject
]
=
useState
({
lectureName
:
""
,
prof
:
""
,
classRoom
:
""
})
})
;
useEffect
(()
=>
{
if
(
subjectId
)
getInfo
(
subjectId
);
...
...
client/src/components/Menu/Menu.js
View file @
52f6e103
import
{
useState
,
useEffect
}
from
"
react
"
;
import
{
Link
}
from
"
react-router-dom
"
;
import
todoApi
from
"
../../apis/todo.api
"
;
import
{
useAuth
}
from
"
../../utils/context.js
"
;
import
catchErrors
from
"
../../utils/catchErrors
"
;
import
moment
from
"
moment
"
;
import
styles
from
"
./menu.module.scss
"
;
const
Menu
=
()
=>
{
const
{
user
,
logout
}
=
useAuth
();
const
[
todoList
,
setTodoList
]
=
useState
([])
const
[
error
,
setError
]
=
useState
(
""
);
useEffect
(()
=>
{
todayTodo
()
},
[])
async
function
todayTodo
()
{
try
{
setError
(
""
)
const
result
=
await
todoApi
.
getTodo
(
user
.
id
,
moment
().
format
(
"
YYYY-MM-DD
"
))
console
.
log
(
"
client resList
"
,
result
)
setTodoList
(
result
)
}
catch
(
error
)
{
catchErrors
(
error
,
setError
)
}
}
return
(
<>
...
...
client/src/components/Modal/TodoModal.js
View file @
52f6e103
import
{
useState
}
from
"
react
"
;
import
{
useState
,
useEffect
,
useRef
}
from
"
react
"
;
import
todoApi
from
"
../../apis/todo.api
"
;
import
{
useAuth
}
from
"
../../utils/context
"
;
import
catchErrors
from
"
../../utils/catchErrors
"
;
import
moment
from
"
moment
"
;
import
styles
from
"
./modal.module.scss
"
;
const
TodoModal
=
()
=>
{
const
TodoModal
=
({
curDate
,
selectTodo
=
""
})
=>
{
const
{
user
}
=
useAuth
()
const
[
todo
,
setTodo
]
=
useState
({
todoTitle
:
""
,
todoDate
:
moment
().
format
(
"
YYYY-MM-DD
"
)
todoDate
:
moment
(
curDate
).
format
(
"
YYYY-MM-DD
"
)
})
const
[
error
,
setError
]
=
useState
(
""
);
useEffect
(()
=>
{
setTodo
({
...
todo
,
todoDate
:
curDate
})
},
[
curDate
])
useEffect
(()
=>
{
if
(
selectTodo
)
{
console
.
log
(
"
selectTodo 값 변경으로 실행
"
)
setTodo
({
...
todo
,
...
selectTodo
})
}
},
[
selectTodo
])
const
handleChange
=
(
e
)
=>
{
const
{
name
,
value
}
=
e
.
target
setTodo
({
...
todo
,
[
name
]:
value
})
}
const
handleClick
=
()
=>
{
setTodo
({
todoTitle
:
""
,
todoDate
:
moment
().
format
(
"
YYYY-MM-DD
"
)
})
async
function
handleSubmit
()
{
try
{
setError
(
""
)
if
(
selectTodo
)
{
await
todoApi
.
edit
(
todo
,
user
.
id
)
alert
(
"
해당 할일이 성공적으로 수정되었습니다.
"
)
}
else
{
await
todoApi
.
submit
(
todo
,
user
.
id
)
alert
(
"
해당 할일이 성공적으로 등록되었습니다.
"
)
}
window
.
location
.
reload
()
}
catch
(
error
)
{
catchErrors
(
error
,
setError
)
}
}
return
(
<
div
className
=
"
modal fade
"
id
=
"
todomodal
"
data
-
bs
-
backdrop
=
"
static
"
data
-
bs
-
keyboard
=
"
false
"
tabIndex
=
"
-1
"
aria
-
labelledby
=
"
todoLabel
"
aria
-
hidden
=
"
true
"
>
{
console
.
log
(
"
Modal date==
"
,
curDate
,
selectTodo
)}
<
div
className
=
"
modal-dialog modal-dialog-centered
"
>
<
div
className
=
"
modal-content
"
style
=
{{
backgroundColor
:
"
crimson
"
}}
>
<
div
className
=
"
modal-header px-2 py-1
"
>
...
...
@@ -31,7 +57,7 @@ const TodoModal = () => {
<
div
className
=
"
modal-body bg-white
"
>
<
input
type
=
"
text
"
name
=
"
todoTitle
"
className
=
{
`form-control border-top-0 border-end-0 border-start-0 shadow-none rounded-0
${
styles
.
textInput
}
`
}
placeholder
=
"
제목
"
onChange
=
{
handleChange
}
value
=
{
todo
.
todoTitle
}
/
>
placeholder
=
"
제목
"
onChange
=
{
handleChange
}
value
=
{
todo
.
todoTitle
}
autoComplete
=
"
off
"
/>
<
div
className
=
"
d-flex justify-content-between mt-4
"
>
<
label
className
=
"
col-2 col-form-label ms-2
"
>
날짜
<
/label
>
<
div
className
=
"
col-8 d-flex align-items-center
"
>
...
...
@@ -41,8 +67,8 @@ const TodoModal = () => {
<
/div
>
<
div
className
=
"
modal-footer bg-white p-1
"
>
<
button
type
=
"
button
"
className
=
"
btn btn-secondary btn-sm
"
data
-
bs
-
dismiss
=
"
modal
"
onClick
=
{
handleClick
}
>
취소
<
/button
>
<
button
type
=
"
button
"
className
=
"
btn btn-crimson btn-sm
"
>
확인
<
/button
>
data
-
bs
-
dismiss
=
"
modal
"
onClick
=
{
()
=>
setTodo
({
todoTitle
:
""
,
todoDate
:
""
})
}
>
취소
<
/button
>
<
button
type
=
"
button
"
className
=
"
btn btn-crimson btn-sm
"
onClick
=
{
handleSubmit
}
>
{
selectTodo
?
"
수정
"
:
"
확인
"
}
<
/button
>
<
/div
>
<
/div
>
<
/div
>
...
...
client/src/components/Modal/TodoPostModal.js
View file @
52f6e103
const
TodoPostModal
=
()
=>
{
const
TodoPostModal
=
(
{
handleClick
}
)
=>
{
return
(
<>
<
div
className
=
"
modal fade
"
id
=
"
postmodal
"
data
-
bs
-
backdrop
=
"
static
"
data
-
bs
-
keyboard
=
"
false
"
tabIndex
=
"
-1
"
aria
-
labelledby
=
"
staticBackdropLabel
"
aria
-
hidden
=
"
true
"
>
<
div
className
=
"
modal-dialog modal-dialog-centered
"
>
<
div
className
=
"
modal-content
"
>
...
...
@@ -8,14 +7,13 @@ const TodoPostModal = () => {
<
p
className
=
"
m-2 text-center
"
style
=
{{
fontSize
:
"
17px
"
}}
>
해당
일정을
내일로
미루시겠습니까
?
<
/p
>
<
/div
>
<
div
className
=
"
modal-footer p-1
"
>
<
button
type
=
"
button
"
className
=
"
btn btn-crimson btn-sm
"
>
네
<
/button
>
<
button
type
=
"
button
"
className
=
"
btn btn-crimson btn-sm
"
data
-
bs
-
dismiss
=
"
modal
"
onClick
=
{
handleClick
}
>
네
<
/button
>
<
button
type
=
"
button
"
className
=
"
btn btn-secondary btn-sm
"
data
-
bs
-
dismiss
=
"
modal
"
>
아니요
<
/button
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/
>
)
}
...
...
client/src/components/StudyPlan/PlanLineList.js
View file @
52f6e103
import
{
Link
}
from
"
react-router-dom
"
;
import
styles
from
"
.
./Form/form
.module.scss
"
;
import
styles
from
"
.
/studyplan
.module.scss
"
;
const
PlanLineList
=
({
subjectId
,
planList
=
[]
})
=>
{
return
(
<>
{
planList
.
length
!==
0
?
planList
.
map
(
plan
=>
<
div
className
=
"
d-flex justify-content-between
"
>
<
p
className
=
"
card-text mb-1
"
>-
{
plan
.
title
}
<
/p
>
<
p
className
=
{
`
card-text mb-1
${
styles
.
text
}
`
}
>-
{
plan
.
title
}
<
/p
>
<
input
className
=
{
`form-check-input shadow-none
${
styles
.
checkBox
}
`
}
type
=
"
checkbox
"
/>
<
/div>
)
: <Link className="text-decoration-none link-dark" to={`/
studyplan
/
submit
/
$
{
subjectId
}
`}>
<div className="d-flex">
...
...
client/src/components/
Card
/StudyPlanCard.js
→
client/src/components/
StudyPlan
/StudyPlanCard.js
View file @
52f6e103
import
{
Link
}
from
"
react-router-dom
"
;
import
PlanLineList
from
"
.
./StudyPlan
/PlanLineList
"
;
import
PlanLineList
from
"
./PlanLineList
"
;
const
StudyPlanCard
=
({
renList
})
=>
{
...
...
client/src/components/StudyPlanList.js
→
client/src/components/
StudyPlan/
StudyPlanList.js
View file @
52f6e103
import
{
useState
,
useEffect
}
from
'
react
'
;
import
{
Link
}
from
"
react-router-dom
"
;
import
StudyPlanCard
from
"
./
Card/
StudyPlanCard
"
;
import
subjectApi
from
'
../apis/subject.api
'
;
import
catchErrors
from
"
../utils/catchErrors
"
;
import
{
useAuth
}
from
"
../utils/context
"
;
import
styles
from
"
./
StudyPlan/
studyplan.module.scss
"
;
import
StudyPlanCard
from
"
./StudyPlanCard
"
;
import
subjectApi
from
'
../
../
apis/subject.api
'
;
import
catchErrors
from
"
../
../
utils/catchErrors
"
;
import
{
useAuth
}
from
"
../
../
utils/context
"
;
import
styles
from
"
./studyplan.module.scss
"
;
const
StudyPlanList
=
()
=>
{
const
{
user
}
=
useAuth
();
...
...
client/src/components/StudyPlan/studyplan.module.scss
View file @
52f6e103
...
...
@@ -16,3 +16,9 @@
background-image
:
url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='currentColor' d='M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")
;
}
}
.text
{
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
\ No newline at end of file
client/src/components/TodoList.js
View file @
52f6e103
import
{
useState
,
useEffect
}
from
"
react
"
;
import
{
useParams
}
from
"
react-router-dom
"
;
import
TodoModal
from
"
../components/Modal/TodoModal
"
;
import
TodoPostModal
from
"
../components/Modal/TodoPostModal
"
;
import
todoApi
from
"
../apis/todo.api
"
;
import
{
useAuth
}
from
"
../utils/context
"
;
import
catchErrors
from
"
../utils/catchErrors
"
;
import
moment
from
"
moment
"
;
import
styles
from
"
../components/Form/form.module.scss
"
;
const
TodoList
=
()
=>
{
const
{
user
}
=
useAuth
()
const
{
date
}
=
useParams
()
const
[
todoList
,
setTodoList
]
=
useState
([])
const
[
selectTodo
,
setSelectTodo
]
=
useState
(
null
)
const
[
error
,
setError
]
=
useState
(
""
);
useEffect
(()
=>
{
getAll
()
},
[
date
])
async
function
getAll
()
{
try
{
setError
(
""
)
const
resList
=
await
todoApi
.
getTodo
(
user
.
id
,
date
)
setTodoList
(
resList
)
}
catch
(
error
)
{
catchErrors
(
error
,
setError
)
}
}
async
function
delayTodo
()
{
try
{
setError
(
""
)
const
nextDate
=
moment
(
date
).
add
(
1
,
'
day
'
).
format
(
"
YYYY-MM-DD
"
)
await
todoApi
.
edit
({
id
:
selectTodo
.
id
,
todoDate
:
nextDate
},
user
.
id
)
getAll
()
}
catch
(
error
)
{
catchErrors
(
error
,
setError
)
}
}
async
function
delTodo
(
todoId
)
{
try
{
setError
(
""
)
await
todoApi
.
remove
(
todoId
,
user
.
id
)
alert
(
"
해당 할일이 성공적으로 삭제되었습니다.
"
)
getAll
()
}
catch
(
error
)
{
catchErrors
(
error
,
setError
)
}
}
return
(
<
div
className
=
"
d-flex mt-3
"
>
<
div
className
=
{
"
mt-3
"
+
(
todoList
.
length
?
"
d-flex
"
:
"
d-block
"
)}
>
{
todoList
.
length
!==
0
?
todoList
.
map
((
todo
,
idx
)
=>
<>
<
div
className
=
"
d-flex align-items-center
"
style
=
{{
width
:
"
75%
"
}}
>
<
input
className
=
{
`form-check-input rounded-0 shadow-none mt-0
${
styles
.
checkBox
}
`
}
type
=
"
checkbox
"
/>
<
label
className
=
"
form-check-label fs-5 ms-3 pe-2 text-nowrap
"
style
=
{{
overflow
:
"
hidden
"
,
textOverflow
:
"
ellipsis
"
}}
>
과제03
제출하기sadsa
<
/label
>
<
input
className
=
{
`form-check-input rounded-0 shadow-none mt-0
${
styles
.
checkBox
}
`
}
type
=
"
checkbox
"
checked
=
{
todo
.
done
}
/
>
<
label
className
=
"
form-check-label fs-5 ms-3 pe-2 text-nowrap
"
style
=
{{
overflow
:
"
hidden
"
,
textOverflow
:
"
ellipsis
"
}}
>
{
todo
.
todoTitle
}
<
/label
>
<
/div
>
<
div
className
=
"
d-flex justify-content-between
"
style
=
{{
cursor
:
"
pointer
"
,
width
:
"
25%
"
}}
>
<
i
className
=
"
bi bi-arrow-right fs-5
"
data
-
bs
-
toggle
=
"
modal
"
data
-
bs
-
target
=
"
#postmodal
"
><
TodoPostModal
/><
/i
>
<
i
className
=
"
bi bi-pencil-square fs-5
"
data
-
bs
-
toggle
=
"
modal
"
data
-
bs
-
target
=
"
#todomodal
"
><
/i
>
<
TodoModal
/>
<
i
className
=
"
bi bi-trash fs-5
"
><
/i
>
<
i
className
=
"
bi bi-arrow-right fs-5
"
data
-
bs
-
toggle
=
"
modal
"
data
-
bs
-
target
=
"
#postmodal
"
onClick
=
{()
=>
setSelectTodo
(
todo
)}
><
/i
>
<
i
className
=
"
bi bi-pencil-square fs-5
"
data
-
bs
-
toggle
=
"
modal
"
data
-
bs
-
target
=
"
#todomodal
"
onClick
=
{()
=>
setSelectTodo
(
todo
)}
><
/i
>
<
i
className
=
"
bi bi-trash fs-5
"
onClick
=
{()
=>
delTodo
(
todo
.
id
)}
><
/i
>
<
/div
>
<
/>
)
: <p className="text-center">등록된 할일이 없습니다.</
p
>
}
<
TodoPostModal
handleClick
=
{
delayTodo
}
/
>
<
TodoModal
curDate
=
{
date
}
selectTodo
=
{
selectTodo
}
/
>
<
/div
>
)
}
...
...
client/src/pages/StudyPlanListPage.js
View file @
52f6e103
import
Menu
from
"
../components/Menu/Menu
"
;
import
HomeBtn
from
"
../components/Buttons/HomeBtn
"
;
import
StudyPlanList
from
"
../components/StudyPlanList
"
;
import
StudyPlanList
from
"
../components/
StudyPlan/
StudyPlanList
"
;
const
StudyPlanListPage
=
()
=>
{
return
(
...
...
client/src/pages/ToDoPage.js
View file @
52f6e103
...
...
@@ -6,14 +6,14 @@ import Footer from "../components/Footer";
const
ToDoPage
=
()
=>
{
return
(
<>
<
div
>
<
Menu
/>
<
HomeBtn
/>
<
h1
className
=
"
text-center
"
>
To
-
do
<
/h1
>
<
Weekly
/>
<
TodoList
/>
<
Footer
/>
<
/
>
<
/
div
>
)
}
...
...
client/src/scss/custom.scss
View file @
52f6e103
...
...
@@ -145,6 +145,10 @@ button {
color
:
#FF0000
;
}
&
.fc-more-popover
{
display
:
none
;
}
&
.fc-dayGridDay-view
{
display
:
none
;
}
...
...
@@ -155,6 +159,8 @@ button {
&
.fc-event-title
{
display
:
block
;
text-overflow
:
ellipsis
;
height
:
15px
;
padding
:
0
;
}
}
...
...
server/controllers/plan.controller.js
View file @
52f6e103
import
{
Plan
,
Subject
}
from
"
../db/index.js
"
;
import
*
as
ConvertDate
from
"
./schedule.controller.js
"
;
// const addPlan = async (req, res) => {
// console.log('server/addPlan req.body', req.body)
// try {
// let end = null;
// let tf = false;
// const { info } = req.body
// const { studyplanTitle, endDate, endTime, deadline, memo, selected } = info
// console.log('제목확인', studyplanTitle)
// if (deadline === "on") {
// end = new Date(endDate + " " + endTime)
// tf = true
// } else {
// end = new Date(endDate)
// }
// const result = await Plan.create({
// subjectId: selected,
// title: studyplanTitle,
// deadline: end,
// memo: memo,
// timeChecked: tf,
// checked: false
// })
// return res.json(result)
// } catch (error) {
// console.log(error)
// return res.status(500).send(error.message || "계획저장 에러발생")
// }
// }
// const editPlan = async (req, res) => {
// const { info, id } = req.body
// console.log('editPlan info', info, '|', id)
// try {
// let result = null
// if (info.deadline === "on") {
// result = await Plan.update({
// subjectId: info.selected,
// title: info.studyplanTitle,
// deadline: new Date(info.endDate + " " + info.endTime),
// memo: info.memo,
// timeChecked: true,
// checked: false
// }, { where: { id: id } })
// res.send(200)
// } else {
// result = await Plan.update({
// subjectId: info.selected,
// title: info.studyplanTitle,
// deadline: new Date(info.endDate),
// memo: info.memo,
// timeChecked: false,
// checked: false
// }, {
// where: { id: id }
// })
// }
// if (!result) {
// throw new Error("과목정보 수정 에러발생")
// } else {
// return res.send(200)
// }
// } catch (error) {
// console.log(error)
// return res.status(500).send(error.message || "계획수정 에러발생")
// }
// }
// const getInfo = async (req, res) => {
// console.log('server/getInfo req.params', req.params)
// try {
// let deadlineStr = null
// let endTimeStr = null
// const { planId } = req.params;
// const findInfo = await Plan.findOne({ where: { id: planId } })
// const Info = findInfo.dataValues;
// const getSubTitle = await Subject.findAll({
// attributes: ['name'],
// where: { id: Info.subjectId }
// })
// deadlineStr = ConvertDate.dateToString(Info.deadline, "full")
// endTimeStr = ConvertDate.dateToString(Info.deadline, "time")
// if (Info.timeChecked) {
// res.json({
// subjectId: Info.subjectId,
// subjectName: getSubTitle[0].dataValues.name,
// title: Info.title,
// endDate: deadlineStr,
// endTime: endTimeStr,
// deadline: "on",
// memo: Info.memo
// })
// } else {
// res.json({
// subjectId: Info.subjectId,
// subjectName: getSubTitle[0].dataValues.name,
// title: Info.title,
// endDate: deadlineStr,
// deadline: "",
// memo: Info.memo
// })
// }
// } catch (error) {
// console.log(error)
// return res.status(500).send(error.message || "계획 가져오기 에러발생")
// }
// }
import
{
Plan
}
from
"
../db/index.js
"
;
import
{
dateToString
}
from
"
./schedule.controller.js
"
;
const
getOne
=
async
(
req
,
res
)
=>
{
try
{
let
findPlan
=
null
const
{
planId
}
=
req
.
query
console
.
log
(
"
get One
"
,
planId
)
if
(
planId
)
findPlan
=
await
Plan
.
findOne
({
where
:
{
id
:
planId
}
})
let
sendPlan
=
null
const
planId
=
req
.
planId
const
findPlan
=
await
Plan
.
findOne
({
where
:
{
id
:
planId
}
})
if
(
!
findPlan
)
throw
new
Error
(
"
학업 계획 정보를 찾지 못했습니다.
"
)
return
res
.
json
(
find
)
else
{
const
{
id
,
title
,
deadline
,
memo
,
timeChecked
,
checked
,
subjectId
}
=
findPlan
const
endDate
=
dateToString
(
deadline
,
"
full
"
)
if
(
timeChecked
)
{
const
endTime
=
dateToString
(
deadline
,
"
time
"
)
sendPlan
=
{
id
:
id
,
studyplanTitle
:
title
,
endDate
:
endDate
,
endTime
:
endTime
,
deadline
:
timeChecked
?
"
on
"
:
"
off
"
,
memo
:
memo
,
selected
:
subjectId
}
}
else
sendPlan
=
{
id
:
id
,
studyplanTitle
:
title
,
endDate
:
endDate
,
deadline
:
timeChecked
?
"
on
"
:
"
off
"
,
memo
:
memo
,
selected
:
subjectId
}
}
return
res
.
json
(
sendPlan
)
}
catch
(
error
)
{
return
res
.
status
(
500
).
send
(
error
.
message
||
"
학업계획 조회 중 에러 발생
"
)
}
...
...
@@ -151,7 +47,7 @@ const edit = async (req, res) => {
date
=
new
Date
(
endDate
+
"
"
+
endTime
)
check_v
=
true
}
else
date
=
new
Date
(
endDate
)
const
updated
=
await
Plan
.
update
d
({
title
:
studyplanTitle
,
deadline
:
date
,
memo
:
memo
,
timeChecked
:
check_v
,
subjectId
:
selected
},
{
where
:
{
id
:
planId
}
})
const
updated
=
await
Plan
.
update
({
title
:
studyplanTitle
,
deadline
:
date
,
memo
:
memo
,
timeChecked
:
check_v
,
subjectId
:
selected
},
{
where
:
{
id
:
planId
}
})
if
(
!
updated
)
throw
new
Error
(
"
해당 학업계획의 일부 정보를 수정하는데 실패하였습니다.
"
)
else
return
res
.
send
(
200
)
}
catch
(
error
)
{
...
...
@@ -186,7 +82,4 @@ export default {
edit
,
remove
,
getParams
// addPlan,
// editPlan,
// getInfo
}
\ No newline at end of file
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment