Files
2026-07-08 11:46:20 +08:00

345 lines
12 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title id="page-title">神彩算 - 我的分销</title>
<script src="../public/css/layui/layui.js"></script>
<script src="../config.js"></script>
<script src="../utils/ApiClient.js"></script>
<script src="../utils/DateUtil.js"></script>
<script src="../utils/CommonUtil.js"></script>
<link rel="stylesheet" href="../public/css/layui/css/layui.css" />
<link rel="stylesheet" href="../public/css/public.css" />
<link rel="stylesheet" href="../public/css/layout-fix.css" />
<link rel="stylesheet" href="../public/css/distribution.css" />
</head>
<body>
<!-- Header -->
<nav class="topbar" id="navbar">
<div class="topbar__inner">
<a href="index.html" class="topbar__brand">
<img
src="../images/home-logo.png"
alt="神彩算"
class="topbar__logo"
/>
</a>
<div class="topbar__nav" id="navLotteryItems">
<!-- <a href="index.html" class="topbar__nav-link">首页</a> -->
</div>
<div class="topbar__user">
<div id="notLoggedInBox" class="topbar__guest">
<a href="login.html" class="topbar__btn topbar__btn--ghost">登录</a>
<a href="reg.html" class="topbar__btn topbar__btn--primary"
>免费注册</a
>
</div>
<div id="loggedInBox" class="topbar__logged" style="display: none">
<a href="usercenter.html" class="topbar__profile">
<img
id="userAvatar"
src="../public/img/userimg.png"
alt=""
class="topbar__avatar"
/>
<div class="topbar__meta">
<span id="userName" class="topbar__uname">用户</span>
<span id="userLevel" class="topbar__ubadge">会员</span>
</div>
</a>
<button class="topbar__btn topbar__btn--logout" onclick="logout()">
退出登录
</button>
</div>
</div>
</div>
</nav>
<!-- Main Content -->
<main class="page-main">
<!-- Stats -->
<div class="stats-grid">
<div class="stat-card">
<div class="stat-label">下级总数</div>
<div class="stat-value">
<span id="totalSubordinates">0</span><span class="unit"></span>
</div>
</div>
<div class="stat-card">
<div class="stat-label">一级下级</div>
<div class="stat-value">
<span id="levelOneCount">0</span><span class="unit"></span>
</div>
</div>
<div class="stat-card">
<div class="stat-label">二级下级</div>
<div class="stat-value">
<span id="levelTwoCount">0</span><span class="unit"></span>
</div>
</div>
<div class="stat-card">
<div class="stat-label">分销收益</div>
<div class="stat-value">
<span id="distIncome">0.00</span><span class="unit"></span>
</div>
</div>
</div>
<!-- Table -->
<div class="table-section">
<div class="table-section-title">
<i class="layui-icon layui-icon-group"></i> 下级用户列表
</div>
<div class="promo-filter" id="distStatusFilter">
<button class="active" type="button" data-status="0">未转余额</button>
<button type="button" data-status="1">已转余额</button>
<button type="button" data-status="2">已提现</button>
</div>
<table id="distTable" lay-filter="distTable" lay-even></table>
<div id="distPage"></div>
</div>
</main>
<!-- Footer -->
<footer class="site-footer">
<div class="site-footer__inner">
<img
src="../images/home-logo.png"
alt="神彩算"
class="site-footer__logo"
/>
<p id="copyright-info">神彩算以开奖数据、免费文章、资讯推荐为核心</p>
<div class="site-footer__meta">
<a
id="beian"
href="https://beian.miit.gov.cn/"
target="_blank"
style="font-size: 12px; color: rgba(255, 255, 255, 0.5)"
>工信部备案号</a
>
<span id="additional-info">本站仅供数据分析参考</span>
</div>
</div>
</footer>
<button
class="gotop"
id="backTop"
type="button"
onclick="window.scrollTo({ top: 0, behavior: 'smooth' })"
>
</button>
<script>
layui.use(["layer", "jquery", "table", "laypage"], function () {
var layer = layui.layer;
var $ = layui.$;
var table = layui.table;
var laypage = layui.laypage;
var currentPage = 1;
var pageSize = 20;
var currentStatus = 0;
// Load page config
CommonUtil.loadPageConfig({ ads: false, links: false });
// Check login state for topbar
checkLogin();
renderNav();
// Check auth and load data
CommonUtil.requireAuth(function () {
loadUserDetail();
loadDistList(1);
});
function checkLogin() {
var token = CommonUtil.getToken();
if (token) {
$("#notLoggedInBox").hide();
$("#loggedInBox").css("display", "flex");
CommonUtil.getCurrentUserDetail(
function (data) {
if (data) {
$("#userName").text(data.nickName || "用户");
$("#userLevel").text(data.isExpert === "1" ? "专家" : "会员");
if (data.avatar) {
$("#userAvatar").attr("src", data.avatar);
}
}
},
function () {
$("#notLoggedInBox").show();
$("#loggedInBox").hide();
},
);
}
}
function renderNav() {
ApiClient.loadMenuCompat().then(
function (res) {
if (res.code !== 0 || !res.data) return;
var $nav = $("#navLotteryItems");
$nav.find(".topbar__nav-link").not(":first").remove();
$.each(res.data, function (i, item) {
$nav.append(
'<a href="cai.html?id=' +
item.suoxie +
'" class="topbar__nav-link">' +
item.name +
"</a>",
);
});
},
);
}
$(window).on("scroll", function () {
$(window).scrollTop() > 320
? $("#backTop").addClass("is-visible")
: $("#backTop").removeClass("is-visible");
});
function loadUserDetail() {
CommonUtil.getCurrentUserDetail(function (data) {
if (!data) return;
$("#totalSubordinates").text(data.totalSubordinates || 0);
$("#levelOneCount").text(data.levelOneCount || 0);
$("#levelTwoCount").text(data.levelTwoCount || 0);
$("#distIncome").text((data.distributionIncome || 0).toFixed(2));
});
}
function loadDistList(pageNum) {
currentPage = pageNum;
ApiClient.get(
ApiClient.API.referralRebateList,
{
pageNum: pageNum,
pageSize: pageSize,
status: currentStatus,
},
{
headers: CommonUtil.authHeaders(),
},
)
.then(function (res) {
if (res.code === 0 && res.data) {
var records = ApiClient.asArray(res.data.records || res.data.rows || res.data.list || res.data);
renderTable(records);
renderPagination(res.data.total || res.data.totalRow || records.length || 0);
} else {
layer.msg(res.msg || "获取数据失败", { icon: 2 });
}
})
.catch(function (err) {
layer.msg("网络错误,请稍后重试", { icon: 2 });
});
}
function renderTable(records) {
if (records.length === 0) {
$("#distTable").replaceWith(
'<div class="empty-state"><i class="layui-icon layui-icon-group"></i><p>暂无下级用户</p></div>',
);
return;
}
table.render({
elem: "#distTable",
cols: [
[
{ field: "id", title: "记录ID", width: 140, align: "center" },
{
field: "nickName",
title: "订阅用户",
width: 160,
align: "center",
templet: function (d) {
return CommonUtil.escapeHtml(d.nickName || d.userName || d.inviteeName || "--");
},
},
{
field: "articleTitle",
title: "文章/彩种",
minWidth: 180,
align: "center",
templet: function (d) {
return CommonUtil.escapeHtml(d.menuName || d.articleTitle || d.title || "--");
},
},
{
field: "expertName",
title: "专家",
width: 140,
align: "center",
templet: function (d) {
return CommonUtil.escapeHtml(d.nickNameExpert || d.expertName || "--");
},
},
{
field: "amount",
title: "订阅价格",
width: 130,
align: "center",
templet: function (d) {
return CommonUtil.escapeHtml(d.subscriptionPrice || d.orderAmount || d.amount || "0.00");
},
},
{
field: "rebateMoney",
title: "分销金额",
width: 130,
align: "center",
templet: function (d) {
return '<span style="color:#f15a22;font-weight:600;">' + CommonUtil.escapeHtml(d.rebateMoney || d.rebateAmount || d.money || "0.00") + "</span>";
},
},
{
field: "status",
title: "状态",
width: 130,
align: "center",
templet: function (d) {
var statusMap = { 0: "未转余额", 1: "已转余额", 2: "已提现" };
return CommonUtil.escapeHtml(d.statusText || statusMap[d.status] || statusMap[d.withdrawStatus] || "--");
},
},
],
],
data: records,
even: true,
skin: "line",
size: "lg",
});
}
function renderPagination(total) {
if (total <= pageSize) return;
laypage.render({
elem: "distPage",
count: total,
limit: pageSize,
curr: currentPage,
theme: "#102b6a",
jump: function (obj, first) {
if (!first) {
loadDistList(obj.curr);
}
},
});
}
$("#distStatusFilter").on("click", "button", function () {
$("#distStatusFilter button").removeClass("active");
$(this).addClass("active");
currentStatus = Number($(this).data("status")) || 0;
loadDistList(1);
});
});
</script>
</body>
</html>