From ffcf1c449974fffad5e827ab0dd2d3bb21327d5f Mon Sep 17 00:00:00 2001 From: Tomas <tomasysh@gmail.com> Date: 星期六, 05 八月 2023 17:46:45 +0800 Subject: [PATCH] Fixed: [弱掃] p13.2 Bad use of null-like value --- PAMapp/components/Interview/InterviewMsg.vue | 165 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 127 insertions(+), 38 deletions(-) diff --git a/PAMapp/components/Interview/InterviewMsg.vue b/PAMapp/components/Interview/InterviewMsg.vue index 021b25f..ac9f657 100644 --- a/PAMapp/components/Interview/InterviewMsg.vue +++ b/PAMapp/components/Interview/InterviewMsg.vue @@ -7,26 +7,49 @@ :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 v-if="!!client.phone"> <div class="mdTxt mt-30 mb-10 required">����赤��挾</div> <DateTimePicker - @changeDateTime="interviewTime = $event" + @changeDateTime="interviewContent.interviewTime = $event" :isPastDateDisabled="true" :defaultValue="defaultValue" ></DateTimePicker> </div> + + <div class="send-msg-nav mt-10" style="justify-content: flex-start; align-items: center ;"> + <div class="mdTxt">�隞��摰�</div> + </div> + + <el-input + type="textarea" + placeholder="隢撓��摰�" + resize="none" + rows="2" + v-model="interviewContent.customContent"> + </el-input> + + <div class="send-msg-nav mt-10"> + <div class="mdTxt">��汗��摰�</div> + </div> + + <!-- <el-input + type="textarea" + :autosize="true" + placeholder="��汗蝝赤�" + resize="none" + :disabled="true" + v-model="interviewTxt"> --> + <!-- </el-input> --> + <div class="interviewContent"> + <div style="padding:10px;line-height:25px"> + <i class="content">�憟踝��靽���像����憿批�{loginConsultant.name}}嚗��������</i><br/> + <el-input type="textarea" :placeholder="'\{{ 憒����������ㄐ憿舐內 }}'" resize="none" v-model="interviewContent.customContent" readonly :autosize="true" ></el-input><br/> + <i class="content">{{client.phone ||defaultValue ? ("�����銝膩������蝜�"+ "\n" + (this.interviewContent.formattedInterviewTime || "(撠����赤��挾)")): ""}}</i><br/> + <i class="content">隞乩����閰梯�Ⅳ/Email嚗{loginConsultant.phoneNumber || '撠���閰梯�Ⅳ'}} / {{loginConsultant.email || '撠���� Email'}}</i><br/> + <i class="content">�甇斗���靘選����蝜恬�����</i> + </div> + </div> <div class="msg-dialog-btn"> <el-button @click="addInterview" :disabled="isBtnDisabled">���</el-button> @@ -45,7 +68,7 @@ </div> </template> <script lang="ts"> -import { Vue, Component, Prop, PropSync, Emit, namespace } from 'nuxt-property-decorator'; +import { Vue, Component, Prop, PropSync, Emit, namespace, Watch } from 'nuxt-property-decorator'; import appointmentService from '~/shared/services/appointment.service'; import { Appointment, ToInformAppointment } from '~/shared/models/appointment.model'; @@ -75,6 +98,13 @@ @Prop() defaultValue!: string; + @Watch('defaultValue', { immediate: true }) + onDefaultValueChange(): void { + if (this.defaultValue) { + this.interviewContent.interviewTime = this.defaultValue; + } + } + @Emit('closeDialog') closeDialog() { return; @@ -84,35 +114,60 @@ loginConsultant!: AgentInfo; isShowSuccessAlert = false; + interviewTxt = ''; - interviewTxt = ""; - interviewTime = ''; + @Watch('interviewContent', { immediate: true, deep: true }) + onInterviewContentChange() { + if (this.interviewContent.addContactInfo) { + if (this.interviewContent.interviewTime) { + const targetDate = new Date(this.interviewContent.interviewTime); + this.interviewContent.formattedInterviewTime = `${targetDate.getFullYear()}撟�${targetDate.getMonth() + 1}���${targetDate.getDate()}� ${targetDate.getHours()}���${targetDate.getMinutes()}��; + } + if(this.loginConsultant.phoneNumber){ + let temp = ''; + for (var i=0;i<this.loginConsultant.phoneNumber.length;i++) { + let charCode = this.loginConsultant.phoneNumber.charCodeAt(i); + if(charCode <=126 && charCode>= 33) { + charCode += 65248; + } else if (charCode ===32) { + charCode =12288; + } + temp = temp + String.fromCharCode(charCode); + } + this.interviewTxt = "�憟踝��靽���像����憿批��"+this.loginConsultant.name+"嚗��������"+"\n"+this.interviewContent.customContent+ "\n" ��+ ( this.client.phone || this.defaultValue ? ("�����銝膩������蝜�"+ "\n" + (this.interviewContent.formattedInterviewTime || "(撠����赤��挾)")): "") + "\n" +"隞乩����閰梯�Ⅳ/Email嚗�"+"\n" + ( temp || '(撠���閰梯�Ⅳ)') + "\n" + (this.loginConsultant.email|| '撠���� Email') + "\n" +"�甇斗���靘選����蝜恬�����"; + } + } else { + // this.interviewTxt = this.interviewContent.customContent; + this.interviewTxt = "�憟踝��靽���像����憿批��"+this.loginConsultant.name+"嚗��������"+"\n"+this.interviewContent.customContent+ "\n" ��+ ( this.client.phone || this.defaultValue ? ("�����銝膩������蝜�"+ "\n" + (this.interviewContent.formattedInterviewTime || "(撠����赤��挾)")): "") + "\n" +"隞乩����mail嚗�"+"\n" + (this.loginConsultant.email|| '撠���� Email') + "\n" +"�甇斗���靘選����蝜恬�����"; + } + } + + interviewContent = { + addContactInfo: true, + interviewTime: '', + formattedInterviewTime: '', + customContent: '', + }; + ////////////////////////////////////////////////////////////////////// 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"+"隞乩����閰梯�Ⅳ/Email嚗�"+"\n" + this.loginConsultant.phoneNumber + "\n"+"�甇斗���靘選����蝜恬�����" + this.interviewContent.customContent =''; } - 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 ; - }); - } + addInterview() { + const appointmentInformation: ToInformAppointment = { + appointmentId: this.client?.id || 0, + email: this.client?.email || '', + interviewDate: this.interviewContent.interviewTime, + message: this.interviewTxt, + phone: this.client?.phone || '', + }; + appointmentService.informAppointment(appointmentInformation).then((_) => { + this.isShowSuccessAlert = true; + }); + } + closeAllDialog() { this.isShowSuccessAlert = false ; @@ -122,7 +177,7 @@ } get isBtnDisabled() :Boolean { - const isFormValid = this.client.phone ? this.interviewTxt && this.interviewTime :this.interviewTxt + const isFormValid = this.client.phone ? this.interviewTxt && this.interviewContent.formattedInterviewTime : this.interviewTxt return !isFormValid } @@ -161,6 +216,7 @@ padding:10px; text-align: justify; font-weight: 600; + } .msg-dialog-btn{ margin-top: 30px; @@ -172,5 +228,38 @@ flex-direction: column; align-items: center; } + + .interviewContent { + border: 1px solid #D0D0CE; + border-radius: 4px; + overflow-y: auto; + height: 180px; + background-color:#F8F9FA; + textarea { + outline:none !important; + border: none; + background-color:transparent; + color: red; + } + ::placeholder { + color: red; + } + } + .content{ + font-size: 18px; + font-weight: bold; + color: #CCCCCC; + } + + .el-input__inner { + border:1px solid #707070; + border-radius:4px; + } + .interview-other-msg { + max-height: 80px; + overflow-y: auto; + margin-bottom: 5px; + margin-top: 5px; + } } </style> -- Gitblit v1.8.0