fix(dashboard): 优化控制台财务与运营口径,彻底消除误导信息并实现实时待办防漏单
这个提交包含在:
@@ -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>
|
||||
|
||||
在新工单中引用
屏蔽一个用户