Pārlūkot izejas kodu

feat(订单): 添加运费模板获取功能并优化订单相关页面

refactor(购物车): 调整购物车复选框点击区域和样式

fix(支付): 移除支付处理中的加载提示并优化错误处理

style(红包弹窗): 修改选中状态颜色为绿色主题

perf(提交确认): 减少倒计时时间并优化定时器清理

docs(服务弹窗): 注释掉退货无忧服务条款

feat(退款): 新增退款订单列表组件和页面逻辑

fix(订单详情): 调整物流信息显示和价格计算逻辑

feat(投诉): 完善投诉页面功能和样式

fix(搜索): 修改热门和历史搜索的点击行为为直接搜索
ylong 1 nedēļu atpakaļ
vecāks
revīzija
ac49ba6562

+ 3 - 0
api/modules/mall.js

@@ -149,6 +149,9 @@ export const useMallApi = (Vue, vm) => {
         // 删除我的足迹
         clearLookLogAjax: (idList) => vm.$u.post('/token/shop/user/clearLookLog', idList),
 
+        // 获取运费模版
+        getShippingTempleteAjax: () => vm.$u.post('/token/shop/getShippingTemplete'),
+
         // 降价活动规则详情
         getActivityReduceRuleAjax: () => vm.$u.get('/token/shop/getActivityReduceRule'),
 

+ 2 - 2
pages-car/components/book-list-item.vue

@@ -8,9 +8,9 @@
             <view class="book-price">
                 <view class="sale-price">
                     <text class="symbol">¥</text>
-                    <text class="amount">{{ book.price || book.recycleMoney }}</text>
+                    <text class="amount">{{ book.sellPrice || book.producePrice }}</text>
                 </view>
-                <text class="origin-price" v-if="book.producePrice">¥{{ book.producePrice }}</text>
+                <text class="origin-price" v-if="book.price">¥{{ book.price }}</text>
             </view>
         </view>
         <!-- 选择框 -->

+ 6 - 6
pages-car/components/buy-order-item.vue

@@ -62,7 +62,7 @@
                 :custom-style="btnStyle" @click.stop="handleAction('evaluate', order)">评价</u-button>
 
             <!-- 查看物流 -->
-            <u-button v-if="order.showCheckExpress == 1 && order.status != '4'" size="mini" shape="circle"
+            <u-button v-if="order.showCheckExpress == 1 && order.status != '4' && order.status != '3'" size="mini" shape="circle"
                 type="primary" plain :custom-style="btnStyle"
                 @click.stop="handleAction('logistics', order)">查看物流</u-button>
 
@@ -76,7 +76,7 @@
 
 
             <!-- 申请售后 -->
-            <u-button v-if="order.showAfterSales == 1 && order.status != '4'" size="mini" shape="circle" type="error"
+            <u-button v-if="order.showAfterSales == 1 && order.status != '4' && order.status != '3'" size="mini" shape="circle" type="error"
                 plain :custom-style="btnStyle" @click.stop="handleAction('refund', order)">申请售后</u-button>
 
             <!-- 取消订单 (未包含在Flags中,保留原逻辑: 待付款且未取消) -->
@@ -92,7 +92,7 @@
                 @click.stop="handleAction('detail', order)">查看详情</u-button>
 
             <!-- 申请开票 -->
-            <u-button v-if="order.showApplyInvoice == 1 && order.status != '4'" size="mini" shape="circle" plain
+            <u-button v-if="order.showApplyInvoice == 1 && order.status != '4' && order.status != '3'" size="mini" shape="circle" plain
                 :custom-style="btnStyle" @click.stop="handleAction('invoice', order)">申请开票</u-button>
 
             <!-- 投诉 -->
@@ -103,9 +103,9 @@
             <u-button v-if="order.showModifyAddress == 1" size="mini" shape="circle" plain :custom-style="btnStyle"
                 @click.stop="handleAction('address', order)">修改地址</u-button>
 
-            <!-- 更多操作 (在已完成状态下显示) -->
+            <!-- 更多操作 (在待收货和已完成状态下显示) -->
             <u-button
-                v-if="(order.showAfterSales == 1 || order.showCheckExpress == 1 || order.showApplyInvoice == 1) && order.status == '4'"
+                v-if="(order.showAfterSales == 1 || order.showCheckExpress == 1 || order.showApplyInvoice == 1) && (order.status == '3' || order.status == '4')"
                 size="mini" shape="circle" plain :custom-style="btnStyle" @click.stop="handleMoreAction">更多</u-button>
 
         </view>
@@ -201,7 +201,7 @@
                 if (this.order.showCheckExpress == 1) actions.push('logistics');
                 if (this.order.showApplyInvoice == 1) actions.push('invoice');
 
-                this.$emit('action', { type: 'more', order: this.order, data: actions });
+                this.$emit('action', { type: 'more', order: this.order, data: actions })
             }
         }
     }

+ 16 - 4
pages-car/components/cart-item.vue

@@ -1,9 +1,9 @@
 <template>
     <view class="cart-item" @click="goToDetail">
-        <!-- 复选框 -->
-        <view class="checkbox-box" @click.stop>
+        <!-- 复选框扩大点击区域 -->
+        <view class="checkbox-box" @click.stop="toggleCheck">
             <u-checkbox v-model="item.checked" shape="circle" active-color="#38C148" @change="onCheckChange"
-                :disabled="!isValid" style="width:100%"></u-checkbox>
+                :disabled="!isValid" style="width:100%; pointer-events: none;"></u-checkbox>
         </view>
 
         <!-- 商品图片 -->
