Feat:预览旅居团购协议

This commit is contained in:
LinCyJang
2026-01-11 01:34:50 +08:00
parent 79e23a66cf
commit ea5f9cc628
3 changed files with 126 additions and 10 deletions
+4
View File
@@ -215,6 +215,10 @@ export function getJiaLouProductReplyCount(params) {
return request.get('/travel/product/reply/count', params, {login: true})
}
export function getTravelGroupOrderAgreement() {
return request.get('/travel/travelGroupOrderAgreement', {}, {login: true})
}
/**
* 管家列表
* merId int 商户ID
+121 -9
View File
@@ -193,7 +193,7 @@
</view>
<view>联系商家</view>
</view>
<view class="buy-btn" @click="bookNow">
<view class="buy-btn" @click="handleBuyClick">
<view>
<u-icon :name="webUrl + '/home/icon-cart.png'" size="24"></u-icon>
</view>
@@ -201,10 +201,6 @@
</view>
</view>
</view>
<!-- <Calendar ref="calendar"
:minDay="detail.minBookingDays"
@dateSelected="handleDateSelected"
></Calendar> -->
<DateRangePicker
ref="dateRangePicker"
:show="showDatePicker"
@@ -214,19 +210,41 @@
@input="handleDateSelected"
>
</DateRangePicker>
<u-popup
:show="showAgreementPopup"
mode="center"
round="16"
:safe-area-inset-bottom="false"
>
<view class="agreement-popup">
<view class="agreement-header">
<text class="agreement-title">{{ agreementTitle }}</text>
<text class="iconfont icon-guanbi agreement-close" @click="closeAgreement"></text>
</view>
<scroll-view scroll-y class="agreement-body">
<u-parse :content="agreementContent"></u-parse>
</scroll-view>
<view class="agreement-actions">
<button class="agreement-btn agree" @click="confirmAgreement">我同意</button>
<button class="agreement-btn cancel" @click="closeAgreement">返回</button>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import { getJiaLouProductDetail, getJiaLouCalendar,getJiaLouBookingRules, getJiaLouProductReply } from '@/api/qianxian'
import { getJiaLouProductDetail, getJiaLouCalendar,getJiaLouBookingRules, getJiaLouProductReply, getTravelGroupOrderAgreement } from '@/api/qianxian'
import {getGiftCardSendBackground} from "@/api/gift"
import DateRangePicker from '@/components/DateRangePicker/DateRangePicker.vue'
import UserEvaluation from '@/components/UserEvaluation'
import uParse from '@/uni_modules/uview-ui/components/u-parse/u-parse.vue'
export default {
name: 'GroupBuyDetails',
components: {
DateRangePicker,
UserEvaluation
UserEvaluation,
uParse
},
data() {
return {
@@ -246,7 +264,11 @@ export default {
reviewPage: 1,
reviewLimit: 5,
reviewLoading: false,
reviewLoadEnd: false
reviewLoadEnd: false,
showAgreementPopup: false,
agreementTitle: '团购协议',
agreementContent: '',
enableAgreement: false
}
},
onShow() {
@@ -260,12 +282,12 @@ export default {
this.id = (query && query.id) || ''
this.getDetail()
this.fetchReviewList(true)
// this.getCalendar()
getJiaLouBookingRules(this.id).then(res => {
if (res.status === 200) {
this.rules = res.data || ''
}
})
this.getOrderAgreement()
},
onReachBottom() {
if (!this.reviewLoadEnd) {
@@ -393,6 +415,32 @@ export default {
}
})
},
async getOrderAgreement() {
try {
const res = await getTravelGroupOrderAgreement()
if (res && res.status === 200 && res.data) {
const data = res.data
this.agreementTitle = data.agreementTitle || '团购协议'
this.agreementContent = data.agreementContent || ''
this.enableAgreement = !!this.agreementContent
}
} catch (e) {
}
},
handleBuyClick() {
if (this.enableAgreement && this.agreementContent) {
this.showAgreementPopup = true
return
}
this.bookNow()
},
closeAgreement() {
this.showAgreementPopup = false
},
confirmAgreement() {
this.showAgreementPopup = false
this.bookNow()
},
bookNow() {
if(!this.dateRange[0] || !this.dateRange[1]){
uni.showToast({
@@ -668,6 +716,70 @@ export default {
.package-item{
margin-bottom: 24rpx;
}
.agreement-popup {
width: 620rpx;
background: #fff;
border-radius: 24rpx;
padding: 40rpx 32rpx 32rpx;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.agreement-header {
display: flex;
align-items: center;
justify-content: center;
position: relative;
margin-bottom: 30rpx;
flex-shrink: 0;
}
.agreement-title {
font-size: 34rpx;
font-weight: 700;
color: #333;
}
.agreement-close {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
font-size: 32rpx;
color: #999;
padding: 10rpx;
}
.agreement-body {
height: 600rpx;
margin-bottom: 30rpx;
background: #f8f8f8;
border-radius: 12rpx;
padding: 20rpx;
box-sizing: border-box;
}
.agreement-actions {
display: flex;
gap: 20rpx;
flex-shrink: 0;
}
.agreement-btn {
flex: 1;
height: 80rpx;
line-height: 80rpx;
border-radius: 40rpx;
font-size: 28rpx;
font-weight: 600;
margin: 0;
&::after { border: none; }
}
.agreement-btn.agree {
background: #E53935;
color: #fff;
box-shadow: 0 4rpx 12rpx rgba(229, 57, 53, 0.3);
}
.agreement-btn.cancel {
background: #f5f5f5;
color: #666;
}
.date-item{
display: flex;
flex-direction: column;
+1 -1
View File
@@ -470,4 +470,4 @@ export default {
align-items: center;
}
.buy-btn.disabled { background: #ccc; pointer-events: none; }
</style>
</style>