| | |
| | | </template> |
| | | |
| | | <script lang="ts"> |
| | | import { Vue, Component, Prop, Action, namespace } from 'nuxt-property-decorator'; |
| | | import { getAppointmentDetail, UserReviewsConsultantsParams, userReviewsConsultants, cancelAppointment } from '~/assets/ts/api/consultant'; |
| | | import { Vue, Component, Prop, Action, namespace, State } from 'nuxt-property-decorator'; |
| | | |
| | | import appointmentService from '~/assets/ts/services/appointment.service'; |
| | | import { isMobileDevice } from '~/assets/ts/device'; |
| | | import { hideReviews } from '~/assets/ts/const/hide-reviews'; |
| | | import { UserReviewsConsultantsParams, userReviewsConsultants } from '~/assets/ts/api/consultant'; |
| | | import { Consultant, ConsultantWithAppointmentId } from '~/assets/ts/models/consultant.model'; |
| | | import { Appointment } from '~/assets/ts/models/appointment.model'; |
| | | import { isMobileDevice } from '~/assets/ts/device'; |
| | | import { Role } from '~/assets/ts/models/enum/Role'; |
| | | import { hideReviews } from '~/assets/ts/const/hide-reviews'; |
| | | import { Role } from '~/assets/ts/models/enum/role'; |
| | | |
| | | const roleStorage = namespace('localStorage'); |
| | | const localStorage = namespace('localStorage'); |
| | | @Component({ |
| | | filters: { |
| | | formatNumber(index: number) { |
| | |
| | | }) |
| | | export default class ConsultantCard extends Vue { |
| | | |
| | | @Action |
| | | removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>; |
| | | |
| | | @Action |
| | | storeConsultantList!: any; |
| | | |
| | | @Prop() |
| | | agentInfo!: Consultant | ConsultantWithAppointmentId; |
| | | |
| | | @roleStorage.Getter currentRole!:string; |
| | | @localStorage.State('current_role') |
| | | currentRole!: string; |
| | | |
| | | isVisibleDialog = false; |
| | | reviewsBtn = false; |
| | |
| | | isCancelPopup = false; |
| | | hideReviews = hideReviews; |
| | | isConfirmPopup = false; |
| | | |
| | | |
| | | appointmentDetail: any = { |
| | | age : '', |
| | | agentNo : '', |
| | | appointmentDate : '', |
| | | communicateStatus : '', |
| | | consultantReadTime: null, |
| | | consultantViewTime: null, |
| | | contactTime : '', |
| | | contactType : '', |
| | | customerId : 0, |
| | | email : '', |
| | | gender : '', |
| | | hopeContactTime : "", |
| | | id : 0, |
| | | job : "", |
| | | lastModifiedDate : '', |
| | | name : '', |
| | | otherRequirement : null, |
| | | phone : "", |
| | | requirement : '', |
| | | satisfactionScore : 0, |
| | | }; |
| | | |
| | | get notScoreAppointmentYet(): boolean { |
| | | const isAppointment = !!this.agentInfo['appointmentStatus']; |
| | |
| | | return time as string; |
| | | } |
| | | |
| | | appointmentDetail: any = { |
| | | age : '', |
| | | agentNo : '', |
| | | appointmentDate : '', |
| | | communicateStatus : '', |
| | | consultantReadTime: null, |
| | | consultantViewTime: null, |
| | | contactTime : '', |
| | | contactType : '', |
| | | customerId : 0, |
| | | email : '', |
| | | gender : '', |
| | | hopeContactTime : "", |
| | | id : 0, |
| | | job : "", |
| | | lastModifiedDate : '', |
| | | name : '', |
| | | otherRequirement : null, |
| | | phone : "", |
| | | requirement : '', |
| | | satisfactionScore : 0, |
| | | }; |
| | | |
| | | get avatarFileName() { |
| | | return this.agentInfo.img; |
| | | } |
| | |
| | | |
| | | get hopeContactTime() { |
| | | const contactList = this.appointmentDetail.hopeContactTime |
| | | .split("'").map(item => item.slice(0, item.length)); |
| | | return contactList.filter(item => !!item && item !== ",") |
| | | .split("'").map((item: any) => item.slice(0, item.length)); |
| | | return contactList.filter((item: any) => !!item && item !== ",") |
| | | } |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | | @Action |
| | | removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>; |
| | | |
| | | @Action |
| | | storeConsultantList!: () => void; |
| | | |
| | | reserveCommunication() { |
| | | const isAppointment = !!this.agentInfo['appointmentStatus']; |
| | |
| | | ? this.agentInfo['appointmentId'] |
| | | : this.latestReservedAppointment.id; |
| | | |
| | | getAppointmentDetail(appointmentId!).then(res => { |
| | | appointmentService.getAppointmentDetail(appointmentId!).then(res => { |
| | | this.appointmentDetail = { |
| | | ...this.appointmentDetail, |
| | | ...res.data, |
| | | ...res, |
| | | satisfactionScore: this.agentInfo['appointmentScore'], |
| | | }; |
| | | this.width = isMobileDevice() ? '80%' : ''; |
| | |
| | | } |
| | | |
| | | cancel() { |
| | | cancelAppointment(this.latestReservedAppointment.id).then(res => { |
| | | appointmentService.cancelAppointment(this.latestReservedAppointment.id).then(res => { |
| | | this.storeConsultantList(); |
| | | this.isVisibleDialog = false; |
| | | this.isCancelPopup = false; |