1. 댓글관리
(Comment Entity)
https://dwc04112.tistory.com/172
11. 책 상세보기
미리미리 정리해뒀어야 했는데... 도서 사이트를 완성하고 이제서야 작성한다 책 상세보기에는 아래 사진과 같이 1. 책 정보 2. 책 소개, 목차, 출간자 서평 3. 해당 책 댓글 4. 우측 네비게이
dwc04112.tistory.com
상세보기에서 제공하는 정렬과, 책 상세보기에서와 같은 동작을 하는 그래프이다.
댓글목록의 우측 상단 X버튼을 통해 해당 댓글을 삭제 가능하다.
(MyComment 의 Vue-Script)
//댓글 삭제
deleteComment(){
let cid = this.setCid
this.$axios.delete("comment/" + cid)
.then(response=>{
console.log(response.data.message)
this.getBookComment();
this.setDialog(0);
this.snackbarDelay();
}).catch(error =>{
console.log(error.response);
})
},
삭제를 성공적으로 수행하면 삭제 확인 메시지를 닫고 다시 댓글목록을 불러온다.
(아래는 댓글관련 Springboot 코드)
GitHub - dwc04112/BookStoreApi
Contribute to dwc04112/BookStoreApi development by creating an account on GitHub.
github.com
2. 개인정보 수정
2-1. 프로필 수정
프로필 수정은? 닉네임과 프로필 사진을 수정 또는 등록이 가능하다.
꼭 닉네임이랑 프로필을 같이 수정해야 하는 것이 아니라
닉네임이나 프로필 사진만 따로 수정이 가능하다.
닉네임
단 닉네임을 수정하려면 닉네임 중복확인을 꼭 실행 후 통과해야 변경이 가능하다 (nickCheck = true)
! 닉네임 중복확인을 거치지 않거나
! 닉네임 중복확인 후 다시 입력이 감지되면
(watch를 통해 닉네임 model값이 변경됐는지 아닌지 확인한다.)
다시 nickCheck가 false로 변하니 주의!
watch: {
nickName(){
this.nickNameCheck = false;
}
},
프로필사진
프로필 사진은 미리보기 기능을 제공한다.
(EditProfile Vue의 script-methods부분)
upload(e) {
let imageFile = e.target.files; // 업로드한 파일의 데이터가 여기있음.
this.imgFile = imageFile[0] // 파일의 필요한 데이터만을 url 변수에 넣음
this.imageUrl = URL.createObjectURL(imageFile[0]); // 미리보기
// 미리 작성해둔 imageUrl : ' ' 변수에 가지고있는 경로데이터를 넣는다
},
프로필 사진 업로드가 되면? 필요한 데이터를 가공 후 Data에서 선언한 imgFile과 imageUrl에 저장한다.
2-2. 개인정보 수정
처음 화면에는 Store에서 가져온 email과 phone번호가 입력되어있다.
변경을 원하는 텍스트 필드에서 정보를 입력 후
(이메일과 전화번호) 정규식을 통과해야 변경이 가능하다.
infoCheck(){
let numCheck= false;
let emailCheck= false;
var regEmail = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/;
var regPhone = /^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})$/;
if(this.email!==''){
emailCheck = regEmail.test(this.email);
}else{
emailCheck = false;
}
if(this.num!==''){
numCheck = regPhone.test(this.num);
}else{
numCheck = false;
}
if(numCheck && emailCheck){
if( (this.email === this.$store.state.member.loginData.email) &&(this.num === this.$store.state.member.userData.phoneNum) ){
return null;
}else{
this.editInfo(this.email,this.num)
}
}else{
this.snackbarMsg = "입력한 정보를 확인해주세요."
this.snackbar = true;
}
},
(infoEditComponent Vue의 Script부분)
만약 정규식을 통과했지만
기존 Store에 있는 정보와 새로 입력한 정보들이 일치하면 변경되지 않고
(이메일과 전화번호 하나라도 같으면 변경)
새로운 정보면 변경을 수행한다.
replaceNum(num){
this.num= num.replace(/[^0-9]/g, '')
.replace(/^(\d{2,3})(\d{3,4})(\d{4})$/, `$1-$2-$3`);
},
(infoEditComponent Vue의 Script부분)
전화번호는 @input을 통해 정규식과 맞는 입력이 들어오면 010-xxxx-xxxx형식으로 변경된다.
editInfo(email, num){
let data = {}
data.email = email;
data.phoneNum = num;
this.$axios.post("edit/info",JSON.stringify(data),{
headers: {
"Content-Type": `application/json`,
},
}).then(response => {
console.log(response.data)
this.dialogMsg = "개인정보를 성공적으로 변경하였습니다. 로그아웃 처리 됩니다."
this.$store.dispatch('logout').then(()=> this.dialog =true)
}).catch(error => {
console.log(error.response);
})
},
(infoEditComponent Vue의 Script부분)
정보가 성공적으로 변경되면 로그아웃 처리되고 dialog가 켜진다.
dialog에서 확인을 누르면 -> Home화면으로 이동된다.
2-3. 배송지 등록
배송지 등록/수정 에서 등록한 배송지들은 결제시 선택하여 사용이 가능하다
@Id
@Column(name = "addrId")
private long addrId;
@Column(unique = true)
private long mid;
private String addrName;
private String postcode;
private String addr;
private String detailAddr;
private String phoneNum;
private String isDel;
(나의 배송지 리스트 Entity)
배송지 수정 페이지에서 추가하기를 누르면 위 사진과 같은 Dialog가 나온다.
dialog안의 내용을 정규식에 맞게 입력하면 저장하기 버튼이 활성화 된다.
우편번호는 텍스트필드를 클릭하거나 오른쪽 돋보기 버튼을 클릭하면 -> 카카오 우편번호 찾기API를 사용해
우편번호를 찾을 수 있다.
아래는 카카오 우편번호 API Script 코드이다
//카카오 우편번호 api
getPostcode(){
new window.daum.Postcode({
oncomplete: (data) => {
if (this.extra_addr !== "") {
this.extra_addr = "";
}
if (data.userSelectedType === "R") {
// 사용자가 도로명 주소를 선택했을 경우
this.addr = data.roadAddress;
} else {
// 사용자가 지번 주소를 선택했을 경우(J)
this.addr = data.jibunAddress;
}
// 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다.
if (data.userSelectedType === "R") {
// 법정동명이 있을 경우 추가한다. (법정리는 제외)
// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
if (data.bname !== "" && /[동|로|가]$/g.test(data.bname)) {
this.extra_addr += data.bname;
}
// 건물명이 있고, 공동주택일 경우 추가한다.
if (data.buildingName !== "" && data.apartment === "Y") {
this.extra_addr +=
this.extra_addr !== ""
? `, ${data.buildingName}`
: data.buildingName;
}
// 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
if (this.extra_addr !== "") {
this.extra_addr = `(${this.extra_addr})`;
}
} else {
this.extra_addr = "";
}
// 우편번호를 입력한다.
this.postcode = data.zonecode;
},
}).open();
},
.
2-4. 비밀번호 변경
비밀번호는 이전비밀번호, 새로운 비밀번호, 비밀번호 확인 3가지 필드를 입력 및 통과해야 수정이 가능하다.
watch를 통해 비밀번호와 비밀번호 확인이 일치하는지 확인하고
watch: {
newPassword(val) {
this.matchPass = val === this.confirmNewPassword;
},
confirmNewPassword(val) {
this.matchPass = val === this.newPassword;
},
},
* 새로운 비밀번호 입력과, 비밀번호 확인 두가지 필드의 입력을 같이 확인해야한다
왜냐하면 비밀번호 확인을 수행 후 -> 다시 새로운 비밀번호를 변경하면? 일치한다고 뜨기 때문에.
그리고 비밀번호 수정을 진행하면 아래 정규식을 진행 후 비밀번호 변경을 수행한다.
//버튼 누르면 비밀번호 체크
checkRules(){
if(!(this.numPass&&this.smallPass&&this.spacePass&&this.minPass)){
alert("사용 불가능한 비밀번호입니다.")
return null;
}
if(!this.matchPass){
alert("비밀번호가 일치하지 않습니다")
return null;
}
this.updatePassword();
},
'ETC' 카테고리의 다른 글
그 외 정리 등... (0) | 2022.07.12 |
---|---|
15. 결제와 환불 (아임포트 모듈 사용) (0) | 2022.07.11 |
13. 마이페이지-1 (장바구니, 위시 리스트, 주문목록) (0) | 2022.07.11 |
12. Vuex Store ( 로그인 회원정보와 주문정보 Store ) (0) | 2022.07.11 |
11. 책 상세보기 (0) | 2022.07.11 |