彻底重构-4

This commit is contained in:
yml
2026-04-09 15:51:24 +08:00
parent 60054adcc4
commit 4c395103a9
28 changed files with 1917 additions and 404 deletions
@@ -9,7 +9,6 @@ import {
fetchAdminTasks,
markAdminTaskManualReview,
regenerateAdminTaskClaimLink,
releaseAdminTaskCdk,
retryAdminTask,
} from '@/services/admin'
import type { AdminPagination, AdminTaskActionResponse, AdminTaskListItem } from '@/types/admin'
@@ -34,7 +33,7 @@ const pagination = ref<AdminPagination>({
total: 0,
})
type AdminTaskActionKey = 'retry' | 'regenerate_claim_link' | 'release_cdk' | 'manual_review' | 'close'
type AdminTaskActionKey = 'retry' | 'regenerate_claim_link' | 'manual_review' | 'close'
async function loadTasks(page = pagination.value.page) {
loading.value = true
@@ -60,6 +59,21 @@ async function loadTasks(page = pagination.value.page) {
}
}
function formatBindingRoles(item: AdminTaskListItem) {
const roles = item.bindingSummary.roleKeys
if (!Array.isArray(roles) || roles.length === 0) {
return '无绑定角色'
}
return roles.join(' / ')
}
function formatBindingCountSummary(item: AdminTaskListItem) {
const summary = item.bindingSummary
return `共 ${summary.totalBindingCount} 条 · 预占 ${summary.reservedBindingCount} · 已消费 ${summary.consumedBindingCount} · 已释放 ${summary.releasedBindingCount}`
}
function closeActionMenu() {
openedActionTaskId.value = null
}
@@ -139,16 +153,6 @@ function handleActionCommand(command: `${AdminTaskActionKey}:${number}`) {
return
}
if (actionKey === 'release_cdk') {
void runAction(
item.taskId,
() => releaseAdminTaskCdk(item.taskId),
'CDK 已释放',
`确认释放任务 ${item.taskNo} 当前预占的 CDK 吗?`,
)
return
}
if (actionKey === 'manual_review') {
void runAction(
item.taskId,
@@ -173,7 +177,7 @@ function handleActionCommand(command: `${AdminTaskActionKey}:${number}`) {
<header class="panel-header">
<div>
<h1>交付任务</h1>
<p>查看交付状态、角色识别、预占 CDK 和错误信息。</p>
<p>查看交付状态、角色识别、库存凭据分配和错误信息。</p>
</div>
</header>
@@ -212,7 +216,7 @@ function handleActionCommand(command: `${AdminTaskActionKey}:${number}`) {
<tr>
<th>任务信息</th>
<th>任务进度</th>
<th>商品 / CDK</th>
<th>商品 / 凭据</th>
<th>角色绑定</th>
<th>错误</th>
<th>操作</th>
@@ -249,7 +253,15 @@ function handleActionCommand(command: `${AdminTaskActionKey}:${number}`) {
<div class="goods-cell">
<span class="goods-title" :title="item.skuName || item.skuCode">{{ item.skuName || item.skuCode }}</span>
<span class="goods-subline">SKU {{ item.skuCode || '-' }}</span>
<span class="goods-subline" :title="item.reservedCdkCodeMasked || '-'">CDK {{ item.reservedCdkCodeMasked || '-' }}</span>
<span class="goods-subline" :title="item.inventoryDisplayMasked || '-'">
凭据 {{ item.inventoryDisplayMasked || '-' }}
</span>
<span class="goods-subline" :title="formatBindingRoles(item)">
绑定 {{ formatBindingRoles(item) }}
</span>
<span class="goods-subline goods-subline-strong" :title="formatBindingCountSummary(item)">
{{ formatBindingCountSummary(item) }}
</span>
</div>
</td>
<td>
@@ -265,6 +277,7 @@ function handleActionCommand(command: `${AdminTaskActionKey}:${number}`) {
<td>
<div class="action-cell">
<el-button
:disabled="item.executorKey === 'manual_dispatch' || !['retry_pending', 'manual_review', 'waiting_inventory'].includes(item.status)"
:loading="actionLoadingId === item.taskId"
class="primary-action"
plain
@@ -283,12 +296,14 @@ function handleActionCommand(command: `${AdminTaskActionKey}:${number}`) {
<span class="dropdown-icon">{{ openedActionTaskId === item.taskId ? '▴' : '▾' }}</span>
</el-button>
<div v-if="openedActionTaskId === item.taskId" class="more-action-menu">
<button class="menu-action-button" type="button" @click="handleActionCommand(`regenerate_claim_link:${item.taskId}`)">
<button
v-if="item.executorKey !== 'manual_dispatch'"
class="menu-action-button"
type="button"
@click="handleActionCommand(`regenerate_claim_link:${item.taskId}`)"
>
重发链接
</button>
<button class="menu-action-button" type="button" @click="handleActionCommand(`release_cdk:${item.taskId}`)">
释放 CDK
</button>
<button class="menu-action-button" type="button" @click="handleActionCommand(`manual_review:${item.taskId}`)">
转人工
</button>
@@ -450,6 +465,11 @@ function handleActionCommand(command: `${AdminTaskActionKey}:${number}`) {
color: #98a2b3;
}
.goods-subline-strong {
color: #1d3555;
font-weight: 600;
}
.cell-error {
display: -webkit-box;
overflow: hidden;