From cd4a64b39c429f2f5b45cb042d1b66f1cd3904cd Mon Sep 17 00:00:00 2001
From: 劉鈞霖 <benson@gmail.com>
Date: 星期一, 15 十一月 2021 18:06:40 +0800
Subject: [PATCH] [ Update ] 更新 navbar 清單 根據 角色 顯示清單

---
 PAMapp/pages/index.vue |  177 +++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 112 insertions(+), 65 deletions(-)

diff --git a/PAMapp/pages/index.vue b/PAMapp/pages/index.vue
index 9a447a3..feffa01 100644
--- a/PAMapp/pages/index.vue
+++ b/PAMapp/pages/index.vue
@@ -1,61 +1,78 @@
 <template>
     <div>
         <Ui-Carousel></Ui-Carousel>
-        <div class="content">
-            <h5 class="mdTxt mb-20">����憿批��</h5>
+        <div class="page-container">
+            <h5 class="mdTxt mb-30">����憿批��</h5>
             <el-button
-                class="reserveConsultantBtn"
+                class="reserveBtn recommendConsultant"
                 @click="routerPush('/recommendConsultant')"
-            >������</el-button>
+            >
+                <p>������</p>
+            </el-button>
             <el-button
-                class="reserveConsultantBtn"
+                class="reserveBtn quickFilter"
                 @click="routerPush('/quickFilter')"
-            >敹恍�祟�</el-button>
-            <div class="rowStyle mb-20">
-                <div class="flex">
-                    <h5 class="mdTxt">���“���</h5>
-                    <span class="smTxt_bold align_center amount">� {{agents.length}} 蝑�</span>
-                </div>
-                <div
+            >
+                <p>敹恍�祟�</p>
+            </el-button>
+            <el-row class="mb-30 rowStyle">
+                <el-col :span="16">
+                    <span class="mdTxt">���“���</span>
+                    <span class="smTxt_bold amount">� {{consultantList.length}} 蝑�</span>
+                </el-col>
+                <el-col
+                    :span="8"
                     class="mdTxt readMore"
-                    @click="routerPush('/contactList/consultantList')"
-                >���憭�</div>
-            </div>
+                    v-if="consultantList.length > 3"
+                    @click.native="routerPush('/myConsultantList/consultantList')">���憭�</el-col>
+            </el-row>
             <ConsultantList
-                :agents="agents.slice(0, 3)"
+                :agents="consultantList.slice(0, 3)"
                 @removeAgent="removeAgent"
             ></ConsultantList>
-            <h5 class="mdTxt mb-20 mt-32">��靽憿批��</h5>
-            <Ui-Swiper :agents="swiperAgents"></Ui-Swiper>
+            <div class='pam-recommend pb-30 pt-30'>
+                <h5 class="mdTxt">��靽憿批��</h5>
+                <img class="absulate img" src="~/assets/images/index_recommend.svg" alt="">
+            </div>
+            <ConsultantSwiper :agents="recommendList"></ConsultantSwiper>
         </div>
-
     </div>
 </template>
 
 <script lang="ts">
