chenkainan 1 year ago
parent
commit
c69b8c34f5
  1. 6
      pages/index/index.vue
  2. 34
      subPackages/food/foodList.vue
  3. 32
      subPackages/hotelHomestay/detail.vue
  4. 267
      subPackages/hotelHomestay/hotelHomestay.vue
  5. 131
      subPackages/hotelHomestay/order.vue
  6. 2
      subPackages/hotelHomestay/policy.vue
  7. 6
      subPackages/hotelHomestay/selectCalendar.vue
  8. 6
      subPackages/order/orderCoupon.vue
  9. 12
      subPackages/search/search.vue
  10. 274
      subPackages/search/searchList.vue
  11. 8
      subPackages/techan/detail.vue
  12. 4
      subPackages/techan/order.vue
  13. 6
      subPackages/techan/selfPickUpPoint.vue
  14. 38
      subPackages/techan/techanList.vue
  15. 118
      subPackages/ticketBooking/detail.vue
  16. 12
      subPackages/ticketBooking/order.vue
  17. 25
      subPackages/ticketBooking/ticketBooking.vue

6
pages/index/index.vue

@ -145,7 +145,7 @@
{ {
img: 'https://static.ticket.sz-trip.com/tongli/images/index/jdms.png', img: 'https://static.ticket.sz-trip.com/tongli/images/index/jdms.png',
text: '酒店民宿', text: '酒店民宿',
path: '/subPackages/techan/techanList' path: '/subPackages/hotelHomestay/hotelHomestay'
}, },
{ {
img: 'https://static.ticket.sz-trip.com/tongli/images/index/zcs.png', img: 'https://static.ticket.sz-trip.com/tongli/images/index/zcs.png',
@ -161,12 +161,12 @@
{ {
img: 'https://static.ticket.sz-trip.com/tongli/images/index/tcwc.png', img: 'https://static.ticket.sz-trip.com/tongli/images/index/tcwc.png',
text: '特产文创', text: '特产文创',
path: '/subPackages/travelGuide/travelGuide' path: '/subPackages/techan/techanList'
}, },
{ {
img: 'https://static.ticket.sz-trip.com/tongli/images/index/tlms.png', img: 'https://static.ticket.sz-trip.com/tongli/images/index/tlms.png',
text: '同里美食', text: '同里美食',
path: '/subPackages/eventCalendar/eventCalendar' path: '/subPackages/food/foodList'
} }
], ],
scenicList: [], scenicList: [],

34
subPackages/food/foodList.vue

