fix: harden channel retry attribution and operations UI

This commit is contained in:
hectorzhao
2026-07-26 21:33:58 +08:00
parent 059b38e8fe
commit 0857de09d8
27 changed files with 888 additions and 117 deletions
+8 -8
View File
@@ -151,13 +151,13 @@ export function ClientBatchTasksPage() {
if (!source) return;
clientApi.cancelBatchTask(source.backendId)
.then(loadTasks)
.catch((reason: Error) => setError(reason.message || '任务终止失败'));
.catch((reason: Error) => setError(reason.message || '发送批次终止失败'));
}
const columns: Array<TableColumn<BatchTask>> = [
{
key: 'id',
title: '任务编号',
title: '发送批次号',
width: '140px',
render: (record) => (
<div className="batch-task-id">
@@ -236,12 +236,12 @@ export function ClientBatchTasksPage() {
<QueryPanel
title="查询条件"
summary={<> <strong>{filteredTasks.length}</strong> </>}
summary={<> <strong>{filteredTasks.length}</strong> </>}
>
<Input
label="任务编号"
label="发送批次号"
onChange={(event) => setKeyword(event.target.value)}
placeholder="输入任务编号搜索"
placeholder="输入发送批次号搜索"
prefix={<Search size={16} />}
value={keyword}
/>
@@ -310,14 +310,14 @@ export function ClientBatchTasksPage() {
onClose={() => setSelectedTask(null)}
open={Boolean(selectedTask)}
size="xl"
title={<DetailTitle title="任务详情" subtitle={selectedTask?.id} />}
title={<DetailTitle title="发送批次详情" subtitle={selectedTask?.id} />}
>
{selectedTask ? (
<div className="task-detail">
<DetailSection title="基本信息" extra={<Tag tone={statusToneMap[selectedTask.status]}>{statusLabelMap[selectedTask.status]}</Tag>}>
<DetailInfoGrid
items={[
{ label: '任务编号', value: selectedTask.id },
{ label: '发送批次号', value: selectedTask.id },
{ label: '应用名称', value: selectedTask.applicationName },
{ label: '提交时间', value: selectedTask.submittedAt },
{
@@ -331,7 +331,7 @@ export function ClientBatchTasksPage() {
},
{ label: '模板字数', value: `${selectedTask.wordCount}`, tone: 'primary' },
{ label: '单个号码计费条数', value: `${Math.max(1, Math.ceil(selectedTask.wordCount / 70))}`, tone: 'primary' },
{ label: '任务总号码数', value: `${selectedTask.totalCount.toLocaleString('zh-CN')}`, tone: 'primary' },
{ label: '批次总号码数', value: `${selectedTask.totalCount.toLocaleString('zh-CN')}`, tone: 'primary' },
{ label: '总计费条数', value: `${getBillingCount(selectedTask).toLocaleString('zh-CN')}`, tone: 'primary' },
{ label: '模板内容', value: selectedTask.templateContent, full: true },
]}
+1 -1
View File
@@ -26,7 +26,7 @@ type RecentTaskRow = {
};
const columns: Array<TableColumn<RecentTaskRow>> = [
{ key: 'taskNo', title: '批次号', render: (record) => record.taskNo },
{ key: 'taskNo', title: '发送批次号', render: (record) => record.taskNo },
{ key: 'scene', title: '发送场景', render: (record) => record.scene },
{ key: 'count', title: '发送量', render: (record) => `${record.count.toLocaleString('zh-CN')}` },
{ key: 'createdAt', title: '创建时间', render: (record) => record.createdAt },
+1 -1
View File
@@ -177,7 +177,7 @@ export function ClientSendPage() {
<Send size={22} />
</span>
<h1></h1>
{submittedRecord ? <Tag tone="success"> {submittedRecord.taskNo}</Tag> : null}
{submittedRecord ? <Tag tone="success"> {submittedRecord.taskNo}</Tag> : null}
</div>
{error ? <p className="form-error">{error}</p> : null}