-import { Vue, Component } from 'nuxt-property-decorator';
-import { Agents } from '~/plugins/api/home';
-import { Context } from '@nuxt/types/app';
+import { Vue, Component, State, Action } from 'nuxt-property-decorator';
+import { getFavoriteFromStorage, setFavoriteToStorage } from '~/assets/ts/storageConsultant';
+import { addFavoriteConsultant, Consultants } from '~/assets/ts/api/consultant';
+import { login, getFavoriteConsultant } from '~/assets/ts/api/consultant';
+import { isLogin } from '~/assets/ts/auth';
 
 @Component({
     layout: 'home'
 })
 export default class MainComponent extends Vue {
-    agents: Agents[] = [];
-    swiperAgents: Agents[] = [];
+    consultantList: Consultants[] = [];
+    agents: Consultants[] = [];
+    @State('recommendList') recommendList!: Consultants[];
+    @Action storeRecommendList!: any;
 
-    async asyncData(context: Context) {
-        let agents: Agents[] = [];
+    mounted() {
+        if (!this.recommendList) {
+            this.storeRecommendList();
+        }
 
-        await context.$service.home.recommendConsultantList().then((result: Agents[]) => {
-            agents = result;
-        })
+        if (isLogin()) {
+            this.addFavoriteFromStorageToApi();
+            getFavoriteConsultant().then((response) => this.consultantList = response.data);
+        } else {
+            this.consultantList = getFavoriteFromStorage();
+        }
+    }
 
-        const swiperAgents = JSON.parse(JSON.stringify(agents));
-
-        return {
-            agents,
-            swiperAgents
+    addFavoriteFromStorageToApi() {
+        const agentNoList = getFavoriteFromStorage().map(i => i.agentNo)
+        if (agentNoList.length > 0) {
+            addFavoriteConsultant(agentNoList).then(res => res);
+            localStorage.removeItem('favoriteConsultant');
         }
     }
 
@@ -63,11 +80,14 @@
         this.$router.push(path);
     }
 
-    removeAgent(agentId: number) {
-        const findIndex = this.agents.findIndex((item, i) => {
-            return item.id === agentId;
+    removeAgent(agentNo: string) {
+        const findIndex = this.consultantList.findIndex((item, i) => {
+            return item.agentNo === agentNo;
         })
-        this.agents.splice(findIndex, 1)
+        this.consultantList.splice(findIndex, 1);
+        if (!isLogin()) {
+            setFavoriteToStorage(this.consultantList)
+        }
     }
 }
 
@@ -75,63 +95,90 @@
 
 <style lang="scss" scoped>
 
-    .content {
-        padding: 0 20px;
+    .page-container {
+        padding: 0px 20px 30px 20px;
     }
 
-    .mb-20 {
-        margin: 0 0 20px 0;
-    }
-
-    .mt-32 {
-        margin-top: 32px;
-    }
-
-    .reserveConsultantBtn {
-        max-width: 340px;
+    .reserveBtn.el-button--default {
         width: 100%;
         height: 110px;
         border-radius: 10px;
-        box-shadow: 0px 0px 6px #22222229;
         margin: 0 auto 17px auto;
         font-size: 32px;
         font-weight: 700;
-        color: $PRIMARY_BLACK;
+        background-position: right;
+        background-size: cover;
+        color: #68737A;
+        text-align: left;
+        background-repeat: no-repeat;
+        box-shadow: 0px 0px 6px #a79b9b29;
+        border-width: 0;
+
+        p {
+            text-shadow: 1px 1px 5px $PRIMARY_WHITE;
+        }
 
         &:nth-child(3) {
             margin-bottom: 42px;
         }
+
     }
 
-    .reserveConsultantBtn+.reserveConsultantBtn {
+    .reserveBtn+.reserveBtn {
         margin-left: 0px;
     }
 
+    .quickFilter {
+        background-image: url('~/assets/images/quickFilter/banner_mob.svg');
+    }
+
+    .recommendConsultant {
+        background-image: url('~/assets/images/recommendConsultant/banner_mob.svg');
+    }
+
+    @media (min-width: 576px) and (max-width: 1023px) {
+        .quickFilter.el-button--default {
+            background-image: url('~/assets/images/quickFilter/banner_web.svg');
+        }
+
+        .recommendConsultant.el-button--default {
+            background-image: url('~/assets/images/recommendConsultant/banner_web.svg');
+        }
+    }
+
     .rowStyle {
-        display: flex;
-        justify-content: space-between;
-        .flex {
-            display: flex;
-            .amount {
-                color: $PRUDENTIAL_GREY;
-                margin-left: 10px;
-                align-self: center;
-            }
+        .amount {
+            color: $PRUDENTIAL_GREY;
         }
         .readMore {
             color: $PRIMARY_RED;
             cursor: pointer;
+            text-align: right;
         }
     }
 
     @include desktop {
-        .content{
+        .page-container {
             width: 700px;
             margin: 0 auto;
         }
 
-        .reserveConsultantBtn:nth-child(2) {
-            margin-right: 15px;
+        .reserveBtn {
+            max-width: 340px;
+
+            &:nth-child(2) {
+                margin-right: 15px;
+            }
+        }
+    }
+
+    .pam-recommend {
+        position: relative;
+
+        .img {
+            position: absolute;
+            right: 20px;
+            bottom: 0px;
         }
     }
 

--
Gitblit v1.8.0