lu_quan_dev
han 11 months ago
parent 2e270c97c4
commit 10587e0550
  1. BIN
      static/test/ai-bg.png
  2. BIN
      static/test/ai-friend.png
  3. BIN
      static/test/ai-self.png
  4. BIN
      static/test/flower-bg.png
  5. BIN
      static/test/icon-back.png
  6. BIN
      static/test/icon-shop.png
  7. BIN
      static/test/icon-text.png
  8. BIN
      static/test/icon-translate-down.png
  9. BIN
      static/test/icon-translate.png
  10. BIN
      static/test/icon-voice.png
  11. BIN
      static/test/weather_cloudy.png
  12. BIN
      static/test/weather_rainy.png
  13. BIN
      static/test/weather_smog.png
  14. BIN
      static/test/weather_snowy.png
  15. BIN
      static/test/weather_sunny.png
  16. 151
      subPageC/orderShop/cancelStep.vue
  17. 139
      subPageC/orderShop/orderCancel.vue
  18. 747
      subPageC/orderShop/orderDetail.vue
  19. 370
      subPageC/orderShop/orderList.vue
  20. 14
      subPageC/orderShop/payResult.vue

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@ -0,0 +1,151 @@
<template>
<view class="v-order-cancel">
<view class="v-card container-fluid">
<view class="row v-timeline-title">
<view>退款金额:</view>
<view class="price">
<text class="num_pr"></text><text class="num_jd">{{homestayOrderRefund.sumRefundPrice}}</text>
</view>
</view>
<view class="row v-timeline-title m-t-24">退款进度</view>
<view class="v-timeline m-t-24">
<view class="v-timeline-item" v-for="item in homestayOrderRefund.list">
<view class="v-timeline-item__content">{{item.refundName}}</view>
<view class="v-timeline-item__timestamp">{{parseTime(item.refundTime,'{y}-{m}-{d} {h}:{i}:{s}')}}
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
parseTime
} from "@/common/util";
export default {
data() {
return {
homestayOrderRefund: {}
}
},
onLoad(option) {
console.log(option.orderId)
this.getInitPage(option.orderId)
},
methods: {
getInitPage(orderId) {
let data = {
'orderId': orderId
}
this.$Request.get(this.$config.getHomestayOrderRefund, data, null, null, false, true).then((res) => {
console.log(res)
if (res.code == 0) {
this.homestayOrderRefund = res.data
} else {
uni.showToast({
title: res.data,
icon: 'none',
duration: 2000
})
}
});
},
parseTime(val, par) {
return parseTime(val, par)
},
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import '@/static/css/common.scss';
.v-timeline-title {
font-size: 30rpx;
color: #1B1B1B;
.price {
.num_pr {
font-size: 24rpx;
color: #e02222;
}
.num_jd {
margin: 0 4rpx;
font-size: 40rpx;
color: #e02222;
font-weight: bold;
}
}
}
.v-timeline {
padding: 20rpx;
background-color: rgba(250, 251, 255, 1);
.v-timeline-item {
position: relative;
padding: 0 30rpx 20rpx 30rpx;
margin-bottom: 20rpx;
&:before {
content: "";
position: absolute;
left: -10rpx;
top: 10rpx;
z-index: 1;
height: 20rpx;
width: 20rpx;
border-radius: 20rpx;
background-color: #0983FF;
}
&:after {
content: "";
position: absolute;
left: 0;
top: 15rpx;
height: 100%;
width: 1rpx;
background-color: #eeeeee;
}
.v-timeline-item__content {
font-size: 28rpx;
color: #1B1B1B;
}
.v-timeline-item__tip {
margin: 8rpx 0;
font-size: 26rpx;
color: #1B1B1B;
}
.v-timeline-item__timestamp {
font-size: 24rpx;
color: #808080;
}
&.active {
.v-timeline-item__content {
color: #0983FF;
}
&:after {
display: none;
}
&:before {
width: 30rpx;
height: 30rpx;
border-radius: 30rpx;
top: 0;
left: -15rpx;
}
}
}
}
</style>

@ -0,0 +1,139 @@
<template>
<view class="v-order-cancel">
<view class="v-card container-fluid">
<view class="v-order-title">取消原因<text class="text">*</text></view>
<view class="v-order-tip">请告知取消原因我们将努力改善服务</view>
<view class="v-order-cancel-list">
<radio-group @change="radioChange">
<label class="list_item row" v-for="(item, index) in cancelList" :key="item.value">
<view class="label col">{{item.label}}</view>
<view>
<radio color="#0983ff" :value="item.value" :checked="item.value === current" />
</view>
</label>
</radio-group>
</view>
</view>
<view class="v-cancel-bottom">
<view class="btn" @click="submit">确认取消订单</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
cancelList: [],
current: "1",
orderId: undefined
}
},
onLoad(options) {
this.orderId = options.id
this.getInitPage()
},
methods: {
getInitPage(id) {
this.$Request.get(this.$config.getDictDataList, null, null, null, false, true).then((res) => {
this.cancelList = res.data
}).catch(() => {
});
},
radioChange: function(evt) {
for (let i = 0; i < this.cancelList.length; i++) {
if (this.cancelList[i].value === evt.detail.value) {
this.current = evt.detail.value;
break;
}
}
},
submit() {
const userInfo = uni.getStorageSync("userInfo");
let parame = {
id: this.orderId,
openid: userInfo.openid,
cancelType: this.current,
}
this.$Request.get(this.$config.userCancelUpdateOrder, parame, null, null, false, null).then((res) => {
if (res.code == "0") {
uni.showToast({
title: '订单取消成功',
icon: 'none'
});
setTimeout(() => {
uni.navigateBack({
delta: 2
});
}, 1000)
} else {
uni.showToast({
title: '订单取消失败,请稍后重试',
icon: 'none'
});
}
}).catch(() => {
});
}
}
}
</script>
<style lang="scss">
.v-order-title {
font-size: 32rpx;
.text {
color: #E02222;
margin-left: 8rpx;
}
margin-bottom: 24rpx;
font-weight: bold;
}
.v-order-tip {
font-size: 24rpx;
color: #999999;
}
.v-order-cancel-list {
padding: 2rpx 30rpx;
margin-top: 20rpx;
border-radius: 10rpx;
background: linear-gradient(to bottom, rgba(9, 131, 255, .05), transparent);
.list_item {
margin: 30rpx 0;
.label {
font-size: 28rpx;
}
}
}
.v-cancel-bottom {
position: fixed;
bottom: 30rpx;
left: 0;
width: 100%;
padding: 24rpx 32rpx;
box-sizing: border-box;
.btn {
font-size: 30rpx;
height: 88rpx;
line-height: 88rpx;
border-radius: 88rpx;
color: #fff;
text-align: center;
background: linear-gradient(to right, #0983FF, #57ABFF);
}
}
</style>

@ -0,0 +1,747 @@
<template>
<view class="v-order-detail">
<view class="v-order-bg"></view>
<view class="v-order-detail-state">
<view class="order-top">
<view class="state row">
<image mode="widthFix"
:src="'https://eluyou.ailuquan.cn/upload/image/2024/mapIcon/daolan/'+stateImg(homestayOrderData.orderStatus)">
</image>
{{homestayOrderData.status}}
</view>
<view class="tip">
<view v-if="homestayOrderData.orderStatus == '2'||homestayOrderData.orderStatus == '3'">
{{homestayOrderData.cancelReason}}
</view>
<view v-else>{{promptText(homestayOrderData.orderStatus)}}</view>
</view>
<!-- <view class="time" v-if="homestayOrderData.orderStatus == '0'">25:25</view> -->
</view>
<view class="order-top-btn m-t-40 row" v-if="homestayOrderData.orderStatus == '0'">
<view class=" col-12">
<view class="pay-btn" @click="payOrder">去支付</view>
</view>
<view class="col-12">
<view class="cancel-btn" @click="cacelOrder">取消订单</view>
</view>
</view><view class="order-top-btn m-t-40"
v-else-if="homestayOrderData.orderStatus != '1'">
<view class="col-24">
<view class="pay-btn" @click="toHomeStayBookingPage(homestayOrderData.hotelId)">再次预订</view>
</view>
</view>
<!-- <view v-if="homestayOrderData.orderStatus != '0' && homestayOrderData.orderStatus !='1'">
<view class="pay-btn">再次预订</view>
</view> -->
<view class="row describe"
v-if="homestayOrderData.orderStatus == '3' ||homestayOrderData.orderStatus == '7' || homestayOrderData.orderStatus == '8' ">
<view class="dec col">退款进度
<text v-if="homestayOrderData.orderStatus == '7'">发起退款申请</text>
<text v-else>退款成功</text>
</view>
<view class="btn" @click="toRefundPage(homestayOrderData.id)">查看详情</view>
</view>
</view>
<!-- <view class="v-card container-fluid m-t--80">
<view class="v-form-item row">
<view class="label">取消规则</view>
<view class="content">09月13日18:00可免费取消</view>
</view>
</view> -->
<view class="v-card order container-fluid m-t-24">
<view class="v-form">
<view class="v-form-item row">
<view class="col row">
<view class="label">在线支付</view>
<view class="content">
<text class="price">{{homestayOrderData.orderAmount}}</text>
</view>
</view>
<!-- <view class="detail-btn">详情</view> -->
</view>
<view class="v-form-line"></view>
<view class="v-form-item row">
<view class="label">发票报销</view>
<view class="content">如需发票请向酒店前台索取 </view>
</view>
</view>
</view>
<view class="v-card order container-fluid m-t-24">
<view class="v-order-info row">
<view class="info-image">
<image :src="rootPath+homestayOrderData.hotelLogo" mode="widthFix"></image>
</view>
<view class="info-content">
<view class="title">{{homestayOrderData.hotelName}}</view>
<view class="address">{{homestayOrderData.addressInfo}}</view>
</view>
</view>
<view class="row v-order-info-btn flex-align-center">
<view class="btn col-12 row flex-align-center flex-justify-center" @click="navigation">
<image src="https://eluyou.ailuquan.cn/upload/image/2024/mapIcon/daolan/icon_map.png"></image>地图导航
</view>
<view class="btn col-12 row flex-align-center flex-justify-center"
@click="callPhone(homestayOrderData.serviceNumber)">
<image src="https://eluyou.ailuquan.cn/upload/image/2024/mapIcon/daolan/icon_phone.png"></image>咨询电话
</view>
</view>
</view>
<view class="v-card order container-fluid m-t-24">
<view class="v-form-date row flex-align-center" v-for="item in homestayOrderData.dateList">
<view class="start"><text class="date">{{getData(item.checkTime)}}</text></view>
<text class="mid">{{item.day}}</text>
<view class="end"><text class="date">{{getData(item.checkOutTime)}}</text></view>
</view>
<view class="v-form-name m-t-12">{{homestayOrderData.houseName}}</view>
<view class="v-form-tip">
<!-- <text>无早餐</text> -->
<!-- <text>{{homestayOrderData.bedWide +'米宽'+homestayOrderData.hotelTypeName}}</text> -->
<text>最多入住{{homestayOrderData.guest}}</text>
<text>{{homestayOrderData.houseArea}}</text>
</view>
<view class="v-form bg m-t-24">
<view class="v-form-item row">
<view class="label">入住人</view>
<view class="content">{{homestayOrderData.bookerusername}}</view>
</view>
<view class="v-form-item row">
<view class="label">联系手机</view>
<view class="content">{{homestayOrderData.bookerphone}}</view>
</view>
<view class="v-form-item row">
<view class="label">身份证号</view>
<view class="content">{{homestayOrderData.idcard}}</view>
</view>
</view>
</view>
<view class="v-card order container-fluid m-t-24 m-b-24">
<view class="v-form-title">订单信息</view>
<view class="v-form">
<view class="v-form-item row">
<view class="label">订单号</view>
<view class="content">{{homestayOrderData.orderNumber}}</view>
</view>
<view class="v-form-item row">
<view class="label">下单时间</view>
<view class="content">{{homestayOrderData.orderTime}}</view>
</view>
</view>
</view>
<u-popup :show="isPayPopup" mode="bottom" @close="closePay" round="10">
<f-pay :show-title="false" :show="isPayPopup" :order="homestayOrderData"
:payMoney="homestayOrderData.orderAmount" :tradeNo="homestayOrderData.orderNumber"
@payResult="payResult"></f-pay>
</u-popup>
</view>
</template>
<script>
import fPay from "../components/f-pay/f-pay";
import uPopup from "../components/uview-ui/components/u-popup/u-popup.vue";
export default {
components: {
fPay,
uPopup
},
data() {
return {
//
isPayPopup: false,
rootPath: this.$config.ROOTPATH,
title: '订单详情',
homestayOrderData: {
'id': 1734877929,
'orderNumber': '',
'hotelId': 0,
'hotelName': '',
'addressInfo': '',
'orderAmount': 0,
'orderTime': '',
'payTime': null,
'price': null,
'status': '',
'orderStatus': '0',
'belongingPayOrderId': '',
'bedNum': 0,
'hotelLogo': '',
'houseName': '',
'serviceNumber': '',
'bedWide': 0,
'houseArea': 0,
'guest': 0,
'bedNumTwo': 0,
'hotelTypeName': '',
'bookerusername': '',
'bookerphone': '',
'cancelReason': null,
'dateList': [{
'checkTime': '',
'checkOutTime': '',
'day': 0
}],
'no': null
}
}
},
onLoad(options) {
this.getHomestayOrderDetail(options.id)
},
methods: {
//
getHomestayOrderDetail(orderId) {
let data = {
'id': orderId
}
this.$Request.get(this.$config.getHomestayOrderDetail, data, null, null, false, true).then((res) => {
if (res.code == 0) {
this.homestayOrderData = res.data
let checkTime = this.homestayOrderData.checkTime
let checkOutTime = this.homestayOrderData.checkOutTime
} else {
uni.showToast({
title: res.data,
icon: 'none',
duration: 2000
})
}
});
},
getData(data) {
let newdata = data.split("-")
return newdata[0] + '月' + newdata[1] + '日'
},
//
callPhone(val) {
uni.makePhoneCall({
phoneNumber: val //
});
},
//
navigation() {
console.log("this.homestayOrderData", this.homestayOrderData)
uni.openLocation({
latitude: Number(this.homestayOrderData.lat),
longitude: Number(this.homestayOrderData.lng),
name: this.homestayOrderData.hotelName,
address: this.homestayOrderData.addressInfo,
complete: function(result) {
console.log(result);
},
});
// #ifdef H5
if (this.$wechat.isWechat()) {
var mapParam = {
latitude: this.homestayOrderData.lat,
longitude: this.homestayOrderData.lng,
scale: 18,
name: this.homestayOrderData.hotelName,
address: this.homestayOrderData.addressInfo,
};
this.$util.openLocation(mapParam);
return;
}
window.location.href =
"https://uri.amap.com/navigation?from=" +
this.$param.clng +
"," +
this.$param.clat +
",我的位置&to=" +
this.homestayOrderData.lng +
"," +
this.homestayOrderData.lat +
"," +
this.homestayOrderData.addressInfo +
"&mode=walk&src=sjz_uniapp&callnative=1";
// #endif
},
//
promptText: function(val) {
// 0 1 2 3 4 5 6 7 退 8退
switch (val) {
case "0":
return "酒店房间有限,请尽快支付,超时后订单将自动取消"
break;
case "1":
return "等待商家确认中,请及时关注订单状态"
break;
case "2":
return "订单超时未支付,请重新下单"
break;
case "3":
return "商家因满房原因暂时无法接单,建议您稍后重试或选择其他房型"
break;
case "4":
return "请按预订时间办理入住"
break;
case "5":
return ""
break;
case "6":
return ""
break;
case "7":
return ""
break;
case "8":
return ""
break;
}
},
//
toHomeStayBookingPage(hotelId) {
uni.navigateTo({
url: "/subPageB/Homestay/homestaydetail/homestaydetail?guid=" + hotelId
});
},
//退
toRefundPage(orderId) {
uni.navigateTo({
url: "/subPageC/orderHomestay/cancelStep?orderId=" + orderId
});
},
payOrder(val) {
console.log("订单==========", val)
this.isPayPopup = true
},
//
payResult(data) {
if (data.payStatus == 1) {
uni.showToast({
title: '支付成功',
icon: 'none'
});
this.isPayPopup = false
setTimeout(() => {
uni.navigateBack({
delta: 1
});
}, 1000)
} else {
uni.showToast({
title: '支付失败',
icon: 'none'
});
this.isPayPopup=false
}
//uni.showToast({title: data.detail.errMsg,icon:'none'});
},
closePay() {
let that = this
uni.showModal({
title: '提示',
content: '确定取消支付?',
cancelText: '再想想',
showCancel: true,
success: function(res) {
if (res.confirm) {
that.isPayPopup = false
} else if (res.cancel) {
console.log('用户点击取消');
this.isPayPopup=false
}
}
})
},
stateImg: function(val) {
// 0 1 2 3 4 5 6 7 退 8退
switch (val) {
case "0":
return "icon_pending-payment.png"
break;
case "1":
return "icon_wait-confirmed.png"
break;
case "2":
return "icon_cancelled.png"
break;
case "3":
return "icon_booking-failed.png"
break;
case "4":
return "icon_booking-successful.png"
break;
case "5":
return "icon_check-in.png"
break;
case "6":
return "icon_check-out.png"
break;
case "7":
return "icon_refund.png"
break;
case "8":
return "icon_refund-successful.png"
break;
}
},
//
cacelOrder() {
uni.navigateTo({
url: "/subPageC/orderHomestay/orderCancel?id=" + this.homestayOrderData.id
});
},
stateMessage: function(val) {
// 0 1 2 3 4 5 6 7 退 8退
switch (val) {
case "0":
return "待支付"
break;
case "1":
return "待确认"
break;
case "2":
return "已取消"
break;
case "3":
return "预订失败"
break;
case "4":
return "预订成功"
break;
case "5":
return "已入住"
break;
case "6":
return "已离店"
break;
case "7":
return "退款中"
break;
case "8":
return "已退款"
break;
}
},
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import '@/static/css/common.scss';
.v-order-detail {
padding-bottom: 24rpx;
}
.v-order-detail-state {
position: relative;
z-index: 9;
padding: 40rpx 0 10rpx 0;
.order-top {
position: relative;
padding: 0 40rpx;
.state {
font-size: 44rpx;
color: #fff;
font-weight: bold;
image {
width: 60rpx;
margin-right: 10rpx;
}
}
.tip {
margin-top: 10rpx;
font-size: 26rpx;
color: #fff;
}
.time {
position: absolute;
top: 0;
right: 0;
font-size: 32rpx;
padding: 8rpx 40rpx 8rpx 30rpx;
border-radius: 30rpx 0 0 30rpx;
color: #fff;
background: linear-gradient(to right, rgba(255, 255, 255, .2), transparent);
&:before {
content: "";
position: absolute;
top: -40rpx;
left: -50rpx;
width: 140rpx;
height: 140rpx;
border-radius: 140rpx;
background: linear-gradient(to right, rgba(255, 255, 255, .2), transparent);
}
&::after {
content: "";
position: absolute;
top: -25rpx;
left: -30rpx;
width: 110rpx;
height: 110rpx;
border-radius: 120rpx;
background: linear-gradient(to right, rgba(255, 255, 255, .2), transparent);
}
}
}
.order-top-btn {
margin: 12rpx 10rpx;
.pay-btn {
background-color: #fff;
text-align: center;
height: 64rpx;
line-height: 64rpx;
border-radius: 64rpx;
color: #0983FF;
}
.cancel-btn {
margin: 0 20rpx;
border: 1rpx solid #fff;
color: #fff;
text-align: center;
height: 64rpx;
line-height: 64rpx;
border-radius: 64rpx;
background: linear-gradient(to right, transparent, #0983FF);
}
}
.describe {
padding: 10rpx 40rpx;
background: linear-gradient(to right, rgba(255, 255, 255, .2), transparent);
.dec {
color: #fff;
font-size: 26rpx;
}
.btn {
border-radius: 40rpx;
padding: 0 20rpx;
height: 40rpx;
line-height: 40rpx;
border: 1rpx solid #fff;
color: #fff;
font-size: 26rpx;
}
}
}
.v-form-date {}
.v-form-date {
.start .date {
font-size: 34rpx;
font-weight: bold;
}
.start .text {
font-size: 24rpx;
color: #666666;
}
.end .date {
font-size: 34rpx;
font-weight: bold;
}
.end .text {
font-size: 24rpx;
color: #666666;
}
.mid {
position: relative;
border: 1rpx solid #0983FF;
padding: 0 8rpx;
height: 30rpx;
line-height: 30rpx;
border-radius: 30rpx;
margin: 0 30rpx;
font-size: 20rpx;
color: #0983FF;
&::before,
&::after {
content: "";
position: absolute;
top: 50%;
transform: translate(0, -50%);
width: 20rpx;
height: 1rpx;
background-color: #0983FF;
}
&::before {
left: -20rpx;
}
&::after {
right: -20rpx;
}
}
}
.v-form-title {
margin-bottom: 24rpx;
font-weight: bold;
}
.v-form-name {
margin-top: 8rpx;
font-size: 30rpx;
color: #1B1B1B;
font-weight: bold;
}
.v-form-line {
height: 1rpx;
background-color: #EEEEEE;
margin: 12rpx 0;
}
.v-form-tip {
text {
font-size: 24rpx;
margin-right: 16rpx;
color: #808080;
}
}
.v-order-info {
.info-image {
margin-left: 10rpx;
margin-right: 20rpx;
width: 180rpx;
height: 120rpx;
overflow: hidden;
image {
width: 180rpx;
height: 120rpx;
}
}
.info-content {
.title {
font-size: 30rpx;
font-weight: bold;
}
.address {
margin-top: 8rpx;
font-size: 24rpx;
color: #808080;
padding-left: 30rpx;
background: url('https://eluyou.ailuquan.cn/upload/image/2024/mapIcon/daolan/icon-address.png');
background-repeat: no-repeat;
background-position: left 4rpx;
background-size: 24rpx;
}
}
}
.v-order-detail {
position: relative;
}
.v-order-bg {
position: fixed;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 600rpx;
background: url('https://eluyou.ailuquan.cn/upload/image/2024/mapIcon/daolan/order_bg.png');
background-repeat: no-repeat;
background-position: top left;
background-size: cover;
}
.v-order-info-btn {
margin-top: 20rpx;
margin-left: -10rpx;
.btn {
margin-left: 10rpx;
height: 60rpx;
line-height: 60rpx;
border-radius: 60rpx;
background-color: #F6F7FB;
text-align: center;
font-size: 24rpx;
color: #1B1B1B;
image {
width: 30rpx;
height: 30rpx;
margin-right: 8rpx;
}
}
}
.v-order-detail-state {}
.v-form {
&.bg {
padding: 20rpx;
border-radius: 10rpx;
background: linear-gradient(to bottom, #F7F9FF, #fff);
}
}
.v-form-item {
&:not(:last-child) {
margin-bottom: 10rpx;
}
.detail-btn {
font-size: 24rpx;
color: #0983FF;
}
.label {
width: 160rpx;
font-size: 28rpx;
color: #808080;
}
.content {
font-size: 28rpx;
color: #1B1B1B;
}
.price {
font-size: 32rpx;
color: #E02222;
font-weight: bold;
}
}
</style>

@ -0,0 +1,370 @@
<template>
<view class="v-order-list">
<mescroll-uni :up="upOption" @down="downCallback" @up="upCallback" :fixed="false">
<view class="list_item container-fluid m-b-24" v-for="(item,index) in orderList"
>
<view class="item_title">{{item.hotelName}}</view>
<view class="row" @click="toHomeStayDetailPage(item.id)">
<view class="item_image">
<image class="img" :src="item.hotelLogo" mode="widthFix"></image>
</view>
<view class="item_content col">
<view class="content-title">{{item.houseName}}</view>
<view class="content-date">{{item.checkTime}}
<image src="https://eluyou.ailuquan.cn/upload/image/2024/mapIcon/daolan/icon-data-line.png"
mode="widthFix">
</image>
{{item.checkOutTime}}
</view>
<view class="content-price">总价¥{{item.orderAmount}}</view>
</view>
</view>
<view class="item_content">
<view class="content-bottom">
<view class="btn" v-if="item.orderStatus=='0'" @click="payOrder(item)">去支付</view>
<view class="btn" v-if="item.orderStatus !='0' && item.orderStatus !='1'"
@click="toHomeStayBookingPage(item.hotelId)">再次预定</view>
<view class="btn" v-if="item.refundDisplay =='1'" @click="toRefundPage(item.id)">退款进度</view>
</view>
</view>
<view class="tip-bage"></view>
<view class="tip-state m-t-12" v-if="item.orderStatus=='1'">等待商家确认中请及时关注订单状态</view>
<view class="state" :class="'type'+item.orderStatus">{{stateMessage(item.orderStatus)}}</view>
</view>
</mescroll-uni>
<u-popup :show="isPayPopup" mode="bottom" @close="closePay" round="10">
<f-pay :show-title="false" :show="isPayPopup" :order="orderInfo" :payMoney="orderInfo.orderAmount"
:tradeNo="orderInfo.orderNumber" @payResult="payResult"></f-pay>
</u-popup>
</view>
</template>
<script>
import fPay from "../components/f-pay/f-pay";
import uPopup from "../components/uview-ui/components/u-popup/u-popup.vue";
import MescrollUni from '@/components/mescroll-diy/mescroll-xinlang.vue';
export default {
components: {
MescrollUni,
fPay,
uPopup
},
data() {
return {
rootPath: this.$config.ROOTPATH,
//
isPayPopup: false,
//
downOption: {
auto: false //callback; true
},
upOption: {
auto: true //callback; true
},
mescroll: '',
param: {
pageSize: 10,
pageNo: 1,
noData: false,
loading: false,
finished: false,
openid: undefined,
appid: undefined,
},
orderList: [],
list: [], //
orderInfo: undefined,
}
},
onLoad() {
//TODO:
this.judgeLogin()
},
onShow() {
this.param.pageNo = 1
this.loadData()
},
methods: {
stateMessage: function(val) {
// 0 1 2 3 4 5 6 7 退 8退
switch (val) {
case "0":
return "待支付"
break;
case "1":
return "待确认"
break;
case "2":
return "已取消"
break;
case "3":
return "预订失败"
break;
case "4":
return "预订成功"
break;
case "5":
return "已入住"
break;
case "6":
return "已离店"
break;
case "7":
return "退款中"
break;
case "8":
return "已退款"
break;
}
},
/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
/*下拉刷新的回调 */
downCallback(mescroll) {
this.mescroll = mescroll
this.param.pageNo = 1
this.loadData();
// #ifdef H5
this.top = uni.upx2px(100 + 88) + 'px'; // H5 88
// #endif
// #ifndef H5
this.top = uni.upx2px(100) + 'px'; // H5
// #endif
setTimeout(() => {
this.mescroll.endSuccess();
this.top = 0;
}, 2500);
},
upCallback(mescroll) {
this.mescroll = mescroll
this.param.pageNo = this.mescroll.num
this.loadData();
},
//
payResult(data) {
if (data.payStatus == 1) {
uni.showToast({
title: '支付成功',
icon: 'none'
});
setTimeout(() => {
this.isPayPopup = false
this.param.pageNo = 1
this.loadData()
}, 1000)
} else {
uni.showToast({
title: '支付失败',
icon: 'none'
});
this.isPayPopup = false
}
//uni.showToast({title: data.detail.errMsg,icon:'none'});
},
//
loadData() {
// TODO: appId openId
const userInfo = uni.getStorageSync("userInfo");
const extConfig = uni.getExtConfigSync ? uni.getExtConfigSync() : {};
let appId = extConfig.app_id
this.param.openid = userInfo.openid
this.param.appid = appId
this.$Request.get(this.$config.getHomestayOrderList, this.param, null, null, false, true).then((res) => {
const curPageData = res.data.list || [] //
if (this.mescroll.num == 1) this.orderList = []; //
curPageData.forEach((item, index) => {
this.orderList.push(item)
})
setTimeout(() => {
this.mescroll.endSuccess(curPageData.length); // ,
}, 1000);
}).catch(() => {
this.mescroll.endErr(); // ,
});
},
//
payOrder(val) {
this.orderInfo = val
console.log("订单==========", this.orderInfo)
this.isPayPopup = true
},
closePay() {
let that = this
uni.showModal({
title: '提示',
content: '确定取消支付?',
cancelText: '再想想',
showCancel: true,
success: function(res) {
if (res.confirm) {
that.isPayPopup = false
} else if (res.cancel) {
console.log('用户点击取消');
this.isPayPopup=false
}
}
})
},
// 宿
toHomeStayDetailPage(id) {
uni.navigateTo({
url: "/subPageC/orderHomestay/orderDetail?id=" + id
});
},
//
toHomeStayBookingPage(hotelId) {
uni.navigateTo({
url: "/subPageB/Homestay/homestaydetail/homestaydetail?guid=" + hotelId
});
},
//退
toRefundPage(orderId) {
uni.navigateTo({
url: "/subPageC/orderHomestay/cancelStep?orderId=" + orderId
});
}
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import '@/static/css/common.scss';
.v-order-list {
padding: 0;
.list_item {
position: relative;
z-index: 9;
overflow: hidden;
box-sizing: border-box;
padding: 30rpx 24rpx 20rpx 24rpx;
background-color: #fff;
border-radius: 10rpx;
.item_title {
margin-top: -5rpx;
margin-bottom: 10rpx;
padding-left: 30rpx;
font-size: 32rpx;
color: #1B1B1B;
font-weight: bold;
}
.item_image {
width: 180rpx;
height: 150rpx;
margin-right: 20rpx;
overflow: hidden;
.img {
width: 200rpx;
}
}
.tip-bage {
position: absolute;
left: 0;
top: 20rpx;
width: 40rpx;
height: 36rpx;
background: url('https://eluyou.ailuquan.cn/upload/image/2024/mapIcon/daolan/icon-homestay.png');
background-repeat: no-repeat;
background-position: left 4rpx;
background-size: 40rpx;
}
.state {
position: absolute;
right: 0;
top: 30rpx;
font-size: 26rpx;
color: #0983FF;
padding: 8rpx 30rpx 8rpx 20rpx;
border-radius: 30rpx 0 0 30rpx;
background: linear-gradient(to right, rgba(9, 131, 255, .2), transparent);
&.type0 {
color: #FF850A;
padding: 8rpx 30rpx 8rpx 20rpx;
border-radius: 30rpx 0 0 30rpx;
background: linear-gradient(to right, rgba(255, 133, 10, .2), transparent);
}
&.type1 {
color: #0983FF;
padding: 8rpx 30rpx 8rpx 20rpx;
border-radius: 30rpx 0 0 30rpx;
background: linear-gradient(to right, rgba(9, 131, 255, .2), transparent);
}
&.type2 {
color: #666666;
padding: 8rpx 30rpx 8rpx 20rpx;
border-radius: 30rpx 0 0 30rpx;
background: linear-gradient(to right, rgba(102, 102, 102, .2), transparent);
}
&.type3 {
color: #666666;
padding: 8rpx 30rpx 8rpx 20rpx;
border-radius: 30rpx 0 0 30rpx;
background: linear-gradient(to right, rgba(102, 102, 102, .2), transparent);
}
}
.tip-state {
margin-left: -24rpx;
margin-bottom: -24rpx;
color: #0983FF;
padding: 10rpx 30rpx;
font-size: 24rpx;
background: linear-gradient(to right, rgba(9, 131, 255, .15), transparent);
}
.item_content {
.content-title,
.content-date,
.content-price {
margin: 8rpx;
color: #666666;
font-size: 28rpx;
}
.content-date {
image {
width: 24rpx;
height: 22rpx;
margin: 0 10rpx;
}
}
.content-bottom {
text-align: right;
.btn {
display: inline-block;
margin: 0 10rpx;
padding: 0 20rpx;
border: 1rpx solid #CCCCCC;
color: #1B1B1B;
font-size: 28rpx;
text-align: center;
height: 60rpx;
line-height: 60rpx;
border-radius: 60rpx;
}
}
}
}
}
</style>

@ -0,0 +1,14 @@
<template>
<view class="v-pay-result">
<view class="image"></view>
<view class="">支付成功</view>
<view class="price">1520.00</view>
<view class="btn">1520.00</view>
</view>
</template>
<script>
</script>
<style>
</style>
Loading…
Cancel
Save