From 9cb6d5f92ad7aeda45ad1fe6482dcfc63d17be2b Mon Sep 17 00:00:00 2001
From: HelenHuang <LinHuang@pollex.com.tw>
Date: 星期一, 06 十二月 2021 12:35:26 +0800
Subject: [PATCH] Merge branch 'master' of https://192.168.0.10:8443/r/pcalife/PAM

---
 PAMapp/store/index.ts |  133 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 132 insertions(+), 1 deletions(-)

diff --git a/PAMapp/store/index.ts b/PAMapp/store/index.ts
index 986f688..4fe433a 100644
--- a/PAMapp/store/index.ts
+++ b/PAMapp/store/index.ts
@@ -1,6 +1,137 @@
-import { Module, VuexModule } from 'vuex-module-decorators'
+import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
+import { ClientInfo, getMyAppointmentList, getMyReviewLog, allAppointmentsView } from '~/assets/ts/api/appointment';
+// import * as consultant from '~/assets/ts/api/consultant';
+import { recommend, AgentOfStrictQuery, getFavoriteConsultant, addFavoriteConsultant, deleteConsultant, strictQuery } from '~/assets/ts/api/consultant';
+import { Consultants } from '~/assets/ts/models/consultant.model';
+import { isLogin } from '~/assets/ts/auth';
+import { AppointmentLog } from '~/assets/ts/models/appointment.model';
+import { getFavoriteFromStorage, setFavoriteToStorage } from '~/assets/ts/storageConsultant';
 
 @Module
 export default class Store extends VuexModule {
+    recommendList: Consultants[] = [];
+    strictQueryList: AgentOfStrictQuery[] = [];
+    myConsultantList: Consultants[] = [];
+
+    myAppointmentList: ClientInfo[] = [];
+
+    myAppointmentReviewLogList: AppointmentLog[] = [];
+
+    @Mutation updateRecommend(data: Consultants[]) {
+        this.recommendList = data;
+    }
+
+    @Mutation updateConsultantList(data: Consultants[]) {
+        this.myConsultantList = data;
+    }
+
+    @Mutation updateStrictQueryList(data: AgentOfStrictQuery[]) {
+        this.strictQueryList = data;
+    }
+
+    @Mutation updateMyAppointmentList(data: ClientInfo[]) {
+        this.myAppointmentList = data;
+    }
+
+    @Mutation updateMyAppointmentReviewLog(data: AppointmentLog[]) {
+        this.myAppointmentReviewLogList = data;
+    }
+
+    @Action storeRecommendList() {
+        recommend().then(data => {
+            this.context.commit('updateRecommend', data)
+        })
+    }
+
+    @Action
+    async storeConsultantList() {
+        const localData = getFavoriteFromStorage();
+        if (!isLogin()) {
+            this.context.commit('updateConsultantList', localData)
+            return;
+        };
+
+
+        if (localData?.length) {
+            const agentNoList = localData.map(i => i.agentNo)
+            await addFavoriteConsultant(agentNoList).then(res => {
+                localStorage.removeItem('favoriteConsultant')
+            })
+        }
+
+        getFavoriteConsultant().then(data => {
+            this.context.commit('updateConsultantList', data)
+        })
+    }
+
+    @Action
+    async removeFromMyConsultantList(agentNo: string) {
+        const left = this.myConsultantList.filter(item => item.agentNo !== agentNo);
+
+        // no agent was removed
+        if (left.length === this.myConsultantList.length) return false;
+
+        if (!isLogin()) {
+            setFavoriteToStorage(left);
+        } else {
+            await deleteConsultant(agentNo)
+        }
+
+        this.context.commit('updateConsultantList', left)
+
+        return true
+    }
+
+    @Action
+    async addToMyConsultantList(consultantToAdd: Consultants) {
+        if (consultantToAdd) {
+            const found = this.myConsultantList.find(item => item.agentNo === consultantToAdd.agentNo);
+            if (!found) {
+                const newData = [consultantToAdd].concat(this.myConsultantList);
+
+                if (isLogin()) {
+                    await addFavoriteConsultant([consultantToAdd.agentNo])
+                } else {
+                    setFavoriteToStorage(newData);
+                }
+
+                this.context.commit('updateConsultantList', newData)
+
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Action
+    async storeMyAppointmentList() {
+        return await getMyAppointmentList().then((data) => {
+            this.context.commit('updateMyAppointmentList', data);
+            return data.filter(item => !item.consultantViewTime || item.consultantViewTime === null).length
+        });
+    }
+
+    @Action
+    storeMyAppointmentReviewLog() {
+        getMyReviewLog().then((data) => {
+            this.context.commit('updateMyAppointmentReviewLog', data);
+        });
+    }
+
+    @Action updateMyAppointment(myAppointment: ClientInfo) {
+        const data = this.myAppointmentList.filter(item => item.id !== myAppointment.id);
+        data.unshift(myAppointment);
+        this.context.commit('updateMyAppointmentList', data)
+    }
+
+    @Action
+    async storeStrictQueryList(strictQueryDto) {
+        return await strictQuery(strictQueryDto).then(res=>{
+            this.context.commit('localStorage/storageRecommendConsultant', JSON.stringify(strictQueryDto));
+            this.context.commit('updateStrictQueryList', res.data)
+            return res.data.length;
+        });
+    }
 
 }
\ No newline at end of file

--
Gitblit v1.9.3