From 17c4bad56fd902184f7c037dbdb22fd63289d1e7 Mon Sep 17 00:00:00 2001
From: Mila <Mila@pollex.com.tw>
Date: 星期二, 25 一月 2022 16:21:42 +0800
Subject: [PATCH] fixed: TODO#134613 [顧問管理流程] 搜尋欄位清空 , 未顯示原本的約訪中列表

---
 PAMapp/pages/myAppointmentList/contactedList.vue |  124 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 110 insertions(+), 14 deletions(-)

diff --git a/PAMapp/pages/myAppointmentList/contactedList.vue b/PAMapp/pages/myAppointmentList/contactedList.vue
index de75b31..5be7e6f 100644
--- a/PAMapp/pages/myAppointmentList/contactedList.vue
+++ b/PAMapp/pages/myAppointmentList/contactedList.vue
@@ -5,49 +5,145 @@
             placeholder="隢撓���摮�"
             class="mb-30 pam-clientReserved-input"
             v-model="keyWord"
+            @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"
         ></UiPagination>
     </div>
 </template>
 
 <script lang="ts">
-import { Vue, Component, Prop } from 'nuxt-property-decorator';
-import { ClientInfo } from '~/assets/ts/api/appointment';
+import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
+
+import { Appointment } from '~/shared/models/appointment.model';
+
+
+const appointmentStore = namespace('appointment.store');
+const localStorage     = namespace('localStorage');
 
 @Component
 export default class ClientContactedList extends Vue {
-    @Prop({default: []}) contactedList!: ClientInfo[];
-    pageList: ClientInfo[] = [];
-    keyWord: string = '';
-    filterList: ClientInfo[] = [];
+
+    @appointmentStore.State('myAppointmentList')
+    myAppointmentList!: Appointment[];
+
+    @localStorage.Getter
+    currentAppointmentIdFromMsg!: string;
+
+    contactedList   : Appointment[]  = [];
+    currentPage      : number        = 1;
+    filterList       : Appointment[] = [];
+    keyWord          : string        = '';
+    pageList         : Appointment[] = [];
+    sortType        : 'ASC' | 'DESC' = 'DESC';
+    togglePagination: boolean        = true;
+
+    //////////////////////////////////////////////////////////////////////
 
     mounted() {
-        this.filterList = JSON.parse(JSON.stringify(this.contactedList));
+        this.onMyAppointmentListChange();
     }
 
-    changePage(pageList: ClientInfo[]) {
+    //////////////////////////////////////////////////////////////////////
+
+    @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.lastModifiedDate)}))
+            .sort((prevItem, nextItem) => {
+              return this.sortType === 'DESC' ? +nextItem.sortTime - +prevItem.sortTime : +prevItem.sortTime - +nextItem.sortTime
+            });
+        this.filterList = this.contactedList;
+
+        this.getCurrentPage();
+    }
+
+    private getCurrentPage(): void {
+        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 {
+        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: Appointment[]): void {
         this.pageList = pageList;
     }
 
-    search() {
-        this.filterList = this.contactedList.filter(item => {
-            return item.name.match(this.keyWord) || item.requirement.match(this.keyWord)
-        })
+    changeSortType(): void {
+      if (this.sortType === 'DESC') {
+        this.sortType = 'ASC';
+      } else {
+        this.sortType = 'DESC';
+      }
     }
+
+    get isSortType () :boolean {
+      return this.sortType === 'DESC';
+    }
+
 }
-</script>
\ No newline at end of file
+</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