文件
Henglianshutong/application/admin/view/shopro/partner/daily/index.html

157 行
11 KiB
HTML

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

{include file="/shopro/common/script" /}
<div id="index" class="reward-index panel panel-default panel-intro" v-cloak>
<el-container class="panel-block">
<el-header class="sa-header" style="height:auto;padding-bottom:12px;">
<div class="sa-title sa-flex sa-row-between">
<div class="sa-title-left">
<div class="left-name">日结对账与财务监控</div>
<div class="sa-flex" style="gap:14px;margin-top:8px;font-size:13px;flex-wrap:wrap;">
<span>昨日合格单 <b>{{ state.kpi.yesterday?.order_count || 0 }}</b> 单</span>
<span>昨日 GMV <b>¥ {{ state.kpi.yesterday?.gmv || '0.00' }}</b></span>
<span>昨日现金总拨发 <b style="color:#f56c6c;">¥ {{ state.kpi.yesterday_cash || '0.00' }}</b></span>
<span>昨日综合拨比 <b :style="{color: (state.kpi.yesterday_payout_ratio_val > 70 ? '#e6a23c' : '#67c23a')}">{{ state.kpi.yesterday_payout_ratio || '0%' }}</b></span>
<span>兑换券待履约负债 <b style="color:#e6a23c;">¥ {{ state.kpi.voucher_debt || '0.00' }}</b></span>
<span>活跃馆/县 <b>{{ state.kpi.venue_active_count || 0 }}</b> 馆 / <b>{{ state.kpi.county_active_count || 0 }}</b> 县</span>
<span>今日累计现金 <b>¥ {{ state.kpi.today_cash || '0.00' }}</b></span>
<span style="color:#909399;">暂停领取 <b>{{ state.kpi.inactive_count || 0 }}</b> 人</span>
</div>
</div>
<div class="sa-title-right sa-flex" style="gap:8px;">
{if $auth->check('shopro/partner/daily/preview')}
<el-button type="primary" icon="DataAnalysis" @click="onOpenPreview">日结预跑试算 (Dry Run)</el-button>
{/if}
<el-button class="sa-button-refresh" icon="RefreshRight" @click="getData"></el-button>
</div>
</div>
</el-header>
<el-main class="sa-main">
<el-table height="100%" class="sa-table" :data="state.data" stripe>
<el-table-column prop="settle_date" label="日期" width="120"></el-table-column>
<el-table-column prop="order_count" label="合格单数" min-width="90"></el-table-column>
<el-table-column prop="gmv" label="GMV" min-width="110"></el-table-column>
<el-table-column prop="order_count_n" label="汇率N" min-width="90"></el-table-column>
<el-table-column prop="rate" label="汇率" min-width="120"></el-table-column>
<el-table-column prop="madow_pool" label="马豆池" min-width="120"></el-table-column>
<el-table-column prop="share_user_count" label="马豆人数" min-width="90"></el-table-column>
<el-table-column prop="venue_pool" label="酒道馆奖池" min-width="110"></el-table-column>
<el-table-column prop="venue_user_count" label="馆人数" min-width="80"></el-table-column>
<el-table-column prop="county_pool" label="区县奖池" min-width="110"></el-table-column>
<el-table-column prop="county_user_count" label="县人数" min-width="80"></el-table-column>
<el-table-column prop="voucher_release_total" label="券释放" min-width="100"></el-table-column>
<el-table-column prop="status_text" label="状态" min-width="80">
<template #default="scope">
<span :class="scope.row.status==1 ? 'sa-color--success' : 'sa-color--danger'">
{{ scope.row.status_text }}
</span>
</template>
</el-table-column>
<el-table-column prop="error_msg" label="失败原因" min-width="160"></el-table-column>
<el-table-column label="操作" min-width="140" fixed="right">
<template #default="scope">
<el-button type="primary" link @click="onDetail(scope.row)">明细</el-button>
{if $auth->check('shopro/partner/daily/rerun')}
<el-button type="warning" link @click="onRerun(scope.row)">重跑</el-button>
{/if}
</template>
</el-table-column>
</el-table>
</el-main>
<el-footer class="sa-footer sa-flex sa-row-right">
<sa-pagination v-model="pagination" @pagination-change="getData"></sa-pagination>
</el-footer>
</el-container>
<!-- 日结预跑试算弹窗 (Dry Run) -->
<el-dialog v-model="previewDialog.visible" title="日结收益试算 (Dry Run 预跑监控)" width="820px" destroy-on-close>
<div style="margin-bottom:16px;" class="sa-flex sa-row-between">
<div class="sa-flex" style="gap:10px;">
<span style="font-size:13px;color:#606266;">试算日期:</span>
<el-date-picker v-model="previewDialog.date" type="date" value-format="YYYY-MM-DD" placeholder="选择日期" size="small" style="width:160px;"></el-date-picker>
<el-button type="primary" size="small" :loading="previewDialog.loading" @click="runPreview">开始模拟试算</el-button>
</div>
<div v-if="previewDialog.result">
<el-tag v-if="previewDialog.result.is_settled" type="success">该日已执行正式日结</el-tag>
<el-tag v-else type="warning">尚未正式结算(以下为只读预估)</el-tag>
</div>
</div>
<div v-if="previewDialog.result" v-loading="previewDialog.loading">
<!-- 财务现金拨比盘 -->
<div style="background:#fdf6ec;border:1px solid #faecd8;border-radius:6px;padding:14px;margin-bottom:16px;">
<div style="font-weight:600;font-size:14px;color:#e6a23c;margin-bottom:10px;">综合现金拨比与安全监控</div>
<el-row :gutter="16">
<el-col :span="6">
<div style="font-size:12px;color:#909399;">当日GMV总额</div>
<div style="font-size:16px;font-weight:bold;margin-top:2px;">¥ {{ previewDialog.result.gmv }}</div>
</el-col>
<el-col :span="6">
<div style="font-size:12px;color:#909399;">当日即时奖励 (推荐/进阶等)</div>
<div style="font-size:16px;font-weight:bold;color:#f56c6c;margin-top:2px;">¥ {{ previewDialog.result.financial?.instant_cash }}</div>
</el-col>
<el-col :span="6">
<div style="font-size:12px;color:#909399;">日结加权现金 (馆/县)</div>
<div style="font-size:16px;font-weight:bold;color:#f56c6c;margin-top:2px;">¥ {{ previewDialog.result.financial?.daily_cash }}</div>
</el-col>
<el-col :span="6">
<div style="font-size:12px;color:#909399;">综合现金拨比率</div>
<div style="font-size:18px;font-weight:bold;margin-top:2px;" :style="{color: previewDialog.result.financial?.is_alert ? '#f56c6c' : '#67c23a'}">
{{ previewDialog.result.financial?.payout_ratio }}
</div>
</el-col>
</el-row>
<div v-if="previewDialog.result.financial?.is_alert" style="margin-top:8px;font-size:12px;color:#f56c6c;">
⚠️ 注意:当日综合现金拨比超过 70% 财务风控警示线,建议关注进阶/协同奖励释放与加权池规模。
</div>
<div style="margin-top:8px;font-size:12px;color:#67c23a;">
💡 沉淀资金效益:因分母为0留存平台的酒道馆/区县资金为 <b>¥ {{ previewDialog.result.financial?.saved_cash }}</b>。
</div>
</div>
<!-- 均分池测算卡片 -->
<el-row :gutter="16" style="margin-bottom:16px;">
<el-col :span="8">
<div style="background:#f4f4f5;padding:12px;border-radius:6px;">
<div style="font-weight:600;font-size:13px;margin-bottom:6px;">酒道馆加权奖励池</div>
<div style="font-size:12px;color:#606266;line-height:1.8;">
奖池总额:¥ <b>{{ previewDialog.result.venue?.pool }}</b><br>
合格人数:<b>{{ previewDialog.result.venue?.user_count }}</b> 人<br>
人均奖励:¥ <b>{{ previewDialog.result.venue?.each }}</b><br>
沉淀金额:¥ <b>{{ previewDialog.result.venue?.saved }}</b>
</div>
</div>
</el-col>
<el-col :span="8">
<div style="background:#f4f4f5;padding:12px;border-radius:6px;">
<div style="font-weight:600;font-size:13px;margin-bottom:6px;">区县代理加权奖励池</div>
<div style="font-size:12px;color:#606266;line-height:1.8;">
奖池总额:¥ <b>{{ previewDialog.result.county?.pool }}</b><br>
合格人数:<b>{{ previewDialog.result.county?.user_count }}</b> 人<br>
人均奖励:¥ <b>{{ previewDialog.result.county?.each }}</b><br>
沉淀金额:¥ <b>{{ previewDialog.result.county?.saved }}</b>
</div>
</div>
</el-col>
<el-col :span="8">
<div style="background:#f4f4f5;padding:12px;border-radius:6px;">
<div style="font-weight:600;font-size:13px;margin-bottom:6px;">马豆贡献池 (1:1 GMV)</div>
<div style="font-size:12px;color:#606266;line-height:1.8;">
马豆总池:<b>{{ previewDialog.result.madow?.pool }}</b> 豆<br>
合格人数:<b>{{ previewDialog.result.madow?.user_count }}</b> 人<br>
人均马豆:<b>{{ previewDialog.result.madow?.each }}</b><br>
即时汇率:<b>{{ previewDialog.result.rate }}</b>
</div>
</div>
</el-col>
</el-row>
<div style="background:#fafafa;border:1px solid #ebeef5;padding:10px 14px;border-radius:4px;font-size:12px;color:#606266;">
<span>📅 兑换券释放预估:当日按计划释放兑换券总额约 <b>¥ {{ previewDialog.result.voucher?.release_estimate }}</b>(以365天逐日释放)。</span>
</div>
</div>
<template #footer>
<el-button @click="previewDialog.visible = false">关闭</el-button>
</template>
</el-dialog>
</div>