Skip to content

Commit 07e50eb

Browse files
authored
Merge pull request #136 from TaskFlow-CLAP/CLAP-353
CLAP-353 Tony.tsx 오류 수정
2 parents 893e14f + 939930d commit 07e50eb

File tree

17 files changed

+107
-75
lines changed

17 files changed

+107
-75
lines changed

src/api/common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const getNotification = async (pageNum: number, sizeNum: number) => {
1212
}
1313

1414
export const patchNotificationRead = async (notificationId: number) => {
15-
const response = await axiosInstance.patch(`/api/notification/${notificationId}`)
15+
const response = await axiosInstance.patch(`/api/notifications/${notificationId}`)
1616
return response.data
1717
}
1818

src/components/api-logs/ApiLogsList.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { useQuery } from '@tanstack/vue-query'
3131
import type { ApiLogsResponse } from '@/types/admin'
3232
import { computed } from 'vue'
3333
import { useMemberStore } from '@/stores/member'
34+
import { storeToRefs } from 'pinia'
3435
3536
const { params } = useLogsParamsStore()
3637
const onPageChange = (value: number) => {
@@ -47,7 +48,8 @@ const fetchApiLogsList = async () => {
4748
return response.data
4849
}
4950
50-
const { isLogined } = useMemberStore()
51+
const memberStore = useMemberStore()
52+
const { isLogined } = storeToRefs(memberStore)
5153
const { data } = useQuery<ApiLogsResponse>({
5254
queryKey: ['apiLogs', params],
5355
queryFn: fetchApiLogsList,

src/components/common/ModalView.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<textarea
3535
v-if="type == 'inputType'"
3636
v-model="textValue"
37-
placeholder="거부 사유를 입력해주세요"
37+
placeholder="반려 사유를 입력해주세요"
3838
class="flex border w-full border-border-1 px-4 py-3 focus:outline-none resize-none h-[120px]" />
3939
</div>
4040

@@ -67,7 +67,7 @@
6767
type="button"
6868
class="button-large-red"
6969
@click="confirmModal">
70-
{{ type === 'inputType' ? '거부' : '삭제' }}
70+
{{ type === 'inputType' ? '반려' : '삭제' }}
7171
</button>
7272
</div>
7373
</div>

src/components/common/TaskCard.vue

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<div
3-
class="w-full max-w-80 border-l-8 bg-white py-4 pl-6 pr-4 flex flex-col gap-6 rounded-lg shadow-custom hover:bg-background-2 cursor-pointer"
3+
class="w-full max-w-80 border-l-8 bg-white p-4 flex flex-col gap-6 rounded-lg shadow-custom hover:bg-background-2 cursor-pointer"
44
:class="borderLeft"
55
@click="handleModal(data.taskId)">
66
<div class="flex flex-col gap-1">
@@ -21,9 +21,9 @@
2121
<span class="text-xs text-body">{{ data.mainCategoryName }} - {{ data.categoryName }}</span>
2222
</div>
2323
<div class="flex justify-between items-end">
24-
<span class="text-xs font-bold text-black whitespace-nowrap overflow-hidden text-ellipsis">{{
25-
data.taskCode
26-
}}</span>
24+
<span class="text-xs font-bold text-black whitespace-nowrap overflow-hidden text-ellipsis">
25+
{{ data.taskCode }}
26+
</span>
2727
<div class="flex flex-col gap-1 items-end">
2828
<span class="text-xs font-bold text-body">{{ data.requesterDepartment }}</span>
2929
<div class="flex items-center gap-1.5">
@@ -34,12 +34,12 @@
3434
</div>
3535
</div>
3636
</div>
37-
<TaskDetail
38-
v-if="selectedID"
39-
:is-approved="data.taskStatus !== 'REQUESTED'"
40-
:selected-id="selectedID"
41-
:close-task-detail="() => handleModal(null)" />
4237
</div>
38+
<TaskDetail
39+
v-if="selectedID"
40+
:selected-id="selectedID"
41+
:close-task-detail="() => handleModal(null)"
42+
click.stop />
4343
</template>
4444

4545
<script setup lang="ts">
@@ -54,15 +54,17 @@ import ImageContainer from './ImageContainer.vue'
5454
import TaskDetail from '../task-detail/TaskDetail.vue'
5555
5656
const { data } = defineProps<{ data: TaskCardProps; draggable?: boolean }>()
57+
const emit = defineEmits(['toggleModal'])
5758
const selectedID = ref<number | null>(null)
5859
5960
const borderLeft = computed(() => {
6061
return `border-${statusAsColor(data.taskStatus as Status)}-1`
6162
})
6263
6364
const handleModal = (id: number | null) => {
64-
if (data.taskId) document.body.style.overflow = 'hidden'
65+
if (id) document.body.style.overflow = 'hidden'
6566
else document.body.style.overflow = ''
67+
emit('toggleModal')
6668
selectedID.value = id
6769
}
6870
</script>

src/components/requested/RequestedListCard.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
@click.stop="userInfo.isReviewer && toggleModal('reject')"
2929
:class="
3030
userInfo.isReviewer
31-
? 'button-medium-primary'
31+
? 'button-medium-default'
3232
: 'button-medium text-disabled bg-background-1'
3333
">
34-
거부
34+
반려
3535
</button>
3636
</div>
3737
</div>

src/components/statistics/StatisticsCategoryCard.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ const mainSeries = computed(() => {
7373
})
7474
7575
const fetchSubStatistics = async () => {
76+
if (!isLogined.value) return
7677
const response = await axiosInstance.get('/api/tasks/statistics/subcategory', {
7778
params: {
7879
periodType: periodType.value,

src/components/task-board/TaskBoard.vue

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
<template>
2-
<div class="flex-1 overflow-y-auto">
3-
<div class="w-full flex gap-12 sticky top-0 bg-white z-30">
4-
<div class="flex flex-1 bg-primary2 rounded-t-lg">
2+
<div class="overflow-y-auto">
3+
<div class="w-full grid grid-cols-3 gap-12 sticky top-0 bg-white z-30">
4+
<div class="flex bg-primary2 rounded-t-lg">
55
<span class="text-xs font-bold text-body p-4">
66
진행 중 {{ data?.tasksInProgress.length }}
77
</span>
88
</div>
9-
<div class="flex flex-1 bg-primary2 rounded-t-lg">
9+
<div class="flex bg-primary2 rounded-t-lg">
1010
<span class="text-xs font-bold text-body p-4">
1111
검토 중 {{ data?.tasksInReviewing.length }}
1212
</span>
1313
</div>
14-
<div class="flex flex-1 bg-primary2 rounded-t-lg">
14+
<div class="flex bg-primary2 rounded-t-lg">
1515
<span class="text-xs font-bold text-body p-4">
1616
완료 {{ data?.tasksCompleted.length }}
1717
</span>
1818
</div>
1919
</div>
2020

21-
<div class="w-full flex gap-12 min-h-[calc(100%-48px)]">
22-
<div class="flex-1 px-4 pb-4 bg-primary2 rounded-b-lg relative">
21+
<div class="w-full grid grid-cols-3 gap-12 min-h-[calc(100%-48px)] overflow-hidden">
22+
<div class="grow shrink-0 px-4 pb-4 bg-primary2 rounded-b-lg relative">
2323
<div class="absolute top-0 left-0 px-4 w-full">
2424
<div
2525
v-if="data?.tasksInProgress.length === 0"
@@ -34,17 +34,21 @@
3434
group="taskList"
3535
item-key="task"
3636
class="flex flex-col gap-4 h-full"
37-
@change="event => onListChange(event, 'IN_PROGRESS')">
37+
@change="event => onListChange(event, 'IN_PROGRESS')"
38+
:disabled="isDetailOpen">
3839
<template #item="{ element }">
39-
<TaskCard
40-
:key="element.taskId"
41-
:data="element"
42-
draggable />
40+
<div>
41+
<TaskCard
42+
:key="element.taskId"
43+
:data="element"
44+
@toggle-modal="isDetailOpen = !isDetailOpen"
45+
draggable />
46+
</div>
4347
</template>
4448
</draggableComponent>
4549
</div>
4650

47-
<div class="flex-1 px-4 pb-4 bg-primary2 rounded-b-lg relative">
51+
<div class="grow shrink-0 px-4 pb-4 bg-primary2 rounded-b-lg relative">
4852
<div class="absolute top-0 left-0 px-4 w-full">
4953
<div
5054
v-if="data?.tasksInReviewing.length === 0"
@@ -59,17 +63,21 @@
5963
group="taskList"
6064
item-key="task"
6165
class="flex flex-col gap-4 h-full"
62-
@change="event => onListChange(event, 'IN_REVIEWING')">
66+
@change="event => onListChange(event, 'IN_REVIEWING')"
67+
:disabled="isDetailOpen">
6368
<template #item="{ element }">
64-
<TaskCard
65-
:key="element.taskId"
66-
:data="element"
67-
draggable />
69+
<div>
70+
<TaskCard
71+
:key="element.taskId"
72+
:data="element"
73+
@toggle-modal="isDetailOpen = !isDetailOpen"
74+
draggable />
75+
</div>
6876
</template>
6977
</draggableComponent>
7078
</div>
7179

72-
<div class="flex-1 px-4 pb-4 bg-primary2 rounded-b-lg relative">
80+
<div class="grow shrink-0 px-4 pb-4 bg-primary2 rounded-b-lg relative">
7381
<div class="absolute top-0 left-0 px-4 w-full">
7482
<div
7583
v-if="data?.tasksCompleted.length === 0"
@@ -84,12 +92,16 @@
8492
group="taskList"
8593
item-key="task"
8694
class="flex flex-col gap-4 h-full"
87-
@change="event => onListChange(event, 'COMPLETED')">
95+
@change="event => onListChange(event, 'COMPLETED')"
96+
:disabled="isDetailOpen">
8897
<template #item="{ element }">
89-
<TaskCard
90-
:key="element.taskId"
91-
:data="element"
92-
draggable />
98+
<div>
99+
<TaskCard
100+
:key="element.taskId"
101+
:data="element"
102+
@toggle-modal="isDetailOpen = !isDetailOpen"
103+
draggable />
104+
</div>
93105
</template>
94106
</draggableComponent>
95107
</div>
@@ -104,7 +116,7 @@ import type { Status } from '@/types/common'
104116
import type { DraggableEvent, TaskCardList } from '@/types/manager'
105117
import { axiosInstance } from '@/utils/axios'
106118
import { useQuery, useQueryClient } from '@tanstack/vue-query'
107-
import { computed } from 'vue'
119+
import { computed, ref } from 'vue'
108120
import draggableComponent from 'vuedraggable'
109121
import { storeToRefs } from 'pinia'
110122
import { useParseParams } from '@/hooks/useParseParams'
@@ -177,4 +189,6 @@ const { data } = useQuery<TaskCardList>({
177189
const tasksInProgress = computed(() => [...(data.value?.tasksInProgress || [])])
178190
const tasksInReviewing = computed(() => [...(data.value?.tasksInReviewing || [])])
179191
const tasksCompleted = computed(() => [...(data.value?.tasksCompleted || [])])
192+
193+
const isDetailOpen = ref(false)
180194
</script>

src/components/task-detail/TaskDetail.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
:onClick="closeTaskDetail"
44
class="fixed inset-0 bg-black bg-opacity-15 flex justify-center items-center z-50 p-12" />
55
<div
6-
@click.stop
76
class="flex flex-col overflow-y-auto rounded-lg w-[calc(100%-96px)] max-w-[1104px] min-w-[768px] h-[calc(100%-96px)] bg-white shadow-custom py-6 fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-50">
87
<TaskDetailTopBar
98
v-if="data"
@@ -45,7 +44,7 @@ import TaskDetailTopBar from './TaskDetailTopBar.vue'
4544
const { closeTaskDetail, selectedId } = defineProps<TaskDetailProps>()
4645
4746
const memberStore = useMemberStore()
48-
const { info } = storeToRefs(memberStore)
47+
const { info, isLogined } = storeToRefs(memberStore)
4948
5049
const { data } = useQuery<TaskDetailDatas>({
5150
queryKey: ['taskDetailUser', selectedId],
@@ -57,6 +56,7 @@ const { data } = useQuery<TaskDetailDatas>({
5756
5857
const { data: historyData } = useQuery<TaskDetailHistoryData>({
5958
queryKey: ['historyData', selectedId],
60-
queryFn: () => getHistory(selectedId)
59+
queryFn: () => getHistory(selectedId),
60+
enabled: isLogined
6161
})
6262
</script>

src/components/task-detail/TaskDetailHistoryFile.vue

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
<template>
22
<div :class="['flex w-full', isProcessor ? 'justify-end' : 'justify-start']">
33
<div :class="['w-10 h-10 rounded-full pt-1.5', isProcessor ? 'order-3' : 'order-1']">
4-
<img
5-
:src="history.details.commentFileDetails?.profileImageUrl || '/images/mockProfile.jpg'"
6-
class="rounded-full" />
4+
<ImageContainer
5+
:size="40"
6+
:url="history.details.commentFileDetails?.profileImageUrl" />
77
</div>
88
<div :class="['flex flex-col gap-2 px-4 order-2', isProcessor ? 'items-end' : 'items-start']">
99
<p>{{ history.details.commentFileDetails?.nickName }}</p>
1010
<div
1111
:class="[
12-
'flex max-w-[400px] flex-wrap px-6 py-4 gap-4 items-center text-black rounded-lg',
12+
'flex max-w-[400px] px-4 py-3 gap-4 items-center text-black rounded-lg',
1313
isProcessor ? 'bg-primary2' : 'bg-background-2'
1414
]">
1515
<a
16-
class="w-10 h-10 flex items-center justify-center bg-white border border-border-2 rounded-lg"
16+
class="w-10 h-10 flex items-center justify-center bg-white border border-border-2 rounded-lg shrink-0 hover:bg-primary2"
1717
:href="history.details.commentFileDetails?.url"
1818
download>
1919
<CommonIcons :name="fileIcon" />
@@ -63,6 +63,7 @@ import { useQueryClient } from '@tanstack/vue-query'
6363
import { storeToRefs } from 'pinia'
6464
import { computed, defineProps, ref } from 'vue'
6565
import CommonIcons from '../common/CommonIcons.vue'
66+
import ImageContainer from '../common/ImageContainer.vue'
6667
6768
const { history, requestorName, taskId } = defineProps<TaskDetailHistoryChatProps>()
6869

src/components/task-detail/TaskDetailLabelDropdown.vue

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
</div>
1515
<div
1616
v-if="dropdownOpen"
17-
class="absolute w-full h-32 overflow-y-auto top-12 flex flex-col gap-2 p-2 bg-white rounded z-10 shadow-custom text-black">
17+
class="absolute w-full pb-6 top-12">
1818
<div
19-
v-for="option in labelArr"
20-
:key="option.labelId"
21-
class="w-full flex text-sm items-center h-10 p-1.5 rounded hover:bg-background-2 cursor-pointer"
22-
@click="selectOption(option)">
23-
{{ option.labelName }}
19+
class="w-full h-32 overflow-y-auto flex flex-col gap-2 p-2 bg-white rounded z-10 shadow-custom text-black">
20+
<div
21+
v-for="option in labelArr"
22+
:key="option.labelId"
23+
class="w-full flex text-sm items-center h-10 p-1.5 rounded hover:bg-background-2 cursor-pointer"
24+
@click="selectOption(option)">
25+
{{ option.labelName }}
26+
</div>
2427
</div>
2528
</div>
2629
</div>

0 commit comments

Comments
 (0)