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

200 行
9.5 KiB
HTML

{include file="/shopro/common/script" /}
<style>
.user-index .stats-row {
margin-bottom: 12px;
}
.user-index .stat-card {
background: #f8fafc;
border: 1px solid var(--sa-border);
border-radius: 6px;
padding: 10px 14px;
display: flex;
flex-direction: column;
justify-content: center;
}
.user-index .stat-title {
font-size: 12px;
color: var(--sa-subfont);
margin-bottom: 4px;
}
.user-index .stat-num {
font-size: 18px;
font-weight: 600;
color: var(--sa-title);
}
.user-index .active-dot {
display: inline-block;
width: 8px;
height: 8px;
border-radius: 50%;
margin-right: 6px;
}
.user-index .active-dot.is-on {
background: #52c41a;
}
.user-index .active-dot.is-off {
background: #c0c4cc;
}
.user-index .asset-sub {
font-size: 11px;
color: var(--sa-subfont);
margin-top: 2px;
}
.user-index .badge-group {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-top: 4px;
}
</style>
<div id="index" class="user-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>
<sa-filter-condition v-model="state.filter" @filter-delete="onChangeFilter">
</sa-filter-condition>
</div>
<div class="sa-title-right">
<el-button class="sa-button-refresh" icon="RefreshRight" @click="getData"></el-button>
<el-button class="sa-button-refresh" icon="Search" @click="onOpenFilter"></el-button>
</div>
</div>
<!-- 数据看板概览 -->
<el-row :gutter="12" class="stats-row">
<el-col :xs="12" :sm="8" :md="4">
<div class="stat-card">
<div class="stat-title">全平台会员数</div>
<div class="stat-num">{{ state.stats.total_users || 0 }}</div>
</div>
</el-col>
<el-col :xs="12" :sm="8" :md="4">
<div class="stat-card">
<div class="stat-title">创客团队骨干</div>
<div class="stat-num" style="color: #409eff;">{{ state.stats.maker_count || 0 }}</div>
</div>
</el-col>
<el-col :xs="12" :sm="8" :md="4">
<div class="stat-card">
<div class="stat-title">线下酒道馆</div>
<div class="stat-num" style="color: #67c23a;">{{ state.stats.venue_count || 0 }}</div>
</div>
</el-col>
<el-col :xs="12" :sm="8" :md="4">
<div class="stat-card">
<div class="stat-title">区县代理总数</div>
<div class="stat-num" style="color: #e6a23c;">{{ state.stats.county_count || 0 }}</div>
</div>
</el-col>
<el-col :xs="12" :sm="8" :md="4">
<div class="stat-card">
<div class="stat-title">合伙股东总数</div>
<div class="stat-num" style="color: #f56c6c;">{{ state.stats.partner_count || 0 }}</div>
</div>
</el-col>
<el-col :xs="12" :sm="8" :md="4">
<div class="stat-card">
<div class="stat-title">30日自购活跃</div>
<div class="stat-num" style="color: #52c41a;">{{ state.stats.active_count || 0 }}</div>
</div>
</el-col>
</el-row>
</el-header>
<el-main class="sa-main">
<el-table height="100%" class="sa-table" :data="state.data" stripe @sort-change="onChangeSort">
<el-table-column prop="id" label="ID" min-width="80" sortable="custom"> </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>
<div class="asset-sub">{{ scope.row.mobile || scope.row.username || '' }}</div>
</template>
</el-table-column>
<el-table-column label="推荐人" min-width="140">
<template #default="scope">
<sa-user-profile type="agent" :user="scope.row.parent_user" :id="scope.row.parent_user_id"></sa-user-profile>
</template>
</el-table-column>
<el-table-column label="业务身份" min-width="190">
<template #default="scope">
<div style="font-weight: 500;">{{ scope.row.identity_text || '普通会员' }}</div>
<div class="badge-group">
<el-tag v-if="scope.row.level == 1" size="small" type="info">品酒师</el-tag>
<el-tag v-if="scope.row.level >= 2" size="small" type="primary">创客 V{{ scope.row.level - 1 }}</el-tag>
<el-tag v-if="scope.row.is_venue" size="small" type="success">酒道馆</el-tag>
<el-tag v-if="scope.row.is_county" size="small" type="warning">区县代理</el-tag>
<el-tag v-if="scope.row.is_partner" size="small" type="danger">合伙股东</el-tag>
</div>
</template>
</el-table-column>
<el-table-column label="30日自购活跃" min-width="110">
<template #default="scope">
<template v-if="scope.row.is_advanced">
<span class="sa-flex sa-col-center">
<i class="active-dot" :class="scope.row.active_30d ? 'is-on' : 'is-off'"></i>
{{ scope.row.active_30d ? '正常领奖' : '已暂停' }}
</span>
</template>
<template v-else>
<el-tag size="small" type="info" effect="plain">免考核</el-tag>
</template>
</template>
</el-table-column>
<el-table-column label="收益中心资产" min-width="190">
<template #default="scope">
<div><span class="asset-sub">累计收益:</span> <b style="color: #409eff;">¥{{ scope.row.total_income || scope.row.income_total_cash || '0.00' }}</b></div>
<div class="asset-sub">商城余额: ¥{{ scope.row.money || '0.00' }}</div>
<div class="asset-sub">未转佣金: ¥{{ scope.row.commission || '0.00' }}</div>
</template>
</el-table-column>
<el-table-column label="dmepa与补贴券" min-width="170">
<template #default="scope">
<div><span class="asset-sub">分红dmepa:</span> {{ scope.row.madow || 0 }} 颗</div>
<div class="asset-sub">dmepa估值: ¥{{ scope.row.madow_value || '0.00' }}</div>
<div class="asset-sub">可用券: {{ scope.row.voucher_available || '0.00' }} 个</div>
</template>
</el-table-column>
<el-table-column sortable="custom" prop="createtime" label="注册时间" min-width="165"></el-table-column>
<el-table-column fixed="right" label="操作" min-width="180">
<template #default="scope">
{if $auth->check('shopro/user/user/detail')}
<el-button type="primary" link @click="onDetail(scope.row.id, scope.row)">详情</el-button>
{/if}
<el-button v-if="scope.row.has_agent" type="success" link @click="onOpenAgentDetail(scope.row.id)">
收益档案
</el-button>
{if $auth->check('shopro/user/user/recharge')}
<el-button type="warning" link @click="onRecharge('money', scope.row.id)">
充值
</el-button>
{/if}
<el-popconfirm width="fit-content" confirm-button-text="确认" cancel-button-text="取消"
title="确认删除该会员记录?" @confirm="onDelete(scope.row.id)">
<template #reference>
{if $auth->check('shopro/user/user/delete')}
<el-button type="danger" link>删除</el-button>
{/if}
</template>
</el-popconfirm>
</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>
<sa-filter v-model="state.filter" @filter-change="onChangeFilter"></sa-filter>
</div>