From ca96eb6477c35a96f74382850daa93ead30835d2 Mon Sep 17 00:00:00 2001
From: Mila <Mila@pollex.com.tw>
Date: 星期二, 25 一月 2022 14:34:57 +0800
Subject: [PATCH] update: TODO#134659 通知 - 全部已讀 api 串接

---
 PAMapp/components/NavBar.vue |   67 +++++++++++++++++++++++++++++++--
 1 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/PAMapp/components/NavBar.vue b/PAMapp/components/NavBar.vue
index 3754bfb..75290c0 100644
--- a/PAMapp/components/NavBar.vue
+++ b/PAMapp/components/NavBar.vue
@@ -8,10 +8,13 @@
     </div>
     <div class="pam-header__action-bar">
       <i
-        v-if="currentRole"
-        class="icon-bell text--dark-blue cursor--pointer fix-chrome-click--issue"
+        v-if="isShowNotification"
+        class="icon-bell text--dark-blue cursor--pointer"
         @click="$router.push('/notification')"
-      ></i>
+      >
+        <span :class="{'newNotification': isNewNotification}"></span>
+      </i>
+
         <el-dropdown :class="{'is-open':isOpenDropdown}"
           ref="dropdown"
           trigger="click"
@@ -49,9 +52,11 @@
 
 <script lang="ts">
   import { Vue, Component } from 'vue-property-decorator';
-  import { namespace } from 'nuxt-property-decorator';
+  import { Action, namespace, State, Watch } from 'nuxt-property-decorator';
   import { Role } from '~/shared/models/enum/Role';
   import * as _ from 'lodash';
+  import { NotificationList } from '~/shared/models/reviews.model';
+  import { AppointmentLog } from '~/shared/models/appointment.model';
 
   const roleStorage = namespace('localStorage');
   @Component
@@ -71,6 +76,21 @@
 
     @roleStorage.Getter
     isAdminLogin!: boolean;
+
+    @roleStorage.Getter
+    isUserLogin!: boolean;
+
+    @Action
+    storeMyPersonalNotification!: () => void;
+
+    @State
+    notificationList!: NotificationList[];
+
+    @Action
+    storeMyAppointmentReviewLog!: () => void;
+
+    @State
+    unReviewLogList!: AppointmentLog[];
 
     isOpenDropdown = false;
 
@@ -123,6 +143,16 @@
 
     //////////////////////////////////////////////////////////////////////
 
+    @Watch('$route', {immediate: true})
+    onRouterChange() {
+        if (this.currentRole) {
+          this.storeMyPersonalNotification();
+          this.storeMyAppointmentReviewLog();
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
     routerNavigateTo(url: string): void {
       (this.$refs.dropdown as any).hide();
       _.isEqual(url,'')
@@ -142,6 +172,21 @@
 
     get loginRole(): Role {
       return this.idToken && this.currentRole ? (this.currentRole as Role): Role.NOT_LOGIN;
+    }
+
+    get isShowNotification() {
+      if (this.isUserLogin) {
+        return this.notificationList.length || this.unReviewLogList.length;
+      }
+      if (this.isAdminLogin) {
+        return this.notificationList.length
+      }
+    }
+
+    get isNewNotification() {
+      if (this.currentRole) {
+        return this.notificationList.filter(item => !item.readDate).length;
+      }
     }
 
   }
@@ -209,6 +254,7 @@
 
       i {
         padding: 0px 15px;
+        @extend .fix-chrome-click--issue;
 
         @media screen and (max-width: 352px) {
           padding: 0px 10px;
@@ -221,6 +267,19 @@
           margin: 0px 10px;
         }
       }
+
+      .icon-bell {
+        position: relative;
+        .newNotification {
+          position: absolute;
+          width: 10px;
+          height: 10px;
+          top: 0;
+          right: 15px;
+          border-radius: 50px;
+          background: $PRIMARY_RED;
+        }
+      }
     }
   }
 

--
Gitblit v1.8.0