Skip to content

Commit 489f95b

Browse files
committed
Merge branch 'develop' of https://github.com/TaskFlow-CLAP/TaskFlow-FE into CLAP-225
2 parents ae0f361 + af1a5c5 commit 489f95b

25 files changed

+472
-258
lines changed

src/api/admin.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import type { NewLabelTypes } from '@/types/admin'
1+
import type { NewLabelTypes, UserRegistrationProps } from '@/types/admin'
22
import type { LabelDataTypes } from '@/types/common'
33
import { axiosInstance } from '@/utils/axios'
44

55
export const deleteLabelAdmin = async (id: number) => {
6-
const response = await axiosInstance.delete(`/api/management/labels/${id}`)
6+
const response = await axiosInstance.delete(`/api/managements/labels/${id}`)
77
return response.data
88
}
99

1010
export const postAddLabelAdmin = async (newLabel: NewLabelTypes) => {
11-
const response = await axiosInstance.post('/api/management/labels', newLabel)
11+
const response = await axiosInstance.post('/api/managements/labels', newLabel)
1212
return response.data
1313
}
1414

1515
export const patchLabelAdmin = async (editLabel: LabelDataTypes) => {
16-
const response = await axiosInstance.patch(`/api/management/labels/${editLabel.labelId}`, {
16+
const response = await axiosInstance.patch(`/api/managements/labels/${editLabel.labelId}`, {
1717
labelName: editLabel.labelName,
1818
labelColor: editLabel.labelColor
1919
})
@@ -24,3 +24,9 @@ export const deleteCategoryAdmin = async (id: number) => {
2424
const response = await axiosInstance.delete(`/api/managements/categories/${id}`)
2525
return response.data
2626
}
27+
28+
export const addMemberAdmin = async (memberData: UserRegistrationProps) => {
29+
console.log(memberData, '요청 데이터')
30+
const response = await axiosInstance.post('/api/managements/members', memberData)
31+
return response.data
32+
}

src/api/user.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Status } from '@/types/common'
12
import type { RequestApprovePostTypes } from '@/types/manager'
23
import { axiosInstance, formDataAxiosInstance } from '@/utils/axios'
34

@@ -30,3 +31,23 @@ export const getManager = async () => {
3031
const response = await axiosInstance.get('/api/managers')
3132
return response.data
3233
}
34+
35+
export const changeProcessor = async (taskID: number, processorId: number) => {
36+
const response = await axiosInstance.patch(`/api/tasks/${taskID}/processor`, { processorId })
37+
return response.data
38+
}
39+
40+
export const patchChangeStatus = async (taskID: number, status: Status) => {
41+
const response = await axiosInstance.patch(`/api/tasks/${taskID}/status`, status)
42+
return response.data
43+
}
44+
45+
export const changeLabel = async (taskID: number, labelId: number) => {
46+
const response = await axiosInstance.patch(`/api/tasks/${taskID}/label`, { labelId })
47+
return response.data
48+
}
49+
50+
export const getHistory = async (taskID: number) => {
51+
const response = await axiosInstance.get(`/api/tasks/${taskID}/histories`)
52+
return response.data
53+
}

src/assets/styles.css

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ body {
110110
@apply flex w-full h-11 items-center rounded p-4 bg-white border border-border-1 cursor-pointer text-black;
111111
}
112112
.request-task-dropdown-option-list {
113-
@apply absolute w-full h-40 overflow-y-auto top-[52px] flex flex-col gap-2 p-2 bg-white rounded z-10 shadow border-t border-t-border-2 text-black;
113+
@apply absolute w-full h-40 overflow-y-auto top-[52px] flex flex-col gap-2 p-2 bg-white rounded z-10 shadow-custom text-black;
114114
}
115115
.request-task-dropdown-option {
116116
@apply w-full flex items-center h-11 p-2 rounded hover:bg-background-2 cursor-pointer;
@@ -138,3 +138,6 @@ body {
138138
.task-detail-dropdown-option {
139139
@apply w-full flex items-center h-10 p-2 rounded hover:bg-background-2 cursor-pointer;
140140
}
141+
.task-detail-manager-dropdown {
142+
@apply flex w-full h-10 items-center rounded p-4 bg-white border border-border-1 cursor-pointer text-black;
143+
}

src/components/TopBar.vue

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<template>
2+
<div class="fixed w-full bg-white text-black py-2 border-b border-border-1">
3+
<div
4+
class="max-w-[1200px] min-w-[1024px] mx-auto px-6 flex w-full justify-between items-center">
5+
<div class="flex justify-center items-center gap-6 h-full">
6+
<button
7+
v-show="isLogined"
8+
@click="isSideOpen = true">
9+
<CommonIcons :name="hamburgerIcon" />
10+
</button>
11+
<img src="/MainLogo.svg" />
12+
</div>
13+
<div
14+
v-show="isLogined"
15+
class="flex items-center gap-6">
16+
<NotificationIcon :new-notification="12" />
17+
<img
18+
v-if="info?.imageUrl"
19+
class="rounded-[50%] w-10 h-10"
20+
:src="info.imageUrl"
21+
alt="프로필 이미지" />
22+
<div
23+
v-else
24+
class="rounded-[50%] bg-zinc-100 p-5" />
25+
</div>
26+
</div>
27+
</div>
28+
<SideBar
29+
v-if="isSideOpen"
30+
@close="onCloseSide" />
31+
</template>
32+
33+
<script setup lang="ts">
34+
import { useMemberStore } from '@/stores/member'
35+
import { storeToRefs } from 'pinia'
36+
import { onMounted, ref } from 'vue'
37+
import { hamburgerIcon } from '../constants/iconPath'
38+
import CommonIcons from './common/CommonIcons.vue'
39+
import NotificationIcon from './icons/NotificationIcon.vue'
40+
import SideBar from './top-bar/SideBar.vue'
41+
42+
const memberStore = useMemberStore()
43+
const { info } = storeToRefs(memberStore)
44+
45+
onMounted(async () => {
46+
await memberStore.updateMemberInfoWithToken()
47+
})
48+
49+
const isSideOpen = ref(false)
50+
const isLogined = ref(true)
51+
52+
const onCloseSide = () => {
53+
isSideOpen.value = false
54+
}
55+
</script>

src/components/my-task/MyTaskListCard.vue

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,35 @@
22
<div class="list-card">
33
<ListCardTab
44
v-for="tab in myRequestTabList"
5+
@click="handleModal(info.taskId)"
56
:key="tab.content"
67
:content="tab.content"
78
:width="tab.width"
89
:is-text-xs="tab.isTextXs"
910
:profile-img="tab.profileImg"
1011
:is-status="tab.isStatus" />
1112
</div>
13+
<TaskDetail
14+
v-if="selectedID"
15+
:is-approved="info.taskStatus !== 'REQUESTED'"
16+
:selected-id="selectedID"
17+
:close-task-detail="() => handleModal(null)" />
1218
</template>
1319

1420
<script setup lang="ts">
1521
import type { ListCardProps } from '@/types/common'
16-
import ListCardTab from '../lists/ListCardTab.vue'
1722
import type { MyTaskListData } from '@/types/manager'
1823
import { formatDate } from '@/utils/date'
24+
import { ref } from 'vue'
25+
import ListCardTab from '../lists/ListCardTab.vue'
26+
import TaskDetail from '../task-detail/TaskDetail.vue'
1927
2028
const { info } = defineProps<{ info: MyTaskListData }>()
29+
const selectedID = ref<number | null>(null)
30+
31+
const handleModal = (id: number | null) => {
32+
selectedID.value = id
33+
}
2134
const myRequestTabList: ListCardProps[] = [
2235
{ content: info.taskCode, width: 120, isTextXs: true },
2336
{ content: formatDate(info.requestedAt), width: 80 },

src/components/request-history/RequestHistoryListCard.vue

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,35 @@
22
<div class="list-card">
33
<ListCardTab
44
v-for="tab in myRequestTabList"
5+
@click="handleModal(info.taskId)"
56
:key="tab.content"
67
:content="tab.content"
78
:width="tab.width"
89
:is-text-xs="tab.isTextXs"
910
:profile-img="tab.profileImg"
1011
:is-status="tab.isStatus" />
1112
</div>
13+
<TaskDetail
14+
v-if="selectedID"
15+
:is-approved="info.taskStatus !== 'REQUESTED'"
16+
:selected-id="selectedID"
17+
:close-task-detail="() => handleModal(null)" />
1218
</template>
1319

1420
<script setup lang="ts">
1521
import type { ListCardProps } from '@/types/common'
16-
import ListCardTab from '../lists/ListCardTab.vue'
1722
import type { RequestHistoryListData } from '@/types/manager'
1823
import { formatDate } from '@/utils/date'
24+
import { ref } from 'vue'
25+
import ListCardTab from '../lists/ListCardTab.vue'
26+
import TaskDetail from '../task-detail/TaskDetail.vue'
1927
2028
const { info } = defineProps<{ info: RequestHistoryListData }>()
29+
const selectedID = ref<number | null>(null)
30+
31+
const handleModal = (id: number | null) => {
32+
selectedID.value = id
33+
}
2134
const myRequestTabList: ListCardProps[] = [
2235
{ content: info.taskCode, width: 120, isTextXs: true },
2336
{ content: formatDate(info.requestedAt), width: 80 },

src/components/request-task/RequestTask.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import type { Category, SubCategory } from '@/types/common'
4242
import { onMounted, ref, watch } from 'vue'
4343
import { useRouter } from 'vue-router'
4444
import FormButtonContainer from '../common/FormButtonContainer.vue'
45+
import ModalView from '../ModalView.vue'
4546
import CategoryDropDown from './CategoryDropDown.vue'
4647
import RequestTaskFileInput from './RequestTaskFileInput.vue'
4748
import RequestTaskInput from './RequestTaskInput.vue'
@@ -87,7 +88,6 @@ const handleCancel = () => {
8788
const handleSubmit = async () => {
8889
if (!category1.value || !category2.value) {
8990
isInvalidate.value = 'category'
90-
console.log(isInvalidate.value, '변경됨')
9191
return
9292
} else if (!title.value) {
9393
isInvalidate.value = 'input'
@@ -110,8 +110,8 @@ const handleSubmit = async () => {
110110
file.value.forEach(f => formData.append('attachment', f))
111111
}
112112
try {
113-
const res = await postTaskRequest(formData)
114-
console.error('요청 성공:', res)
113+
await postTaskRequest(formData)
114+
isModalVisible.value = true
115115
} catch (error) {
116116
console.error('요청 실패:', error)
117117
}

src/components/requested/RequestedListCard.vue

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
class="button-medium-default">
2020
거부
2121
</button>
22+
<button
23+
@click="toggleModal('reject')"
24+
class="button-medium-default">
25+
거부
26+
</button>
2227
</div>
2328
</div>
2429

@@ -47,13 +52,13 @@
4752
<script setup lang="ts">
4853
import type { ListCardProps } from '@/types/common'
4954
import type { RequestedListData } from '@/types/manager'
50-
import { formatDate } from '@/utils/date'
51-
import ModalView from '../ModalView.vue'
52-
import { ref } from 'vue'
5355
import { axiosInstance } from '@/utils/axios'
56+
import { formatDate } from '@/utils/date'
5457
import { useQueryClient } from '@tanstack/vue-query'
58+
import { ref } from 'vue'
5559
import { useRouter } from 'vue-router'
5660
import ListCardTab from '../lists/ListCardTab.vue'
61+
import ModalView from '../ModalView.vue'
5762
5863
const { info } = defineProps<{ info: RequestedListData }>()
5964
const requestedTabList: ListCardProps[] = [
Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,56 @@
11
<template>
2-
<div class="fixed inset-0 bg-black bg-opacity-15 flex justify-center items-center z-50">
2+
<div class="fixed inset-0 bg-black bg-opacity-15 flex justify-center items-center z-50 p-12">
33
<div
44
class="flex flex-col overflow-y-auto rounded-lg w-full max-w-[1200px] min-w-[1024px] bg-white p-6">
55
<TaskDetailTopBar
66
:is-approved="isApproved"
77
:close-task-detail="closeTaskDetail"
8-
:id="data?.taskId || 0" />
8+
:id="data?.taskId || 0"
9+
:isProcessor="data?.processorNickName === info.nickname" />
910
<div
1011
class="w-full flex gap-6"
1112
v-if="data">
1213
<div class="w-full h-[718px] flex flex-col gap-y-8 overflow-y-auto scrollbar-hide">
1314
<TaskDetailLeft :data="data" />
1415
<div class="w-full border-[0.5px] border-border-1"></div>
1516
<TaskDetailHistory
16-
:history="DUMMY_TASK_DETAIL_HISTORY"
17-
:is-approved="false" />
17+
:historyData="historyData?.histories || []"
18+
:is-approved="isApproved" />
1819
</div>
1920
<div class="w-[1px] bg-border-1"></div>
20-
<TaskDetailRight :data />
21+
<TaskDetailRight
22+
:data
23+
:isProcessor="data?.processorNickName === info.nickname" />
2124
</div>
2225
</div>
2326
</div>
2427
</template>
2528

2629
<script setup lang="ts">
27-
import { getTaskDetailManager } from '@/api/user'
28-
import * as taskDetailData from '@/datas/taskdetail'
29-
import type { TaskDetailDatas, TaskDetailProps } from '@/types/user'
30+
import { getHistory, getTaskDetailManager } from '@/api/user'
31+
import { useMemberStore } from '@/stores/member'
32+
import type { TaskDetailDatas, TaskDetailHistoryProps, TaskDetailProps } from '@/types/user'
3033
import { useQuery } from '@tanstack/vue-query'
34+
import { storeToRefs } from 'pinia'
3135
import TaskDetailHistory from './TaskDetailHistory.vue'
3236
import TaskDetailLeft from './TaskDetailLeft.vue'
3337
import TaskDetailRight from './TaskDetailRight.vue'
3438
import TaskDetailTopBar from './TaskDetailTopBar.vue'
3539
36-
const { DUMMY_TASK_DETAIL_HISTORY } = taskDetailData
3740
const { isApproved, closeTaskDetail, selectedId } = defineProps<TaskDetailProps>()
3841
42+
const memberStore = useMemberStore()
43+
const { info } = storeToRefs(memberStore)
44+
3945
const { data } = useQuery<TaskDetailDatas>({
4046
queryKey: ['taskDetailUser', selectedId],
4147
queryFn: () => getTaskDetailManager(selectedId)
4248
})
49+
50+
const { data: historyData } = useQuery<TaskDetailHistoryProps>({
51+
queryKey: ['historyData', selectedId],
52+
queryFn: () => getHistory(selectedId)
53+
})
54+
55+
console.log(historyData.value, '가져온 히스ㅇ토리', selectedId, '선택된 id')
4356
</script>
Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
<template>
22
<div>
33
<p class="task-detail">히스토리</p>
4-
<TaskDetailHistoryInput :history="history" />
4+
<TaskDetailHistoryInput :history="historyData" />
55
<div class="flex flex-col w-full items-center gap-6 mt-8">
66
<div
77
class="flex w-full flex-col items-center gap-6"
8-
v-for="item in history"
9-
:key="item.name">
8+
v-for="item in historyData"
9+
:key="item.historyId">
1010
<div
11-
class="flex w-[150px] h-7 items-center justify-center bg-primary1 rounded-xl text-white text-xs font-bold">
11+
class="flex px-4 h-7 items-center justify-center bg-primary1 rounded-full text-white text-xs font-bold">
1212
{{ formatDateWithDay(item.date) }}
1313
</div>
1414
<div class="flex w-full gap-1 justify-center text-body text-sm">
15-
<p>{{ HistoryMessageBefore[item.TaskHistoryType] }}</p>
15+
<p>{{ HistoryMessageBefore[item.taskHistoryType] }}</p>
1616
<p
17-
v-if="item.TaskHistoryType === 'STATUS_SWITCHED'"
17+
v-if="item.taskHistoryType === 'STATUS_SWITCHED'"
1818
class="text-primary1">
19-
{{ item.details.taskStatus }}
19+
{{ item.details.taskDetails?.value }}
2020
</p>
2121
<p
2222
v-else-if="
23-
item.TaskHistoryType === 'PROCESSOR_CHANGED' ||
24-
item.TaskHistoryType === 'PROCESSOR_ASSIGNED'
23+
item.taskHistoryType === 'PROCESSOR_CHANGED' ||
24+
item.taskHistoryType === 'PROCESSOR_ASSIGNED'
2525
"
2626
class="text-primary1">
27-
{{ item.name }}
27+
{{ item.details.taskDetails?.value }}
2828
</p>
29-
<TaskDetailHistoryChat v-else-if="item.TaskHistoryType === 'COMMENT'" />
30-
<p>{{ HistoryMessageAfter[item.TaskHistoryType] }}</p>
29+
<TaskDetailHistoryChat v-else-if="item.taskHistoryType === 'COMMENT'" />
30+
<p>{{ HistoryMessageAfter[item.taskHistoryType] }}</p>
3131
</div>
3232
</div>
3333
</div>
@@ -36,10 +36,11 @@
3636

3737
<script setup lang="ts">
3838
import { HistoryMessageAfter, HistoryMessageBefore } from '@/constants/user'
39-
import type { TaskDetailHistoryProps } from '@/types/user'
39+
import type { TaskHistory } from '@/types/user'
4040
import { formatDateWithDay } from '@/utils/date'
4141
import TaskDetailHistoryChat from './TaskDetailHistoryChat.vue'
4242
import TaskDetailHistoryInput from './TaskDetailHistoryInput.vue'
4343
44-
const { history } = defineProps<{ history: TaskDetailHistoryProps[] }>()
44+
const { historyData } = defineProps<{ historyData: TaskHistory[] }>()
45+
console.log(historyData, '가져온 히스토리')
4546
</script>

0 commit comments

Comments
 (0)