dm-design/商家端web/退款审核/退款审核流程演示.html

1080 lines
48 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>退款审核管理系统 - 业务流程演示</title>
<!-- Element UI CSS -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif;
background: #f0f2f5;
padding: 20px;
}
#app {
max-width: 1400px;
margin: 0 auto;
}
.page-header {
background: #fff;
padding: 20px;
margin-bottom: 20px;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.page-title {
font-size: 24px;
font-weight: 600;
color: #303133;
margin-bottom: 10px;
}
.page-description {
color: #909399;
font-size: 14px;
}
.stat-cards {
display: flex;
gap: 20px;
margin-bottom: 20px;
flex-wrap: wrap;
}
.stat-card {
flex: 1;
min-width: 200px;
background: #fff;
padding: 20px;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
display: flex;
align-items: center;
}
.stat-icon {
font-size: 40px;
margin-right: 15px;
color: #409EFF;
}
.stat-info .stat-label {
font-size: 14px;
color: #909399;
margin-bottom: 5px;
}
.stat-info .stat-value {
font-size: 24px;
font-weight: 600;
color: #303133;
}
.main-content {
background: #fff;
padding: 20px;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.search-form {
margin-bottom: 20px;
}
.order-detail-section {
margin-bottom: 30px;
}
.section-title {
font-size: 16px;
font-weight: 600;
color: #303133;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 2px solid #409EFF;
}
.detail-row {
display: flex;
margin-bottom: 15px;
}
.detail-item {
flex: 1;
display: flex;
align-items: center;
}
.detail-label {
min-width: 120px;
color: #606266;
font-weight: 500;
}
.detail-value {
color: #303133;
}
.refund-info {
background: #fff3e0;
padding: 15px;
border-radius: 4px;
border-left: 4px solid #ff9800;
margin-bottom: 20px;
}
.refund-reason {
margin-top: 10px;
padding: 10px;
background: #fff;
border-radius: 4px;
}
.product-image {
width: 60px;
height: 60px;
object-fit: cover;
border-radius: 4px;
cursor: pointer;
}
.status-badge {
display: inline-block;
padding: 4px 10px;
border-radius: 3px;
font-size: 12px;
}
.status-pending {
background: #fff3e0;
color: #ff9800;
}
.status-processing {
background: #e3f2fd;
color: #2196f3;
}
.status-success {
background: #e8f5e9;
color: #4caf50;
}
.status-rejected {
background: #ffebee;
color: #f44336;
}
.audit-actions {
margin-top: 20px;
padding: 20px;
background: #f5f7fa;
border-radius: 4px;
text-align: center;
}
.reject-reason-input {
margin-top: 15px;
}
.el-table .warning-row {
background: #fff3e0;
}
.image-preview {
max-width: 100%;
max-height: 500px;
}
</style>
</head>
<body>
<div id="app">
<!-- 页面头部 -->
<div class="page-header">
<div class="page-title">退款审核管理系统</div>
<div class="page-description">管理和审核用户的退款申请,确保交易安全和客户满意度</div>
</div>
<!-- 统计卡片 -->
<div class="stat-cards">
<div class="stat-card">
<i class="el-icon-s-order stat-icon"></i>
<div class="stat-info">
<div class="stat-label">待审核退款</div>
<div class="stat-value">{{ statistics.pendingCount }}</div>
</div>
</div>
<div class="stat-card">
<i class="el-icon-s-finance stat-icon" style="color: #ff9800;"></i>
<div class="stat-info">
<div class="stat-label">退款金额(元)</div>
<div class="stat-value">{{ statistics.totalRefundMoney }}</div>
</div>
</div>
<div class="stat-card">
<i class="el-icon-success stat-icon" style="color: #4caf50;"></i>
<div class="stat-info">
<div class="stat-label">今日已审核</div>
<div class="stat-value">{{ statistics.todayAuditCount }}</div>
</div>
</div>
<div class="stat-card">
<i class="el-icon-time stat-icon" style="color: #f44336;"></i>
<div class="stat-info">
<div class="stat-label">平均处理时长</div>
<div class="stat-value">{{ statistics.avgProcessTime }}h</div>
</div>
</div>
</div>
<!-- 主要内容区 -->
<div class="main-content">
<!-- 搜索表单 -->
<el-form :inline="true" :model="searchForm" class="search-form">
<el-form-item label="订单编号">
<el-input v-model="searchForm.orderNo" placeholder="请输入订单编号" clearable></el-input>
</el-form-item>
<el-form-item label="收货人姓名">
<el-input v-model="searchForm.receiverName" placeholder="请输入收货人姓名" clearable></el-input>
</el-form-item>
<el-form-item label="申请时间">
<el-date-picker
v-model="searchForm.dateRange"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch" icon="el-icon-search">查询</el-button>
<el-button @click="handleReset" icon="el-icon-refresh">重置</el-button>
</el-form-item>
</el-form>
<!-- 状态标签页 -->
<el-tabs v-model="activeTab" @tab-click="handleTabClick">
<el-tab-pane label="全部订单" name="all"></el-tab-pane>
<el-tab-pane name="pending">
<span slot="label">
<el-badge :value="statistics.pendingCount" class="item">
用户申请退款中
</el-badge>
</span>
</el-tab-pane>
<el-tab-pane label="退款中" name="processing"></el-tab-pane>
<el-tab-pane label="已完成退款" name="completed"></el-tab-pane>
<el-tab-pane label="已拒绝" name="rejected"></el-tab-pane>
</el-tabs>
<!-- 订单列表 -->
<el-table
:data="filteredOrders"
border
style="width: 100%"
:row-class-name="tableRowClassName"
v-loading="loading">
<el-table-column type="expand">
<template slot-scope="props">
<div style="padding: 20px;">
<h4 style="margin-bottom: 15px;">商品明细</h4>
<el-table :data="props.row.productOrders" border>
<el-table-column label="商品图片" width="100">
<template slot-scope="scope">
<img :src="scope.row.productImg" class="product-image" @click="previewImage(scope.row.productImg)">
</template>
</el-table-column>
<el-table-column prop="productName" label="商品名称"></el-table-column>
<el-table-column prop="productSpecName" label="规格"></el-table-column>
<el-table-column prop="productCount" label="数量" width="80"></el-table-column>
<el-table-column prop="originPrice" label="原价" width="100"></el-table-column>
<el-table-column prop="finalPrice" label="终价" width="100"></el-table-column>
<el-table-column prop="productOrderMoney" label="订单金额" width="120"></el-table-column>
</el-table>
</div>
</template>
</el-table-column>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="orderNo" label="总订单号" width="180"></el-table-column>
<el-table-column prop="unitOrderNo" label="结算单位订单号" width="180"></el-table-column>
<el-table-column label="退款状态" width="140">
<template slot-scope="scope">
<span :class="'status-badge status-' + getStatusClass(scope.row.refundStatus)">
{{ getRefundStatus(scope.row.refundStatus) }}
</span>
</template>
</el-table-column>
<el-table-column prop="totalPayMoney" label="顾客支付" width="110"></el-table-column>
<el-table-column prop="receiverName" label="收货人" width="100"></el-table-column>
<el-table-column prop="receiverPhone" label="联系电话" width="120"></el-table-column>
<el-table-column prop="applyRefundTime" label="申请退款时间" width="160"></el-table-column>
<el-table-column prop="refundReason" label="退款原因" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="180" fixed="right">
<template slot-scope="scope">
<el-button size="mini" @click="viewDetail(scope.row)" type="primary">查看详情</el-button>
<el-button
v-if="scope.row.refundStatus === -2"
size="mini"
type="success"
@click="showAuditDialog(scope.row)">
审核
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div style="margin-top: 20px; text-align: right;">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 50]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalOrders">
</el-pagination>
</div>
</div>
<!-- 订单详情弹窗 -->
<el-dialog
:title="'订单详情 - ' + (currentOrder ? currentOrder.orderNo : '')"
:visible.sync="detailDialogVisible"
width="80%"
:close-on-click-modal="false">
<div v-if="currentOrder" class="order-detail">
<!-- 退款信息高亮显示 -->
<div class="refund-info" v-if="currentOrder.refundStatus === -2">
<div style="display: flex; align-items: center; margin-bottom: 10px;">
<i class="el-icon-warning" style="font-size: 24px; color: #ff9800; margin-right: 10px;"></i>
<span style="font-size: 16px; font-weight: 600; color: #ff9800;">用户申请退款中,请及时处理</span>
</div>
<div style="display: flex; gap: 30px;">
<div><strong>申请时间:</strong>{{ currentOrder.applyRefundTime }}</div>
<div><strong>申请金额:</strong><span style="color: #f44336; font-size: 18px; font-weight: 600;">¥{{ currentOrder.totalPayMoney }}</span></div>
</div>
<div class="refund-reason">
<strong>退款原因:</strong>{{ currentOrder.refundReason }}
</div>
</div>
<!-- 订单基本信息 -->
<div class="order-detail-section">
<div class="section-title">订单基本信息</div>
<div class="detail-row">
<div class="detail-item">
<span class="detail-label">总订单号:</span>
<span class="detail-value">{{ currentOrder.orderNo }}</span>
</div>
<div class="detail-item">
<span class="detail-label">结算单位订单号:</span>
<span class="detail-value">{{ currentOrder.unitOrderNo }}</span>
</div>
<div class="detail-item">
<span class="detail-label">总商品数量:</span>
<span class="detail-value">{{ currentOrder.productCount }}</span>
</div>
</div>
<div class="detail-row">
<div class="detail-item">
<span class="detail-label">顾客支付:</span>
<span class="detail-value" style="color: #f44336; font-weight: 600;">¥{{ currentOrder.totalPayMoney }}</span>
</div>
<div class="detail-item">
<span class="detail-label">配送费:</span>
<span class="detail-value">¥{{ currentOrder.deliveryMoney }}</span>
</div>
<div class="detail-item">
<span class="detail-label">优惠券减免:</span>
<span class="detail-value">¥{{ currentOrder.couponMoney }}</span>
</div>
</div>
<div class="detail-row">
<div class="detail-item">
<span class="detail-label">包装费:</span>
<span class="detail-value">¥{{ currentOrder.packageMoney }}</span>
</div>
<div class="detail-item">
<span class="detail-label">平台服务费:</span>
<span class="detail-value">¥{{ currentOrder.platformMoney }}</span>
</div>
<div class="detail-item">
<span class="detail-label">预计收入:</span>
<span class="detail-value">¥{{ currentOrder.predictIncome }}</span>
</div>
</div>
</div>
<!-- 收货信息 -->
<div class="order-detail-section">
<div class="section-title">收货信息</div>
<div class="detail-row">
<div class="detail-item">
<span class="detail-label">收货人:</span>
<span class="detail-value">{{ currentOrder.receiverName }}</span>
</div>
<div class="detail-item">
<span class="detail-label">联系电话:</span>
<span class="detail-value">{{ currentOrder.receiverPhone }}</span>
</div>
<div class="detail-item">
<span class="detail-label">距离:</span>
<span class="detail-value">{{ currentOrder.distance }}</span>
</div>
</div>
<div class="detail-row">
<div class="detail-item" style="flex: 3;">
<span class="detail-label">收货地址:</span>
<span class="detail-value">{{ currentOrder.poi }} {{ currentOrder.detail }}</span>
</div>
</div>
</div>
<!-- 时间信息 -->
<div class="order-detail-section">
<div class="section-title">时间信息</div>
<div class="detail-row">
<div class="detail-item">
<span class="detail-label">下单时间:</span>
<span class="detail-value">{{ currentOrder.createTime }}</span>
</div>
<div class="detail-item">
<span class="detail-label">支付时间:</span>
<span class="detail-value">{{ currentOrder.payTime }}</span>
</div>
<div class="detail-item">
<span class="detail-label">预计送达时间:</span>
<span class="detail-value">{{ currentOrder.predictDeliveryTime }}</span>
</div>
</div>
<div class="detail-row">
<div class="detail-item">
<span class="detail-label">完成取货时间:</span>
<span class="detail-value">{{ currentOrder.pickTime }}</span>
</div>
<div class="detail-item">
<span class="detail-label">配送完成时间:</span>
<span class="detail-value">{{ currentOrder.completeDeliveryTime }}</span>
</div>
<div class="detail-item">
<span class="detail-label">订单完成时间:</span>
<span class="detail-value">{{ currentOrder.completeTime }}</span>
</div>
</div>
</div>
<!-- 退款信息 -->
<div class="order-detail-section">
<div class="section-title">退款信息</div>
<div class="detail-row">
<div class="detail-item">
<span class="detail-label">订单退款状态:</span>
<span :class="'status-badge status-' + getStatusClass(currentOrder.refundStatus)">
{{ getRefundStatus(currentOrder.refundStatus) }}
</span>
</div>
<div class="detail-item">
<span class="detail-label">申请退款时间:</span>
<span class="detail-value">{{ currentOrder.applyRefundTime }}</span>
</div>
<div class="detail-item">
<span class="detail-label">备注:</span>
<span class="detail-value">{{ currentOrder.remark }}</span>
</div>
</div>
<div class="detail-row">
<div class="detail-item" style="flex: 3;">
<span class="detail-label">申请退款原因:</span>
<span class="detail-value">{{ currentOrder.refundReason }}</span>
</div>
</div>
</div>
<!-- 订单商品 -->
<div class="order-detail-section">
<div class="section-title">订单商品</div>
<el-table :data="currentOrder.productOrders" border>
<el-table-column label="商品图片" width="100">
<template slot-scope="scope">
<img :src="scope.row.productImg" class="product-image" @click="previewImage(scope.row.productImg)">
</template>
</el-table-column>
<el-table-column prop="shopName" label="店铺名称" width="100"></el-table-column>
<el-table-column prop="productName" label="商品名称"></el-table-column>
<el-table-column prop="productSpecName" label="规格"></el-table-column>
<el-table-column prop="productCount" label="数量" width="80"></el-table-column>
<el-table-column prop="originPrice" label="商品原价" width="100"></el-table-column>
<el-table-column prop="finalPrice" label="商品终价" width="100"></el-table-column>
<el-table-column prop="productOrderMoney" label="商品订单金额" width="120"></el-table-column>
</el-table>
</div>
<!-- 审核操作区域 -->
<div v-if="currentOrder.refundStatus === -2" class="audit-actions">
<el-alert
title="请仔细核对订单信息后进行审核操作"
type="warning"
:closable="false"
style="margin-bottom: 15px;">
</el-alert>
<el-button type="success" size="large" @click="handleApprove" icon="el-icon-check">同意退款</el-button>
<el-button type="danger" size="large" @click="showRejectInput = true" icon="el-icon-close">拒绝退款</el-button>
<div v-if="showRejectInput" class="reject-reason-input">
<el-input
type="textarea"
:rows="3"
placeholder="请输入拒绝原因(必填)"
v-model="rejectReason"
maxlength="200"
show-word-limit>
</el-input>
<div style="margin-top: 10px;">
<el-button type="danger" @click="handleReject">确认拒绝</el-button>
<el-button @click="showRejectInput = false; rejectReason = ''">取消</el-button>
</div>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="detailDialogVisible = false">关闭</el-button>
</span>
</el-dialog>
<!-- 图片预览弹窗 -->
<el-dialog :visible.sync="imagePreviewVisible" width="50%">
<img :src="previewImageUrl" class="image-preview" />
</el-dialog>
</div>
<!-- Vue.js -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<!-- Element UI -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
new Vue({
el: '#app',
data: {
loading: false,
activeTab: 'pending',
currentPage: 1,
pageSize: 10,
detailDialogVisible: false,
imagePreviewVisible: false,
previewImageUrl: '',
currentOrder: null,
showRejectInput: false,
rejectReason: '',
searchForm: {
orderNo: '',
receiverName: '',
dateRange: null
},
statistics: {
pendingCount: 5,
totalRefundMoney: '12,856.00',
todayAuditCount: 8,
avgProcessTime: '2.3'
},
orders: [
{
orderNo: 'ORD20231210001',
unitOrderNo: 'UNIT20231210001',
productCount: 3,
totalPayMoney: '258.00',
deliveryMoney: '8.00',
couponMoney: '20.00',
packageMoney: '2.00',
platformMoney: '5.00',
predictIncome: '223.00',
receiverName: '张三',
receiverPhone: '13800138000',
poi: '北京市朝阳区',
detail: '建国路88号SOHO现代城A座1008室',
distance: '2.5km',
createTime: '2023-12-10 10:30:25',
payTime: '2023-12-10 10:32:15',
predictDeliveryTime: '2023-12-10 12:00:00',
pickTime: '2023-12-10 11:15:30',
completeDeliveryTime: '',
completeTime: '',
refundStatus: -2,
applyRefundTime: '2023-12-10 13:45:20',
refundReason: '商品质量问题,部分商品已变质',
remark: '尽快配送',
productOrders: [
{
shopName: '鲜果店',
productName: '新鲜苹果',
productSpecName: '500g/份',
productCount: 2,
originPrice: '50.00',
finalPrice: '45.00',
productOrderMoney: '90.00',
productImg: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'
},
{
shopName: '鲜果店',
productName: '进口香蕉',
productSpecName: '1kg/份',
productCount: 1,
originPrice: '180.00',
finalPrice: '160.00',
productOrderMoney: '160.00',
productImg: 'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg'
}
]
},
{
orderNo: 'ORD20231210002',
unitOrderNo: 'UNIT20231210002',
productCount: 2,
totalPayMoney: '168.00',
deliveryMoney: '6.00',
couponMoney: '10.00',
packageMoney: '2.00',
platformMoney: '4.00',
predictIncome: '146.00',
receiverName: '李四',
receiverPhone: '13900139000',
poi: '上海市浦东新区',
detail: '张江高科技园区祖冲之路2290号',
distance: '3.2km',
createTime: '2023-12-10 09:15:10',
payTime: '2023-12-10 09:16:30',
predictDeliveryTime: '2023-12-10 11:30:00',
pickTime: '2023-12-10 10:45:20',
completeDeliveryTime: '',
completeTime: '',
refundStatus: -2,
applyRefundTime: '2023-12-10 14:20:15',
refundReason: '送货太慢,不想要了',
remark: '请尽快送达',
productOrders: [
{
shopName: '生鲜超市',
productName: '有机蔬菜礼包',
productSpecName: '精选装',
productCount: 2,
originPrice: '90.00',
finalPrice: '80.00',
productOrderMoney: '160.00',
productImg: 'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg'
}
]
},
{
orderNo: 'ORD20231210003',
unitOrderNo: 'UNIT20231210003',
productCount: 5,
totalPayMoney: '436.00',
deliveryMoney: '10.00',
couponMoney: '30.00',
packageMoney: '3.00',
platformMoney: '8.00',
predictIncome: '385.00',
receiverName: '王五',
receiverPhone: '13700137000',
poi: '广州市天河区',
detail: '天河路208号天河城写字楼2506',
distance: '4.5km',
createTime: '2023-12-10 08:45:30',
payTime: '2023-12-10 08:47:10',
predictDeliveryTime: '2023-12-10 10:30:00',
pickTime: '2023-12-10 09:30:45',
completeDeliveryTime: '',
completeTime: '',
refundStatus: -2,
applyRefundTime: '2023-12-10 15:10:08',
refundReason: '订单重复下单,需要退款',
remark: '办公室收货',
productOrders: [
{
shopName: '进口食品店',
productName: '澳洲牛排',
productSpecName: '200g/片',
productCount: 3,
originPrice: '120.00',
finalPrice: '110.00',
productOrderMoney: '330.00',
productImg: 'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg'
},
{
shopName: '进口食品店',
productName: '新西兰羊排',
productSpecName: '300g/份',
productCount: 2,
originPrice: '65.00',
finalPrice: '58.00',
productOrderMoney: '116.00',
productImg: 'https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg'
}
]
},
{
orderNo: 'ORD20231210004',
unitOrderNo: 'UNIT20231210004',
productCount: 1,
totalPayMoney: '89.00',
deliveryMoney: '5.00',
couponMoney: '5.00',
packageMoney: '1.00',
platformMoney: '2.00',
predictIncome: '76.00',
receiverName: '赵六',
receiverPhone: '13600136000',
poi: '深圳市南山区',
detail: '科技园南区深南大道9998号',
distance: '1.8km',
createTime: '2023-12-10 11:20:15',
payTime: '2023-12-10 11:21:40',
predictDeliveryTime: '2023-12-10 13:00:00',
pickTime: '',
completeDeliveryTime: '',
completeTime: '',
refundStatus: -2,
applyRefundTime: '2023-12-10 15:30:25',
refundReason: '家里有急事,无法收货',
remark: '请按门铃',
productOrders: [
{
shopName: '快餐店',
productName: '商务套餐',
productSpecName: '双人份',
productCount: 1,
originPrice: '95.00',
finalPrice: '85.00',
productOrderMoney: '85.00',
productImg: 'https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg'
}
]
},
{
orderNo: 'ORD20231210005',
unitOrderNo: 'UNIT20231210005',
productCount: 4,
totalPayMoney: '326.00',
deliveryMoney: '8.00',
couponMoney: '15.00',
packageMoney: '2.00',
platformMoney: '6.00',
predictIncome: '295.00',
receiverName: '陈七',
receiverPhone: '13500135000',
poi: '杭州市西湖区',
detail: '文一西路998号海创园科技大厦B座8楼',
distance: '3.8km',
createTime: '2023-12-10 12:10:30',
payTime: '2023-12-10 12:12:15',
predictDeliveryTime: '2023-12-10 14:00:00',
pickTime: '',
completeDeliveryTime: '',
completeTime: '',
refundStatus: -2,
applyRefundTime: '2023-12-10 16:05:40',
refundReason: '下错地址了,需要重新下单',
remark: '联系不上请打电话',
productOrders: [
{
shopName: '奶茶店',
productName: '招牌奶茶',
productSpecName: '大杯',
productCount: 4,
originPrice: '85.00',
finalPrice: '78.00',
productOrderMoney: '312.00',
productImg: 'https://fuss10.elemecdn.com/7/4a/f29c580b85ebbf975e907b728689fjpeg.jpeg'
}
]
},
{
orderNo: 'ORD20231209001',
unitOrderNo: 'UNIT20231209001',
productCount: 2,
totalPayMoney: '188.00',
deliveryMoney: '8.00',
couponMoney: '10.00',
packageMoney: '2.00',
platformMoney: '4.00',
predictIncome: '164.00',
receiverName: '刘八',
receiverPhone: '13400134000',
poi: '成都市武侯区',
detail: '天府大道中段666号希顿国际广场C座',
distance: '2.9km',
createTime: '2023-12-09 14:30:20',
payTime: '2023-12-09 14:32:10',
predictDeliveryTime: '2023-12-09 16:00:00',
pickTime: '2023-12-09 15:10:30',
completeDeliveryTime: '2023-12-09 15:55:40',
completeTime: '',
refundStatus: 1,
applyRefundTime: '2023-12-09 16:20:15',
refundReason: '商品与描述不符',
remark: '',
productOrders: [
{
shopName: '甜品店',
productName: '蛋糕礼盒',
productSpecName: '8寸',
productCount: 2,
originPrice: '100.00',
finalPrice: '90.00',
productOrderMoney: '180.00',
productImg: 'https://fuss10.elemecdn.com/c/5f/d3a9f6ce3e93b114e6e6c5e7e3aa3jpeg.jpeg'
}
]
},
{
orderNo: 'ORD20231208001',
unitOrderNo: 'UNIT20231208001',
productCount: 3,
totalPayMoney: '276.00',
deliveryMoney: '10.00',
couponMoney: '20.00',
packageMoney: '3.00',
platformMoney: '5.00',
predictIncome: '238.00',
receiverName: '周九',
receiverPhone: '13300133000',
poi: '重庆市渝北区',
detail: '金开大道1228号IFC国际金融中心2栋15-3',
distance: '5.2km',
createTime: '2023-12-08 10:15:45',
payTime: '2023-12-08 10:17:20',
predictDeliveryTime: '2023-12-08 12:00:00',
pickTime: '2023-12-08 11:10:30',
completeDeliveryTime: '2023-12-08 11:58:15',
completeTime: '2023-12-08 12:05:30',
refundStatus: 2,
applyRefundTime: '2023-12-08 13:30:10',
refundReason: '收到的商品有破损',
remark: '请轻拿轻放',
productOrders: [
{
shopName: '零食店',
productName: '进口零食大礼包',
productSpecName: '豪华版',
productCount: 3,
originPrice: '98.00',
finalPrice: '88.00',
productOrderMoney: '264.00',
productImg: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg'
}
]
},
{
orderNo: 'ORD20231207001',
unitOrderNo: 'UNIT20231207001',
productCount: 1,
totalPayMoney: '128.00',
deliveryMoney: '6.00',
couponMoney: '0.00',
packageMoney: '2.00',
platformMoney: '3.00',
predictIncome: '117.00',
receiverName: '吴十',
receiverPhone: '13200132000',
poi: '西安市雁塔区',
detail: '高新四路15号壹洋堂艺术区A3栋',
distance: '4.1km',
createTime: '2023-12-07 16:45:20',
payTime: '2023-12-07 16:46:50',
predictDeliveryTime: '2023-12-07 18:30:00',
pickTime: '2023-12-07 17:25:10',
completeDeliveryTime: '2023-12-07 18:20:30',
completeTime: '2023-12-07 18:25:45',
refundStatus: 4,
applyRefundTime: '2023-12-07 19:10:25',
refundReason: '不想要了,要求退款',
remark: '联系我',
productOrders: [
{
shopName: '鲜花店',
productName: '玫瑰花束',
productSpecName: '19朵',
productCount: 1,
originPrice: '138.00',
finalPrice: '128.00',
productOrderMoney: '128.00',
productImg: 'https://fuss10.elemecdn.com/b/a5/8f2a5fb6b12afe3e45e9c5e1c58e1jpeg.jpeg'
}
]
}
]
},
computed: {
filteredOrders() {
let filtered = this.orders;
// 根据标签页筛选
if (this.activeTab !== 'all') {
const statusMap = {
'pending': -2,
'processing': 1,
'completed': 2,
'rejected': 4
};
filtered = filtered.filter(order => order.refundStatus === statusMap[this.activeTab]);
}
// 根据搜索条件筛选
if (this.searchForm.orderNo) {
filtered = filtered.filter(order =>
order.orderNo.includes(this.searchForm.orderNo)
);
}
if (this.searchForm.receiverName) {
filtered = filtered.filter(order =>
order.receiverName.includes(this.searchForm.receiverName)
);
}
return filtered;
},
totalOrders() {
return this.filteredOrders.length;
}
},
methods: {
getRefundStatus(val) {
const statusMap = {
0: '正常',
1: '退款中',
2: '完全退款',
3: '部分退款',
4: '拒绝用户退款',
'-1': '退款失败',
'-2': '用户申请退款中'
};
return statusMap[val] || '未知状态';
},
getStatusClass(val) {
const classMap = {
0: 'success',
1: 'processing',
2: 'success',
3: 'success',
4: 'rejected',
'-1': 'rejected',
'-2': 'pending'
};
return classMap[val] || '';
},
tableRowClassName({row}) {
if (row.refundStatus === -2) {
return 'warning-row';
}
return '';
},
handleTabClick(tab) {
this.currentPage = 1;
},
handleSearch() {
this.loading = true;
setTimeout(() => {
this.loading = false;
this.$message.success('查询完成');
}, 500);
},
handleReset() {
this.searchForm = {
orderNo: '',
receiverName: '',
dateRange: null
};
this.handleSearch();
},
viewDetail(order) {
this.currentOrder = order;
this.detailDialogVisible = true;
this.showRejectInput = false;
this.rejectReason = '';
},
showAuditDialog(order) {
this.viewDetail(order);
},
handleApprove() {
this.$confirm('确认同意该退款申请吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.currentOrder.refundStatus = 1;
this.detailDialogVisible = false;
this.$message({
type: 'success',
message: '退款申请已同意,系统将自动处理退款!'
});
// 更新统计数据
this.statistics.pendingCount--;
this.statistics.todayAuditCount++;
}).catch(() => {
this.$message({
type: 'info',
message: '已取消操作'
});
});
},
handleReject() {
if (!this.rejectReason.trim()) {
this.$message.error('请输入拒绝原因');
return;
}
this.$confirm('确认拒绝该退款申请吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.currentOrder.refundStatus = 4;
this.currentOrder.rejectReason = this.rejectReason;
this.detailDialogVisible = false;
this.$message({
type: 'success',
message: '已拒绝该退款申请!'
});
// 更新统计数据
this.statistics.pendingCount--;
this.statistics.todayAuditCount++;
}).catch(() => {
this.$message({
type: 'info',
message: '已取消操作'
});
});
},
previewImage(url) {
this.previewImageUrl = url;
this.imagePreviewVisible = true;
},
handleSizeChange(val) {
this.pageSize = val;
},
handleCurrentChange(val) {
this.currentPage = val;
}
},
mounted() {
this.$message({
message: '欢迎使用退款审核管理系统',
type: 'success'
});
}
});
</script>
</body>
</html>