Skip to content

Commit 615ff90

Browse files
authored
Merge pull request #103 from TaskFlow-CLAP/CLAP-280
CLAP-280 토큰 재발급 API 연결
2 parents a29154e + 86553e0 commit 615ff90

File tree

11 files changed

+151
-103
lines changed

11 files changed

+151
-103
lines changed

src/api/auth.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,26 @@ export const postLogin = async (loginData: loginDataTypes, sessionId: string) =>
1616
path: '/',
1717
sameSite: 'strict'
1818
})
19-
2019
await memberStore.updateMemberInfoWithToken()
2120
return response.data
2221
}
2322

2423
export const patchPassword = async (password: string) => {
2524
const response = await axiosInstance.patch('/api/members/password', password)
26-
2725
return response.data
2826
}
2927

3028
export const deleteLogout = async () => {
31-
const memberStore = useMemberStore()
3229
const refreshToken = Cookies.get('refreshToken')
30+
const accessToken = Cookies.get('accessToken')
3331

3432
const response = await axiosInstance.delete('/api/auths/logout', {
3533
headers: {
36-
Authorization: `Bearer ${import.meta.env.VITE_ACCESS_TOKEN}`,
34+
Authorization: `Bearer ${accessToken}`,
3735
refreshToken: refreshToken
3836
}
3937
})
4038
Cookies.remove('accessToken', { path: '/' })
4139
Cookies.remove('refreshToken', { path: '/' })
42-
await memberStore.updateMemberInfoWithToken()
4340
return response
4441
}

src/api/user.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
import type { Status } from '@/types/common'
2+
import type { userInfo } from '@/types/user'
23
import type { RequestApprovePostTypes } from '@/types/manager'
34
import { axiosInstance, formDataAxiosInstance } from '@/utils/axios'
45

