update: 顧問登入-未聯絡清單,發送約訪通知 api 串接
| | |
| | | |
| | | <div |
| | | class="invite-msg smTxt_bold" |
| | | @click.stop="makeInterview" |
| | | @click.stop="showAddInterviewDialog" |
| | | v-if="client.communicateStatus === contactStatus.RESERVED"> |
| | | 傳送約訪通知 |
| | | </div> |
| | | <div |
| | | class="invite-msg smTxt_bold" |
| | | @click.stop="closeAppointment" |
| | | @click.stop="navigateToCloseAppointment" |
| | | v-else-if="client.communicateStatus === contactStatus.CONTACTED"> |
| | | 結案 |
| | | </div> |
| | |
| | | </div> |
| | | </Ui-Dialog> |
| | | |
| | | <InterviewMsg :isVisible.sync="isMsgDialog"></InterviewMsg> |
| | | <InterviewMsg |
| | | :isVisible.sync="isShowAddInterviewDialog" |
| | | :client="client" |
| | | > |
| | | </InterviewMsg> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { Vue, Component, Prop, Action, namespace, Watch } from 'nuxt-property-decorator'; |
| | | |
| | | import appointmentService from '~/shared/services/appointment.service'; |
| | | import myConsultantService from '~/shared/services/my-consultant.service'; |
| | | import UtilsService from '~/shared/services/utils.service'; |
| | | import { hideReviews } from '~/shared/const/hide-reviews'; |
| | | import myConsultantService from '~/shared/services/my-consultant.service'; |
| | | import { ElRow } from 'element-ui/types/row'; |
| | | import { Appointment, AppointmentMemoInfo } from '~/shared/models/appointment.model'; |
| | | import { Appointment, AppointmentMemoInfo, ToInformAppointment } from '~/shared/models/appointment.model'; |
| | | import { ContactStatus } from '~/shared/models/enum/contact-status'; |
| | | |
| | | const localStorage = namespace('localStorage'); |
| | |
| | | @localStorage.Mutation |
| | | storageClearAppointmentIdFromMsg!: () => void; |
| | | |
| | | isVisibleDialog = false; |
| | | isMsgDialog = false; |
| | | dialogWidth = ''; |
| | | hideReviews = hideReviews; |
| | | contactStatus = ContactStatus; |
| | | dialogWidth = ''; |
| | | hideReviews = hideReviews; |
| | | isEdit = false; |
| | | isShowAddInterviewDialog = false; |
| | | isVisibleDialog = false; |
| | | memo = ''; |
| | | |
| | | contactStatus = ContactStatus; |
| | | // currentAppointmentStatus = this.contactStatus.RESERVED; |
| | | |
| | | isEdit = false; |
| | | memoInfo: AppointmentMemoInfo = { |
| | | appointmentId: 0, |
| | | content: '', |
| | | id: 0 |
| | | content : '', |
| | | id : 0 |
| | | } |
| | | memo = ''; |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | |
| | | this.$router.push(`/appointment/${this.client.id}`); |
| | | } |
| | | |
| | | makeInterview(): void { |
| | | this.isMsgDialog = true; |
| | | showAddInterviewDialog(): void { |
| | | this.isShowAddInterviewDialog = true; |
| | | } |
| | | |
| | | closeAppointment(): void { |
| | | navigateToCloseAppointment(): void { |
| | | this.$router.push(`/appointment/${this.client.id}/close`); |
| | | } |
| | | |
| | | makeAppointment(): void { |
| | | alert('MAKE AN APPOINTMENT!'); |
| | | } |
| | | |
| | | get newAppointment(): boolean { |
| | |
| | | resize="none" |
| | | v-model="interviewTxt"> |
| | | </el-input> |
| | | |
| | | <div class="mdTxt mt-30 mb-10">預計約訪時段</div> |
| | | <DateTimePicker |
| | | @changeDateTime="interviewTime = $event" |
| | | ></DateTimePicker> |
| | | |
| | | <div class="msg-dialog-btn"> |
| | | <el-button :disabled="!interviewTime">傳送</el-button> |
| | | <el-button @click="addInterview" :disabled="!interviewTime">傳送</el-button> |
| | | </div> |
| | | |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script lang="ts"> |
| | | import { Vue, Component, Prop, PropSync, Emit, Action } from 'nuxt-property-decorator'; |
| | | import { Vue, Component, Prop, PropSync, Emit } from 'nuxt-property-decorator'; |
| | | |
| | | import appointmentService from '~/shared/services/appointment.service'; |
| | | import { Appointment, ToInformAppointment } from '~/shared/models/appointment.model'; |
| | | |
| | | @Component |
| | | export default class InterviewMsg extends Vue { |
| | |
| | | dialogWidth!:string; |
| | | |
| | | @Prop() |
| | | appointmentId!: number; |
| | | client!: Appointment; |
| | | |
| | | @Emit('closeDialog') |
| | | closeDialog() { |
| | |
| | | interviewTxt = ""; |
| | | interviewTime = ''; |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | | addInterview() { |
| | | const appointmentInformation: ToInformAppointment = { |
| | | appointmentId: this.client.id, |
| | | email : this.client?.email, |
| | | interviewDate: this.interviewTime, |
| | | message : this.interviewTxt, |
| | | phone : this.client?.phone, |
| | | }; |
| | | appointmentService.informAppointment(appointmentInformation).then((_) => { |
| | | // TODO: close dialog after confirm success msg drawer (assign to Helen)[Tomas, 2022/1/17 11:21]; |
| | | this.dialogVisible = false; |
| | | }); |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | |
| | | remark? : string; |
| | | } |
| | | |
| | | export interface ToInformAppointment { |
| | | appointmentId: number; |
| | | email : string; |
| | | interviewDate: string; |
| | | message : string; |
| | | phone : string; |
| | | } |
| | |
| | | import { http } from "./httpClient"; |
| | | |
| | | import { Appointment, AppointmentDetail, AppointmentMemoInfo, createdMemoInfo, EditAppointmentParams, ToCloseAppointment, ToDoneAppointment, updatedMemoInfo } from "~/shared/models/appointment.model"; |
| | | import { Appointment, AppointmentDetail, AppointmentMemoInfo, createdMemoInfo, EditAppointmentParams, ToCloseAppointment, ToDoneAppointment, ToInformAppointment, updatedMemoInfo } from "~/shared/models/appointment.model"; |
| | | |
| | | class AppointmentService { |
| | | |
| | |
| | | async closeAppointment(appointmentInfo: ToDoneAppointment | ToCloseAppointment) { |
| | | return http.post(`/appointment/close`, appointmentInfo).then((res) => res.data); |
| | | } |
| | | |
| | | // 約訪通知 API |
| | | async informAppointment(appointmentInformation: ToInformAppointment) { |
| | | return http.post(`/notice/send`, appointmentInformation).then((res) => res.data); |
| | | } |
| | | } |
| | | |
| | | export default new AppointmentService(); |