component.uvue 4.6 KB
Newer Older
1 2
<template>
  <!-- #ifdef APP -->
3
  <scroll-view style="flex: 1; background-color: #f8f8f8" enable-back-to-top="true">
4 5
  <!-- #endif -->
    <view class="uni-container">
6
      <view v-if="!hasLeftWin" class="uni-header-logo">
7 8
        <image class="uni-header-image" src="/static/componentIndex.png"></image>
      </view>
9
      <view v-if="!hasLeftWin" class="uni-text-box">
10 11 12 13
        <text class="hello-text">uni-app内置组件,展示样式仅供参考,文档详见:</text>
        <u-link :href="'https://uniapp.dcloud.io/uni-app-x/component/'"
          :text="'https://uniapp.dcloud.io/uni-app-x/component/'" :inWhiteList="true"></u-link>
      </view>
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
      <uni-collapse>
        <uni-collapse-item ref="category" v-for="menuItem in menu" :key="menuItem!.id" :title="menuItem.name"
          class="item">
          <view style='padding-left:18px;' v-for="page in menuItem.pages" :key="page!.path" class="uni-navigate-item"
            hover-class="is--active" @click="goPage(`/${page.path}`)">
            <text class="uni-navigate-text" :class="{'left-win-active': leftWinActive === page.path && hasLeftWin}">{{
                page.style["navigationBarTitleText"]
              }}</text>
            <image :src="arrowRightIcon" class="uni-icon-size"></image>
          </view>
          <uni-collapse style="width: 100%" v-for="childMenu in menuItem.children" :key="childMenu!.id">
            <uni-collapse-item :title="childMenu.name" class="item"
              style="margin-bottom: 0;padding-left: 5px;padding-right: 5px;">
              <view style='padding-left: 18px;' class="uni-navigate-item" hover-class="is--active"
                v-for="childPage in childMenu.pages" :key="childPage!.path" @click="goPage(`/${childPage.path}`)">
                <text class="uni-navigate-text"
                  :class="{'left-win-active': leftWinActive === childPage.path && hasLeftWin}">{{
                    childPage.style["navigationBarTitleText"]
                  }}</text>
                <image :src="arrowRightIcon" class="uni-icon-size"></image>
              </view>
            </uni-collapse-item>
          </uni-collapse>
        </uni-collapse-item>
38 39
      </uni-collapse>

40
      <!-- #ifdef UNI-APP-X && APP -->
41 42 43 44 45 46 47 48 49
      <uni-upgrade-center-app ref="upgradePopup" @show="upgradePopupShow" @close="upgradePopupClose" />
      <!-- #endif -->
    </view>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script lang="uts">
50 51 52
  import { generateMenu } from './generateMenu.uts'
  import { MenuItem } from './generateMenu.uts'
  const menu = generateMenu('pages/component')
53
  // #ifdef UNI-APP-X && APP
54 55
  import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update'
  // #endif
56
  import { state } from '@/store/index.uts'
57 58 59
  export default {
    data() {
      return {
60
        menu: menu as (MenuItem | null)[],
61 62 63
        arrowRightIcon: '/static/icons/arrow-right.png' as string.ImageURIString,
        pageHiden: false
      }
64 65 66 67 68 69 70 71 72
    },
    computed: {
      hasLeftWin() : boolean {
        return !state.noMatchLeftWindow
      },
      leftWinActive() : string {
        return state.leftWinActive.slice(1)
      }
    },
73
    methods: {
74 75 76
      goPage(url : string) {
        uni.navigateTo({ url })
      },
77
      // #ifdef UNI-APP-X && APP
78
      upgradePopupShow() {
79 80 81 82 83 84 85 86 87 88
        console.log('upgradePopup show');
        if (!this.pageHiden) {
          uni.hideTabBar()?.catch(_ => { })
        }
      }
      , upgradePopupClose() {
        console.log('upgradePopup close');
        uni.showTabBar()?.catch(_ => { })
      }
      // #endif
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
    },
    // #ifdef WEB
    watch: {
      $route: {
        immediate: true,
        handler(newRoute) {
          if (newRoute.matched.length) {
            const activeCategoryIndex = this.menu.findIndex(menuItem => menuItem?.pages.some(page => this.leftWinActive && this.leftWinActive === page?.path))
            if (activeCategoryIndex > -1) {
              this.$nextTick(() => {
                ((this.$refs.category as ComponentPublicInstance[])[activeCategoryIndex])?.$callMethod('openCollapse', true)
              })
            }
          }
        }
      }
    },
106
    // #endif
107
    onReady() {
108
      // #ifdef UNI-APP-X && APP
109 110
      checkUpdate(this.$refs['upgradePopup'] as UniUpgradeCenterAppComponentPublicInstance)
      // #endif
111
    },
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
    onShow() {
      this.pageHiden = false
    },
    onHide() {
      this.pageHiden = true
    },
    beforeUnmount() {
      uni.showTabBar()?.catch(_ => { })
    }
  }
</script>

<style>
  .item {
    margin-bottom: 12px;
  }
128
</style>