feat: refine client status and review views
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
Tag,
|
||||
type DateRangeValue,
|
||||
} from '@/components/ui';
|
||||
import { recentBeijingDateRange } from '@/utils/dateTime';
|
||||
|
||||
const statusLabelMap: Record<string, string> = {
|
||||
delivered: '成功',
|
||||
@@ -21,6 +22,14 @@ const statusLabelMap: Record<string, string> = {
|
||||
failed: '失败',
|
||||
rejected: '失败',
|
||||
timeout: '超时',
|
||||
pending_review: '待审核',
|
||||
scheduled: '等待定时发送',
|
||||
submit_queued: '等待提交',
|
||||
submit_failed: '提交失败',
|
||||
processing: '处理中',
|
||||
sending: '发送中',
|
||||
canceled: '已取消',
|
||||
cancelled: '已取消',
|
||||
};
|
||||
|
||||
const statusToneMap: Record<string, 'success' | 'info' | 'danger' | 'neutral'> = {
|
||||
@@ -41,16 +50,25 @@ function getDate(value?: string | null) {
|
||||
function getReceipt(record: SmsMessageRecord) {
|
||||
const latest = record.receiptRecords?.[0] as { rawStatus?: string; receiptStatus?: string; deliveredAt?: string } | undefined;
|
||||
return {
|
||||
status: latest?.rawStatus ?? latest?.receiptStatus ?? record.receiptStatus ?? '-',
|
||||
status: receiptStatusLabel(latest?.rawStatus ?? latest?.receiptStatus ?? record.receiptStatus),
|
||||
time: latest?.deliveredAt ?? record.deliveredAt,
|
||||
};
|
||||
}
|
||||
|
||||
function receiptStatusLabel(status?: string | null) {
|
||||
if (!status) return '-';
|
||||
const normalized = status.trim().toUpperCase();
|
||||
return {
|
||||
DELIVRD: '送达成功', ACCEPTD: '已受理', UNDELIV: '未送达', REJECTD: '已拒绝',
|
||||
EXPIRED: '已过期', DELETED: '已删除', UNKNOWN: '状态未知',
|
||||
}[normalized] ?? statusLabelMap[status.toLowerCase()] ?? '状态未知';
|
||||
}
|
||||
|
||||
export function ClientSendDetailPage() {
|
||||
const [records, setRecords] = useState<SmsMessageRecord[]>([]);
|
||||
const [applicationId, setApplicationId] = useState('all');
|
||||
const [status, setStatus] = useState('all');
|
||||
const [dateRange, setDateRange] = useState<DateRangeValue>({});
|
||||
const [dateRange, setDateRange] = useState<DateRangeValue>(() => recentBeijingDateRange(7));
|
||||
const [contentKeyword, setContentKeyword] = useState('');
|
||||
const [phoneKeyword, setPhoneKeyword] = useState('');
|
||||
const [page, setPage] = useState(1);
|
||||
@@ -194,7 +212,7 @@ export function ClientSendDetailPage() {
|
||||
<td><strong>{record.phoneNumber}</strong></td>
|
||||
<td>{record.carrier ? <CarrierTag carrier={record.carrier} /> : '-'}</td>
|
||||
<td><span className="send-detail-region">{region}</span></td>
|
||||
<td style={{ textAlign: 'center' }}><Tag tone={statusToneMap[record.status] ?? 'info'}>{statusLabelMap[record.status] ?? record.status}</Tag></td>
|
||||
<td style={{ textAlign: 'center' }}><Tag tone={statusToneMap[record.status] ?? 'info'}>{statusLabelMap[record.status] ?? '状态未知'}</Tag></td>
|
||||
<td style={{ textAlign: 'center' }}><strong className="send-detail-receipt-code">{receipt.status}</strong></td>
|
||||
<td>
|
||||
{receipt.time ? (
|
||||
|
||||
Reference in New Issue
Block a user