<template>
|
<div>
|
<el-input
|
type="text"
|
placeholder="請輸入關鍵字"
|
class="mb-30 pam-clientReserved-input"
|
v-model="keyWord"
|
@keyup.enter.native="search"
|
>
|
<i slot="suffix" class="icon-search search cursor--pointer" @click="search"></i>
|
</el-input>
|
|
<ClientList
|
:clients="pageList"
|
:title="'reservedList'"
|
></ClientList>
|
|
<UiPagination
|
:totalList="filterList"
|
:currentPage="currentPage"
|
@changePage="changePage"
|
></UiPagination>
|
</div>
|
</template>
|
|
<script lang="ts">
|
import { Vue, Component, State, Watch, namespace } from 'nuxt-property-decorator';
|
|
import { Appointment } from '~/shared/models/appointment.model';
|
|
|
const localStorage = namespace('localStorage');
|
@Component
|
export default class ClientReservedList extends Vue {
|
|
@State('myAppointmentList')
|
myAppointmentList!: Appointment[];
|
|
@localStorage.Getter
|
currentAppointmentIdFromMsg!: string;
|
|
appointmentList: Appointment[] = [];
|
filterList : Appointment[] = [];
|
keyWord : string = '';
|
pageList : Appointment[] = [];
|
currentPage : number = 1;
|
|
//////////////////////////////////////////////////////////////////////
|
|
mounted() {
|
this.onMyAppointmentListChange();
|
}
|
|
//////////////////////////////////////////////////////////////////////
|
|
@Watch('myAppointmentList')
|
onMyAppointmentListChange(): void {
|
const unViewList = this.myAppointmentList
|
.filter((item) => item.communicateStatus !== 'contacted' && !item.consultantViewTime)
|
.map((item) => ({ ...item, sortTime: new Date(item.appointmentDate)}))
|
.sort((preItem, nextItem) => +nextItem.sortTime - +preItem.sortTime);
|
|
const tempViewList = this.myAppointmentList
|
.filter(item => item.communicateStatus !== 'contacted' && item.consultantViewTime);
|
|
// TODO: 後續如需針對 unreadList 做更細緻的排序,則需請後端提供判斷依據(例如: createTime)。[Tomas, 2021/12/16];å
|
const unreadList = tempViewList
|
.filter((item) => !item.consultantReadTime);
|
const readList = tempViewList
|
.filter((item) => item.consultantReadTime)
|
.map((item) => ({ ...item, sortTime: new Date(item.consultantReadTime)}))
|
.sort((preItem, nextItem) => +nextItem.sortTime - +preItem.sortTime);
|
|
this.appointmentList = [...unViewList, ...unreadList, ...readList];
|
this.filterList = this.appointmentList;
|
|
this.getCurrentPage();
|
}
|
|
private getCurrentPage() {
|
const currentIndex = this.filterList
|
.findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
|
const pageSize = 5;
|
if (currentIndex > -1) {
|
this.currentPage = Math.ceil((currentIndex + 1) / pageSize);
|
}
|
}
|
|
//////////////////////////////////////////////////////////////////////
|
search(): void {
|
this.filterList = this.appointmentList.filter(item => {
|
return item.name.match(this.keyWord) || item.requirement.match(this.keyWord)
|
})
|
}
|
|
changePage(pageList: Appointment[]): void {
|
this.pageList = pageList;
|
}
|
|
}
|
</script>
|