测试版

This commit is contained in:
liuyuan
2025-03-05 15:16:45 +08:00
parent 8dbdce6d3f
commit 9accfddbe5
3849 changed files with 365801 additions and 0 deletions

965
pages/order/index.vue Normal file
View File

@@ -0,0 +1,965 @@
<template>
<view class="commonPageBox commonDetailPage">
<z-nav-bar title="我的订单" :backState="2000"></z-nav-bar>
<view class="cateList flexbox">
<common-sticky itemStyle="width:20%; height: 68rpx;font-size:24rpx;" :list="ordersTabs" label="name"
:currentCateIndex="currentCateIndex" @handleselectCate="ordersTabCLi"></common-sticky>
</view>
<view class="order_box" :style="`height: calc(100% - ${(80 + statusBarHeight) * 2}rpx);`">
<common-list imgUrl="url" indexKey="orderSn" noDataIcon="data" :isScroll="true" :isOrderList="true" :axiosStatus="axiosStatus"
:isLoadingHide="isLoadingHide" :isNoIcon="true" :isCondition="true" :dataList="newList"
@hancleClick="toDetail" @lower="onReachBottom1" :pagination="pagination" label="title">
<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, '订单编号')" text="复制" plain style="float: right" size="mini"
type="success"></u-tag>
</view>
</view>
</view>
<view class="item">
<view class="item_top" style="margin-top: 10rpx; margin-bottom: 0">
<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-if="slotProps.row.orderType == 'vip'" class="bookinfolist">
<image class="feng fengPoint" src="../../static/icon/vip.png" mode="aspectFill"></image>
<view class="btns flexbox">
<view class="booknameleft">
{{ slotProps.row.vipBuyConfigEntity?slotProps.row.vipBuyConfigEntity.title:'' }}
<text class="vip_year" v-if="slotProps.row.vipBuyConfigEntity.year">({{ slotProps.row.vipBuyConfigEntity.year }})</text>
</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="color: #9f9f9f; margin-top: 10rpx; font-size: 24rpx">
下单时间{{ 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="btns flexbox">
<view class="booknameleft"> 充值 {{ slotProps.row.bookBuyConfigEntity.money }}天医币</view>
<view style="
line-height: 58rpx;
color: #333;
font-size: 26rpx;
font-weight: 700;
">
</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="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 style="margin-top: 10rpx; overflow: hidden">
<view class="btns flexbox" style="float: right; width: auto !important">
<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="
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="
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.stop="canceOrder(slotProps.row)">取消订单</view>
</view>
<view class="btns flexbox" style="margin-top: 10rpx">
<view class="left" style="color: #c0c4cc"
v-if="slotProps.row.orderStatus != 3"
@click.stop="openMore(slotProps.row, slotProps.rowIndex)">更多</view>
<view class="left" v-if="slotProps.row.orderStatus == 3"></view>
<view class="right flexbox opbtns">
<view class="orderstatusbtn orderstatusbtn_success"
v-if="slotProps.row.orderStatus == 0"
@click.stop="goPay(slotProps.row)">继续付款</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 1">催发货</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 2"
@click.stop="seeExpressDetail(slotProps.row)">查看物流</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 2"
@click.stop="OverOrder(slotProps.row)">确认收货</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 3">申请售后</view>
</view>
</view>
<view style="border-bottom: 2rpx solid #e9e9e9; height: 50rpx"
v-if="slotProps.rowIndex < slotProps.row.length - 1"></view>
</view>
</view>
</view>
</view>
</common-list>
</view>
<u-action-sheet :closeOnClickAction="true" :closeOnClickOverlay="true" :actions="moreList" :show="isShowMore"
cancelText="关闭" @close="isShowMore = false" @select="selectClick"></u-action-sheet>
</view>
</template>
<script>
import $http from "@/config/requestConfig.js";
import {
setPay,
setPayAssign,
setWXPay
} from "@/config/utils";
import {
mapState,
mapMutations
} from "vuex";
export default {
data() {
return {
axiosStatus: null,
isShowMore: false,
come: "3",
isShowTab: false,
isLoadingHide: false,
moreList: [{
name: "取消订单",
key: "false",
}, ],
currentCateIndex: 0,
pagination: {
page: 1, //页码
limit: 20, //每页显示
total: 0, //总条数
},
playData: {},
options: {},
windowWidth: 0,
bookid: null,
booklistpage: 1,
productList: [],
productInfo: {},
page: 1,
pageSize: 10,
total: 0,
status: 3,
bfaid: null,
ordersTabs: [{
name: "全部",
value: -1,
badge: {},
},
{
name: "待付款",
value: 0,
badge: {},
},
{
name: "待发货",
value: 1,
badge: {},
},
{
name: "待收货",
value: 2,
badge: {},
},
{
name: "已完成",
value: 3,
badge: {},
},
],
selectOrderInfo: {},
ordersListTab: 1,
newestpage: 1,
newList: [],
map: {}
};
},
onUnload() {
uni.getStorageSync("orderStatus", 0)
},
onPullDownRefresh() {
uni.stopPullDownRefresh();
this.newestpage = 1;
this.newList = [];
this.getBookList(this.ordersListTab, false);
},
onReachBottom() {
this.newestpage++;
this.getBookList(this.ordersListTab, false);
},
onLoad(e) {
this.windowWidth = uni.getSystemInfoSync().windowWidth;
this.options = e;
},
onShow() {
uni.setStorageSync("orderStatus", 0)
var status = uni.getStorageSync("orderStatus");
this.newList = [];
this.pagination = {
page: 1, //页码
limit: 20, //每页显示
total: 0, //总条数
};
this.$nextTick(async () => {
await this.ordersTabCLi(this.ordersTabs[status], status);
});
},
computed: {
...mapState(["userInfo"]),
},
methods: {
...mapMutations(["setLoadingShow"]),
selectClick(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() {
// 上拉加载
// 当列表数量不大于或等于总数量,则再次调用接口请求数据
if (this.newList.length >= this.pagination.total) return;
this.pagination.page++;
this.getBookList(this.ordersListTab, false);
},
// 切换tab状态
ordersTabCLi(data, index) {
this.axiosStatus = 0
this.currentCateIndex = index;
this.pagination = {
page: 1, //页码
limit: 20, //每页显示
total: 0, //总条数
};
this.ordersListTab = data.value;
this.newestpage = 1;
this.newList = [];
this.getBookList(this.ordersListTab, false);
},
// 订单详情
toDetail(val) {
uni.navigateTo({
url: "/pages/detail/orderLCont?orderId=" +
val.orderId +
"&orderType=" +
val.orderStatus +
"&orderSn=" +
val.orderSn,
});
},
//初始化获取数据
getBookList(flag, refreshflag) {
this.isLoadingHide = false;
var that = this;
// 顶部红点数量
$http.request({
url: "common/buyOrder/getBuyOrderNumByStatus",
method: "POST",
data: {
userId: that.userInfo.id,
come: this.come,
},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
//订单状态
// * 0: 待付款
// * 1: 待发货
// * 2: 已发货
// * 3已完成
// * 4: 交易失败
// * 5: 已过期
that.map = res.data;
that.ordersTabs.map((e) => {
if (e.value == 0 || e.value == 1 || e.value == 2) {
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: numList[0].num,
};
}
} else {
e.badge = {};
}
});
that.$forceUpdate();
})
.catch((e) => {
console.log(e);
});
uni.showLoading({
title: '加载中'
});
//订单数据
var params = {
userId: this.userInfo.id,
come: this.come,
orderStatus: flag == -1 ? "" : flag, //传null为全部订单状态 0-未付款 1-待发货 2-已发货 3-交易成功 4-交易失败 5-过期
...this.pagination
}
this.$http.request({
url: "common/buyOrder/commonBuyOrderList",
method: "POST",
data: params,
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
uni.hideLoading();
that.pagination.total = res.data.total;
if (res.data.total == 0) {
this.isLoadingHide = true;
}
if (res.code == 0 && res.data && res.data.records.length > 0) {
that.newList = that.newList.concat(res.data.records);
} else {
}
if (res.data.records.length != 10) {
that.status = 1;
} else {
that.status = 0;
}
})
.catch((e) => {
});
this.axiosStatus = 1
},
// 支付
goPay(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"
});
}
this.getOrderList();
}
);
} else if (payItem.paymentMethod == 1) {
console.log("微信支付");
if (this.isAndorid == false) {
uni.showModal({
title: "提示",
content: "很抱歉,苹果系统暂不支持微信支付",
showCancel: false,
});
return false;
} else {
let data1 = {
orderSn: payItem.orderSn,
buyOrderId: null,
totalAmount: payItem.realMoney,
};
setWXPay(data1, (res) => {
if (res.success) {
uni.showToast({
title: "支付成功",
});
} else {
if (res.data.errMsg.indexOf("User canceled") != -1) {
uni.showToast({
title: "用户取消支付",
icon: "none"
});
} else {
uni.showToast({
title: "支付失败",
icon: "none"
});
}
}
});
}
} else if (payItem.paymentMethod == 3) {
// 苹果充值
console.log("苹果二次支付");
if (this.isAndorid) {
uni.showModal({
title: "提示",
showCancel: false,
content: "很抱歉,当前订单属于苹果系统内购订单,安卓系统无法完成支付操作,您可切换到苹果系统进行支付,也可以取消该订单,并重新下单",
});
} else {
this.iphonepay(payItem);
}
}
},
// 取消订单
canceOrder(item) {
uni.showModal({
title: "提示",
content: "确定要取消订单吗?",
confirmText: "取消订单",
cancelText: "考虑一下",
confirmColor: "#c96713",
cancelColor: "#555",
success: (res) => {
if (res.confirm) {
this.$http
.get("book/buyOrder/cancelOrder?orderSn=" + item.orderSn)
.then((res) => {
if (res.code == 0) {
uni.showToast({
icon: "none",
title: "取消订单成功",
});
this.newestpage = 1;
this.newList = [];
this.getBookList(this.ordersListTab, false);
}
});
}
},
});
},
// 查看物流
seeExpressDetail(item) {
// 直接展示详情
uni.navigateTo({
url: "./deliverDetail?orderSn=" +
item.orderSn +
"&expressOrderSn=" +
item.expressList[0].expressOrderSn,
});
},
// 确认收货
OverOrder(item) {
uni.showModal({
title: "提示",
content: "确认收货?",
success: (res) => {
let data = {
orderId: item.orderId,
orderStatus: "3",
};
if (res.confirm) {
uni.showLoading();
$http.request({
url: "book/buyOrder/update",
method: "POST",
data,
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code == 0) {
uni.hideLoading();
uni.showToast({
title: "收货成功",
icon: "success",
duration: 1000,
});
this.newestpage = 1;
this.newList = [];
this.getBookList(this.ordersListTab, false);
}
});
} else if (res.cancel) {}
},
});
}
}
};
</script>
<style lang="scss" scoped>
@import "@/static/mixin.scss";
.ordersTabs {
width: 730rpx;
position: fixed;
background-color: #f7faf9;
z-index: 100;
.ordersdefine {
display: inline-block;
padding: 20rpx 0 20rpx 0;
// margin: 40rpx 0 15rpx 0;
width: 140rpx;
text-align: center;
font-size: 30rpx;
position: relative;
.ordersnum {
position: absolute;
top: 8rpx;
right: 0rpx;
background-color: red;
// border:1rpx solid #a3a3a3;
border-radius: 40rpx;
width: 28rpx;
height: 28rpx;
font-size: 20rpx;
font-weight: 500;
color: rgb(255, 255, 255);
}
}
.ordStyle {
font-weight: bold;
}
}
.orderstatusbtn {
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;
}
.container {
padding: 0 10px;
}
.star {
display: inline-block;
width: 20px;
height: 20px;
margin-right: 10rpx;
}
.starGray {
background: url(../../static/icon/star_greey.png) no-repeat;
background-size: contain;
}
.starLight {
background: url(../../static/icon/star_light.png) no-repeat;
background-size: contain;
}
.cuIcon-emoji {
background: url(../../static/biaoqing.png) no-repeat;
background-size: contain;
display: block;
margin-right: 20rpx;
width: 30px;
}
.cuIcon-keyboard {
background: url(../../static/biaoqing.png) no-repeat;
background-size: contain;
display: block;
width: 30px;
}
.tanchu {
padding: 40rpx 30rpx 40rpx 30rpx;
position: relative;
.dp_title {
font-size: 32rpx;
margin-bottom: 50rpx;
color: #555;
text-align: center;
font-weight: bold;
}
.dp_add {
position: absolute;
top: 40rpx;
right: 30rpx;
font-size: 22rpx;
background-color: #fd6004;
color: #fff;
border-radius: 10rpx;
padding: 5rpx 10rpx;
.u-icon {
display: inline-block;
margin-right: 5rpx;
}
}
}
.quesheng {
text-align: center;
margin-top: 100rpx;
color: #8b8a91;
padding-bottom: 20rpx;
padding-top: 20rpx;
}
.orderInfo {
position: relative;
justify-content: space-between;
background-color: #fff;
padding: 20rpx 20rpx;
border: 1px splid #999;
box-sizing: border-box;
border-radius: 10rpx;
margin-bottom: 20rpx;
.bookinfolist {
width: 100%;
margin-bottom: 20rpx;
overflow: hidden;
}
.bookinfolist:nth-last-child(1) {
margin-bottom: 0 !important;
}
.operation_box {
position: absolute;
bottom: 20rpx;
left: 40rpx;
}
}
.mainContent {
background-color: #fff;
.item {
box-sizing: border-box;
border-radius: 20rpx;
}
.feng {
background-color: #fafafa;
margin: 0rpx 22rpx 0 0;
height: 140rpx;
width: 140rpx;
float: left;
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 {
line-height: 24rpx;
font-size: 24rpx;
color: #f5342b;
text-align: right;
letter-spacing: 2rpx;
}
/deep/.description {
overflow: hidden;
color: #666;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 5;
line-clamp: 5;
-webkit-box-orient: vertical;
font-size: 26rpx;
margin-bottom: 20rpx;
margin-top: 10rpx;
height: 172rpx;
img {
width: 100% !important;
}
}
.btns {
font-size: 28rpx;
justify-content: space-between;
align-items: center;
.booknameleft {
font-size: 32rpx;
color: #070707;
letter-spacing: 0.5rpx;
font-weight: 600;
}
.left {
width: 300rpx;
color: #a1a1a1;
}
.right {
width: 350rpx;
display: flex;
justify-content: flex-end;
align-items: center;
}
.price {
width: 120rpx;
}
.gzicon {
margin: 0 0 0 20rpx;
height: 40rpx;
width: 40rpx;
}
}
}
.mb30 {
margin-bottom: 30rpx;
overflow: hidden;
}
.mytabs {
height: 80rpx;
.item {
border-radius: 10rpx;
background-color: #c6ead0;
width: 48%;
// margin: 0 10rpx;
text-align: center;
color: #3c7f56;
font-size: 36rpx;
line-height: 80rpx;
}
.item.active {
background-color: #3c7f56;
color: #fff;
}
.item2 {
margin-right: 20rpx;
}
}
/deep/.u-tabs__wrapper__nav__item__text {
// font-size: 32rpx !important;
}
.cateList {
width: 100%;
}
/deep/.u-tabs__wrapper__nav__item {
padding: 0 !important;
}
.order_box {
padding: 20rpx;
}
/deep/.order_box .list_item {
// border-bottom: none;
padding: 0 !important;
padding-right: 0 !important;
border: none !important;
}
.product_quantity {
width: auto;
color: #9b9b9b;
font-size: 26rpx;
}
.vip_year{
padding-left: 20rpx;
color: #f5342b;
font-size: 30rpx;
}
</style>