@ -1,19 +1,28 @@
<template> <template>
<view class="bg"> <view class="bg">
<span class="iconfont topLeft" @click="goBack">&#xe660;</span> <span class="iconfont topLeft" @click="goBack">&#xe660;</span>
<img :src="showImg('/uploads/20240826/7329f5c692bfee0c3a3acacc0205761d.png')" class="topImg" /> <img :src="headImg" class="topImg" />
<view class="item" v-for="item in list" :key="item.id" @click="viewDetail(item)"> <view class="item" v-for="item in list" :key="item.id" @click="viewDetail(item)">
<image class="img" :src="showImg(item.image)" mode=""></image> <image class="img" :src="showImg(item.image)" mode=""></image>
<view class="content"> <view class="content">
<view class="title text-overflowRows"> <view class="title text-overflowRows">
{{item.title}} {{item.title}}
</view> </view>
<view style="display: flex;" v-if="item.goods_new_tag"> <!-- <view style="display: flex;" v-if="item.goods_new_tag">
<view class="tagItem1" v-for="(tagItem,tagIndex) in item.goods_new_tag.split(',').slice(0,2)" :key="tagIndex">{{tagItem}}</view> <view class="tagItem1" v-for="(tagItem,tagIndex) in item.goods_new_tag.split(',').slice(0,2)" :key="tagIndex">{{tagItem}}</view>
</view> -->
<view>
<view class="distance text-overflow" v-if="item.open_description">
<text >营业时间{{ item.open_description }}</text>
</view> </view>
<view class="distance text-overflow" style="padding-top: 12rpx;" v-if="item.distance">
<text >距您约{{ item.distance/1000 }}km</text>
</view>
</view>
<view class="bottom"> <view class="bottom">
<view class="distance"> <view class="distance">
<text v-if="item.distance">距您约{{ item.distance/1000 }}km</text>
</view> </view>
<view class="price"> <view class="price">
<!-- {{item.low_money/100}} --> <!-- {{item.low_money/100}} -->
@ -35,9 +44,9 @@
} }
}, },
onReady() { onReady() {
// this.getHeadImg('jiudian').then(res => { this.getHeadImg('food').then(res => {
// this.headImg = res this.headImg = res
// }) })
this.getList() this.getList()
}, },
methods: { methods: {
@ -87,6 +96,15 @@
top: 101rpx; top: 101rpx;
font-size: 40rpx; font-size: 40rpx;
z-index: 2; z-index: 2;
color: white;
background: rgba(0,0,0,0.5);
border-radius: 50%;
width: 60rpx;
height: 60rpx;
text-align: center;
line-height: 60rpx;
box-sizing: border-box;
padding-right: 5rpx;
} }
.topImg { .topImg {
@ -115,7 +133,7 @@
} }
.content { .content {
padding: 6rpx 0; padding:0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
@ -161,7 +179,7 @@
.price { .price {
font-family: PingFang SC; font-family: PingFang SC;
font-weight: bold; font-weight: 500;
font-size: 33.33rpx; font-size: 33.33rpx;
color: #D90F00; color: #D90F00;
display: flex; display: flex;

32
subPackages/hotelHomestay/detail.vue

@ -14,10 +14,10 @@
{{swiperCurrent}}/{{info.list_images.split(',').length}} {{swiperCurrent}}/{{info.list_images.split(',').length}}
</view> </view>
<view class="collect" @click.stop="collect()"> <!-- <view class="collect" @click.stop="collect()">
<image src="https://tongli.sz-trip.com/uploads/20240829/9dbb80cafe8375bd6d5c96fccb617962.png" v-if="info.is_collect"></image> <image src="https://tongli.sz-trip.com/uploads/20240829/9dbb80cafe8375bd6d5c96fccb617962.png" v-if="info.is_collect"></image>
<image src="https://tongli.sz-trip.com/uploads/20240826/564af778708591f5de29174d3b14bbff.png" v-else></image> <image src="https://tongli.sz-trip.com/uploads/20240826/564af778708591f5de29174d3b14bbff.png" v-else></image>
</view> </view> -->
</view> </view>
<view class="detail-container"> <view class="detail-container">
@ -33,7 +33,7 @@
</view> </view>
<view class="policy-btn flex-shrink-0 flex flex-items-center" style="justify-content: flex-end;" @click="goPolicy"> <view class="policy-btn flex-shrink-0 flex flex-items-center" style="justify-content: flex-end;" @click="goPolicy">
设施/政策 设施/政策
<uni-icons color="#71B580" style="height: 35rpx;" type="right" size="12"></uni-icons> <uni-icons color="#248BAA" style="height: 35rpx;" type="right" size="12"></uni-icons>
</view> </view>
</view> </view>
<view class="flex-between"> <view class="flex-between">
@ -42,12 +42,12 @@
{{info.address}} {{info.address}}
</view> </view>
<view class="flex-column flex-center"> <view class="flex-column flex-center">
<image :src="showImg('/uploads/20240827/5b19517f2a630f3a766ea03ac621a3be.png')"> <image :src="showImg('/uploads/20241023/e362e56d876e9dfb8dc65fdeeb9e4cd0.png')">
<view class="tip" style="padding-top: 11rpx;">地图</view> <view class="tip" style="padding-top: 11rpx;">地图</view>
</view> </view>
</view> </view>
<view class="phone-container flex-column flex-center" @click="callPhone"> <view class="phone-container flex-column flex-center" @click="callPhone">
<image :src="showImg('/uploads/20240829/b38a84c91eef12d3040deaef50eaf697.png')"> <image :src="showImg('/uploads/20241023/3e36a30d7e5b7fa4228deb9d39f9e7e1.png')">
<view class="tip" style="padding-top: 11rpx;">电话</view> <view class="tip" style="padding-top: 11rpx;">电话</view>
</view> </view>
@ -60,7 +60,7 @@
<view class="time"> <view class="time">
<view style="font-size: 35rpx;font-weight: bold;">{{new Date(selectDate.startDay).Format('MM-dd')}}</view> <view style="font-size: 35rpx;font-weight: bold;">{{new Date(selectDate.startDay).Format('MM-dd')}}</view>
<view style="padding:0 14rpx">{{ ShowDateDay(new Date(selectDate.startDay).getDay()) }}</view> <view style="padding:0 14rpx">{{ ShowDateDay(new Date(selectDate.startDay).getDay()) }}</view>
<view style="color: #71B580;">入住</view> <view style="color: #999999;">入住</view>
</view> </view>
<view class="cal-day"> <view class="cal-day">
{{selectDate.differDays}} {{selectDate.differDays}}
@ -68,7 +68,7 @@
<view class="time"> <view class="time">
<view style="font-size: 35rpx;font-weight: bold;">{{new Date(selectDate.endDay).Format('MM-dd')}}</view> <view style="font-size: 35rpx;font-weight: bold;">{{new Date(selectDate.endDay).Format('MM-dd')}}</view>
<view style="padding:0 14rpx">{{ShowDateDay(new Date(selectDate.endDay).getDay()) }}</view> <view style="padding:0 14rpx">{{ShowDateDay(new Date(selectDate.endDay).getDay()) }}</view>
<view style="color: #71B580;">离店</view> <view style="color: #999999;">离店</view>
</view> </view>
</view> </view>
<view style="padding:0 34rpx;"> <view style="padding:0 34rpx;">
@ -507,14 +507,14 @@
overflow-x: auto; overflow-x: auto;
.tag{ .tag{
border-radius: 5rpx; border-radius: 5rpx;
border: 1px solid #71B580; border: 1px solid #248BAA;
padding: 7rpx 14rpx; padding: 7rpx 14rpx;
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 500; font-weight: 500;
font-size: 25rpx; font-size: 25rpx;
color: #71B580; color: #248BAA;
text-align: center; text-align: center;
margin-right: 15rpx; margin-right: 15rpx;
flex-shrink: 0; flex-shrink: 0;
@ -529,7 +529,7 @@
font-weight: 500; font-weight: 500;
font-size: 27rpx; font-size: 27rpx;
text-align: right; text-align: right;
color: #71B580; color: #999999;
} }
@ -553,8 +553,8 @@
font-weight: 500; font-weight: 500;
font-size: 27rpx; font-size: 27rpx;
color: #000000; color: #000000;
background-color: #E8F6EB; background-color: #E4F1F5;
background-image: url('https://tongli.sz-trip.com/uploads/20240830/e8089886a03786e925bd4d4bbc441320.png'); background-image: url('https://tlgz.sz-trip.com/uploads/20241023/8281ce2c772077b25ccc403d50784b5a.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
image{ image{
@ -603,7 +603,7 @@
} }
} }
.cal-day{ .cal-day{
background: #E8F6EB; background: #E4F1F5;
border-radius: 17rpx; border-radius: 17rpx;
padding: 5rpx 16rpx; padding: 5rpx 16rpx;
font-family: PingFang SC; font-family: PingFang SC;
@ -671,9 +671,9 @@
font-size: 24rpx; font-size: 24rpx;
color: #666666; color: #666666;
line-height: 33rpx; line-height: 33rpx;
text:last-of-type{ // text:last-of-type{
color: #71B580; // color: #248BAA;
} // }
} }
.price-container{ .price-container{

267
subPackages/hotelHomestay/hotelHomestay.vue

@ -3,37 +3,52 @@
<view class="topImg relative"> <view class="topImg relative">
<img v-if="headImg" :src="showImg(headImg)" class="topImg" mode="aspectFill"> <img v-if="headImg" :src="showImg(headImg)" class="topImg" mode="aspectFill">
<view class="icon-back" :style="{top:systemInfo.textTop,left:'19rpx'}" @click="goBack()" > <view class="icon-back" :style="{top:systemInfo.textTop,left:'19rpx'}" @click="goBack()" >
<uni-icons type="left" size="24" color="#242424"></uni-icons> <uni-icons type="left" size="24" color="#fff"></uni-icons>
</view> </view>
</view> </view>
<view class="goodBox"> <view class="goodBox">
<view class="goodItem flex-column" v-for="(item,index) in list" :key="index" @click="viewDetail(item)"> <view class="type-container">
<view :class="['type',activeType==0?'active':'']" @click="changeActiveType(0)">精选酒店</view>
<view :class="['type',activeType==1?'active':'']" @click="changeActiveType(1)">特色民宿</view>
</view>
<view class="goodItem" v-for="(item,index) in list" :key="index" @click="viewDetail(item)">
<view class="left-image flex-shrink-0 relative"> <view class="left-image flex-shrink-0 relative">
<image class="left-image " :src="showImg(item.image)" mode="aspectFill"></image> <image class="left-image " :src="showImg(item.image)" mode="aspectFill"></image>
<view class="collect" @click.stop="like(item)"> <div class="hot-tag text-overflow" v-if="item.label">{{ item.label.split(',')[0] }}</div>
<image src="https://tongli.sz-trip.com/uploads/20240829/9dbb80cafe8375bd6d5c96fccb617962.png" v-if="item.is_collect"></image> <div class="sale-tag text-overflow">已售{{ item.sales_number || 0 }}</div>
<image src="https://tongli.sz-trip.com/uploads/20240826/564af778708591f5de29174d3b14bbff.png" v-else></image>
</view> </view>
</view> <view class="contentBox flex flex-column flex-1">
<view class="title text-overflowRows">{{item.title}}</view>
<view class="contentBox flex-column flex-1 h-1rpx"> <view class="flex-1 h-1rpx">
<view class="title text-overflow">{{item.title}}</view> <view class="hotel-tags">
<view class="flex-between"> <template v-if="item.product_data">
<view class="flex-1 w-1rpx"> <view class="hotel-item" v-for="(itemShow,indexShow) in item.product_data_show || []" :key="indexShow">
<view class="tag-container no-scrollbar" v-if="item.label"> <view class="hotel-tip" v-if="indexShow<3">{{ itemShow.title }}</view>
<view class="tag" v-for="(tag,tagIndex) in item.label.split(',')" :key="tagIndex">{{tag}}</view> <view class="hotel-info text-overflow" v-if="indexShow<3">{{ itemShow.intro.map(v=>v.title).join("+") }}</view>
</view> </view>
</template>
<view class="hotel-item" v-if="item.address">
<view class="hotel-tip-image">
<img src="https://static.ticket.sz-trip.com/uploads/20240912/a0301af16f413baca5c9e7f36026ab14.png">
</view>
<view class="hotel-info text-overflow">{{ item.address }}</view>
</view> </view>
</view> </view>
</view>
<view class="flex-between"> <view class="flex-between">
<view class="distance">{{item.distance?`距您约${item.distance/1000+'km'}`:''}}</view> <view class="priceBox flex-1 w-1rpx">
<view class="priceBox flex-shrink-0"> 售价
<view class="price">{{item.price/100}}</view> <view class="price">{{item.price/100}}</view>
</view> </view>
<view class="order-btn flex-shrink-0">立即预定</view>
</view> </view>
@ -59,14 +74,13 @@
finished: false, finished: false,
headImg:null, headImg:null,
navList: [], navList: [],
actNavIndex: 0, activeType: 0,
type_id: 11,//id type_id: 11,//id
} }
}, },
onShow() { onShow() {
this.headImg = 'https://tongli.sz-trip.com/uploads/20240826/8653c32761e01ee683505eddba1ae22b.png'
this.finished = false this.finished = false
// this.getHeadImg('piaowu')
}, },
onReady() { onReady() {
this.getList() this.getList()
@ -84,21 +98,18 @@
console.log(that.systemInfo) console.log(that.systemInfo)
} }
}) })
this.getHeadImg('hotel').then(res => {this.headImg = res})
}, },
methods: { methods: {
changeActiveType (val) {
getHeadImg(type){ if (val!=this.activeType) {
this.headImg = null this.activeType = val
this.Post( this.list = []
{ this.getList()
type, }
},
'https://yjdtadmin.sz-trip.com/api/public_service/getKumgangHeadImgList'
).then(res => {
this.headImg = res.data[0].image
});
}, },
// //
getList(){ getList(){
this.Post({ this.Post({
@ -107,7 +118,25 @@
lat: uni.getStorageSync('location').lat || '30', lat: uni.getStorageSync('location').lat || '30',
}, },
'/api/Scenic/getScenicByType').then(res => { '/api/Scenic/getScenicByType').then(res => {
this.list = [...this.list, ...res.data]; let resData = res.data || []
resData.forEach(v=>{
// todo
// v.product_data = [{"title":"","intro":"[{\"title\":\"/1\",\"unit\":\"1\"}]"},{"title":"","intro":"[{\"title\":\"/\",\"unit\":\"2\"}]"},{"title":"","intro":"[{\"title\":\"\",\"unit\":\"2\"},{\"title\":\"\",\"unit\":\"2\"},{\"title\":\"\",\"unit\":\"2\"}]"},{"title":"","intro":"[{\"title\":\"\",\"unit\":\"\"},{\"title\":\"\",\"unit\":\"\"}]"}]
v.product_data_show = []
if (v.product_data) {
try{
v.product_data.forEach(x=>{
let [title,intro] = Object.entries(x)[0]
intro = JSON.parse(intro)
v.product_data_show.push({title: title, intro:intro})
})
} catch (e) {
console.log(v)
}
}
})
console.log(resData)
this.list = [...this.list, ...resData];
if (res.data.length < 10) { if (res.data.length < 10) {
this.finished = true this.finished = true
} }
@ -155,7 +184,7 @@
} }
.bg{ .bg{
min-height: 100vh; min-height: 100vh;
background: #FFFFFF; background: #F5F5F5;;
} }
.topImg{ .topImg{
width: 100%; width: 100%;
@ -165,6 +194,11 @@
display: flex; display: flex;
align-items: center; align-items: center;
z-index: 50; z-index: 50;
background: rgba(0,0,0,0.5);
border-radius: 50%;
width: 60rpx;
height: 60rpx;
padding-left: 5rpx;
} }
} }
@ -172,47 +206,91 @@
.goodBox{ .goodBox{
width: 100%; width: 100%;
z-index: 2; z-index: 2;
position: relative;
padding: 26rpx; padding: 26rpx;
padding-top: 0;
margin-top: -36rpx;
.type-container{
width: 532rpx;
height: 73rpx;
margin: 0 auto;
display: flex;
border-radius: 13rpx;
overflow: hidden;
margin-bottom: 26rpx;
.type{
flex: 1;
text-align: center;
line-height: 73rpx;
font-weight: bold;
font-size: 31rpx;
background: #FFFFFF;
color: #000000;
}
.type.active{
color: #FFFFFF;
background: #248BAA;
}
}
.goodItem{ .goodItem{
width: 100%; width: 100%;
height: 525rpx; height: 400rpx;
background: #FFFFFF; background: #FFFFFF;
box-shadow: 0rpx 0rpx 9rpx 0rpx rgba(153,153,153,0.38);
margin-bottom: 26rpx; margin-bottom: 26rpx;
border-radius: 13rpx; border-radius: 13rpx;
display: flex;
.left-image{ .left-image{
width: 100%; width: 266rpx;
height: 321rpx; height: 100%;
border-radius: 13rpx 13rpx 0rpx 0rpx; border-radius: 13rpx 0rpx 13rpx 0rpx;
flex-shrink: 0;
.collect{ .hot-tag{
position: absolute; position: absolute;
top: 22rpx; top: 0;
right: 22rpx; left: 0;
width: 51rpx; font-family: DingTalk JinBuTi;
height: 51rpx; font-weight: 400;
background: rgba(0,0,0,0.5); font-size: 28rpx;
border-radius: 50%; color: #FFFFFF;
display: flex; background: linear-gradient(-90deg,#FF413B, #FFAB2E);
align-items: center; border-radius: 13rpx 0rem 13rpx 0rem;
justify-content: center; padding: 0 21rpx;
image{ line-height: 44rpx;
width: 35rpx; height: 44rpx;
height: 35rpx; max-width: 100%;
} }
.sale-tag{
position: absolute;
bottom: 0;
left: 0;
right: 0;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
height: 47rpx;
padding: 6rpx 21rpx;
background: linear-gradient(90deg,rgba(0,0,0,0.5), rgba(0,0,0,0));
border-radius: 0rem 0rem 0rem 13rpx;
} }
} }
.contentBox{ .contentBox{
flex: 1;
width: 1rpx;
height: 100%;
padding:19rpx 26rpx; padding:19rpx 26rpx;
width: 100%;
justify-content: space-between; justify-content: space-between;
.title{ .title{
width: 100%; width: 100%;
font-weight: bold; font-weight: 500;
font-size: 31rpx; font-size: 33rpx;
color: #000000; color: #000000;
} }
@ -220,30 +298,20 @@
display: flex; display: flex;
flex-wrap: nowrap; flex-wrap: nowrap;
overflow-x: auto; overflow-x: auto;
.tag{
background: rgba(205,233,209,0.3);
border-radius: 7rpx 5rpx 5rpx 7rpx;
border: 1px solid rgba(135,205,147,0.3);
padding: 4rpx 14rpx;
font-weight: 500;
font-size: 25rpx;
color: #5BA06A;
text-align: center;
margin-right: 12rpx;
flex-shrink: 0;
}
} }
.priceBox{ .priceBox{
width: 120rpx; padding-right: 15rpx;
color: #000000;
font-size: 24rpx;
.price{ .price{
font-family: PingFang SC; font-family: PingFang SC;
font-weight: bold; font-weight: bold;
font-size: 33rpx; font-size: 38rpx;
color: #F02A2A; color: #F02A2A;
text-align: right; display: inline-block;
} }
.price::before{ .price::before{
content: '¥'; content: '¥';
@ -252,30 +320,69 @@
} }
.price::after{ .price::after{
content: '起'; content: '起';
color: #999; color: #000000;
font-size: 24rpx; font-size: 24rpx;
font-weight: normal; font-weight: normal;
} }
} }
.distance{
font-family: PingFang SC;
font-weight: 500;
font-size: 27rpx;
color: #999999;
}
.order-btn{ .order-btn{
width: 173rpx; width: 147rpx;
height: 55rpx; height: 53rpx;
background: #70B57F; background: linear-gradient(-90deg, #EA280F, #FC5109, #FC930A);
border-radius: 27rpx 27rpx 27rpx 27rpx; border-radius: 27rpx;
font-weight: bold; font-weight: bold;
font-size: 29rpx; font-size: 28rpx;
color: #FFFFFF; color: #FFFFFF;
text-align: center; text-align: center;
line-height: 55rpx; line-height: 53rpx;
}
}
} }
.hotel-tags{
width: 100%;
padding: 25rpx 0;
.hotel-item{
display: flex;
align-items: center;
width: 100%;
margin-bottom:6rpx;
}
.hotel-tip{
width: 33rpx;
height: 33rpx;
background: #248BAA;
border-radius: 50%;
flex-shrink: 0;
margin-right: 8rpx;
font-weight: 500;
font-size: 23rpx;
color: #FFFFFF;
text-align: center;
line-height: 33rpx;
}
.hotel-tip-image{
width: 33rpx;
height: 33rpx;
margin-right: 8rpx;
text-align: center;
line-height: 33rpx;
img{
width: 17rpx;
height: 21rpx;
}
}
.hotel-info{
font-family: PingFang SC;
font-weight: 500;
font-size: 23rpx;
color: #666666;
flex: 1;
width: 1px;
height: 33rpx;
} }
} }
} }

131
subPackages/hotelHomestay/order.vue

@ -6,7 +6,7 @@
<view class="info-title text-overflowRows">{{skuInfo.title}}</view> <view class="info-title text-overflowRows">{{skuInfo.title}}</view>
<view class="policy-btn flex-shrink-0 flex flex-items-center" @click="openPopRule"> <view class="policy-btn flex-shrink-0 flex flex-items-center" @click="openPopRule">
房型信息 房型信息
<uni-icons color="#71B580" style="height: 32rpx;" type="right" size="12"></uni-icons> <uni-icons color="#248BAA" style="height: 32rpx;" type="right" size="12"></uni-icons>
</view> </view>
</view> </view>
@ -34,7 +34,7 @@
<view class="notice-container"> <view class="notice-container">
<view class="flex"> <view class="flex">
<view class="flex-shrink-0" style="padding-top: 4rpx;"> <view class="flex-shrink-0" style="padding-top: 4rpx;">
<image :src="showImg('/uploads/20240830/aa84c8b1de80651f645fed67a1997ced.png')"></image> <image :src="showImg('/uploads/20241023/f83bb90072f1ef5773e69d0f6a9b119b.png')"></image>
</view> </view>
<view class="flex-1 w-1rpx" style="padding-left: 14rpx;"> <view class="flex-1 w-1rpx" style="padding-left: 14rpx;">
<view>订单确认后您在{{new Date(selectDate.startDay).Format('yyyy年MM月dd日')}}20:00前之免费取消或 变更订单20:00后将收取30%房费作为违约费用</view> <view>订单确认后您在{{new Date(selectDate.startDay).Format('yyyy年MM月dd日')}}20:00前之免费取消或 变更订单20:00后将收取30%房费作为违约费用</view>
@ -44,7 +44,7 @@
<view class="flex" style="padding-top: 22rpx;"> <view class="flex" style="padding-top: 22rpx;">
<view class="flex-shrink-0" style="padding-top: 4rpx;"> <view class="flex-shrink-0" style="padding-top: 4rpx;">
<image :src="showImg('/uploads/20240830/59d2f01f0391f72a537cc9004bc2071d.png')"></image> <image :src="showImg('/uploads/20241023/f83bb90072f1ef5773e69d0f6a9b119b.png')"></image>
</view> </view>
<view class="flex-1 w-1rpx" style="padding-left: 14rpx;"> <view class="flex-1 w-1rpx" style="padding-left: 14rpx;">
<view>证件要求大陆居民身份证登记入住</view> <view>证件要求大陆居民身份证登记入住</view>
@ -87,6 +87,19 @@
</view> </view>
</view> </view>
<view @click="goOrderCoupon" class="common-container tickets-box flex-between">
<view class="order-title">优惠券</view>
<view class="coupon-btn" v-if="coupon==''">
<view class="select">选择优惠券</view>
<uni-icons style="height: 42rpx;" color="#999999" type="right" size="18"></uni-icons>
</view>
<div class="coupon-price" v-else>
<span v-if="coupon.percent == 0">-{{coupon.discounts/100}}</span>
<span v-else>-{{coupon.percent}}%</span>
<span style="margin:0 31rpx 0 8rpx;color: #6C7A94;">></span>
</div>
</view>
</view> </view>
@ -158,17 +171,52 @@
name: '' name: ''
}], }],
allSeldDate: [] allSeldDate: [],
coupon: "",
} }
}, },
onShow(options) { onShow(options) {
this.coupon = this.$store.state.user.coupon
}, },
onLoad(options) { onLoad(options) {
this.$store.commit("choseCoupon", "");
this.initOrderDate() this.initOrderDate()
}, },
onReady () {
this.$nextTick(()=>{
setTimeout(()=>{
this.getMaxCouponData()
},1000)
})
},
methods: { methods: {
goOrderCoupon () {
let disfferMoney = 0
this.allSeldDate.forEach(v=>{
disfferMoney+=(v.money||0)
})
let allPrice = ((disfferMoney * this.buyNum) || 0).toFixed(2)
uni.navigateTo({
url: `/subPackages/order/orderCoupon?allprice=${allPrice}&sku_ids=${this.skuInfo.id}`
})
},
//
async getMaxCouponData () {
let disfferMoney = 0
this.allSeldDate.forEach(v=>{
disfferMoney+=(v.money||0)
})
let allPrice = ((disfferMoney * this.buyNum) || 0).toFixed(2)
let param = {money:allPrice,sku_ids:this.skuInfo.id}
let res = await this.getMaxCoupon(param)
if (res.id) {
this.coupon = res
}
},
popSwiperChange (e) { popSwiperChange (e) {
this.popSwiperCurrent = e.detail.current+1 this.popSwiperCurrent = e.detail.current+1
}, },
@ -185,8 +233,6 @@
},1000) },1000)
} }
this.skuInfo = data.skuInfo this.skuInfo = data.skuInfo
this.selectDate = data.selectDate this.selectDate = data.selectDate
this.buyNum = 1 this.buyNum = 1
@ -223,8 +269,23 @@
this.allSeldDate.forEach(v=>{ this.allSeldDate.forEach(v=>{
disfferMoney+=(v.money||0) disfferMoney+=(v.money||0)
}) })
let allPrice = (disfferMoney * this.buyNum)
return ((disfferMoney/100 * this.buyNum) || 0).toFixed(2) let price = 0
if (this.coupon) {
if (this.coupon.percent == 0) {
if (this.coupon.discounts>allPrice) {
price =0
}else{
price = allPrice - (this.coupon.discounts)
}
} else{
// bug
price = (allPrice ) - (allPrice * this.coupon.percent/100)
}
} else {
price = allPrice
}
return price < 0 ? 0 : (price/100).toFixed(2)
}, },
order () { order () {
@ -457,7 +518,7 @@
} }
.notice-container{ .notice-container{
background:rgba(232, 246, 235, 0.7); background:#E4F1F5;
border-radius: 13rpx; border-radius: 13rpx;
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 500; font-weight: 500;
@ -484,7 +545,7 @@
} }
} }
.cal-day{ .cal-day{
background: #E8F6EB; background: #E4F1F5;
border-radius: 17rpx; border-radius: 17rpx;
padding: 5rpx 16rpx; padding: 5rpx 16rpx;
font-family: PingFang SC; font-family: PingFang SC;
@ -540,7 +601,7 @@
.btn { .btn {
width: 294rpx; width: 294rpx;
height: 88rpx; height: 88rpx;
background: #F84A56; background: linear-gradient(-90deg, #FC5109, #FC930A);
border-radius: 43rpx; border-radius: 43rpx;
text-align: center; text-align: center;
line-height: 88rpx; line-height: 88rpx;
@ -565,11 +626,11 @@
font-size: 36rpx; font-size: 36rpx;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
color: #fc5109; color: #F84A56;
&:before { &:before {
content: '¥'; content: '¥';
display: inline-block; display: inline-block;
color: #fc5109; color: #F84A56;
font-size: 36rpx; font-size: 36rpx;
} }
} }
@ -628,7 +689,7 @@
.ctrl { .ctrl {
width: 47rpx; width: 47rpx;
height: 47rpx; height: 47rpx;
background: #71B580; background: #248BAA;
border-radius: 50%; border-radius: 50%;
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 400; font-weight: 400;
@ -642,4 +703,46 @@
color: #999999; color: #999999;
} }
} }
.tickets-box {
width: 698rpx;
margin: 26rpx auto 0;
border-radius: 13rpx;
background: #fff;
height: 120rpx;
.order-title {
margin: 31rpx 0 31rpx 30rpx;
font-size: 31rpx;
font-family: PingFang SC;
font-weight: bold;
color: #000000;
}
.coupon-price {
color:#DD0000;
font-size: 30rpx;
font-weight: 500;
}
.coupon-btn {
color: #999999;;
display: flex;
align-items: center;
.select {
display: block;
width: 153rpx;
height: 40rpx;
background: #EE3E3B;
border-radius: 9rpx;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
text-align: center;
line-height: 40rpx;
font-family: PingFang SC;
margin-right: 20rpx;
}
}
}
</style> </style>

