<template>
|
|
<view class="page">
|
|
<view class="head-box"></view>
|
|
<uv-navbar :title="navTitle" leftIcon=" " :titleStyle="{color:'#fff'}" :bgColor="bgColor" height="100rpx"></uv-navbar>
|
|
<view class="content">
|
|
<view class="search-box">
|
|
<view class="search-box-l"
|
|
@click="$refs.popup.open()">
|
|
<image class="address-img" src="@/static/image/home/address-icon.png" mode="widthFix"></image>
|
|
<view>{{ selectArea.city }}</view>
|
|
<image class="sjx-img" src="@/static/image/home/sjx-icon.png" mode="widthFix"></image>
|
|
</view>
|
|
<view class="search-box-r">
|
|
<uv-search @search="search" placeholder="搜索相关内容" v-model="params.title" shape="square" :showAction="false" color="#fff" placeholderColor="#BDABAC" :clearabled="false" searchIconColor="#fff" searchIconSize="50rpx" bgColor="#4A2A2B" height="63rpx"></uv-search>
|
|
</view>
|
|
</view>
|
|
<view class="swipe-box">
|
|
<uv-swiper :list="list" keyName="image" height="336rpx" radius="30rpx" bgColor="transparent" indicator indicatorMode="dot"></uv-swiper>
|
|
</view>
|
|
|
|
<view class="ydsk-box">
|
|
<view class="ydsk-box-title">悦动时刻</view>
|
|
<view class="ydsk-box-gird">
|
|
<view class="gird-l" @click="skip('')">
|
|
<view class="left-box">
|
|
<view class="title-box">
|
|
<view>活动签到</view>
|
|
<view>签到有好礼</view>
|
|
</view>
|
|
<view class="btn-box">立即查看</view>
|
|
</view>
|
|
<image class="hdqd-img" :src="configList.index_sign" mode="widthFix"></image>
|
|
<!-- <image class="hdqd-img" src="@/static/image/home/hdqd-img.png" mode="widthFix"></image> -->
|
|
</view>
|
|
<view class="gird-r">
|
|
<view class="hd-box" @click="skip('activeList')">
|
|
<view class="left-box">
|
|
<view class="title-box">
|
|
活动
|
|
</view>
|
|
<view class="btn-box">立即查看</view>
|
|
</view>
|
|
<image class="hdqd-img" :src="configList.index_huodong" mode="widthFix"></image>
|
|
<!-- <image class="hdqd-img" src="@/static/image/home/hd-img.png" mode="widthFix"></image> -->
|
|
</view>
|
|
<view class="hd-box lx-box" @click="skip('travelList')">
|
|
<view class="left-box">
|
|
<view class="title-box">
|
|
旅行
|
|
</view>
|
|
<view class="btn-box">立即查看</view>
|
|
</view>
|
|
<image class="hdqd-img" :src="configList.index_lvxing" mode="widthFix"></image>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="hd-list">
|
|
<uv-tabs
|
|
@click= "tabs"
|
|
:list="hdList"
|
|
lineWidth="50rpx"
|
|
:lineColor="`url(${lineBg}) 100% 100%`"
|
|
:activeStyle="{
|
|
color: '#fff',
|
|
fontWeight: 'bold',
|
|
transform: 'scale(1.05)'
|
|
}"
|
|
:inactiveStyle="{
|
|
color: '#999',
|
|
transform: 'scale(1)'
|
|
}"
|
|
itemStyle="padding-left: 15px; padding-right: 15px; height: 44px;"
|
|
></uv-tabs>
|
|
|
|
<active-item :cardListData="cardListData" v-if="params.state != 2"/>
|
|
<travelList :cardListData="travelList" v-else/>
|
|
<uv-load-more :status="status" fontSize="24rpx" dashed line />
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<uv-popup ref="popup" mode="bottom" bgColor="">
|
|
<view class="popup-cont">
|
|
<view class="popup-title">
|
|
<view></view>
|
|
<view>选择地区</view>
|
|
<uv-icon name="close" color="#fff" @click="$refs.popup.close();"></uv-icon>
|
|
</view>
|
|
<view class="popup-list">
|
|
<scroll-view
|
|
style="height: 100%;"
|
|
scroll-y="true">
|
|
<view class="list-item"
|
|
v-for="(item,i) in areaList"
|
|
:key="i"
|
|
@click="$store.commit('setArea', i)">
|
|
<view class="item-l" :class="selectArea.id == item.id ? 'chooose-class' : ''">
|
|
<view>{{item.city}}</view>
|
|
<!-- <view class="item-l-val">¥{{item.price}}</view> -->
|
|
</view>
|
|
<uv-icon name="checkmark" color="#FF5858" v-if="selectArea.id == item.id"></uv-icon>
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
<view class="confirm-box">
|
|
<uv-button @click="clickArea"
|
|
text="确定" color="#381615"
|
|
shape="circle"
|
|
:customStyle="{
|
|
color:'#FF5858'
|
|
}"></uv-button>
|
|
</view>
|
|
</view>
|
|
</uv-popup>
|
|
|
|
<tabber select="home" />
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
// import Position from '@/utils/position.js'
|
|
import tabber from '@/components/base/tabbar.vue'
|
|
import activeItem from '@/components/active/active-item.vue'
|
|
import travelList from '@/components/travel/travelList.vue'
|
|
import { mapState } from 'vuex'
|
|
export default {
|
|
components:{
|
|
tabber,
|
|
activeItem,
|
|
travelList,
|
|
},
|
|
data() {
|
|
return {
|
|
status:"loading",
|
|
params:{
|
|
title:'',
|
|
state:0,
|
|
pageNo:1,
|
|
pageSize:10
|
|
},
|
|
totalPage:0,
|
|
bgColor:'transparent',
|
|
navTitle:'',
|
|
keyword:'',
|
|
list: [],
|
|
hdList: [
|
|
{ id: 0, name: '近期活动' },
|
|
{ id: 1, name: '往期活动' },
|
|
{ id: 2, name: '旅行' },
|
|
],
|
|
lineBg: require('@/static/image/cart/tabIcon.png'),
|
|
cardListData: [],
|
|
city : '定位中',
|
|
travelList : [],
|
|
}
|
|
},
|
|
onPageScroll(e) {
|
|
if(e.scrollTop > 50) {
|
|
this.bgColor = '#49070c'
|
|
this.navTitle = '首页'
|
|
}else{
|
|
this.bgColor = 'transparent'
|
|
this.navTitle = ''
|
|
}
|
|
},
|
|
onReachBottom() {
|
|
if(this.params.pageNo >= this.totalPage) return
|
|
this.params.pageNo ++
|
|
this.getActivityPageList()
|
|
},
|
|
computed : {
|
|
...mapState(['areaList']),
|
|
},
|
|
onLoad() {
|
|
this.getBanner()
|
|
// this.getLocationDetail()
|
|
this.$store.commit('getArea', list => {
|
|
if(!this.selectArea.id){
|
|
this.$store.commit('setArea', 0)
|
|
this.$nextTick(() => {
|
|
this.getActivityPageList()
|
|
})
|
|
}
|
|
})
|
|
|
|
if(this.selectArea.id){
|
|
this.getActivityPageList()
|
|
}
|
|
},
|
|
onPullDownRefresh() {
|
|
this.search()
|
|
},
|
|
methods:{
|
|
getLocationDetail(){
|
|
Position.getLocationDetail()
|
|
.then(res => {
|
|
this.city = res.addressDetail.city
|
|
})
|
|
},
|
|
search() {
|
|
this.params.pageNo = 1
|
|
this.cardListData = []
|
|
this.travelList = []
|
|
this.getActivityPageList()
|
|
},
|
|
async getActivityPageList() {
|
|
this.$api('activityPageList', {
|
|
...this.params,
|
|
cityId : this.selectArea.id
|
|
}, res=>{
|
|
uni.stopPullDownRefresh()
|
|
if(res.code == 200) {
|
|
this.totalPage = res.result.pages
|
|
this.cardListData = [...this.cardListData,...res.result.records]
|
|
if(this.params.pageNo >= this.totalPage) {
|
|
this.status = "nomore"
|
|
}else {
|
|
this.status = "loadmore"
|
|
}
|
|
}
|
|
})
|
|
this.$api('travelPageList', {
|
|
// ...this.params,
|
|
pageNo: this.params.pageNo,
|
|
pageSize: this.params.pageSize,
|
|
title: this.params.title,
|
|
}, res=>{
|
|
uni.stopPullDownRefresh()
|
|
if(res.code == 200) {
|
|
this.totalPage = res.result.pages
|
|
this.travelList = [...this.travelList,...res.result.records]
|
|
}
|
|
})
|
|
|
|
// let list1 = await this.getApi('activityPageList')
|
|
// let list2 = await this.getApi('travelPageList')
|
|
|
|
// console.log(list1, list2);
|
|
|
|
},
|
|
getApi(api){
|
|
return new Promise((success, error) => {
|
|
this.$api(api, {
|
|
...this.params,
|
|
cityId : this.selectArea.id
|
|
}, res => {
|
|
if(res.code == 200) {
|
|
success(res.result.records)
|
|
}
|
|
})
|
|
})
|
|
},
|
|
getBanner() {
|
|
this.$api('banner',res=>{
|
|
if(res.code == 200) {
|
|
this.list = res.result
|
|
}
|
|
})
|
|
},
|
|
tabs(val) {
|
|
this.params.state = val.id
|
|
this.search()
|
|
},
|
|
skip(val) {
|
|
if(!val) {
|
|
if(!uni.getStorageSync('token')){
|
|
return this.$utils.toLogin()
|
|
}
|
|
uni.setStorageSync('currentState',1)
|
|
uni.switchTab({
|
|
url:'/pages/index/cart'
|
|
})
|
|
}else{
|
|
uni.navigateTo({
|
|
url: `/pages_my/${val}`
|
|
})
|
|
}
|
|
},
|
|
clickArea(){
|
|
this.tabs({id : 0})
|
|
this.$refs.popup.close()
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
page {
|
|
background-color: #060504;
|
|
}
|
|
</style>
|
|
<style scoped lang="scss">
|
|
.page {
|
|
.head-box {
|
|
background: url('@/static/image/nav-bg.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
width: 100%;
|
|
height: 534rpx;
|
|
position: absolute;
|
|
top: 0;
|
|
z-index: -1;
|
|
}
|
|
.content {
|
|
margin-top: 40rpx;
|
|
color: #fff;
|
|
padding: 0 30rpx;
|
|
padding-top: calc(var(--status-bar-height) + 110rpx);
|
|
|
|
.search-box {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-bottom: 32rpx;
|
|
&-l {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-right: 30rpx;
|
|
position: relative;
|
|
view {
|
|
font-weight: 400;
|
|
font-size: 27rpx;
|
|
color: #FFFFFF;
|
|
margin: 0 18rpx 0 15rpx;
|
|
}
|
|
.address-img {
|
|
width: 26rpx;
|
|
}
|
|
.sjx-img {
|
|
width: 13rpx;
|
|
}
|
|
}
|
|
&-r {
|
|
flex:1;
|
|
}
|
|
}
|
|
|
|
.swipe-box {
|
|
margin-bottom: 41rpx;
|
|
}
|
|
|
|
.ydsk-box {
|
|
margin-bottom: 10rpx;
|
|
&-title {
|
|
width: 250rpx;
|
|
background: url('@/static/image/home/title-bg.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
text-align: center;
|
|
height: 31rpx;
|
|
line-height: 31rpx;
|
|
font-weight: bold;
|
|
font-size: 35rpx;
|
|
color: #FFFFFF;
|
|
margin: 0 auto 33rpx;
|
|
}
|
|
&-gird {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
.gird-l {
|
|
box-sizing: border-box;
|
|
width: 378rpx;
|
|
height: 278rpx;
|
|
padding: 36rpx 0 24rpx 26rpx;
|
|
background: url('@/static/image/home/hdqd-bg.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
position: relative;
|
|
.hdqd-img {
|
|
position: absolute;
|
|
right: 34rpx;
|
|
top: 48rpx;
|
|
width: 200rpx;
|
|
}
|
|
|
|
.left-box {
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
.title-box {
|
|
view {
|
|
font-weight: bold;
|
|
font-size: 29rpx;
|
|
color: #060504;
|
|
&:nth-child(2) {
|
|
font-weight: 400;
|
|
font-size: 21rpx;
|
|
color: #4C4C4C;
|
|
margin-top: 20rpx;
|
|
}
|
|
}
|
|
}
|
|
.btn-box {
|
|
width: 108rpx;
|
|
height: 41rpx;
|
|
background: url('@/static/image/home/hdqd-btn.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
font-weight: 500;
|
|
font-size: 17rpx;
|
|
color: #FFFFFF;
|
|
text-align: center;
|
|
line-height: 41rpx;
|
|
}
|
|
}
|
|
}
|
|
.gird-r {
|
|
.hd-box {
|
|
width: 288rpx;
|
|
height: 130rpx;
|
|
padding: 25rpx 0 24rpx 26rpx;
|
|
box-sizing: border-box;
|
|
background: url('@/static/image/home/hd-bg.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
position: relative;
|
|
.left-box {
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
.title-box {
|
|
font-weight: bold;
|
|
font-size: 28rpx;
|
|
color: #57270F;
|
|
}
|
|
.btn-box {
|
|
width: 98rpx;
|
|
height: 35rpx;
|
|
background: url('@/static/image/home/hd-btn.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
font-weight: 500;
|
|
font-size: 16rpx;
|
|
color: #FFFFFF;
|
|
text-align: center;
|
|
line-height: 35rpx;
|
|
}
|
|
}
|
|
.hdqd-img {
|
|
position: absolute;
|
|
right: 22rpx;
|
|
top: 25rpx;
|
|
width: 123rpx;
|
|
height: 100rpx;
|
|
}
|
|
}
|
|
.lx-box {
|
|
width: 288rpx;
|
|
height: 130rpx;
|
|
padding: 25rpx 0 24rpx 26rpx;
|
|
box-sizing: border-box;
|
|
background: url('@/static/image/home/lx-bg.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
position: relative;
|
|
margin-top: 18rpx;
|
|
.left-box {
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
.title-box {
|
|
font-weight: bold;
|
|
font-size: 28rpx;
|
|
color: #57270F;
|
|
}
|
|
.btn-box {
|
|
width: 98rpx;
|
|
height: 35rpx;
|
|
background: url('@/static/image/home/lx-btn.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
font-weight: 500;
|
|
font-size: 16rpx;
|
|
color: #FFFFFF;
|
|
text-align: center;
|
|
line-height: 35rpx;
|
|
}
|
|
}
|
|
.hdqd-img {
|
|
position: absolute;
|
|
right: 22rpx;
|
|
top: 25rpx;
|
|
width: 123rpx;
|
|
height: 100rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.popup-cont {
|
|
width: 95%;
|
|
margin: 0 auto;
|
|
background-image: linear-gradient(to top, #000000, #331212);
|
|
height:662rpx;
|
|
border-radius: 33rpx 33rpx 0 0;
|
|
.popup-title {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 54rpx 52rpx;
|
|
font-weight: 500;
|
|
font-size: 29rpx;
|
|
color: #999999;
|
|
}
|
|
.popup-list {
|
|
padding: 0 50rpx;
|
|
height: 400rpx;
|
|
.list-item {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
height: 110rpx;
|
|
border-bottom: 1px solid #3F3535;
|
|
.item-l {
|
|
font-weight: 500;
|
|
font-size: 29rpx;
|
|
color: #CCCCCC;
|
|
display: flex;
|
|
align-items: center;
|
|
.item-l-val {
|
|
margin-left: 40rpx;
|
|
}
|
|
}
|
|
.chooose-class {
|
|
color: #FF5858;
|
|
}
|
|
}
|
|
}
|
|
.confirm-box {
|
|
padding: 0 50rpx;
|
|
margin-top: 30rpx;
|
|
.confirm-btn-box {
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|