<template>
|
<div class="interview-msg-component">
|
<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>
|
|
<el-input
|
type="textarea"
|
:autosize="true"
|
placeholder="約訪通知"
|
resize="none"
|
v-model="interviewTxt">
|
</el-input>
|
|
<div v-if="client.phone">
|
<div class="mdTxt mt-30 mb-10">預計約訪時段</div>
|
<DateTimePicker
|
@changeDateTime="interviewTime = $event"
|
:isPastDateDisabled="true"
|
:defaultValue="defaultValue"
|
></DateTimePicker>
|
</div>
|
|
<div class="msg-dialog-btn">
|
<el-button @click="addInterview" :disabled="isBtnDisabled">傳送</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, Action, namespace } from 'nuxt-property-decorator';
|
|
import appointmentService from '~/shared/services/appointment.service';
|
import { Appointment, ToInformAppointment } from '~/shared/models/appointment.model';
|
import { AgentInfo } from '~/shared/models/agent-info.model';
|
|
const loginStore = namespace('login.store');
|
const appointmentStore = namespace('appointment.store');
|
|
@Component
|
export default class InterviewMsg extends Vue {
|
|
@Action
|
storeMyAppointmentList!: () => Promise<number>;
|
|
@appointmentStore.Action
|
updateAppointmentDetail!: (id: number) => Appointment;
|
|
@PropSync('isVisible')
|
dialogVisible!: boolean;
|
|
@Prop({default:'90%'})
|
dialogWidth!:string;
|
|
@Prop()
|
client!: Appointment;
|
|
@Prop()
|
defaultValue!: string;
|
|
@Emit('closeDialog')
|
closeDialog() {
|
return;
|
}
|
|
@loginStore.State
|
loginConsultant!: AgentInfo;
|
|
isShowSuccessAlert = false;
|
|
interviewTxt = "";
|
interviewTime = '';
|
//////////////////////////////////////////////////////////////////////
|
|
mounted() {
|
this.interviewTxt = "您好!我是保誠媒合平台的保險顧問" + this.loginConsultant.name + ",感謝您的預約!我預計會在下述的時間與您聯繫"+"\n"+"以下是我的電話號碼/Email:"+"\n" + this.loginConsultant.phoneNumber + "\n" + this.loginConsultant.email + "\n"+"若此時間不方便,請與我聯繫!謝謝!"
|
}
|
|
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 ;
|
this.updateAppointmentDetail(this.client.id);
|
});
|
}
|
|
closeAllDialog() {
|
this.isShowSuccessAlert = false ;
|
this.dialogVisible = false;
|
this.storeMyAppointmentList();
|
}
|
|
get isBtnDisabled() :Boolean {
|
const isFormValid = this.client.phone ? this.interviewTxt && this.interviewTime :this.interviewTxt
|
return !isFormValid
|
}
|
|
}
|
</script>
|
|
<style lang="scss" >
|
.interview-msg-component{
|
|
.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: 600;
|
}
|
.msg-dialog-btn{
|
margin-top: 30px;
|
display: flex;
|
justify-content: center;
|
}
|
.invite-review{
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
}
|
}
|
</style>
|