|
|
|
<template>
|
|
|
|
<view class="bg">
|
|
|
|
<view class="swipe-box">
|
|
|
|
<swiper class="swiper" :autoplay="true" :interval="3000" :duration="1000" @change="swiperChange">
|
|
|
|
<swiper-item v-for="(item, index) in info.list_images.split(',')" :key="item.id">
|
|
|
|
<swiper-item v-if="info && info.videourl">
|
|
|
|
<video
|
|
|
|
:src="showImg(info.videourl)"
|
|
|
|
id="detailVideo"
|
|
|
|
:poster="
|
|
|
|
showImg(info.image)
|
|
|
|
"
|
|
|
|
@play="play"
|
|
|
|
@error="videoErrorCallback"
|
|
|
|
controls
|
|
|
|
style="width: 100%;height: 100%;"
|
|
|
|
object-fit="cover"
|
|
|
|
></video>
|
|
|
|
</swiper-item>
|
|
|
|
<view class="swiper-item">
|
|
|
|
<image class="item-img" :src="showImg(item)" mode="aspectFill"></image>
|
|
|
|
</view>
|
|
|
|
</swiper-item>
|
|
|
|
</swiper>
|
|
|
|
|
|
|
|
<view class="swiper-pointer">
|
|
|
|
{{swiperCurrent}}/{{info.list_images.split(',').length}}
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
<view class="detail-container">
|
|
|
|
<view class="common-container info-container">
|
|
|
|
<view class="flex-between">
|
|
|
|
<view class="info-title text-overflowRows">{{info.title}}</view>
|
|
|
|
<!-- <view class="collect" @click="collect">
|
|
|
|
<image :src="showImg('/uploads/20240827/8a55a8936b9324fa1c7b85c2da9c015b.png')" mode="" v-if="info.is_collect == 0"></image>
|
|
|
|
<image v-else :src="showImg('/uploads/20240827/6bf73216f19c756961496031f8aed053.png')" mode="" ></image>
|
|
|
|
<view>收藏</view>
|
|
|
|
</view> -->
|
|
|
|
</view>
|
|
|
|
<view class="flex-between time-container">
|
|
|
|
<view class="flex flex-1 flex-shrink-0 flex-items-center">
|
|
|
|
<image class="address-icon flex-shrink-0" :src="showImg('/uploads/20240924/7fe2f8f89aec55a4009b66032b7a3f7e.png')" mode=""></image>
|
|
|
|
<view class="title text-overflowRows">
|
|
|
|
<text style="margin-right: 28rpx;">营业时间</text>
|
|
|
|
{{info.open_description}}
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<view></view>
|
|
|
|
</view>
|
|
|
|
<view class="flex-between" style="align-items: flex-start;">
|
|
|
|
<view class="flex flex-1 flex-shrink-0 flex-items-center" style="align-items: flex-start;">
|
|
|
|
<image class="address-icon flex-shrink-0" style="margin-top: 5rpx;" :src="showImg('/uploads/20240827/3d357e6e562de9395f373dc380a790a7.png')" mode=""></image>
|
|
|
|
<view class="title address-title text-overflowRows">
|
|
|
|
<text class="flex-shrink-0" style="margin-right: 28rpx;">景区地址</text>
|
|
|
|
<text class="address-detail flex-1">{{info.address}}</text>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<view @click="goMap" class="map-icon">
|
|
|
|
<img style="width: 50rpx;height: 50rpx;" :src="showImg('/uploads/20240827/5b19517f2a630f3a766ea03ac621a3be.png')">
|
|
|
|
<view>去这里</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
<view class="box-title">语音讲解</view>
|
|
|
|
<view class="common-container info-container" >
|
|
|
|
<view class="info-title text-overflowRows" style="font-weight: normal;">{{info.title}}</view>
|
|
|
|
<view class='flex flex-between audio' >
|
|
|
|
<!-- <view class='flex-shrink-0'>{{getTime(Math.round(currentAudio.currentTime.toFixed(0)))}}</view> -->
|
|
|
|
<view class='flex-shrink-0'>01:30</view>
|
|
|
|
<!-- <Voice-play :duration="133" :play="false"></Voice-play> -->
|
|
|
|
<view class='flex-1' style="width: 10rpx;padding:0 30rpx">
|
|
|
|
<slider @change="audioSeek" style="width: 100%;margin: 0;" :block-size="12" backgroundColor='#E4F1F5'
|
|
|
|
activeColor='#248BAA' :min='0' :max="120" :value="60" :step='0.1'></slider>
|
|
|
|
|
|
|
|
<!-- :max='currentAudio.video_length.toFixed(0)' :value='currentAudio.currentTime.toFixed(0)' -->
|
|
|
|
</view>
|
|
|
|
<!-- <view class='flex-shrink-0'> {{getTime(Math.round(currentAudio.video_length))}}</view> -->
|
|
|
|
<view class='flex-shrink-0'> 03:00</view>
|
|
|
|
|
|
|
|
<view class='play-icon' style="height:59rpx" @tap.stop="playVoice">
|
|
|
|
<image src='https://yjks.oss-cn-shanghai.aliyuncs.com/uploads/20221224/cace8838685f41c4bae567937f531808.png' ></image>
|
|
|
|
<!-- <image src='https://yjks.oss-cn-shanghai.aliyuncs.com/uploads/20221224/aff3dacd182b3a413406dd4be08c5506.png' class='icon'></image> -->
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
<view class="box-title" v-if="sku.length>0">门票预定</view>
|
|
|
|
<view class="w-full" v-if="sku.length>0">
|
|
|
|
<view class="scenic-list" v-for="(item, index) in sku" :key="index">
|
|
|
|
<view class="scenic-item " v-for="(itemSku, indexSku) in item.specifications" :key="indexSku">
|
|
|
|
<view class="w-1rpx flex-1 item-left">
|
|
|
|
<view class="title text-overflow">{{ itemSku.title }}</view>
|
|
|
|
<view>
|
|
|
|
<view class="tags-box">
|
|
|
|
<view class="tags text-overflow" v-if="itemSku.specifications_new_tag">
|
|
|
|
<view v-for="(tagSku,tagSkuIndex) in itemSku.specifications_new_tag.split(',').slice(0, 2)"
|
|
|
|
:key="tagSkuIndex">{{ tagSku }}</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
<view style="color: #248BAA;" class="notice" @click="showSkuInfo(itemSku, item)">
|
|
|
|
预订须知 >
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
<view class="item-right flex-shrink-0">
|
|
|
|
<view class="price">
|
|
|
|
{{showNoPriceNew(itemSku.price)}}
|
|
|
|
</view>
|
|
|
|
<view class="btn" @click="changeSku(itemSku, item)">
|
|
|
|
预订
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
<view class="box-title">景点简介</view>
|
|
|
|
<view class="common-container" style="padding: 30rpx;">
|
|
|
|
<view class="" id="cpts" v-html="formateRichText(info.feature_content)"></view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
<!-- 预订须知的弹窗 -->
|
|
|
|
<uni-popup ref="popupRule" type="bottom" :safe-area="false">
|
|
|
|
<view class="popup-content-date flex-column flex" >
|
|
|
|
<view class="popup-content-title flex">
|
|
|
|
<view class="flex-1 w-1rpx text-overflow">
|
|
|
|
{{skuInfo.title}}
|
|
|
|
</view>
|
|
|
|
<img src="https://static.ticket.sz-trip.com/taizhou/images/cha.png" @click="closePopupRule"
|
|
|
|
style="width: 20rpx;height: 20rpx;" class="flex-shrink-0">
|
|
|
|
</view>
|
|
|
|
<view class="content flex-1 h-1rpx no-scrollbar">
|
|
|
|
<view class="detail-content" v-html="formateRichText(skuInfo.reserve_content)"></view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</uni-popup>
|
|
|
|
|
|
|
|
<!-- 预定弹窗 -->
|
|
|
|
<uni-popup ref="popup" type="bottom" :safe-area="false">
|
|
|
|
<view class="popup-content-date" >
|
|
|
|
<view class="popup-content-title flex">
|
|
|
|
<view class="flex-1 w-1rpx text-overflow">
|
|
|
|
{{skuInfo.title}}
|
|
|
|
</view>
|
|
|
|
<img src="https://static.ticket.sz-trip.com/taizhou/images/cha.png" @click="closePopup"
|
|
|
|
style="width: 31rpx;height: 31rpx;" class="flex-shrink-0">
|
|
|
|
</view>
|
|
|
|
<view class="order-popup-detail">
|
|
|
|
<view class="relative">
|
|
|
|
<view class="sku-title">使用日期</view>
|
|
|
|
<view class="date-content">
|
|
|
|
<view :class="['item', item.store>0?'':'disabled',seldDateIndex===index?'active':'']"
|
|
|
|
v-for="(item,index) in allSeldDate" :key="index"
|
|
|
|
@click="clickTab(item,index)">
|
|
|
|
<view>{{ShowDateDay(new Date(item.date).getDay())}}</view>
|
|
|
|
<view>{{item.date.slice(-5)}}</view>
|
|
|
|
<view class="price" v-if="item.store > 0">¥{{showNoPriceNew(item.money)}}</view>
|
|
|
|
<view v-else>不可定</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<view class="dateMore" @click="openCalendar">
|
|
|
|
<view style="width: 55rpx;">更多日期</view>
|
|
|
|
<view style="padding-left: 9rpx;">></view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
<view v-if="timesArr.length > 0 && skuInfo.is_time_stock">
|
|
|
|
<view class="sku-title">选择场次</view>
|
|
|
|
<view class="time-box">
|
|
|
|
<view v-for="(item,index) in timesArr" :key="index"
|
|
|
|
:class="['time-item',{'time-disable': item.stock_number < 1, 'time-active': item.stock_number > 0 && index == seldTimeIndex}]"
|
|
|
|
@click="changeTime(item,index)">
|
|
|
|
{{ item.start_time }}-{{ item.end_time }}
|
|
|
|
{{item.stock_number < 10 ? (item.stock_number === -1 ? '不可定' : item.stock_number === 0 ? '无票' : '(余票' + item.stock_number + ')') : '有票'}}
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<view class="sku-bottom">
|
|
|
|
<view class="flex" style="align-items: baseline;">
|
|
|
|
合计:<view class="bottom-price">{{allSeldDate[seldDateIndex].money / 100 || 0}}</view>
|
|
|
|
</view>
|
|
|
|
<view class="bottom-btn" @click="addBuyCard">
|
|
|
|
下一步
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
|
|
|
|
</uni-popup>
|
|
|
|
|
|
|
|
<uni-calendar ref="calendar" class="uni-calendar--hook" :clear-date="true"
|
|
|
|
:date="allSeldDate[seldDateIndex].date" :insert="false" :startDate="calendarParam.startDate"
|
|
|
|
:endDate="calendarParam.endDate" @confirm="confirmCalendar" :selected="calendarParam.selected"/>
|
|
|
|
</view>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
export default {
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
headImg: null,
|
|
|
|
swiperCurrent: 1,
|
|
|
|
|
|
|
|
id: null,
|
|
|
|
|
|
|
|
info: {list_images:'', times_list_info: {start:'',end:''}},
|
|
|
|
sku: [],
|
|
|
|
skuInfo: {}, // 预定门票
|
|
|
|
selectGoods: {}, // 预定的商品
|
|
|
|
minSeldDate: new Date().Format('yyyy-MM-dd'),
|
|
|
|
maxSeldDate: new Date((new Date()).getFullYear(), (new Date()).getMonth() + 3, 0).Format('yyyy-MM-dd'),
|
|
|
|
allSeldDate: [],
|
|
|
|
seldDateIndex: 0,
|
|
|
|
timesArr: [],
|
|
|
|
seldTimeIndex: -1,
|
|
|
|
calendarParam: {
|
|
|
|
stratDate:'',endDate: '', selected: []
|
|
|
|
},
|
|
|
|
|
|
|
|
}
|
|
|
|
},
|
|
|
|
onShow(options) {
|
|
|
|
this.headImg = 'https://tongli.sz-trip.com/uploads/20240826/8653c32761e01ee683505eddba1ae22b.png'
|
|
|
|
},
|
|
|
|
onLoad(options) {
|
|
|
|
this.id = options.id;
|
|
|
|
this.getInfo();
|
|
|
|
this.getGoodsList()
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
swiperChange (e) {
|
|
|
|
this.swiperCurrent = e.detail.current+1
|
|
|
|
},
|
|
|
|
// 获取景点信息
|
|
|
|
getInfo() {
|
|
|
|
this.Post({id: this.id},'/api/scenic/getScenicById').then(res => {
|
|
|
|
if (res.data.flag == 0) {
|
|
|
|
uni.showToast({title: '商品不存在或已下架',icon: 'none'})
|
|
|
|
setTimeout(() => {this.goBack()}, 2000)
|
|
|
|
}
|
|
|
|
let info = res.data;
|
|
|
|
try {
|
|
|
|
info.times_list_info = JSON.parse(info.times_list)[0]
|
|
|
|
} catch(e) {
|
|
|
|
console.log(e)
|
|
|
|
info.times_list_info = {start:'',end:''}
|
|
|
|
}
|
|
|
|
this.info = info
|
|
|
|
console.log(info)
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// 根据景点id获取商品列表
|
|
|
|
getGoodsList(){
|
|
|
|
this.Post({
|
|
|
|
scenic_id: this.id
|
|
|
|
},'/api/scenic/getGoodsByScenicId').then(res => {
|
|
|
|
this.sku = res.data || []
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
// 收藏 2景点
|
|
|
|
collect() {
|
|
|
|
this.Post({type: 2,id: this.id},'/api/scenic/collect').then(res => {
|
|
|
|
if (res) {
|
|
|
|
uni.showToast({title: res.msg,icon: 'none'});
|
|
|
|
this.info.is_collect = !this.info.is_collect
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
goMap () {
|
|
|
|
if (!this.info.tengxun_map) {
|
|
|
|
uni.showToast({
|
|
|
|
title: '暂未配置地理位置',
|
|
|
|
icon: 'none'
|
|
|
|
})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
uni.openLocation({
|
|
|
|
latitude: Number(this.info.tengxun_map.lat),
|
|
|
|
longitude: Number(this.info.tengxun_map.lon),
|
|
|
|
name: this.info.title,
|
|
|
|
address: this.info.address,
|
|
|
|
success: function () {
|
|
|
|
console.log('success');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
showSkuInfo (itemSku,goods) {
|
|
|
|
this.skuInfo = itemSku
|
|
|
|
this.selectGoods = goods
|
|
|
|
console.log(itemSku,goods)
|
|
|
|
this.openPopRule()
|
|
|
|
},
|
|
|
|
|
|
|
|
// 选择列表规格
|
|
|
|
changeSku(itemSku,goods) {
|
|
|
|
this.skuInfo = itemSku
|
|
|
|
this.selectGoods = goods
|
|
|
|
// 期票类型
|
|
|
|
// if(this.skuInfo.ticket_type == 2) {
|
|
|
|
// this.addBuyCard()
|
|
|
|
// }else {
|
|
|
|
// this.getDays(itemSku,goods)
|
|
|
|
// }
|
|
|
|
this.getPriceCal(itemSku,goods)
|
|
|
|
},
|
|
|
|
openCalendar () {
|
|
|
|
this.calendarParam = {
|
|
|
|
startDate: (this.allSeldDate.find(v=>v.store>0) || {}).date,
|
|
|
|
endDate: (this.allSeldDate[this.allSeldDate.findLastIndex(v=>v.store>0)]||{}).date,
|
|
|
|
selected: this.allSeldDate.filter(v=>v.store>0).map(v=>{
|
|
|
|
return {
|
|
|
|
date: v.date,
|
|
|
|
info: '¥'+this.showNoPriceNew(v.money),
|
|
|
|
notNeedDot:true,
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
this.$refs.calendar.open();
|
|
|
|
},
|
|
|
|
|
|
|
|
// 获取价格日历列表
|
|
|
|
getPriceCal(itemSku,goods) {
|
|
|
|
this.Post({
|
|
|
|
specifications_id: itemSku.id,
|
|
|
|
goods_id: goods.id,
|
|
|
|
limit: 60
|
|
|
|
}, '/api/goods/getPriceCalendarListBySpecifications').then(res => {
|
|
|
|
this.allSeldDate = res.data || []
|
|
|
|
this.seldDateIndex = this.allSeldDate.findIndex(item => item.store != 0)
|
|
|
|
this.getTimeStock(this.allSeldDate[this.seldDateIndex].date)
|
|
|
|
this.openPop()
|
|
|
|
})
|
|
|
|
},
|
|
|
|
// 获取规格分时库存
|
|
|
|
getTimeStock(date) {
|
|
|
|
this.Post({
|
|
|
|
specifications_id: this.skuInfo.id,
|
|
|
|
date: date,
|
|
|
|
}, '/api/goods/getTimeStock').then(res => {
|
|
|
|
if (Array.isArray(res.data)) {
|
|
|
|
this.timesArr = res.data || []
|
|
|
|
this.seldTimeIndex = -1
|
|
|
|
}
|
|
|
|
if (res.data.length > 0) {
|
|
|
|
this.seldTimeIndex = this.timesArr.findIndex(item => item.stock_number > 0)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 选择日期
|
|
|
|
clickTab(item, index) {
|
|
|
|
if (item.store>0) {
|
|
|
|
this.seldDateIndex = index
|
|
|
|
this.getTimeStock(item.date)
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
// 选择时段
|
|
|
|
changeTime(item, index) {
|
|
|
|
if(item.stock_number > 0) {
|
|
|
|
this.seldTimeIndex = index
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
confirmCalendar (val) {
|
|
|
|
let index = this.allSeldDate.findIndex(v=>v.date == val.fulldate)
|
|
|
|
if (index>=0) {
|
|
|
|
this.clickTab(this.allSeldDate[index],index)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
addBuyCard() {
|
|
|
|
let that = this;
|
|
|
|
// 如果是分时,未选择分时
|
|
|
|
console.log(this.skuInfo)
|
|
|
|
if(that.skuInfo.is_time_stock && that.seldTimeIndex < 0) {
|
|
|
|
uni.showToast({title:'请选择分时',icon:'none'})
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let param = {
|
|
|
|
sInfo: this.skuInfo,
|
|
|
|
pInfo: this.selectGoods,
|
|
|
|
minSeldDate: this.minSeldDate,
|
|
|
|
maxSeldDate: this.maxSeldDate,
|
|
|
|
calendarParam: this.calendarParam,
|
|
|
|
allSeldDate: this.allSeldDate,
|
|
|
|
seldDateIndex: this.seldDateIndex,
|
|
|
|
timesArr: this.timesArr,
|
|
|
|
seldTimeIndex: this.seldTimeIndex,
|
|
|
|
}
|
|
|
|
uni.setStorageSync('ticketOrder', JSON.stringify(param));
|
|
|
|
// that.gotoBuy(pInfo, sInfo);
|
|
|
|
uni.navigateTo({
|
|
|
|
url:'/subPackages/ticketBooking/order',
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
gotoBuy(pInfo, sInfo) {
|
|
|
|
console.log(pInfo, sInfo);
|
|
|
|
let that = this;
|
|
|
|
if (
|
|
|
|
(pInfo.flag != 1 || sInfo.flag !== "on" || sInfo.stock <= 0) &&
|
|
|
|
sInfo.is_third_stock == 0
|
|
|
|
)
|
|
|
|
return;
|
|
|
|
// that.buryPoint("scene_order");
|
|
|
|
// that.checkIsCanBuy(that.detail.title,
|
|
|
|
// function() {
|
|
|
|
let params = {
|
|
|
|
pInfo: pInfo,
|
|
|
|
sInfo: sInfo,
|
|
|
|
minSeldDate: this.minSeldDate,
|
|
|
|
maxSeldDate: this.maxSeldDate,
|
|
|
|
calendarParam: this.calendarParam,
|
|
|
|
allSeldDate: this.allSeldDate,
|
|
|
|
seldDateIndex: this.seldDateIndex,
|
|
|
|
timesArr: this.timesArr,
|
|
|
|
seldTimeIndex: this.seldTimeIndex,
|
|
|
|
};
|
|
|
|
if (that.detail.allowance) {
|
|
|
|
sInfo.allowance_data = that.detail.allowance;
|
|
|
|
let spread_price = Number(
|
|
|
|
sInfo.allowance_data.discount_limit_price -
|
|
|
|
sInfo.allowance_data.user_used_price
|
|
|
|
);
|
|
|
|
if (spread_price > 0) {
|
|
|
|
if (
|
|
|
|
spread_price <
|
|
|
|
(sInfo.allowance_data.discount_rate / 100) *
|
|
|
|
sInfo.price
|
|
|
|
)
|
|
|
|
sInfo.allowance_price = spread_price;
|
|
|
|
else
|
|
|
|
sInfo.allowance_price =
|
|
|
|
(sInfo.allowance_data.discount_rate / 100) *
|
|
|
|
sInfo.price;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// );
|
|
|
|
},
|
|
|
|
|
|
|
|
closePopup() {
|
|
|
|
this.$refs.popup.close()
|
|
|
|
},
|
|
|
|
openPop(){
|
|
|
|
this.$refs.popup.open()
|
|
|
|
},
|
|
|
|
closePopupRule() {
|
|
|
|
this.$refs.popupRule.close()
|
|
|
|
},
|
|
|
|
openPopRule(){
|
|
|
|
this.$refs.popupRule.open()
|
|
|
|
},
|
|
|
|
// 价格格式
|
|
|
|
showNoPriceNew(price) {
|
|
|
|
if (price && price > 0) {
|
|
|
|
return (price / 100)
|
|
|
|
} else {
|
|
|
|
return '0'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
*{
|
|
|
|
box-sizing: border-box;
|
|
|
|
}
|
|
|
|
.bg{
|
|
|
|
min-height: 100vh;
|
|
|
|
background: #F8F8F8;
|
|
|
|
}
|
|
|
|
|
|
|
|
.swipe-box {
|
|
|
|
height: 413rpx;
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
.swiper-pointer{
|
|
|
|
position: absolute;
|
|
|
|
right: 26rpx;
|
|
|
|
bottom: 46rpx;
|
|
|
|
background: rgba(22,22,22,0.5);
|
|
|
|
border-radius: 23rpx;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 24rpx;
|
|
|
|
color: #FFFFFF;
|
|
|
|
padding: 6rpx 14rpx;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.swiper-item-num {
|
|
|
|
width: 90rpx;
|
|
|
|
height: 40rpx;
|
|
|
|
background: rgba(0, 0, 0, 0.5);
|
|
|
|
border-radius: 20rpx;
|
|
|
|
font-size: 24rpx;
|
|
|
|
font-family: PingFangSC-Regular, PingFang SC;
|
|
|
|
font-weight: 400;
|
|
|
|
color: #ffffff;
|
|
|
|
text-align: center;
|
|
|
|
line-height: 40rpx;
|
|
|
|
position: absolute;
|
|
|
|
right: 30rpx;
|
|
|
|
bottom: 50rpx;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.swiper {
|
|
|
|
height: 413rpx;
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
.swiper-item {
|
|
|
|
width: 100%;
|
|
|
|
height: 413rpx;
|
|
|
|
|
|
|
|
.item-img {
|
|
|
|
width: 750rpx;
|
|
|
|
height: 413rpx;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.detail-container{
|
|
|
|
width: 100%;
|
|
|
|
z-index: 2;
|
|
|
|
padding: 26rpx;
|
|
|
|
position: relative;
|
|
|
|
top: -52rpx;
|
|
|
|
}
|
|
|
|
|
|
|
|
.common-container{
|
|
|
|
background: white;
|
|
|
|
border-radius: 20rpx;
|
|
|
|
margin-bottom: 30rpx;
|
|
|
|
padding: 22rpx 26rpx;
|
|
|
|
}
|
|
|
|
|
|
|
|
.info-container{
|
|
|
|
font-family: PingFang;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 27rpx;
|
|
|
|
color: #000000;
|
|
|
|
.time-container{
|
|
|
|
padding: 22rpx 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
.info-title{
|
|
|
|
width: 100%;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-size: 31rpx;
|
|
|
|
height: 80rpx;
|
|
|
|
font-weight: bold;
|
|
|
|
}
|
|
|
|
.collect{
|
|
|
|
font-size: 23rpx;
|
|
|
|
image{
|
|
|
|
width: 48rpx;
|
|
|
|
height: 48rpx;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.box-title {
|
|
|
|
margin: 60rpx 12rpx 28rpx;
|
|
|
|
font-size: 37rpx;
|
|
|
|
color: #000000;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: bold;
|
|
|
|
}
|
|
|
|
|
|
|
|
.address-icon{
|
|
|
|
margin-right: 9rpx;
|
|
|
|
width: 26rpx;
|
|
|
|
height: 26rpx;
|
|
|
|
}
|
|
|
|
|
|
|
|
.scenic-list{
|
|
|
|
.scenic-item {
|
|
|
|
width: 100%;
|
|
|
|
height: 187rpx;
|
|
|
|
background: #FFFFFF;
|
|
|
|
border-radius: 13rpx;
|
|
|
|
margin-bottom: 20rpx;
|
|
|
|
padding: 26rpx;
|
|
|
|
display: flex;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 23rpx;
|
|
|
|
color: #666666;
|
|
|
|
|
|
|
|
.item-left{
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: space-between;
|
|
|
|
padding-left: 20rpx;
|
|
|
|
}
|
|
|
|
|
|
|
|
.title {
|
|
|
|
width: 100%;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: bold;
|
|
|
|
font-size: 31rpx;
|
|
|
|
color: #000000;
|
|
|
|
}
|
|
|
|
.tags-box {
|
|
|
|
overflow: hidden;
|
|
|
|
padding-bottom: 6rpx;
|
|
|
|
.tags {
|
|
|
|
display: flex;
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
flex: 1;
|
|
|
|
}
|
|
|
|
.tags view::after {
|
|
|
|
content: '丨'
|
|
|
|
}
|
|
|
|
.tags view:last-of-type:after {
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.item-right {
|
|
|
|
width: 133rpx;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: space-between;
|
|
|
|
}
|
|
|
|
.price {
|
|
|
|
font-family: PingFangSC;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 36rpx;
|
|
|
|
color: #EE3E3B;
|
|
|
|
}
|
|
|
|
.price::before {
|
|
|
|
display: inline-block;
|
|
|
|
content: "¥";
|
|
|
|
font-size: 24rpx;
|
|
|
|
font-weight: 500;
|
|
|
|
color: #EE3E3B;
|
|
|
|
}
|
|
|
|
|
|
|
|
.btn {
|
|
|
|
margin-top: 20rpx;
|
|
|
|
width: 133rpx;
|
|
|
|
height: 53rpx;
|
|
|
|
background: linear-gradient(-90deg, #FC5109, #FC930A);
|
|
|
|
border-radius: 27rpx;
|
|
|
|
text-align: center;
|
|
|
|
line-height: 53rpx;
|
|
|
|
font-weight: 500;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: bold;
|
|
|
|
font-size: 31rpx;
|
|
|
|
color: #FFFFFF;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.bottom {
|
|
|
|
.notice {
|
|
|
|
font-weight: 400;
|
|
|
|
color: #0B898E;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.popup-content-date {
|
|
|
|
background-color: white;
|
|
|
|
padding: 0rpx 28rpx 166rpx;
|
|
|
|
height: 70vh;
|
|
|
|
border-radius: 20rpx 20rpx 0 0 ;
|
|
|
|
.popup-content-title{
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: bold;
|
|
|
|
font-size: 37rpx;
|
|
|
|
color: #000000;
|
|
|
|
padding: 39rpx 0;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
border-bottom: 1px solid #CCCCCC;
|
|
|
|
}
|
|
|
|
// 预定须知
|
|
|
|
.content{
|
|
|
|
padding-top: 48rpx;
|
|
|
|
overflow-y: auto;
|
|
|
|
}
|
|
|
|
|
|
|
|
.order-popup-detail{
|
|
|
|
.sku-title{
|
|
|
|
padding: 48rpx 0 26rpx;
|
|
|
|
font-family: PingFangSC;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 31rpx;
|
|
|
|
color: #000000;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.dateMore{
|
|
|
|
width: 120rpx;
|
|
|
|
height: 133rpx;
|
|
|
|
background: white;
|
|
|
|
border-radius: 10rpx;
|
|
|
|
border: 1px solid #000000;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 27rpx;
|
|
|
|
color: #111;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: row;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: center;
|
|
|
|
flex-shrink: 0;
|
|
|
|
padding: 6rpx 0;
|
|
|
|
position: absolute;
|
|
|
|
bottom: 0;
|
|
|
|
right: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
.date-content{
|
|
|
|
width: 100%;
|
|
|
|
display: flex;
|
|
|
|
overflow-y: auto;
|
|
|
|
position: relative;
|
|
|
|
padding-right: 140rpx;
|
|
|
|
|
|
|
|
.item{
|
|
|
|
width: 120rpx;
|
|
|
|
height: 133rpx;
|
|
|
|
border-radius: 10rpx;
|
|
|
|
border: 1px solid #000000;
|
|
|
|
margin-right: 24rpx;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 27rpx;
|
|
|
|
color: #000;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: space-around;
|
|
|
|
flex-shrink: 0;
|
|
|
|
padding: 6rpx 0;
|
|
|
|
}
|
|
|
|
.item.active{
|
|
|
|
background: rgba(36,139,170,0.12);
|
|
|
|
border: 1px solid #248BAA;
|
|
|
|
}
|
|
|
|
.item.disabled{
|
|
|
|
color: #666;
|
|
|
|
border-color: #CCC;
|
|
|
|
}
|
|
|
|
|
|
|
|
.price{
|
|
|
|
color: #EE3E3B;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
.date-content::-webkit-scrollbar{
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.time-box {
|
|
|
|
display: flex;
|
|
|
|
justify-content: space-between;
|
|
|
|
flex-wrap: wrap;
|
|
|
|
max-height: 340rpx;
|
|
|
|
overflow-y: auto;
|
|
|
|
|
|
|
|
.time-item {
|
|
|
|
width: 48%;
|
|
|
|
height: 60rpx;
|
|
|
|
border-radius: 10rpx;
|
|
|
|
text-align: center;
|
|
|
|
font-size: 34rpx;
|
|
|
|
margin-bottom: 23rpx;
|
|
|
|
font-family: PingFangSC;
|
|
|
|
font-weight: 400;
|
|
|
|
font-size: 25rpx;
|
|
|
|
border: 1px solid #333333;
|
|
|
|
line-height: 58rpx;
|
|
|
|
color: #000;
|
|
|
|
}
|
|
|
|
.time-active {
|
|
|
|
background: rgba(36,139,170,0.12);
|
|
|
|
border: 1px solid #248BAA;
|
|
|
|
}
|
|
|
|
.time-disable {
|
|
|
|
color: #666666;
|
|
|
|
border-color: #CCC;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.sku-bottom {
|
|
|
|
width: 100%;
|
|
|
|
height: 166rpx;
|
|
|
|
background: #FFFFFF;
|
|
|
|
box-shadow: 0rpx -3rpx 8rpx 0rpx rgba(71,71,71,0.1);
|
|
|
|
display: flex;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: center;
|
|
|
|
box-sizing: border-box;
|
|
|
|
padding: 50rpx 50rpx 85rpx;
|
|
|
|
font-family: PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 28rpx;
|
|
|
|
color: #393B3E;
|
|
|
|
position: absolute;
|
|
|
|
bottom: 0;
|
|
|
|
left: 0;
|
|
|
|
right: 0;
|
|
|
|
|
|
|
|
.bottom-price {
|
|
|
|
font-size: 48rpx;
|
|
|
|
font-weight: 500;
|
|
|
|
color: #EE3E3B;
|
|
|
|
}
|
|
|
|
.bottom-price::before {
|
|
|
|
font-size: 24rpx;
|
|
|
|
content: '¥';
|
|
|
|
}
|
|
|
|
|
|
|
|
.bottom-btn {
|
|
|
|
width: 250rpx;
|
|
|
|
height: 80rpx;
|
|
|
|
background: linear-gradient(-90deg, #FC5109, #FC930A);
|
|
|
|
border-radius: 40rpx;
|
|
|
|
font-size: 32rpx;
|
|
|
|
text-align: center;
|
|
|
|
font-weight: bold;
|
|
|
|
color: #FFFFFF;
|
|
|
|
line-height: 78rpx;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.address-title{
|
|
|
|
display: flex;
|
|
|
|
align-items: flex-start;
|
|
|
|
.address-detail{
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 27rpx;
|
|
|
|
color: #666666;
|
|
|
|
padding-right: 40rpx;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.map-icon{
|
|
|
|
flex-direction: column;
|
|
|
|
height: 80rpx;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: space-between;
|
|
|
|
font-weight: 500;
|
|
|
|
font-size: 20rpx;
|
|
|
|
color: #248BAA;
|
|
|
|
}
|
|
|
|
.audio{
|
|
|
|
.play-icon{
|
|
|
|
height: 51rpx;
|
|
|
|
padding-left: 49rpx;
|
|
|
|
width: 100rpx;
|
|
|
|
image{
|
|
|
|
width: 51rpx;
|
|
|
|
height: 51rpx;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/deep/ .uni-calendar-item--extra{
|
|
|
|
color: #333 !important;
|
|
|
|
}
|
|
|
|
/deep/ .uni-calendar-item--isDay{
|
|
|
|
background: #248BAA !important;
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
|
|
.uni-calendar-item--extra{
|
|
|
|
color: white !important;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
</style>
|