@@ -104,6 +104,12 @@
             }
         },
         methods: {
+            toggleCheck() {
+                if (!this.isValid) return;
+                const newChecked = !this.item.checked;
+                this.item.checked = newChecked;
+                this.$emit('check', { id: this.item.id, checked: newChecked });
+            },
             onCheckChange(val) {
                 this.$emit('check', { id: this.item.id, checked: val.value });
             },
@@ -141,10 +147,16 @@
         border-bottom: 1rpx dashed #f5f5f5;
 
         .checkbox-box {
-            width: 40rpx;
+            width: 80rpx;
+            height: 100%;
+            min-height: 200rpx;
             display: flex;
             justify-content: center;
+            align-items: center;
             flex-shrink: 0;
+            margin-right: -20rpx;
+            position: relative;
+            z-index: 10;
 
             &.disabled-checkbox {
                 .circle {

+ 8 - 8
pages-car/components/red-packet-popup.vue

@@ -28,7 +28,7 @@
                             </view>
                             <view class="packet-check">
                                 <u-icon name="checkmark-circle-fill" size="40"
-                                    :color="selectedItem && selectedItem.userCouponId === item.userCouponId ? '#ff4500' : '#e0e0e0'"></u-icon>
+                                    :color="selectedItem && selectedItem.userCouponId === item.userCouponId ? '#38C148' : '#e0e0e0'"></u-icon>
                             </view>
                         </view>
                         <view class="packet-time">{{ item.effectStartTime }}至{{ item.effectEndTime }}</view>
@@ -90,7 +90,7 @@
                 currentTab: 'all',
                 selectedItem: null,
                 btnStyle: {
-                    background: 'linear-gradient(90deg, #ff6b00, #ff4500)',
+                    background: 'linear-gradient(90deg, #6ADD83, #38C148)',
                     color: '#fff',
                     border: 'none'
                 }
@@ -187,8 +187,8 @@
                 transition: all 0.3s;
 
                 &.active {
-                    background-color: #fff0e6;
-                    color: #ff4500;
+                    background-color: #EBF8EE;
+                    color: #38C148;
                     font-weight: bold;
                 }
             }
@@ -213,14 +213,14 @@
                 margin: 0 30rpx 20rpx;
                 border-radius: 16rpx;
                 overflow: hidden;
-                background-color: #fffaf7;
+                background-color: #F8FDF9;
 
                 &.available {
                     box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
                     border: 1rpx solid #f9f9f9;
 
                     .packet-left {
-                        color: #ff4500;
+                        color: #38C148;
                     }
                     .packet-name {
                         color: #333;
@@ -232,8 +232,8 @@
                         padding: 16rpx 24rpx;
                         font-size: 22rpx;
                         color: #999;
-                        background-color: #fffaf7;
-                        border-top: 1rpx dashed #ffe6e6;
+                        background-color: #F8FDF9;
+                        border-top: 1rpx dashed #d1f2d6;
                     }
                 }
 

+ 202 - 0
pages-car/components/refund-order-item.vue

@@ -0,0 +1,202 @@
+<template>
+    <view class="refund-order-item" @click="goToDetail">
+        <!-- 订单头部:订单号和状态 -->
+        <view class="order-header">
+            <text class="order-no">退款编号:{{ order.refundOrderId }}</text>
+            <text class="order-status">{{ getStatusText(order.status) }}</text>
+        </view>
+
+        <!-- 商品信息 -->
+        <view class="goods-list">
+            <!-- 单本书样式 -->
+            <view class="single-book">
+                <image :src="order.cover || defaultCover" mode="aspectFit" class="book-cover"></image>
+                <view class="book-info">
+                    <view class="info-top">
+                        <text class="book-name u-line-2">{{ order.bookName }}</text>
+                        <view class="price-box">
+                            <text class="num">x{{ order.refundNum || 1 }}</text>
+                        </view>
+                    </view>
+                    <view class="book-sku" v-if="order.conditionType">
+                        品相:{{ order.conditionType | conditionText }}
+                    </view>
+                </view>
+            </view>
+        </view>
+
+        <!-- 价格汇总 -->
+        <view class="order-total">
+            <text class="ml-20">退款金额 ¥{{ order.refundMoney || '0.00' }}</text>
+        </view>
+
+        <!-- 操作按钮 -->
+        <view class="action-box">
+            <!-- 查看详情 -->
+            <u-button size="mini" shape="circle" plain :custom-style="btnStyle"
+                @click.stop="goToDetail">查看详情</u-button>
+        </view>
+    </view>
+</template>
+
+<script>
+    export default {
+        name: 'refund-order-item',
+        props: {
+            order: {
+                type: Object,
+                required: true
+            }
+        },
+        data() {
+            return {
+                defaultCover: 'https://uviewui.com/album/1.jpg',
+                btnStyle: {
+                    marginLeft: '20rpx',
+                    height: '60rpx',
+                    lineHeight: '60rpx',
+                    padding: '0 24rpx',
+                    fontSize: '26rpx',
+                },
+                themeBtnStyle: {
+                    marginLeft: '20rpx',
+                    height: '60rpx',
+                    lineHeight: '60rpx',
+                    padding: '0 30rpx',
+                    backgroundColor: '#38C148',
+                    color: '#fff',
+                    fontSize: '26rpx',
+                }
+            }
+        },
+        methods: {
+            goToDetail() {
+                uni.navigateTo({
+                    url: `/pages-car/pages/refund-detail?refundOrderId=${this.order.refundOrderId}`
+                })
+            },
+            getStatusText(status) {
+                const map = {
+                    '1': '申请退款',
+                    '2': '协商中待用户确认',
+                    '3': '协商中待商家确认',
+                    '4': '审核通过',
+                    '5': '审核驳回',
+                    '6': '超时关闭',
+                    '7': '买家已发货',
+                    '8': '确认收货',
+                    '9': '退款成功',
+                    '10': '退款已撤销'
+                }
+                return map[status] || '未知状态'
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    .refund-order-item {
+        background-color: #fff;
+        border-radius: 16rpx;
+        padding: 30rpx 20rpx;
+        margin-bottom: 20rpx;
+
+        .order-header {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 20rpx;
+            font-size: 28rpx;
+
+            .order-no {
+                color: #333;
+                font-weight: 500;
+            }
+
+            .order-status {
+                color: #FF000C;
+            }
+        }
+
+        .goods-list {
+            margin-bottom: 20rpx;
+
+            .single-book {
+                display: flex;
+
+                .book-cover {
+                    width: 140rpx;
+                    height: 140rpx;
+                    margin-right: 10rpx;
+                    border-radius: 8rpx;
+                    flex-shrink: 0;
+                }
+
+                .book-info {
+                    flex: 1;
+                    display: flex;
+                    flex-direction: column;
+                    justify-content: space-between;
+
+                    .info-top {
+                        display: flex;
+                        justify-content: space-between;
+
+                        .book-name {
+                            flex: 1;
+                            font-size: 28rpx;
+                            color: #333;
+                            font-weight: bold;
+                            margin-right: 30rpx;
+                        }
+
+                        .price-box {
+                            text-align: right;
+                            display: flex;
+                            flex-direction: column;
+                            align-items: flex-end;
+
+                            .num {
+                                font-size: 24rpx;
+                                color: #999;
+                                margin-top: 6rpx;
+                            }
+                        }
+                    }
+
+                    .book-sku {
+                        background: rgb(56, 193, 72, 0.1);
+                        color: #333;
+                        font-size: 24rpx;
+                        padding: 4rpx 12rpx;
+                        border-radius: 4rpx;
+                        align-self: flex-start;
+                        margin-top: 10rpx;
+                    }
+                }
+            }
+        }
+
+        .order-total {
+            text-align: right;
+            font-size: 26rpx;
+            color: #333;
+            margin-bottom: 20rpx;
+
+            .ml-20 {
+                margin-left: 20rpx;
+                font-weight: 500;
+            }
+        }
+
+        .action-box {
+            display: flex;
+            justify-content: flex-end;
+            align-items: center;
+            flex-wrap: wrap; // 防止按钮过多换行问题
+
+            u-button {
+                margin-bottom: 10rpx; // 如果换行,增加间距
+            }
+        }
+    }
+</style>

+ 19 - 4
pages-car/components/submit-confirm.vue

@@ -36,7 +36,8 @@ export default {
     data() {
         return {
             showPopup: false,
-            countdown: 15,
+            countdown: 3,
+            timer: null
         };
     },
     methods: {
@@ -46,7 +47,11 @@ export default {
         },
         closePopup() {
             this.showPopup = false;
-            this.countdown = 10;
+            this.countdown = 3;
+            if (this.timer) {
+                clearInterval(this.timer);
+                this.timer = null;
+            }
         },
         handleConfirm() {
             this.$emit("confirm");
@@ -57,16 +62,26 @@ export default {
             this.closePopup();
         },
         startCountdown() {
+            if (this.timer) {
+                clearInterval(this.timer);
+            }
             this.countdown = 3;
-            const timer = setInterval(() => {
+            this.timer = setInterval(() => {
                 if (this.countdown > 0) {
                     this.countdown--;
                 } else {
-                    clearInterval(timer);
+                    clearInterval(this.timer);
+                    this.timer = null;
                 }
             }, 1000);
         },
     },
+    beforeDestroy() {
+        if (this.timer) {
+            clearInterval(this.timer);
+            this.timer = null;
+        }
+    }
 };
 </script>
 

+ 1 - 1
pages-car/components/urge-delivery-dialog.vue

@@ -19,7 +19,7 @@
                 </button>
                 <!-- #endif -->
                 <!-- #ifndef MP-ALIPAY -->
-                <button class="action-btn contact-btn" open-type="contact">继续联系卖家
+                <button class="action-btn contact-btn" open-type="contact" @click="closePopup">继续联系卖家
                 </button>
                 <!-- #endif -->
                 <button class="action-btn confirm-btn" @click="closePopup">

+ 1 - 8
pages-car/pages/cashier-desk.vue

@@ -150,10 +150,6 @@
 
             // 发起支付
             onConfirmPayment() {
-                uni.showLoading({
-                    title: '支付处理中'
-                })
-
                 // 构建参数
                 const params = {
                     payType: this.formData.payType,
@@ -177,13 +173,10 @@
                         });
                     }
                 }).catch(err => {
-                    console.error('获取支付参数失败:', err);
                     uni.showToast({
-                        title: '请求失败',
+                        title: err.msg || '请求失败',
                         icon: 'none'
                     });
-                }).finally(() => {
-                    uni.hideLoading();
                 })
             }
         }

+ 292 - 290
pages-car/pages/complaint.vue

@@ -141,362 +141,364 @@
 </template>
 
 <script>
-    import CommonImageUpload from "@/components/image-upload.vue";
-    // api前缀
-    export default {
-        components: {
-            CommonImageUpload
+import CommonImageUpload from "@/components/image-upload.vue";
+// api前缀
+export default {
+    components: {
+        CommonImageUpload
+    },
+    data() {
+        return {
+            showComplaintList: false,
+            complaintReason: "",
+            phone: "",
+            description: "",
+            showPicker: false,
+            reasonList: [],
+            orderId: "",
+            complaintInfo: {
+                status: 1,
+                platformReply: "",
+                orderDetailList: [],
+                disposeLogList: [],
+            },
+            uploadSuccessList: [],
+            submitBtnStyle: {
+                backgroundColor: '#38C148',
+                color: '#fff',
+                height: '88rpx',
+                fontSize: '32rpx',
+                borderRadius: '44rpx'
+            }
+        };
+    },
+    computed: {
+        complaintStatusText() {
+            const status = this.complaintInfo.complaintsStatus;
+            const statusMap = {
+                0: "未投诉过",
+                1: "待处理",
+                2: "处理中",
+                3: "已完结",
+            };
+            return statusMap[status] || "未知状态";
         },
-        data() {
-            return {
-                showComplaintList: false,
-                complaintReason: "",
-                phone: "",
-                description: "",
-                showPicker: false,
-                reasonList: [],
-                orderId: "",
-                complaintInfo: {
-                    status: 1,
-                    platformReply: "",
-                    orderDetailList: [],
-                    disposeLogList: [],
-                },
-                uploadSuccessList: [],
-                submitBtnStyle: {
-                    backgroundColor: '#38C148',
-                    color: '#fff',
-                    height: '88rpx',
-                    fontSize: '32rpx',
-                    borderRadius: '44rpx'
+        uploadUrl() {
+            return `/token/shop/order/complaintUpload/${this.orderId}`;
+        },
+    },
+    onLoad(ops) {
+        if (ops.orderId) {
+            this.orderId = ops.orderId;
+            this.getComplaintInfo();
+        }
+
+        this.getComplaintsOptions();
+    },
+    methods: {
+        continueComplaint() {
+            this.showComplaintList = false;
+        },
+        // 获取投诉信息
+        getComplaintInfo() {
+            // 修改为 shop/order 接口
+            uni.$u.http.get(`/token/shop/order/getComplaintsInfo?orderId=${this.orderId}&type=1`).then((res) => {
+                if (res.code === 200) {
+                    this.complaintInfo = res.data;
+                    this.showComplaintList = res.data.complaintsStatus != 0;
                 }
-            };
+            });
         },
-        computed: {
-            complaintStatusText() {
-                const status = this.complaintInfo.complaintsStatus;
-                const statusMap = {
-                    0: "未投诉过",
-                    1: "待处理",
-                    2: "处理中",
-                    3: "已完结",
-                };
-                return statusMap[status] || "未知状态";
-            },
-            uploadUrl() {
-                return `/token/shop/order/complaintUpload/${this.orderId}`;
-            },
+        //根据code获取字典 /token/common/getDictOptions
+        getDict(code) {
+            return uni.$u.http.get("/token/common/getDictOptions?type=" + code);
+        },
+        //获取投诉选项 complaints_options
+        getComplaintsOptions() {
+            this.getDict("shop_order_complaints_options").then((res) => {
+                if (res.code === 200) {
+                    this.reasonList = res.data.map((item) => item.dictLabel);
+                }
+            });
         },
-        onLoad(ops) {
-            if (ops.orderId) {
-                this.orderId = ops.orderId;
-                this.getComplaintInfo();
-            }
 
-            this.getComplaintsOptions();
+        showReasonPicker() {
+            this.showPicker = true;
         },
-        methods: {
-            continueComplaint() {
-                this.showComplaintList = false;
-            },
-            // 获取投诉信息
-            getComplaintInfo() {
-                // 修改为 shop/order 接口
-                uni.$u.http.get(`/token/shop/order/getComplaintsInfo?orderId=${this.orderId}&type=1`).then((res) => {
-                    if (res.code === 200) {
-                        this.complaintInfo = res.data;
-                        this.showComplaintList = res.data.complaintsStatus != 0;
-                    }
-                });
-            },
-            //根据code获取字典 /token/common/getDictOptions
-            getDict(code) {
-                return uni.$u.http.get("/token/common/getDictOptions?type=" + code);
-            },
-            //获取投诉选项 complaints_options
-            getComplaintsOptions() {
-                this.getDict("shop_order_complaints_options").then((res) => {
-                    if (res.code === 200) {
-                        this.reasonList = res.data.map((item) => item.dictLabel);
-                    }
-                });
-            },
+        confirmReason(e) {
+            this.complaintReason = this.reasonList[e[0]];
+            this.showPicker = false;
+        },
+        submitComplaint() {
+            if (!this.complaintReason) {
+                return uni.$u.toast("请选择投诉原因");
+            }
+            if (!this.uploadSuccessList || this.uploadSuccessList.length === 0) {
+                return uni.$u.toast("请上传凭证图片");
+            }
+            if (!this.description) {
+                return uni.$u.toast("请输入投诉说明");
+            }
+            if (!this.phone) {
+                return uni.$u.toast("请输入联系方式");
+            }
 
-            showReasonPicker() {
-                this.showPicker = true;
-            },
-            confirmReason(e) {
-                this.complaintReason = this.reasonList[e[0]];
-                this.showPicker = false;
-            },
-            submitComplaint() {
-                if (!this.complaintReason) {
-                    return uni.$u.toast("请选择投诉原因");
-                }
+            // 手机号格式校验
+            const phoneReg = /^1[3-9]\d{9}$/;
+            if (!phoneReg.test(this.phone)) {
+                return uni.$u.toast("请输入正确的手机号码");
+            }
 
-                if (!this.description) {
-                    return uni.$u.toast("请输入投诉说明");
-                }
-                if (!this.phone) {
-                    return uni.$u.toast("请输入联系方式");
-                }
-                
-                // 手机号格式校验
-                const phoneReg = /^1[3-9]\d{9}$/;
-                if (!phoneReg.test(this.phone)) {
-                    return uni.$u.toast("请输入正确的手机号码");
-                }
+            // 准备投诉数据
+            const complaintData = {
+                orderId: this.orderId,
+                reason: this.complaintReason,
+                description: this.description,
+                contactNumber: this.phone,
+                fileUrls: this.uploadSuccessList || [],
+            };
 
-                // 准备投诉数据
-                const complaintData = {
-                    orderId: this.orderId,
-                    reason: this.complaintReason,
-                    description: this.description,
-                    contactNumber: this.phone,
-                    fileUrls: this.uploadSuccessList || [],
-                };
-
-                // 提交投诉 - 修改为 shop/order 接口
-                uni.$u.http.post("/token/shop/order/addComplaints", complaintData).then((res) => {
-                    if (res.code === 200) {
-                        uni.$u.toast("投诉上报已上报给管理员");
-                        // 返回订单页
-                        setTimeout(() => {
-                            uni.navigateBack({
-                                delta: 1,
-                            });
-                        }, 1500);
-                    } else {
-                        uni.$u.toast(res.msg || "提交失败");
-                    }
-                });
-            },
-            // 图片预览
-            previewImage(urls, current) {
-                uni.previewImage({
-                    urls: urls,
-                    current: current,
-                });
-            },
+            // 提交投诉 - 修改为 shop/order 接口
+            uni.$u.http.post("/token/shop/order/addComplaints", complaintData).then((res) => {
+                if (res.code === 200) {
+                    uni.$u.toast("投诉上报已上报给管理员");
+                    // 返回订单页
+                    setTimeout(() => {
+                        uni.navigateBack({
+                            delta: 1,
+                        });
+                    }, 1500);
+                } else {
+                    uni.$u.toast(res.msg || "提交失败");
+                }
+            });
         },
-    };
+        // 图片预览
+        previewImage(urls, current) {
+            uni.previewImage({
+                urls: urls,
+                current: current,
+            });
+        },
+    },
+};
 </script>
 
 <style lang="scss" scoped>
-    .complaint-page {
-        min-height: 100vh;
-        background: #f8f8f8;
-        padding: 20rpx;
-        padding-bottom: calc(120rpx + env(safe-area-inset-bottom));
+.complaint-page {
+    min-height: 100vh;
+    background: #f8f8f8;
+    padding: 20rpx;
+    padding-bottom: calc(120rpx + env(safe-area-inset-bottom));
+
+    .status-block {
+        background: #ffffff;
+        border-radius: 12rpx;
+        padding: 30rpx;
+        margin-bottom: 20rpx;
+
+        .status-title {
+            font-size: 32rpx;
+            font-weight: 600;
+            color: #222;
+        }
+
+        .status-info {
+            .info-row {
+                display: flex;
+                font-size: 28rpx;
+                line-height: 48rpx;
+
+                .label {
+                    color: #333;
+                    min-width: 140rpx;
+                }
+
+                .value {
+                    color: #333;
+                    flex: 1;
+                }
+
+                .status-text {
+                    color: #ff5b5b;
+                }
+            }
+        }
+    }
 
-        .status-block {
+    .complaint-records {
+        .complaint-item {
             background: #ffffff;
             border-radius: 12rpx;
             padding: 30rpx;
             margin-bottom: 20rpx;
 
-            .status-title {
-                font-size: 32rpx;
-                font-weight: 600;
-                color: #222;
+            .complaint-header {
+                margin-bottom: 24rpx;
+
+                .header-main {
+                    display: flex;
+                    flex-direction: column;
+                    gap: 8rpx;
+
+                    .title {
+                        font-size: 32rpx;
+                        font-weight: 600;
+                        color: #222222;
+                    }
+
+                    .time {
+                        font-size: 26rpx;
+                        color: #999;
+                    }
+                }
             }
 
-            .status-info {
+            .complaint-content {
                 .info-row {
                     display: flex;
+                    margin-bottom: 16rpx;
                     font-size: 28rpx;
-                    line-height: 48rpx;
+                    line-height: 1.5;
 
                     .label {
                         color: #333;
-                        min-width: 140rpx;
+                        white-space: nowrap;
                     }
 
                     .value {
                         color: #333;
                         flex: 1;
                     }
-
-                    .status-text {
-                        color: #ff5b5b;
-                    }
                 }
-            }
-        }
-
-        .complaint-records {
-            .complaint-item {
-                background: #ffffff;
-                border-radius: 12rpx;
-                padding: 30rpx;
-                margin-bottom: 20rpx;
-
-                .complaint-header {
-                    margin-bottom: 24rpx;
-
-                    .header-main {
-                        display: flex;
-                        flex-direction: column;
-                        gap: 8rpx;
 
-                        .title {
-                            font-size: 32rpx;
-                            font-weight: 600;
-                            color: #222222;
-                        }
-
-                        .time {
-                            font-size: 26rpx;
-                            color: #999;
-                        }
-                    }
-                }
-
-                .complaint-content {
-                    .info-row {
-                        display: flex;
-                        margin-bottom: 16rpx;
+                .image-list {
+                    .label {
+                        display: block;
                         font-size: 28rpx;
-                        line-height: 1.5;
-
-                        .label {
-                            color: #333;
-                            white-space: nowrap;
-                        }
-
-                        .value {
-                            color: #333;
-                            flex: 1;
-                        }
+                        color: #333;
+                        margin-bottom: 16rpx;
                     }
 
-                    .image-list {
-                        .label {
-                            display: block;
-                            font-size: 28rpx;
-                            color: #333;
-                            margin-bottom: 16rpx;
-                        }
-
-                        .images {
-                            display: flex;
-                            flex-wrap: wrap;
-                            gap: 20rpx;
+                    .images {
+                        display: flex;
+                        flex-wrap: wrap;
+                        gap: 20rpx;
 
-                            image {
-                                width: 140rpx;
-                                height: 140rpx;
-                                border-radius: 8rpx;
-                            }
+                        image {
+                            width: 140rpx;
+                            height: 140rpx;
+                            border-radius: 8rpx;
                         }
                     }
                 }
             }
         }
+    }
 
-        .form-block {
-            background: #ffffff;
-            border-radius: 12rpx;
-            padding: 0 30rpx;
-            margin-bottom: 20rpx;
-        }
-
-        .order-block {
-            padding: 30rpx;
+    .form-block {
+        background: #ffffff;
+        border-radius: 12rpx;
+        padding: 0 30rpx;
+        margin-bottom: 20rpx;
+    }
 
-            .order-item {
-                margin-top: 20rpx;
+    .order-block {
+        padding: 30rpx;
 
-                .goods-img {
-                    width: 120rpx;
-                    height: 120rpx;
-                    border-radius: 8rpx;
-                    margin-right: 20rpx;
-                    background-color: #f5f5f5;
-                }
+        .order-item {
+            margin-top: 20rpx;
 
-                .goods-info {
-                    display: flex;
-                    flex-direction: column;
-                    justify-content: space-between;
+            .goods-img {
+                width: 120rpx;
+                height: 120rpx;
+                border-radius: 8rpx;
+                margin-right: 20rpx;
+                background-color: #f5f5f5;
+            }
 
-                    .goods-name {
-                        font-size: 28rpx;
-                        color: #333;
-                    }
+            .goods-info {
+                display: flex;
+                flex-direction: column;
+                justify-content: space-between;
 
-                    .goods-price {
-                        font-size: 28rpx;
-                        color: #333;
-                        font-weight: bold;
-                    }
+                .goods-name {
+                    font-size: 28rpx;
+                    color: #333;
                 }
 
-                .goods-num {
-                    font-size: 26rpx;
-                    color: #999;
-                    align-self: flex-end;
+                .goods-price {
+                    font-size: 28rpx;
+                    color: #333;
+                    font-weight: bold;
                 }
             }
-        }
 
-        .required::before {
-            content: "*";
-            color: #ff5b5b;
-            margin-right: 4rpx;
+            .goods-num {
+                font-size: 26rpx;
+                color: #999;
+                align-self: flex-end;
+            }
         }
+    }
 
-        .form-item {
-            padding: 30rpx 0;
-
-            .input-wrapper {
-                display: flex;
-                justify-content: flex-end;
-                align-items: center;
-                font-size: 28rpx;
-                color: #333;
+    .required::before {
+        content: "*";
+        color: #ff5b5b;
+        margin-right: 4rpx;
+    }
 
-                .placeholder {
-                    color: #999;
-                }
-            }
-        }
+    .form-item {
+        padding: 30rpx 0;
 
-        .common-text-2 {
+        .input-wrapper {
+            display: flex;
+            justify-content: flex-end;
+            align-items: center;
             font-size: 28rpx;
             color: #333;
-            font-weight: bold;
-        }
 
-        .mb-20 {
-            margin-bottom: 20rpx;
+            .placeholder {
+                color: #999;
+            }
         }
+    }
 
-        .mt-20 {
-            margin-top: 20rpx;
-        }
+    .common-text-2 {
+        font-size: 28rpx;
+        color: #333;
+        font-weight: bold;
+    }
 
-        .text-right {
-            text-align: right;
-        }
+    .mb-20 {
+        margin-bottom: 20rpx;
+    }
 
-        .bottom-fixed-con {
-            position: fixed;
-            bottom: 0;
-            left: 0;
-            width: 100%;
-            background: #fff;
-            padding: 20rpx 30rpx;
-            padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
-            box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
-            z-index: 100;
-        }
+    .mt-20 {
+        margin-top: 20rpx;
     }
 
-    .upload-image {
-        ::v-deep .u-list-item {
-            background: #ffffff !important;
-            border: 2rpx dashed #ddd;
-        }
+    .text-right {
+        text-align: right;
+    }
+
+    .bottom-fixed-con {
+        position: fixed;
+        bottom: 0;
+        left: 0;
+        width: 100%;
+        background: #fff;
+        padding: 20rpx 30rpx;
+        padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
+        box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
+        z-index: 100;
+    }
+}
+
+.upload-image {
+    ::v-deep .u-list-item {
+        background: #ffffff !important;
+        border: 2rpx dashed #ddd;
     }
-</style>
+}
+</style>

+ 60 - 30
pages-car/pages/index.vue

@@ -43,18 +43,23 @@
         <!-- 底部结算栏 -->
         <view class="bottom-fixed" v-if="cartList.length > 0">
             <view class="left-part">
-                <view class="checkbox-wrap" @click="toggleSelectAll">
+                <view class="checkbox-wrap" @click="toggleSelectAll" style="display: flex; align-items: center; height: 100%; padding-right: 20rpx;">
                     <u-checkbox v-model="isAllSelected" shape="circle" active-color="#38C148" :disabled="false"
-                        @change="onAllCheckChange">全选</u-checkbox>
+                        @change="onAllCheckChange" style="pointer-events: none;">全选</u-checkbox>
                 </view>
             </view>
             <view class="right-part">
-                <view class="total-info">
-                    <view class="total-price">
-                        <text class="label">合计:</text>
-                        <text class="price">¥{{ totalPrice }}</text>
+                <view class="info-wrapper">
+                    <view class="total-info">
+                        <view class="total-price">
+                            <text class="label">合计:</text>
+                            <text class="price">¥{{ totalPrice }}</text>
+                        </view>
+                        <view class="reduced-tip" v-if="totalReduced > 0">已降 ¥{{ totalReduced }}</view>
+                    </view>
+                    <view class="freight-template" @click="handleGetFreightTemplate" v-if="shippingText">
+                        {{ shippingText }}
                     </view>
-                    <view class="reduced-tip" v-if="totalReduced > 0">已降 ¥{{ totalReduced }}</view>
                 </view>
                 <view class="checkout-btn" @click="checkout">
                     结算({{ selectedCount }})
@@ -101,15 +106,18 @@
                         }
                     }
                 ],
-                recommendList: []
+                recommendList: [],
+                shippingText: ''
             };
         },
         onShow() {
             this.loadData();
+            this.getShippingText();
             this.$updateCartBadge();
         },
         mounted() {
             this.loadData();
+            this.getShippingText();
         },
         // 分享配置
         onShareAppMessage(res) {
@@ -181,6 +189,16 @@
             }
         },
         methods: {
+            getShippingText() {
+                this.$u.api.getShippingTempleteAjax().then(res => {
+                    if (res.code === 200) {
+                        this.shippingText = res.data.templeteName;
+                    }
+                });
+            },
+            handleGetFreightTemplate() {
+                console.log('获取运费模版');
+            },
             swipeStart(index) {
                 this.cartList.forEach((item, idx) => {
                     if (index !== idx) {
@@ -291,7 +309,8 @@
                 uni.setStorageSync('cartCheckedIds', finalCheckedIds);
             },
             toggleSelectAll() {
-                // 由 u-checkbox 处理
+                this.isAllSelected = !this.isAllSelected;
+                this.onAllCheckChange({ value: this.isAllSelected });
             },
             handleClearCart() {
                 uni.showModal({
@@ -559,35 +578,46 @@
             display: flex;
             align-items: center;
 
-            .total-info {
-                text-align: right;
-                margin-right: 20rpx;
+            .info-wrapper {
                 display: flex;
-                align-items: center;
+                flex-direction: column;
+                align-items: flex-end;
+                margin-right: 20rpx;
 
-                .total-price {
+                .total-info {
                     display: flex;
                     align-items: center;
 
-                    .label {
-                        font-size: 28rpx;
-                        color: #333;
-                    }
+                    .total-price {
+                        display: flex;
+                        align-items: center;
+
+                        .label {
+                            font-size: 28rpx;
+                            color: #333;
+                        }
 
-                    .price {
-                        font-size: 36rpx;
-                        color: #e02020;
-                        font-weight: bold;
+                        .price {
+                            font-size: 36rpx;
+                            color: #e02020;
+                            font-weight: bold;
+                        }
+                    }
+                    
+                    .reduced-tip {
+                        font-size: 22rpx;
+                        color: #38C148;
+                        border: 1rpx solid #38C148;
+                        border-radius: 4rpx;
+                        padding: 0 10rpx;
+                        margin-left: 10rpx;
                     }
                 }
-                
-                .reduced-tip {
-                    font-size: 22rpx;
-                    color: #38C148;
-                    border: 1rpx solid #38C148;
-                    border-radius: 4rpx;
-                    padding: 0 10rpx;
-                    margin-left: 10rpx;
+
+                .freight-template {
+                    font-size: 24rpx;
+                    color: #d79f5f;
+                    margin-top: 6rpx;
                 }
             }
 

+ 26 - 3
pages-car/pages/my-order.vue

@@ -8,10 +8,15 @@
 
         <!-- 订单列表 -->
         <page-scroll :page-size="10" @updateList="handleUpdateList" ref="pageRef" slotEmpty
-            url="/token/shop/order/getShopOrderList" :params="params" :immediate="false">
+            :url="currentUrl" :params="params" :immediate="false">
             <view v-if="orderList.length > 0" class="order-list-container">
-                <buy-order-item v-for="(order, index) in orderList" :key="index" :order="order"
-                    @action="handleAction"></buy-order-item>
+                <template v-if="currentTab === 5">
+                    <refund-order-item v-for="(order, index) in orderList" :key="index" :order="order"></refund-order-item>
+                </template>
+                <template v-else>
+                    <buy-order-item v-for="(order, index) in orderList" :key="index" :order="order"
+                        @action="handleAction"></buy-order-item>
+                </template>
             </view>
         </page-scroll>
 
@@ -32,6 +37,7 @@
 
 <script>
 import BuyOrderItem from '../components/buy-order-item.vue';
+import RefundOrderItem from '../components/refund-order-item.vue';
 import pageScroll from '@/components/pageScroll/index.vue';
 import FastRefundDialog from '../components/fast-refund-dialog.vue';
 import UrgeDeliveryDialog from '../components/urge-delivery-dialog.vue';
@@ -40,6 +46,7 @@ import CancelOrderPopup from '../components/cancel-order-popup.vue';
 export default {
     components: {
         BuyOrderItem,
+        RefundOrderItem,
         pageScroll,
         FastRefundDialog,
         UrgeDeliveryDialog,
@@ -47,6 +54,7 @@ export default {
     },
     data() {
         return {
+            currentUrl: '/token/shop/order/getShopOrderList',
             // value用于前端标识,params用于后端查询
             tabList: [
                 { name: '全部', value: '0', params: {} },
@@ -71,6 +79,11 @@ export default {
             if (index !== -1) {
                 this.currentTab = index;
                 this.params = this.tabList[index].params;
+                if (options.status === '5') {
+                    this.currentUrl = '/token/shop/order/getMyRefundOrderList';
+                } else {
+                    this.currentUrl = '/token/shop/order/getShopOrderList';
+                }
             }
         }
         
@@ -110,6 +123,11 @@ export default {
         handleTabChange(index) {
             this.currentTab = index;
             this.params = this.tabList[index].params;
+            if (this.tabList[index].value === '5') {
+                this.currentUrl = '/token/shop/order/getMyRefundOrderList';
+            } else {
+                this.currentUrl = '/token/shop/order/getShopOrderList';
+            }
             this.loadOrders(true, this.params);
         },
         handleUpdateList(list) {
@@ -275,6 +293,11 @@ export default {
                         }
                     }
                 });
+            } else if (type === 'complaint') {
+                uni.setStorageSync('tempComplaintOrder', order);
+                uni.navigateTo({
+                    url: `/pages-car/pages/complaint?orderId=${order.orderId}`
+                });
             } else {
                 uni.showToast({ title: '功能开发中', icon: 'none' });
             }

+ 2 - 2
pages-car/pages/negotiation-history.vue

@@ -4,13 +4,13 @@
 			<view class="history-item" v-for="(item, index) in list" :key="index">
 				<!-- 左侧头像 -->
 				<view class="avatar-box">
-					<image class="avatar" :src="item.imgPath || '/static/default-avatar.png'" mode="aspectFill"></image>
+					<image class="avatar" :src="item.imgPath || 'https://shuhi.oss-cn-qingdao.aliyuncs.com/mini/logo3.png'" mode="aspectFill"></image>
 				</view>
 				
 				<!-- 右侧内容 -->
 				<view class="content-box">
 					<view class="user-info">
-						<text class="name">{{ item.userName || '用户' }}</text>
+						<text class="name">{{ item.userName || '书嗨' }}</text>
 						<text class="time">{{ item.createTime }}</text>
 					</view>
 					

+ 58 - 67
pages-car/pages/order-detail.vue

@@ -5,31 +5,36 @@
             <view class="status-text">{{ statusText }}</view>
             <view class="status-desc" v-if="orderInfo.status == '2'">
                 订单编号:{{ orderInfo.orderId }}
-                <u-icon name="copy" size="28" @click="copyOrderNo" style="margin-left: 10rpx;"></u-icon>
+                <image src="/pages-mine/static/copy.png" class="copy-icon" @click="copyOrderNo" mode="aspectFit"></image>
             </view>
             <view class="status-desc" v-else-if="orderInfo.status == '3'">
                 订单编号:{{ orderInfo.orderId }}
-                <u-icon name="copy" size="28" @click="copyOrderNo" style="margin-left: 10rpx;"></u-icon>
+                <image src="/pages-mine/static/copy.png" class="copy-icon" @click="copyOrderNo" mode="aspectFit"></image>
             </view>
             <view class="status-desc-block" v-else-if="orderInfo.status == '8'">
                 <view class="status-tip">还剩9天22时18分自动确认收货</view>
                 <view class="status-desc-row">
                     订单编号:{{ orderInfo.orderId }}
-                    <u-icon name="copy" size="28" @click="copyOrderNo" style="margin-left: 10rpx;"></u-icon>
+                    <image src="/pages-mine/static/copy.png" class="copy-icon" @click="copyOrderNo" mode="aspectFit"></image>
                 </view>
             </view>
             <view class="status-desc" v-else>
                 订单编号:{{ orderInfo.orderId }}
-                <u-icon name="copy" size="28" @click="copyOrderNo" style="margin-left: 10rpx;"></u-icon>
+                <image src="/pages-mine/static/copy.png" class="copy-icon" @click="copyOrderNo" mode="aspectFit"></image>
             </view>
         </view>
 
         <!-- 地址信息 -->
         <view class="info-card address-card" @click="handleAddressClick">
             <view class="icon-box">
-                <image src="/pages-mine/static/adderss.png" style="width: 40rpx; height: 40rpx"></image>
+                <image src="../static/adderss.png" style="width: 40rpx; height: 40rpx"></image>
             </view>
             <view class="address-content">
+                <view class="express-row"
+                    v-if="['3', '4', '8', '12', '10'].includes(String(orderInfo.status)) && orderInfo.waybillCode"
+                    @click.stop="viewLogistics">
+                    <view class="express-name">{{ orderInfo.expressName || '快递' }}({{ orderInfo.waybillCode }})</view>
+                </view>
                 <view class="user-info">
                     <text class="name">{{ orderInfo.receiverName }}</text>
                     <text class="mobile">{{ orderInfo.receiverMobile }}</text>
@@ -39,26 +44,13 @@
             <u-icon v-if="orderInfo.showModifyAddress == 1" name="arrow-right" color="#999" size="28"></u-icon>
         </view>
 
-        <!-- 物流信息 (已发货/已完成/退款) -->
-        <view class="info-card logistics-card"
-            v-if="['8', '12', '10'].includes(String(orderInfo.status)) && orderInfo.waybillCode">
-            <view class="icon-box">
-                <u-icon name="car-fill" color="#38C148" size="40"></u-icon>
-            </view>
-            <view class="logistics-content" @click="viewLogistics">
-                <view class="company-name">物流单号: {{ orderInfo.waybillCode }}</view>
-                <view class="latest-trace">点击查看物流详情</view>
-            </view>
-            <u-icon name="arrow-right" color="#999" size="28"></u-icon>
-        </view>
-
         <!-- 商品列表 -->
         <view class="info-card goods-card">
             <view class="goods-item" v-for="(goods, index) in orderInfo.detailVoList" :key="index">
                 <image :src="goods.cover" mode="aspectFill" class="goods-cover"></image>
                 <view class="goods-info">
                     <view class="goods-title">{{ goods.bookName }}</view>
-                    <view class="goods-quality" v-if="goods.isbn">ISBN:{{ goods.isbn }}</view>
+                    <view class="goods-quality" v-if="goods.conditionType || goods.bookConditionType">品相:{{ (goods.conditionType || goods.bookConditionType) | conditionText }}</view>
                     <view class="price-box">
                         <text class="price">¥{{ goods.price }}</text>
                         <text class="num">x{{ goods.num }}</text>
@@ -82,12 +74,13 @@
                 </view>
                 <view class="row">
                     <text>商品金额</text>
-                    <text class="goods-total">¥{{ orderInfo.totalMoney }}</text>
+                    <text class="goods-total">¥{{ (orderInfo.totalMoney - (orderInfo.expressMoney || 0)).toFixed(2) }}</text>
                 </view>
                 <view class="row">
                     <text>优惠金额</text>
                     <text class="discount">-¥{{ orderInfo.discountMoney || '0.00' }}</text>
                 </view>
+                <view class="divider"></view>
                 <view class="real-pay-row">
                     <text>实付款 ({{ orderInfo.payType == 1 ? '余额支付' : '微信支付' }})</text>
                     <text class="real-price">¥ {{ orderInfo.payMoney }}</text>
@@ -165,7 +158,7 @@ export default {
                 payMoney: 0,
                 createTime: ''
             },
-            isModifyingAddress: false
+            isModifyingAddress: false,
         };
     },
     computed: {
@@ -229,7 +222,7 @@ export default {
             uni.$u.http.get('/token/shop/order/getOrderDetail', {
                 orderId: orderId
             }).then((res) => {
-                if (res.code === 200) {
+                if (res.code == 200) {
                     this.orderInfo = res.data;
                 }
             });
@@ -395,8 +388,8 @@ export default {
     padding-bottom: 20rpx;
 
     .status-header {
-        background-color: #d1f2d8; // Light green bg
-        padding: 40rpx 30rpx;
+        background-color: #EBF8EE;
+        padding: 40rpx 30rpx 60rpx;
         color: #333;
 
         .status-text {
@@ -410,19 +403,32 @@ export default {
             color: #666;
             display: flex;
             align-items: center;
+
+            .copy-icon {
+                width: 32rpx;
+                height: 32rpx;
+                margin-left: 10rpx;
+            }
         }
 
         .status-desc-block {
-            font-size: 26rpx;
-            color: #666;
-
             .status-tip {
+                font-size: 26rpx;
+                color: #e02020;
                 margin-bottom: 10rpx;
             }
 
             .status-desc-row {
+                font-size: 26rpx;
+                color: #666;
                 display: flex;
                 align-items: center;
+
+                .copy-icon {
+                    width: 32rpx;
+                    height: 32rpx;
+                    margin-left: 10rpx;
+                }
             }
         }
     }
@@ -445,6 +451,17 @@ export default {
                 flex: 1;
                 margin-right: 20rpx;
 
+                .express-row {
+                    display: flex;
+                    align-items: center;
+                    padding-bottom: 15rpx;
+                    .express-name {
+                        font-size: 28rpx;
+                        color: #38C148;
+                        font-weight: 500;
+                    }
+                }
+
                 .user-info {
                     font-size: 30rpx;
                     font-weight: 500;
@@ -463,40 +480,6 @@ export default {
             }
         }
 
-        &.logistics-card {
-            align-items: center;
-
-            .icon-box {
-                margin-right: 20rpx;
-            }
-
-            .logistics-content {
-                flex: 1;
-                margin-right: 20rpx;
-
-                .company-name {
-                    font-size: 28rpx;
-                    color: #38C148;
-                    margin-bottom: 6rpx;
-                }
-
-                .latest-trace {
-                    font-size: 26rpx;
-                    color: #333;
-                    margin-bottom: 6rpx;
-                    display: -webkit-box;
-                    -webkit-box-orient: vertical;
-                    -webkit-line-clamp: 2;
-                    overflow: hidden;
-                }
-
-                .update-time {
-                    font-size: 24rpx;
-                    color: #999;
-                }
-            }
-        }
-
         &.goods-card {
             display: block;
 
@@ -548,15 +531,14 @@ export default {
             }
 
             .price-detail {
-                border-top: 1rpx solid #eee;
-                padding-top: 20rpx;
+                margin-top: 30rpx;
 
                 .row {
                     display: flex;
                     justify-content: space-between;
                     font-size: 26rpx;
                     color: #666;
-                    margin-bottom: 10rpx;
+                    margin-bottom: 20rpx;
 
                     .goods-total {
                         color: #38C148;
@@ -567,15 +549,24 @@ export default {
                     }
                 }
 
+                .divider {
+                    height: 1rpx;
+                    background-color: #eee;
+                    margin: 20rpx 0;
+                }
+
                 .real-pay-row {
                     display: flex;
                     justify-content: space-between;
-                    font-size: 30rpx;
-                    font-weight: 500;
-                    margin-top: 20rpx;
+                    align-items: center;
+                    font-size: 28rpx;
+                    color: #333;
+                    font-weight: bold;
+                    margin-top: 10rpx;
 
                     .real-price {
                         color: #38C148;
+                        font-size: 32rpx;
                     }
                 }
             }

+ 4 - 4
pages-car/pages/pay-success.vue

@@ -7,7 +7,7 @@
         <view class="success-desc">您的书籍将邮寄,请耐心等待</view>
         <view class="action-buttons">
             <button class="btn-return" @click="handleReturn">返回首页</button>
-            <button class="btn-view" @click="handleViewOrder">查看订单</button>
+            <button class="btn-view" @click="handleViewCart">返回购物车</button>
         </view>
         
         <!-- 温馨提示 -->
@@ -36,9 +36,9 @@ export default {
                 url: '/pages/sell/index'
             })
         },
-        handleViewOrder() {
-            uni.navigateTo({
-                url: '/pages-car/pages/order-detail?orderId=' + this.orderId
+        handleViewCart() {
+            uni.switchTab({
+                url: '/pages/cart/index'
             })
         }
     }

+ 529 - 525
pages-car/pages/refund-detail.vue

@@ -9,7 +9,8 @@
 			<!-- 倒计时 -->
 			<view class="status-desc" v-if="orderInfo.restAuditSecond > 0">
 				<u-count-down :timestamp="orderInfo.restAuditSecond" separator="zh" :show-seconds="false"
-					@end="getDetail" font-size="26" separator-size="26" separator-color="#999" color="#999" bg-color="transparent"></u-count-down>
+					@end="getDetail" font-size="26" separator-size="26" separator-color="#999" color="#999"
+					bg-color="transparent"></u-count-down>
 				<template>
 					<text class="status-desc" v-if="orderInfo.status == 1">后平台未处理将自动同意</text>
 					<text class="status-desc" v-if="orderInfo.status == 2">后买家未处理将自动撤销</text>
@@ -29,7 +30,8 @@
 						<view class="negotiation-text">
 							<view class="negotiation-title">协商修改退款金额为{{ orderInfo.disposeMoney || orderInfo.refundMoney
 							}}元</view>
-							<view class="negotiation-desc" v-if="orderInfo.disposeType == 3">我们愿意支持退货退款,若您接受修改退货退款,请将退货商品寄回平台</view>
+							<view class="negotiation-desc" v-if="orderInfo.disposeType == 3">
+								我们愿意支持退货退款,若您接受修改退货退款,请将退货商品寄回平台</view>
 
 							<view class="negotiation-desc" v-else>我们愿意支持退款,若您接受修改金额,我们将立刻退款给您</view>
 						</view>
@@ -44,7 +46,9 @@
 				<!-- 退款成功金额展示 -->
 				<view class="refund-amount-box" v-if="orderInfo.status == '9'">
 					<view class="amount-row">
-						<text class="label">退回余额</text>
+						<!-- @Schema(description = "金额退回方式:1-余额 2-微信 3-支付宝") private String moneyType; -->
+						<text class="label">退回{{ orderInfo.moneyType ? ['余额', '微信', '支付宝'][orderInfo.moneyType - 1] : '余额'
+							}}</text>
 						<text class="value">¥{{ orderInfo.refundMoney }}</text>
 					</view>
 				</view>
@@ -79,8 +83,8 @@
 				<view class="address-label">平台地址</view>
 				<view class="address-content">
 					<view class="name">{{ orderInfo.receiverName }} {{ orderInfo.receiverMobile }}</view>
-					<view class="detail">{{ orderInfo.receiverAddress }} <image
-							src="/pages-mine/static/copy.png" class="copy-icon" @click="copyAddress"></image>
+					<view class="detail">{{ orderInfo.receiverAddress }} <image src="/pages-mine/static/copy.png"
+							class="copy-icon" @click="copyAddress"></image>
 					</view>
 				</view>
 				<u-icon name="arrow-right" color="#ccc" size="28"></u-icon>
@@ -126,7 +130,7 @@
 					<u-icon name="lightning-fill" color="#38C148" size="28" style="margin-left: 6rpx;"></u-icon>
 				</view>
 			</view>
-			
+
 			<view class="row history-row" @click="openRefundHistory">
 				<text class="label">历史退款记录</text>
 				<view class="value flex-row link-text">
@@ -191,629 +195,629 @@
 			</button>
 			<!-- #endif -->
 		</FloatingDrag>
-		
+
 		<refund-history-popup ref="historyPopup" @view="handleViewHistoryRefund"></refund-history-popup>
 	</view>
 </template>
 
 <script>
-	import FloatingDrag from "@/components/floating-drag.vue";
-	import RefundHistoryPopup from "../components/refund-history-popup.vue";
+import FloatingDrag from "@/components/floating-drag.vue";
+import RefundHistoryPopup from "../components/refund-history-popup.vue";
 import navbarVue from '../../components/navbar/navbar.vue';
-	export default {
-		components: {
-			FloatingDrag,
-			RefundHistoryPopup
-		},
-		data() {
-			return {
-				// 客服按钮位置
-				servicePosition: {
-					left: 0,
-					right: 'auto',
-					bottom: "10%",
-				},
+export default {
+	components: {
+		FloatingDrag,
+		RefundHistoryPopup
+	},
+	data() {
+		return {
+			// 客服按钮位置
+			servicePosition: {
+				left: 0,
+				right: 'auto',
+				bottom: "10%",
+			},
+			refundOrderId: '',
+			orderInfo: {
+				status: '',
+				restAuditSecond: 0,
+				detailOrderId: '',
+				bookName: '',
+				cover: '',
+				isbn: '',
+				conditionType: '',
+				refundNum: 0,
+				price: 0,
+				refundMoney: 0,
+				refundReason: '',
+				createTime: '',
 				refundOrderId: '',
-				orderInfo: {
-					status: '',
-					restAuditSecond: 0,
-					detailOrderId: '',
-					bookName: '',
-					cover: '',
-					isbn: '',
-					conditionType: '',
-					refundNum: 0,
-					price: 0,
-					refundMoney: 0,
-					refundReason: '',
-					createTime: '',
-					refundOrderId: '',
-					showCancel: 0,
-					showModifyApply: 0,
-					showComplaint: 0,
-					showClose: 0
-				},
-				btnStyle: {
-					marginLeft: '20rpx',
-					minWidth: '160rpx',
-					height: '64rpx',
-					lineHeight: '64rpx',
-					padding: '0 20rpx',
-					color: '#666',
-					borderColor: '#ccc',
-					fontSize: '28rpx',
-				},
-				primaryBtnStyle: {
-					marginLeft: '20rpx',
-					minWidth: '160rpx',
-					height: '64rpx',
-					lineHeight: '64rpx',
-					padding: '0 20rpx',
-					backgroundColor: '#38C148',
-					color: '#fff',
-					border: 'none'
-				},
-				rejectBtnStyle: {
-					color: '#333',
-					backgroundColor: '#fff',
-					border: '1rpx solid #ccc',
-					minWidth: '160rpx',
-					height: '60rpx',
-					lineHeight: '60rpx',
-					fontSize: '26rpx',
-					margin: '0 20rpx 0 0'
-				},
-				acceptBtnStyle: {
-					color: '#fff',
-					backgroundColor: '#FF6600',
-					border: 'none',
-					minWidth: '160rpx',
-					height: '60rpx',
-					lineHeight: '60rpx',
-					fontSize: '26rpx',
-					margin: '0'
-				},
-				fillBtnStyle: {
-					backgroundColor: '#38C148',
-					color: '#fff',
-					height: '80rpx',
-					fontSize: '30rpx',
-					marginTop: '30rpx',
-					width: '100%'
+				showCancel: 0,
+				showModifyApply: 0,
+				showComplaint: 0,
+				showClose: 0
+			},
+			btnStyle: {
+				marginLeft: '20rpx',
+				minWidth: '160rpx',
+				height: '64rpx',
+				lineHeight: '64rpx',
+				padding: '0 20rpx',
+				color: '#666',
+				borderColor: '#ccc',
+				fontSize: '28rpx',
+			},
+			primaryBtnStyle: {
+				marginLeft: '20rpx',
+				minWidth: '160rpx',
+				height: '64rpx',
+				lineHeight: '64rpx',
+				padding: '0 20rpx',
+				backgroundColor: '#38C148',
+				color: '#fff',
+				border: 'none'
+			},
+			rejectBtnStyle: {
+				color: '#333',
+				backgroundColor: '#fff',
+				border: '1rpx solid #ccc',
+				minWidth: '160rpx',
+				height: '60rpx',
+				lineHeight: '60rpx',
+				fontSize: '26rpx',
+				margin: '0 20rpx 0 0'
+			},
+			acceptBtnStyle: {
+				color: '#fff',
+				backgroundColor: '#FF6600',
+				border: 'none',
+				minWidth: '160rpx',
+				height: '60rpx',
+				lineHeight: '60rpx',
+				fontSize: '26rpx',
+				margin: '0'
+			},
+			fillBtnStyle: {
+				backgroundColor: '#38C148',
+				color: '#fff',
+				height: '80rpx',
+				fontSize: '30rpx',
+				marginTop: '30rpx',
+				width: '100%'
+			}
+		};
+	},
+	computed: {
+		showBottomBar() {
+			const { showCancel, showModifyApply, showComplaint, showClose } = this.orderInfo;
+			return showCancel == 1 || showModifyApply == 1 || showComplaint == 1 || showClose == 1;
+		}
+	},
+	onLoad(options) {
+		if (options.refundOrderId) {
+			this.refundOrderId = options.refundOrderId;
+		} else if (options.orderId) {
+			this.refundOrderId = options.orderId;
+		}
+	},
+	onShow() {
+		if (this.refundOrderId) {
+			this.getDetail();
+		}
+	},
+	methods: {
+		getDetail() {
+			this.$u.api.getNewRefundOrderDetailAjax({
+				refundOrderId: this.refundOrderId
+			}).then(res => {
+				if (res.code == 200) {
+					this.orderInfo = res.data;
 				}
+			});
+		},
+		getStatusText(status) {
+			// 状态 1-申请退款 2-协商中待用户确认 3-协商中待商家确认 4-审核通过 5-审核驳回 6-超时关闭 7-买家已发货 8-确认收货 9-退款成功
+			const map = {
+				'1': '请等待平台处理',
+				'2': '协商中待用户确认',
+				'3': '协商中待商家确认',
+				'4': '审核已通过,请您把书籍自行寄回',
+				'5': '审核已驳回',
+				'6': '超时关闭',
+				'7': '待平台确认收货',
+				'8': '平台已确认收货',
+				'9': '退款成功'
 			};
+			return map[status] || '处理中';
 		},
-		computed: {
-			showBottomBar() {
-				const { showCancel, showModifyApply, showComplaint, showClose } = this.orderInfo;
-				return showCancel == 1 || showModifyApply == 1 || showComplaint == 1 || showClose == 1;
-			}
+		copyAddress() {
+			const address = (this.orderInfo.receiverName || '') + ' ' + (this.orderInfo.receiverMobile || '') + ' ' + (this.orderInfo.receiverAddress || '');
+			uni.setClipboardData({
+				data: address,
+				success: () => {
+					uni.showToast({ title: '地址复制成功', icon: 'none' });
+				}
+			});
 		},
-		onLoad(options) {
-			if (options.refundOrderId) {
-				this.refundOrderId = options.refundOrderId;
-			} else if (options.orderId) {
-				this.refundOrderId = options.orderId;
-			}
+		goToFillLogistics() {
+			uni.navigateTo({
+				url: `/pages-car/pages/fill-logistics?refundOrderId=${this.refundOrderId}`
+			});
 		},
-		onShow() {
-			if (this.refundOrderId) {
-				this.getDetail();
-			}
+		copyOrderNo() {
+			uni.setClipboardData({
+				data: String(this.orderInfo.refundOrderId || ''),
+				success: () => {
+					uni.showToast({ title: '复制成功', icon: 'none' });
+				}
+			});
 		},
-		methods: {
-			getDetail() {
-				this.$u.api.getNewRefundOrderDetailAjax({
-					refundOrderId: this.refundOrderId
-				}).then(res => {
-					if (res.code == 200) {
-						this.orderInfo = res.data;
-					}
-				});
-			},
-			getStatusText(status) {
-				// 状态 1-申请退款 2-协商中待用户确认 3-协商中待商家确认 4-审核通过 5-审核驳回 6-超时关闭 7-买家已发货 8-确认收货 9-退款成功
-				const map = {
-					'1': '请等待平台处理',
-					'2': '协商中待用户确认',
-					'3': '协商中待商家确认',
-					'4': '审核已通过,请您把书籍自行寄回',
-					'5': '审核已驳回',
-					'6': '超时关闭', 
-					'7': '待平台确认收货', 
-					'8': '平台已确认收货',
-					'9': '退款成功'
-				};
-				return map[status] || '处理中';
-			},
-			copyAddress() {
-				const address = (this.orderInfo.receiverName || '') + ' ' + (this.orderInfo.receiverMobile || '') + ' ' + (this.orderInfo.receiverAddress || '');
-				uni.setClipboardData({
-					data: address,
-					success: () => {
-						uni.showToast({ title: '地址复制成功', icon: 'none' });
-					}
-				});
-			},
-			goToFillLogistics() {
-				uni.navigateTo({
-					url: `/pages-car/pages/fill-logistics?refundOrderId=${this.refundOrderId}`
-				});
-			},
-			copyOrderNo() {
-				uni.setClipboardData({
-					data: String(this.orderInfo.refundOrderId || ''),
-					success: () => {
-						uni.showToast({ title: '复制成功', icon: 'none' });
-					}
-				});
-			},
-			goToHistory() {
-				// 跳转协商历史页面
-				uni.navigateTo({
-					url: `/pages-car/pages/negotiation-history?refundOrderId=${this.refundOrderId}`
-				});
-			},
-			openRefundHistory() {
-				const orderDetailId = this.orderInfo.detailOrderId || this.orderInfo.orderDetailId || this.orderInfo.detailId;
-				if (!orderDetailId) {
-					uni.showToast({ title: '缺少订单详情ID', icon: 'none' });
-					return;
+		goToHistory() {
+			// 跳转协商历史页面
+			uni.navigateTo({
+				url: `/pages-car/pages/negotiation-history?refundOrderId=${this.refundOrderId}`
+			});
+		},
+		openRefundHistory() {
+			const orderDetailId = this.orderInfo.detailOrderId || this.orderInfo.orderDetailId || this.orderInfo.detailId;
+			if (!orderDetailId) {
+				uni.showToast({ title: '缺少订单详情ID', icon: 'none' });
+				return;
+			}
+			uni.showLoading({ title: '加载中' });
+			this.$u.api.getRefundOrderDetailListAjax({ orderDetailId }).then(res => {
+				uni.hideLoading();
+				if (res.code == 200) {
+					this.$refs.historyPopup && this.$refs.historyPopup.open(res.data || []);
+				} else {
+					uni.showToast({ title: res.msg || '获取失败', icon: 'none' });
 				}
-				uni.showLoading({ title: '加载中' });
-				this.$u.api.getRefundOrderDetailListAjax({ orderDetailId }).then(res => {
-					uni.hideLoading();
-					if (res.code == 200) {
-						this.$refs.historyPopup && this.$refs.historyPopup.open(res.data || []);
-					} else {
-						uni.showToast({ title: res.msg || '获取失败', icon: 'none' });
-					}
-				}).catch(() => {
-					uni.hideLoading();
-				});
-			},
-			handleViewHistoryRefund(item) {
-				if (!item || !item.refundOrderId) return;
-				uni.redirectTo({
-					url: `/pages-car/pages/refund-detail?refundOrderId=${item.refundOrderId}`
-				});
-			},
-			navigateToCustomerService() {
-				// 联系客服
-				uni.navigateTo({
-					url: '/pages/customer-service/index'
-				});
-			},
-			// 处理位置变更
-			handlePositionChange(position) {
-				this.servicePosition = position;
-			},
-			handleNegotiation(accept) {
-				const title = accept ? '确认接受协商金额?' : '确认拒绝协商?';
-				uni.showModal({
-					title: '提示',
-					content: title,
-					success: (res) => {
-						if (res.confirm) {
-							uni.showLoading({ title: '处理中' });
-							const api = accept ? this.$u.api.refundDisposeAgreeAjax : this.$u.api.refundDisposeRefuseAjax;
-							api({ refundOrderId: this.refundOrderId }).then(res => {
-								uni.hideLoading();
-								if (res.code == 200) {
-									uni.showToast({
-										title: accept ? '已接受协商' : '已拒绝协商',
-										icon: 'success'
-									});
-									// 刷新详情
-									this.getDetail();
-								} else {
-									uni.showToast({
-										title: res.msg || '操作失败',
-										icon: 'none'
-									});
-								}
-							}).catch(() => {
-								uni.hideLoading();
-							});
-						}
-					}
-				});
-			},
-			handleAction(type) {
-				switch (type) {
-					case 'cancel':
-						// 撤销申请逻辑
-						uni.showModal({
-							title: '提示',
-							content: '确定要撤销退款申请吗?',
-							success: (res) => {
-								if (res.confirm) {
-									uni.showLoading({
-										title: '处理中'
-									});
-									this.$u.api.refundCancelAjax({
-										refundOrderId: this.refundOrderId
-									}).then(res => {
-										uni.hideLoading();
-										if (res.code == 200) {
-											uni.showToast({
-												title: '撤销成功',
-												icon: 'success'
-											});
-											// 刷新页面
-											this.getDetail();
-											setTimeout(() => {
-												uni.navigateBack();
-											}, 1000);
-										}
-									});
-								}
+			}).catch(() => {
+				uni.hideLoading();
+			});
+		},
+		handleViewHistoryRefund(item) {
+			if (!item || !item.refundOrderId) return;
+			uni.redirectTo({
+				url: `/pages-car/pages/refund-detail?refundOrderId=${item.refundOrderId}`
+			});
+		},
+		navigateToCustomerService() {
+			// 联系客服
+			uni.navigateTo({
+				url: '/pages/customer-service/index'
+			});
+		},
+		// 处理位置变更
+		handlePositionChange(position) {
+			this.servicePosition = position;
+		},
+		handleNegotiation(accept) {
+			const title = accept ? '确认接受协商金额?' : '确认拒绝协商?';
+			uni.showModal({
+				title: '提示',
+				content: title,
+				success: (res) => {
+					if (res.confirm) {
+						uni.showLoading({ title: '处理中' });
+						const api = accept ? this.$u.api.refundDisposeAgreeAjax : this.$u.api.refundDisposeRefuseAjax;
+						api({ refundOrderId: this.refundOrderId }).then(res => {
+							uni.hideLoading();
+							if (res.code == 200) {
+								uni.showToast({
+									title: accept ? '已接受协商' : '已拒绝协商',
+									icon: 'success'
+								});
+								// 刷新详情
+								this.getDetail();
+							} else {
+								uni.showToast({
+									title: res.msg || '操作失败',
+									icon: 'none'
+								});
 							}
+						}).catch(() => {
+							uni.hideLoading();
 						});
-						break;
-					case 'modify':
-						// 跳转到修改申请页面
-						uni.navigateTo({
-							url: `/pages-car/pages/apply-refund?refundOrderId=${this.refundOrderId}&isModify=1`
-						});
-						break;
-					case 'complaint':
-						uni.navigateTo({
-							url: `/pages-car/pages/complaint?orderId=${this.orderInfo.originOrderId}`
-						});
-						break;
-					case 'close':
-						// 关闭退款
-						uni.showToast({ title: '关闭退款', icon: 'none' });
-						break;
+					}
 				}
+			});
+		},
+		handleAction(type) {
+			switch (type) {
+				case 'cancel':
+					// 撤销申请逻辑
+					uni.showModal({
+						title: '提示',
+						content: '确定要撤销退款申请吗?',
+						success: (res) => {
+							if (res.confirm) {
+								uni.showLoading({
+									title: '处理中'
+								});
+								this.$u.api.refundCancelAjax({
+									refundOrderId: this.refundOrderId
+								}).then(res => {
+									uni.hideLoading();
+									if (res.code == 200) {
+										uni.showToast({
+											title: '撤销成功',
+											icon: 'success'
+										});
+										// 刷新页面
+										this.getDetail();
+										setTimeout(() => {
+											uni.navigateBack();
+										}, 1000);
+									}
+								});
+							}
+						}
+					});
+					break;
+				case 'modify':
+					// 跳转到修改申请页面
+					uni.navigateTo({
+						url: `/pages-car/pages/apply-refund?refundOrderId=${this.refundOrderId}&isModify=1`
+					});
+					break;
+				case 'complaint':
+					uni.navigateTo({
+						url: `/pages-car/pages/complaint?orderId=${this.orderInfo.originOrderId}`
+					});
+					break;
+				case 'close':
+					// 关闭退款
+					uni.showToast({ title: '关闭退款', icon: 'none' });
+					break;
 			}
 		}
 	}
+}
 </script>
 
 <style lang="scss" scoped>
-	.service-btn {
-		height: max-content;
-		background-color: transparent;
-		padding: 0;
+.service-btn {
+	height: max-content;
+	background-color: transparent;
+	padding: 0;
 
-		&::after {
-			border: none;
-		}
+	&::after {
+		border: none;
 	}
-
-	.refund-detail-page {
-		min-height: 100vh;
-		background-color: #F5F5F5;
-		padding-bottom: 20rpx;
-
-		.status-header {
-			background-color: #fff;
-			padding: 40rpx 30rpx;
-			text-align: center;
+}
+
+.refund-detail-page {
+	min-height: 100vh;
+	background-color: #F5F5F5;
+	padding-bottom: 20rpx;
+
+	.status-header {
+		background-color: #fff;
+		padding: 40rpx 30rpx;
+		text-align: center;
+		margin-bottom: 20rpx;
+
+		.status-title {
+			font-size: 36rpx;
+			font-weight: bold;
+			color: #333;
 			margin-bottom: 20rpx;
+		}
 
-			.status-title {
-				font-size: 36rpx;
-				font-weight: bold;
-				color: #333;
-				margin-bottom: 20rpx;
-			}
-
-			.status-desc {
-				font-size: 26rpx;
-				color: #999;
-				margin-bottom: 10rpx;
-			}
+		.status-desc {
+			font-size: 26rpx;
+			color: #999;
+			margin-bottom: 10rpx;
+		}
 
-			.status-tip {
-				font-size: 24rpx;
-				color: #999;
-			}
+		.status-tip {
+			font-size: 24rpx;
+			color: #999;
+		}
 
-			.negotiation-card {
-				margin-top: 30rpx;
-				text-align: left;
+		.negotiation-card {
+			margin-top: 30rpx;
+			text-align: left;
 
-				.negotiation-content {
-					display: flex;
-					align-items: flex-start;
-					margin-bottom: 30rpx;
+			.negotiation-content {
+				display: flex;
+				align-items: flex-start;
+				margin-bottom: 30rpx;
 
-					.negotiation-icon {
-						margin-right: 20rpx;
-						margin-top: 6rpx;
-					}
+				.negotiation-icon {
+					margin-right: 20rpx;
+					margin-top: 6rpx;
+				}
 
-					.negotiation-text {
-						flex: 1;
+				.negotiation-text {
+					flex: 1;
 
-						.negotiation-title {
-							font-size: 30rpx;
-							font-weight: bold;
-							color: #333;
-							margin-bottom: 10rpx;
-						}
+					.negotiation-title {
+						font-size: 30rpx;
+						font-weight: bold;
+						color: #333;
+						margin-bottom: 10rpx;
+					}
 
-						.negotiation-desc {
-							font-size: 26rpx;
-							color: #999;
-							line-height: 1.4;
-						}
+					.negotiation-desc {
+						font-size: 26rpx;
+						color: #999;
+						line-height: 1.4;
 					}
 				}
+			}
 
-				.negotiation-actions {
-					display: flex;
-					justify-content: flex-end;
-				}
+			.negotiation-actions {
+				display: flex;
+				justify-content: flex-end;
 			}
+		}
 
-			.refund-amount-box {
-				margin-top: 30rpx;
-				padding-top: 30rpx;
+		.refund-amount-box {
+			margin-top: 30rpx;
+			padding-top: 30rpx;
 
-				.amount-row {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					font-size: 30rpx;
+			.amount-row {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				font-size: 30rpx;
 
-					.label {
-						color: #333;
-					}
+				.label {
+					color: #333;
+				}
 
-					.value {
-						color: #333;
-						font-weight: bold;
-					}
+				.value {
+					color: #333;
+					font-weight: bold;
 				}
 			}
 		}
+	}
 
-		.info-card {
-			background-color: #fff;
-			margin: 20rpx;
-			border-radius: 16rpx;
-			padding: 30rpx;
-
-			&.return-method-card {
-				.card-title {
-					font-size: 32rpx;
-					font-weight: bold;
-					color: #333;
-					text-align: center;
-					margin-bottom: 30rpx;
-				}
+	.info-card {
+		background-color: #fff;
+		margin: 20rpx;
+		border-radius: 16rpx;
+		padding: 30rpx;
 
-				.method-tabs {
-					display: flex;
-					justify-content: space-between;
-					margin-bottom: 30rpx;
-
-					.tab-item {
-						flex: 1;
-						background-color: #F8F8F8;
-						border-radius: 12rpx;
-						padding: 20rpx 0;
-						text-align: center;
-						margin-right: 20rpx;
-						border: 2rpx solid transparent;
-
-						&:last-child {
-							margin-right: 0;
-						}
+		&.return-method-card {
+			.card-title {
+				font-size: 32rpx;
+				font-weight: bold;
+				color: #333;
+				text-align: center;
+				margin-bottom: 30rpx;
+			}
 
-						&.active {
-							background-color: #F0F9F1;
-							border-color: #38C148;
+			.method-tabs {
+				display: flex;
+				justify-content: space-between;
+				margin-bottom: 30rpx;
 
-							.tab-name {
-								color: #38C148;
-							}
+				.tab-item {
+					flex: 1;
+					background-color: #F8F8F8;
+					border-radius: 12rpx;
+					padding: 20rpx 0;
+					text-align: center;
+					margin-right: 20rpx;
+					border: 2rpx solid transparent;
 
-							.tab-desc {
-								color: #38C148;
-								opacity: 0.8;
-							}
-						}
+					&:last-child {
+						margin-right: 0;
+					}
 
-						&.disabled {
-							opacity: 0.5;
-						}
+					&.active {
+						background-color: #F0F9F1;
+						border-color: #38C148;
 
 						.tab-name {
-							font-size: 30rpx;
-							font-weight: bold;
-							color: #333;
-							margin-bottom: 6rpx;
+							color: #38C148;
 						}
 
 						.tab-desc {
-							font-size: 22rpx;
-							color: #999;
+							color: #38C148;
+							opacity: 0.8;
 						}
 					}
+
+					&.disabled {
+						opacity: 0.5;
+					}
+
+					.tab-name {
+						font-size: 30rpx;
+						font-weight: bold;
+						color: #333;
+						margin-bottom: 6rpx;
+					}
+
+					.tab-desc {
+						font-size: 22rpx;
+						color: #999;
+					}
 				}
+			}
 
-				.warning-box {
-					background-color: #E8F5E9;
-					color: #38C148;
-					font-size: 26rpx;
-					padding: 16rpx;
-					border-radius: 8rpx;
-					text-align: center;
-					margin-bottom: 30rpx;
+			.warning-box {
+				background-color: #E8F5E9;
+				color: #38C148;
+				font-size: 26rpx;
+				padding: 16rpx;
+				border-radius: 8rpx;
+				text-align: center;
+				margin-bottom: 30rpx;
+			}
+
+			.address-box {
+				display: flex;
+				align-items: center;
+				padding: 20rpx 0;
+				border-top: 1rpx solid #F5F5F5;
+
+				.address-label {
+					width: 140rpx;
+					font-size: 28rpx;
+					color: #333;
+					font-weight: bold;
 				}
 
-				.address-box {
-					display: flex;
-					align-items: center;
-					padding: 20rpx 0;
-					border-top: 1rpx solid #F5F5F5;
+				.address-content {
+					flex: 1;
+					padding-right: 20rpx;
 
-					.address-label {
-						width: 140rpx;
-						font-size: 28rpx;
-						color: #333;
+					.name {
+						font-size: 30rpx;
 						font-weight: bold;
+						color: #333;
+						margin-bottom: 10rpx;
 					}
 
-					.address-content {
-						flex: 1;
-						padding-right: 20rpx;
-
-						.name {
-							font-size: 30rpx;
-							font-weight: bold;
-							color: #333;
-							margin-bottom: 10rpx;
-						}
-
-						.detail {
-							font-size: 26rpx;
-							color: #666;
-							line-height: 1.4;
+					.detail {
+						font-size: 26rpx;
+						color: #666;
+						line-height: 1.4;
 
-							.copy-icon {
-								width: 28rpx;
-								height: 28rpx;
-								vertical-align: middle;
-								margin-left: 10rpx;
-							}
+						.copy-icon {
+							width: 28rpx;
+							height: 28rpx;
+							vertical-align: middle;
+							margin-left: 10rpx;
 						}
 					}
 				}
 			}
+		}
 
-			&.goods-card {
-				.goods-item {
-					display: flex;
-					margin-bottom: 20rpx;
+		&.goods-card {
+			.goods-item {
+				display: flex;
+				margin-bottom: 20rpx;
 
-					&:last-child {
-						margin-bottom: 0;
+				&:last-child {
+					margin-bottom: 0;
+				}
+
+				.goods-cover {
+					width: 140rpx;
+					height: 160rpx;
+					border-radius: 8rpx;
+					margin-right: 20rpx;
+					flex-shrink: 0;
+				}
+
+				.goods-info {
+					flex: 1;
+					position: relative;
+
+					.goods-title {
+						font-size: 28rpx;
+						color: #333;
+						margin-bottom: 10rpx;
 					}
 
-					.goods-cover {
-						width: 140rpx;
-						height: 160rpx;
-						border-radius: 8rpx;
-						margin-right: 20rpx;
-						flex-shrink: 0;
+					.goods-sku {
+						font-size: 24rpx;
+						color: #999;
+						margin-bottom: 10rpx;
 					}
 
-					.goods-info {
-						flex: 1;
-						position: relative;
+					.price-box {
+						display: flex;
+						justify-content: space-between;
+						align-items: center;
+						margin-top: 20rpx;
 
-						.goods-title {
+						.price {
 							font-size: 28rpx;
 							color: #333;
-							margin-bottom: 10rpx;
 						}
 
-						.goods-sku {
+						.num {
 							font-size: 24rpx;
 							color: #999;
-							margin-bottom: 10rpx;
-						}
-
-						.price-box {
-							display: flex;
-							justify-content: space-between;
-							align-items: center;
-							margin-top: 20rpx;
-
-							.price {
-								font-size: 28rpx;
-								color: #333;
-							}
-
-							.num {
-								font-size: 24rpx;
-								color: #999;
-							}
 						}
+					}
 
-						.refund-status-tag {
-							position: absolute;
-							right: 0;
-							top: 50%; // Adjust as needed
-							transform: translateY(-50%);
-							font-size: 24rpx;
-							color: #999;
+					.refund-status-tag {
+						position: absolute;
+						right: 0;
+						top: 50%; // Adjust as needed
+						transform: translateY(-50%);
+						font-size: 24rpx;
+						color: #999;
 
-							&.red-tag {
-								color: #ff3b30;
-								border: 1rpx solid #ff3b30;
-								padding: 2rpx 10rpx;
-								border-radius: 6rpx;
-								font-size: 22rpx;
-							}
+						&.red-tag {
+							color: #ff3b30;
+							border: 1rpx solid #ff3b30;
+							padding: 2rpx 10rpx;
+							border-radius: 6rpx;
+							font-size: 22rpx;
 						}
 					}
 				}
 			}
+		}
 
-			&.detail-card {
-				.row {
-					display: flex;
-					justify-content: space-between;
-					margin-bottom: 20rpx;
-					font-size: 26rpx;
+		&.detail-card {
+			.row {
+				display: flex;
+				justify-content: space-between;
+				margin-bottom: 20rpx;
+				font-size: 26rpx;
 
-					&:last-child {
-						margin-bottom: 0;
-					}
+				&:last-child {
+					margin-bottom: 0;
+				}
 
-					.label {
-						color: #999;
-					}
+				.label {
+					color: #999;
+				}
 
-					.value {
-						color: #333;
+				.value {
+					color: #333;
 
-						&.flex-row {
-							display: flex;
-							align-items: center;
-						}
+					&.flex-row {
+						display: flex;
+						align-items: center;
+					}
 
-						&.link-text {
-							color: #38C148; // 使用主题色
-							display: flex;
-							align-items: center;
-						}
+					&.link-text {
+						color: #38C148; // 使用主题色
+						display: flex;
+						align-items: center;
 					}
 				}
 			}
 		}
+	}
+
+	.bottom-bar {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: #fff;
+		padding: 20rpx 30rpx;
+		padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
+		z-index: 100;
+
+		.service-btn {
+			padding: 10rpx;
+		}
 
-		.bottom-bar {
-			position: fixed;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			background-color: #fff;
-			padding: 20rpx 30rpx;
-			padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
+		.btn-group {
 			display: flex;
-			justify-content: space-between;
 			align-items: center;
-			box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
-			z-index: 100;
-
-			.service-btn {
-				padding: 10rpx;
-			}
-
-			.btn-group {
-				display: flex;
-				align-items: center;
-				justify-content: flex-end;
-				width: 100%;
-			}
+			justify-content: flex-end;
+			width: 100%;
 		}
 	}
+}
 </style>

BIN
pages-car/static/adderss.png


+ 0 - 6
pages-mine/pages/cashier-desk.vue

@@ -145,9 +145,6 @@ export default {
 
         // 发起支付
         onConfirmPayment() {
-            uni.showLoading({
-                title: '支付处理中'
-            })
             // 获取支付参数
             uni.$u.post('/token/order/refundOrderPay', this.formData).then(res => {
                 if (res.code === 200) {
@@ -166,13 +163,10 @@ export default {
                     });
                 }
             }).catch(err => {
-                console.error('获取支付参数失败:', err);
                 uni.showToast({
                     title: err.msg || '获取支付参数失败',
                     icon: 'none'
                 });
-            }).finally(() => {
-                uni.hideLoading();
             })
         },
 

+ 7 - 2
pages-sell/components/select-good-popup/index.vue

@@ -69,7 +69,7 @@
 			<!-- Footer Buttons -->
 			<view class="footer-btns">
 				<view class="btn btn-orange" @click="handleShareAction">
-					<text class="price">¥{{ currentProduct.maxReducePrice }}</text>
+					<text class="price">¥{{ displayReducePrice }}</text>
 					<text class="desc">分享一人可降 {{ currentProduct.reducePrice }} 元</text>
 				</view>
 				<view class="btn btn-green" @click="handleAction" :class="{ 'btn-gray': !hasStock && currentProduct.hasArrivalNotice === 1 }">
@@ -118,12 +118,17 @@ export default {
 			return this.formatPrice(this.selectedOption.price);
 		},
 		displayMinPrice() {
-			return this.formatPrice(this.selectedOption.balanceMoney);
+			return this.formatPrice(this.selectedOption.price - this.currentProduct.maxReducePrice || 0);
 		},
 		displayTotalPrice() {
 			const total = Number(this.selectedOption.price || 0) * this.quantity;
 			return this.formatPrice(total);
 		},
+		displayReducePrice() {
+			const currentPrice = Number(this.selectedOption.price || 0);
+			const maxReduce = Number(this.currentProduct.maxReducePrice || 0);
+			return this.formatPrice(currentPrice - maxReduce);
+		},
 		hasStock() {
 			const stock = this.selectedOption.stockNum;
 			if (stock === 0) return false;

+ 5 - 5
pages-sell/components/service-popup/index.vue

@@ -39,11 +39,11 @@ export default {
                     title: '24 小时发货',
                     desc: '订单支付成功后 24 小时内发货,若未在 24 小时内发货可申请补差价到余额,平台将在 24 小时内处理申请。'
                 },
-                {
-                    icon: '/pages-sell/static/service/icon-4.png',
-                    title: '退货无忧',
-                    desc: '订单发货后 15 天内,申请退货,将自动减免 / 返还首重运费。'
-                },
+                // {
+                //     icon: '/pages-sell/static/service/icon-4.png',
+                //     title: '退货无忧',
+                //     desc: '订单发货后 15 天内,申请退货,将自动减免 / 返还首重运费。'
+                // },
                 {
                     icon: '/pages-sell/static/service/icon-5.png',
                     title: '未发货秒退',

+ 3 - 8
pages-sell/pages/search.vue

@@ -36,7 +36,7 @@
                 </view>
                 <view class="tags-list">
                     <view class="tag-item history-tag" v-for="(item, index) in historyList" :key="index"
-                        @click="fillKeyword(item)">
+                        @click="doSearch(item)">
                         {{ item }}
                     </view>
                 </view>
@@ -55,7 +55,7 @@
                     </image>
                 </view>
                 <view class="tags-list" v-if="hotVisible">
-                    <view class="tag-item" v-for="(item, index) in hotList" :key="index" @click="fillKeyword(item.name)"
+                    <view class="tag-item" v-for="(item, index) in hotList" :key="index" @click="doSearch(item.name)"
                         :class="item.className">
                         <image v-if="item.tag === 'NEW'" src="/pages-sell/static/search/icon-new.png" class="tag-icon-new"
                             mode="heightFix"></image>
@@ -159,12 +159,7 @@
                 // 去除可能包含的 HTML 标签 (如后端返回的 <em>)
                 const cleanKey = key.replace(/<[^>]+>/g, '');
                 console.log('Search:', cleanKey);
-                this.keyword = cleanKey;
-                // Navigate to result page or show results
-                uni.showToast({
-                    title: '搜索: ' + cleanKey,
-                    icon: 'none'
-                });
+                // Navigate to result page
                 uni.navigateTo({
                     url: '/pages-sell/pages/search-result?keyword=' + cleanKey
                 });