2
subPackages/hotelHomestay/policy.vue

@ -8,7 +8,7 @@
联系电话{{info.tel}} 联系电话{{info.tel}}
</view> </view>
<view @click="callPhone"> <view @click="callPhone">
<image :src="showImg('/uploads/20240830/8b5750ff23837fe4a187e13775f9424c.png')"> <image :src="showImg('/uploads/20241023/3e36a30d7e5b7fa4228deb9d39f9e7e1.png')">
</view> </view>
</view> </view>
</view> </view>

6
subPackages/hotelHomestay/selectCalendar.vue

@ -4,7 +4,7 @@
<!--如果需要solt--> <!--如果需要solt-->
<!--用法二当mode=23的模式下分别为酒店\往返的离开日期--> <!--用法二当mode=23的模式下分别为酒店\往返的离开日期-->
<Calendar @click="tip" :is-show="true" :start-date="startDate" :end-date="endDate" mode="2" :title="'日期选择'" <Calendar @click="tip" :is-show="true" :start-date="startDate" :end-date="endDate" mode="2" :title="'日期选择'"
@callback="getDate" :transition="'slide'" :theme-color="'#71B580'" /> @callback="getDate" :transition="'slide'" :theme-color="'#248BAA'" />
<div class="btn" @click="determine()"> <div class="btn" @click="determine()">
确定 确定
</div> </div>
@ -59,13 +59,13 @@
.btn { .btn {
width: 697rpx; width: 697rpx;
height: 80rpx; height: 80rpx;
background: linear-gradient(90deg, #9EE4FE, #7FD491); background: #248BAA;
border-radius: 40rpx; border-radius: 40rpx;
line-height: 80rpx; line-height: 80rpx;
font-size: 36rpx; font-size: 36rpx;
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 500; font-weight: 500;
color: #000000; color: #FFFFFF;
text-align: center; text-align: center;
position: fixed; position: fixed;
bottom: 30rpx; bottom: 30rpx;

6
subPackages/order/orderCoupon.vue

@ -24,7 +24,7 @@
{{item.open_time.slice(0,10)}}-{{item.end_time.slice(0,10)}}可用 {{item.open_time.slice(0,10)}}-{{item.end_time.slice(0,10)}}可用
</view> </view>
</view> </view>
<image class="selected" v-if="item.selected" @click="selectCoupon(item,index)" src="https://yjks.oss-cn-shanghai.aliyuncs.com/uploads/20230418/c588002859433c217602260b0228b977.png" mode=""></image> <image class="selected" v-if="item.selected" @click="selectCoupon(item,index)" :src="showImg('/uploads/20241024/3ef19d6740101142beb51f51ae9ef9f3.png')" mode=""></image>
<view v-else class="yuan" @click="selectCoupon(item,index)"></view> <view v-else class="yuan" @click="selectCoupon(item,index)"></view>
</view> </view>
<!-- 分割线 --> <!-- 分割线 -->
@ -46,7 +46,7 @@
</view> </view>
<view v-else class="noCoupon"> <view v-else class="noCoupon">
<img :src="showImg('/uploads/20240902/376de17481e3010f50305be570009745.png')" class="no-couPon"> <img src="https://static.ticket.sz-trip.com/tongli/images/user/couponNo.png" class="no-couPon">
<view>暂无优惠券</view> <view>暂无优惠券</view>
</view> </view>
@ -361,7 +361,7 @@
.yuan { .yuan {
width: 37rpx; width: 37rpx;
height: 37rpx; height: 37rpx;
border: 1px solid #FC5209; border: 1px solid #999999;
border-radius: 20rpx; border-radius: 20rpx;
margin-right: 16rpx; margin-right: 16rpx;
} }

12
subPackages/search/search.vue

@ -95,7 +95,7 @@
width: 697rpx; width: 697rpx;
height: 68rpx; height: 68rpx;
margin: 34rpx auto; margin: 34rpx auto;
border-radius: 60rpx; border-radius: 13rpx;
padding: 6rpx 7rpx 6rpx 26rpx; padding: 6rpx 7rpx 6rpx 26rpx;
font-size: 26rpx; font-size: 26rpx;
display: flex; display: flex;
@ -119,8 +119,8 @@
} }
.search-box .btn { .search-box .btn {
background-color: #00AAFF; background: #248BAA;
border-radius: 27rpx; border-radius: 7rpx;
font-size: 28rpx; font-size: 28rpx;
color: #FFFFFF; color: #FFFFFF;
padding: 10rpx 26rpx; padding: 10rpx 26rpx;
@ -149,10 +149,10 @@
.search-item { .search-item {
padding: 0 25rpx; padding: 0 25rpx;
font-size: 24rpx; font-size: 24rpx;
color: #333; color: #000;
line-height: 42rpx; line-height: 42rpx;
border-radius: 20rpx; border-radius: 7rpx;
background: #ECECEC; background: #F1F1F1;
margin-right: 22rpx; margin-right: 22rpx;
margin-bottom: 23rpx; margin-bottom: 23rpx;
} }

274
subPackages/search/searchList.vue

@ -1,26 +1,77 @@
<template> <template>
<div class="bg"> <div class="bg">
<title-header title='搜索'></title-header> <title-header title='搜索'></title-header>
<view class="top-bg">
<div class="search-box"> <div class="search-box">
<img src="https://static.ticket.sz-trip.com/taizhou/images/search.png" alt=""> <img src="https://static.ticket.sz-trip.com/taizhou/images/search.png" alt="">
<input type="text" class="input" placeholder="请输入关键字" v-model="keywords" @confirm="search" /> <input type="text" class="input" placeholder="请输入关键字" v-model="keywords" @confirm="search" />
<div class="btn" @click="search()">搜索</div> <div class="btn" @click="search()">搜索</div>
</div> </div>
<view class="common-box">
<view class="common-types com-flex-tao">
<view @click="setType(index)" v-for="(item, index) in typeList" :key="item.id"
:class="['common-type', typeIndex == index ? 'active' : '']">
{{ item.name }}
</view>
</view>
</view>
</view>
<div class="search-list"> <div class="search-list">
<div @click="gotoDetail(item)" v-for="(item, key) in list" :key="item.id" class="search-item"> <view @click="gotoDetail(item)" v-for="(item, key) in list" :key="item.id" class="search-item">
<p class="search-title"> <image class="img" :src="showImg(item.image)" mode=""></image>
<view class="content">
<view class="title text-overflowRows">
{{item.title}} {{item.title}}
</p> </view>
<p class="search-tip"> <!-- 美食 -->
{{item.search_data ? item.search_data.type_name || item.search_data.article_type_text || item.search_data.scenic_type_text : ''}} <view v-if="item.search_data.genre=='food'">
| {{types[item.type]}} <view class="distance text-overflow" v-if="item.open_description">
</p> <image :src="showImg('/uploads/20241024/bd5ef34fb88f8aee2c444512a5311c79.png')" class="icon-tip"></image>
</div> <text>营业时间{{ item.open_description }}</text>
</view>
</view>
<view class="bottom" v-if="['ticket','hotel','pgoods'].includes(item.search_data.genre)">
<view class="distance text-overflow" style="padding-top: 12rpx;" >
<image v-if="item.search_data.address" :src="showImg('/uploads/20241024/b7d33bf405526f09212ff3d9485e6d06.png')" class="icon-tip"></image>
<text v-if="item.search_data.address">{{item.search_data.address}}</text>
</view>
<view class="price ticlet-price">
{{item.search_data.money/100}}
</view>
</view>
<view class="bottom" v-else-if="item.search_data.genre=='food'">
<view class="distance text-overflow" style="padding-top: 12rpx;" >
<image :src="showImg('/uploads/20241024/bd5ef34fb88f8aee2c444512a5311c79.png')" class="icon-tip"></image>
<text v-if="item.search_data.distance">距您约{{ item.search_data.distance/1000 }}km</text>
</view>
<view class="price food-price">
{{item.money/100}}
</view>
</view>
<view class="bottom" v-else>
<view class="distance text-overflow" style="padding-top: 12rpx;" >
<image :src="showImg('/uploads/20241024/852c8a49a8d78410bebd93b02c9e41a4.png')" class="icon-tip"></image>
<text >同里文旅</text>
</view>
<view class="view-num flex-between flex-shrink-0">
<image :src="showImg('/uploads/20241024/4226315bfd2eac83e90746295851966a.png')" class="icon-tip"></image>
<text class="distance">{{iem.search_data.view||0}}</text>
</view>
</view>
</view>
</view>
<div class="list-common-empty" v-if="!showMore">
<p class="list-common-empty-tip"> 暂无更多 </p>
</div> </div>
<div class="list-common-empty" v-if="list.length==0">
<img src="https://static.ticket.sz-trip.com/taizhou/images/noData.png" />
<p class="list-common-empty-tip">暂无内容</p>
</div> </div>
</div> </div>
</template> </template>
@ -29,6 +80,33 @@
name: "Search", name: "Search",
data() { data() {
return { return {
typeList: [{
id: 'ALL',
name: '全部'
},
{
id: 'WAIT_PAYMENT',
name: '景点'
},
{
id: 'PAYMENT_SUCCESSFULLY',
name: '美食'
},
{
id: 'PAYMENT_SUCCESSFULLY',
name: '酒店'
},
{
id: 'POST',
name: '资讯'
},
{
id: 'WAIT_REFUND,REFUND_SUCCESS,REFUND_REFUSAL,REFUND_ERROR,REFUND_PART',
name: '攻略'
}
],
typeIndex: 0,
showMore: true,
list: [], list: [],
keywords: "", keywords: "",
ajaxFlag: true, ajaxFlag: true,
@ -47,6 +125,14 @@
this.getList() this.getList()
}, },
methods: { methods: {
setType(index) {
if (this.typeIndex!==index) {
this.typeIndex = index;
this.list = []
this.getList()
}
},
search() { search() {
this.pushHis(this.keywords); this.pushHis(this.keywords);
this.list = []; this.list = [];
@ -71,23 +157,42 @@
offset: this.list.length, offset: this.list.length,
limit: 30, limit: 30,
}, '/api/search/search').then(res => { }, '/api/search/search').then(res => {
res.data.forEach(v=>{
if (v.type!=='goods') {
v.search_data.genre = v.type
}
})
this.list = [...this.list, ...res.data]; this.list = [...this.list, ...res.data];
this.showMore = true
if (res.data.length<30) {
this.showMore = false
}
}) })
} }
}, },
onReachBottom() {
setTimeout(() => {
if (this.showMore) this.getList()
},1000)
}
} }
</script> </script>
<style scoped> <style lang="scss" scoped>
.bg { .bg {
min-height: 100vh; min-height: 100vh;
background: #F7F7F7;
// padding: 0 30rpx;
}
.top-bg{
background: white; background: white;
padding: 0 30rpx; padding: 0 30rpx;
} }
.search-box { .search-box {
width: 697rpx; width: 697rpx;
height: 68rpx; height: 68rpx;
margin: 34rpx auto; margin: 34rpx auto 20rpx;
border-radius: 60rpx; border-radius: 13rpx;
padding: 6rpx 7rpx 6rpx 26rpx; padding: 6rpx 7rpx 6rpx 26rpx;
font-size: 26rpx; font-size: 26rpx;
display: flex; display: flex;
@ -111,34 +216,81 @@
} }
.search-box .btn { .search-box .btn {
background-color: #00AAFF; background-color: #248BAA;
border-radius: 27rpx; border-radius: 7rpx;
font-size: 28rpx; font-size: 28rpx;
color: #FFFFFF; color: #FFFFFF;
padding: 10rpx 26rpx; padding: 10rpx 26rpx;
} }
.search-list {} .search-list {
padding: 0 30rpx;
padding-bottom: 30rpx;
}
.search-item { .search-item {
width: 100%;
height: 200rpx;
background: #FFFFFF;
border-radius: 13rpx;
display: flex; display: flex;
align-items: center; margin: 26rpx 0rpx;
justify-content: space-between; .img {
padding: 38rpx 0; width: 200rpx;
border-bottom: 1px solid #d9d9d9; height: 200rpx;
background: #87CD93;
border-radius: 13rpx;
flex-shrink: 0;
} }
.search-title { .content {
font-size: 30rpx; padding:13rpx 20rpx;
line-height: 36rpx; display: flex;
flex-direction: column;
justify-content: space-between;
flex: 1;
}
.title {
font-family: PingFang SC;
font-weight: bold;
font-size: 31rpx;
color: #000000;
width: 100%;
}
.distance {
font-family: PingFang SC;
font-weight: 500;
font-size: 27rpx;
color: #666666;
display: flex;
align-items: center;
flex: 1;
width: 1rpx;
padding-right: 10rpx;
} }
.search-tip { .price {
flex-shrink: 0; font-family: PingFang SC;
margin-left: 30rpx; font-weight: 500;
flex-shrink: 26rpx; font-size: 33.33rpx;
color: #656565; color: #D90F00;
display: flex;
align-items: baseline;
}
.price::before{
content: '¥';
font-size: 24rpx;
}
.ticlet-price::after{
content: '起';
font-size: 24rpx;
} }
.food-price::after{
content: '/人';
font-size: 24rpx;
}
}
.list-common-empty{ .list-common-empty{
display: flex; display: flex;
align-items: center; align-items: center;
@ -149,4 +301,68 @@
.list-common-empty-tip{ .list-common-empty-tip{
color:#999; color:#999;
} }
.common-box {
height: 90rpx;
.common-types {
background: white;
height: 90rpx;
font-size: 31rpx;
z-index: 10;
margin: auto;
color: #666;
overflow-x: scroll;
overflow-y: hidden;
padding: 0;
display: flex;
}
.common-types::-webkit-scrollbar {
width: 0rpx;
height: 0;
display: none;
}
.common-type {
flex-shrink: 0;
margin: 0 26rpx;
line-height: 90rpx;
height: 90rpx;
position: relative;
color: #000000;
}
.common-type.active {
font-size: 31rpx;
font-weight: bold;
color: #000000;
}
.common-type.active:after {
display: block;
width: 60%;
font-size: 0;
content: '1';
margin: auto;
position: absolute;
left: 0;
right: 0;
bottom: 1rpx;
height: 4rpx;
background: #248BAA;
border-radius: 2rpx;
}
}
.icon-tip{
width: 26rpx;
height: 26rpx;
margin-right: 6rpx;
}
.bottom{
display: flex;
justify-content: space-between;
align-items: center;
}
</style> </style>

8
subPackages/techan/detail.vue

@ -57,16 +57,16 @@
<view class="btn-list" v-if="!paramData.showCart"> <view class="btn-list" v-if="!paramData.showCart">
<view class="left-box"> <view class="left-box">
<view class="img-box" slot="content"> <view class="img-box" slot="content" v-if="is_post==1">
<uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small" <uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small"
:custom-style="{background:'#F7F7F7',color:'#F84A56',border:'1px solid #F84A56'}"> :custom-style="{background:'#F7F7F7',color:'#F84A56',border:'1px solid #F84A56'}">
<image @click.stop="showCartClick" src="https://yjdtadmin.sz-trip.com/uploads/20240726/76702dae980283c24f9d471262f0cbbe.png" mode="aspectFill" <image @click.stop="showCartClick" :src="showImg('/uploads/20241023/0a20db04ed7201577cfe4886baa304c0.png')" mode="aspectFill"
style="width: 78rpx;height: 78rpx;"></image> style="width: 78rpx;height: 78rpx;"></image>
</uni-badge> </uni-badge>
</view> </view>
<button id="contact" open-type="contact" bindcontact="handleContact" session-from="sessionFrom"> <button id="contact" open-type="contact" bindcontact="handleContact" session-from="sessionFrom">
<view class="img-box"> <view class="img-box">
<image src="https://tongli.sz-trip.com/uploads/20240827/ae5fd4482c56e2655ecae6059171aab0.png" <image :src="showImg('/uploads/20241023/c5686c6abd8ff8370ca65e0d129566cf.png')"
mode="aspectFill"></image> mode="aspectFill"></image>
<view class="text"> <view class="text">
客服 客服
@ -90,7 +90,7 @@
<view class="img-box" slot="content"> <view class="img-box" slot="content">
<uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small" <uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small"
:custom-style="{background:'#F7F7F7',color:'#F84A56',border:'1px solid #F84A56'}"> :custom-style="{background:'#F7F7F7',color:'#F84A56',border:'1px solid #F84A56'}">
<image @click.stop="showCartClick" src="https://yjdtadmin.sz-trip.com/uploads/20240726/76702dae980283c24f9d471262f0cbbe.png" mode="aspectFill" <image @click.stop="showCartClick" :src="showImg('/uploads/20241023/0a20db04ed7201577cfe4886baa304c0.png')" mode="aspectFill"
style="width: 78rpx;height: 78rpx;"></image> style="width: 78rpx;height: 78rpx;"></image>
</uni-badge> </uni-badge>
</view> </view>

4
subPackages/techan/order.vue

@ -279,8 +279,8 @@ export default {
let skuIds= [] let skuIds= []
this.info.goods.forEach(v=>{ this.info.goods.forEach(v=>{
allPrice+= v.skuInfo.money*v.skuInfo.buyNum allPrice+= v.skuInfo.money*v.skuInfo.buyNum
if (v.buyNum>0) { if (v.skuInfo.buyNum>0) {
skuIds.push(v.id) skuIds.push(v.skuInfo.id)
} }
}) })
uni.navigateTo({ uni.navigateTo({

6
subPackages/techan/selfPickUpPoint.vue

@ -11,7 +11,7 @@
</view> </view>
<view class="item-point-guide" @click.stop="goMap(item)"> <view class="item-point-guide" @click.stop="goMap(item)">
<view> <view>
<image :src="showImg('/uploads/20240828/0c74764788025234dccf52e91ac8e706.png')" mode="aspectFill" class="mapPoint"></image> <image :src="showImg('/uploads/20241023/606371911c72c189c4d418a51387a139.png')" mode="aspectFill" class="mapPoint"></image>
</view> </view>
<view>去这里</view> <view>去这里</view>
</view> </view>
@ -179,8 +179,8 @@
font-size: 24rpx; font-size: 24rpx;
} }
.mapPoint{ .mapPoint{
width: 45rpx; width: 33rpx;
height: 49rpx; height: 33rpx;
} }
} }
.item-bg.active{ .item-bg.active{

38
subPackages/techan/techanList.vue

@ -1,11 +1,17 @@
<template> <template>
<view class="bg"> <view class="bg">
<span class="iconfont topLeft" @click="goBack">&#xe660;</span> <span class="iconfont topLeft" @click="goBack">&#xe660;</span>
<img :src="showImg('/uploads/20240924/4a580d7089dbdb07f830909c25f0f751.jpg')" class="topImg" /> <img :src="showImg(headImg)" class="topImg" />
<view class="type-container"> <view class="type-container">
<view class="send-type-container"> <view class="send-type-container">
<view :class="['type',type1==0?'active':'']" @click.stop="changeType('type1',0)">自提专区</view> <view :class="['type',type1==0?'active':'']" @click.stop="changeType('type1',0)">
<view :class="['type',type1==1?'active':'']" @click.stop="changeType('type1',1)">邮寄专区</view> <image :src="showImg(type1==0?'/uploads/20241023/0d46c6d4ba08c7eb428770d27abf90aa.png':'/uploads/20241023/fbc0d085d012bdad49d865c5aa85f4a9.png')"></image>
自提专区
</view>
<view :class="['type',type1==1?'active':'']" @click.stop="changeType('type1',1)">
<image :src="showImg(type1==1?'/uploads/20241023/fbc0d085d012bdad49d865c5aa85f4a9.png':'/uploads/20241023/867aefeb3cccf11a3fa88c5a797c57be.png')"></image>
邮寄专区
</view>
</view> </view>
<view class="goods-type-container"> <view class="goods-type-container">
@ -27,7 +33,7 @@
立即购买 立即购买
</view> </view>
<view class="buy-cart" v-show="type1==1" @click.stop="showOrderCart(item)"> <view class="buy-cart" v-show="type1==1" @click.stop="showOrderCart(item)">
<image :src="showImg('/uploads/20241023/3a0fafaf120c9a1bdd90d44fe465e1f6.png')"></image>
</view> </view>
</view> </view>
</view> </view>
@ -43,7 +49,7 @@
<uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small" <uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small"
:custom-style="{background:'#F7F7F7',color:'#F84A56',border:'1px solid #F84A56'}"> :custom-style="{background:'#F7F7F7',color:'#F84A56',border:'1px solid #F84A56'}">
<view class="img-box" @click.stop="showCartClick"> <view class="img-box" @click.stop="showCartClick">
<image src="https://yjdtadmin.sz-trip.com/uploads/20240726/76702dae980283c24f9d471262f0cbbe.png" mode="aspectFill"></image> <image :src="showImg('/uploads/20241023/0a20db04ed7201577cfe4886baa304c0.png')" mode="aspectFill"></image>
</view> </view>
</uni-badge> </uni-badge>
<view class="bottom-price"> <view class="bottom-price">
@ -134,6 +140,8 @@
components: {cartDataVue}, components: {cartDataVue},
data() { data() {
return { return {
headImg: null,
type1:0, type1:0,
type2:0, type2:0,
list:[], list:[],
@ -148,6 +156,10 @@
cartDataVueShow: false cartDataVueShow: false
} }
}, },
onLoad(options) {
this.getHeadImg("techan").then(res => {this.headImg = res})
},
onReady() { onReady() {
this.getList() this.getList()
}, },
@ -296,6 +308,15 @@
top: 101rpx; top: 101rpx;
font-size: 40rpx; font-size: 40rpx;
z-index: 2; z-index: 2;
color: white;
background: rgba(0,0,0,0.5);
border-radius: 50%;
width: 60rpx;
height: 60rpx;
text-align: center;
line-height: 60rpx;
box-sizing: border-box;
padding-right: 5rpx;
} }
.topImg { .topImg {
@ -382,7 +403,7 @@
.buy-cart{ .buy-cart{
width: 42rpx; width: 42rpx;
height: 42rpx; height: 42rpx;
imgae{ image{
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
@ -415,6 +436,11 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
image{
width: 25rpx;
height: 25rpx;
margin-right: 13rpx;
}
} }
.type.active{ .type.active{
color: #FFFFFF; color: #FFFFFF;

118
subPackages/ticketBooking/detail.vue

@ -40,7 +40,7 @@
</view> </view>
<view class="flex-between time-container"> <view class="flex-between time-container">
<view class="flex flex-1 flex-shrink-0 flex-items-center"> <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> <image class="address-icon flex-shrink-0" :src="showImg('/uploads/20241024/7fe2f8f89aec55a4009b66032b7a3f7e.png')" mode=""></image>
<view class="title text-overflowRows"> <view class="title text-overflowRows">
<text style="margin-right: 28rpx;">营业时间</text> <text style="margin-right: 28rpx;">营业时间</text>
{{info.open_description}} {{info.open_description}}
@ -50,14 +50,14 @@
</view> </view>
<view class="flex-between" style="align-items: flex-start;"> <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;"> <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> <image class="address-icon flex-shrink-0" style="margin-top: 5rpx;" :src="showImg('/uploads/20241023/3d357e6e562de9395f373dc380a790a7.png')" mode=""></image>
<view class="title address-title text-overflowRows"> <view class="title address-title text-overflowRows">
<text class="flex-shrink-0" style="margin-right: 28rpx;">景区地址</text> <text class="flex-shrink-0" style="margin-right: 28rpx;">景区地址</text>
<text class="address-detail flex-1">{{info.address}}</text> <text class="address-detail flex-1">{{info.address}}</text>
</view> </view>
</view> </view>
<view @click="goMap" class="map-icon"> <view @click="goMap" class="map-icon">
<img style="width: 50rpx;height: 50rpx;" :src="showImg('/uploads/20240827/5b19517f2a630f3a766ea03ac621a3be.png')"> <img style="width: 50rpx;height: 50rpx;" :src="showImg('/uploads/20241024/d3206e0940dce236b8b2adaecb1e27d9.png')">
<view>去这里</view> <view>去这里</view>
</view> </view>
</view> </view>
@ -67,21 +67,18 @@
<view class="common-container info-container" > <view class="common-container info-container" >
<view class="info-title text-overflowRows" style="font-weight: normal;">{{info.title}}</view> <view class="info-title text-overflowRows" style="font-weight: normal;">{{info.title}}</view>
<view class='flex flex-between audio' > <view class='flex flex-between audio' >
<!-- <view class='flex-shrink-0'>{{getTime(Math.round(currentAudio.currentTime.toFixed(0)))}}</view> --> <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>
<!-- <Voice-play :duration="133" :play="false"></Voice-play> -->
<view class='flex-1' style="width: 10rpx;padding:0 30rpx"> <view class='flex-1' style="width: 10rpx;padding:0 30rpx">
<slider @change="audioSeek" style="width: 100%;margin: 0;" :block-size="12" backgroundColor='#E4F1F5' <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> activeColor='#248BAA' :min='0' :max='currentAudio.video_length.toFixed(0)' :value='currentAudio.currentTime.toFixed(0)' :step='0.1'></slider>
<!-- :max='currentAudio.video_length.toFixed(0)' :value='currentAudio.currentTime.toFixed(0)' -->
</view> </view>
<!-- <view class='flex-shrink-0'> {{getTime(Math.round(currentAudio.video_length))}}</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"> <view class='play-icon' style="height:59rpx" >
<image src='https://yjks.oss-cn-shanghai.aliyuncs.com/uploads/20221224/cace8838685f41c4bae567937f531808.png' ></image> <image v-if="!curPlay" @tap.stop="playVoice" :src="showImg('/uploads/20241024/07a3e6d081d585737c34556046378dba.png')" ></image>
<!-- <image src='https://yjks.oss-cn-shanghai.aliyuncs.com/uploads/20221224/aff3dacd182b3a413406dd4be08c5506.png' class='icon'></image> --> <image v-else @tap.stop="pauseVoice" :src="showImg('/uploads/20241024/3dc9ce0e77d0e1166fdb1241f9b52fe0.png')" class='icon'></image>
</view> </view>
</view> </view>
</view> </view>
@ -201,6 +198,7 @@
</template> </template>
<script> <script>
let innerAudioContext2 = null
export default { export default {
data() { data() {
return { return {
@ -209,6 +207,7 @@
id: null, id: null,
info: {list_images:'', times_list_info: {start:'',end:''}}, info: {list_images:'', times_list_info: {start:'',end:''}},
sku: [], sku: [],
skuInfo: {}, // skuInfo: {}, //
@ -223,6 +222,9 @@
stratDate:'',endDate: '', selected: [] stratDate:'',endDate: '', selected: []
}, },
currentAudio: {multimedia_url:'https://tlgz.sz-trip.com/uploads/20241023/3a9cb5a1b60daaad9039e985115509c9.mp3', video_length: 0, currentTime: 0},
curPlay: false,
} }
}, },
onShow(options) { onShow(options) {
@ -232,7 +234,31 @@
this.id = options.id; this.id = options.id;
this.getInfo(); this.getInfo();
this.getGoodsList() this.getGoodsList()
this.initPlayer()
},
onHide () {
if (innerAudioContext2) {
try {
innerAudioContext2.pause();
innerAudioContext2.destroy()
innerAudioContext2 = null
} catch (e) {
//TODO handle the exception
}
}
}, },
onUnload () {
if (innerAudioContext2) {
try {
innerAudioContext2.pause();
innerAudioContext2.destroy()
innerAudioContext2 = null
} catch (e) {
//TODO handle the exception
}
}
},
methods: { methods: {
swiperChange (e) { swiperChange (e) {
this.swiperCurrent = e.detail.current+1 this.swiperCurrent = e.detail.current+1
@ -479,6 +505,72 @@
} }
}, },
//
setCurrentAudio (data) {
// this.currentAudio.article_id = data.article_id
this.currentAudio.multimedia_url = data.multimedia_url
// this.currentAudio.title = data.title
this.currentAudio.video_length = data.video_length || 0
this.currentAudio.currentTime = data.currentTime || 0
this.currentAudio.qr_code_path = data.qr_code_path || ''
},
initPlayer () {
let that = this;
if (innerAudioContext2) {
try {
innerAudioContext.pause();
innerAudioContext.destroy()
innerAudioContext = null
} catch (e) {
//TODO handle the exception
}
}
innerAudioContext2 = uni.createInnerAudioContext();
innerAudioContext2.autoplay = false;
innerAudioContext2.onPlay(() => {
that.curPlay = true
console.log('play')
});
innerAudioContext2.onError((res) => {
console.log('error',res.errMsg,res.errCode);
});
innerAudioContext2.onEnded(() => {
that.pauseVoice()
that.curPlay = false
});
innerAudioContext2.onTimeUpdate(() => {
console.log('timeUpdate')
that.currentAudio.duration = innerAudioContext2.duration;
that.currentAudio.currentTime = innerAudioContext2.currentTime;
})
},
//
playVoice(){
innerAudioContext2.src = this.currentAudio.multimedia_url
innerAudioContext2.play()
},
//
pauseVoice(){
innerAudioContext2.pause()
this.curPlay = false
},
getTime(time) {
let m = parseInt(time / 60);
let s = time % 60;
return this.towNum(m) + ':' + this.towNum(s);
},
towNum(num) {
if(num >= 10) {
return num;
}else {
return '0' + num;
}
},
} }
} }
</script> </script>

12
subPackages/ticketBooking/order.vue

@ -34,7 +34,7 @@
</view> </view>
<view>预订须知 ></view> <view>预订须知 ></view>
</view> </view>
<view style="color: #EE3E3B;" class="num-subtitle text-overflow">购票限制没有绑定字段</view> <!-- <view style="color: #EE3E3B;" class="num-subtitle text-overflow">购票限制没有绑定字段</view> -->
</view> </view>
</view> </view>
<view class="buyMore" @click="showMore=!showMore"> <view class="buyMore" @click="showMore=!showMore">
@ -91,7 +91,7 @@
<view class="person-info-detail"> <view class="person-info-detail">
<view style="font-size: 31rpx;color: #000000;" class="flex flex-items-center"> <view style="font-size: 31rpx;color: #000000;" class="flex flex-items-center">
<text style="padding-right: 30rpx;">{{person.name}}</text> <text style="padding-right: 30rpx;">{{person.name}}</text>
<img @click.stop="changeAddressAddPopup('open',person)" v-if="skuBuyMultiple" style="width: 32rpx;height: 32rpx;" :src="showImg('/uploads/20240827/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" /> <img @click.stop="changeAddressAddPopup('open',person)" v-if="skuBuyMultiple" style="width: 32rpx;height: 32rpx;" :src="showImg('/uploads/20241023/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" />
</view> </view>
<view v-if="judegeAgeLimit(skuItem,person)"> <view v-if="judegeAgeLimit(skuItem,person)">
@ -102,7 +102,7 @@
</view> </view>
<img @click.stop="changeAddressAddPopup('open',person)" v-if="!skuBuyMultiple" style="width: 32rpx;height: 32rpx;" <img @click.stop="changeAddressAddPopup('open',person)" v-if="!skuBuyMultiple" style="width: 32rpx;height: 32rpx;"
:src="showImg('/uploads/20240827/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" /> :src="showImg('/uploads/20241023/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" />
<uni-icons v-else type="right" size="16"></uni-icons> <uni-icons v-else type="right" size="16"></uni-icons>
</view> </view>
@ -130,7 +130,7 @@
<view class="person-info-detail"> <view class="person-info-detail">
<view style="font-size: 31rpx;color: #000000;" class="flex flex-items-center"> <view style="font-size: 31rpx;color: #000000;" class="flex flex-items-center">
<text style="padding-right: 30rpx;">{{skuItem.selPerson.name}}</text> <text style="padding-right: 30rpx;">{{skuItem.selPerson.name}}</text>
<img @click.stop="changeAddressAddPopup('open',skuItem.selPerson)" v-if="skuBuyMultiple" style="width: 32rpx;height: 32rpx;" :src="showImg('/uploads/20240827/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" /> <img @click.stop="changeAddressAddPopup('open',skuItem.selPerson)" v-if="skuBuyMultiple" style="width: 32rpx;height: 32rpx;" :src="showImg('/uploads/20241023/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" />
</view> </view>
@ -142,7 +142,7 @@
</view> </view>
<img @click.stop="changeAddressAddPopup('open',skuItem.selPerson)" v-if="!skuBuyMultiple" style="width: 32rpx;height: 32rpx;" <img @click.stop="changeAddressAddPopup('open',skuItem.selPerson)" v-if="!skuBuyMultiple" style="width: 32rpx;height: 32rpx;"
:src="showImg('/uploads/20240827/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" /> :src="showImg('/uploads/20241023/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" />
<uni-icons v-else type="right" size="16"></uni-icons> <uni-icons v-else type="right" size="16"></uni-icons>
</view> </view>
<view class="w-full" style="padding-bottom: 33rpx;" v-else> <view class="w-full" style="padding-bottom: 33rpx;" v-else>
@ -208,7 +208,7 @@
<view :class="['popup-item',addressSelect.id==item.id?'active':'',currentPerson.id!=item.id&&currentPersonIds.includes(item.id)?'disabled':'']" <view :class="['popup-item',addressSelect.id==item.id?'active':'',currentPerson.id!=item.id&&currentPersonIds.includes(item.id)?'disabled':'']"
v-for="(item, index) in addressList" :key="index" @click="seldThisAddress(item)"> v-for="(item, index) in addressList" :key="index" @click="seldThisAddress(item)">
<view class="item-top flex flex-items-center"> <view class="item-top flex flex-items-center">
<img @click.stop="changeAddressAddPopup('open',item)" class="flex-shrink-0" :src="showImg('/uploads/20240827/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" /> <img @click.stop="changeAddressAddPopup('open',item)" class="flex-shrink-0" :src="showImg('/uploads/20241023/337cf610ce5924c2a65b7a28b6a4891e.png')" alt="" />
<view class="name flex-shrink-0" style="padding-left: 32rpx;width: 180rpx;">{{item.name}}</view> <view class="name flex-shrink-0" style="padding-left: 32rpx;width: 180rpx;">{{item.name}}</view>
<view class="flex-1 w-1rpx" style="padding-left: 20rpx;"> <view class="flex-1 w-1rpx" style="padding-left: 20rpx;">
<view class="name"> <view class="name">

25
subPackages/ticketBooking/ticketBooking.vue

@ -3,7 +3,7 @@
<view class="topImg relative"> <view class="topImg relative">
<img v-if="headImg" :src="showImg(headImg)" class="topImg" mode="aspectFill"> <img v-if="headImg" :src="showImg(headImg)" class="topImg" mode="aspectFill">
<view class="icon-back" :style="{top:systemInfo.textTop,left:'19rpx'}" @click="goBack()" > <view class="icon-back" :style="{top:systemInfo.textTop,left:'19rpx'}" @click="goBack()" >
<uni-icons type="left" size="24" color="#242424"></uni-icons> <uni-icons type="left" size="24" color="#fff"></uni-icons>
</view> </view>
</view> </view>
@ -14,7 +14,7 @@
<view class="contentBox flex-column flex-1 w-1rpx"> <view class="contentBox flex-column flex-1 w-1rpx">
<view class="title text-overflowRows">{{item.title}}</view> <view class="title text-overflowRows">{{item.title}}</view>
<view class="subtitle flex"> <view class="subtitle flex">
<img class="address-icon flex-shrink-0" src="https://tongli.sz-trip.com/uploads/20240826/c937c7f6509de9cc2961cb0984d3c526.png"> <img class="address-icon flex-shrink-0" :src="showImg('/uploads/20241023/c937c7f6509de9cc2961cb0984d3c526.png')">
<view class="text-overflow">{{item.address}}</view> <view class="text-overflow">{{item.address}}</view>
</view> </view>
<view class="priceBox"> <view class="priceBox">
@ -48,7 +48,6 @@
} }
}, },
onShow() { onShow() {
this.headImg = 'https://tongli.sz-trip.com/uploads/20240826/a87488f6225789aa19dbb437671d388d.png'
this.finished = false this.finished = false
// this.getHeadImg('piaowu') // this.getHeadImg('piaowu')
}, },
@ -68,20 +67,13 @@
console.log(that.systemInfo) console.log(that.systemInfo)
} }
}) })
this.getHeadImg("tivketBooking").then(res => {this.headImg = res})
}, },
methods: { methods: {
getHeadImg(type){
this.headImg = null
this.Post(
{
type,
},
'https://yjdtadmin.sz-trip.com/api/public_service/getKumgangHeadImgList'
).then(res => {
this.headImg = res.data[0].image
});
},
// //
getList(){ getList(){
this.Post({scenic_type_id: this.type_id,offset: this.list.length,limit: 10}, this.Post({scenic_type_id: this.type_id,offset: this.list.length,limit: 10},
@ -127,6 +119,11 @@
display: flex; display: flex;
align-items: center; align-items: center;
z-index: 50; z-index: 50;
background: rgba(0,0,0,0.5);
border-radius: 50%;
width: 60rpx;
height: 60rpx;
padding-left: 5rpx;
} }
} }

Loading…
Cancel
Save