index.vue 3.19 KB
<template>
  <view class="my-page">
    <view v-for="(item, index) in menu_list" :key="index" class="my-item" @tap="on_menu_tap(item)">
      <view class="left">
        <image :src="item.icon" style="width: 38rpx; height: 38rpx; margin-right: 16rpx" />
        {{ item.name }}
      </view>
      <view>
        <IconFont name="rect-right" size="38rpx" />
      </view>
    </view>
    <indexNav
      :icons="nav_icons"
      active="me"
      position="fixed"
      center_variant="raised"
      @select="on_nav_select"
    />
  </view>
</template>

<script setup>
import { ref } from 'vue'
import Taro from '@tarojs/taro'
import { useGo } from '@/hooks/useGo'
import { showInfo, showConfirm } from '@/utils/toast'
import { IconFont } from '@nutui/icons-vue-taro'
import indexNav from '@/components/indexNav.vue'
import icon_3 from '@/assets/images/首页01@2x.png'
import icon_4 from '@/assets/images/二维码icon.png'
import icon_5 from '@/assets/images/我的02@2x.png'
import { has_offline_booking_cache } from '@/composables/useOfflineBookingCache'
import { is_usable_network, get_network_type } from '@/utils/network'

import icon_booking from '@/assets/images/预约记录@2x.png'
import icon_visitor from '@/assets/images/我的01@2x.png'
import icon_invite from '@/assets/images/二维码@2x2.png'
import {
  weak_network_text,
  get_weak_network_modal_go_offline_records_options
} from '@/utils/uiText'

const go = useGo()

const on_menu_tap = async item => {
  if (!item?.to) {
    return
  }

  if (item.to === '/pages/bookingList/index') {
    const network_type = await get_network_type()
    const is_weak_network = !is_usable_network(network_type)
    if (is_weak_network) {
      if (has_offline_booking_cache()) {
        const modal_res = await showConfirm(
          get_weak_network_modal_go_offline_records_options().content,
          get_weak_network_modal_go_offline_records_options().title
        )
        if (modal_res?.confirm) {
          go('/pages/offlineBookingList/index')
        }
        return
      }
      showInfo(weak_network_text.toast_title, 2000)
      return
    }
  }

  go(item.to)
}

const toCode = () => {
  // 跳转到预约码
  Taro.redirectTo({
    url: '/pages/bookingCode/index'
  })
}
const toHome = () => {
  // 跳转到首页
  Taro.redirectTo({
    url: '/pages/index/index'
  })
}

const nav_icons = { home: icon_3, code: icon_4, me: icon_5 }

const on_nav_select = key => {
  if (key === 'home') {
    return toHome()
  }
  if (key === 'code') {
    return toCode()
  }
}

const menu_list = [
  {
    icon: icon_booking,
    name: '预约记录',
    to: '/pages/bookingList/index'
  },
  {
    icon: icon_visitor,
    name: '参观者',
    to: '/pages/visitorList/index'
  },
  {
    icon: icon_invite,
    name: '邀请码',
    to: '/pages/search/index'
  }
]
</script>

<style lang="less">
.my-page {
  position: relative;
  min-height: 100vh;
  background-color: #f6f6f6;
  padding: 32rpx;

  .my-item {
    padding: 32rpx;
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 32rpx;
    background-color: #fff;
    border-radius: 10rpx;
    .left {
      color: #a67939;
      display: flex;
      align-items: center;
    }
  }
}
</style>