66
77 <v-card-text >
88 <v-form >
9- <v-text-field
10- label =" 새 비밀번호"
11- v-model =" newPassword"
12- :type =" showPassword ? 'text' : 'password'"
13- placeholder =" 새 비밀번호 입력"
14- variant =" outlined" dense class =" password-input" >
9+ <v-text-field label =" 새 비밀번호" v-model =" newPassword" :type =" showPassword ? 'text' : 'password'"
10+ placeholder =" 새 비밀번호 입력" variant =" outlined" dense class =" password-input" >
1511 <template v-slot :append-inner >
1612 <v-icon @click =" showPassword = !showPassword" class =" password-toggle-icon" >
1713 {{ showPassword ? 'mdi-eye-off' : 'mdi-eye' }}
2016 </v-text-field >
2117 <small class =" password-hint" >🔹 8자 이상, 영어+숫자+특수문자 중 2개 이상 포함</small >
2218
23- <v-text-field
24- label =" 새 비밀번호 확인"
25- v-model =" confirmPassword"
26- :type =" showConfirmPassword ? 'text' : 'password'"
27- placeholder =" 새 비밀번호 확인"
28- variant =" outlined" dense class =" password-input" >
19+ <v-text-field label =" 새 비밀번호 확인" v-model =" confirmPassword"
20+ :type =" showConfirmPassword ? 'text' : 'password'" placeholder =" 새 비밀번호 확인" variant =" outlined"
21+ dense class =" password-input" >
2922 <template v-slot :append-inner >
3023 <v-icon @click =" showConfirmPassword = !showConfirmPassword" class =" password-toggle-icon" >
3124 {{ showConfirmPassword ? 'mdi-eye-off' : 'mdi-eye' }}
3629 </v-card-text >
3730
3831 <v-card-actions >
39- <v-btn block :disabled =" !isPasswordValid || newPassword !== confirmPassword"
40- @click = " changePassword " class =" custom-btn" >
32+ <v-btn block :disabled =" !isPasswordValid || newPassword !== confirmPassword" @click = " changePassword "
33+ class =" custom-btn" >
4134 비밀번호 변경
4235 </v-btn >
4336 </v-card-actions >
@@ -50,7 +43,7 @@ import { ref, computed } from 'vue';
5043import { useUserStore } from ' ../stores/userStore' ;
5144import { useRoute } from ' vue-router' ;
5245
53- const SERVER_URL = import .meta.env.VITE_SERVER_URL ;
46+ const SERVER_URL = import .meta.env.VITE_API_URL ;
5447const route = useRoute ();
5548const userStore = useUserStore ();
5649
@@ -72,36 +65,35 @@ const changePassword = async () => {
7265 if (isPasswordValid .value && newPassword .value === confirmPassword .value ) {
7366
7467 try {
75- const requestData = {
76- studentNumber: studentNumber .value ,
77- password: newPassword .value
78- };
79-
80- const response = await fetch (` ${ SERVER_URL } /login/password` , {
81- method: " PATCH" ,
82- headers: {
83- " Content-Type" : " application/json" ,
84- " Accept" : " application/json"
85- },
86- body: JSON .stringify (requestData)
87- });
88-
89- // ✅ 서버 응답이 200이면 성공 처리
90- if (response .ok ) {
91- alert (" 비밀번호 변경 완료!" );
92- } else {
93- alert (` 오류 발생: 비밀번호 변경 실패 (Status: ${ response .status } )` );
94- }
95- } catch (error) {
96- alert (" 네트워크 오류가 발생했습니다. 다시 시도해주세요." );
97- }
68+ const requestData = {
69+ studentNumber: studentNumber .value ,
70+ password: newPassword .value
71+ };
72+
73+ const response = await fetch (` ${ SERVER_URL } /login/password` , {
74+ method: " PATCH" ,
75+ headers: {
76+ " Content-Type" : " application/json" ,
77+ " Accept" : " application/json"
78+ },
79+ body: JSON .stringify (requestData)
80+ });
81+
82+ // ✅ 서버 응답이 200이면 성공 처리
83+ if (response .ok ) {
84+ alert (" 비밀번호 변경 완료!" );
85+ } else {
86+ alert (` 오류 발생: 비밀번호 변경 실패 (Status: ${ response .status } )` );
87+ }
88+ } catch (error) {
89+ alert (" 네트워크 오류가 발생했습니다. 다시 시도해주세요." );
90+ }
9891
9992 }
10093};
10194 </script >
10295
10396<style scoped>
104-
10597.change-password-page {
10698 display : flex ;
10799 flex-direction : column ;
0 commit comments