feat(M08-B): 补保洁员端统计看板

This commit is contained in:
Codex
2026-07-07 14:48:19 +08:00
parent eb0f58912e
commit 6979614aeb
10 changed files with 127 additions and 16 deletions
+17 -1
View File
@@ -7,7 +7,15 @@ Page({
activeTab: 'hall',
hallTasks: [],
myTasks: [],
stats: { byStatus: {}, pendingSettlementText: cents(0) },
stats: {
byStatus: {},
taskTotal: 0,
completed: 0,
rejected: 0,
completionRate: 0,
pendingSettlementText: cents(0),
settledRewardText: cents(0),
},
selectedPhotosByTask: {},
},
@@ -122,9 +130,17 @@ function formatTask(task) {
}
function formatStats(stats) {
const taskTotal = Number(stats.taskTotal || 0)
const completed = Number(stats.completed || 0)
const rejected = Number(stats.rejected || 0)
return {
byStatus: stats.byStatus || {},
taskTotal,
completed,
rejected,
completionRate: Number(stats.completionRate || 0),
pendingSettlementText: cents(stats.pendingSettlementCents),
settledRewardText: cents(stats.settledRewardCents),
}
}
+20 -1
View File
@@ -3,7 +3,7 @@
<view class="header">
<view>
<view class="title">保洁任务</view>
<view class="muted">待结算 {{stats.pendingSettlementText}}</view>
<view class="muted">待结算 {{stats.pendingSettlementText}} · 已结算 {{stats.settledRewardText}}</view>
</view>
<button size="mini" loading="{{loading}}" bindtap="refreshAll">刷新</button>
</view>
@@ -20,6 +20,25 @@
<text>完成 {{stats.byStatus.COMPLETED || 0}}</text>
</view>
<view class="stats-board">
<view class="stats-card">
<text>任务总数</text>
<strong>{{stats.taskTotal}}</strong>
</view>
<view class="stats-card">
<text>完成率</text>
<strong>{{stats.completionRate}}%</strong>
</view>
<view class="stats-card">
<text>驳回</text>
<strong>{{stats.rejected}}</strong>
</view>
<view class="stats-card">
<text>已结算</text>
<strong>{{stats.settledRewardText}}</strong>
</view>
</view>
<view wx:if="{{errorMessage}}" class="error">{{errorMessage}}</view>
<block wx:if="{{activeTab === 'hall'}}">
+26
View File
@@ -53,6 +53,32 @@
font-size: 24rpx;
}
.stats-board {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16rpx;
margin-top: 16rpx;
}
.stats-card {
display: grid;
gap: 8rpx;
min-width: 0;
padding: 20rpx 24rpx;
border-radius: 16rpx;
background: #ffffff;
}
.stats-card text {
color: #667085;
font-size: 24rpx;
}
.stats-card strong {
color: #101828;
font-size: 34rpx;
}
.task-card {
margin-top: 20rpx;
padding: 28rpx;