fix: 订单详情数据优化
This commit is contained in:
@@ -99,14 +99,8 @@ export interface ApiResult<T> {
|
|||||||
|
|
||||||
/** 退款记录 */
|
/** 退款记录 */
|
||||||
export interface InnerRefundInfo {
|
export interface InnerRefundInfo {
|
||||||
/** 已退金额;0.00格式 */
|
|
||||||
refundedAmount: string;
|
|
||||||
/** 总退款次数(接口实际返回 string) */
|
|
||||||
totalRefundCount: string;
|
|
||||||
/** 退款金额;0.00格式 */
|
/** 退款金额;0.00格式 */
|
||||||
refundAmount: string;
|
refundAmount: string;
|
||||||
/** 是否全部退款;0=否,1=是(接口实际返回 string) */
|
|
||||||
isFullRefund: string;
|
|
||||||
/** 退款方式 */
|
/** 退款方式 */
|
||||||
refundMethod: string;
|
refundMethod: string;
|
||||||
/** 退款申请时间 */
|
/** 退款申请时间 */
|
||||||
@@ -115,6 +109,10 @@ export interface InnerRefundInfo {
|
|||||||
refundOutTradeNo: string;
|
refundOutTradeNo: string;
|
||||||
/** 退款完成时间 */
|
/** 退款完成时间 */
|
||||||
refundTime: string;
|
refundTime: string;
|
||||||
|
/** 退款状态;1=退款中,2=退款成功,3=退款失败 */
|
||||||
|
refundStatus: string;
|
||||||
|
/** 退款选手名称合集文字 */
|
||||||
|
refundSignupNames: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 订单详情 */
|
/** 订单详情 */
|
||||||
|
|||||||
@@ -79,11 +79,6 @@
|
|||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tableWrap {
|
|
||||||
max-height: 200px;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginationRow {
|
.paginationRow {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
@@ -160,12 +155,6 @@
|
|||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.partialMark {
|
|
||||||
margin-left: 4px;
|
|
||||||
color: #fa8c16;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.refundEmpty {
|
.refundEmpty {
|
||||||
padding: 32px 0;
|
padding: 32px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -176,10 +165,8 @@
|
|||||||
border: 1px dashed #e0e0e0;
|
border: 1px dashed #e0e0e0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.refundPagination {
|
.refundPlayers {
|
||||||
display: flex;
|
margin-left: 0;
|
||||||
justify-content: flex-end;
|
|
||||||
margin-top: 12px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.modalFooter {
|
.modalFooter {
|
||||||
|
|||||||
@@ -44,7 +44,13 @@ const PLAYER_COLUMNS = [
|
|||||||
customRender: ({ text }: { text: string }) => formatGender(text),
|
customRender: ({ text }: { text: string }) => formatGender(text),
|
||||||
},
|
},
|
||||||
{ title: '手机号', dataIndex: 'phone', key: 'phone', width: 130 },
|
{ title: '手机号', dataIndex: 'phone', key: 'phone', width: 130 },
|
||||||
{ title: '证件号', dataIndex: 'idCard', key: 'idCard', width: 180 },
|
{
|
||||||
|
title: '证件号',
|
||||||
|
dataIndex: 'idCard',
|
||||||
|
key: 'idCard',
|
||||||
|
width: 180,
|
||||||
|
customRender: ({ text }: { text: string }) => text || '--',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: '证件图片',
|
title: '证件图片',
|
||||||
key: 'idCardImg',
|
key: 'idCardImg',
|
||||||
@@ -108,8 +114,9 @@ const PLAYER_COLUMNS = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const REFUND_STATUS_MAP: Record<string, { label: string; tone: StatusTagTone }> = {
|
const REFUND_STATUS_MAP: Record<string, { label: string; tone: StatusTagTone }> = {
|
||||||
success: { label: '退款成功', tone: 'success' },
|
'1': { label: '退款中', tone: 'orange' },
|
||||||
failed: { label: '退款失败', tone: 'danger' },
|
'2': { label: '退款成功', tone: 'success' },
|
||||||
|
'3': { label: '退款失败', tone: 'danger' },
|
||||||
};
|
};
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@@ -129,8 +136,6 @@ export default defineComponent({
|
|||||||
const [playersLoading, setPlayersLoading] = useState(true);
|
const [playersLoading, setPlayersLoading] = useState(true);
|
||||||
const [playerPage, setPlayerPage] = useState(1);
|
const [playerPage, setPlayerPage] = useState(1);
|
||||||
const [playerTotal, setPlayerTotal] = useState(0);
|
const [playerTotal, setPlayerTotal] = useState(0);
|
||||||
const [refundPage, setRefundPage] = useState(1);
|
|
||||||
const [refundPageSize] = useState(2);
|
|
||||||
const playerPageSize = 5;
|
const playerPageSize = 5;
|
||||||
|
|
||||||
/** 获取选手列表(分页) */
|
/** 获取选手列表(分页) */
|
||||||
@@ -158,25 +163,21 @@ export default defineComponent({
|
|||||||
const hasRefundFailed = computed(() => {
|
const hasRefundFailed = computed(() => {
|
||||||
const records = refundRecords.value;
|
const records = refundRecords.value;
|
||||||
if (!records || !records.length) return false;
|
if (!records || !records.length) return false;
|
||||||
return records.some((r) => {
|
return records.some((r) => r?.refundStatus === '3');
|
||||||
if (!r) return false;
|
|
||||||
const hasRefundAmount = parseFloat(r.refundAmount || '0') > 0;
|
|
||||||
const hasRefundTime = r.refundTime && r.refundTime !== '--';
|
|
||||||
return hasRefundAmount && !hasRefundTime;
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const pagedRefunds = computed(() => {
|
const refundSuccessList = computed(() =>
|
||||||
const start = (refundPage.value - 1) * refundPageSize.value;
|
refundRecords.value.filter((r) => r.refundStatus === '2'),
|
||||||
return refundRecords.value.slice(start, start + refundPageSize.value);
|
);
|
||||||
});
|
|
||||||
|
|
||||||
const totalRefunded = computed(() => {
|
const totalRefunded = computed(() => {
|
||||||
const records = refundRecords.value;
|
const list = refundSuccessList.value;
|
||||||
if (!records.length) return 0;
|
if (!list.length) return 0;
|
||||||
return records.reduce((sum, r) => sum + parseFloat(r.refundAmount || '0'), 0);
|
return list.reduce((sum, r) => sum + parseFloat(r.refundAmount || '0'), 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const refundSuccessCount = computed(() => refundSuccessList.value.length);
|
||||||
|
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
const params = { orderNo: props.orderNo, uniqueId: props.uniqueId };
|
const params = { orderNo: props.orderNo, uniqueId: props.uniqueId };
|
||||||
const [detailRes] = await Promise.all([getOrderDetail(params), fetchPlayers(1)]);
|
const [detailRes] = await Promise.all([getOrderDetail(params), fetchPlayers(1)]);
|
||||||
@@ -194,10 +195,6 @@ export default defineComponent({
|
|||||||
fetchPlayers(page);
|
fetchPlayers(page);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleRefundPageChange = (page: number) => {
|
|
||||||
setRefundPage(page);
|
|
||||||
};
|
|
||||||
|
|
||||||
return () => (
|
return () => (
|
||||||
<Modal
|
<Modal
|
||||||
visible={props.visible}
|
visible={props.visible}
|
||||||
@@ -260,7 +257,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
<div class={styles.section}>
|
<div class={styles.section}>
|
||||||
<div class={styles.sectionTitle}>选手信息</div>
|
<div class={styles.sectionTitle}>选手信息</div>
|
||||||
<div class={styles.tableWrap}>
|
<div>
|
||||||
<Table
|
<Table
|
||||||
columns={PLAYER_COLUMNS}
|
columns={PLAYER_COLUMNS}
|
||||||
dataSource={players.value}
|
dataSource={players.value}
|
||||||
@@ -268,7 +265,7 @@ export default defineComponent({
|
|||||||
size="small"
|
size="small"
|
||||||
bordered
|
bordered
|
||||||
pagination={false}
|
pagination={false}
|
||||||
scroll={{ x: 'max-content' }}
|
scroll={{ x: 'max-content', y: 200 }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class={styles.paginationRow}>
|
<div class={styles.paginationRow}>
|
||||||
@@ -291,28 +288,18 @@ export default defineComponent({
|
|||||||
<>
|
<>
|
||||||
<div class={styles.refundSummary}>
|
<div class={styles.refundSummary}>
|
||||||
<span>已退金额:{totalRefunded.value.toFixed(2)}元</span>
|
<span>已退金额:{totalRefunded.value.toFixed(2)}元</span>
|
||||||
<span>退款次数:{refundRecords.value.length}次</span>
|
<span>退款次数:{refundSuccessCount.value}次</span>
|
||||||
</div>
|
</div>
|
||||||
<div class={styles.refundList}>
|
<div class={styles.refundList}>
|
||||||
{pagedRefunds.value.map((r, idx) => {
|
{refundRecords.value.map((r, idx) => {
|
||||||
const realIdx = (refundPage.value - 1) * refundPageSize.value + idx + 1;
|
const statusInfo = REFUND_STATUS_MAP[r.refundStatus] || {
|
||||||
const isSuccess = parseFloat(r.refundTime || '') > 0 || !!r.refundTime;
|
label: '未知',
|
||||||
const statusInfo = {
|
tone: 'default' as StatusTagTone,
|
||||||
label: isSuccess
|
|
||||||
? '退款成功'
|
|
||||||
: r.isFullRefund === '1'
|
|
||||||
? '退款待处理'
|
|
||||||
: '退款中',
|
|
||||||
tone: (isSuccess
|
|
||||||
? 'success'
|
|
||||||
: r.isFullRefund === '1'
|
|
||||||
? 'warning'
|
|
||||||
: 'orange') as StatusTagTone,
|
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div key={r.refundOutTradeNo || idx} class={styles.refundCard}>
|
<div key={r.refundOutTradeNo || idx} class={styles.refundCard}>
|
||||||
<div class={styles.refundCardHeader}>
|
<div class={styles.refundCardHeader}>
|
||||||
<span class={styles.refundIndex}>第{realIdx}次退款</span>
|
<span class={styles.refundIndex}>第{idx + 1}次退款</span>
|
||||||
<StatusTag label={statusInfo.label} tone={statusInfo.tone} />
|
<StatusTag label={statusInfo.label} tone={statusInfo.tone} />
|
||||||
</div>
|
</div>
|
||||||
<div class={styles.refundCardBody}>
|
<div class={styles.refundCardBody}>
|
||||||
@@ -321,37 +308,23 @@ export default defineComponent({
|
|||||||
退款金额:
|
退款金额:
|
||||||
<span class={styles.refundAmount}>
|
<span class={styles.refundAmount}>
|
||||||
¥{formatMoney(r.refundAmount)}
|
¥{formatMoney(r.refundAmount)}
|
||||||
{r.isFullRefund === '1' && (
|
|
||||||
<span class={styles.partialMark}>(全部退款)</span>
|
|
||||||
)}
|
|
||||||
{r.isFullRefund === '0' && (
|
|
||||||
<span class={styles.partialMark}>(部分退款)</span>
|
|
||||||
)}
|
|
||||||
</span>
|
</span>
|
||||||
|
<span
|
||||||
|
class={styles.refundPlayers}
|
||||||
|
>{`(${r.refundSignupNames})`}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>申请时间:{r.refundApplyTime}</div>
|
<div>申请时间:{r.refundApplyTime}</div>
|
||||||
<div>完款时间:{r.refundTime || '--'}</div>
|
<div>完成时间:{r.refundTime || '--'}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class={styles.refundCol}>
|
<div class={styles.refundCol}>
|
||||||
<div>退款方式:{r.refundMethod}</div>
|
<div>退款方式:{r.refundMethod}</div>
|
||||||
<div>第三方退款单号:{r.refundOutTradeNo || '--'}</div>
|
<div>第三方退款单号:{r.refundOutTradeNo || '--'}</div>
|
||||||
<div>已退金额:¥{formatMoney(r.refundedAmount)}</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
<div class={styles.refundPagination}>
|
|
||||||
<Pagination
|
|
||||||
current={refundPage.value}
|
|
||||||
pageSize={refundPageSize.value}
|
|
||||||
total={refundRecords.value.length}
|
|
||||||
showSizeChanger={false}
|
|
||||||
size="small"
|
|
||||||
onChange={handleRefundPageChange}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<div class={styles.refundEmpty}>暂无退款记录</div>
|
<div class={styles.refundEmpty}>暂无退款记录</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user