| | |
| | | import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators' |
| | | import { ClientInfo, getMyAppointmentList, getMyReviewLog } from '~/assets/ts/api/appointment'; |
| | | import { recommend, AgentOfStrictQuery, getFavoriteConsultant, addFavoriteConsultant, deleteConsultant, strictQuery } from '~/assets/ts/api/consultant'; |
| | | import { Consultant } from '~/assets/ts/models/consultant.model'; |
| | | import { AppointmentLog } from '~/assets/ts/models/appointment.model'; |
| | | import { getFavoriteFromStorage, setFavoriteToStorage } from '~/assets/ts/storageConsultant'; |
| | | import { Role } from '~/assets/ts/models/enum/Role'; |
| | | |
| | | import myConsultantService from '~/shared/services/my-consultant.service'; |
| | | import queryConsultantService from '~/shared/services/query-consultant.service'; |
| | | import reviewsService from '~/shared/services/reviews.service'; |
| | | import { Consultant } from '~/shared/models/consultant.model'; |
| | | import { getFavoriteFromStorage, setFavoriteToStorage } from '~/shared/storageConsultant'; |
| | | import { AppointmentLog } from '~/shared/models/appointment.model'; |
| | | import { AgentOfStrictQuery, StrictQueryParams } from '~/shared/models/strict-query.model'; |
| | | import { NotificationList } from '~/shared/models/reviews.model'; |
| | | |
| | | @Module |
| | | export default class Store extends VuexModule { |
| | |
| | | strictQueryList: AgentOfStrictQuery[] = []; |
| | | myConsultantList: Consultant[] = []; |
| | | |
| | | myAppointmentList: ClientInfo[] = []; |
| | | reviewLogList: AppointmentLog[] = []; |
| | | unReviewLogList: AppointmentLog[] = []; |
| | | notificationList: NotificationList[] = []; |
| | | |
| | | myAppointmentReviewLogList: AppointmentLog[] = []; |
| | | |
| | | @Mutation updateRecommend(data: Consultant[]) { |
| | | this.recommendList = data; |
| | | get isUserLogin() { |
| | | return this.context.getters['localStorage/isUserLogin']; |
| | | } |
| | | |
| | | @Mutation updateConsultantList(data: Consultant[]) { |
| | | get strictResultList(): AgentOfStrictQuery[] { |
| | | const perfectMatchList = this.strictQueryList.filter((i) => i.suitability === 100); |
| | | return perfectMatchList.length > 5 |
| | | ? perfectMatchList |
| | | : this.strictQueryList; |
| | | } |
| | | |
| | | @Mutation |
| | | updateRecommend(data: Consultant[]) { |
| | | this.recommendList = data; |
| | | } |
| | | |
| | | @Mutation |
| | | updateConsultantList(data: Consultant[]) { |
| | | this.myConsultantList = data; |
| | | } |
| | | |
| | | @Mutation updateStrictQueryList(data: AgentOfStrictQuery[]) { |
| | | this.strictQueryList = data; |
| | | @Mutation |
| | | updateStrictQueryList(data: AgentOfStrictQuery[]) { |
| | | this.strictQueryList = data.sort((a, b) => b.suitability - a.suitability); |
| | | } |
| | | |
| | | @Mutation updateMyAppointmentList(data: ClientInfo[]) { |
| | | this.myAppointmentList = data; |
| | | @Mutation |
| | | updateReviewLog(data: AppointmentLog[]) { |
| | | this.reviewLogList = data; |
| | | } |
| | | |
| | | @Mutation updateMyAppointmentReviewLog(data: AppointmentLog[]) { |
| | | this.myAppointmentReviewLogList = data; |
| | | @Mutation |
| | | updateUnReviewLog(data: AppointmentLog[]) { |
| | | this.unReviewLogList = data; |
| | | } |
| | | |
| | | @Action storeRecommendList() { |
| | | recommend().then(data => { |
| | | @Mutation |
| | | updateNotification(data: NotificationList[]) { |
| | | this.notificationList = data; |
| | | } |
| | | |
| | | @Action |
| | | storeRecommendList() { |
| | | queryConsultantService.getRecommendConsultantList().then(data => { |
| | | this.context.commit('updateRecommend', data) |
| | | }) |
| | | } |
| | |
| | | @Action |
| | | async storeConsultantList() { |
| | | const localData = getFavoriteFromStorage(); |
| | | if (this.context.getters['localStorage/currentRole'] !== Role.USER) { |
| | | |
| | | if (!this.isUserLogin) { |
| | | this.context.commit('updateConsultantList', localData) |
| | | return; |
| | | }; |
| | |
| | | |
| | | if (localData?.length) { |
| | | const agentNoList = localData.map(i => i.agentNo) |
| | | await addFavoriteConsultant(agentNoList).then(res => { |
| | | await queryConsultantService.addFavoriteConsultant(agentNoList).then(res => { |
| | | localStorage.removeItem('favoriteConsultant') |
| | | }) |
| | | } |
| | | |
| | | getFavoriteConsultant().then(data => { |
| | | this.context.commit('updateConsultantList', data) |
| | | myConsultantService.getFavoriteConsultantList().then(data => { |
| | | this.context.commit('updateConsultantList', data); |
| | | }) |
| | | } |
| | | |
| | |
| | | // no agent was removed |
| | | if (left.length === this.myConsultantList.length) return false; |
| | | |
| | | if (this.context.getters['localStorage/currentRole'] !== Role.USER) { |
| | | if (!this.isUserLogin) { |
| | | setFavoriteToStorage(left); |
| | | } else { |
| | | await deleteConsultant(agentNo) |
| | | await myConsultantService.deleteConsultant(agentNo) |
| | | } |
| | | |
| | | this.context.commit('updateConsultantList', left) |
| | |
| | | const found = this.myConsultantList.find(item => item.agentNo === consultantToAdd.agentNo); |
| | | if (!found) { |
| | | const newData = [consultantToAdd].concat(this.myConsultantList); |
| | | |
| | | if (this.context.getters['localStorage/currentRole'] === Role.USER) { |
| | | await addFavoriteConsultant([consultantToAdd.agentNo]) |
| | | if (this.isUserLogin) { |
| | | await queryConsultantService.addFavoriteConsultant([consultantToAdd.agentNo]) |
| | | } else { |
| | | setFavoriteToStorage(newData); |
| | | } |
| | |
| | | } |
| | | |
| | | @Action |
| | | async storeMyAppointmentList() { |
| | | return await getMyAppointmentList().then((data) => { |
| | | this.context.commit('updateMyAppointmentList', data); |
| | | return data.filter(item => !item.consultantViewTime || item.consultantViewTime === null).length |
| | | }); |
| | | } |
| | | |
| | | @Action |
| | | storeMyAppointmentReviewLog() { |
| | | getMyReviewLog().then((data) => { |
| | | reviewsService.getMyReviewLog().then((data) => { |
| | | const dataWithLatestDate = data.map((item) => { |
| | | return { |
| | | ...item, |
| | |
| | | } |
| | | }); |
| | | const sortedData = dataWithLatestDate.sort((a, b) => +b.compareDate - +a.compareDate); |
| | | this.context.commit('updateMyAppointmentReviewLog', sortedData); |
| | | const reviewLog = sortedData.filter(item => item.score); |
| | | const unReviewLog = sortedData.filter(item => !item.score); |
| | | this.context.commit('updateReviewLog', reviewLog); |
| | | this.context.commit('updateUnReviewLog', unReviewLog); |
| | | }); |
| | | } |
| | | |
| | | @Action updateMyAppointment(myAppointment: ClientInfo) { |
| | | const data = this.myAppointmentList.filter(item => item.id !== myAppointment.id); |
| | | data.unshift(myAppointment); |
| | | this.context.commit('updateMyAppointmentList', data) |
| | | } |
| | | |
| | | @Action |
| | | async storeStrictQueryList(strictQueryDto) { |
| | | return await strictQuery(strictQueryDto).then(res=>{ |
| | | async storeStrictQueryList(strictQueryDto: StrictQueryParams) { |
| | | return await queryConsultantService.strictQuery(strictQueryDto).then(res=>{ |
| | | this.context.commit('localStorage/storageRecommendConsultant', JSON.stringify(strictQueryDto)); |
| | | this.context.commit('updateStrictQueryList', res.data) |
| | | return res.data.length; |
| | | this.context.commit('updateStrictQueryList', res) |
| | | return res.length; |
| | | }); |
| | | } |
| | | |
| | | } |
| | | @Action |
| | | storeMyPersonalNotification() { |
| | | reviewsService.getMyPersonalNotification().then(data => { |
| | | const sortData = data |
| | | .sort((preItem, nextItem) => +new Date(nextItem.createdDate) - +new Date(preItem.createdDate)) |
| | | this.context.commit('updateNotification', sortData); |
| | | }) |
| | | } |
| | | |
| | | } |