|
|
@@ -11,7 +11,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <!-- ① 运营统计带:优先取 /api/admin/families/stats 全局聚合;接口不可用/失败时降级为当前页合计(stats) -->
|
|
|
+ <!-- ① 运营统计带:优先取 /api/admin/families/stats 全局聚合;接口不可用/失败时降级为当前页合计(stats),其中「本月报告数」降级为本页累计口径 -->
|
|
|
<div class="stat-band">
|
|
|
<div class="stat-card stat-card--primary">
|
|
|
<div class="stat-label">家庭总数</div>
|
|
|
@@ -22,7 +22,7 @@
|
|
|
<div class="stat-value adm-num">{{ displayStats.members }}</div>
|
|
|
</div>
|
|
|
<div class="stat-card">
|
|
|
- <div class="stat-label">报告数<span v-if="statsDegraded">(本页合计)</span></div>
|
|
|
+ <div class="stat-label">本月报告数<span v-if="statsDegraded">(本页累计)</span></div>
|
|
|
<div class="stat-value adm-num">{{ displayStats.reports }}</div>
|
|
|
</div>
|
|
|
<div class="stat-card">
|
|
|
@@ -408,7 +408,9 @@ export default {
|
|
|
currentPath() {
|
|
|
return this.$route.path
|
|
|
},
|
|
|
- // 统计带兜底:基于当前页 tableData 合计(全局聚合接口不可用时降级使用,勿删)
|
|
|
+ // 统计带兜底:基于当前页 tableData 合计(仅降级时使用,勿删)
|
|
|
+ // 注意:reports 为「本页累计」口径(sum reportCount),与全局「本月报告数」口径不同,
|
|
|
+ // 故降级时该卡片单独标注「(本页累计)」,其余卡片仍为「(本页合计)」
|
|
|
stats() {
|
|
|
const sum = (key) => this.tableData.reduce((acc, r) => acc + (r[key] || 0), 0)
|
|
|
return {
|
|
|
@@ -420,9 +422,11 @@ export default {
|
|
|
coupons: sum('couponCount')
|
|
|
}
|
|
|
},
|
|
|
- // 降级态:全局聚合接口尚未返回或失败时,统计带标注「(本页合计)」
|
|
|
+ // 降级态:全局聚合未返回 / 失败 / 任一关键字段缺失时,统计带标注降级口径
|
|
|
statsDegraded() {
|
|
|
- return this.globalStats == null
|
|
|
+ const g = this.globalStats
|
|
|
+ return !g || ['familyCount', 'memberCount', 'monthReportCount', 'planCount', 'taskCount', 'couponCount']
|
|
|
+ .some(k => g[k] === null || g[k] === undefined)
|
|
|
},
|
|
|
// 统计带展示值:优先取全局聚合接口(globalStats);字段缺失或降级时逐项回退到本页合计(stats)
|
|
|
displayStats() {
|
|
|
@@ -433,7 +437,7 @@ export default {
|
|
|
return {
|
|
|
total: pick('familyCount', 'total'),
|
|
|
members: pick('memberCount', 'members'),
|
|
|
- reports: pick('reportCount', 'reports'),
|
|
|
+ reports: pick('monthReportCount', 'reports'),
|
|
|
plans: pick('planCount', 'plans'),
|
|
|
tasks: pick('taskCount', 'tasks'),
|
|
|
coupons: pick('couponCount', 'coupons'),
|