Skip to content

Commit 7d43b29

Browse files
authored
Merge pull request #106 from TaskFlow-CLAP/CLAP-252
CLAP-252 팀 작업 현황 페이지 API 연결
2 parents 5243669 + b5dcb27 commit 7d43b29

File tree

8 files changed

+80
-53
lines changed

8 files changed

+80
-53
lines changed

src/components/hooks/useTeamBoardParamsChange.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ export const useTeamBoardParamsChange = () => {
77
return array.includes(value) ? array.filter(el => el !== value) : [...array, value]
88
}
99

10-
const onOrderChange = (value: string) => {
11-
params.order = value
10+
const onSortByChange = (value: string) => {
11+
params.sortBy = value
1212
}
13-
const onTitleChange = (value: string) => {
14-
params.title = value
13+
const onTaskTitleChange = (value: string) => {
14+
params.taskTitle = value
1515
}
1616
const onMainChange = (value: number) => {
1717
params.mainCategoryIds = onArrayChange(params.mainCategoryIds, value)
@@ -21,8 +21,8 @@ export const useTeamBoardParamsChange = () => {
2121
}
2222

2323
return {
24-
onOrderChange,
25-
onTitleChange,
24+
onSortByChange,
25+
onTaskTitleChange,
2626
onMainChange,
2727
onSubChange
2828
}

src/components/team-board/CurrentTaskRatio.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
<div class="flex items-center gap-3">
77
<span class="text-xs font-bold text-body">진행 중 {{ teamSummary.inProgress }}건</span>
88
<div class="w-[1px] h-[10px] bg-body" />
9-
<span class="text-xs font-bold text-body"
10-
>완료 대기 {{ teamSummary.pendingCompletion }}건</span
11-
>
9+
<span class="text-xs font-bold text-body">완료 대기 {{ teamSummary.inReviewing }}건</span>
1210
</div>
1311
<span class="text-xs font-bold text-primary1">총 {{ teamSummary.totalTasks }}건</span>
1412
</div>
@@ -28,7 +26,7 @@ import PieChart from '../PieChart.vue'
2826
const { teamSummary, teamData } = defineProps<{
2927
teamSummary: {
3028
inProgress: number
31-
pendingCompletion: number
29+
inReviewing: number
3230
totalTasks: number
3331
}
3432
teamData: { name: string; tasks: number }[]

src/components/team-board/TeamBoard.vue

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,54 @@
55
:team-summary="teamSummary"
66
:team-data="teamData" />
77
<TeamBoardCard
8-
v-for="member in DUMMY_TEAM_MEMBERS_LIST"
9-
:key="member.name"
10-
:name="member.name"
11-
:department="member.department"
12-
:task-status-summary="member.taskStatusSummary"
13-
:tasks="member.tasks" />
8+
v-for="member in data?.members"
9+
:key="member.processorId"
10+
:info="member" />
11+
<NoContent
12+
v-if="data?.members.length === 0"
13+
content="검색된 담당자가 없습니다" />
1414
</div>
1515
</div>
1616
</template>
1717

1818
<script setup lang="ts">
19-
import { DUMMY_TEAM_MEMBERS_LIST } from '@/datas/dummy'
2019
import TeamBoardCard from './TeamBoardCard.vue'
2120
import CurrentTaskRatio from './CurrentTaskRatio.vue'
21+
import { axiosInstance } from '@/utils/axios'
22+
import { useTeamBoardParamsStore } from '@/stores/params'
23+
import { useQuery } from '@tanstack/vue-query'
24+
import { useParseParams } from '../hooks/useParseParams'
25+
import type { TeamBoardResponse } from '@/types/manager'
26+
import { computed } from 'vue'
27+
import NoContent from '../lists/NoContent.vue'
2228
23-
const getSummaryCount = (key: 'inProgress' | 'pendingCompletion' | 'totalTasks') => {
24-
let count = 0
25-
DUMMY_TEAM_MEMBERS_LIST.forEach(el => (count += el.taskStatusSummary[key]))
26-
return count
27-
}
28-
const teamSummary = {
29-
inProgress: getSummaryCount('inProgress'),
30-
pendingCompletion: getSummaryCount('pendingCompletion'),
31-
totalTasks: getSummaryCount('totalTasks')
29+
const { params } = useTeamBoardParamsStore()
30+
31+
const fetchTeamStatus = async () => {
32+
const { parseBoardParams } = useParseParams()
33+
const parsedParams = parseBoardParams(params)
34+
const response = await axiosInstance.get('/api/team-status/filter', { params: parsedParams })
35+
return response.data
3236
}
37+
const { data } = useQuery<TeamBoardResponse>({
38+
queryKey: ['teamStatus', params],
39+
queryFn: fetchTeamStatus
40+
})
41+
42+
const teamSummary = computed(() => {
43+
return {
44+
inProgress: data.value?.totalInProgressTaskCount || 0,
45+
inReviewing: data.value?.totalInReviewingTaskCount || 0,
46+
totalTasks: data.value?.totalTaskCount || 0
47+
}
48+
})
3349
34-
const teamData = DUMMY_TEAM_MEMBERS_LIST.map(el => ({
35-
name: el.name,
36-
tasks: el.taskStatusSummary.totalTasks
37-
}))
50+
const teamData = computed(() => {
51+
return (
52+
data.value?.members.map(el => ({
53+
name: el.nickname,
54+
tasks: el.totalTaskCount
55+
})) || []
56+
)
57+
})
3858
</script>

src/components/team-board/TeamBoardCard.vue

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,22 @@
55
<div class="w-6 h-6 rounded-full overflow-hidden">
66
<img src="https://picsum.photos/24" />
77
</div>
8-
<span class="text-black">{{ name }}</span>
8+
<span class="text-black">{{ info.nickname }}</span>
99
</div>
10-
<span class="text-xs font-bold text-body">{{ department }}</span>
10+
<span class="text-xs font-bold text-body">{{ info.department }}</span>
1111
</div>
1212
<div class="flex justify-between items-center">
1313
<div class="flex items-center gap-3">
14-
<span class="text-xs font-bold text-body"
15-
>진행 중 {{ taskStatusSummary.inProgress }}건</span
16-
>
14+
<span class="text-xs font-bold text-body">진행 중 {{ info.inProgressTaskCount }}건</span>
1715
<div class="w-[1px] h-[10px] bg-body" />
18-
<span class="text-xs font-bold text-body"
19-
>완료 대기 {{ taskStatusSummary.pendingCompletion }}건</span
20-
>
16+
<span class="text-xs font-bold text-body">검토 중 {{ info.inReviewingTaskCount }}건</span>
2117
</div>
22-
<span class="text-xs font-bold text-primary1">총 {{ taskStatusSummary.totalTasks }}건</span>
18+
<span class="text-xs font-bold text-primary1">총 {{ info.totalTaskCount }}건</span>
2319
</div>
2420
<div
2521
class="w-full h-[360px] rounded-lg bg-primary2 shadow-custom overflow-y-scroll flex flex-col items-center p-6 gap-4">
2622
<TaskCard
27-
v-for="task in tasks"
23+
v-for="task in info.tasks"
2824
:key="task.taskId"
2925
:data="task" />
3026
</div>
@@ -35,5 +31,5 @@
3531
import type { TeamBoardCardProps } from '@/types/manager'
3632
import TaskCard from '../TaskCard.vue'
3733
38-
const { name, department, taskStatusSummary, tasks } = defineProps<TeamBoardCardProps>()
34+
const { info } = defineProps<{ info: TeamBoardCardProps }>()
3935
</script>

src/components/team-board/TeamBoardFilterBar.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
<FilterDropdown
44
title="정렬"
55
:option-list="[
6-
{ value: 'CONTRIBUTION', content: '기여도순' },
7-
{ value: 'NAME', content: '이름순' }
6+
{ value: 'CONTRIBUTE', content: '기여도순' },
7+
{ value: 'DEFAULT', content: '이름순' }
88
]"
9-
:value="params.order"
10-
@update:value="onParamsChange.onOrderChange" />
9+
:value="params.sortBy"
10+
@update:value="onParamsChange.onSortByChange" />
1111
<FilterInput
1212
title="제목"
1313
:value="''"
14-
@update:value="onParamsChange.onTitleChange" />
14+
@update:value="onParamsChange.onTaskTitleChange" />
1515
<FilterCategory
1616
:category-list="data"
1717
:main="params.mainCategoryIds"

src/stores/params.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,11 @@ export const useLogsParamsStore = defineStore('logsParams', () => {
7979

8080
export const useTeamBoardParamsStore = defineStore('teamBoardParams', () => {
8181
const params = ref<TeamBoardParams>({
82-
order: 'CONTRIBUTION',
83-
title: '',
82+
sortBy: 'CONTRIBUTE',
8483
mainCategoryIds: [],
85-
categoryIds: []
84+
categoryIds: [],
85+
taskTitle: '',
86+
valid: true
8687
})
8788

8889
return { params }

src/types/manager.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,14 @@ export interface MyTaskListData {
6464
}
6565

6666
export interface TeamBoardCardProps {
67-
name: string
6867
department: string
69-
taskStatusSummary: { inProgress: number; pendingCompletion: number; totalTasks: number }
68+
imageUrl?: string
69+
inProgressTaskCount: number
70+
inReviewingTaskCount: number
71+
nickname: string
72+
processorId: number
7073
tasks: TaskCardProps[]
74+
totalTaskCount: number
7175
}
7276

7377
export type PeriodType = 'DAY' | 'WEEK' | 'MONTH'
@@ -166,3 +170,10 @@ export interface ManagerTypes {
166170
imageUrl: string
167171
remainingTasks: number
168172
}
173+
174+
export interface TeamBoardResponse {
175+
members: TeamBoardCardProps[]
176+
totalInProgressTaskCount: number
177+
totalInReviewingTaskCount: number
178+
totalTaskCount: number
179+
}

src/types/stores.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ export interface LogsParams {
3535
}
3636

3737
export interface TeamBoardParams {
38-
order: string
39-
title: string
38+
sortBy: string
4039
mainCategoryIds: number[]
4140
categoryIds: number[]
41+
taskTitle: string
42+
valid?: boolean
4243
}
4344

4445
export interface TaskBoardParams {

0 commit comments

Comments
 (0)