景徳镇旅游微信小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

169 lines
2.9 KiB

<template>
<uv-popup ref="popup" :round="30" :customStyle="{height: '60vh'}">
<view class="content">
<view class="btn"
@click="select({spotName : 'all'})">
全部
</view>
<uv-vtabs
:chain="chain"
:list="areaList"
keyName="areaName"
:barItemBadgeStyle="{right:'20px',top:'12px'}"
@change="change">
<uv-vtabs-item>
<view class="category-title">
遗产点
</view>
<view class="list">
<view class="item" v-for="(item,index) in list" :key="index"
@click="select(item)">
<view class="item-image">
<image
:src="item.spotImage"
mode="aspectFill"></image>
</view>
<view class="item-unit">
<text class="text">{{item.spotName}}</text>
</view>
</view>
</view>
</uv-vtabs-item>
</uv-vtabs>
</view>
</uv-popup>
</template>
<script>
import { mapState, mapGetters } from 'vuex'
export default {
data() {
return {
chain: false,
areaList : [],
areaIndex: 0,
}
},
computed: {
list(){
return this.spotList.filter(n => {
if(0 != n.categoryId){
return false
}
if(!this.areaList[this.areaIndex]){
return false
}
if(this.areaList[this.areaIndex].id != n.areaId){
return false
}
return true
})
},
...mapState(['spotList']),
},
created() {
this.queryAreaList()
},
methods: {
change(index) {
this.areaIndex = index;
},
open(){
this.$refs.popup.open('bottom');
},
select(e){
this.$emit('select', e)
this.$refs.popup.close();
},
queryAreaList(){
this.$api('queryAreaList', res => {
if(res.code == 200){
this.areaList = res.result.records
}
})
},
}
}
</script>
<style scoped lang="scss">
.content{
/deep/ .uv-vtabs{
height: 60vh !important;
}
/deep/ .uv-vtabs__bar{
height: 60vh !important;
}
/deep/ .uv-vtabs__content{
height: 60vh !important;
}
.btn{
display: flex;
justify-content: center;
align-items: center;
padding: 30rpx;
border-bottom: 1px solid #00000022;
}
.category-title{
position: relative;
display: flex;
justify-content: center;
align-items: center;
height: 120rpx;
&::before,
&::after {
position: absolute;
top: 50%;
content: '';
width: 10%;
border-top: 2rpx solid black;
}
&::before {
left: 25%;
}
&::after {
right: 25%;
}
}
.list{
display: flex;
flex-wrap: wrap;
margin: 0 auto;
width: 490rpx;
.item {
padding: 10rpx 20rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-bottom: 20rpx;
.item-image {
width: 120rpx;
height: 120rpx;
image{
height: 100%;
width: 100%;
border-radius: 50%;
}
}
.item-unit {
font-size: 24rpx;
margin-top: 15rpx;
color: #555;
}
}
.gap {
padding: 0 30rpx;
}
}
}
</style>