Files
ai_dianshang/miniprogram/pages/refund/refund-list/index.js
2025-11-17 14:11:46 +08:00

328 lines
8.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// pages/refund/refund-list/index.js
import Toast from 'tdesign-miniprogram/toast/index';
import { config } from '../../../config/index';
Page({
data: {
refundList: [],
currentStatus: '', // 当前筛选状态
loading: false,
page: 1,
pageSize: 10,
hasMore: true
},
onLoad(options) {
console.log('[退款记录] 页面加载', options);
this.loadRefundList();
},
onShow() {
// 页面显示时刷新数据
this.refreshData();
},
onPullDownRefresh() {
this.refreshData();
},
onReachBottom() {
if (this.data.hasMore && !this.data.loading) {
this.loadMoreData();
}
},
// 刷新数据
refreshData() {
this.setData({
page: 1,
hasMore: true,
refundList: []
});
this.loadRefundList();
},
// 加载更多数据
loadMoreData() {
this.setData({
page: this.data.page + 1
});
this.loadRefundList(false);
},
// 加载退款记录列表
loadRefundList(showLoading = true) {
if (showLoading) {
this.setData({ loading: true });
}
let token = wx.getStorageSync('token');
if (!token) {
// 自动设置测试token
const testToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjozNywiZXhwIjoxNzYxNjE5NjAyLCJpYXQiOjE3NjE1MzMyMDJ9.xyZLQbwhYyUDiF9_UOCX39nVwYOHvvd6d4TqwFnT_yg';
wx.setStorageSync('token', testToken);
token = testToken;
console.log('[退款记录] 自动设置测试token');
}
const params = {
page: this.data.page,
page_size: this.data.pageSize
};
if (this.data.currentStatus) {
params.status = this.data.currentStatus;
}
const queryString = Object.keys(params)
.map(key => `${key}=${encodeURIComponent(params[key])}`)
.join('&');
console.log('[退款记录] 请求参数', params);
wx.request({
url: `${config.apiBase}/refunds/user?${queryString}`,
method: 'GET',
header: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
success: (res) => {
console.log('[退款记录] API响应', res);
if (res.statusCode === 200 && res.data.code === 200) {
const newRefunds = res.data.data.list || [];
console.log('API返回的原始数据:', newRefunds);
const processedRefunds = newRefunds.map(item => this.processRefundItem(item));
console.log('处理后的数据:', processedRefunds);
this.setData({
refundList: this.data.page === 1 ? processedRefunds : [...this.data.refundList, ...processedRefunds],
hasMore: newRefunds.length === this.data.pageSize,
loading: false
});
if (showLoading) {
wx.stopPullDownRefresh();
}
} else {
console.error('[退款记录] API错误', res.data);
Toast({
context: this,
selector: '#t-toast',
message: res.data.message || '获取退款记录失败',
theme: 'error',
});
this.setData({ loading: false });
}
},
fail: (error) => {
console.error('[退款记录] 网络错误', error);
Toast({
context: this,
selector: '#t-toast',
message: '网络错误',
theme: 'error',
});
this.setData({ loading: false });
}
});
},
// 处理退款记录数据
processRefundItem(item) {
// 状态文本映射 - 后端返回的是数字状态
const statusMap = {
1: '待审核',
2: '审核通过',
3: '审核拒绝',
4: '退款中',
5: '退款成功',
6: '退款失败'
};
// 状态字符串映射用于CSS类名
const statusClassMap = {
1: 'pending',
2: 'approved',
3: 'rejected',
4: 'processing',
5: 'completed',
6: 'failed'
};
// 格式化金额 - 添加安全检查,将分转换为元
const refundAmount = ((item.refund_amount || 0) / 100).toFixed(2);
// 格式化时间
const createdAt = this.formatTime(item.created_at);
// 生成操作按钮
const actions = this.generateActions(statusClassMap[item.status]);
return {
id: item.id,
orderNo: item.order ? item.order.order_no : '',
refundAmount: refundAmount,
reason: item.refund_reason,
status: statusClassMap[item.status] || 'pending',
statusText: statusMap[item.status] || '未知状态',
createdAt: createdAt,
actions: actions
};
},
// 生成操作按钮
generateActions(status) {
const actions = [];
switch (status) {
case 'pending':
actions.push({ type: 'cancel', text: '取消申请' });
break;
case 'approved':
actions.push({ type: 'view', text: '查看详情' });
break;
case 'rejected':
actions.push({ type: 'view', text: '查看详情' });
actions.push({ type: 'reapply', text: '重新申请' });
break;
case 'completed':
actions.push({ type: 'view', text: '查看详情' });
break;
}
return actions;
},
// 格式化时间
formatTime(timeStr) {
if (!timeStr) return '';
const date = new Date(timeStr);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hour = String(date.getHours()).padStart(2, '0');
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
},
// 状态筛选
onStatusFilter(e) {
const status = e.currentTarget.dataset.status;
console.log('[退款记录] 状态筛选', status);
this.setData({
currentStatus: status,
page: 1,
hasMore: true,
refundList: []
});
this.loadRefundList();
},
// 退款记录项点击
onRefundItemTap(e) {
const refund = e.currentTarget.dataset.refund;
console.log('[退款记录] 点击退款记录', refund);
// 跳转到退款详情页面
wx.navigateTo({
url: `/pages/refund/refund-detail/index?id=${refund.id}`
});
},
// 操作按钮点击
onActionTap(e) {
e.stopPropagation(); // 阻止事件冒泡
const { refundId, action } = e.currentTarget.dataset;
console.log('[退款记录] 操作按钮点击', { refundId, action });
switch (action) {
case 'cancel':
this.cancelRefund(refundId);
break;
case 'view':
wx.navigateTo({
url: `/pages/refund/refund-detail/index?id=${refundId}`
});
break;
case 'reapply':
this.reapplyRefund(refundId);
break;
}
},
// 取消退款申请
cancelRefund(refundId) {
wx.showModal({
title: '取消申请',
content: '确定要取消这个退款申请吗?',
success: (res) => {
if (res.confirm) {
this.performCancelRefund(refundId);
}
}
});
},
// 执行取消退款
performCancelRefund(refundId) {
const token = wx.getStorageSync('token');
wx.showLoading({ title: '处理中...' });
wx.request({
url: `${config.apiBase}/refunds/${refundId}/cancel`,
method: 'PUT',
header: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
success: (res) => {
wx.hideLoading();
if (res.statusCode === 200 && res.data.code === 200) {
Toast({
context: this,
selector: '#t-toast',
message: '取消成功',
theme: 'success',
});
// 刷新列表
this.refreshData();
} else {
Toast({
context: this,
selector: '#t-toast',
message: res.data.message || '取消失败',
theme: 'error',
});
}
},
fail: (error) => {
wx.hideLoading();
console.error('[退款记录] 取消退款失败', error);
Toast({
context: this,
selector: '#t-toast',
message: '网络错误',
theme: 'error',
});
}
});
},
// 重新申请退款
reapplyRefund(refundId) {
// 获取原退款记录信息,跳转到退款申请页面
wx.navigateTo({
url: `/pages/refund/refund-apply/index?reapply=1&refundId=${refundId}`
});
}
});