<template>
  <view class="shortcut" :style="{ right: right, bottom: bottom }">

    <!-- 首页 -->
    <view class="nav-item" :class="[isShow ? 'show_60' : (transparent ? '' : 'hide_60')]" @click="onTargetPage(0)">
      <text class="iconfont icon-home"></text>
    </view>
    
    <!-- 个人中心 -->
    <view class="nav-item" :class="[isShow ? 'show_40' : (transparent ? '' : 'hide_40')]" @click="onTargetPage(3)">
      <text class="iconfont icon-profile"></text>
    </view>
    
    <!-- 商家中心 -->
    <view class="nav-item" :class="[isShow ? 'show_20' : (transparent ? '' : 'hide_20')]" @click="onMerchantPage()">
      <text class="iconfont icon-dianpu"></text>
    </view>

    <!-- 显示隐藏开关 -->
    <view class="nav-item nav-item__switch" :class="{ shortcut_click_show: isShow }" @click="onToggleShow()">
      <text class='iconfont icon-daohang'></text>
    </view>

  </view>
</template>

<script>
  import { getTabBarLinks } from '@/utils/app'
  export default {

    /**
     * 组件的属性列表
     * 用于组件自定义设置
     */
    props: {
      right: {
        type: String,
        default: '30rpx'
      },
      bottom: {
        type: String,
        default: '200rpx'
      }
    },

    data() {
      return {
        // 弹窗显示控制
        isShow: false,
        transparent: true
      }
    },

    methods: {

      /**
       * 导航菜单切换事件
       */
      onToggleShow() {
        const app = this
        app.isShow = !app.isShow
        app.transparent = false
      },

      /**
       * 导航页面跳转
       */
      onTargetPage(index = 0) {
        const tabLinks = getTabBarLinks()
        this.$navTo(tabLinks[index])
      },
      onMerchantPage() { 
        this.$navTo('pages/merchant/index')
      }
    }
  }
</script>

<style lang="scss" scoped>
  /* 快捷导航 */
  .shortcut {
    position: fixed;
    right: 24rpx;
    bottom: 250rpx;
    width: 76rpx;
    line-height: 1;
    z-index: 5;
    border-radius: 50%;
  }

  /* 导航菜单元素 */
  .nav-item {
    position: absolute;
    bottom: 0;
    padding: 0;
    width: 76rpx;
    height: 76rpx;
    line-height: 76rpx;
    color: #fff;
    background: rgba(0, 0, 0, 0.4);
    border-radius: 50%;
    text-align: center;
    transform: rotate(0deg);
    opacity: 0;
  }

  .nav-item .iconfont {
    font-size: 40rpx;
  }

  /* 导航开关 */
  .nav-item__switch {
    opacity: 1;
  }

  .shortcut_click_show {
    margin-bottom: 0;
    background: #ff5454;
  }

  /* 显示动画 */
  .show_80 {
    bottom: 384rpx;
    animation: show_80 0.3s forwards;
  }

  .show_60 {
    bottom: 288rpx;
    animation: show_60 0.3s forwards;
  }

  .show_40 {
    bottom: 192rpx;
    animation: show_40 0.3s forwards;
  }

  .show_20 {
    bottom: 96rpx;
    animation: show_20 0.3s forwards;
  }

  @keyframes show_20 {
    from {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }

    to {
      bottom: 96rpx;
      transform: rotate(360deg);
      opacity: 1;
    }
  }

  @keyframes show_40 {
    from {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }

    to {
      bottom: 192rpx;
      transform: rotate(360deg);
      opacity: 1;
    }
  }

  @keyframes show_60 {
    from {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }

    to {
      bottom: 288rpx;
      transform: rotate(360deg);
      opacity: 1;
    }
  }

  @keyframes show_80 {
    from {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }

    to {
      bottom: 384rpx;
      transform: rotate(360deg);
      opacity: 1;
    }
  }

  /* 隐藏动画 */

  .hide_80 {
    bottom: 0;
    animation: hide_80 0.3s;
    opacity: 0;
  }

  .hide_60 {
    bottom: 0;
    animation: hide_60 0.3s;
    opacity: 0;
  }

  .hide_40 {
    bottom: 0;
    animation: hide_40 0.3s;
    opacity: 0;
  }

  .hide_20 {
    bottom: 0;
    animation: hide_20 0.3s;
    opacity: 0;
  }

  @keyframes hide_20 {
    from {
      bottom: 96rpx;
      transform: rotate(360deg);
      opacity: 1;
    }

    to {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }
  }

  @keyframes hide_40 {
    from {
      bottom: 192rpx;
      transform: rotate(360deg);
      opacity: 1;
    }

    to {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }
  }

  @keyframes hide_60 {
    from {
      bottom: 288rpx;
      transform: rotate(360deg);
      opacity: 1;
    }

    to {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }
  }

  @keyframes hide_80 {
    from {
      bottom: 384rpx;
      transform: rotate(360deg);
      opacity: 1;
    }

    to {
      bottom: 0;
      transform: rotate(0deg);
      opacity: 0;
    }
  }
</style>