PAMapp/components/Appointment/AppointmentRecordList.vue | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
PAMapp/components/Interview/InterviewMsg.vue | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
PAMapp/components/Interview/InterviewRecordCard.vue | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
PAMapp/pages/appointment/_appointmentId/recordList/index.vue | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 |
PAMapp/components/Appointment/AppointmentRecordList.vue
@@ -2,42 +2,11 @@ <div class="record-log-component"> <div class="mdTxt mt-30 mb-10">系統éç¥ç´é</div> <div v-for="(item, index) in displayLogs" :key="index"> <section class="record-log-card" > <div class="record-log-card-date-container"> <div class="record-log-card-date-container-circle"> <div class="xxsTxt bold line-height">{{item.createdDate | formatYear}}</div> <div> <UiDateFormat class="xxsTxt bold line-height" :date="item.createdDate" onlyShowSection="DAY" /> </div> <div> <UiDateFormat class="xxsTxt mt-4 line-space" :date="item.createdDate" onlyShowSection="TIME" /> </div> </div> </div> <div class="record-log-msg"> <div>ç¼éç´è¨ªéç¥ <span v-if="item.email && item.phone">(ææ©ç°¡è¨ãEmail)</span> <span v-else-if="item.email">(Email)</span> <span v-else>(ææ©ç°¡è¨)</span> </div> <div class="mt-10">é ç´{{item.interviewDate | formatDate}}</div> </div> </section> <div class="time-line"></div> </div> <InterviewRecordCard :noticeLogsList="displayLogs.slice(0, 3)"></InterviewRecordCard> <section class="more-log-action"> <section class="text--right mt-30"> <div class="pam-link-button--lg" @click="readMoreBtn" >å±éçæ´å¤</div> </section> </div> @@ -47,15 +16,7 @@ import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator'; import { NoticeLogs } from '~/shared/models/appointment.model'; @Component({ filters: { formatYear(value) { if (value) { return new Date(value).getFullYear(); } } } }) @Component export default class AppointmentRecordList extends Vue { @Prop() @@ -63,6 +24,8 @@ appointmentId: string = ''; displayLogs : NoticeLogs[] = []; ////////////////////////////////////////////////////////////////////// mounted() { this.appointmentId = this.$route.params.appointmentId; @@ -79,53 +42,11 @@ } } ////////////////////////////////////////////////////////////////////// readMoreBtn() { this.$router.push(`/appointment/${this.appointmentId}/recordList`); } } </script> <style lang="scss" scoped> .record-log-component{ display: flex; flex-direction: column; .record-log-card{ display: flex; .record-log-card-date-container{ position:relative; .record-log-card-date-container-circle{ display: flex; flex-direction: column; width: 56px; height: 56px; border-radius: 50%; border:1px solid $PRIMARY_BLACK; justify-content: center; align-items: center; align-content: center; } } } } .mt-4{ margin-top: 4px; } .line-space{ letter-spacing: 1px; } .line-height{ line-height:1.2; } .time-line{ border-left: 1px solid black; height: 30px; margin-left: 28px; } .record-log-msg{ margin-left: 13px; margin-top: 10px; } .more-log-action{ display: flex; justify-content:flex-end; } </style> PAMapp/components/Interview/InterviewMsg.vue
@@ -48,12 +48,16 @@ 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; @@ -88,6 +92,7 @@ }; appointmentService.informAppointment(appointmentInformation).then((_) => { this.isShowSuccessAlert = true ; this.updateAppointmentDetail(this.client.id); }); } @@ -98,7 +103,7 @@ } get isInterviewTxt() : string{ return this.interviewTxt = "æ¨å¥½ï¼ææ¯ä¿èª åªåå¹³å°çä¿éªé¡§å" + this.loginConsultant.name + "ï¼æè¬æ¨çé ç´ï¼æé è¨æå¨ä¸è¿°çæéèæ¨è¯ç¹«"+"\n"+"以䏿¯æçé»è©±è碼/Emailï¼"+"\n" + this.loginConsultant.phoneNumber + "\n" + this.loginConsultant.email + "\n"+"è¥æ¤æé䏿¹ä¾¿ï¼è«èæè¯ç¹«ï¼è¬è¬ï¼" return this.interviewTxt = "æ¨å¥½ï¼ææ¯ä¿èª åªåå¹³å°çä¿éªé¡§å" + this.loginConsultant?.name + "ï¼æè¬æ¨çé ç´ï¼æé è¨æå¨ä¸è¿°çæéèæ¨è¯ç¹«"+"\n"+"以䏿¯æçé»è©±è碼/Emailï¼"+"\n" + this.loginConsultant?.phoneNumber + "\n" + this.loginConsultant?.email + "\n"+"è¥æ¤æé䏿¹ä¾¿ï¼è«èæè¯ç¹«ï¼è¬è¬ï¼" } } PAMapp/components/Interview/InterviewRecordCard.vue
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,99 @@ <template> <div class="record-log-component"> <div v-for="(item, index) in noticeLogsList" :key="index"> <section class="record-log-card" > <div class="record-log-card-date-container"> <div class="record-log-card-date-container-circle"> <div class="xxsTxt bold line-height">{{item.createdDate | formatYear}}</div> <div> <UiDateFormat class="xxsTxt bold line-height" :date="item.createdDate" onlyShowSection="DAY" /> </div> <div> <UiDateFormat class="xxsTxt mt-4 line-space" :date="item.createdDate" onlyShowSection="TIME" /> </div> </div> </div> <div class="record-log-msg"> <div>ç¼éç´è¨ªéç¥ <span v-if="item.email && item.phone">(ææ©ç°¡è¨ãEmail)</span> <span v-else-if="item.email">(Email)</span> <span v-else>(ææ©ç°¡è¨)</span> </div> <div class="mt-10">é ç´{{item.interviewDate | formatDate}}</div> </div> </section> <div class="time-line"></div> </div> </div> </template> <script lang="ts"> import { Component, Prop, Vue } from "nuxt-property-decorator"; import { NoticeLogs } from "~/shared/models/appointment.model"; @Component({ filters: { formatYear(value) { if (value) { return new Date(value).getFullYear(); } } } }) export default class RecordCard extends Vue { @Prop() noticeLogsList!: NoticeLogs[]; } </script> <style lang="scss" scoped> .record-log-component{ display: flex; flex-direction: column; .record-log-card{ display: flex; .record-log-card-date-container{ position:relative; .record-log-card-date-container-circle{ display: flex; flex-direction: column; width: 56px; height: 56px; border-radius: 50%; border:1px solid $PRIMARY_BLACK; justify-content: center; align-items: center; align-content: center; } } } } .mt-4{ margin-top: 4px; } .line-space{ letter-spacing: 1px; } .line-height{ line-height:1.2; } .time-line{ border-left: 1px solid black; height: 30px; margin-left: 28px; } .record-log-msg{ margin-left: 13px; margin-top: 10px; } </style> PAMapp/pages/appointment/_appointmentId/recordList/index.vue
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,32 @@ <template> <InterviewRecordCard :noticeLogsList="displayLogs"></InterviewRecordCard> </template> <script lang="ts"> import { Component, namespace, Vue, Watch } from "nuxt-property-decorator"; import { Appointment, NoticeLogs } from "~/shared/models/appointment.model"; const appointmentStore = namespace('appointment.store'); @Component export default class RecordList extends Vue { @appointmentStore.State appointmentDetail!: Appointment; displayLogs: NoticeLogs[] = []; //////////////////////////////////////////////////////// @Watch('appointmentDetail', {immediate: true}) onAppointmentDetailChange() { if (this.appointmentDetail?.appointmentNoticeLogs.length) { this.displayLogs = this.appointmentDetail?.appointmentNoticeLogs .map((i) => ({ ...i, sortDate: new Date(i.createdDate)})) .sort((preItem, nextItem) => +nextItem.sortDate - +preItem.sortDate); } } } </script>