123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- <template>
- <!-- #ifdef APP -->
- <scroll-view style="flex: 1;" enable-back-to-top="true">
- <!-- #endif -->
- <view class="uni-container" :class="isDarkMode ? 'theme-dark' : 'theme-light'">
- <view v-if="!hasLeftWin" class="uni-header-logo">
- <image class="uni-header-image" src="/static/templateIndex.png"></image>
- </view>
- <view v-if="!hasLeftWin" class="uni-text-box">
- <text class="hello-text">以下是部分模板示例,更多模板见插件市场:</text>
- <u-link href="https://ext.dcloud.net.cn" :text="'https://ext.dcloud.net.cn'" :inWhiteList="true"></u-link>
- </view>
- <view class="uni-panel" v-for="(item, index) in list" :key="item.id">
- <view hover-class="is--active" class="uni-panel-h" @click="triggerCollapse(index, item)">
- <text class="uni-panel-text"
- :class="item.enable == false || item.open == true ? 'text-disabled' : '',item.url == leftWinActive && item.pages.length == 0 ? 'left-win-active' : ''">{{ item.name }}</text>
- <image :src="
- item.pages.length > 0
- ? item.open
- ? arrowUpIcon
- : arrowDownIcon
- : arrowRightIcon
- " class="uni-icon-size">
- </image>
- </view>
- <view v-if="item.open">
- <view style="padding-left: 18px;" class="uni-navigate-item"
- :hover-class="page.enable == false ? '' : 'is--active'" v-for="(page, key) in item.pages" :key="key"
- @click="goDetailPage(page)">
- <text class="uni-navigate-text"
- :class="{'left-win-active': leftWinActive === page.url && hasLeftWin,'text-disabled' : page.enable == false}">{{ page.name }}</text>
- <image :src="arrowRightIcon" class="uni-icon-size"></image>
- </view>
- </view>
- </view>
- </view>
- <!-- #ifdef APP -->
- </scroll-view>
- <!-- #endif -->
- </template>
- <script lang="uts">
- type Page = {
- name : string
- enable ?: boolean
- url : string
- }
- type ListItem = {
- id : string
- name : string
- open : boolean
- pages : Page[]
- url ?: string
- enable ?: boolean
- }
- import { state } from '@/store/index.uts'
- export default {
- data() {
- return {
- list: [
- {
- id: 'slider-100',
- url: 'slider-100',
- name: 'slider-100',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'long-list',
- url: 'long-list',
- name: '左右滑动长列表',
- open: false,
- enable: true,
- pages: [
- // #ifdef WEB
- {
- name: '顶部banner长列表(嵌套滚动)',
- url: 'long-list2'
- },
- // #endif
- // #ifdef APP
- {
- name: '顶部banner长列表(嵌套滚动)',
- url: 'long-list-nested'
- },
- // #endif
- // #ifdef APP-IOS || APP-ANDROID
- {
- name: '顶部banner瀑布流长列表(嵌套滚动)',
- url: 'long-waterflow-nested'
- },
- // #endif
- {
- name: 'Android顶部搜索框随时下移长列表',
- url: 'long-list'
- }
- ] as Page[],
- },
- {
- id: 'list-news',
- url: 'list-news',
- name: '列表到详情(吸顶)',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'long-list-batch',
- url: 'long-list-batch',
- name: '分批加载长列表',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'swiper-list',
- url: 'swiper-list',
- name: 'swiper-list',
- open: false,
- pages: [
- {
- name: '下划线样式',
- url: 'swiper-list'
- },
- {
- name: '字体放大样式',
- url: 'swiper-list2'
- },
- ] as Page[],
- },
- {
- id: 'scroll-fold-nav',
- url: 'scroll-fold-nav',
- name: '随滚动折叠的导航栏',
- open: false,
- pages: [] as Page[],
- },
- // #ifdef APP
- {
- id: 'custom-refresher',
- url: 'custom-refresher',
- name: '自定义下拉刷新',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'pull-zoom-image',
- url: 'pull-zoom-image',
- name: '下拉缩放顶部封面图',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'scroll-sticky',
- url: 'scroll-sticky',
- name: 'scroll-view自定义滚动吸顶',
- open: false,
- pages: [] as Page[],
- },
- // #endif
- {
- id: 'swiper-vertical-video',
- url: 'swiper-vertical-video',
- name: '竖滑视频',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'half-screen',
- url: 'half-screen',
- name: '半屏弹窗',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'drop-card',
- url: 'drop-card',
- name: '划走式卡片',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'navbar-lite',
- url: 'navbar-lite',
- name: '自定义导航栏',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'custom-tab-bar',
- url: 'custom-tab-bar',
- name: '自定义TabBar',
- open: false,
- enable: true,
- pages: [] as Page[],
- },
- // #ifdef APP
- {
- id: 'calendar',
- url: 'calendar',
- name: '日历',
- open: false,
- pages: [] as Page[],
- },
- // #endif
- // #ifdef APP || WEB
- {
- id: 'schema',
- url: 'schema',
- name: '打开外部链接',
- open: false,
- pages: [] as Page[],
- },
- // #endif
- // #ifdef WEB
- {
- id: 'browser-element',
- url: 'browser-element',
- name: '如何使用浏览器 element',
- open: false,
- pages: [] as Page[],
- },
- // #endif
- // #ifdef MP
- {
- id: 'vant',
- url: 'vant',
- name: '微信自定义组件示例',
- open: false,
- pages: [] as Page[],
- },
- {
- id: 'WXS',
- url: 'WXS',
- name: 'WXS',
- open: false,
- pages: [] as Page[],
- },
- // #endif
- ] as ListItem[],
- arrowUpIcon: '/static/icons/arrow-up.png',
- arrowDownIcon: '/static/icons/arrow-down.png',
- arrowRightIcon: '/static/icons/arrow-right.png'
- }
- },
- computed: {
- hasLeftWin() : boolean {
- return !state.noMatchLeftWindow
- },
- leftWinActive() : string {
- return state.leftWinActive.split('/')[3]
- },
- isDarkMode() : boolean {
- return state.isDarkMode
- },
- netless() : boolean {
- return state.netless
- }
- },
- // #ifdef APP-HARMONY
- watch: {
- 'netless': {
- immediate: true,
- handler(netless) {
- if (netless) {
- this.list = this.list.filter(item => {
- return !['list-news'].includes(item.id)
- })
- }
- }
- }
- },
- // #endif
- methods: {
- triggerCollapse(index : number, item : ListItem) {
- if (item.pages.length == 0) {
- const page : Page = {
- name: item.name,
- enable: item.enable,
- url: item.url!,
- }
- this.goDetailPage(page)
- return
- }
- for (var i = 0; i < this.list.length; ++i) {
- if (index == i) {
- this.list[i].open = !this.list[i].open
- } else {
- this.list[i].open = false
- }
- }
- },
- goDetailPage(e : Page) {
- if (e.enable == false) {
- uni.showToast({
- icon: 'none',
- title: '暂不支持',
- })
- return
- }
- const url =
- e.url.indexOf('platform') > -1
- ? e.url
- : `/pages/template/${e.url}/${e.url}`
- if (this.hasLeftWin) {
- uni.reLaunch({ url })
- } else {
- uni.navigateTo({ url })
- }
- }
- },
- // #ifdef WEB
- watch: {
- $route: {
- immediate: true,
- handler(newRoute) {
- if (newRoute.matched.length) {
- let path = newRoute.path.split('/')[3]
- for (const item of this.list) {
- if (Array.isArray(item.pages)) {
- for (const page of item.pages) {
- if (page.url && page.url === path) {
- item.open = true
- }
- }
- }
- }
- }
- }
- }
- },
- // #endif
- }
- </script>
- <style>
- .uni-panel-h {
- padding: 12px 18px;
- }
- </style>
|