|
|
@@ -0,0 +1,599 @@
|
|
|
+<template>
|
|
|
+ <view class="container">
|
|
|
+ <view class="topview" :style="{ top: tabTop + 'px' }">
|
|
|
+ <!--订单类型选择-->
|
|
|
+ <scroll-view scroll-x="true" class="scrollbox">
|
|
|
+ <view class="order-type u-flex-center">
|
|
|
+ <view
|
|
|
+ class="type-name u-font26 u-181818"
|
|
|
+ :class="{ active: isChange == index }"
|
|
|
+ v-for="(item, index) in orderType"
|
|
|
+ :key="index"
|
|
|
+ @click="clickBtn(index)"
|
|
|
+ >
|
|
|
+ {{ item }}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+ <view class="plrbottom">
|
|
|
+ <!--订单列表-->
|
|
|
+ <view class="order-list" v-for="item in orderList" :key="item.id">
|
|
|
+ <view class="u-bg-fff order-item" @click="goGbOrderDetails(item)">
|
|
|
+ <view class="u-shop-teile-pd">
|
|
|
+ <view class="u-text1 viewWidthTitle">
|
|
|
+ <text class="iconfont2 u-font34 u-bold" style="color: #fa6138"
|
|
|
+ ></text
|
|
|
+ >
|
|
|
+ <text class="u-1A1A1A u-font30 u-ml15">{{ item.shop_name }}</text>
|
|
|
+ <text class="u-CCC right-icon iconfont"></text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <text class="u-FF0000 u-font28" v-if="item.pay_status == 0"
|
|
|
+ >待付款</text
|
|
|
+ >
|
|
|
+
|
|
|
+ <text
|
|
|
+ class="u-FF0000 u-font28"
|
|
|
+ v-if="
|
|
|
+ item.pay_status == 5 && (item.status == 0 || item.status == 1)
|
|
|
+ "
|
|
|
+ >待成团</text
|
|
|
+ >
|
|
|
+ <text
|
|
|
+ class="u-FF0000 u-font28"
|
|
|
+ v-if="item.pay_status == 5 && item.status == 2"
|
|
|
+ >组团成功</text
|
|
|
+ >
|
|
|
+ <text
|
|
|
+ class="u-FF0000 u-font28"
|
|
|
+ v-if="item.status == 3 || item.status == 4"
|
|
|
+ >组团失败</text
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="u-border-one-one"></view>
|
|
|
+ <view v-if="orderList.length > 0">
|
|
|
+ <!-- <ldgoods :value="item" :isGroup="true" @click.native="goProductDetails(item)"></ldgoods> -->
|
|
|
+
|
|
|
+ <view class="details-top">
|
|
|
+ <view class="details-left">
|
|
|
+ <image
|
|
|
+ :src="`${item.goods_cover}?x-oss-process=style/w_350`"
|
|
|
+ v-if="item.goods_cover"
|
|
|
+ class="u-goods200 u-ml15"
|
|
|
+ mode=""
|
|
|
+ ></image>
|
|
|
+ <image
|
|
|
+ :src="`${item.goods_img}?x-oss-process=style/w_350`"
|
|
|
+ v-if="item.goods_img"
|
|
|
+ class="u-goods200 u-ml15"
|
|
|
+ mode=""
|
|
|
+ ></image>
|
|
|
+ </view>
|
|
|
+ <view class="details-right">
|
|
|
+ <view class="right-top">
|
|
|
+ {{ item.goods_title }}
|
|
|
+ </view>
|
|
|
+ <view class="specifications">
|
|
|
+ 规格:{{ item.sku_set_name }}
|
|
|
+ </view>
|
|
|
+ <view class="amount-of-money">
|
|
|
+ <view
|
|
|
+ style="font-size: 26rpx"
|
|
|
+ v-if="item.real_price % 1 === 0"
|
|
|
+ >
|
|
|
+ ¥{{ item.real_price }}.00
|
|
|
+ </view>
|
|
|
+ <view style="font-size: 26rpx" v-else>
|
|
|
+ ¥{{ item.real_price }}0
|
|
|
+ </view>
|
|
|
+ <text class="group">{{ item.group_people_num }}人拼</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="u-text-right u-plr30 u-mt20">
|
|
|
+ <view class="u-flex" style="justify-content: flex-end">
|
|
|
+ <view class="u-text-right">
|
|
|
+ 共{{ item.number }}件商品, 总金额
|
|
|
+ </view>
|
|
|
+ <view class="u-FF0000">
|
|
|
+ <rich-text
|
|
|
+ :nodes="$mUtil.priceBigSmall(item.total_amount)"
|
|
|
+ ></rich-text>
|
|
|
+ </view>
|
|
|
+ <text v-if="item.total_point > 0"
|
|
|
+ >,总积分:{{ item.total_point }}</text
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="u-mt10">含运费¥{{ item.real_freight }}</view>
|
|
|
+ <view class="u-flex-column-end u-mt30">
|
|
|
+ <view class="u-flex">
|
|
|
+ <!--去付款-->
|
|
|
+ <view class="u-flex-center">
|
|
|
+ <view v-if="item.pay_status == 0">
|
|
|
+ <text class="iconfont"></text> 支付剩余({{
|
|
|
+ item | dateFilter
|
|
|
+ }})
|
|
|
+ </view>
|
|
|
+ <view
|
|
|
+ class="btn-item u-text-center u-FF0000 br-FF0000"
|
|
|
+ v-if="item.pay_status == 0"
|
|
|
+ @click.stop="goGbOrderDetails(item)"
|
|
|
+ >去付款</view
|
|
|
+ >
|
|
|
+ <view
|
|
|
+ class="btn-item u-text-center u-060606 br-999"
|
|
|
+ v-if="item.pay_status != 0"
|
|
|
+ @click.stop="goGbOrderDetails(item)"
|
|
|
+ >查看详情</view
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <loadMore v-if="orderList.length > 0" :status="status"></loadMore>
|
|
|
+ <nodata v-else :config="{ top: 15, content: '暂无订单~' }"></nodata>
|
|
|
+ </view>
|
|
|
+ <!--页面加载动画-->
|
|
|
+ <ldLoading isFullScreen :active="loading"></ldLoading>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref, reactive, onMounted, onUnmounted } from "vue";
|
|
|
+import {
|
|
|
+ onLoad,
|
|
|
+ onUnload,
|
|
|
+ onReachBottom,
|
|
|
+ onPullDownRefresh,
|
|
|
+} from "@dcloudio/uni-app";
|
|
|
+
|
|
|
+// 响应式数据
|
|
|
+const list = ref(1);
|
|
|
+
|
|
|
+const isChange = ref(0);
|
|
|
+const timeCount = ref(0);
|
|
|
+const timer = ref(null);
|
|
|
+const orderType = ref(["全部订单", "待付款", "待成团", "组团成功", "组团失败"]);
|
|
|
+const loading = ref(true);
|
|
|
+const orderList = ref([]);
|
|
|
+const status = ref("more");
|
|
|
+const noData = ref(false);
|
|
|
+const parmas = reactive({
|
|
|
+ page: 1,
|
|
|
+ limit: 10,
|
|
|
+});
|
|
|
+const orderid = ref(null);
|
|
|
+const currentKey = ref(null);
|
|
|
+const tabTop = ref(0);
|
|
|
+
|
|
|
+// 全局变量
|
|
|
+let vObj;
|
|
|
+const app = getApp();
|
|
|
+
|
|
|
+// 页面生命周期
|
|
|
+onLoad((options) => {
|
|
|
+ vObj = getCurrentInstance().proxy;
|
|
|
+
|
|
|
+ timer.value = setInterval(() => {
|
|
|
+ timeCount.value++;
|
|
|
+ }, 1000);
|
|
|
+
|
|
|
+ tabTop.value = app.globalData.barHeight + 44;
|
|
|
+
|
|
|
+ if (options.keys) {
|
|
|
+ // 处理选项
|
|
|
+ }
|
|
|
+ getOrderList();
|
|
|
+});
|
|
|
+
|
|
|
+onUnload(() => {
|
|
|
+// console.log(66666666);
|
|
|
+ clearInterval(timer.value);
|
|
|
+});
|
|
|
+
|
|
|
+onReachBottom(() => {
|
|
|
+ status.value = "loading";
|
|
|
+ parmas.page++;
|
|
|
+ getOrderList();
|
|
|
+});
|
|
|
+
|
|
|
+onPullDownRefresh(() => {
|
|
|
+ rest();
|
|
|
+ getOrderList();
|
|
|
+});
|
|
|
+
|
|
|
+// 过滤器函数
|
|
|
+const dateFilter = (item) => {
|
|
|
+ let time = item.pay_expire_time - item.now_millis - vObj.timeCount * 1000;
|
|
|
+ let str = vObj.$mUtil.countDownClock(time);
|
|
|
+ return str;
|
|
|
+};
|
|
|
+
|
|
|
+const payStatus = (val) => {
|
|
|
+ switch (val) {
|
|
|
+ case 0:
|
|
|
+ return "待支付";
|
|
|
+ case 1:
|
|
|
+ return "待发货";
|
|
|
+ case 2:
|
|
|
+ return "部分发货";
|
|
|
+ case 3:
|
|
|
+ return "待收货";
|
|
|
+ case 4:
|
|
|
+ return "已收货";
|
|
|
+ case 5:
|
|
|
+ return "待评价";
|
|
|
+ case 6:
|
|
|
+ return "关闭";
|
|
|
+ default:
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const payStatusRight = (val) => {
|
|
|
+ switch (val) {
|
|
|
+ case 0:
|
|
|
+ return "申请退款中";
|
|
|
+ case 1:
|
|
|
+ return "商家同意";
|
|
|
+ case 4:
|
|
|
+ return "商家发起退款支付";
|
|
|
+ case 5:
|
|
|
+ return "退款成功";
|
|
|
+ case 6:
|
|
|
+ return "商家拒绝";
|
|
|
+ default:
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const payStatusRights = (val) => {
|
|
|
+ switch (val) {
|
|
|
+ case 0:
|
|
|
+ return "申请退款/退货中";
|
|
|
+ case 1:
|
|
|
+ return "等待买家发货";
|
|
|
+ case 2:
|
|
|
+ return "待商家收货";
|
|
|
+ case 3:
|
|
|
+ return "商家已收货";
|
|
|
+ case 4:
|
|
|
+ return "商家待打款";
|
|
|
+ case 5:
|
|
|
+ return "退款/退货成功";
|
|
|
+ case 6:
|
|
|
+ return "商家拒绝";
|
|
|
+ case 7:
|
|
|
+ return "自动关闭";
|
|
|
+ case 8:
|
|
|
+ return "撤销";
|
|
|
+ default:
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// 方法定义
|
|
|
+const goGbOrderDetails = (item) => {
|
|
|
+ if (item.pay_status == 0) {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `./gbOrderDetails?id=${item.pay_order_id}&status=waitpay`,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `./gbOrderDetails?id=${item.order_id}&groupId=${item.id}&status=pay`,
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const goProductDetails = (item) => {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: "/pages/product/goods/puzzleGoods?id=" + item.group_buy_goods_id,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const goPhone = (phone) => {
|
|
|
+ if (phone) {
|
|
|
+ uni.makePhoneCall({
|
|
|
+ phoneNumber: phone,
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const lookLoginsList = (orderid, num, img, type) => {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `../logistics?id=${orderid}&num=${num}&img=${img}&type=${type}`,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const goRefundType = (i, code, time, list, orderid, childid) => {
|
|
|
+ uni.setStorageSync("blackgoodsList", list);
|
|
|
+ if (i == 1) {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `applicationDrawback?keystatus=${i}&title=申请退款&orderid=${orderid}`,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `refundType?order_code=${code}&format_order_time=${time}&keystatus=${i}&orderid=${orderid}&childid=${childid}`,
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const sureGetOrder = (id, k) => {
|
|
|
+ uni.showModal({
|
|
|
+ title: "提示",
|
|
|
+ content: "确定已经收到了该商品?",
|
|
|
+ success: (res) => {
|
|
|
+ if (res.confirm) {
|
|
|
+ globalThis.$http
|
|
|
+ .post("/order/receipt", {
|
|
|
+ order_id: id,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res && res.code == 200) {
|
|
|
+ globalThis.$mUtil.toast("收货成功");
|
|
|
+ rest();
|
|
|
+ if (k == 1) {
|
|
|
+ getOrderList();
|
|
|
+ } else if (k == 2) {
|
|
|
+ otherPay(currentKey.value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const otherFun = (object) => {
|
|
|
+ if (object) {
|
|
|
+ console.log(object.addressid);
|
|
|
+ globalThis.$http
|
|
|
+ .put("/order/update-receipt/" + orderid.value + "/" + object.addressid)
|
|
|
+ .then((res) => {
|
|
|
+ if (res && res.code == 200) {
|
|
|
+ globalThis.$mUtil.toast("修改成功");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const changeAddress = (id) => {
|
|
|
+ orderid.value = id;
|
|
|
+ uni.navigateTo({
|
|
|
+ url: "/pages/user/address/addressList",
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const rest = () => {
|
|
|
+ parmas.page = 1;
|
|
|
+ orderList.value = [];
|
|
|
+};
|
|
|
+
|
|
|
+const getOrderList = () => {
|
|
|
+ globalThis.$http.get("/groupbuy/team/my", parmas).then((res) => {
|
|
|
+ loading.value = false;
|
|
|
+ if (res && res.code == 200) {
|
|
|
+ uni.stopPullDownRefresh();
|
|
|
+ orderList.value = orderList.value.concat(res.page.list);
|
|
|
+ if (orderList.value.length == 0) {
|
|
|
+ noData.value = true;
|
|
|
+ } else {
|
|
|
+ noData.value = false;
|
|
|
+ }
|
|
|
+ if (res.page.totalPage <= res.page.currPage) {
|
|
|
+ status.value = "noMore";
|
|
|
+ } else {
|
|
|
+ status.value = "more";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const clickBtn = (index) => {
|
|
|
+ rest();
|
|
|
+ isChange.value = index;
|
|
|
+ if (index > 0) {
|
|
|
+ parmas.status = index;
|
|
|
+ } else {
|
|
|
+ delete parmas.status;
|
|
|
+ }
|
|
|
+ getOrderList();
|
|
|
+};
|
|
|
+
|
|
|
+const waitpayOrder = (id, total_amount, expired_pay_time) => {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `../../order/pay?id=${id}&total_amount=${total_amount}&expired_pay_time=${expired_pay_time}`,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const goOrderDetails = (id) => {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `orderDetails?id=${id}&status=pay`,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const gotoBalckDetail = (id, shopid, type, status) => {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `orderblackDetails?id=${id}&shopid=${shopid}&type=${type}&status=${status}`,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const goOrderDetailsPay = (id) => {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `orderDetails?id=${id}&status=waitpay`,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const otherPay = (key) => {
|
|
|
+ // 需要实现 otherPay 方法
|
|
|
+ console.log("otherPay called with key:", key);
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style>
|
|
|
+page {
|
|
|
+ background-color: #f5f5f5;
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="scss" scoped>
|
|
|
+.u-border-one-one {
|
|
|
+ border-top: 3rpx solid #e7e7e7;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.right-icon {
|
|
|
+ font-size: 25rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.details-top {
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .details-right {
|
|
|
+ margin-left: 30rpx;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ .right-top {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #1a1a1a;
|
|
|
+ font-weight: 400;
|
|
|
+ }
|
|
|
+
|
|
|
+ .specifications {
|
|
|
+ font-size: 22rpx;
|
|
|
+ color: #999999;
|
|
|
+ font-weight: 400;
|
|
|
+ margin-top: 40rpx;
|
|
|
+ margin-left: 2rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .amount-of-money {
|
|
|
+ display: flex;
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #1a1a1a;
|
|
|
+ font-weight: 400;
|
|
|
+
|
|
|
+ .group {
|
|
|
+ margin-left: 20rpx;
|
|
|
+ color: #999999;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 26rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.shop-icon {
|
|
|
+ font-size: 40rpx;
|
|
|
+ color: #0b844a;
|
|
|
+}
|
|
|
+
|
|
|
+.order-list {
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.order-list .order-item {
|
|
|
+ padding-bottom: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.u-shop-teile-pd {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+
|
|
|
+.plrbottom {
|
|
|
+ padding: 110rpx 30rpx 0;
|
|
|
+}
|
|
|
+
|
|
|
+.topview {
|
|
|
+ background-color: #f5f5f5;
|
|
|
+ height: 110rpx;
|
|
|
+ width: 100%;
|
|
|
+ position: fixed;
|
|
|
+ left: 0;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding: 0 30rpx;
|
|
|
+ z-index: 66;
|
|
|
+}
|
|
|
+
|
|
|
+.scrollbox {
|
|
|
+ white-space: nowrap;
|
|
|
+}
|
|
|
+
|
|
|
+.pt-pb {
|
|
|
+ padding: 30rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.pt15-pb24 {
|
|
|
+ padding-top: 24rpx;
|
|
|
+ padding-bottom: 24rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.br-FF0000 {
|
|
|
+ border: 1px solid #ff0000;
|
|
|
+}
|
|
|
+
|
|
|
+.br-999 {
|
|
|
+ border: 1px solid #999999;
|
|
|
+}
|
|
|
+
|
|
|
+.order-type {
|
|
|
+ margin-top: 30rpx;
|
|
|
+ margin-bottom: 26rpx;
|
|
|
+ display: inline-block;
|
|
|
+
|
|
|
+ .active {
|
|
|
+ background: #fa6138;
|
|
|
+ color: #ffffff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .type-name {
|
|
|
+ border-radius: 30px;
|
|
|
+ padding: 12rpx 18rpx;
|
|
|
+ display: inline-block;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.listImg {
|
|
|
+ padding: 20rpx 0 0 16rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.listimgGroup {
|
|
|
+ width: 200rpx;
|
|
|
+ height: 200rpx;
|
|
|
+ margin: 0 25rpx 25rpx 0;
|
|
|
+}
|
|
|
+
|
|
|
+.order-item {
|
|
|
+ .btn-type {
|
|
|
+ padding-bottom: 25rpx;
|
|
|
+
|
|
|
+ .pay-time {
|
|
|
+ line-height: 70rpx;
|
|
|
+ margin-left: auto;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-item {
|
|
|
+ width: 200rpx;
|
|
|
+ height: 70rpx;
|
|
|
+ line-height: 68rpx;
|
|
|
+ border-radius: 35px;
|
|
|
+ margin-left: 22rpx;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.childBox {
|
|
|
+ background-color: #ffffff;
|
|
|
+ border-radius: 20rpx;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+}
|
|
|
+</style>
|