| | |
| | | import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators' |
| | | |
| | | import myConsultantService from '~/shared/services/my-consultant.service'; |
| | | import queryConsultantService from '~/shared/services/query-consultant.service'; |
| | | import queryConsultantService, { AddFavoriteConsultantItem } from '~/shared/services/query-consultant.service'; |
| | | import reviewsService from '~/shared/services/reviews.service'; |
| | | import { Consultant } from '~/shared/models/consultant.model'; |
| | | import { Consultant, ConsultantWithAppointmentId } 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'; |
| | | import {AccessFroms} from "~/shared/services/utils.service"; |
| | | |
| | | @Module |
| | | export default class Store extends VuexModule { |
| | | recommendList: Consultant[] = []; |
| | | strictQueryList: AgentOfStrictQuery[] = []; |
| | | myConsultantList: Consultant[] = []; |
| | | myAppointmentGroupByConsultantList: ConsultantWithAppointmentId[] = []; |
| | | |
| | | reviewLogList: AppointmentLog[] = []; |
| | | unReviewLogList: AppointmentLog[] = []; |
| | | notificationList: NotificationList[] = []; |
| | | |
| | | accessFrom: AccessFroms | null = null; |
| | | |
| | | get isUserLogin() { |
| | | return this.context.getters['localStorage/isUserLogin']; |
| | |
| | | return perfectMatchList.length > 5 |
| | | ? perfectMatchList |
| | | : this.strictQueryList; |
| | | } |
| | | |
| | | get fromAccess(): AccessFroms | null { |
| | | return this.accessFrom; |
| | | } |
| | | |
| | | @Mutation |
| | | setAccessSource(from: AccessFroms) { |
| | | this.accessFrom = from; |
| | | } |
| | | |
| | | @Mutation |
| | |
| | | this.notificationList = data; |
| | | } |
| | | |
| | | @Mutation |
| | | updateAppointmentGroupByConsultantList(data: ConsultantWithAppointmentId[]) { |
| | | this.myAppointmentGroupByConsultantList = data; |
| | | } |
| | | |
| | | @Action |
| | | storeRecommendList() { |
| | | queryConsultantService.getRecommendConsultantList().then(data => { |
| | |
| | | |
| | | @Action |
| | | async storeConsultantList() { |
| | | const localData = getFavoriteFromStorage(); |
| | | const localData = getFavoriteFromStorage(); |
| | | |
| | | if (!this.isUserLogin) { |
| | | this.context.commit('updateConsultantList', localData) |
| | | return; |
| | | }; |
| | | // 使用 Optional Chaining (安全的選擇性屬性存取) 來處理可能為 null 或 undefined 的情況 |
| | | if (!this.isUserLogin) { |
| | | this.context.commit('updateConsultantList', localData); |
| | | return; |
| | | } |
| | | |
| | | if (localData?.length) { |
| | | const addFavoriteAgentList: AddFavoriteConsultantItem[] = localData.map(i => ({ agentNo: i.agentNo, createdTime: i.updateTime })); |
| | | |
| | | if (localData?.length) { |
| | | const agentNoList = localData.map(i => i.agentNo) |
| | | await queryConsultantService.addFavoriteConsultant(agentNoList).then(res => { |
| | | localStorage.removeItem('favoriteConsultant') |
| | | }) |
| | | // 確保異步操作的回傳結果不為 null 或 undefined |
| | | const response = await queryConsultantService.addFavoriteConsultant(addFavoriteAgentList); |
| | | if (response !== null) { |
| | | localStorage.removeItem('favoriteConsultant'); |
| | | } else { |
| | | throw new Error('queryConsultantService.addFavoriteConsultant returned null-like value.'); |
| | | } |
| | | } |
| | | |
| | | myConsultantService.getFavoriteConsultantList().then(data => { |
| | | this.context.commit('updateConsultantList', data); |
| | | }) |
| | | // 確保異步操作的回傳結果不為 null 或 undefined |
| | | const favoriteConsultantList = await myConsultantService.getFavoriteConsultantList(); |
| | | if (favoriteConsultantList !== null) { |
| | | this.context.commit('updateConsultantList', favoriteConsultantList); |
| | | } else { |
| | | throw new Error('myConsultantService.getFavoriteConsultantList returned null-like value.'); |
| | | } |
| | | |
| | | // 確保異步操作的回傳結果不為 null 或 undefined |
| | | const groupByConsultantData = await myConsultantService.getAllGroupByConsultant(); |
| | | if (groupByConsultantData !== null) { |
| | | this.context.commit('updateAppointmentGroupByConsultantList', groupByConsultantData); |
| | | } else { |
| | | throw new Error('myConsultantService.getAllGroupByConsultant returned null-like value.'); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Action |
| | | async removeFromMyConsultantList(agentNo: string) { |
| | |
| | | |
| | | @Action |
| | | async addToMyConsultantList(consultantToAdd: Consultant) { |
| | | if (consultantToAdd) { |
| | | const found = this.myConsultantList.find(item => item.agentNo === consultantToAdd.agentNo); |
| | | if (!found) { |
| | | const newData = [consultantToAdd].concat(this.myConsultantList); |
| | | if (this.isUserLogin) { |
| | | await queryConsultantService.addFavoriteConsultant([consultantToAdd.agentNo]) |
| | | } else { |
| | | setFavoriteToStorage(newData); |
| | | } |
| | | if (consultantToAdd) { |
| | | const found = this.myConsultantList.find(item => item.agentNo === consultantToAdd.agentNo); |
| | | if (!found) { |
| | | const newData = [consultantToAdd].concat(this.myConsultantList); |
| | | |
| | | this.context.commit('updateConsultantList', newData) |
| | | |
| | | return true; |
| | | if (this.isUserLogin) { |
| | | try { |
| | | const response = await queryConsultantService.addFavoriteConsultant([{ agentNo: consultantToAdd.agentNo, createdTime: consultantToAdd.updateTime }]); |
| | | if (response !== null) { |
| | | this.context.commit('updateConsultantList', newData); |
| | | return true; |
| | | } else { |
| | | throw new Error('queryConsultantService.addFavoriteConsultant returned null-like value.'); |
| | | } |
| | | } catch (error) { |
| | | console.error('An error occurred while adding favorite consultant:', error); |
| | | throw error; |
| | | } |
| | | } else { |
| | | setFavoriteToStorage(newData); |
| | | this.context.commit('updateConsultantList', newData); |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | @Action |
| | | storeMyAppointmentReviewLog() { |
| | | reviewsService.getMyReviewLog().then((data) => { |