From 338b53c9ed0571319a397873b409f45cb8e4202f Mon Sep 17 00:00:00 2001 From: 劉鈞霖 <benson@gmail.com> Date: 星期五, 19 十一月 2021 15:24:05 +0800 Subject: [PATCH] [ Update ] : 1.nav bar 下拉選單UI 微調,將localStorage存入store 監聽角色來去改變下拉選單對應項目 2. 顧問登入layout 更改 3.layout page 新增淡入特效 , --- PAMapp/components/NavBar.vue | 155 +++++++++++++++++++++++++++++++-------------------- 1 files changed, 95 insertions(+), 60 deletions(-) diff --git a/PAMapp/components/NavBar.vue b/PAMapp/components/NavBar.vue index d0a7d46..4dc5d23 100644 --- a/PAMapp/components/NavBar.vue +++ b/PAMapp/components/NavBar.vue @@ -1,93 +1,104 @@ <template> <header class="pam-header"> - <div class="pam-header__logo" @click="$router.push('/')"></div> + <div class="pam-header__logo" + @click="pushRouterByLoginRole"></div> <div class="pam-header__title"> <div class="pam-header__title--main">���兢蝳��蜓</div> <div class="pam-header__title--sub">�����兢蝳�風��</div> </div> - <div class="pam-header__action-bar" style="position:relaitive"> + <div class="pam-header__action-bar"> <i class="icon-bell text--dark-blue cursor--pointer fix-chrome-click--issue" @click="$router.push('/notification')"></i> - <el-dropdown> - <i class="icon-avatar text--dark-blue cursor--pointer fix-chrome-click--issue"></i> - <el-dropdown-menu slot="dropdown" - class="pam-header__dropdown"> - <template v-for="(navbarItem,index) in navBarList"> - <li class="pam-header__dropdown-item fix-chrome-click--issue " - :class="{'pam-header__dropdown-divider':navbarItem.title === '憿批��'}" - v-if="navbarItem.needRole.includes(loginRole)" - :key="index" - @click="linkTo(navbarItem.link)"> - {{navbarItem.title}} - </li> - </template> - </el-dropdown-menu> - </el-dropdown> + <el-dropdown :class="{'is-open':isOpenDropdown}" + ref="dropdown" + trigger="click" + @command="routerNavigateTo"> + <i class="icon-avatar text--dark-blue cursor--pointer fix-chrome-click--issue" @click="isOpenDropdown =!isOpenDropdown" ></i> + <el-dropdown-menu + class="pam-header__dropdown"> + <template v-for="(item,index) in navBarList"> + <el-dropdown-item :key="index" + v-if="item.authorityOfRoleList.includes(loginRole)" + class="fix-chrome-click--issue" + :class="{'pam-header__dropdown-divider':item.title === '憿批��'}" + :command="item.routeUrl"> + {{item.title}} + </el-dropdown-item> + </template> + </el-dropdown-menu> + </el-dropdown> </div> </header> </template> <script lang="ts"> import { Vue, Component } from 'vue-property-decorator'; + import { namespace } from 'nuxt-property-decorator'; import * as _ from 'lodash'; + const localStorage = namespace('localStorage'); @Component export default class NavBar extends Vue { + @localStorage.Mutation storageClear!: () => void; + @localStorage.Getter idToken!: string | null; + @localStorage.Getter currentRole!: string | null; + navBarList = [{ - needRole: [Role.NOT_LOGIN], - link: '/login', + authorityOfRoleList: [Role.NOT_LOGIN], + routeUrl: '/login', title: '��', }, { - needRole: [Role.USER], - link: '/accountSetting', + authorityOfRoleList: [Role.USER], + routeUrl: '/accountSetting', title: '�犖撣唾�身摰�', }, { - needRole: [Role.ADMIN], - link: '/notFinish', + authorityOfRoleList: [Role.ADMIN], + routeUrl: '/notFinish', title: '���董�����', }, { - needRole: [Role.USER, Role.ADMIN], - link: '/record/contactRecord', + authorityOfRoleList: [Role.USER, Role.ADMIN], + routeUrl: '/record/contactRecord', title: '�������', }, { - needRole: [Role.NOT_LOGIN, Role.USER], - link: '/myConsultantList/consultantList', + authorityOfRoleList: [Role.NOT_LOGIN, Role.USER], + routeUrl: '/myConsultantList/consultantList', title: '���“���', }, { - needRole: [Role.USER, Role.ADMIN], - link: '', + authorityOfRoleList: [Role.USER, Role.ADMIN], + routeUrl: '', title: '��', }, { - needRole: [Role.NOT_LOGIN], - link: '/consultantLogin', + authorityOfRoleList: [Role.NOT_LOGIN], + routeUrl: '/consultantLogin', title: '憿批��', }, ]; - get idToken(): string | null { - return localStorage.getItem('id_token'); - } - get roleOfState(): string | null { - return localStorage.getItem('roleOfState'); - } + login_role = Role.NOT_LOGIN; + isOpenDropdown = false; + get loginRole(): string { - return this.roleOfState && this.idToken ? this.roleOfState : Role.NOT_LOGIN; + return this.idToken && this.currentRole ? this.currentRole : Role.NOT_LOGIN; } - linkTo(routerLink: string): void { - _.isEqual(routerLink, '') ? this.fakeLogout() : this.$router.push(routerLink); + routerNavigateTo(url: string): void { + this.isOpenDropdown = !this.isOpenDropdown; + (this.$refs.dropdown as any).hide(); + _.isEqual(url, '') ? this.fakeLogout() : this.$router.push(url); } - + pushRouterByLoginRole(): void { + const link = _.isEqual(this.currentRole, Role.ADMIN) ? '/myAppointmentList/appointmentList' : '/'; + this.$router.push(link); + } // TODO: ��TP隤����� ���蝙� fakeLogout(): void { - localStorage.clear(); - // this.$router.go(0); - window.location.href = '/' + this.storageClear(); + _.isEqual(this.$route.name, 'index') ? location.reload() : this.$router.push('/'); } } export enum Role { @@ -114,26 +125,30 @@ width: 115px; margin: 0 10px; background-image: url('~/assets/images/taiwan-logo.png'); - background-repeat:no-repeat; + background-repeat: no-repeat; background-size: contain; background-position: center; } + .pam-header__title { flex: 1; flex-basis: 160px; - border-left:1px #CCCCCC solid; - padding-left:10px; - .pam-header__title--main { - font-size: 16px; - font-weight: bold; - color: $PRUDENTIAL_GREY; - letter-spacing:0.8px; - @media screen and (max-width: 352px) { - font-size: 12px; - } + border-left: 1px #CCCCCC solid; + padding-left: 10px; + + .pam-header__title--main { + font-size: 16px; + font-weight: bold; + color: $PRUDENTIAL_GREY; + letter-spacing: 0.8px; + + @media screen and (max-width: 352px) { + font-size: 12px; } - .pam-header__title--sub { - padding-top: 2px; + } + + .pam-header__title--sub { + padding-top: 2px; font-size: 12px; transform: scale(0.9); -webkit-transform-origin-x: 0; @@ -145,13 +160,17 @@ .pam-header__action-bar { + position: relative; display: flex; + height: 100%; font-size: 24px; font-weight: bold; + align-items: center; justify-content: space-around; i { padding: 0px 15px; + @media screen and (max-width: 352px) { padding: 0px 10px; } @@ -159,29 +178,45 @@ } } + .el-dropdown{ + height: 100%; + display: flex; + align-items: center; + &.is-open { + background-color: $PEACH; + i { + color: $PRIMARY_WHITE; + } + } + } + @include desktop { .pam-header { height: $DESKTOP_NAV_BAR; + .pam-header__logo { width: 180px; height: 100%; margin: 0; background-image: url('~/assets/images/logo.png'); background-size: cover; - background-repeat:no-repeat; + background-repeat: no-repeat; background-position: center; } + .pam-header__title { display: flex; justify-content: start; align-items: center; border: none; padding-left: 30px; - .pam-header__title--main{ + + .pam-header__title--main { font-size: 30px; letter-spacing: 1.5px; } - .pam-header__title--sub{ + + .pam-header__title--sub { font-size: 20px; letter-spacing: 2px; transform: none; -- Gitblit v1.8.0