| | |
| | | <template> |
| | | <div class="appointment-client-detail-page"> |
| | | <div class="appointment-client-detail-page" v-if="!!appointmentDetail"> |
| | | <div class="date-detail"> |
| | | <div>{{ appointmentDetail.appointmentDate | formatDate }}</div> |
| | | <div>{{ appointmentDetail.consultantReadTime | formatDate }}</div> |
| | | <div>{{ appointmentDetail.appointmentDate | formatDate }}預約</div> |
| | | <div>{{ appointmentDetail.consultantReadTime | formatDate }} |
| | | <span v-if="appointmentDetail.consultantReadTime">已讀</span> |
| | | </div> |
| | | </div> |
| | | |
| | | <AppointmentProgress |
| | |
| | | |
| | | <section class="client-detail"> |
| | | |
| | | <div class="client-detail-info"> |
| | | <div class="client-detail-info mb-30"> |
| | | <div class="client-detail-info__avatar"> |
| | | <div class="circle"> |
| | | {{ appointmentDetail.name || 'NO NAME' }} |
| | | <div class="sm-circle"> |
| | | {{ appointmentDetail.gender === 'male' ? '男' : '女'}} |
| | | <div class="sm-circle sm-circle-male" v-if="appointmentDetail.gender === 'male'"> |
| | | <i class="icon-sex-male sex-icon"></i> |
| | | </div> |
| | | <div class="sm-circle sm-circle-female" v-if="appointmentDetail.gender === 'female'"> |
| | | <i class="icon-sex-female sex-icon"></i> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="client-detail-info__information"> |
| | | <div>{{ appointmentDetail.age | toAgeLabel }}</div> |
| | | <div>{{ appointmentDetail.phone }}</div> |
| | | <div class="text--underline"> |
| | | <div class=" text--break-all"> |
| | | {{ appointmentDetail.email }} |
| | | </div> |
| | | </div> |
| | |
| | | <div class="client-detail-demand mt-10"> |
| | | |
| | | <div class="client-detail-demand__demand-list mb-10"> |
| | | <div class="client-detail-demand__demand-list-label">諮詢<br />方式</div> |
| | | <div class="client-detail-demand__demand-list-content">{{ appointmentDetail.consultationMethod | toConsulType }}</div> |
| | | </div> |
| | | |
| | | <div class="client-detail-demand__demand-list mb-10"> |
| | | <div class="client-detail-demand__demand-list-label">需求</div> |
| | | <div class="client-detail-demand__demand-list-content">{{ appointmentDetail.requirement }}</div> |
| | | <div class="client-detail-demand__demand-list-content">{{ appointmentDetail.requirement || '--' }}</div> |
| | | </div> |
| | | |
| | | <div class="client-detail-demand__demand-list"> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="client-detail-action" v-if="showWhenAppointmentHasClosed"> |
| | | <el-button >發送滿意度</el-button> |
| | | <!-- <div class=" btn-center" v-if="showWhenAppointmentHasClosed"> |
| | | <el-button @click="inviteReview">發送滿意度</el-button> |
| | | </div> --> |
| | | |
| | | <div class="client-detail-action" v-if="showWhenAppointmentHasContacted"> |
| | | <el-button @click="closeAppointment" class="desktop-client-detail-action-btn" >結案</el-button> |
| | | <el-button @click="sendMsg" style="margin-left: 0px">通知約訪</el-button> |
| | | </div> |
| | | |
| | | <div class="client-detail-action" v-else> |
| | | <el-button @click="closeAppointment" >結案</el-button> |
| | | <el-button @click="sendMsg" style="margin-left: 0px">通知/約訪</el-button> |
| | | <div class=" btn-center" v-if="showWhenAppointmentHasCreate"> |
| | | <el-button @click="sendMsg">傳送約訪通知</el-button> |
| | | </div> |
| | | |
| | | </section> |
| | | |
| | | |
| | | <template v-if="showWhenAppointmentHasClosed"> |
| | | <AppointmentClosedInfo :appointmentDetail="appointmentDetail" /> |
| | |
| | | </InterviewMsg> |
| | | |
| | | |
| | | <section class="mt-30"> |
| | | <section class="mt-30" v-if="!showWhenAppointmentHasCreate"> |
| | | <AppointmentInterviewList :interviewList="appointmentDetail.interviewRecordDTOs" /> |
| | | </section> |
| | | |
| | | <section class="mt-30"> |
| | | <section class="mt-30" v-if="!showWhenAppointmentHasCreate"> |
| | | <AppointmentRecordList :noticeLogs="appointmentDetail.appointmentNoticeLogs" /> |
| | | </section> |
| | | |
| | | <PopUpFrame :isOpen.sync="isShowInviteReviewDialog"> |
| | | <div class="text--middle invite-review"> |
| | | <div class="mb-30 mt-10">已發送滿意度</div> |
| | | <div class="text--primary text--middle cursor--pointer text--underline" @click="isShowInviteReviewDialog = false" :size="'250px'">我知道了</div> |
| | | </div> |
| | | </PopUpFrame> |
| | | |
| | | </div> |
| | | </template> |
| | |
| | | |
| | | import { Appointment } from '~/shared/models/appointment.model'; |
| | | import { ContactStatus } from '~/shared/models/enum/contact-status'; |
| | | |
| | | import reviewsService from '~/shared/services/reviews.service'; |
| | | |
| | | |
| | | const appointmentStore = namespace('appointment.store'); |
| | | |
| | |
| | | appointmentProgress!: ContactStatus; |
| | | |
| | | isVisibleDialog = false; |
| | | isShowInviteReviewDialog = false ; |
| | | interviewTxt = ""; |
| | | contactStatus = ContactStatus; |
| | | |
| | |
| | | || this.appointmentDetail.communicateStatus === this.contactStatus.CANCEL; |
| | | } |
| | | |
| | | get displayClosedType(): string { |
| | | let closedType = '成交'; |
| | | switch (this.appointmentDetail.communicateStatus) { |
| | | case this.contactStatus.CLOSE: |
| | | closedType = '未成交'; |
| | | break; |
| | | case this.contactStatus.CANCEL: |
| | | closedType = '取消'; |
| | | break; |
| | | } |
| | | return closedType; |
| | | get showWhenAppointmentHasCreate(): boolean { |
| | | return this.appointmentDetail.communicateStatus === this.contactStatus.PICKED |
| | | || this.appointmentDetail.communicateStatus === this.contactStatus.RESERVED; |
| | | } |
| | | |
| | | get showWhenAppointmentHasContacted() :boolean { |
| | | return this.appointmentDetail.communicateStatus === this.contactStatus.CONTACTED; |
| | | } |
| | | |
| | | get hopeContactTimeList(): any[] { |
| | |
| | | } |
| | | |
| | | getHopeContactTimeContent(hopeContactTimeString: string): string[] { |
| | | const result = hopeContactTimeString.replace("'", '').split('、'); |
| | | const result = hopeContactTimeString.replaceAll("'", '').split('、'); |
| | | return result; |
| | | } |
| | | |
| | | inviteReview(): void { |
| | | reviewsService.sendSatisfactionToClient(this.appointmentDetail.id).then(res => { |
| | | this.isShowInviteReviewDialog = true; |
| | | }); |
| | | } |
| | | } |
| | | </script> |
| | |
| | | height: 100px; |
| | | width: 100px; |
| | | border-radius: 50%; |
| | | background-color: #fff; |
| | | border: 1px solid $PRIMARY_BLACK; |
| | | background-image: url('~/assets/images/appointment/avatar_bg.svg'); |
| | | position: relative; |
| | | display: flex; |
| | | justify-content: center; |
| | |
| | | width: 30px; |
| | | border-radius: 50%; |
| | | background-color: #fff; |
| | | border: 1px solid $PRIMARY_BLACK; |
| | | bottom: 0; |
| | | right: 0; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | .sex-icon { |
| | | font-size: 20px; |
| | | &.icon-sex-male{ |
| | | color: $SKY_BLUE; |
| | | } |
| | | &.icon-sex-female{ |
| | | color: $CORAL; |
| | | } |
| | | } |
| | | &-male { |
| | | border: 1px solid $SKY_BLUE; |
| | | } |
| | | &-female { |
| | | border: 1px solid $LIGHT_RED; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | @extend .mb-10; |
| | | @extend .mdTxt; |
| | | @extend .mr-10; |
| | | line-height: 1.3; |
| | | color : $DARK_BLUE; |
| | | flex-basis: auto; |
| | | min-width : 40px; |
| | | } |
| | | .client-detail-demand__demand-list-content { |
| | | text-align: justify; |
| | | line-height: 1.3; |
| | | text-justify: auto; |
| | | word-break: break-all; |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | .invite-review{ |
| | | align-items : center; |
| | | display : flex; |
| | | flex-direction: column; |
| | | } |
| | | .close-appointment-detail{ |
| | | background-color: #fff; |
| | | display: flex; |
| | |
| | | .hope-contact-time__line { |
| | | border-bottom: 1px solid #CCCCCC; |
| | | } |
| | | .btn-center{ |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | @include desktop { |
| | | .client-detail-action { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | .desktop-client-detail-action-btn{ |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | |
| | | </style> |