| | |
| | | <template> |
| | | <div class="edit-appointment-record"> |
| | | <div class="edit-appointment-record-date" v-if="interviewId"> |
| | | <div class="edit-appointment-record-date" v-if="interviewId && interviewRecord"> |
| | | <span>{{interviewRecord.createdDate | formatDate}} 建立</span> |
| | | <span>{{interviewRecord.lastModifiedDate | formatDate}} 更新</span> |
| | | </div> |
| | |
| | | @closePopUp="closePopup"> |
| | | <div class="text--center mdTxt">{{confirmTxt}}!</div> |
| | | <div class="text--center mdTxt">立即發送約訪通知?</div> |
| | | <div class="text--center mt-30"> |
| | | <div class="text--center mt-30" style="display:flex"> |
| | | <el-button @click="closePopup">先不發送</el-button> |
| | | <el-button @click="showInterviewMsgPopup = true" type="primary">傳送約訪通知</el-button> |
| | | </div> |
| | |
| | | |
| | | <InterviewMsg |
| | | :isVisible.sync="showInterviewMsgPopup" |
| | | :client="appointmentDetail" |
| | | :defaultValue="interviewTime" |
| | | @closeDialog="closePopup" |
| | | ></InterviewMsg> |
| | | </div> |
| | | </template> |
| | | <script lang="ts"> |
| | | import { InterviewRecord, InterviewRecordInfo } from '~/shared/models/appointment.model'; |
| | | import { Vue, Component, Prop, State, Mutation, Watch, Action } from 'nuxt-property-decorator'; |
| | | import { Appointment, InterviewRecord, InterviewRecordInfo } from '~/shared/models/appointment.model'; |
| | | import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator'; |
| | | import appointmentService from '~/shared/services/appointment.service'; |
| | | |
| | | const appointmentStore = namespace('appointment.store'); |
| | | |
| | | @Component |
| | | export default class InterviewAdd extends Vue { |
| | | @State |
| | | interviewRecord!: InterviewRecord; |
| | | |
| | | @Mutation |
| | | updateInterviewRecord!: (data: InterviewRecord) => void; |
| | | @appointmentStore.State |
| | | appointmentDetail!: Appointment; |
| | | |
| | | @Mutation |
| | | clearInterviewRecord!: () => void; |
| | | @appointmentStore.Action |
| | | updateAppointmentDetail!: (id: number) => Appointment; |
| | | |
| | | interviewTime = ''; |
| | | content = ''; |
| | |
| | | |
| | | defaultValue = ''; |
| | | |
| | | interviewRecord!: InterviewRecord; |
| | | |
| | | //////////////////////////////////////////////////////////////////// |
| | | |
| | | mounted() { |
| | | this.interviewId = this.$route.params.interviewId; |
| | | this.appointmentId = this.$route.params.appointmentId; |
| | | const isEditPage = this.interviewId && this.interviewRecord; |
| | | if (isEditPage) { |
| | | this.checkInterviewRecord(); |
| | | } |
| | | } |
| | | |
| | | private checkInterviewRecord() { |
| | | if (this.interviewRecord.appointmentId !== +this.appointmentId |
| | | || this.interviewRecord.id !== +this.interviewId) { |
| | | appointmentService.getAppointmentDetail(+this.appointmentId).then((data) => { |
| | | const currentInterviewRecord = data.interviewRecordDTOs.filter(item => item.id === +this.interviewId)[0]; |
| | | this.updateInterviewRecord(currentInterviewRecord); |
| | | }) |
| | | } |
| | | } |
| | | |
| | | destroyed() { |
| | | this.clearInterviewRecord(); |
| | | this.onAppointmentDetailChange(); |
| | | } |
| | | |
| | | //////////////////////////////////////////////////////////////////// |
| | | |
| | | @Watch('interviewRecord', {immediate: true}) |
| | | watchInterviewRecord() { |
| | | if (this.interviewRecord && this.interviewRecord.content) { |
| | | this.content = this.interviewRecord.content; |
| | | this.defaultValue = this.interviewRecord.interviewDate; |
| | | @Watch('appointmentDetail', {immediate: true}) |
| | | onAppointmentDetailChange() { |
| | | if (this.appointmentDetail && this.appointmentDetail.id === +this.appointmentId) { |
| | | this.interviewRecord = this.appointmentDetail.interviewRecordDTOs |
| | | .filter(item => item.id === +this.interviewId)[0]; |
| | | |
| | | if (this.interviewRecord && this.interviewId) { |
| | | this.content = this.interviewRecord.content; |
| | | this.defaultValue = this.interviewRecord.interviewDate; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | private createdRecord(interviewRecordInfo) { |
| | | appointmentService.createInterviewRecord(interviewRecordInfo).then(res => { |
| | | this.confirmTxt = '新增成功' |
| | | this.showPopUp(); |
| | | this.showPopUp('新增成功'); |
| | | }); |
| | | } |
| | | |
| | | private updateRecord(updateInterviewRecord) { |
| | | appointmentService.updateInterviewRecord(updateInterviewRecord).then(res => { |
| | | this.confirmTxt = '編輯成功'; |
| | | this.showPopUp(); |
| | | this.showPopUp('編輯成功'); |
| | | }); |
| | | } |
| | | |
| | | private showPopUp() { |
| | | private showPopUp(confirmTxt) { |
| | | this.confirmTxt = confirmTxt; |
| | | this.updateAppointmentDetail(+this.appointmentId); |
| | | |
| | | if (new Date(this.interviewTime).getTime() >= new Date().getTime()) { |
| | | this.showFutureDateConfirmPopup = true; |
| | | } else { |
| | |
| | | } |
| | | } |
| | | |
| | | closePopup() { |
| | | this.$router.push(`/appointment/${this.appointmentId}`); |
| | | } |
| | | |
| | | deleteInterviewRecord() { |
| | | appointmentService.deleteInterviewRecord(this.interviewId).then(res => { |
| | | this.confirmTxt = '刪除成功'; |
| | | this.showConfirmPopup = true; |
| | | this.updateAppointmentDetail(+this.appointmentId); |
| | | }); |
| | | } |
| | | |
| | |
| | | this.defaultValue = this.interviewRecord.interviewDate; |
| | | this.isEdit = false; |
| | | } else { |
| | | this.$router.push(`/appointment/${this.appointmentId}`); |
| | | this.$router.go(-1); |
| | | } |
| | | } |
| | | |
| | | closePopup() { |
| | | this.$router.go(-1); |
| | | } |
| | | |
| | | //////////////////////////////////////////////////////////////////// |
| | |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | <style lang="scss" > |
| | | .edit-appointment-record { |
| | | padding-left : 10px; |
| | | padding-right: 10px; |
| | |
| | | margin-bottom : 26px; |
| | | } |
| | | } |
| | | .icon { |
| | | color : $PRIMARY_RED; |
| | | display : flex; |
| | | flex : 1; |
| | | justify-content: flex-end; |
| | | } |
| | | .edit-appointment-record-btn{ |
| | | margin-top: 30px; |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | .el-textarea__inner { |
| | | border: 1px solid #707070; |
| | | padding: 10px 20px; |
| | | font-size: 20px; |
| | | &::placeholder { |
| | | font-size: 20px; |
| | | } |
| | | } |
| | | |
| | | </style> |