¤ñ¹ï·sÀÉ®× |
| | |
| | | <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 required">é è¨ç´è¨ªææ®µ</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" |
| | | @closePopUp="closeAllDialog"> |
| | | <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 { AgentInfo } from '~/shared/models/agent-info.model'; |
| | | |
| | | const loginStore = namespace('login.store'); |
| | | const appointmentStore = namespace('appointment.store'); |
| | | |
| | | @Component |
| | | export default class InterviewMsg extends Vue { |
| | | |
| | | @appointmentStore.Action |
| | | updateAppointmentDetail!: (id: number) => Appointment; |
| | | |
| | | @appointmentStore.Action |
| | | getMyAppointmentList!: () => Promise<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() { |
| | | if(this.loginConsultant.phoneNumber && this.loginConsultant.email) |
| | | { |
| | | this.interviewTxt = "æ¨å¥½ï¼ææ¯ä¿èª åªåå¹³å°çä¿éªé¡§å" + this.loginConsultant.name + "ï¼æè¬æ¨çé ç´ï¼æé è¨æå¨ä¸è¿°çæéèæ¨è¯ç¹«"+"\n"+"以䏿¯æçé»è©±è碼/Emailï¼"+"\n" + this.loginConsultant.phoneNumber + "\n" + this.loginConsultant.email + "\n"+"è¥æ¤æé䏿¹ä¾¿ï¼è«èæè¯ç¹«ï¼è¬è¬ï¼"} |
| | | else if (!this.loginConsultant.phoneNumber && this.loginConsultant.email) |
| | | { |
| | | this.interviewTxt = "æ¨å¥½ï¼ææ¯ä¿èª åªåå¹³å°çä¿éªé¡§å" + this.loginConsultant.name + "ï¼æè¬æ¨çé ç´ï¼æé è¨æå¨ä¸è¿°çæéèæ¨è¯ç¹«"+"\n"+"以䏿¯æçEmailï¼"+"\n" + this.loginConsultant.email + "\n"+"è¥æ¤æé䏿¹ä¾¿ï¼è«èæè¯ç¹«ï¼è¬è¬ï¼" |
| | | } |
| | | else |
| | | this.interviewTxt = "æ¨å¥½ï¼ææ¯ä¿èª åªåå¹³å°çä¿éªé¡§å" + this.loginConsultant.name + "ï¼æè¬æ¨çé ç´ï¼æé è¨æå¨ä¸è¿°çæéèæ¨è¯ç¹«"+"\n"+"以䏿¯æçé»è©±è碼ï¼"+"\n" + this.loginConsultant.phoneNumber + "\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 ; |
| | | }); |
| | | } |
| | | |
| | | closeAllDialog() { |
| | | this.isShowSuccessAlert = false ; |
| | | this.dialogVisible = false; |
| | | this.updateAppointmentDetail(this.client.id); |
| | | this.getMyAppointmentList(); |
| | | } |
| | | |
| | | get isBtnDisabled() :Boolean { |
| | | const isFormValid = this.client.phone ? this.interviewTxt && this.interviewTime :this.interviewTxt |
| | | return !isFormValid |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" > |
| | | .interview-msg-component{ |
| | | |
| | | .required { |
| | | position: relative; |
| | | &::before { |
| | | content: '*'; |
| | | position: absolute; |
| | | color: #FF0000; |
| | | transform: translate(-12px, 0); |
| | | } |
| | | } |
| | | .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> |