6+
export const patchEditInfo = async (formdata: userInfo, image: File) => {
7+
const response = await formDataAxiosInstance.post('/api/tasks', formdata, image)
8+
return response.data
9+
}
10+
511
export const postTaskRequest = async (formdata: FormData) => {
612
const response = await formDataAxiosInstance.post('/api/tasks', formdata)
713
return response.data

src/components/EditInformation.vue

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,46 @@
1010
<div class="profile">
1111
<p class="text-body text-xs font-bold">프로필 사진</p>
1212
<img
13-
v-if="imageUrl"
14-
:src="imageUrl"
13+
v-if="previewUrl || info.imageUrl"
14+
:src="previewUrl || info.imageUrl"
1515
alt="프로필 이미지"
1616
class="w-24 h-24 rounded-full object-cover border mt-3" />
17-
<div
18-
v-else
19-
class="w-24 h-24 rounded-full bg-background-1 flex items-center justify-center mt-3"></div>
20-
<!-- 파일 업로드 필요 -->
21-
<p class="mt-3 text-xs text-primary1 font-bold cursor-pointer">변경</p>
17+
18+
<label
19+
for="fileInput"
20+
class="mt-3 text-xs text-primary1 font-bold cursor-pointer"
21+
>변경</label
22+
>
23+
<input
24+
id="fileInput"
25+
type="file"
26+
@change="handleFileUpload"
27+
accept="image/*"
28+
class="hidden" />
2229
</div>
2330

2431
<div class="flex flex-col">
2532
<p class="text-body text-xs font-bold">이름</p>
2633
<input
2734
class="input-box h-11 mt-2 text-black"
2835
placeholder="이름을 입력해주세요"
29-
v-model="memberName" />
36+
v-model="info.memberName" />
3037
</div>
3138
<div class="flex flex-col">
3239
<p class="text-body text-xs font-bold">아이디</p>
33-
<p class="mt-2 text-black">{{ memberId }}</p>
40+
<p class="mt-2 text-black">{{ info.nickname }}</p>
3441
</div>
3542
<div class="flex flex-col">
3643
<p class="text-body text-xs font-bold">이메일</p>
37-
<p class="mt-2 text-black">{{ memberEmail }}</p>
44+
<p class="mt-2 text-black">{{ info.email }}</p>
3845
</div>
3946
<div class="flex flex-col">
4047
<p class="text-body text-xs font-bold">부서</p>
41-
<p class="mt-2 text-black">{{ memberDepartment }}</p>
48+
<p class="mt-2 text-black">{{ info.departmentName }}</p>
4249
</div>
4350
<div class="flex flex-col">
4451
<p class="text-body text-xs font-bold">직무</p>
45-
<p class="mt-2 text-black">{{ memberJob }}</p>
52+
<p class="mt-2 text-black">{{ info.departmentRole }}</p>
4653
</div>
4754
<div>
4855
<p class="text-body text-xs font-bold">알림 수신 여부</p>
@@ -85,13 +92,17 @@ import ModalView from './ModalView.vue'
8592
import FormButtonContainer from './common/FormButtonContainer.vue'
8693
import FormCheckbox from './common/FormCheckbox.vue'
8794
const router = useRouter()
95+
import { useMemberStore } from '@/stores/member'
96+
import { storeToRefs } from 'pinia'
97+
import { patchEditInfo } from '@/api/user'
98+
import
99+
100+
const memberStore = useMemberStore()
101+
const { info } = storeToRefs(memberStore)
102+
103+
const selectedFile = ref<File | null>(null)
104+
const previewUrl = ref<string | null>(null)
88105
89-
const memberName = ref('백지연')
90-
const memberId = ref('Chole.yeon')
91-
const memberEmail = ref('taskflow123@gachon.ac.kr')
92-
const memberDepartment = ref('인프라팀')
93-
const memberJob = ref('인프라 아키텍처')
94-
const imageUrl = ref('')
95106
const isModalVisible = ref(false)
96107
97108
const memberForm = ref({
@@ -100,15 +111,34 @@ const memberForm = ref({
100111
isEmailChecked: false
101112
})
102113
114+
const formData = new FormData()
115+
116+
const requestData: any = {
117+
name: info.value.memberName,
118+
agitNotification: memberForm.value.isAgitChecked,
119+
emailNotification: memberForm.value.isEmailChecked,
120+
kakaoWorkNotification: memberForm.value.isKakaoWorkChecked
121+
}
103122
const handleCancel = () => {
104123
router.back()
105124
}
106125
107-
const handleSubmit = () => {
108-
isModalVisible.value = true
109-
}
110-
111126
const handlePwChange = () => {
112127
router.push('/pw-check')
113128
}
129+
130+
const handleFileUpload = (event: Event) => {
131+
const target = event.target as HTMLInputElement
132+
if (target.files && target.files[0]) {
133+
selectedFile.value = target.files[0]
134+
135+
previewUrl.value = URL.createObjectURL(selectedFile.value)
136+
}
137+
}
138+
139+
const handleSubmit = () => {
140+
isModalVisible.value = true
141+
console.log(requestData)
142+
patchEditInfo(requestData, selectedFile.value)
143+
}
114144
</script>

src/components/TopBar.vue

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/components/top-bar/ProfileModal.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ import { computed } from 'vue'
6363
const isModalVisible = ref(false)
6464
6565
const memberStore = useMemberStore()
66-
const { info } = storeToRefs(memberStore)
66+
const { isLogined, info } = storeToRefs(memberStore)
6767
6868
const imgUrl = computed(() => info.value.imageUrl)
6969
const name = computed(() => info.value.memberName)
@@ -88,6 +88,7 @@ const handleEdit = () => {
8888
}
8989
const openLogoutModal = () => {
9090
isModalVisible.value = true
91+
isLogined.value = false
9192
}
9293
const closeLogoutModal = () => {
9394
isModalVisible.value = false

src/components/top-bar/TopBar.vue

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,10 @@ const { isLogined, info } = storeToRefs(memberStore)
6565
const route = useRoute()
6666
const router = useRouter()
6767
onMounted(async () => {
68-
await fetchNotificationCount()
69-
70-
await memberStore.updateMemberInfoWithToken()
68+
if (isLogined.value) {
69+
await fetchNotificationCount()
70+
await memberStore.updateMemberInfoWithToken()
71+
}
7172
7273
const originUrl = route.path.split('/')[1]
7374
if (info.value.memberRole === 'ROLE_USER') {
@@ -90,11 +91,13 @@ const isNotifiVisible = ref(false)
9091
const isProfileVisible = ref(false)
9192
9293
const fetchNotificationCount = async () => {
93-
try {
94-
const data = await getNotifiCount()
95-
countNotifi.value = data.count
96-
} catch (error) {
97-
console.error('알림 개수 불러오기 실패:', error)
94+
if (isLogined.value) {
95+
try {
96+
const data = await getNotifiCount()
97+
countNotifi.value = data.count
98+
} catch (error) {
99+
console.error('알림 개수 불러오기 실패:', error)
100+
}
98101
}
99102
}
100103
@@ -109,10 +112,16 @@ const onCloseSide = () => {
109112
isSideOpen.value = false
110113
}
111114
115+
watch(isLogined, newValue => {
116+
if (newValue) {
117+
location.reload() // 페이지 새로고침
118+
}
119+
})
120+
112121
watch(
113122
() => info.value,
114123
async newInfo => {
115-
if (newInfo.memberName) {
124+
if (newInfo.memberName && isLogined) {
116125
await fetchNotificationCount()
117126
}
118127
},

src/stores/member.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ export const useMemberStore = defineStore('memberInfo', () => {
1010
nickname: '',
1111
imageUrl: '',
1212
memberRole: '',
13-
memberStatus: ''
13+
memberStatus: '',
14+
email: '',
15+
departmentName: '',
16+
departmentRole: ''
1417
})
1518

1619
const refreshToken = ref(Cookies.get('refreshToken') || '')
@@ -27,9 +30,12 @@ export const useMemberStore = defineStore('memberInfo', () => {
2730
info.value = {
2831
memberName: responseData.name || '',
2932
nickname: responseData.nicknanme || '',
33+
email: responseData.email || '',
3034
imageUrl: responseData.profileImageUrl || '',
3135
memberRole: responseData.role || '',
32-
memberStatus: ''
36+
memberStatus: responseData.memberStatus || '',
37+
departmentName: responseData.departmentName || '',
38+
departmentRole: responseData.departmentRole || ''
3339
}
3440
console.log('Updated member info:', info.value)
3541
}
@@ -40,7 +46,10 @@ export const useMemberStore = defineStore('memberInfo', () => {
4046
nickname: '',
4147
imageUrl: '',
4248
memberRole: '',
43-
memberStatus: ''
49+
memberStatus: '',
50+
email: '',
51+
departmentName: '',
52+
departmentRole: ''
4453
}
4554
isLogined.value = false
4655
Cookies.remove('accessToken')

src/types/auth.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
export interface User {
22
memberName: string
33
nickname: string
4+
email: string
45
imageUrl: string
56
memberRole: string
67
memberStatus: string
8+
departmentName: string
9+
departmentRole: string
710
}
811

912
export interface loginDataTypes {

src/types/user.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import type { LabelDataTypes, Status } from './common'
22
import type { ManagerTypes } from './manager'
33

4+
export interface userInfo {
5+
name: string
6+
agitNotification: boolean
7+
emailNotification: boolean
8+
kakaoWorkNotification: boolean
9+
}
10+
411
export interface MyRequestListData {
512
taskId: number
613
taskCode: string

0 commit comments

Comments
 (0)