热更新

This commit is contained in:
2024-06-13 10:04:13 +08:00
parent e595e034dc
commit 7eaaf64a22
1180 changed files with 70026 additions and 731709 deletions

View File

@@ -2,16 +2,21 @@
<view class="container commonPageBox commonDetailPage">
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<z-nav-bar title="我的订单" bgColor="#3AB3AE" fontColor="#fff" :backState="2000">
<z-nav-bar
title="我的订单"
bgColor="#3AB3AE"
fontColor="#fff"
:backState="2000"
>
<!-- <template slot="left">
<u-icon
@click="goHome"
name="home"
color="#fff"
size="22"
style="display: inline-block; margin-left: 30rpx"
></u-icon>
</template> -->
<u-icon
@click="goHome"
name="home"
color="#fff"
size="22"
style="display: inline-block; margin-left: 30rpx"
></u-icon>
</template> -->
</z-nav-bar>
<!-- 顶部导航栏 -->
@@ -30,10 +35,15 @@
<!-- 站位 -->
<!-- <view v-if="ordersListTab == 1"> -->
<view class="order_box">
<view
class="order_box"
:style="`height: calc(100% - ${(80 + statusBarHeight) * 2}rpx);`"
>
<common-list
imgUrl="url"
noDataIcon="data"
:isScroll="true"
:isLoadingHide="isLoadingHide"
:isNoIcon="true"
:isCondition="true"
:dataList="newList"
@@ -77,18 +87,36 @@
>过期</view
>
<view
v-if="slotProps.row.orderType == 'point'"
class="bookinfolist"
style="height: auto"
>
<!-- <image
class="feng"
v-if="item1.product.productImages"
:src="item1.product.productImages"
mode="aspectFill"
></image> -->
<!-- <view class="description" v-html="item.content">
</view> -->
<view class="btns flexbox">
<view class="booknameleft">充值</view>
</view>
</view>
<view
v-else
v-for="(item1, index1) in slotProps.row.productList"
:key="index1"
class="bookinfolist"
>
<image
class="feng"
v-if="item1.product.productImages"
v-if="item1.product && item1.product.productImages"
:src="item1.product.productImages"
mode="aspectFill"
></image>
<!-- <view class="description" v-html="item.content">
</view> -->
</view> -->
<view class="btns flexbox">
<view class="booknameleft">{{
item1.product.productName
@@ -163,11 +191,11 @@
>申请售后</view
>
<!-- <view
class="orderstatusbtn"
v-if="item.orderStatus == 3 && userRecordid == null"
@click.native.stop="pingji(item.productId)"
>评价</view
> -->
class="orderstatusbtn"
v-if="item.orderStatus == 3 && userRecordid == null"
@click.native.stop="pingji(item.productId)"
>评价</view
> -->
<!-- <view class="orderstatusbtn" v-if="item.orderStatus == 3 && userRecordid != null" @click.stop="showZhuiping(item.productId)">追评</view> -->
</view>
</view>
@@ -184,21 +212,21 @@
</common-list>
</view>
<!-- <view v-if="status == 0" style="text-align: center">
<u-loading-icon style="display: inline-block"></u-loading-icon>
<font
style="
vertical-align: super;
margin-left: 10px;
font-size: 26rpx;
color: #909399;
"
>努力加载中</font
>
</view>
<view v-if="status == 1" style="padding-bottom: 20rpx">
<u-divider v-if="newList.length > 0" text="全部加载完成"></u-divider>
<u-divider v-else text="暂无订单"></u-divider>
</view> -->
<u-loading-icon style="display: inline-block"></u-loading-icon>
<font
style="
vertical-align: super;
margin-left: 10px;
font-size: 26rpx;
color: #909399;
"
>努力加载中</font
>
</view>
<view v-if="status == 1" style="padding-bottom: 20rpx">
<u-divider v-if="newList.length > 0" text="全部加载完成"></u-divider>
<u-divider v-else text="暂无订单"></u-divider>
</view> -->
<!-- 对话框 -->
<u-popup :show="pingjiaShow" :round="10" @close="closePingjia">
@@ -211,8 +239,8 @@
<!-- 评价图片 -->
<!-- end -->
<!-- <uni-forms-item name="comment" label-width="0">
<uni-easyinput type="textarea" v-model="Pform.comment" placeholder="请输入您的商品评价" />
</uni-forms-item> -->
<uni-easyinput type="textarea" v-model="Pform.comment" placeholder="请输入您的商品评价" />
</uni-forms-item> -->
</uni-forms>
<!-- <u-button type="success" @click="submitPJ">提交评价</u-button> -->
<!-- 提交 -->
@@ -309,7 +337,9 @@ import { mapState, mapMutations } from "vuex";
export default {
data() {
return {
currentCateIndex:null,
isShowTab: false,
isLoadingHide: false,
currentCateIndex: 0,
pagination: {
//
page: 1, //
@@ -336,23 +366,28 @@ export default {
ordersTabs: [
{
name: "全部",
value: null,
value: -1,
badge: {},
},
{
name: "待付款",
value: 0,
badge: {},
},
{
name: "待发货",
value: 1,
badge: {},
},
{
name: "待收货",
value: 2,
badge: {},
},
{
name: "已完成",
value: 3,
badge: {},
},
],
ordersListTab: 1,
@@ -399,13 +434,46 @@ export default {
console.log(e, "onload111");
// this.bookid = e.bookid
this.options = e;
this.getBookList(this.ordersListTab, false);
// this.newList = [];
// this.pagination = {
// page: 1, //
// limit: 20, //
// total: 0, //
// };
// this.$nextTick(() => {
// this.ordersTabCLi(this.ordersTabs[0],0);
// // this.getBookList(null, false);
// });
},
onShow() {
this.newList = [];
this.pagination = {
page: 1, //
limit: 20, //
total: 0, //
};
this.$nextTick(() => {
this.ordersTabCLi(this.ordersTabs[0], 0);
});
},
onTabItemTap() {
this.newList = [];
this.pagination = {
page: 1, //
limit: 20, //
total: 0, //
};
this.$nextTick(() => {
this.ordersTabCLi(this.ordersTabs[0], 0);
});
},
onReady() {},
computed: {
...mapState(["userInfo"]),
},
methods: {
...mapMutations(["setLoadingShow"]),
onReachBottom1() {
//
//
@@ -425,7 +493,14 @@ export default {
}
},
// tab
ordersTabCLi(data) {
ordersTabCLi(data, index) {
this.currentCateIndex = index;
this.pagination = {
page: 1, //
limit: 20, //
total: 0, //
};
console.log("data at line 454:", data);
this.ordersListTab = data.value;
this.newestpage = 1;
// this.hotestpage = 1
@@ -445,20 +520,22 @@ export default {
//
toDetail(val) {
console.log(val, "val");
uni.navigateTo({
url:'/pages/curriculum/order/index/index'
})
// uni.navigateTo({
// url:
// "./orderLCont?orderId=" +
// val.orderId +
// "&orderType=" +
// val.orderStatus +
// "&orderSn=" +
// val.orderSn,
// });
// url:'../bookShop/commentsDetail?bookid='+val.bookid+'&bfa_id='+val.id
// })
uni.navigateTo({
url:
"/pages/bookShop/orderLCont?orderId=" +
val.orderId +
"&orderType=" +
val.orderStatus +
"&orderSn=" +
val.orderSn,
});
},
getBookList(flag, refreshflag) {
this.isLoadingHide = false;
var that = this;
// tab
// uni.showLoading({
// title: ''
@@ -470,7 +547,7 @@ export default {
url: "book/buyOrder/getUserOrderStatusNum",
method: "POST",
data: {
userId: this.userInfo.id,
userId: that.userInfo.id,
},
header: {
//
@@ -478,16 +555,21 @@ export default {
},
})
.then((res) => {
this.map = res.map;
this.ordersTabs.map((e) => {
that.map = res.map;
that.ordersTabs.map((e) => {
if (e.value == 0 || e.value == 1 || e.value == 2) {
if (this.map[e.value] > 0) {
if (that.map[e.value] > 0) {
e.badge = {
value: this.map[e.value],
value: that.map[e.value],
};
}
} else {
e.badge = {};
}
});
// this.$set('this.ordersTabs',)
that.$forceUpdate();
})
.catch((e) => {
console.log(e);
@@ -495,8 +577,8 @@ export default {
var params = {
userId: this.userInfo.id,
orderStatus: flag, //null 0- 1- 2- 3- 4- 5-
...this.pagination
orderStatus: flag == -1 ? null : flag, //null 0- 1- 2- 3- 4- 5-
...this.pagination,
// limit: 10,
// page: this.newestpage,
};
@@ -512,16 +594,19 @@ export default {
})
.then((res) => {
console.log(res, "内容获取成功");
this.pagination.total =res.page.total;
that.pagination.total = res.page.total;
if (res.page.total == 0) {
this.isLoadingHide = true;
}
if (res.code == 0 && res.page && res.page.records.length > 0) {
this.newList = this.newList.concat(res.page.records);
that.newList = that.newList.concat(res.page.records);
} else {
//
}
if (res.page.records.length != 10) {
this.status = 1;
that.status = 1;
} else {
this.status = 0;
that.status = 0;
}
})
.catch((e) => {
@@ -624,7 +709,7 @@ export default {
success: (res) => {
if (res.confirm) {
this.$http
.get("/book/buyOrder/cancelOrder?orderSn=" + item.orderSn)
.get("book/buyOrder/cancelOrder?orderSn=" + item.orderSn)
.then((res) => {
if (res.code == 0) {
uni.showToast({
@@ -874,7 +959,7 @@ export default {
</script>
<style lang="scss" scoped>
// @import '@/style/mixin.scss';
@import "@/style/mixin.scss";
.ordersTabs {
// margin: 70rpx 0 0 0;
width: 730rpx;
@@ -1132,11 +1217,10 @@ export default {
padding: 0 !important;
}
.commonDetailPage {
background-color: #d8f8e4 !important;
background-color: $themeBgColor;
}
.order_box {
padding: 20rpx;
height: calc(100% - 200rpx);
}
/deep/.order_box .list_item {
// border-bottom: none;

View File

@@ -23,19 +23,19 @@
<!-- <view class="curriulum_title_box goods_item"> -->
<view class="normal_box">
<view class="normal_box_top" v-if="orderContet.consignee">
<view class="normal_box_top">
<view class="curriulum_title"
>{{ orderContet.consignee.province }}
{{ orderContet.consignee.city }}
{{ orderContet.consignee.county }}
{{ orderContet.consignee.address }}</view
>{{ orderContet.province }}
{{ orderContet.city }}
{{ orderContet.county }}
{{ orderContet.address }}</view
>
<view class="user_info">
<text class="name">
{{ orderContet.consignee.consigneeName }}
{{ orderContet.shippingUser }}
</text>
<text class="tel">
{{ orderContet.consignee.consigneeMobile }}
{{ orderContet.userPhone }}
</text>
</view>
</view>
@@ -61,7 +61,7 @@
订单已被拆分成 {{ sheetList.length }} 个包裹
</view>
<view class="orderItem">
<view class="" style="position: relative; height: 120rpx">
<view class="" style="position: relative; height: 60rpx">
<text
class="orderState orderState0"
v-if="orderContet.orderStatus == 0"
@@ -90,26 +90,60 @@
</view>
<view
class="orderContent"
v-for="(item, index) in orderContet.goodsList"
v-for="(item, index) in goodsList"
:key="index"
@click="goDetail(item.productId)"
v-if="orderContet.goodsList.length > 0"
@click="goDetail(item.productId, item)"
v-if="goodsList.length > 0"
>
<image :src="item.productImage" mode=""></image>
<view class="itemJian">
<view class="orderTitle">
<text>{{ item.productName }}</text>
</view>
<view class="orderPrice">
¥<text style="font-weight: bold">{{ item.productPrice }}</text
><br />
<text
style="color: #bbbbbb; font-size: 20rpx; margin-right: 10rpx"
>X</text
<!-- <image :src="item.productImage" mode="" ></image> -->
<view class="feng" style="position: relative">
<view v-if="item.delFlag == -1" class="delisted" style=""
>已下架</view
>
<!-- <image
:src="selectGoodsData.productImages"
mode="aspectFit"
class="goods_image"
></image> -->
<image
style="width: 100%; height: 100%"
v-if="item.productImages"
:src="item.productImages"
mode="aspectFit"
></image>
<view
v-else
style="
color: #c0c4cc;
font-size: 22rpx;
line-height: 140rpx;
text-align: center;
"
>暂无封面图</view
>
</view>
<view class="goods_info">
<view class="flexbox itemJian">
<view class="booknameleft">
<text
:style="`${item.delFlag == -1 ? 'color:#c0c4cc;' : ''}`"
>{{ item.productName }}</text
>
</view>
<view
style="color: #c0c4cc; font-size: 26rpx; font-weight: 700"
>
×{{ item.quantity ? item.quantity : "" }}</view
>
<text style="color: #bbbbbb">{{ item.quantity }}</text>
</view>
<br clear="both" />
<!-- <view class="btns flexbox" style="margin-top: 10rpx">
<view class="left" style="color: #c0c4cc"></view>
<view class="right flexbox opbtns" style="color: #c0c4cc">
×{{ item.quantity ? item.quantity : "" }}
</view>
</view> -->
</view>
<!-- <view class="orderOper" v-if="orderContet.orderStatus=='3'"> -->
@@ -132,44 +166,67 @@
<br clear="both" />
</view>
<view class="orderContent" v-if="orderContet.products == ''">
<view class="orderContent" v-if="orderContet.orderType == 'vip'">
<image
src="../../static/icon/oder_chong.png"
mode=""
style="height: 150rpx"
src="/static/icon/vip.png"
mode="aspectFill"
style="width: 100rpx; height: 100rpx"
></image>
<view class="itemJian">
<view class="orderTitle">
<text>充值</text>
<view class="orderTitle" style="line-height: 100rpx">
<text>VIP 充值</text>
</view>
<view class="orderPrice">
<text style="font-weight: bold">{{
orderContet.realMoney
}}</text>
<text style="font-weight: bold"></text>
</view>
<br clear="both" />
</view>
<br clear="both" />
</view>
<view class="orderallpri">
<span style="color: #666; margin-right: 10rpx; float: left"
>商品总价 :
</span>
<span>¥</span>{{ orderContet.orderPrice }}
<view
class="orderContent"
v-else-if="orderContet.orderType == 'point'"
>
<image
src="/static/icon/pay_3.png"
mode="aspectFill"
style="width: 100rpx; height: 100rpx"
></image>
<view class="itemJian">
<view class="orderTitle" style="line-height: 100rpx">
<text>充值</text>
</view>
<view class="orderPrice">
<text style="font-weight: bold"
>{{ orderContet.bookBuyConfigEntity.money }}太医币</text
>
</view>
<br clear="both" />
</view>
<br clear="both" />
</view>
<view class="orderReal" v-if="orderContet.orderType == 'order'">
<span style="color: #666; margin-right: 10rpx; float: left"
>运费 :
</span>
<span>¥</span>{{ orderContet.shippingPrice }}
</view>
<view class="orderReal" v-if="orderContet.orderType == 'order'">
<span style="color: #666; margin-right: 10rpx; float: left"
>积分 :
</span>
<span v-if="orderContet.jfDeduction>0">-</span> <span>¥</span>{{ orderContet.jfDeduction }}
</view>
<!-- <view class="orderReal">
<view class="order_item" style="">
<view class="orderallpri">
<span style="color: #666; margin-right: 10rpx; float: left"
>商品总价 :
</span>
<span>¥</span>{{ orderContet.orderMoney }}
</view>
<view class="orderReal" v-if="orderContet.orderType == 'order'">
<span style="color: #666; margin-right: 10rpx; float: left"
>运费 :
</span>
<span>¥</span>{{ orderContet.shippingMoney }}
</view>
<view class="orderReal" v-if="orderContet.orderType == 'order'">
<span style="color: #666; margin-right: 10rpx; float: left"
>积分 :
</span>
<span v-if="orderContet.jfDeduction > 0">-</span> <span>¥</span
>{{ orderContet.jfDeduction }}
</view>
<!-- <view class="orderReal">
<span style="color: #666; margin-right: 10rpx; float: left"
>优惠券 :
</span>
@@ -178,88 +235,88 @@
>
<b v-else style="color: #dd3c0c"><span>-¥</span>0</b>
</view> -->
<view class="orderReal">
<span style="color: #666; margin-right: 10rpx; float: left"
>实付款 :
</span>
<b style="color: #dd3c0c"
><span>¥</span>{{ orderContet.realPrice }}</b
<view class="orderReal" v-if="orderContet.orderStatus != 0">
<span style="color: #666; margin-right: 10rpx; float: left"
>实付款 :
</span>
<b style="color: #dd3c0c"
><span>¥</span>{{ orderContet.realMoney }}</b
>
</view>
</view>
<view class="order_item">
<view class="orderYunf">
<span style="color: #666; float: left">订单编号 : </span>
<text style="font-size: 24rpx; color: #666"
>{{ orderContet.orderSn }}
</text>
<u-tag
@click="handleCopy(orderContet.orderSn, '订单编号')"
borderColor="#3ab3ae"
color="#3ab3ae"
text="复制"
plain
style="float: right; margin-left: 5rpx"
size="mini"
type="success"
></u-tag>
</view>
<view class="orderReal">
<span style="color: #666; margin-right: 10rpx; float: left"
>创建时间 :
</span>
<text style="font-size: 24rpx; color: #666">{{
orderContet.createTime
}}</text>
</view>
<view
class="orderReal"
v-if="
orderContet.orderStatus >= 1 && orderContet.orderStatus != 5
"
>
<span style="color: #666; margin-right: 10rpx; float: left"
>付款时间 :
</span>
<text style="font-size: 24rpx; color: #666">{{
orderContet.paymentDate
}}</text>
</view>
</view>
<view class="orderYunf">
<span style="color: #666; margin-right: 10rpx; float: left"
>订单编号 :
</span>
<text style="font-size: 24rpx; color: #666">{{
orderContet.orderSn
}}</text>
</view>
<view class="orderReal">
<span style="color: #666; margin-right: 10rpx; float: left"
>创建时间 :
</span>
<text style="font-size: 24rpx; color: #666">{{
orderContet.createTime
}}</text>
</view>
<view
class="orderReal"
v-if="orderContet.orderStatus >= 1 && orderContet.orderStatus != 5"
>
<span style="color: #666; margin-right: 10rpx; float: left"
>付款时间 :
</span>
<text style="font-size: 24rpx; color: #666">{{
orderContet.paymentDate
}}</text>
</view>
<!-- <view class="orderReal" v-if="orderContet.orderStatus >= 2 && orderContet.orderStatus != 5">
<span style="color: #666;margin-right: 10rpx;float: left;">发货时间 : </span>
<text style="font-size: 24rpx;color: #666;">{{orderContet.shippingTime}}</text>
</view> -->
<view class="orderOper">
<view style="width: 100%; text-align: right">
<!-- <u-button text="" type="success" plain ></u-button>
<u-button text="" type="primary" plain >
</u-button> -->
<view
v-if="
orderContet.orderStatus == 2 &&
sheetList.length > 0 &&
orderContet.orderStatus != 5
"
class="opFix"
@click="seeExpressDetail(orderContet)"
>查看物流</view
>
<view
v-if="orderContet.orderStatus == 2"
class="opCan"
@click="OverOrder"
>确认收货</view
>
<view
v-if="orderContet.orderStatus == 0"
class="opFix"
@click="canceOrder"
>取消订单</view
>
<view
v-if="orderContet.orderStatus == 0"
class="opCan"
@click="goPay(orderContet)"
>去支付</view
>
<view class="opCan" @click="kefu">联系客服</view>
</view>
</view>
<view class=""></view>
</view>
</view>
</view>
<view class="goods_nav_box">
<common-goods-nav
:iconList="iconList"
:customButton="customButton"
@submit="goBuyJie"
@clickIcon="clickIcon"
>
<!-- leftSlot -->
<template slot="leftSlot" slot-scope="slotProps">
<view
class="price_box order_bottom_box"
v-if="orderContet.orderStatus == 0"
>
<text class="price"
>合计:
<text class="total">¥{{ orderContet.realMoney }}</text>
</text>
</view>
</template>
</common-goods-nav>
<!-- <uni-goods-nav :fill="true" :options="buyOptions" :button-group="customButtonGroup1" @click="onClick"
@buttonClick="buttonClick" /> -->
</view>
<!-- 对话框 -->
<u-popup :show="pingjiaShow" :round="10" @close="closePingjia">
<view class="tanchu">
@@ -400,6 +457,14 @@ import { mapState } from "vuex";
export default {
data() {
return {
iconList: [
{
text: "联系客服",
iconType: 1,
icon: "server-fill",
infoColor: "#666",
},
],
userRecordid: null, // 用户的评价状态
playData: {},
title: "Hello",
@@ -435,6 +500,7 @@ export default {
orderSn: "",
orderType: "",
orderContet: {},
goodsList: [],
deliverDetails: [
{
Traces: [],
@@ -447,6 +513,7 @@ export default {
sheetList: [], // 面单数据
consigneeShow: false,
sheetListShow: false,
customButton: [],
};
},
onLoad(e) {
@@ -471,6 +538,24 @@ export default {
},
methods: {
async goBuyJie(data) {
console.log("index at line 532:", data);
if (data.text == "继续付款") {
this.goPay(this.orderContet);
} else if (data.text == "取消订单") {
this.canceOrder();
} else if (data.text == "确认收货") {
this.OverOrder();
} else if (data.text == "查看物流") {
this.seeExpressDetail(this.orderContet);
}
},
async clickIcon(data) {
console.log("index at line 532:", data);
if (data.text == "联系客服") {
this.kefu();
}
},
// 复制到剪切板
copyData(data) {
uni.setClipboardData({
@@ -747,6 +832,9 @@ export default {
});
}
},
handleCopy(value, title) {
this.$commonJS.handleCopy(value, title);
},
onPageJump(item) {
uni.navigateTo({
url: "./deliverDetail?objId=" + item,
@@ -797,21 +885,69 @@ export default {
// 获取订单详情
getOrderList() {
console.log("this.orderType", this.orderType);
this.$http
// .get(`book/buyOrder/getOrderInfo?orderId=${this.orderID}`)
.get(`book/buyOrder/orderDetail?orderSn=${this.orderSn}`)
.request({
url: "common/buyOrder/commonOrderDetail",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
orderId: this.orderID,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
this.customButton = [];
console.log("订单详情", res);
this.orderContet = res.data.buyOrder;
this.goodsList = res.data.productInfo;
this.consigneeShow = true;
if (
this.orderContet.orderStatus == 2 &&
this.sheetList.length > 0 &&
this.orderContet.orderStatus != 5
) {
this.customButton.push({
width: "160rpx",
text: "查看物流",
color: "#333",
backgroundColor: "#f0f0f0",
color: "#fff",
});
}
if (this.orderContet.orderStatus == 2) {
this.customButton.push({
width: "160rpx",
text: "确认收货",
color: "#fff",
});
}
if (this.orderContet.orderStatus == 0) {
this.customButton.push({
width: "160rpx",
text: "继续付款",
});
}
if (this.orderContet.orderStatus == 0) {
this.customButton.push({
width: "160rpx",
text: "取消订单",
color: "#333",
backgroundColor: "#f0f0f0",
});
}
// var seconds = res.result.timestamp + 30 * 60 + 2 // 过期时间
// var nowSeconds = Math.floor(new Date().getTime() / 1000);
// res.result.overTime = seconds - nowSeconds
this.orderContet = res.result;
this.consigneeShow = true;
//this.userRecordid = res.userRecordid
this.productIDs = res.result.goodsList.map((item) => {
return item.buyOrderProductId;
});
// this.productIDs = res.data.goodsList.map((item) => {
// return item.buyOrderProductId;
// });
// console.log(this.orderContet,'this.orderContet')
if (this.orderContet.orderStatus == 0) {
this.titleStat = "待支付";
@@ -950,11 +1086,16 @@ export default {
},
// 商品内容跳转
goDetail(id) {
uni.navigateTo({
// url: '../bookShop/commodityDetail?id=' + item.id
url: `/pages/goods/index/index?navTitle=''&title=''&id=${id}`,
});
goDetail(id, data) {
console.log("data at line 1277:", data);
if (data.delFlag == -1) {
this.$commonJS.showToast("商品已下架");
} else {
uni.navigateTo({
// url: '../bookShop/commodityDetail?id=' + item.id
url: `/pages/goods/index/index?navTitle=''&title=''&id=${id}`,
});
}
},
},
};
@@ -977,8 +1118,8 @@ export default {
position: absolute;
left: 0;
top: 20rpx;
padding: 10rpx;
top: 0rpx;
padding: 6rpx 10rpx;
border-radius: 0 24rpx 24rpx 0;
font-size: 26rpx;
// font-weight: bold;
@@ -1183,14 +1324,16 @@ export default {
.orderList {
padding: 20rpx;
padding-top: 0;
.orderItem {
padding: 30rpx 10rpx 30rpx 30rpx;
padding: 30rpx 0rpx;
background-color: #fff;
border-radius: 30rpx;
margin-bottom: 30rpx;
.orderContent {
padding: 20rpx;
margin-bottom: 20rpx;
image {
@@ -1199,11 +1342,14 @@ export default {
margin-right: 20rpx;
float: left;
}
.itemJian {
.goods_info {
float: left;
width: 470rpx;
width: calc(100% - 180rpx) !important;
justify-content: space-between;
}
.itemJian {
width: 100%;
justify-content: space-between;
.orderTitle {
font-weight: bold;
font-size: 30rpx;
@@ -1224,24 +1370,22 @@ export default {
.orderallpri {
text-align: right;
border-top: 1px solid #eee;
margin: 40rpx 20rpx 0 0;
padding: 30rpx 0 0 0;
margin: 10rpx 0;
// padding: 30rpx 0 0 0;
font-size: 28rpx;
}
.orderReal {
text-align: right;
font-size: 28rpx;
margin: 5rpx 20rpx 0 0;
padding: 28rpx 0 0 0;
margin: 10rpx 0;
// padding: 28rpx 0 0 0;
}
.orderYunf {
text-align: right;
border-top: 1px solid #eee;
margin: 35rpx 20rpx 0 0;
padding: 30rpx 0 0 0;
font-size: 28rpx;
}
@@ -1269,6 +1413,9 @@ export default {
border: 1px solid #eba00b;
border-radius: 30rpx;
}
.kefu {
float: left;
}
}
}
}
@@ -1374,4 +1521,63 @@ export default {
// right: 30rpx;
}
}
.feng {
background-color: #fafafa;
margin: 0rpx 22rpx 0 0;
height: 140rpx !important;
width: 140rpx !important;
float: left;
border-radius: 14rpx;
// border: 1rpx solid #e9e9e9;
}
.booknameleft {
font-size: 32rpx;
width: calc(100% - 100rpx);
color: #070707;
letter-spacing: 0.5rpx;
font-weight: 600;
}
.order_item {
padding: 20rpx 20rpx;
border-top: 1px solid #eee;
}
/deep/.goods_nav_box {
.left {
margin-top: -10rpx;
width: auto;
height: auto;
position: relative;
// overflow: hidden;
}
}
.delisted {
background-color: red;
color: #fff;
// padding: 2rpx 4rpx;
position: absolute;
border-radius: 4rpx;
font-size: 22rpx;
width: 100rpx;
text-align: center;
height: 40rpx;
line-height: 40rpx;
left: calc((100% - 100rpx) / 2);
top: calc((100% - 40rpx) / 2);
}
.order_bottom_box {
margin-left: 20rpx;
.number {
font-size: 28rpx;
margin-right: 15rpx;
margin-top: 5rpx;
}
.price {
.total {
font-size: 38rpx;
color: red;
}
}
}
</style>

View File

@@ -1,801 +0,0 @@
<template>
<view>
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<!-- <z-nav-bar title="我的订单"></z-nav-bar> -->
<z-nav-bar backState="2000" title="我的订单"></z-nav-bar>
<view class="orderTabs flexbox">
<view v-for="(item,index) in orderTabs" @click="orderTabCLi(item.value)"
:class="orderListTab==item.value?'ordStyle':''">{{item.name}}</view>
</view>
<view class="orderList" v-if="orderList.length > 0">
<view class="orderItem" v-for="(ifex,inten) in orderList" @click="goOrdiCont(ifex)" :key="inten">
<text class="orderState orderState0" v-if="ifex.orderStatus==0">待支付</text>
<text class="orderState orderState1" v-if="ifex.orderStatus==1">待发货</text>
<text class="orderState orderState2" v-if="ifex.orderStatus==2">待收货</text>
<text class="orderState orderState3" v-if="ifex.orderStatus==3">已完成</text>
<text class="orderState orderState5" v-if="ifex.orderStatus==5">已超时</text>
<view class="guoqi flexbox" v-if="ifex.orderStatus==0 && ifex.overTime > 0">
<text>剩余支付时间</text>
<uni-countdown background-color="#ff5500" color="#ffffff" :font-size="14" :show-day="false"
:hour="0" :minute="0" :second="ifex.overTime" @timeup="countDown"></uni-countdown>
</view>
<view class="flexbox orderSn">
<text class="">订单编号: {{ifex.orderSn}}</text>
</view>
<view class="orderContent" :key="index" v-if="ifex.orderType=='order'"
v-for="(item,index) in ifex.productList">
<image :src="item.product.productImages" mode=""></image>
<view class="itemJian">
<view class="orderTitle">
<text>{{item.product.productName}}</text>
</view>
<view class="orderPrice">
<text style="color: #f56c6c;"></text><text
style="font-weight: bold; color: #f56c6c;">{{item.product.price}}</text><br>
<text style="color: #bbbbbb;font-size: 20rpx;margin-right: 10rpx;">X</text>
<text style="color: #bbbbbb;">{{item.quantity}}</text>
</view>
<br clear="both">
</view>
<br clear="both">
</view>
<view class="orderContent" v-if="ifex.orderType=='point'" @click.stop="goOrdiCont(ifex)">
<image src="../../static/icon/oder_chong.png" mode="" style="height: 150rpx;"></image>
<view class="itemJian">
<view class="orderTitle">
<text>天医币充值</text>
</view>
<view class="orderPrice">
<text style="color: #f56c6c;"></text><text
style="font-weight: bold; color: #f56c6c;">{{ifex.realMoney}}</text>
</view>
<br clear="both">
</view>
<br clear="both">
</view>
<view class="orderContent" v-if="ifex.orderType=='vip'" @click.stop="goOrdiCont(ifex)">
<image src="../../static/icon/oder_vip.png" mode="" style="height: 150rpx;"></image>
<view class="itemJian">
<view class="orderTitle">
<text>会员充值</text>
</view>
<view class="orderPrice">
<text style="color: #f56c6c;"></text><text
style="font-weight: bold; color: #f56c6c;">{{ifex.realMoney}}</text>
</view>
<br clear="both">
</view>
<br clear="both">
</view>
<view class="orderReal">
<span style="color: #999; float: left; font-size: 12px;">下单时间{{ifex.createTime}}</span>
<span style="color: #999;margin-right: 10rpx;">实付款 : </span>
<span style=" color: #f56c6c;"></span><text
style="font-weight: bold; color: #f56c6c;">{{ifex.realMoney}}</text>
</view>
<view class="orderOper" v-if="ifex.orderStatus==0">
<view class="opFix" @click.stop = "canceOrder(ifex)">取消订单</view>
<view class="opCan" @click.stop = "getNewIap" v-if="ifex.orderType == 'point' && ifex.paymentMethod == '3'">重新下单</view>
<view class="opCan" v-else @click.stop = "goPay(ifex)">去支付</view>
</view>
</view>
<view v-if="status==0" style="text-align: center;">
<u-loading-icon style="display: inline-block;"></u-loading-icon>
<font style='vertical-align: super;margin-left: 10px;font-size: 26rpx;color: #909399;'>努力加载中</font>
</view>
<view v-if="status==1" style="padding-bottom: 20rpx;">
<u-divider text="全部加载完成"></u-divider>
</view>
</view>
<view class="" v-else style=" margin-top: 250rpx;">
<u-divider text="暂无订单数据"></u-divider>
</view>
<z-navigation></z-navigation>
<music-play :playData="playData"></music-play>
</view>
</template>
<script>
import musicPlay from '@/components/music.vue'
import $http from '@/config/requestConfig.js';
import {
setPay,
setPayAssign,
setWXPay
} from '@/config/utils';
import {
mapState,
mapMutations
} from 'vuex';
export default {
data() {
return {
playData: {},
orderTabs: [{
name: '全部',
value: null
}, {
name: '待支付',
value: 0
}, {
name: '待发货',
value: 1
}, {
name: '待收货',
value: 2
}, {
name: '已完成',
value: 3
}, {
name: '已超时',
value: 5
}, ],
orderListTab: null,
orderList: [],
iapChannel: {},
checking: false, // 正在检测
ComplateRequestArr: null,
isAndorid: true,
status: 3, // 加载状态
totalPage: 0,
page: 1
}
},
onHide() {
this.orderList = [],
this.page = 1
this.totalPage = 0
this.orderListTab = null
},
onShow() {
this.getOrderList()
// this.checkIapOrders() //检查未完成的苹果支付订单
this.getOS()
// this.countDown()
},
computed: {
...mapState(['userInfo']),
},
// 下拉刷新
onPullDownRefresh() {
this.orderList = [],
this.page = 1
this.totalPage = 0
this.getOrderList()
uni.stopPullDownRefresh()
},
onReachBottom() {
console.log('到底了')
if (this.page < this.totalPage) {
this.page++
// console.log('加载',this.page)
this.status = 0
this.getOrderList()
} else {
this.status = 1
console.log('加载完成了', this.page)
return
}
},
components: {
musicPlay
},
methods: {
...mapMutations(['setUserInfo']),
// 苹果用户重新下单
getNewIap(){
uni.navigateTo({
url:'/pages/peanut/reCharge'
})
},
// 倒计时回调
countDown() {
console.log('重新刷新订单')
this.totalPage = 0
this.page = 1
this.orderList = []
this.getOrderList()
},
// 获得操作系统
getOS() {
let oprateOs = ''
oprateOs = uni.getSystemInfoSync().platform
console.log(oprateOs)
if (oprateOs == 'android') {
this.isAndorid = true
} else {
this.isAndorid = false
}
},
checkIapOrders() {
const that = this
// 如果ios已经绑定支付信息就直接支付如果没有绑定就需要先绑定
console.log('检测支付环境...')
plus.payment.getChannels((channels) => {
console.log(channels, 'channels')
for (var i in channels) {
// 判断是否苹果支付1
if (channels[i].id === 'appleiap') {
that.iapChannel = channels[i]
that.restoreComplateRequest() // 检查未关闭订单
// that.requestOrder(productId)
}
}
})
},
// 切换订单状态
orderTabCLi(e) {
this.orderListTab = e
this.totalPage = 0
this.page = 1
this.orderList = []
this.getOrderList()
},
// 获取订单列表
getOrderList() {
let data = {
"userId": "",
"orderStatus": this.orderListTab,
"page": this.page,
"limit": 10,
'userId': this.userInfo.id
}
$http.request({
// url: "book/buyOrder/orderList",
url: "book/buyOrder/getUserOrderList",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data,
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
if (res.code == 0) {
res.page.records.forEach((item, index) => {
var seconds = item.timestamp + 30 * 60 + 2 // 过期时间 30分钟+2
// var seconds = item.timestamp + 30 + 2 // 过期时间 30秒
var nowSeconds = Math.floor(new Date().getTime() / 1000); // 单位秒
item.overTime = seconds - nowSeconds
// console.log(item.overTime,'item.overTime')
})
this.orderList = this.orderList.concat(res.page.records)
this.totalPage = res.page.pages
if (res.page.pages == this.page) {
this.status = 1
} else {
this.status = 3
}
console.log(this.orderList, '订单列表')
}
})
},
// 订单详情
goOrdiCont(e) {
console.log(e, 'e')
//let orderId = e.orderId ? e.orderId : e.id
if(e.orderType == 'point'){ // 充值订单
console.log('跳转到充值页面')
uni.navigateTo({
url: '/pages/peanut/chargeDetaill?orderId=' + e.orderId + '&orderSn=' + e.orderSn
});
}else if(e.orderType == 'order'){ // 实体订单
uni.navigateTo({
url: './orderLCont?orderId=' + e.orderId + '&orderType=' + e.orderStatus + '&orderSn=' + e.orderSn
});
}
},
// 跳转到支付页面
goPay1(e) {
console.log(e, 'goPay1')
uni.navigateTo({
url: '../peanut/reCharge?orderSn=' + e.orderSn
});
},
// 取消订单
canceOrder(e) {
uni.showModal({
title: '提示',
content: '确定要取消订单吗?',
confirmText: "取消订单",
cancelText: "考虑一下",
confirmColor: '#c96713',
cancelColor: '#555',
success: res => {
if (res.confirm) {
this.$http
.post(`book/buyOrder/appDelete?orderId=${e.orderId}`)
.then(res => {
uni.showToast({
icon: 'none',
title: '取消订单成功'
})
this.page = 1
this.totalPage = 0
this.orderList = []
this.getOrderList()
})
}
}
});
},
// 支付
goPay(payItem) {
console.log(payItem, 'payItem')
if (payItem.paymentMethod == 2) {
console.log('阿里支付')
setPay({
typePay: 'alipay',
subject: 'order',
totalAmount: payItem.realMoney,
type: 2,
relevanceoid: payItem.orderSn,
customerId: this.userInfo.id,
}, res => {
if (res.success) {
uni.showToast({
title: "支付成功"
});
} else {
uni.showToast({
title: "支付失败",
icon: "none",
image: '../../static/icon/ic_close.png'
});
}
this.orderList = [],
this.page = 1
this.totalPage = 0
this.getOrderList()
})
} else if (payItem.paymentMethod == 1) {
console.log('微信支付')
// console.log(this.isAndorid)
if (this.isAndorid == false) {
uni.showModal({
title: '提示',
content: '很抱歉,苹果系统暂不支持微信支付',
showCancel: false
})
return false
} else {
let data1 = {
orderSn: payItem.orderSn,
buyOrderId: null,
totalAmount: payItem.realMoney
}
console.log(data1, 'data1')
setWXPay(data1, res => {
if (res.success) {
uni.showToast({
title: "支付成功"
});
} else {
console.log(res)
if (res.data.errMsg.indexOf('User canceled') != -1) {
uni.showToast({
title: "用户取消支付",
icon: "none",
image: '../../static/icon/ic_close.png'
});
} else {
uni.showToast({
title: "支付失败",
icon: "none",
image: '../../static/icon/ic_close.png'
});
}
}
})
}
} else if (payItem.paymentMethod == 3) {
// 苹果充值
console.log('苹果二次支付')
if (this.isAndorid) {
uni.showModal({
title: '提示',
showCancel: false,
content: '很抱歉,当前订单属于苹果系统内购订单,安卓系统无法完成支付操作,您可切换到苹果系统进行支付,也可以取消该订单,并重新下单'
})
} else {
this.iphonepay(payItem)
}
}
},
iphonepay(payItem) {
console.log(this.userInfo.restoreFlag, 'this.userInfo.restoreFlag')
if (this.ComplateRequestArr == null || this.ComplateRequestArr == []) {
this.requestOrder(payItem)
} else {
uni.showModal({
title: '提示',
showCancel: false,
content: '您的账户存在未完成的支付订单请稍后重启app留意账户变动。',
})
}
},
requestOrder(payItem) {
uni.showLoading({
title: '获取商品信息',
mask: true
})
const that = this
// console.log(productId, 88888888)
// ['xxxxx'] 是平台申请拿到的内购商品的id
let IAPOrders = []
IAPOrders.push(payItem.productId + '')
console.log(IAPOrders, 'IAPOrders')
// 新建订单
that.iapChannel.requestOrder(IAPOrders, function(event) {
// uni.hideLoading()
console.log(event, 'event')
for (var index in event) {
var OrderItem = event[index]
// console.log(OrderItem, 'OrderItem')
console.log(OrderItem.productid, 'OrderItem.productid')
that.topay(payItem)
}
}, function(erroemsg) {
uni.showToast({
title: "商品获取失败",
icon: 'none'
})
})
},
topay(payItem) {
const that = this
uni.hideLoading()
// var restoreFlag = true; // 调用支付接口时标记 restoreFlag = true , 实际应用请将标记存储在 storage 中
this.setUserInfo({
restoreFlag: true
});
console.log(this.userInfo, '更新后的用户信息')
plus.payment.request(that.iapChannel, {
productid: payItem.productId,
username: payItem.orderSn, // 用户标识/订单标识
manualFinishTransaction: true // 3.5.1+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction()
}, function(result) {
// restoreFlag = false; // 支付成功清除标记 restoreFlag = false
that.transaction = result
// 支付成功result 为 IAP商品交易信息对象 IAPTransaction 需将返回的支付凭证传给后端进行二次认证
that.iapCheck(result)
}, function(e) {
if (e.errCode == 2) {
// 用户未绑定支付方式app内支付流程结束系统弹出框引导用户绑定支付方式此过程将跳转到系统应用 AppStore 进行绑定支付方式,绑定成功同步支付成功,用户成功付款
// plus.runtime.openURL("https://apps.apple.com/account/billing");
} else {
// restoreFlag = false; // 支付失败清楚标记
that.finishTransaction(result);
//console.log('订单关闭后的用户信息', that.userInfo);
// console.log(e)
//console.log(e.message)
}
});
},
// 查询未关闭订单
restoreComplateRequest() {
let that = this
console.log('检测未完成订单')
// console.log(that.iapChannel,'this.iapChannel')
that.iapChannel.restoreComplateRequest({
manualFinishTransaction: true
}, function(results) {
console.log('进入restoreComplateRequest')
// if(!that.checking){
// that.checking = true
// console.log(that.checking)
// results 格式为数组存放恢复的IAP商品交易信息对象 IAPTransaction通用需将返回的支付凭证传给后端进行二次认证
that.ComplateRequestArr = results
console.log(that.ComplateRequestArr, '未完成订单数组')
if (results && results.length > 0) {
results.map((item, index) => {
// "0"为正在支付;"1"为支付成功;"2"为支付失败;"3"为支付已恢复。
if (item.transactionState == '1') {
// 已经支付,但是没有走逻辑的内购订单
that.iapCheck(item, index)
} else {
// 其他状态的内购订单
that.finishTransaction(item)
}
})
} else {
this.setUserInfo({
restoreFlag: false
});
console.log('无未处理订单,可以拉起新的支付')
}
// }
});
},
// 关闭交易订单
finishTransaction(trans, index) {
this.iapChannel.finishTransaction(trans, (success) => {
console.log('关闭订单成功', index);
if (index == this.ComplateRequestArr.length - 1) { // 最后一个支付订单
this.setUserInfo({
restoreFlag: false
});
console.log(this.userInfo.restoreFlag, 'this.userInfo.restoreFlag')
}
}, (fail) => {
console.log('关闭订单失败');
});
},
iapCheck(result, index) {
const that = this
console.log('进入后台验证')
let data = {
transactionId: result.transactionIdentifier, // 支付交易id
customerOid: that.userInfo.id,
productId: result.payment.productid, // 产品id
orderId: result.payment.username, // 系统订单号
receiptData: result.transactionReceipt, // 苹果返回收据
loadAnimate: 'none', // 请求加载动画
}
console.log(data, 'data')
$http.request({
url: "/Ipa/veri",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data,
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
console.log(JSON.stringify(res))
console.log(res.code)
if (res.code == 0) {
// uni.hideLoading()
console.log('充值订单已处理,请留意账户金额变动....')
// 服务器验证票据有效后在客户端关闭订单
that.finishTransaction(result, index)
} else if (res.code == 200) { // 重复验证订单
console.log('重复验证....')
that.finishTransaction(result, index)
}
}).catch(e => {
console.log('支付验证失败,进入轮询程序...')
that.getIapPayResult(result, index)
})
console.log('--------------')
},
// 轮询验证支付结果
getIapPayResult(result, index) {
// let interval = null
this.ComplateRequestInterval = setTimeout(() => {
if (this.maxTimes <= 3) {
this.iapCheck(result, index)
console.log('执行1', this.maxTimes, this.ComplateRequestInterval)
this.maxTimes += 1
} else {
this.maxTimes = 0
console.log('停止轮询', this.maxTimes, this.ComplateRequestInterval, this.maxTimes)
this.checking = false
this.saveErrorIapOrder(result, index)
clearTimeout(this.ComplateRequestInterval)
}
}, 10000)
},
// 轮询失败接口
saveErrorIapOrder(result, index) {
console.log('提交到充值问题单里面...')
let data = {
transactionId: result.transactionIdentifier,
failureflag: 1,
orderId: result.payment.username,
receiptData: result.transactionReceipt,
productId: result.payment.productid,
customerOid: this.userInfo.id
}
$http.request({
url: "Ipa/failure",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data,
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
console.log(JSON.stringify(res))
if (res.code == 200) {
console.log('提交成功,关闭订单')
this.finishTransaction(result, index)
}
}).catch(e => {
console.log(e)
if (e.statusCode == 0) { // 重复提交,直接关闭订单
this.finishTransaction(result, index)
}
})
},
}
}
</script>
<style lang="scss" scoped>
@import '@/style/mixin.scss';
.guoqi {
font-size: 28rpx;
align-items: center;
color: red;
float: right;
line-height: 40rpx;
}
.flexbox {
display: flex;
}
.orderTabs {
margin: 60rpx 0 0 0;
width: 100%;
padding: 30rpx 3% 3% 3%;
// padding-top: 100rpx;
position: fixed;
top: 80rpx;
background-color: #fff;
z-index: 100;
view {
border-radius: 20rpx;
border: 1px solid #d0d0d0;
display: inline-block;
padding: 20rpx 0;
margin: 0 6rpx;
// margin: 40rpx 0 15rpx 0;
width: 20%;
text-align: center;
font-size: 30rpx;
}
.ordStyle {
background: #f0f9eb;
border: 2rpx solid #54a966;
color: #54a966;
font-weight: bold;
}
}
.orderList {
padding: 20rpx;
margin-top: 130rpx;
.orderItem {
position: relative;
padding: 30rpx 10rpx 30rpx 30rpx;
background-color: #fff;
border-radius: 30rpx;
margin-bottom: 30rpx;
.orderSn {
font-size: 26rpx;
color: #999;
padding-bottom: 20rpx;
border-bottom: 1px solid #eee;
margin-top: 60rpx;
margin-bottom: 30rpx;
}
.orderState {
color: #fff;
position: absolute;
left: 0;
top: 20rpx;
padding: 10rpx;
border-radius: 0 24rpx 24rpx 0;
font-size: 26rpx;
// font-weight: bold;
color: #fff;
}
.orderState0 {
background-color: #e6a23c;
}
.orderState1 {
background-color: #409eff;
}
.orderState2 {
background-color: #f56c6c;
}
.orderState3 {
background-color: #67c23a;
}
.orderState5 {
background-color: #787878;
}
.orderContent {
margin-bottom: 20rpx;
image {
width: 130rpx;
height: 140rpx;
margin-right: 20rpx;
float: left;
}
.itemJian {
float: left;
width: 470rpx;
.orderTitle {
// font-weight: bold;
font-size: 28rpx;
margin: 0 0 20rpx 0;
float: left;
width: 410rpx;
}
.orderPrice {
font-size: 28rpx;
float: right;
width: 60rpx;
text-align: right;
line-height: 40rpx;
}
}
}
.orderReal {
border-top: 1px solid #eee;
text-align: right;
font-size: 30rpx;
margin: 30rpx 20rpx 0 0;
padding: 30rpx 0 0 0;
}
.orderOper {
text-align: right;
margin: 30rpx 20rpx 0 0;
view {
margin-left: 20rpx;
padding: 10rpx 0;
display: inline-block;
width: 150rpx;
font-size: 25rpx;
text-align: center;
}
.opFix {
color: #555;
border: 1px solid #ddd;
border-radius: 30rpx;
}
.opCan {
color: #c96713;
border: 1px solid #eba00b;
border-radius: 30rpx;
}
}
}
}
</style>

View File

@@ -1,5 +1,8 @@
<template>
<view class="container commonPageBox commonDetailPage">
<view
class="container commonPageBox commonDetailPage"
style="background-color: #f2f2f2"
>
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<z-nav-bar
@@ -38,9 +41,11 @@
<view
class="order_box"
:style="`height: calc(100% - ${(80 + statusBarHeight) * 2}rpx);`"
style="background-color: #f2f2f2"
>
<common-list
imgUrl="url"
indexKey="orderSn"
noDataIcon="data"
:isScroll="true"
:isLoadingHide="isLoadingHide"
@@ -52,118 +57,344 @@
:pagination="pagination"
label="title"
>
<template slot="labelSlot" slot-scope="slotProps">
<view slot="labelSlot" slot-scope="slotProps">
<view class="orderInfo color_shandow">
<view class="mainContent">
<view class="btns" style="margin-top: 0rpx">
<view class="flexbox opbtns" style="letter-spacing: 1rpx">
<view
style="
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
line-height: 30rpx;
color: #9b9b9b;
font-size: 26rpx;
font-weight: 400;
"
>{{ slotProps.row.orderSn }}
<u-tag
@click="handleCopy(slotProps.row.orderSn, '订单编号')"
borderColor="#3ab3ae"
color="#3ab3ae"
text="复制"
plain
style="float: right"
size="mini"
type="success"
></u-tag
></view>
</view>
</view>
<view class="item">
<view
class="orderstatus"
v-show="slotProps.row.orderStatus == 0"
>未付款</view
class="item_top"
style="margin-top: 10rpx; margin-bottom: 0"
>
<view
class="orderstatus"
v-show="slotProps.row.orderStatus == 1"
>待发货</view
>
<view
class="orderstatus"
v-show="slotProps.row.orderStatus == 2"
>已发货</view
>
<view
class="orderstatus"
v-show="slotProps.row.orderStatus == 3"
>交易成功</view
>
<view
class="orderstatus"
v-show="slotProps.row.orderStatus == 4"
>交易失败</view
>
<view
class="orderstatus"
v-show="slotProps.row.orderStatus == 5"
>过期</view
>
<view
v-if="slotProps.row.orderType == 'point'"
class="bookinfolist"
style="height: auto"
>
<!-- <image
class="feng"
v-if="item1.product.productImages"
:src="item1.product.productImages"
mode="aspectFill"
></image> -->
<!-- <view class="description" v-html="item.content">
</view> -->
<view class="btns flexbox">
<view class="booknameleft">充值</view>
<view class="source_app"></view>
<view style="text-align: left">
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 0"
>未付款</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 1"
>待发货</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 2"
>已发货</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 3"
>交易成功</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 4"
>交易失败</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 5"
>已过期</text
>
</view>
</view>
<view
v-else
v-for="(item1, index1) in slotProps.row.productList"
:key="index1"
v-if="slotProps.row.orderType == 'vip'"
class="bookinfolist"
>
<image
class="feng"
v-if="item1.product && item1.product.productImages"
:src="item1.product.productImages"
class="feng fengPoint"
src="/static/icon/vip.png"
mode="aspectFill"
></image>
<!-- <view class="description" v-html="item.content">
</view> -->
<view class="btns flexbox">
<view class="booknameleft">{{
item1.product.productName
}}</view>
<view class="right flexbox opbtns price">
¥{{ item1.product.price }}
<view class="booknameleft"> {{ slotProps.row.vipBuyConfigEntity.title }} </view>
<view
style="
line-height: 58rpx;
color: #333;
font-size: 26rpx;
font-weight: 700;
"
>
<text style="font-size: 20rpx"></text>
</view>
</view>
<view
class="btns flexbox"
style="margin-top: 10rpx; padding-bottom: 72rpx"
style="color: #9f9f9f; margin-top: 10rpx; font-size: 24rpx"
>
<view class="left" style="color: #c0c4cc"></view>
<view class="right flexbox opbtns" style="color: #c0c4cc">
×{{ item1.quantity }}
下单时间{{ slotProps.row.createTime }}
</view>
</view>
<view
v-if="slotProps.row.orderType == 'point'"
class="bookinfolist"
>
<image
class="feng fengPoint"
src="/static/icon/pay_3.png"
mode="aspectFill"
></image>
<!-- <view class="description" v-html="item.content">
</view> -->
<view class="btns flexbox">
<view class="booknameleft"> 充值 </view>
<view
style="
line-height: 58rpx;
color: #333;
font-size: 26rpx;
font-weight: 700;
"
>
<text style="font-size: 24rpx"
>{{
slotProps.row.bookBuyConfigEntity.money
}}天医币</text
>
</view>
</view>
<view
class="btns flexbox"
style="color: #9f9f9f; margin-top: 10rpx; font-size: 24rpx"
>
下单时间{{ slotProps.row.createTime }}
</view>
</view>
<view v-if="slotProps.row.orderType == 'order'">
<view
v-for="(item2, index2) in slotProps.row.productList"
:key="slotProps.row.orderId"
class="bookinfolist"
>
<view v-if="item2.product">
<view
class="feng"
v-if="item2.product && item2.product.productImages"
>
<image
:key="Date.now()"
style="width: 100%; height: 100%"
mode="aspectFit"
:src="item2.product.productImages"
></image>
</view>
<view
v-else
class="feng"
style="
color: #c0c4cc;
font-size: 22rpx;
line-height: 140rpx;
text-align: center;
"
>暂无封面图</view
>
<!-- <view class="description" v-html="item.content">
</view> -->
<view class="btns flexbox">
<view class="booknameleft">{{
item2.product && item2.product.productName
? item2.product.productName
: ""
}}</view>
<view
style="
line-height: 58rpx;
color: #333;
font-size: 26rpx;
font-weight: 700;
"
>
<text style="font-size: 20rpx"></text>
{{
item2.product.price ? item2.product.price : ""
}}</view
>
</view>
<view class="btns flexbox" style="margin-top: 10rpx">
<view class="left" style="color: #c0c4cc"></view>
<view
class="right flexbox opbtns"
style="color: #c0c4cc"
>
×{{ item2.quantity ? item2.quantity : "" }}
</view>
</view>
</view>
<view v-else>
<view class="feng"></view>
<view class="btns flexbox">
<view class="booknameleft" style="color: #181818"
>未知商品</view
>
<view
style=""
class="right flexbox opbtns product_quantity"
>
×{{ item2.quantity ? item2.quantity : "" }}
</view>
</view>
</view>
</view>
</view>
<view class="btns flexbox" style="margin-top: 10rpx">
<view class="left" style="color: #c0c4cc"></view>
<view class="right flexbox opbtns">
<view style="margin-top: 10rpx; overflow: hidden">
<view
class="btns flexbox"
style="float: right; width: auto !important"
>
<view
style="color: #000; font-size: 30rpx; font-weight: 700"
>实付款</view
>
<view
style="color: #000; font-size: 30rpx; font-weight: 700"
>{{ " ¥" + slotProps.row.realMoney }}</view
class="right flexbox opbtns"
style="
width: auto;
line-height: 44rpx;
letter-spacing: 1rpx;
display: flex;
align-items: center;
"
>
<view
style="
line-height: 46rpx;
color: #000;
font-size: 28rpx;
font-weight: 500;
margin-right: 10rpx;
"
>实付款</view
>
<view
style="
/* margin-top: 8rpx; */
line-height: 46rpx;
color: #333;
font-size: 30rpx;
font-weight: 700;
"
>
<text style="font-size: 20rpx"></text>
{{
slotProps.row.realMoney ||
slotProps.row.realMoney == 0
? slotProps.row.realMoney
: ""
}}</view
>
</view>
</view>
<view
class="btns flexbox"
style="
margin-top: 0rpx;
float: right;
width: auto;
margin-left: 20rpx;
"
v-if="
(slotProps.row.addressId == 0 ||
slotProps.row.addressId == null) &&
slotProps.row.orderType == 'order' &&
slotProps.row.jfDeduction > 0
"
>
<view
class="right flexbox opbtns"
style="
line-height: 44rpx;
letter-spacing: 1rpx;
display: flex;
align-items: center;
"
><text style="color: #9b9b9b"> </text>
<view
style="
line-height: 46rpx;
color: #9b9b9b;
font-size: 24rpx;
font-weight: 500;
margin-right: 10rpx;
"
>积分抵扣</view
>
<view
style="
/* margin-top: 8rpx; */
line-height: 46rpx;
color: #9b9b9b;
font-size: 26rpx;
font-weight: 700;
"
>
<text style="font-size: 20rpx">¥</text>
{{ slotProps.row.jfDeduction }}
</view> </view
><text style="color: #9b9b9b"></text>
</view>
</view>
<view
class="operation_box boxShadow"
v-if="slotProps.row.isShowMore == true"
>
<view
v-if="slotProps.row.orderStatus == 0"
@click.native.stop="canceOrder(slotProps.row)"
>取消订单</view
>
</view>
<view class="btns flexbox" style="margin-top: 10rpx">
<view
class="left"
style="color: #c0c4cc"
@click.native.stop="toDetail(slotProps.row)"
>订单详情</view
@click.native.stop="
openMore(slotProps.row, slotProps.rowIndex)
"
>更多</view
>
<view class="right flexbox opbtns">
<view
class="orderstatusbtn"
v-if="slotProps.row.orderStatus == 0"
@click.native.stop="canceOrder(slotProps.row)"
>取消订单</view
>
<view
class="orderstatusbtn"
class="orderstatusbtn orderstatusbtn_success"
v-if="slotProps.row.orderStatus == 0"
@click.native.stop="goPay(slotProps.row)"
>继续付款</view
@@ -191,24 +422,48 @@
>申请售后</view
>
<!-- <view
class="orderstatusbtn"
v-if="item.orderStatus == 3 && userRecordid == null"
@click.native.stop="pingji(item.productId)"
>评价</view
> -->
class="orderstatusbtn"
v-if="item.orderStatus == 3 && userRecordid == null"
@click.native.stop="pingji(item.productId)"
>评价</view
> -->
<!-- <view class="orderstatusbtn" v-if="item.orderStatus == 3 && userRecordid != null" @click.stop="showZhuiping(item.productId)">追评</view> -->
</view>
</view>
<view
style="border-bottom: 2rpx solid #e9e9e9; height: 50rpx"
v-if="slotProps.rowIndex < slotProps.row.length - 1"
></view>
</view>
<!-- <view class="btns" style="margin-top: 10rpx">
<view class="flexbox opbtns" style="">
<view
style="
width: 100%;
line-height: 28rpx;
color: #9b9b9b;
font-size: 26rpx;
font-weight: 400;
display: flex;
align-items: center;
"
><u-icon
name="clock"
color="#9b9b9b"
style="margin-right: 10rpx"
size="20"
></u-icon
>{{ slotProps.row.createTime }}</view
>
</view>
</view> -->
</view>
</view>
<!-- <text v-if="slotProps.row.conditions!='03'">【试听】</text> -->
</template>
</view>
</common-list>
</view>
<!-- <view v-if="status == 0" style="text-align: center">
@@ -323,6 +578,15 @@
</view>
</u-popup>
<z-navigation></z-navigation>
<u-action-sheet
:closeOnClickAction="true"
:closeOnClickOverlay="true"
:actions="moreList"
:show="isShowMore"
cancelText="关闭"
@close="isShowMore = false"
@select="selectClick"
></u-action-sheet>
<music-play :playData="playData"></music-play>
</view>
</template>
@@ -337,8 +601,16 @@ import { mapState, mapMutations } from "vuex";
export default {
data() {
return {
isShowMore: false,
come: "1",
isShowTab: false,
isLoadingHide: false,
moreList: [
{
name: "取消订单",
key: "false",
},
],
currentCateIndex: 0,
pagination: {
// 请求参数
@@ -390,6 +662,7 @@ export default {
badge: {},
},
],
selectOrderInfo: {},
ordersListTab: 1,
newestpage: 1,
// hotestpage: 1,
@@ -445,27 +718,27 @@ export default {
// // this.getBookList(null, false);
// });
},
onShow() {
async onShow() {
this.newList = [];
this.pagination = {
page: 1, //页码
limit: 20, //每页显示
total: 0, //总条数
};
this.$nextTick(() => {
this.ordersTabCLi(this.ordersTabs[0], 0);
this.$nextTick(async () => {
await this.ordersTabCLi(this.ordersTabs[0], 0);
});
},
onTabItemTap() {
async onTabItemTap() {
this.newList = [];
this.pagination = {
page: 1, //页码
limit: 20, //每页显示
total: 0, //总条数
};
this.$nextTick(() => {
this.ordersTabCLi(this.ordersTabs[0], 0);
});
// this.$nextTick(async () => {
// await this.ordersTabCLi(this.ordersTabs[0], 0);
// });
},
onReady() {},
computed: {
@@ -473,7 +746,24 @@ export default {
},
methods: {
...mapMutations(["setLoadingShow"]),
getImageUrl(url) {
// 通过在URL后面添加时间戳来避免缓存
return `${url}?timestamp=${Date.now()}`;
},
selectClick(index) {
console.log("index at line 609:", index);
if (index.key == "false") {
this.isShowMore = false;
this.canceOrder(this.selectOrderInfo);
}
},
openMore(row, index) {
this.selectOrderInfo = row;
this.isShowMore = true;
},
handleCopy(value, title) {
this.$commonJS.handleCopy(value, title);
},
onReachBottom1() {
// 上拉加载
// 当列表数量不大于或等于总数量,则再次调用接口请求数据
@@ -544,10 +834,11 @@ export default {
// 顶部红点数量
$http
.request({
url: "book/buyOrder/getUserOrderStatusNum",
url: "common/buyOrder/getBuyOrderNumByStatus",
method: "POST",
data: {
userId: that.userInfo.id,
come: this.come,
},
header: {
//默认 无 说明:请求头
@@ -555,13 +846,24 @@ export default {
},
})
.then((res) => {
that.map = res.map;
// 订单状态
// * 0: 待付款
// * 1: 待发货
// * 2: 已发货
// * 3已完成
// * 4: 交易失败
// * 5: 已过期
console.log("res at line 757:", res);
that.map = res.data;
that.ordersTabs.map((e) => {
if (e.value == 0 || e.value == 1 || e.value == 2) {
if (that.map[e.value] > 0) {
var numList = that.map.filter((v) => v.order_status == e.value);
console.log("num at line 771:", numList);
if (numList.length > 0) {
e.badge = {
value: that.map[e.value],
value: numList[0].num,
};
}
} else {
@@ -577,14 +879,15 @@ export default {
var params = {
userId: this.userInfo.id,
orderStatus: flag == -1 ? null : flag, //传null为全部订单状态 0-未付款 1-待发货 2-已发货 3-交易成功 4-交易失败 5-过期
come: this.come,
orderStatus: flag == -1 ? "" : flag, //传null为全部订单状态 0-未付款 1-待发货 2-已发货 3-交易成功 4-交易失败 5-过期
...this.pagination,
// limit: 10,
// page: this.newestpage,
};
$http
this.$http
.request({
url: "book/buyOrder/getUserOrderList",
url: "common/buyOrder/commonBuyOrderList",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: params,
header: {
@@ -594,16 +897,16 @@ export default {
})
.then((res) => {
console.log(res, "内容获取成功");
that.pagination.total = res.page.total;
if (res.page.total == 0) {
that.pagination.total = res.data.total;
if (res.data.total == 0) {
this.isLoadingHide = true;
}
if (res.code == 0 && res.page && res.page.records.length > 0) {
that.newList = that.newList.concat(res.page.records);
if (res.code == 0 && res.data && res.data.records.length > 0) {
that.newList = that.newList.concat(res.data.records);
} else {
//
}
if (res.page.records.length != 10) {
if (res.data.records.length != 10) {
that.status = 1;
} else {
that.status = 0;
@@ -709,7 +1012,7 @@ export default {
success: (res) => {
if (res.confirm) {
this.$http
.get("/book/buyOrder/cancelOrder?orderSn=" + item.orderSn)
.get("book/buyOrder/cancelOrder?orderSn=" + item.orderSn)
.then((res) => {
if (res.code == 0) {
uni.showToast({
@@ -959,7 +1262,7 @@ export default {
</script>
<style lang="scss" scoped>
// @import '@/style/mixin.scss';
@import "@/style/mixin.scss";
.ordersTabs {
// margin: 70rpx 0 0 0;
width: 730rpx;
@@ -999,15 +1302,21 @@ export default {
}
}
.orderstatusbtn {
color: #000;
border: 1px solid #999;
border-radius: 10rpx;
padding: 0 10rpx;
margin-left: 20rpx;
width: 140rpx;
width: 160rpx !important;
height: 60rpx;
line-height: 55rpx !important;
color: #1d1d1d;
border: 1px solid #a0a0a0;
border-radius: 30rpx;
// padding: 0 10rpx;
text-align: center;
margin-left: 20rpx;
font-size: 28rpx;
}
.orderstatusbtn_success {
color: #f5342b;
border-color: #f5342b;
}
.flexbox {
display: flex;
}
@@ -1084,17 +1393,29 @@ export default {
padding-top: 20rpx;
}
.orderInfo {
position: relative;
justify-content: space-between;
// margin-bottom: 15px;
background-color: #fff;
padding: 20rpx 30rpx;
padding: 20rpx 20rpx;
border: 1px splid #999;
box-sizing: border-box;
// padding-bottom: 20rpx;
border-radius: 20rpx;
margin-bottom: 20rpx;
.bookinfolist {
height: 180rpx;
width: 100%;
margin-bottom: 20rpx;
overflow: hidden;
// height: 180rpx;
}
.bookinfolist:nth-last-child(1) {
margin-bottom: 0 !important;
}
.operation_box {
position: absolute;
bottom: 20rpx;
left: 40rpx;
}
}
.mainContent {
@@ -1109,18 +1430,43 @@ export default {
// margin-bottom: 20rpx;
}
.feng {
margin: 0rpx 20rpx 0 0;
height: 160rpx;
background-color: #fafafa;
margin: 0rpx 22rpx 0 0;
height: 140rpx;
width: 140rpx;
float: left;
border-radius: 20rpx;
border: 1rpx solid #e9e9e9;
border-radius: 14rpx;
// border: 1rpx solid #e9e9e9;
}
.point_box {
.booknameleft {
line-height: 70rpx !important;
}
}
.fengPoint {
background-color: #fff;
height: 100rpx;
width: 100rpx;
}
.item_top {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 25rpx;
.source_app {
font-size: 26rpx;
font-weight: bold;
line-height: 26rpx;
}
}
.orderstatus {
font-size: 30rpx;
color: red;
line-height: 24rpx;
font-size: 24rpx;
color: #e55f18;
text-align: right;
padding-bottom: 10rpx;
letter-spacing: 2rpx;
}
/deep/.description {
overflow: hidden;
@@ -1145,8 +1491,10 @@ export default {
justify-content: space-between;
align-items: center;
.booknameleft {
width: calc(100% - 100rpx);
color: #333;
font-size: 32rpx;
width: calc(100% - 200rpx);
color: #070707;
letter-spacing: 0.5rpx;
font-weight: 600;
}
.left {
@@ -1160,7 +1508,7 @@ export default {
align-items: center;
}
.price {
width: 80rpx;
width: 120rpx;
}
.gzicon {
margin: 0 0 0 20rpx;
@@ -1203,7 +1551,7 @@ export default {
color: #fff;
}
.item1 {
.item2 {
margin-right: 20rpx;
}
}
@@ -1217,7 +1565,7 @@ export default {
padding: 0 !important;
}
.commonDetailPage {
background-color: #d8f8e4 !important;
background-color: $themeBgColor;
}
.order_box {
padding: 20rpx;
@@ -1228,4 +1576,9 @@ export default {
padding-right: 0 !important;
border: none !important;
}
.product_quantity {
width: auto;
color: #9b9b9b;
font-size: 26rpx;
}
</style>