From 6fa4bba623713c396432ba8b863846883d6a1906 Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期三, 26 一月 2022 10:52:23 +0800
Subject: [PATCH] Merge branch 'pollex-dev' into sit

---
 PAMapp/pages/myAppointmentList/contactedList.vue |   96 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 77 insertions(+), 19 deletions(-)

diff --git a/PAMapp/pages/myAppointmentList/contactedList.vue b/PAMapp/pages/myAppointmentList/contactedList.vue
index aedf894..5be7e6f 100644
--- a/PAMapp/pages/myAppointmentList/contactedList.vue
+++ b/PAMapp/pages/myAppointmentList/contactedList.vue
@@ -5,21 +5,30 @@
             placeholder="隢撓���摮�"
             class="mb-30 pam-clientReserved-input"
             v-model="keyWord"
-            @keyup.enter.native="search"
+            @input="search"
         >
             <i
                 slot="suffix"
                 class="icon-search search cursor--pointer"
-                @click="search"
             ></i>
         </el-input>
+
+        <div class="mb-10 sort-indicator-container">
+          <a class="sort-indicator cursor--pointer" @click="changeSortType">
+            {{ this.sortType === 'DESC' ? '�->���' : '���->�' }}
+            <i v-if="isSortType" class="icon-sort-add"></i>
+            <i v-else class="icon-sort-decrease"></i>
+          </a>
+        </div>
 
         <ClientList
             :clients="pageList"
             :title="'contactedList'"
+            class="mt-10"
         ></ClientList>
 
         <UiPagination
+            v-if="togglePagination"
             :totalList="filterList"
             :currentPage="currentPage"
             @changePage="changePage"
@@ -28,25 +37,30 @@
 </template>
 
 <script lang="ts">
-import { Vue, Component, Watch, State, namespace } from 'nuxt-property-decorator';
+import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
 
-import { ClientInfo } from '~/shared/models/client.model';
+import { Appointment } from '~/shared/models/appointment.model';
 
-const localStorage = namespace('localStorage');
+
+const appointmentStore = namespace('appointment.store');
+const localStorage     = namespace('localStorage');
+
 @Component
 export default class ClientContactedList extends Vue {
 
-    @State('myAppointmentList')
-    myAppointmentList!: ClientInfo[];
+    @appointmentStore.State('myAppointmentList')
+    myAppointmentList!: Appointment[];
 
     @localStorage.Getter
     currentAppointmentIdFromMsg!: string;
 
-    contactedList: ClientInfo[] = [];
-    filterList   : ClientInfo[] = [];
-    keyWord      : string       = '';
-    pageList     : ClientInfo[] = [];
-    currentPage  : number = 1;
+    contactedList   : Appointment[]  = [];
+    currentPage      : number        = 1;
+    filterList       : Appointment[] = [];
+    keyWord          : string        = '';
+    pageList         : Appointment[] = [];
+    sortType        : 'ASC' | 'DESC' = 'DESC';
+    togglePagination: boolean        = true;
 
     //////////////////////////////////////////////////////////////////////
 
@@ -58,16 +72,32 @@
 
     @Watch('myAppointmentList')
     onMyAppointmentListChange() {
+      this.setContactedList();
+    }
+
+    @Watch('sortType')
+    onSortTypeChange() {
+      this.togglePagination = false;
+      setTimeout(() => {
+      this.togglePagination = true;
+        this.currentPage = 1;
+        this.setContactedList();
+      }, 0)
+    }
+
+    private setContactedList(): void {
         this.contactedList = (this.myAppointmentList || [])
             .filter(item => item.communicateStatus === 'contacted')
-            .map((item) => ({...item, sortTime: new Date(item.contactTime)}))
-            .sort((prevItem, nextItem) => +nextItem.sortTime - +prevItem.sortTime);
+            .map((item) => ({...item, sortTime: new Date(item.lastModifiedDate)}))
+            .sort((prevItem, nextItem) => {
+              return this.sortType === 'DESC' ? +nextItem.sortTime - +prevItem.sortTime : +prevItem.sortTime - +nextItem.sortTime
+            });
         this.filterList = this.contactedList;
 
         this.getCurrentPage();
     }
 
-    private getCurrentPage() {
+    private getCurrentPage(): void {
         const currentIndex = this.filterList.findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
         const pageSize = 5;
         if (currentIndex > -1) {
@@ -78,14 +108,42 @@
     //////////////////////////////////////////////////////////////////////
 
     search(): void {
-        this.filterList = this.contactedList.filter(item => {
-            return item?.name?.match(this.keyWord) || item?.requirement?.match(this.keyWord)
-        })
+        if (this.keyWord) {
+          this.filterList = this.contactedList.filter(item => {
+              return item?.name?.match(this.keyWord) || item?.requirement?.match(this.keyWord)
+          })
+        } else {
+          this.filterList = this.contactedList;
+        }
     }
 
-    changePage(pageList: ClientInfo[]): void {
+    changePage(pageList: Appointment[]): void {
         this.pageList = pageList;
+    }
+
+    changeSortType(): void {
+      if (this.sortType === 'DESC') {
+        this.sortType = 'ASC';
+      } else {
+        this.sortType = 'DESC';
+      }
+    }
+
+    get isSortType () :boolean {
+      return this.sortType === 'DESC';
     }
 
 }
 </script>
+<style lang="scss" scoped>
+.sort-indicator-container{
+  margin-bottom: 20px;
+}
+.sort-indicator{
+  border-radius:30px;
+  border: 1px solid #D0D0CE;
+  background-color:#fff;
+  padding: 10px 20px;
+  color: #68737A;
+}
+</style>

--
Gitblit v1.8.0