<template>
|
<div>
|
<el-dialog
|
:visible.sync="dialogVisible"
|
:width="dialogWidth"
|
@close="closeDialog"
|
:lock-scroll="false"
|
>
|
<div class="subTitle msg-dialog-title">約訪通知</div>
|
<div class="send-msg-nav">
|
<div class="mdTxt">通知內容</div>
|
<div class="mdTxt text--primary text--underline">編輯</div>
|
</div>
|
|
<el-input
|
type="textarea"
|
:rows="9"
|
placeholder="約訪通知"
|
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 @click="addInterview" :disabled="!interviewTime">傳送</el-button>
|
</div>
|
|
</el-dialog>
|
|
<PopUpFrame
|
:isOpen.sync="isShowSuccessAlert">
|
<div class="text--middle invite-review">
|
<div class="mb-30 mt-10">已發送約訪通知</div>
|
<div class="text--primary text--middle cursor--pointer text--underline" @click="closeAllDialog " :size="'250px'">我知道了</div>
|
</div>
|
</PopUpFrame>
|
</div>
|
</template>
|
<script lang="ts">
|
import { Vue, Component, Prop, PropSync, Emit, namespace } from 'nuxt-property-decorator';
|
|
import appointmentService from '~/shared/services/appointment.service';
|
import { Appointment, ToInformAppointment } from '~/shared/models/appointment.model';
|
import { ContactStatus } from '~/shared/models/enum/contact-status';
|
|
const appointmentStore = namespace('appointment.store');
|
|
@Component
|
export default class InterviewMsg extends Vue {
|
|
@appointmentStore.Action
|
getMyAppointmentList!: () => Promise<Appointment[]>;
|
|
|
@appointmentStore.Action
|
updateMyAppointmentList!:(appointment: Appointment) => Appointment[];
|
|
@appointmentStore.Action
|
updateAppointmentDetail!: (appointmentId: number) => Promise<Appointment>;
|
|
@appointmentStore.State
|
appointmentDetail!: Appointment;
|
|
@PropSync('isVisible')
|
dialogVisible!: boolean;
|
|
@Prop({default:'90%'})
|
dialogWidth!:string;
|
|
@Prop()
|
client!: Appointment;
|
|
@Emit('closeDialog')
|
closeDialog() {
|
return;
|
}
|
|
interviewTime = '';
|
interviewTxt = '';
|
isShowSuccessAlert = false;
|
|
contactStatus = ContactStatus;
|
|
//////////////////////////////////////////////////////////////////////
|
|
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((_) => {
|
this.isShowSuccessAlert = true ;
|
const updatedAppointment = {
|
...this.appointmentDetail,
|
communicateStatus: this.contactStatus.CONTACTED,
|
};
|
this.updateMyAppointmentList(updatedAppointment);
|
this.updateAppointmentDetail(updatedAppointment.id);
|
});
|
}
|
|
closeAllDialog() {
|
this.isShowSuccessAlert = false ;
|
this.dialogVisible = false;
|
this.getMyAppointmentList();
|
}
|
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
.msg-dialog-title{
|
display: flex;
|
justify-content: center;
|
margin-bottom:30px;
|
color: $PRIMARY_BLACK;
|
}
|
.send-msg-nav{
|
display: flex;
|
justify-content: space-between;
|
margin-bottom: 10px;
|
color: $PRIMARY_BLACK;
|
}
|
.el-dialog{
|
width:90%
|
}
|
.el-textarea__inner{
|
font-size: 20px;
|
padding:10px;
|
text-align: justify;
|
font-weight: 500;
|
}
|
.msg-dialog-btn{
|
margin-top: 30px;
|
display: flex;
|
justify-content: center;
|
}
|
.invite-review{
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
}
|
</style>
|