文件
Henglianshutong/application/admin/view/shopro/user/user/detail.html

766 行
47 KiB
HTML

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

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

{include file="/shopro/common/script" /}
<style>
.user-detail {
background: #fff;
height: 100vh;
overflow: hidden;
}
.user-detail .panel-block {
height: 100%;
}
.user-detail .detail-header-bar {
padding: 12px 16px;
margin-bottom: 12px;
background: #fff;
border-radius: 6px;
border: 1px solid var(--sa-border);
}
.user-detail .detail-title-text {
font-size: 16px;
font-weight: 600;
margin-left: 12px;
color: var(--sa-title);
}
.user-detail .user-detail-scrollbar>.el-scrollbar__wrap {
overflow-x: hidden;
}
.user-detail .user-detail-scrollbar>.el-scrollbar__bar.is-horizontal {
display: none;
}
.user-detail .card-title {
height: 32px;
line-height: 32px;
font-size: 15px;
font-weight: 600;
color: var(--sa-subtitle);
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: space-between;
}
.user-detail .card-section {
padding: 16px;
background: var(--sa-table-header-bg);
border-radius: 8px;
margin-bottom: 16px;
}
.user-detail .left {
height: 14px;
line-height: 14px;
font-size: 12px;
font-weight: 500;
color: var(--sa-subfont);
margin-bottom: 6px;
}
.user-detail .right {
line-height: 28px;
font-size: 14px;
font-weight: 400;
color: var(--sa-subtitle);
}
.user-detail .info {
padding: 16px 16px 4px;
background: var(--sa-background-assist);
border-radius: 6px;
}
.user-detail .info .el-col {
margin-bottom: 14px;
}
.user-detail .asset-card-box {
background: #fff;
border: 1px solid var(--sa-border);
border-radius: 6px;
padding: 12px 14px;
margin-bottom: 12px;
}
.user-detail .asset-card-num {
font-size: 18px;
font-weight: 600;
color: var(--sa-title);
margin-top: 4px;
}
.user-detail .asset-card-label {
font-size: 12px;
color: var(--sa-subfont);
}
.user-detail .asset-card-desc {
font-size: 11px;
color: var(--sa-subfont);
margin-top: 3px;
}
.user-detail .active-dot {
display: inline-block;
width: 8px;
height: 8px;
border-radius: 50%;
margin-right: 6px;
}
.user-detail .active-dot.is-on {
background: #52c41a;
}
.user-detail .active-dot.is-off {
background: #c0c4cc;
}
.user-detail .log .card-section {
padding: 0;
background: var(--sa-background-assist);
}
.user-detail .el-tabs__nav-wrap::after {
height: 0;
}
.user-detail .third-oauth .provider-platform {
flex-shrink: 0;
width: 32px;
height: 32px;
}
.user-detail .third-oauth .provider-item {
margin-bottom: 16px;
}
.user-detail .third-oauth .provider-item:last-of-type {
margin-bottom: 0;
}
.user-detail .formula-box {
background: #f8fafc;
border: 1px solid var(--sa-border);
border-radius: 6px;
padding: 12px;
font-family: monospace;
font-size: 12px;
line-height: 1.6;
white-space: pre-wrap;
word-break: break-all;
}
</style>
<div id="detail" class="user-detail" v-cloak>
<el-container class="panel-block">
<el-main style="padding: 12px 16px;">
<!-- 顶部导航条(用于选项卡或全屏页面操作) -->
<div class="detail-header-bar sa-flex sa-row-between">
<div class="sa-flex sa-col-center">
<el-button icon="Back" @click="onBack">返回</el-button>
<span class="detail-title-text">
会员详情 - {{ state.detail.nickname || state.detail.username || '会员' }} (#{{ state.detail.id }})
</span>
<el-tag :type="state.detail.status == 'normal' ? 'success' : 'danger'" size="small" class="ml-2">
{{ state.detail.status == 'normal' ? '正常' : '已禁用' }}
</el-tag>
<el-tag v-if="state.detail.identity_text" type="primary" size="small" class="ml-2">
{{ state.detail.identity_text }}
</el-tag>
</div>
<div class="sa-flex">
<el-button v-if="state.detail.has_agent" type="success" @click="onOpenAgentDetail(state.detail.id)">
收益中心分销商档案
</el-button>
{if $auth->check('shopro/user/user/recharge')}
<el-dropdown trigger="click" @command="onRecharge">
<el-button type="warning">
账户充值 <el-icon class="el-icon--right"><arrow-down /></el-icon>
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="money">充值余额 (元)</el-dropdown-item>
<el-dropdown-item command="madow">充值dmepa (枚)</el-dropdown-item>
<el-dropdown-item command="score">充值积分 (分)</el-dropdown-item>
<el-dropdown-item command="voucher">充值兑换券 (个)</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
{/if}
<el-button class="sa-button-refresh ml-2" icon="RefreshRight" @click="getDetail"></el-button>
</div>
</div>
<!-- 可滚动核心区域 -->
<el-scrollbar class="user-detail-scrollbar" style="height: calc(100vh - 76px);">
<el-row :gutter="16">
<!-- 左列:基本信息与账号安全 -->
<el-col class="sa-col-24" :xs="24" :sm="24" :md="7" :lg="7" :xl="7">
<div class="card-title">基本信息</div>
<div class="card-section">
<div class="sa-flex sa-row-between mb-3">
<div class="sa-flex sa-flex-1">
<sa-image :url="state.detail.avatar" size="60" radius="30"></sa-image>
<div class="ml-3 sa-flex-1">
<div class="nickname mb-1 sa-table-line-1" style="font-weight: 600;">
{{ state.detail.nickname }}
</div>
<div class="id" style="color: var(--sa-subfont); font-size: 12px;">#{{ state.detail.id }}</div>
</div>
</div>
{if $auth->check('shopro/user/user/edit')}
<el-button type="primary" link @click="onSelectAvatar">更换头像</el-button>
{/if}
</div>
<div class="info">
<el-row :gutter="16">
<el-col :span="24">
<div class="left">昵称</div>
<div class="right">
<el-input v-model="state.detail.nickname" />
</div>
</el-col>
<el-col :span="24">
<div class="left">性别</div>
<div class="right">
<el-radio-group v-model="state.detail.gender">
<el-radio :label="0">女</el-radio>
<el-radio :label="1">男</el-radio>
</el-radio-group>
</div>
</el-col>
<el-col :span="24">
<div class="left">用户名</div>
<div class="right">
<el-input v-model="state.detail.username" placeholder="首位需为字母且不少五位">
<template #suffix>
<span v-html="statusStyle('username')"></span>
</template>
</el-input>
</div>
</el-col>
<el-col :span="24">
<div class="left">密码</div>
<div class="right">
<el-input v-model="state.detail.password" placeholder="不修改则留空">
<template #suffix>
<span v-html="statusStyle('password')"></span>
</template>
</el-input>
</div>
</el-col>
<el-col :span="24">
<div class="left">手机号</div>
<div class="right">
<el-input v-model="state.detail.mobile" type="number">
<template #suffix>
<span v-html="statusStyle('mobile')"></span>
</template>
</el-input>
</div>
</el-col>
<el-col :span="24">
<div class="left">电子邮箱</div>
<div class="right">
<el-input v-model="state.detail.email">
<template #suffix>
<span v-html="statusStyle('email')"></span>
</template>
</el-input>
</div>
</el-col>
<el-col :span="24">
<div class="left">状态</div>
<div class="right">
<el-radio-group v-model="state.detail.status">
<el-radio label="normal">正常</el-radio>
<el-radio label="disabled">禁用</el-radio>
</el-radio-group>
</div>
</el-col>
<el-col :span="24">
<div class="right sa-flex sa-row-right">
<el-button @click="getDetail">重置</el-button>
{if $auth->check('shopro/user/user/edit')}
<el-button type="primary" @click="onSave">保存修改</el-button>
{/if}
</div>
</el-col>
</el-row>
</div>
</div>
<!-- 第三方账号绑定 -->
<div v-if="state.detail.third_oauth?.length > 0">
<div class="card-title">第三方账号绑定</div>
<div class="card-section third-oauth">
<div class="info">
<div class="provider-item sa-flex sa-row-between"
v-for="item in state.detail.third_oauth" :key="item.id">
<div class="sa-flex">
<img class="provider-platform"
:src="`/assets/addons/shopro/img/user/${item.provider}/${item.platform}.png`" />
<span class="ml-2">
{{ platform[item.provider]?.[item.platform] || item.platform }}
</span>
</div>
<el-popover popper-class="sa-popper" placement="top-start" trigger="hover">
<div>
<div>登录次数:{{ item.login_num }}</div>
<div>Openid:{{ item.openid }}</div>
<div v-if="item.unionid">Unionid:{{ item.unionid }}</div>
<div>更新时间:{{ item.updatetime }}</div>
</div>
<template #reference>
<div class="sa-flex">
<sa-image :url="item.avatar" size="28"></sa-image>
<span class="name ml-2">{{ item.nickname }}</span>
</div>
</template>
</el-popover>
</div>
</div>
</div>
</div>
</el-col>
<!-- 右列:二开身份权益、四大资产看板、全能动态流水 -->
<el-col class="sa-col-24" :xs="24" :sm="24" :md="17" :lg="17" :xl="17">
<!-- 看板 1:业务身份与二开权益体系 -->
<div class="card-title">
<span>业务身份与二开权益体系</span>
<span v-if="state.detail.has_agent" style="font-size: 12px; font-weight: normal; color: var(--sa-subfont);">
直推有效单数: {{ state.detail.direct_order_seq || 0 }} 单
</span>
</div>
<div class="card-section">
<div class="info">
<el-row :gutter="16">
<el-col :xs="24" :sm="12" :md="12">
<div class="left">推荐人 / 直属上级</div>
<div class="right sa-flex">
<sa-user-profile type="agent" :user="state.detail.parent_user"
:id="state.detail.parent_user_id"></sa-user-profile>
<el-button v-if="state.detail.parent_user_id" class="ml-2" type="primary" link
@click="onOpenUserDetail(state.detail.parent_user_id)">
查看上级
</el-button>
{if $is_pro}
<el-button class="ml-2" type="warning" link @click="onChangeParentUser">
更换
</el-button>
{/if}
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="12">
<div class="left">主业务身份</div>
<div class="right">
<b style="font-size: 15px;">{{ state.detail.identity_text || '普通注册会员' }}</b>
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="12">
<div class="left">30天自购活跃窗口(风控硬性门槛)</div>
<div class="right sa-flex sa-col-center">
<i class="active-dot" :class="state.detail.active_30d ? 'is-on' : 'is-off'"></i>
<span>{{ state.detail.active_status_text }}</span>
</div>
<div class="asset-card-desc">
最近自购: {{ state.detail.last_self_order_text }}
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="12">
<div class="left">直推「推三返一」循环进度</div>
<div class="right">
<span style="color: #e6a23c; font-weight: 600;">
第 {{ state.detail.push3_cycle_index || 1 }} 档 (398/400/600循环)
</span>
<span class="ml-2" style="font-size: 12px; color: var(--sa-subfont);">
{{ state.detail.next_push3_text }}
</span>
</div>
<div class="asset-card-desc">
累计获得推三返一: ¥{{ state.detail.push3_cash_income || '0.00' }}
</div>
</el-col>
<el-col :span="24">
<div class="left">身份权益徽章清单</div>
<div class="right sa-flex sa-flex-wrap" style="gap: 8px;">
<el-tag v-if="state.detail.level == 1" type="info">
品酒师 (基础会员·享推三返一/GMV分红/1.5倍券)
</el-tag>
<el-tag v-if="state.detail.level >= 2" type="primary">
创客 V{{ state.detail.level - 1 }} (合伙骨干·享极差/平级10%/超越5%)
</el-tag>
<el-tag v-if="state.detail.is_venue" type="success">
酒道馆 (线下实体枢纽·享50元/单团队奖+100元均分池)
</el-tag>
<el-tag v-if="state.detail.is_county" type="warning">
区县代理 (区域领头人·享团队拆分奖+50元均分池)
</el-tag>
<el-tag v-if="state.detail.is_partner" type="danger">
合伙股东 (独立高阶合伙身份·享顶层红利)
</el-tag>
</div>
</el-col>
</el-row>
</div>
</div>
<!-- 看板 2:二开收益中心四大资产核心中枢 -->
<div class="card-title">二开核心资产中枢</div>
<div class="card-section">
<el-row :gutter="12">
<!-- 资产 1: 收益中心 -->
<el-col :xs="24" :sm="12" :md="6">
<div class="asset-card-box">
<div class="asset-card-label">收益中心累计收益 (元)</div>
<div class="asset-card-num" style="color: #409eff;">
¥{{ state.detail.total_income || state.detail.income_total_cash || '0.00' }}
</div>
<div class="asset-card-desc">
当前商城余额: ¥{{ state.detail.money || '0.00' }}
</div>
<div class="asset-card-desc">
历史未转佣金: ¥{{ state.detail.commission || '0.00' }}
</div>
</div>
</el-col>
<!-- 资产 2: 分红dmepa -->
<el-col :xs="24" :sm="12" :md="6">
<div class="asset-card-box">
<div class="asset-card-label sa-flex sa-row-between" style="display: flex; justify-content: space-between; align-items: center;">
<span>分红dmepa</span>
{if $auth->check('shopro/user/user/recharge')}
<el-button type="success" link size="small" @click="onRecharge('madow')">充值/扣除</el-button>
{/if}
</div>
<div class="asset-card-num" style="color: #67c23a;">
{{ state.detail.madow || 0 }} <span style="font-size: 13px;">枚</span>
</div>
<div class="asset-card-desc">
当前估值: ¥{{ state.detail.madow_value || '0.00' }}
</div>
<div class="asset-card-desc">
实时汇率: {{ state.detail.madow_rate || '0.00000075' }}
</div>
</div>
</el-col>
<!-- 资产 3: 商城兑换券 -->
<el-col :xs="24" :sm="12" :md="6">
<div class="asset-card-box">
<div class="asset-card-label sa-flex sa-row-between" style="display: flex; justify-content: space-between; align-items: center;">
<span>商城可用兑换券</span>
{if $auth->check('shopro/user/user/recharge')}
<el-button type="warning" link size="small" @click="onRecharge('voucher')">充值/扣除</el-button>
{/if}
</div>
<div class="asset-card-num" style="color: #e6a23c;">
{{ state.detail.voucher_available || '0.00' }} 个
</div>
<div class="asset-card-desc">
计划总额: {{ state.detail.voucher_total || '0.00' }} 个
</div>
<div class="asset-card-desc">
已释放: {{ state.detail.voucher_released || '0.00' }} 个 / 已用: {{ state.detail.voucher_used || '0.00' }} 个
</div>
</div>
</el-col>
<!-- 资产 4: 基础钱包与消费 -->
<el-col :xs="24" :sm="12" :md="6">
<div class="asset-card-box">
<div class="asset-card-label sa-flex sa-row-between" style="display: flex; justify-content: space-between; align-items: center;">
<span>商城余额 / 积分</span>
{if $auth->check('shopro/user/user/recharge')}
<div>
<el-button type="primary" link size="small" @click="onRecharge('money')">充余额</el-button>
<el-button type="primary" link size="small" @click="onRecharge('score')">充积分</el-button>
</div>
{/if}
</div>
<div class="asset-card-num" style="color: #303133;">
¥{{ state.detail.money || '0.00' }}
</div>
<div class="asset-card-desc">
商城积分: {{ state.detail.score || 0 }}
</div>
<div class="asset-card-desc">
累计消费: ¥{{ state.detail.total_consume || '0.00' }}
</div>
</div>
</el-col>
</el-row>
</div>
<!-- 看板 3:全能用户动态与流水明细 -->
<div class="card-title sa-flex sa-row-between">
<span>全能动态与业务流水</span>
<div v-if="log.tabActive == 'partner_reward'" class="sa-flex sa-col-center">
<el-checkbox v-model="log.showSkip" @change="onChangeTab">
显示未发放/跳过原因记录
</el-checkbox>
</div>
</div>
<div class="card-section log">
<div class="bottom">
<el-tabs v-model="log.tabActive" @tab-change="onChangeTab">
<el-tab-pane label="收益中心流水" name="partner_reward"></el-tab-pane>
<el-tab-pane label="兑换券释放计划" name="voucher_plan"></el-tab-pane>
<el-tab-pane label="直推团队成员" name="team"></el-tab-pane>
<el-tab-pane label="佣金与收益流水" name="commission"></el-tab-pane>
<el-tab-pane label="余额记录" name="money"></el-tab-pane>
<el-tab-pane label="积分记录" name="score"></el-tab-pane>
<el-tab-pane label="商城订单" name="order"></el-tab-pane>
<el-tab-pane label="分享记录" name="share"></el-tab-pane>
<el-tab-pane label="优惠券明细" name="coupon"></el-tab-pane>
</el-tabs>
<!-- Tab 1: 收益中心流水 (二开核心) -->
<el-table v-if="log.tabActive == 'partner_reward'" height="460" class="sa-table" :data="log.data" stripe>
<el-table-column prop="createtime" label="入账时间" width="165"></el-table-column>
<el-table-column prop="reward_type_text" label="奖项类型" min-width="120">
<template #default="scope">
<el-tag size="small">{{ scope.row.reward_type_text || scope.row.reward_type }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="role_text" label="受益角色" min-width="100"></el-table-column>
<el-table-column prop="amount" label="结算金额" min-width="100">
<template #default="scope">
<b :style="{ color: scope.row.amount > 0 ? '#67c23a' : '#909399' }">
¥{{ scope.row.amount }}
</b>
</template>
</el-table-column>
<el-table-column label="入账账户" min-width="110">
<template #default="scope">
<el-tag size="small" :type="scope.row.wallet_type === 'money' ? 'success' : (scope.row.wallet_type === 'madow' ? 'primary' : (scope.row.wallet_type === 'commission' ? 'warning' : 'info'))">
{{ scope.row.wallet_type_text || (Number(scope.row.amount) > 0 ? '商城余额' : (Number(scope.row.madow) > 0 ? '分红dmepa' : '消费补贴')) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="madow" label="结算dmepa" min-width="90"></el-table-column>
<el-table-column label="买家" min-width="140">
<template #default="scope">
<sa-user-profile v-if="scope.row.buyer" :user="scope.row.buyer" :id="scope.row.buyer_id"></sa-user-profile>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="关联订单" min-width="150">
<template #default="scope">
<span>{{ scope.row.order?.order_sn || scope.row.order_id || '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="status_text" label="状态" min-width="90">
<template #default="scope">
<el-tag size="small" :type="scope.row.status == 1 ? 'success' : (scope.row.status == -1 ? 'info' : 'danger')">
{{ scope.row.status_text || (scope.row.status == 1 ? '已入账' : (scope.row.status == -1 ? '未发放' : '其他')) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="测算摘要 / 跳过原因" min-width="180" show-overflow-tooltip>
<template #default="scope">
<span>{{ scope.row.formula || scope.row.ext?.formula || scope.row.ext?.skip_reason || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="80" fixed="right">
<template #default="scope">
<el-button type="primary" link @click="onShowFormula(scope.row)">明细</el-button>
</template>
</el-table-column>
</el-table>
<!-- Tab 2: 兑换券释放计划 (二开核心) -->
<el-table v-if="log.tabActive == 'voucher_plan'" height="460" class="sa-table" :data="log.data" stripe>
<el-table-column prop="id" label="计划ID" width="80"></el-table-column>
<el-table-column label="订单号" min-width="170">
<template #default="scope">
{{ scope.row.order?.order_sn || scope.row.order_id || '-' }}
</template>
</el-table-column>
<el-table-column prop="total_fee" label="计划总额" min-width="110">
<template #default="scope">
<b>{{ scope.row.total_fee }} 个</b>
</template>
</el-table-column>
<el-table-column prop="day_amount" label="每日释放" min-width="100">
<template #default="scope">
{{ scope.row.day_amount }} 个
</template>
</el-table-column>
<el-table-column label="释放进度" min-width="140">
<template #default="scope">
<el-progress :percentage="Math.min(100, Math.round(((scope.row.days_released || 0) / (scope.row.total_days || 365)) * 100))"></el-progress>
<div style="font-size: 11px; color: var(--sa-subfont); margin-top: 2px;">
第 {{ scope.row.days_released || 0 }} / {{ scope.row.total_days || 365 }} 天
</div>
</template>
</el-table-column>
<el-table-column label="已释放" min-width="110">
<template #default="scope">
{{ scope.row.released_amount }} 个
</template>
</el-table-column>
<el-table-column prop="voucher_available" label="当前可用" min-width="110">
<template #default="scope">
<span style="color: #67c23a; font-weight: 600;">{{ scope.row.voucher_available }} 个</span>
</template>
</el-table-column>
<el-table-column prop="start_date" label="开始日期" width="120"></el-table-column>
<el-table-column prop="status_text" label="状态" width="100">
<template #default="scope">
<el-tag size="small" :type="scope.row.status == 'running' ? 'success' : (scope.row.status == 'finished' ? 'info' : 'danger')">
{{ scope.row.status_text || scope.row.status }}
</el-tag>
</template>
</el-table-column>
</el-table>
<!-- Tab 3: 直推团队成员 (二开核心) -->
<el-table v-if="log.tabActive == 'team'" height="460" class="sa-table" :data="log.data" stripe>
<el-table-column prop="id" label="ID" width="80"></el-table-column>
<el-table-column label="下级成员" min-width="160">
<template #default="scope">
<sa-user-profile :user="scope.row" :id="scope.row.id"></sa-user-profile>
</template>
</el-table-column>
<el-table-column prop="mobile" label="手机号" min-width="120"></el-table-column>
<el-table-column label="业务身份" min-width="160">
<template #default="scope">
<div>{{ scope.row.identity_text || '普通会员' }}</div>
</template>
</el-table-column>
<el-table-column prop="total_consume" label="累计消费" min-width="110">
<template #default="scope">
¥{{ scope.row.total_consume }}
</template>
</el-table-column>
<el-table-column prop="createtime" label="注册时间" width="165"></el-table-column>
<el-table-column label="操作" width="100" fixed="right">
<template #default="scope">
<el-button type="primary" link @click="onOpenUserDetail(scope.row.id)">
查看详情
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 原生 Tab 4/5/6: 佣金/余额/积分 -->
<el-table
v-if="log.tabActive=='money' || log.tabActive=='score' || log.tabActive=='commission'"
height="460" class="sa-table" :data="log.data" stripe>
<el-table-column prop="createtime" label="交易时间" width="172"></el-table-column>
<el-table-column prop="amount" label="变动金额/积分" min-width="120"></el-table-column>
<el-table-column prop="before" label="变动前" min-width="120"></el-table-column>
<el-table-column prop="after" label="变动后" min-width="120"></el-table-column>
<el-table-column label="钱包类别" min-width="110" v-if="log.tabActive=='commission'">
<template #default="scope">
<el-tag size="small" :type="scope.row.type == 'money' ? 'success' : 'warning'">
{{ scope.row.type == 'money' ? '商城余额' : '佣金钱包' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作人" min-width="160">
<template #default="scope">
<sa-user-profile type="oper" :user="scope.row.oper" :id="scope.row.oper_id">
</sa-user-profile>
</template>
</el-table-column>
<el-table-column label="备注" min-width="160">
<template #default="scope">
{{ scope.row.event_text }}{{ scope.row.memo ? ':' + scope.row.memo : '' }}
</template>
</el-table-column>
</el-table>
<!-- 原生 Tab 7: 商城订单 -->
<el-table v-if="log.tabActive=='order'" height="460" class="sa-table" :data="log.data" stripe>
<el-table-column prop="createtime" label="下单时间" min-width="165"></el-table-column>
<el-table-column prop="order_sn" label="订单号" min-width="200"></el-table-column>
<el-table-column prop="platform_text" label="订单来源" min-width="100"></el-table-column>
<el-table-column prop="type_text" label="订单类型" min-width="100"></el-table-column>
<el-table-column prop="order_amount" label="总金额" min-width="110"></el-table-column>
<el-table-column prop="total_discount_fee" label="优惠" min-width="90"></el-table-column>
<el-table-column prop="pay_fee" label="实付金额" min-width="110">
<template #default="scope">
<b style="color: #67c23a;">¥{{ scope.row.pay_fee }}</b>
</template>
</el-table-column>
<el-table-column prop="status_text" label="订单状态" min-width="100"></el-table-column>
</el-table>
<!-- 原生 Tab 8: 分享记录 -->
<el-table v-if="log.tabActive=='share'" height="460" class="sa-table" :data="log.data" stripe>
<el-table-column prop="createtime" label="分享时间" width="165"></el-table-column>
<el-table-column label="被分享用户" min-width="160">
<template #default="scope">
<sa-user-profile :user="scope.row.user" :id="scope.row.user_id"></sa-user-profile>
</template>
</el-table-column>
<el-table-column prop="from_text" label="分享类型" min-width="120"></el-table-column>
<el-table-column prop="platform_text" label="平台" min-width="110"></el-table-column>
</el-table>
<!-- 原生 Tab 9: 优惠券明细 -->
<el-table v-if="log.tabActive=='coupon'" height="460" class="sa-table" :data="log.data" stripe>
<el-table-column label="优惠券名称" min-width="160">
<template #default="scope">
<div class="sa-line-1">{{ scope.row.coupon?.name || '-' }}</div>
</template>
</el-table-column>
<el-table-column label="面额" min-width="100">
<template #default="scope">
<div>¥{{ scope.row.coupon?.amount || '-' }}</div>
</template>
</el-table-column>
<el-table-column prop="status_text" label="状态" min-width="100"></el-table-column>
<el-table-column prop="createtime" label="领取时间" width="165"></el-table-column>
<el-table-column prop="use_time" label="使用时间" width="165"></el-table-column>
</el-table>
<el-footer class="sa-flex sa-row-right mt-2">
<sa-pagination v-model="pagination" @pagination-change="getLog"></sa-pagination>
</el-footer>
</div>
</div>
</el-col>
</el-row>
</el-scrollbar>
</el-main>
</el-container>
<!-- 奖励测算公式与跳过原因详情弹窗 -->
<el-dialog v-model="formulaDialog.visible" title="奖励测算公式与跳过记录详情" width="550px">
<div v-if="formulaDialog.row">
<div class="mb-3">
<span style="font-weight: 600;">奖项类型:</span>
<el-tag size="small">{{ formulaDialog.row.reward_type_text || formulaDialog.row.reward_type }}</el-tag>
</div>
<div class="mb-3">
<span style="font-weight: 600;">结算金额/dmepa:</span>
<b>¥{{ formulaDialog.row.amount }}</b>
<span v-if="formulaDialog.row.madow > 0" class="ml-2">({{ formulaDialog.row.madow }} 枚)</span>
</div>
<div class="mb-3" v-if="formulaDialog.row.ext?.skip_reason">
<span style="font-weight: 600; color: #e6a23c;">跳过/未发放原因:</span>
<el-tag type="warning" size="small">{{ formulaDialog.row.ext.skip_reason }}</el-tag>
</div>
<div class="mb-2" style="font-weight: 600;">公式摘要与上下文(ext):</div>
<div class="formula-box">
{{ JSON.stringify(formulaDialog.row.ext || formulaDialog.row.formula || {}, null, 2) }}
</div>
</div>
<template #footer>
<el-button type="primary" @click="formulaDialog.visible = false">关闭</el-button>
</template>
</el-dialog>
</div>