<template>
|
<div>
|
<div class="interview__header">
|
<div class="mdTxt">約訪紀錄</div>
|
<div class="pam-link-button--lg"
|
@click="addInterview">+新增</div>
|
</div>
|
|
<template v-if="!interviewList.length">
|
<div class="record-card record-card--empty">
|
無約訪紀錄
|
</div>
|
</template>
|
|
<template v-if="interviewList.length">
|
<div
|
v-for="(item, index) in futureList"
|
:key="index + 'feature'"
|
class="interview--future"
|
@click="editInterview(item)"
|
>
|
|
<div class="record-card">
|
<div class="record-card-date">
|
<div>
|
<UiDateFormat
|
class="date bold"
|
:date="item.interviewDate"
|
onlyShowSection="DAY" />
|
</div>
|
<div>
|
<UiDateFormat
|
class="time mt-5 line-space"
|
:date="item.interviewDate"
|
onlyShowSection="TIME" />
|
</div>
|
</div>
|
<div class="record-card-content">
|
<span>{{item.content}}</span>
|
</div>
|
</div>
|
</div>
|
|
<section
|
class="interview--past"
|
v-for="(item, index) in pastList"
|
:key="index + 'past'"
|
@click="editInterview(item)"
|
>
|
<div class="record-card">
|
<div class="record-card-date">
|
<div>
|
<UiDateFormat
|
class="date bold"
|
:date="item.interviewDate"
|
onlyShowSection="DAY" />
|
</div>
|
<div>
|
<UiDateFormat
|
class="time mt-5 line-space"
|
:date="item.interviewDate"
|
onlyShowSection="TIME" />
|
</div>
|
</div>
|
<div class="record-card-content">
|
<span>{{item.content}}</span>
|
</div>
|
</div>
|
</section>
|
|
<section class="more-log-action">
|
<div class="pam-link-button--lg">展開看更多</div>
|
</section>
|
</template>
|
</div>
|
</template>
|
|
<script lang="ts">
|
import { Vue, Component, Prop, Watch, Mutation } from 'nuxt-property-decorator';
|
import { InterviewRecord } from '~/shared/models/appointment.model';
|
|
@Component
|
export default class AppointmentInterviewList extends Vue {
|
@Prop()
|
interviewList!: InterviewRecord[];
|
|
@Mutation
|
updateInterviewRecord!: (data: InterviewRecord) => void;
|
|
appointmentId!: string;
|
|
futureList: InterviewRecord[] = [];
|
pastList: InterviewRecord[] = [];
|
|
//////////////////////////////////////////////////////////////////////
|
|
mounted() {
|
this.appointmentId = this.$route.params.appointmentId;
|
}
|
|
//////////////////////////////////////////////////////////////////////
|
|
@Watch('interviewList', {immediate: true})
|
updateInterviewList() {
|
if (this.interviewList && this.interviewList.length > 0) {
|
this.futureList = this.interviewList
|
.filter(item => new Date(item.interviewDate).getTime() >= new Date().getTime())
|
this.pastList = this.interviewList
|
.filter(item => new Date(item.interviewDate).getTime() < new Date().getTime());
|
}
|
}
|
|
//////////////////////////////////////////////////////////////////////
|
|
addInterview(): void {
|
this.$router.push(`/appointment/${this.appointmentId}/interview/new`);
|
}
|
|
editInterview(interviewRecord) {
|
this.updateInterviewRecord(interviewRecord);
|
this.$router.push(`/appointment/${this.appointmentId}/interview/${interviewRecord.id}`);
|
}
|
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
.interview__header {
|
display : flex;
|
justify-content: space-between;
|
margin-bottom : 10px;
|
}
|
.interview--future{
|
border-bottom: 1px solid #CCCCCC;
|
padding-bottom: 17px;
|
margin-bottom: 17px;
|
.record{
|
display: flex;
|
justify-content: space-between;
|
margin-bottom: 10px;
|
}
|
}
|
.record-card {
|
height: 62px;
|
border: 1px solid #707070;
|
border-radius: 5px;
|
display: flex;
|
border-bottom: 1px solid #000;
|
.record-card-date{
|
display: flex;
|
flex-direction: column;
|
margin-left: 10px;
|
margin-right: 10px;
|
margin-top: 10px;
|
}
|
.record-card-content{
|
height: 42px;
|
margin-top: 10px;
|
margin-right: 10px;
|
line-height: 1.2;
|
}
|
&.record-card--empty {
|
align-items : center;
|
background-color: #fff;
|
color : $MID_GREY;
|
justify-content : center;
|
}
|
}
|
.line-space{
|
letter-spacing: 1px;
|
}
|
.more-log-action{
|
margin-top: 30px;
|
display: flex;
|
justify-content:flex-end;
|
}
|
</style>
|