Skip to content

Commit 535d160

Browse files
authored
Merge pull request #110 from TaskFlow-CLAP/CLAP-289
CLAP-289 1차 코드 통합
2 parents 46ec546 + 76ba414 commit 535d160

36 files changed

+482
-297
lines changed

src/api/auth.ts

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ import Cookies from 'js-cookie'
33
import type { loginDataTypes } from '@/types/auth'
44
import { useMemberStore } from '@/stores/member'
55

6-
export const postLogin = async (loginData: loginDataTypes, sessionId: string) => {
7-
const memberStore = useMemberStore()
8-
const response = await axiosInstance.post('/api/auths/login', loginData, {
9-
headers: { sessionId: sessionId }
10-
})
6+
export const postLogin = async (loginData: loginDataTypes) => {
7+
const response = await axiosInstance.post('/api/auths/login', loginData)
118
Cookies.set('accessToken', response.data.accessToken, {
129
path: '/',
1310
sameSite: 'strict'
@@ -16,7 +13,6 @@ export const postLogin = async (loginData: loginDataTypes, sessionId: string) =>
1613
path: '/',
1714
sameSite: 'strict'
1815
})
19-
await memberStore.updateMemberInfoWithToken()
2016
return response.data
2117
}
2218

@@ -26,16 +22,8 @@ export const patchPassword = async (password: string) => {
2622
}
2723

2824
export const deleteLogout = async () => {
29-
const refreshToken = Cookies.get('refreshToken')
30-
const accessToken = Cookies.get('accessToken')
31-
32-
const response = await axiosInstance.delete('/api/auths/logout', {
33-
headers: {
34-
Authorization: `Bearer ${accessToken}`,
35-
refreshToken: refreshToken
36-
}
37-
})
38-
Cookies.remove('accessToken', { path: '/' })
39-
Cookies.remove('refreshToken', { path: '/' })
40-
return response
25+
const memberStore = useMemberStore()
26+
memberStore.$reset()
27+
Cookies.remove('accessToken')
28+
Cookies.remove('refreshToken')
4129
}

src/components/LineChart.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
:options="options" />
66
<NoContent
77
v-else
8-
content="데이터가 없습니다" />
8+
:content="`집계된 ${periodText[periodType]} 데이터가 없습니다`" />
99
</template>
1010

1111
<script setup lang="ts">
@@ -22,6 +22,7 @@ import {
2222
Colors
2323
} from 'chart.js'
2424
import NoContent from './lists/NoContent.vue'
25+
import type { PeriodType } from '@/types/manager'
2526
2627
ChartJS.register(
2728
Title,
@@ -34,12 +35,15 @@ ChartJS.register(
3435
Colors
3536
)
3637
37-
const { labels, series, dataLabel } = defineProps<{
38+
const { labels, series, dataLabel, periodType } = defineProps<{
3839
labels: string[]
3940
series: number[]
4041
dataLabel: string
42+
periodType: PeriodType
4143
}>()
4244
45+
const periodText = { DAY: '일간', WEEK: '주간', MONTH: '월간' }
46+
4347
const teamData = {
4448
labels,
4549
datasets: [

src/components/PieChart.vue

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
:options="options" />
66
<NoContent
77
v-else
8-
content="집계된 데이터가 없습니다" />
8+
:content="
9+
!content && periodType ? `집계된 ${periodText[periodType]} 데이터가 없습니다` : content
10+
" />
911
</template>
1012

1113
<script setup lang="ts">
@@ -21,11 +23,19 @@ import {
2123
type ActiveElement
2224
} from 'chart.js'
2325
import NoContent from './lists/NoContent.vue'
26+
import type { PeriodType } from '@/types/manager'
2427
ChartJS.register(Title, Tooltip, Legend, ArcElement, Colors)
2528
26-
const { labels, series } = defineProps<{ labels: string[]; series: number[] }>()
29+
const { labels, series, periodType, content } = defineProps<{
30+
labels: string[]
31+
series: number[]
32+
periodType?: PeriodType
33+
content?: string
34+
}>()
2735
const emit = defineEmits(['onClick'])
2836
37+
const periodText = { DAY: '일간', WEEK: '주간', MONTH: '월간' }
38+
2939
const teamData = {
3040
labels,
3141
datasets: [
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<template>
2+
<ModalView
3+
:type="type"
4+
:is-open="isOpen"
5+
@close="emit('close')">
6+
<template #header>{{ message }}</template>
7+
</ModalView>
8+
</template>
9+
10+
<script setup lang="ts">
11+
import ModalView from '../ModalView.vue'
12+
13+
const { type, isOpen, message } = defineProps<{
14+
type: string
15+
isOpen: boolean
16+
message: string
17+
}>()
18+
const emit = defineEmits(['close'])
19+
</script>

src/components/icons/NotificationIcon.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<div
2020
v-if="newNotification"
2121
class="absolute top-0 right-0 w-5 h-5 rounded-full bg-red-1 text-white font-bold text-xs flex justify-center items-center">
22-
{{ newNotification }}
22+
{{ newNotification < 100 ? newNotification : 99 }}
2323
</div>
2424
</div>
2525
</template>

src/components/lists/NoContent.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template>
22
<div class="w-full h-full flex justify-center items-center">
3-
<span class="text-lg text-disabled font-bold">{{ content }}</span>
3+
<span class="text-lg text-disabled font-bold text-center">{{ content }}</span>
44
</div>
55
</template>
66

77
<script setup lang="ts">
8-
const { content = '표시할 항목이 없어요' } = defineProps<{ content?: string }>()
8+
const { content = '표시할 항목이 없습니다' } = defineProps<{ content?: string }>()
99
</script>

src/components/login-logs/LoginLogsListCard.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import type { ListCardProps } from '@/types/common'
1717
import ListCardTab from '../lists/ListCardTab.vue'
1818
import type { LoginLogsListData } from '@/types/admin'
19-
import { formatDate } from '@/utils/date'
19+
import { formatFullDateTime } from '@/utils/date'
2020
2121
const logStatus = {
2222
LOGIN: '로그인 시도',
@@ -31,7 +31,7 @@ const myRequestTabList: ListCardProps[] = [
3131
isTextXs: true,
3232
isTextBody: true
3333
},
34-
{ content: formatDate(info.requestAt), width: 180, isTextXs: true },
34+
{ content: formatFullDateTime(info.requestAt), width: 180, isTextXs: true },
3535
{ content: info.nickName, width: 80 },
3636
{ content: info.clientIp, width: 120, isTextXs: true },
3737
{ content: String(info.statusCode), width: 40, isTextXs: true, isStatusCode: true },

src/components/member-management/MemberManagementListCard.vue

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -35,25 +35,11 @@
3535
<template #header>회원을 삭제 하시겠습니까?</template>
3636
<template #body>삭제된 회원은 복구할 수 없습니다</template>
3737
</ModalView>
38-
<ModalView
39-
type="failType"
40-
:is-open="isModalVisible.fail"
41-
@close="closeModal">
42-
<template #header>회원 삭제에 실패했습니다</template>
43-
</ModalView>
44-
<ModalView
45-
type="successType"
46-
:is-open="isModalVisible.success"
47-
@close="closeModal">
48-
<template #header>회원을 삭제했습니다</template>
49-
</ModalView>
50-
51-
<ModalView
52-
type="successType"
53-
:is-open="isModalVisible.invite"
54-
@close="closeModal">
55-
<template #header>초대 메일을 발송하였습니다</template>
56-
</ModalView>
38+
<ResultModal
39+
:type="resultModalType"
40+
:is-open="isModalVisible.result"
41+
:message="message"
42+
@close="closeModal" />
5743
</template>
5844

5945
<script setup lang="ts">
@@ -66,6 +52,7 @@ import { ref } from 'vue'
6652
import { axiosInstance } from '@/utils/axios'
6753
import { useQueryClient } from '@tanstack/vue-query'
6854
import { formatDate } from '@/utils/date'
55+
import ResultModal from '../common/ResultModal.vue'
6956
7057
const roleContent = (role: Role) => {
7158
return role === 'ROLE_USER' ? '사용자' : role === 'ROLE_MANAGER' ? '담당자' : '관리자'
@@ -88,32 +75,44 @@ const queryClient = useQueryClient()
8875
8976
const isModalVisible = ref({
9077
delete: false,
91-
invite: false,
92-
fail: false,
93-
success: false
78+
result: false
9479
})
80+
const resultModalType = ref('')
81+
const message = ref('')
9582
const toggleModal = (key: keyof typeof isModalVisible.value) => {
9683
isModalVisible.value = Object.fromEntries(
9784
Object.keys(isModalVisible.value).map(k => [k, k === key])
9885
) as typeof isModalVisible.value
9986
}
10087
const closeModal = () => {
101-
const prevSuccess = isModalVisible.value.success
102-
isModalVisible.value = { delete: false, invite: false, fail: false, success: false }
88+
const prevSuccess = isModalVisible.value.result
89+
isModalVisible.value = { delete: false, result: false }
10390
if (prevSuccess) queryClient.invalidateQueries({ queryKey: ['member'] })
10491
}
10592
10693
const onMemberDelete = async (memberId: number) => {
10794
try {
108-
await axiosInstance.patch(`/api/managements/members/delete`, { memberId })
109-
toggleModal('success')
95+
await axiosInstance.delete(`/api/managements/members`, { data: { memberId } })
96+
resultModalType.value = 'successType'
97+
message.value = '회원을 삭제했습니다'
98+
toggleModal('result')
11099
} catch {
111-
toggleModal('fail')
100+
resultModalType.value = 'failType'
101+
message.value = '회원 삭제에 실패했습니다'
102+
toggleModal('result')
112103
}
113104
}
114105
115-
const onMemberInvite = (memberId: number) => {
116-
console.log(memberId)
117-
toggleModal('invite')
106+
const onMemberInvite = async (memberId: number) => {
107+
try {
108+
await axiosInstance.post('/api/managements/members/invite', { memberId })
109+
resultModalType.value = 'successType'
110+
message.value = '초대 메일을 발송하였습니다'
111+
toggleModal('result')
112+
} catch {
113+
resultModalType.value = 'failType'
114+
message.value = '초대 메일 발송에 실패했습니다'
115+
toggleModal('result')
116+
}
118117
}
119118
</script>

src/components/my-request/MyRequestListCard.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<template>
2-
<div class="list-card">
2+
<div
3+
class="list-card"
4+
@click="handleModal(info.taskId)">
35
<ListCardTab
46
v-for="tab in myRequestTabList"
5-
@click="handleModal(info.taskId)"
67
:key="tab.content"
78
:content="tab.content"
89
:width="tab.width"
@@ -29,6 +30,8 @@ const { info } = defineProps<{ info: MyRequestListData }>()
2930
const selectedID = ref<number | null>(null)
3031
3132
const handleModal = (id: number | null) => {
33+
if (id) document.body.style.overflow = 'hidden'
34+
else document.body.style.overflow = ''
3235
selectedID.value = id
3336
}
3437

src/components/my-task/MyTaskListCard.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<template>
2-
<div class="list-card">
2+
<div
3+
class="list-card"
4+
@click="handleModal(info.taskId)">
35
<ListCardTab
46
v-for="tab in myRequestTabList"
5-
@click="handleModal(info.taskId)"
67
:key="tab.content"
78
:content="tab.content"
89
:width="tab.width"
@@ -29,6 +30,8 @@ const { info } = defineProps<{ info: MyTaskListData }>()
2930
const selectedID = ref<number | null>(null)
3031
3132
const handleModal = (id: number | null) => {
33+
if (id) document.body.style.overflow = 'hidden'
34+
else document.body.style.overflow = ''
3235
selectedID.value = id
3336
}
3437
const myRequestTabList: ListCardProps[] = [

0 commit comments

Comments
 (0)