1080 lines
48 KiB
HTML
1080 lines
48 KiB
HTML
<!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>
|