diff --git a/pages/cart/cart.vue b/pages/cart/cart.vue index 2c52c60..393926a 100644 --- a/pages/cart/cart.vue +++ b/pages/cart/cart.vue @@ -3,7 +3,7 @@ 购物车为空 - 去逛逛 + 去逛逛 @@ -215,6 +398,11 @@ orderId: '', info: {}, orderChildList: [], + lineQrcodeList: [], + lineNum: 0, + current: 0, + maskShow: false, + postInfo: {} } }, onLoad(option) { @@ -222,43 +410,71 @@ this.getDetail() }, methods: { - getDetail() { - this.Post({ - order_id: this.orderId - }, '/api/order/query').then(res => { - console.log(res.data) - this.info = res.data - this.orderChildList = res.data.order_product_list - // 景点ticket、线路line、自提需展示二维码 - this.info.order_product_list.forEach(item => { - // 收货地址 - if(item.product_model == 'post' && item.consignee_info) item.consignee_info = JSON.parse(item.consignee_info) - console.log(item.consignee_info) - // 自提信息 - if(item.product_model == 'post' && item.pickup_shop_id > 0) item.pickup_shop_info = JSON.parse(item.pickup_shop_info) - - // 判断是否展示核销码 - if (['ticket', 'line', 'post'].includes(item.product_model)) { - item.isQrcode = true - if (item.product_model == 'post' && !item.pickup_shop_id) { - item.isQrcode = false - } - // 未核销数量 - item.remainNum = 0 - // 轮播图滚动index - item.current = 0 - - // 生成二维码 - item.qrcode.forEach((qrItem, qrIndex) => { - if (qrItem.state == 0) { - item.remainNum += 1 + // 获取订单详情 + async getDetail() { + try { + const res = await this.Post({ + order_id: this.orderId + }, '/api/order/query'); + this.info = res.data; + this.orderChildList = res.data.order_product_list; + this.processOrderData(this.orderChildList); + } catch (error) { + console.error('获取订单详情失败:', error); + } + }, + // 处理订单数据 + processOrderData(orderList) { + orderList.forEach(item => { + // 处理收货地址 + if (item.product_model === 'post' && item.consignee_info) { + item.consignee_info = JSON.parse(item.consignee_info); + } + // 处理自提信息 + if (item.product_model === 'post' && item.pickup_shop_id > 0) { + item.pickup_shop_info = JSON.parse(item.pickup_shop_info); + } + // 处理线路出行人信息 + if (item.product_model === 'line' && item.contacts_info) { + item.contacts_info = JSON.parse(item.contacts_info); + } + // 处理线路核销码 + if (item.product_model === 'line') { + item.qrcode.forEach(qrItem => { + qrItem.sku_name = item.sku_name; + }); + + this.lineQrcodeList = [...this.lineQrcodeList, ...item.qrcode]; + let lineNum = 0; + if (this.lineQrcodeList.length > 0) { + this.lineQrcodeList.forEach((qrItem, index) => { + if (qrItem.state === 0) { + lineNum += 1; } - - this.getCodeImg(qrItem, qrIndex) - }) + this.getCodeImg(qrItem, index); + }); + this.lineNum = lineNum; } - }) - }) + } + // 判断是否展示核销码 + if (['ticket', 'post'].includes(item.product_model)) { + item.isQrcode = true; + if (item.product_model === 'post' && !item.pickup_shop_id) { + item.isQrcode = false; + } + // 未核销数量 + item.remainNum = 0; + // 轮播图滚动index + item.current = 0; + // 生成二维码 + item.qrcode.forEach((qrItem, qrIndex) => { + if (qrItem.state === 0) { + item.remainNum += 1; + } + this.getCodeImg(qrItem, qrIndex); + }); + } + }); }, // 生成二维码 getCodeImg(item, index) { @@ -277,7 +493,7 @@ }); }, //轮播图左右滑动 - swiperChange(e,item) { + swiperChange(e, item) { let { current, source @@ -288,6 +504,18 @@ } this.$forceUpdate() }, + //线路轮播图左右滑动 + swiperChanges(e) { + let { + current, + source + } = e.detail; + //在自动或手动的时候才赋予current值 + if (source === 'autoplay' || source === 'touch') { + this.current = current; + } + this.$forceUpdate() + }, // 复制订单号 clickCopy() { uni.setClipboardData({ @@ -301,6 +529,115 @@ } }); }, + calDate(startDate, endDate) { + var start = new Date(startDate); + var end = new Date(endDate); + var diff = end - start; + var days = Math.floor(diff / (1000 * 60 * 60 * 24)); // 计算天数差 + return days; + }, + callPhone(tel) { + let _this = this + uni.showActionSheet({ + itemList: [tel, '呼叫'], + success: function(res) { + _this.clickPhone(tel) + } + }); + }, + goMap(item) { + if (!item.scene_detail.lon && !item.scene_detail.lat) { + uni.showToast({ + title: '暂未配置地理位置', + icon: 'none' + }) + return + } + debugger + uni.openLocation({ + latitude: Number(item.scene_detail.lat), + longitude: Number(item.scene_detail.lon), + name: item.scene_detail.title, + address: item.scene_detail.address, + success: function() { + console.log('success'); + } + }); + }, + // 申请退款 + refund() { + uni.showModal({ + title: '提示', + content: '是否申请退款?', + success: successRes => { + if (successRes.confirm) { + this.Post({ order_id: this.info.order_id }, '/api/order/refund') + .then(res => { + if (res.code === 1) { + uni.showToast({ title: '申请成功', icon: 'success' }); + this.getDetail(); + } + }); + } + } + }); + }, + // 关闭订单 + closeOrder(id, index) { + uni.showModal({ + title: '提示', + content: '是否关闭订单?', + success: successRes => { + if (successRes.confirm) { + this.Post({ order_id: this.info.order_id }, '/api/order/close') + .then(res => { + if (res.code === 1) { + uni.showToast({ title: '关闭成功', icon: 'success' }); + this.getDetail(); + } + }); + } + } + }); + }, + // 支付 + setOrderId(id) { + this.Post({ + order_id: this.info.order_id, + pay_platform: "miniprogram", + pay_method: 'abc' + }, '/api/order/pay') + .then(res => { + if (res.code == 1) { + uni.requestPayment({ + nonceStr: res.data.nonceStr, + package: res.data.package, + paySign: res.data.paySign, + signType: res.data.signType, + timeStamp: res.data.timeStamp, + success: () => { + this.getDetail(); + } + }); + } + }); + }, + // 快递查询 + openMask(item) { + this.Post({ + child_order_id: item.child_order_id + }, '/api/order/getExpress').then(res => { + if (res.data.length > 0) { + this.postInfo = res.data.reverse() + this.maskShow = true + } else { + uni.showToast({ + title: '暂未查询到物流信息,请联系客服', + icon: 'none' + }); + } + }) + } } } @@ -389,11 +726,22 @@ min-width: 125rpx; } } + + .mask-btn { + width: fit-content; + line-height: 53rpx; + background: #F8F9FA; + border-radius: 11rpx; + border: 1px solid #999999; + padding: 0 15rpx; + margin: 10rpx 0 0 auto; + flex-shrink: 0; + } .line { width: 643rpx; height: 1rpx; - background: #d8d8d83b; + background: #D8D8D8; margin: 33rpx 0; } @@ -433,35 +781,35 @@ height: 23.33rpx; } } - + .pick-box { margin-top: 50rpx; - + .pick-title { font-weight: bold; font-size: 31rpx; color: #222222; width: 500rpx; - + image { width: 33.33rpx; height: 33.33rpx; margin-right: 18rpx; } } - + .pick-subtitle { font-weight: 500; font-size: 24rpx; color: #666666; - + image { width: 56rpx; height: 56rpx; margin-bottom: 10rpx; display: block; } - + &>view { display: flex; flex-direction: column; @@ -469,13 +817,89 @@ } } } - + .hotel-title { font-weight: bold; font-size: 31rpx; color: #222222; margin-top: 30rpx; } + + .order-time { + height: 107rpx; + + .time { + display: flex; + font-family: PingFang SC; + font-size: 24rpx; + color: #000000; + align-items: center; + } + } + + .cal-day { + background: #F2F2F2; + border-radius: 17rpx; + padding: 5rpx 16rpx; + font-family: PingFang SC; + font-weight: 500; + font-size: 24rpx; + color: #000000; + } + + .address-container { + width: 525rpx; + height: 107rpx; + border-radius: 20rpx; + padding: 25rpx 20rpx 25rpx 33rpx; + font-family: PingFang SC; + font-weight: 500; + font-size: 27rpx; + color: #000000; + background-color: #F2F2F2; + background-image: url('https://static.ticket.sz-trip.com/shiweisuzhou/images/homestay/mapBg.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + + image { + width: 30rpx; + height: 30rpx; + } + + .tip { + font-family: PingFang SC; + font-weight: 500; + font-size: 24rpx; + color: #333333; + } + + .address-title { + width: 400rpx; + } + } + + .phone-container { + width: 93rpx; + height: 107rpx; + background: #F2F2F2; + border-radius: 20rpx; + font-family: PingFang SC; + font-weight: 500; + font-size: 24rpx; + color: #333333; + + image { + width: 30rpx; + height: 30rpx; + } + + .tip { + font-family: PingFang SC; + font-weight: 500; + font-size: 24rpx; + color: #333333; + } + } } .kefu-box { @@ -495,16 +919,16 @@ margin-right: 14rpx; } } - + .good-box { display: flex; - + image { width: 140rpx; height: 140rpx; border-radius: 13rpx; } - + &>view { height: 140rpx; justify-content: space-between; @@ -512,44 +936,24 @@ margin-left: 18rpx; width: 371rpx; } + &>view:last-child { margin-left: auto; width: fit-content; text-align: right; } - + .good-title { font-weight: bold; font-size: 27rpx; color: #000000; } - + .good-subtitle { font-weight: 500; font-size: 24rpx; color: #666666; } - - .order-time{ - height: 107rpx; - background: linear-gradient(180deg, #FFFFFF, #F7F7F7); - .time{ - display: flex; - font-family: PingFang SC; - font-size: 24rpx; - color: #000000; - align-items: center; - } - } - .cal-day{ - background: #F2F2F2; - border-radius: 17rpx; - padding: 5rpx 16rpx; - font-family: PingFang SC; - font-weight: 500; - font-size: 24rpx; - color: #000000; - } } } @@ -561,21 +965,21 @@ border: none; background-color: rgba(0, 0, 0, 0); } - - - - - - - - + + + + + + + + // 二维码 .qrcode-remain { font-weight: bold; font-size: 29rpx; color: #000000; text-align: center; - + span { width: 60rpx; text-align: center; @@ -583,13 +987,13 @@ display: inline-block; } } - + .qrcode-box { height: 456rpx; display: flex; align-items: center; margin-top: 32rpx; - + .qrcode-item { width: 467rpx !important; height: 456rpx !important; @@ -600,24 +1004,24 @@ justify-content: space-between; align-items: center; position: relative; - + image { width: 300rpx; height: 300rpx; } - + .qrcode-title { font-weight: bold; font-size: 32rpx; color: #000000; } - + .qrcode-subtitle { font-weight: 500; font-size: 27rpx; color: #888888; } - + .complete-text { position: absolute; width: 300rpx; @@ -628,7 +1032,7 @@ bottom: 0; margin: auto; background: rgba(0, 0, 0, .5); - + view { width: 200rpx; height: 200rpx; @@ -641,26 +1045,26 @@ } } } - + .swiper-point { height: 63rpx; - + view { width: 11rpx; height: 11rpx; background: #D3E8A7; border-radius: 50%; } - + view:not(:first-child) { margin-left: 13rpx; } - + .swiper-points { background: #6A8A2D; } } - + .swiper-prompt { font-weight: 500; font-size: 29rpx; @@ -668,4 +1072,174 @@ text-align: center; margin-bottom: 45rpx; } + + // 底部按钮 + footer { + width: 750rpx; + height: 167rpx; + position: fixed; + bottom: 0; + display: flex; + align-items: center; + background-color: #fff; + border-top: 10rpx solid #F7F7F7; + padding: 0 26rpx; + + .bottom-price { + font-weight: 500; + font-size: 24rpx; + color: #000000; + + span { + font-weight: bold; + font-size: 40rpx; + color: #DC2525; + } + + span::before { + content: '¥'; + font-size: 24rpx; + } + } + + .btn-box { + margin-left: auto; + display: flex; + + .btn { + width: 213rpx; + line-height: 71rpx; + background: #F8F9FA; + border-radius: 11rpx; + border: 1rpx solid #999999; + text-align: center; + margin-right: 14rpx; + font-weight: 500; + font-size: 31rpx; + color: #111111; + } + + .btn:last-of-type { + margin-right: 0; + } + + .pay-btn { + height: 73rpx; + background: #6A8A2D; + border: none; + color: #FFFFFF; + } + } + } + + // 快递查询 + .mask { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.6); + z-index: 1000; + display: flex; + align-items: flex-end; + justify-content: center; + } + + .mask-bg { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + } + + .mask-content { + width: 100%; + padding: 28rpx 0; + border-radius: 20rpx 20rpx 0 0; + background: white; + height: 70%; + position: relative; + overflow-y: auto; + } + + .mask-content .icon-close { + position: absolute; + right: 20rpx; + top: 20rpx; + } + + .mask-content .close-btn { + background-image: url("https://static.ticket.sz-trip.com/taizhou/images/close.png"); + width: 80rpx; + height: 80rpx; + position: absolute; + bottom: -100rpx; + left: 0; + right: 0; + margin: auto; + } + + .mask-title { + font-size: 36rpx; + font-weight: bold; + padding-left: 37rpx; + } + + .mask-content .iconfont { + position: absolute; + right: 30rpx; + top: 20rpx; + } + + .express-all { + margin: 40rpx; + position: relative; + } + + .express-item { + display: flex; + justify-content: space-between; + padding-bottom: 60rpx; + position: relative; + z-index: 1; + } + + .line { + width: 1rpx; + height: 100%; + background: #CCCCCC; + position: absolute; + left: 13rpx; + } + + .express-info { + width: 600rpx; + font-size: 26rpx; + line-height: 40rpx; + color: #999; + } + + .express-info.active { + color: #000; + } + + .express-time { + font-size: 22rpx; + color: #666; + margin-top: 10rpx; + } + + .express-item-icon { + width: 27rpx; + height: 27rpx; + background: #CCCCCC; + border-radius: 50%; + position: relative; + } + + .express-item-icons { + background: #D3E8A7; + } \ No newline at end of file diff --git a/subPackages/order/trades.vue b/subPackages/order/trades.vue index 7954d0d..a8cfdbe 100644 --- a/subPackages/order/trades.vue +++ b/subPackages/order/trades.vue @@ -30,7 +30,7 @@ - 订单编号:{{ item.order_id }} @@ -53,7 +53,7 @@ 合计 - {{ item.total_money / 100 }} + {{ item.paid_money / 100 }} @@ -187,9 +187,9 @@ export default { this.orderId = id; this.Post({ order_id: id, - type: "miniprogram", - platform: 'miniprogram' - }, '/api/pay/unify') + pay_platform: "miniprogram", + pay_method: 'abc' + }, '/api/order/pay') .then(res => { if (res.data) { uni.requestPayment({ @@ -199,19 +199,8 @@ export default { signType: res.data.signType, timeStamp: res.data.timeStamp, success: () => { - const templateIds = [ - // 退款成功通知 - 'hRZoiEES2BWtKb6Xgsnn8khLQH9un5j_11qu0bwlhfE', - // 出票结果通知 - 'YyTCUIYBnrj9CyKks8cOjNX_Rk8a4yVdswMP-zXVbhc' - ]; - uni.requestSubscribeMessage({ - tmplIds: templateIds, - complete: () => { - this.resetList(); - this.getList(); - } - }); + this.resetList(); + this.getList(); } }); } diff --git a/subPackages/ticket/detail.vue b/subPackages/ticket/detail.vue index dd5da20..05ece75 100644 --- a/subPackages/ticket/detail.vue +++ b/subPackages/ticket/detail.vue @@ -882,7 +882,7 @@ display: flex; align-items: center; flex-direction: column; - width: 44rpx; + width: 60rpx; image{ width: 44rpx; height: 42rpx;