fix(workbench): correct home overview aggregation

This commit is contained in:
yelan
2026-09-01 15:34:59 +08:00
parent b4184260da
commit dc86ee9149
6 changed files with 310 additions and 58 deletions
@@ -27,11 +27,21 @@ const loading = ref(true)
const loadFailed = ref(false)
const overview = ref<WorkbenchOverviewResponse | null>(null)
const rankingPeriod = ref<HomeRankingPeriod>(14)
let overviewRequestId = 0
const selectedCampus = computed<WorkbenchCampus>(() => appStore.selectedCampus)
const metrics = computed<HomeMetricCardData[]>(() => {
const summary = overview.value?.summary
const signedChange = summary?.todaySignedChange ?? 0
const signedChangeTone: HomeMetricCardData['detailTone'] =
signedChange > 0 ? 'up' : signedChange < 0 ? 'down' : 'muted'
const signedChangeDetail =
signedChange > 0
? `▲ 较昨日 +${signedChange} · 点击查看`
: signedChange < 0
? `▼ 较昨日 ${signedChange} · 点击查看`
: '较昨日持平 · 点击查看'
return [
{
@@ -39,8 +49,8 @@ const metrics = computed<HomeMetricCardData[]>(() => {
label: '今日已签署(单)',
value: summary?.todaySigned ?? 0,
tone: 'success',
detail: '▲ 较昨日 +2 · 点击查看',
detailTone: 'up',
detail: signedChangeDetail,
detailTone: signedChangeTone,
},
{
key: 'pending',
@@ -74,26 +84,42 @@ const todoItems = computed<HomeTodoItem[]>(() => overview.value?.todos ?? [])
const rankingRows = computed<HomeDocumentRanking[]>(() => overview.value?.documentRanking ?? [])
async function loadOverview() {
const requestId = ++overviewRequestId
loading.value = true
loadFailed.value = false
try {
overview.value = await getWorkbenchOverview({
const nextOverview = await getWorkbenchOverview({
campus: selectedCampus.value,
rankingPeriod: rankingPeriod.value,
})
if (requestId !== overviewRequestId) {
return
}
overview.value = nextOverview
} catch {
if (requestId !== overviewRequestId) {
return
}
overview.value = null
loadFailed.value = true
ElMessage.error('首页数据加载失败,请稍后重试')
} finally {
loading.value = false
if (requestId === overviewRequestId) {
loading.value = false
}
}
}
function goToSigning(query: Record<string, string> = {}) {
void router.push({
name: 'workbench-signing',
query,
query: {
campus: selectedCampus.value,
...query,
},
})
}