fix(dashboard): 优化控制台财务与运营口径,彻底消除误导信息并实现实时待办防漏单

这个提交包含在:
chen
2026-09-17 14:22:12 +08:00
父节点 2ccd69b9e7
当前提交 464f8b2f38
共有 5 个文件被更改,包括 564 次插入 和 448 次删除

查看文件

@@ -340,18 +340,18 @@
<div class="wealth-kpi-card card">
<div class="sa-flex sa-row-between">
<span class="kpi-title">商城实收流水 (GMV)</span>
<el-tag size="small" type="primary" effect="plain">实付总额</el-tag>
<el-tag size="small" type="primary" effect="plain">实付到账</el-tag>
</div>
<div class="kpi-main-num text-primary">
<span class="currency">¥</span>{{ state.wealth.total_gmv }}
</div>
<div class="kpi-sub-row sa-flex sa-row-between">
<span>今日实收:<strong class="text-dark">¥{{ state.wealth.today_gmv }}</strong></span>
<span>客单均价:<strong class="text-dark">¥{{ state.wealth.avg_order_amount }}</strong></span>
<span>今日实付:<strong class="text-dark">¥{{ state.wealth.today_gmv }}</strong></span>
<span>有效净GMV:<strong class="text-success">¥{{ state.wealth.net_gmv }}</strong></span>
</div>
<div class="kpi-footer sa-flex sa-row-between">
<span>累计支付单量</span>
<span class="font-bold">{{ state.wealth.paid_order_count }} 单</span>
<span>累计支付:<strong>{{ state.wealth.paid_order_count }} 单</strong></span>
<span>累计退款:<strong class="text-dark">¥{{ state.wealth.total_refund_amount }}</strong></span>
</div>
</div>
</el-col>
@@ -361,8 +361,8 @@
<div class="wealth-kpi-card card">
<div class="sa-flex sa-row-between">
<span class="kpi-title">现金分成支出与拨比</span>
<el-tooltip content="现金分成占实付GMV的百分比,评估平台精算模型健康度" placement="top">
<el-tag size="small" :type="parseFloat(state.wealth.payout_rate) <= 35 ? 'success' : 'warning'" effect="plain">
<el-tooltip content="现金分成占有效净GMV(扣退款后)的百分比,评估平台精算模型健康度" placement="top">
<el-tag size="small" :type="parseFloat(state.wealth.payout_rate) <= 35 ? 'success' : (parseFloat(state.wealth.payout_rate) <= 50 ? 'warning' : 'danger')" effect="plain">
拨比 {{ state.wealth.payout_rate }}%
</el-tag>
</el-tooltip>
@@ -371,7 +371,7 @@
<span class="currency">¥</span>{{ state.wealth.total_payout }}
</div>
<div class="kpi-sub-row sa-flex sa-row-between">
<span>平台净留存:<strong class="text-success">¥{{ state.wealth.net_retention }}</strong></span>
<span>平台有效留存:<strong class="text-success">¥{{ state.wealth.net_retention }}</strong></span>
<span class="cursor-pointer text-primary" @click="onOpenReward('')">明细 →</span>
</div>
<div class="kpi-footer sa-flex sa-row-between">
@@ -386,7 +386,9 @@
<div class="wealth-kpi-card card">
<div class="sa-flex sa-row-between">
<span class="kpi-title">马豆生态资产蓄水池</span>
<el-tag size="small" type="success" effect="plain">单向升值</el-tag>
<el-tooltip content="基于每日日结订单利润均分释放,单向赋能升值,非现金刚性回购" placement="top">
<el-tag size="small" type="success" effect="plain">日结均分</el-tag>
</el-tooltip>
</div>
<div class="kpi-main-num text-purple">
{{ state.madow.total_madow }} <span class="unit">豆</span>
@@ -407,7 +409,9 @@
<div class="wealth-kpi-card card">
<div class="sa-flex sa-row-between">
<span class="kpi-title">消费兑换券杠杆池</span>
<el-tag size="small" type="info" effect="plain">1.5倍补贴</el-tag>
<el-tooltip content="1.5倍购物抵扣补贴,仅限商城消费抵扣,非现金刚性兑付" placement="top">
<el-tag size="small" type="info" effect="plain">1.5倍补贴</el-tag>
</el-tooltip>
</div>
<div class="kpi-main-num text-danger">
<span class="currency">¥</span>{{ state.voucher.total_voucher }}
@@ -424,43 +428,43 @@
</el-col>
</el-row>
<!-- ================= 1.1 CFO 财务全貌 · 资金流向、平台浮存与资产负债中枢 ================= -->
<!-- ================= 1.1 CFO 财务全貌 · 资金流向、商户号结余与刚性流动应付中枢 ================= -->
<el-row :gutter="16">
<!-- 资金浮存池 (Cash Float) -->
<!-- 资金结余池 (Cash Float) -->
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
<div class="finance-hub-card card">
<div class="sa-flex sa-row-between mb-2">
<div class="sa-flex">
<span class="network-badge bg-primary mr-2" style="background: #1890ff;">浮</span>
<span class="font-bold text-dark" style="font-size: 14px;">资金浮存池 (Cash Float)</span>
<span class="network-badge bg-primary mr-2" style="background: #1890ff;">资</span>
<span class="font-bold text-dark" style="font-size: 14px;">可用流动资金存量 (商户号预估结余)</span>
</div>
<el-tag size="small" type="success" effect="light">平台流动免息资金</el-tag>
<el-tag size="small" type="success" effect="light">流动资金沉淀</el-tag>
</div>
<div class="kpi-main-num text-primary" style="font-size: 24px; margin: 8px 0;">
<span class="currency">¥</span>{{ state.finance.total_float_funds }}
<span class="currency">¥</span>{{ state.finance.real_net_cash_flow }}
</div>
<div class="finance-sub-metric sa-flex sa-row-between">
<span>未提现佣金沉淀 (用户收益留存):</span>
<strong class="text-warning">¥{{ state.finance.commission_float }}</strong>
</div>
<div class="finance-sub-metric sa-flex sa-row-between">
<span>用户账户余额沉淀 (已充未销):</span>
<span>用户账户余额沉淀 (已充未销资金):</span>
<strong class="text-dark">¥{{ state.finance.user_balance_float }}</strong>
</div>
<div class="sa-flex sa-row-between pt-2" style="font-size: 12px; color: var(--sa-subfont); border-top: 1px dashed var(--sa-space);">
<span>真实净现金流 (GMV-出款-退款):</span>
<strong class="text-success">¥{{ state.finance.real_net_cash_flow }}</strong>
<span>计算口径:实收总额 - 累计退款 - 已打款出款</span>
<span class="text-success font-bold">资金池充沛</span>
</div>
</div>
</el-col>
<!-- 提现出款与资金风控敞口 -->
<!-- 提现出款与资金风控 -->
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
<div class="finance-hub-card card">
<div class="sa-flex sa-row-between mb-2">
<div class="sa-flex">
<span class="network-badge bg-warning mr-2" style="background: #fa8c16;">提</span>
<span class="font-bold text-dark" style="font-size: 14px;">提现出款与风控敞口</span>
<span class="font-bold text-dark" style="font-size: 14px;">提现出款与风控管理</span>
</div>
<span class="cursor-pointer text-primary" style="font-size: 12px;" @click="onOpenWithdraw('all')">提现流水 →</span>
</div>
@@ -469,7 +473,7 @@
<span class="unit" style="font-size: 12px; font-weight: normal; color: var(--sa-subfont);">已打款出款</span>
</div>
<div class="finance-sub-metric sa-flex sa-row-between" :style="state.finance.pending_withdraw_count > 0 ? 'background: #fff2e8; border-color: #ffbb96;' : ''">
<span>待审核出款风控资金:</span>
<span>待审核出款提现资金:</span>
<div class="sa-flex">
<strong :class="state.finance.pending_withdraw_count > 0 ? 'text-danger' : 'text-dark'">¥{{ state.finance.pending_withdraw_amount }}</strong>
<el-badge v-if="state.finance.pending_withdraw_count > 0" :value="state.finance.pending_withdraw_count + '笔'" class="ml-1" type="danger" />
@@ -478,7 +482,7 @@
</div>
<div class="finance-sub-metric sa-flex sa-row-between">
<span>累计申请总额:¥{{ state.finance.total_withdraw_applied }}</span>
<span>出款兑现率:<strong class="text-purple">{{ state.finance.withdraw_cash_rate }}%</strong></span>
<span>提现完成率:<strong class="text-purple">{{ state.finance.withdraw_audit_rate }}%</strong></span>
</div>
<div class="sa-flex sa-row-between pt-2" style="font-size: 12px; color: var(--sa-subfont); border-top: 1px dashed var(--sa-space);">
<span>累计退款:¥{{ state.finance.total_refund_amount }} ({{ state.finance.total_refund_count }}笔)</span>
@@ -487,30 +491,30 @@
</div>
</el-col>
<!-- 资产负债表与未来承兑责任 -->
<!-- 刚性法币现金流动负债 -->
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
<div class="finance-hub-card card">
<div class="sa-flex sa-row-between mb-2">
<div class="sa-flex">
<span class="network-badge bg-danger mr-2" style="background: #f5222d;">债</span>
<span class="font-bold text-dark" style="font-size: 14px;">未来承兑责任准备金 (负债中枢)</span>
<span class="network-badge mr-2" style="background: #722ed1;">付</span>
<span class="font-bold text-dark" style="font-size: 14px;">刚性现金流动负债 (法币应付责任)</span>
</div>
<el-tag size="small" type="danger" effect="light">履约与承兑储备</el-tag>
<el-tag size="small" type="warning" effect="light">流动承兑准备</el-tag>
</div>
<div class="kpi-main-num text-danger" style="font-size: 24px; margin: 8px 0;">
<span class="currency">¥</span>{{ state.finance.total_future_liability }}
<div class="kpi-main-num text-purple" style="font-size: 24px; margin: 8px 0;">
<span class="currency">¥</span>{{ state.finance.rigid_cash_liability }}
</div>
<div class="finance-sub-metric sa-flex sa-row-between">
<span>① 消费兑换券补贴待释放负债 (1.5倍补贴):</span>
<strong class="text-danger">¥{{ state.finance.pending_voucher_liability }}</strong>
<span>① 用户未提现分润 (随时可提现):</span>
<strong class="text-warning">¥{{ state.finance.commission_float }}</strong>
</div>
<div class="finance-sub-metric sa-flex sa-row-between">
<span>② 马豆流通折算市值负债 (生态回购承兑):</span>
<strong class="text-purple">¥{{ state.finance.madow_market_liability }}</strong>
<span>② 用户账户可用余额 (可消费/提现):</span>
<strong class="text-dark">¥{{ state.finance.user_balance_float }}</strong>
</div>
<div class="sa-flex sa-row-between pt-2" style="font-size: 12px; color: var(--sa-subfont); border-top: 1px dashed var(--sa-space);">
<span>③ 用户未提佣金流动负债:</span>
<strong class="text-warning">¥{{ state.finance.commission_liability }}</strong>
<span>③ 待审核提现准备金:</span>
<strong class="text-danger">¥{{ state.finance.pending_withdraw_amount }}</strong>
</div>
</div>
</el-col>
@@ -606,7 +610,7 @@
<div>
<span class="font-bold text-dark" style="font-size: 15px;">全角色身份会员资产与分佣统计全景矩阵</span>
<span style="font-size: 12px; color: var(--sa-subfont); margin-left: 12px;">
逐一统计每一个角色身份的会员人数、持豆存量、实时市值、累计分佣金额与笔数
逐一统计每一个角色身份的会员人数、持豆存量、实时市值、专属业务分润与笔数
</span>
</div>
<div class="sa-flex" style="margin-top: 4px;">
@@ -655,7 +659,13 @@
</template>
</el-table-column>
<el-table-column label="累计现金分佣" min-width="140" align="right">
<el-table-column label="专属业务分佣" min-width="140" align="right">
<template #header>
<span style="font-size: 13px;">专属业务分佣</span>
<el-tooltip content="按各角色专属分润类型归集(如创客极差/酒道馆/区县),杜绝一人兼多职时交叉重复计算" placement="top">
<i class="el-icon-info text-muted" style="margin-left: 2px; cursor: pointer;"></i>
</el-tooltip>
</template>
<template #default="scope">
<span class="font-bold text-warning" style="font-size: 14px;">¥{{ scope.row.reward_amount }}</span>
</template>
@@ -668,13 +678,18 @@
</template>
</el-table-column>
<el-table-column label="30天自购活跃度" min-width="170">
<el-table-column label="30天自购考核" min-width="170">
<template #default="scope">
<div class="sa-flex sa-row-between" style="font-size: 12px; margin-bottom: 3px;">
<span>{{ scope.row.active_count }} {{ scope.row.unit }} 达标</span>
<strong :class="scope.row.active_rate >= 60 ? 'text-success' : 'text-warning'">{{ scope.row.active_rate }}%</strong>
<div v-if="scope.row.is_exempt_active" class="text-muted" style="font-size: 12px;">
<el-tag size="mini" type="info" effect="plain">{{ scope.row.active_text || '无需自购考核' }}</el-tag>
</div>
<div v-else>
<div class="sa-flex sa-row-between" style="font-size: 12px; margin-bottom: 3px;">
<span>{{ scope.row.active_count }} {{ scope.row.unit }} 达标</span>
<strong :class="scope.row.active_rate >= 60 ? 'text-success' : 'text-warning'">{{ scope.row.active_rate }}%</strong>
</div>
<el-progress :percentage="scope.row.active_rate" :stroke-width="4" :show-text="false" :color="scope.row.active_rate >= 60 ? '#52c41a' : '#fa8c16'"></el-progress>
</div>
<el-progress :percentage="scope.row.active_rate" :stroke-width="4" :show-text="false" :color="scope.row.active_rate >= 60 ? '#52c41a' : '#fa8c16'"></el-progress>
</template>
</el-table-column>
@@ -737,46 +752,53 @@
</div>
</el-col>
<!-- 中间:合伙人 30 天自购断档掉队雷达 -->
<!-- 中间:合伙人 30 天自购考核与续期雷达 -->
<el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8">
<div class="coo-panel-card card">
<div class="sa-flex sa-row-between mb-3">
<div>
<span class="font-bold text-dark" style="font-size: 14px;">合伙人 30天自购断档掉队雷达</span>
<span class="font-bold text-dark" style="font-size: 14px;">合伙人 30天自购考核与续期雷达</span>
</div>
<span class="cursor-pointer text-primary" style="font-size: 12px;" @click="onOpenAgent('')">合伙团队 →</span>
</div>
<!-- 3状态指标标签 -->
<el-row :gutter="8" class="mb-3">
<el-col :span="8">
<div class="radar-stat-pill" style="background: #f6ffed; border: 1px solid #b7eb8f; text-align: center;">
<div style="font-size: 11px; color: #389e0d;">活跃达标</div>
<div style="font-size: 18px; font-weight: bold; color: #52c41a; margin-top: 2px;">{{ state.operation.active_partners }}</div>
<!-- 4状态指标标签 -->
<el-row :gutter="6" class="mb-3">
<el-col :span="6">
<div class="radar-stat-pill" style="background: #f6ffed; border: 1px solid #b7eb8f; text-align: center; padding: 6px 2px;">
<div style="font-size: 11px; color: #389e0d;">达标在保</div>
<div style="font-size: 16px; font-weight: bold; color: #52c41a; margin-top: 2px;">{{ state.operation.active_partners }}</div>
<div style="font-size: 10px; color: #8c8c8c;">>7天余量</div>
</div>
</el-col>
<el-col :span="8">
<div class="radar-stat-pill" style="background: #fffbe6; border: 1px solid #ffe58f; text-align: center;">
<div style="font-size: 11px; color: #d46b08;">即将断档</div>
<div style="font-size: 18px; font-weight: bold; color: #fa8c16; margin-top: 2px;">{{ state.operation.warning_partners }}</div>
<el-col :span="6">
<div class="radar-stat-pill" style="background: #fffbe6; border: 1px solid #ffe58f; text-align: center; padding: 6px 2px;">
<div style="font-size: 11px; color: #d46b08;">临期预警</div>
<div style="font-size: 16px; font-weight: bold; color: #fa8c16; margin-top: 2px;">{{ state.operation.warning_partners }}</div>
<div style="font-size: 10px; color: #fa8c16;">≤7天临界</div>
</div>
</el-col>
<el-col :span="8">
<div class="radar-stat-pill" style="background: #fff1f0; border: 1px solid #ffa39e; text-align: center;">
<div style="font-size: 11px; color: #cf1322;">已断档冻结</div>
<div style="font-size: 18px; font-weight: bold; color: #f5222d; margin-top: 2px;">{{ state.operation.frozen_partners }}</div>
<div style="font-size: 10px; color: #8c8c8c;">无分佣资格</div>
<el-col :span="6">
<div class="radar-stat-pill" style="background: #f0f5ff; border: 1px solid #adc6ff; text-align: center; padding: 6px 2px;">
<div style="font-size: 11px; color: #1d39c4;">待续期</div>
<div style="font-size: 16px; font-weight: bold; color: #2f54eb; margin-top: 2px;">{{ state.operation.pending_renew_partners }}</div>
<div style="font-size: 10px; color: #8c8c8c;">超期可恢复</div>
</div>
</el-col>
<el-col :span="6">
<div class="radar-stat-pill" style="background: #fafafa; border: 1px solid #d9d9d9; text-align: center; padding: 6px 2px;">
<div style="font-size: 11px; color: #595959;">新成员</div>
<div style="font-size: 16px; font-weight: bold; color: #595959; margin-top: 2px;">{{ state.operation.new_no_order_partners }}</div>
<div style="font-size: 10px; color: #8c8c8c;">待首购激活</div>
</div>
</el-col>
</el-row>
<!-- 7天临界断档名单列表(若有则紧急告警,若无则展示健康与已断档) -->
<!-- 7天临界断档名单列表(若有则提醒续期,若无则展示待续期列表) -->
<div v-if="state.operation.warning_partners > 0">
<div class="warning-alert-row mb-2 sa-flex sa-row-between">
<span>⚠️ <strong>紧急唤醒:</strong>以下合伙人自购即将到期</span>
<span style="font-weight: bold;">{{ state.operation.warning_partners }} 人临界</span>
<span>⚠️ <strong>续期提醒:</strong>以下合伙人自购即将到期</span>
<span style="font-weight: bold;">{{ state.operation.warning_partners }} 人临期</span>
</div>
<div style="max-height: 120px; overflow-y: auto;">
<div class="sa-flex sa-row-between mb-2 pb-1" v-for="wUser in state.operation.warning_list" :key="wUser.user_id" style="border-bottom: 1px dashed #f0f2f5; font-size: 12px;">
@@ -789,7 +811,7 @@
</div>
<div class="sa-flex">
<el-tag size="mini" type="danger">剩余 {{ wUser.days_left }} 天</el-tag>
<el-button type="primary" link size="mini" class="ml-1" @click="onOpenAgent('')">催单</el-button>
<el-button type="primary" link size="mini" class="ml-1" @click="onOpenAgent('')">提醒</el-button>
</div>
</div>
</div>
@@ -797,66 +819,85 @@
<div v-else>
<div class="sa-flex sa-row-between" style="background: #f6ffed; border: 1px solid #b7eb8f; padding: 8px 12px; border-radius: 6px; font-size: 12px; color: #389e0d; margin-bottom: 8px;">
<span>🛡️ 合伙股东自购健康度良好,暂无临近断档人员</span>
<span>🛡️ 合伙团队在保人员健康,暂无 7 天内临期合伙人</span>
<span>全部在保</span>
</div>
<div style="font-size: 11px; color: var(--sa-subfont); margin-bottom: 4px;">已断档冻结人员采样 (失去分佣资格):</div>
<div style="font-size: 11px; color: var(--sa-subfont); margin-bottom: 4px;">超期待续期合伙人 (自购 1 单即可恢复分润资格):</div>
<div style="max-height: 100px; overflow-y: auto;">
<div class="sa-flex sa-row-between mb-1 pb-1" v-for="fUser in state.operation.frozen_list.slice(0, 3)" :key="fUser.user_id" style="border-bottom: 1px dashed #f0f2f5; font-size: 12px;">
<div class="sa-flex sa-row-between mb-1 pb-1" v-for="pUser in state.operation.pending_renew_list.slice(0, 3)" :key="pUser.user_id" style="border-bottom: 1px dashed #f0f2f5; font-size: 12px;">
<div class="sa-flex">
<span class="text-muted mr-1">#{{ fUser.user_id }}</span>
<span class="text-dark">{{ fUser.nickname }}</span>
<span class="text-muted ml-1" style="font-size: 11px;">({{ fUser.mobile }})</span>
<span class="text-muted mr-1">#{{ pUser.user_id }}</span>
<span class="text-dark">{{ pUser.nickname }}</span>
<span class="text-muted ml-1" style="font-size: 11px;">({{ pUser.mobile }})</span>
</div>
<el-tag size="mini" type="danger" effect="plain">{{ fUser.overdue_days }}</el-tag>
<el-tag size="mini" type="info" effect="plain">{{ pUser.overdue_text }}</el-tag>
</div>
<div v-if="!state.operation.pending_renew_list || state.operation.pending_renew_list.length === 0" class="text-muted" style="font-size: 11px; text-align: center; padding: 8px 0;">
暂无超期待续期合伙人
</div>
</div>
</div>
</div>
</el-col>
<!-- 右侧:供应链库存告急与平台经营健康度评分 -->
<!-- 右侧:经营风控指标与供应链安全 -->
<el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8">
<div class="coo-panel-card card">
<div class="sa-flex sa-row-between mb-2">
<div>
<span class="font-bold text-dark" style="font-size: 14px;">经营健康评分与供应链安全</span>
<span class="font-bold text-dark" style="font-size: 14px;">经营风控指标与供应链安全</span>
</div>
<el-tag size="small" :style="{ backgroundColor: state.operation.health.grade_color, color: '#fff', borderColor: state.operation.health.grade_color, fontWeight: 'bold' }">
{{ state.operation.health.grade }}
</el-tag>
<el-tag size="small" type="success" effect="light">精算模型监控</el-tag>
</div>
<!-- 综合评分双栏展示 -->
<el-row :gutter="12" class="mb-3">
<el-col :span="10">
<div class="health-score-dial">
<div style="font-size: 11px; color: var(--sa-subfont); margin-bottom: 4px;">综合健康度</div>
<div class="health-score-val" :style="{ color: state.operation.health.grade_color }">{{ state.operation.health.score }}</div>
<div style="font-size: 10px; color: var(--sa-subfont); margin-top: 4px;">满分 100分</div>
</div>
</el-col>
<el-col :span="14">
<div style="font-size: 11px; color: var(--sa-subfont); line-height: 1.8;">
<div class="sa-flex sa-row-between">
<span>拨比健康 (30分):</span>
<strong class="text-dark">{{ state.operation.health.payout_score }}分</strong>
<!-- 4大客观风控指标看板 -->
<div class="mb-3" style="background: #fafafa; border: 1px solid #f0f0f0; border-radius: 8px; padding: 10px 12px;">
<el-row :gutter="10">
<el-col :span="12" class="mb-2">
<div style="font-size: 11px; color: var(--sa-subfont);">实付留存与有效拨比</div>
<div class="sa-flex sa-row-between mt-1">
<strong class="text-dark" style="font-size: 14px;">{{ state.finance?.effective_payout_rate || state.wealth?.payout_rate || '0' }}%</strong>
<el-tag size="mini" :type="state.operation?.risk_indicators?.payout_rate?.status || 'success'">
{{ state.operation?.risk_indicators?.payout_rate?.text || '拨比可控' }}
</el-tag>
</div>
<div class="sa-flex sa-row-between">
<span>合伙人活力 (25分):</span>
<strong class="text-dark">{{ state.operation.health.active_score }}分</strong>
</el-col>
<el-col :span="12" class="mb-2">
<div style="font-size: 11px; color: var(--sa-subfont);">合伙人自购达标率</div>
<div class="sa-flex sa-row-between mt-1">
<strong class="text-dark" style="font-size: 14px;">{{ state.partner?.active_rate || 0 }}%</strong>
<el-tag size="mini" :type="state.operation?.risk_indicators?.partner_active_rate?.status || 'success'">
{{ state.operation?.risk_indicators?.partner_active_rate?.text || '正常' }}
</el-tag>
</div>
<div class="sa-flex sa-row-between">
<span>复购粘性 (25分):</span>
<strong class="text-dark">{{ state.operation.health.repeat_score }}分</strong>
</el-col>
<el-col :span="12">
<div style="font-size: 11px; color: var(--sa-subfont);">提现出款完成率</div>
<div class="sa-flex sa-row-between mt-1">
<strong class="text-dark" style="font-size: 14px;">{{ state.finance?.withdraw_audit_rate || 0 }}%</strong>
<el-tag size="mini" :type="state.operation?.risk_indicators?.withdraw_audit_rate?.status || 'success'">
{{ state.operation?.risk_indicators?.withdraw_audit_rate?.text || '正常' }}
</el-tag>
</div>
<div class="sa-flex sa-row-between">
<span>履约安全 (20分):</span>
<strong class="text-dark">{{ state.operation.health.safety_score }}分</strong>
</el-col>
<el-col :span="12">
<div style="font-size: 11px; color: var(--sa-subfont);">全店退款率</div>
<div class="sa-flex sa-row-between mt-1">
<strong class="text-dark" style="font-size: 14px;">{{ state.finance?.refund_rate || 0 }}%</strong>
<el-tag size="mini" :type="state.operation?.risk_indicators?.refund_rate?.status || 'success'">
{{ state.operation?.risk_indicators?.refund_rate?.text || '正常' }}
</el-tag>
</div>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
<!-- 经营建议/预警提示 -->
<div v-if="state.operation?.risk_suggestions && state.operation?.risk_suggestions.length > 0" class="mb-2" style="font-size: 11px; color: #595959; background: #fffbe6; border: 1px solid #ffe58f; padding: 6px 10px; border-radius: 6px; line-height: 1.6;">
<div v-for="(sug, sIdx) in state.operation.risk_suggestions.slice(0, 2)" :key="sIdx">
💡 {{ sug }}
</div>
</div>
<!-- 库存告急监测 -->
<div class="sa-flex sa-row-between mb-1" style="border-top: 1px dashed var(--sa-space); padding-top: 8px;">
@@ -879,7 +920,7 @@
</div>
</div>
</div>
<div v-else class="text-muted sa-flex sa-row-center" style="font-size: 12px; padding: 10px 0;">
<div v-else class="text-muted sa-flex sa-row-center" style="font-size: 12px; padding: 6px 0;">
✅ 所有在售商品库存充足
</div>
</div>
@@ -999,38 +1040,52 @@
<!-- 右侧:电商运营风控 & 日结监控 -->
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
<div class="card" style="min-height: 340px;">
<div class="card-header-title">电商运营与日结对账监控</div>
<div class="sa-flex sa-row-between mb-2">
<div class="card-header-title" style="margin-bottom: 0;">电商待办与日结对账监控</div>
<el-tag size="mini" type="danger" effect="light">全量实时待办</el-tag>
</div>
<!-- 待处理订单指标卡 -->
<el-row :gutter="12" class="mb-3">
<el-col :span="8">
<!-- 待处理订单指标卡 (全量实时统计,不受时段筛选影响,杜绝漏单) -->
<el-row :gutter="10" class="mb-3">
<el-col :span="6">
<div class="todo-stat-card" @click="onOpen('nosend')">
<div style="color: var(--sa-subfont); margin-bottom: 4px;">待发货订单</div>
<div style="color: var(--sa-subfont); font-size: 11px; margin-bottom: 4px;">待发货订单</div>
<div class="sa-flex sa-row-between">
<span style="font-size: 20px; font-weight: 700;" :class="statistics.noSend.num > 0 ? 'text-warning' : 'text-dark'">
{{ statistics.noSend.num }}
<span style="font-size: 18px; font-weight: 700;" :class="(state.operation?.todo_overview?.nosend_count ?? statistics.noSend.num) > 0 ? 'text-warning' : 'text-dark'">
{{ state.operation?.todo_overview?.nosend_count ?? statistics.noSend.num }}
</span>
<el-icon><arrow-right /></el-icon>
</div>
</div>
</el-col>
<el-col :span="8">
<el-col :span="6">
<div class="todo-stat-card" @click="onOpen('aftersale')">
<div style="color: var(--sa-subfont); margin-bottom: 4px;">售后维权</div>
<div style="color: var(--sa-subfont); font-size: 11px; margin-bottom: 4px;">售后维权</div>
<div class="sa-flex sa-row-between">
<span style="font-size: 20px; font-weight: 700;" :class="statistics.aftersale.num > 0 ? 'text-danger' : 'text-dark'">
{{ statistics.aftersale.num }}
<span style="font-size: 18px; font-weight: 700;" :class="(state.operation?.todo_overview?.aftersale_count ?? statistics.aftersale.num) > 0 ? 'text-danger' : 'text-dark'">
{{ state.operation?.todo_overview?.aftersale_count ?? statistics.aftersale.num }}
</span>
<el-icon><arrow-right /></el-icon>
</div>
</div>
</el-col>
<el-col :span="8">
<el-col :span="6">
<div class="todo-stat-card" @click="onOpen('refund')">
<div style="color: var(--sa-subfont); margin-bottom: 4px;">退款订单</div>
<div style="color: var(--sa-subfont); font-size: 11px; margin-bottom: 4px;">待审退款</div>
<div class="sa-flex sa-row-between">
<span style="font-size: 20px; font-weight: 700;">
{{ statistics.refund.num }}
<span style="font-size: 18px; font-weight: 700;" :class="(state.operation?.todo_overview?.refund_apply_count ?? statistics.refund.num) > 0 ? 'text-danger' : 'text-dark'">
{{ state.operation?.todo_overview?.refund_apply_count ?? statistics.refund.num }}
</span>
<el-icon><arrow-right /></el-icon>
</div>
</div>
</el-col>
<el-col :span="6">
<div class="todo-stat-card" @click="onOpenWithdraw(0)">
<div style="color: var(--sa-subfont); font-size: 11px; margin-bottom: 4px;">待审提现</div>
<div class="sa-flex sa-row-between">
<span style="font-size: 18px; font-weight: 700;" :class="(state.operation?.todo_overview?.pending_withdraw_count ?? state.finance?.pending_withdraw_count ?? 0) > 0 ? 'text-purple' : 'text-dark'">
{{ state.operation?.todo_overview?.pending_withdraw_count ?? state.finance?.pending_withdraw_count ?? 0 }}
</span>
<el-icon><arrow-right /></el-icon>
</div>