Files
2026-07-29 17:14:15 +08:00

366 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>神彩算 - 大乐透走势图</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/trend.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>
<div class="breadcrumb-bigbox">
<div class="breadcrumb-bar">
<a href="javascript:history.back();"><i class="layui-icon layui-icon-left"></i> 返回</a>
<span>/</span>
<span>大乐透走势图</span>
</div>
<div class="page-title-bar">
<div class="page-title">大乐透走势图</div>
<div class="qishu">
<div class="qishu-but" data-count="10">10期</div>
<div class="qishu-but" data-count="20">20期</div>
<div class="qishu-but active" data-count="30">30期</div>
<div class="qishu-but" data-count="60">60期</div>
</div>
</div>
</div>
<div class="table-wrapper">
<table class="trend-table" border="1" id="trend-table">
<thead>
<tr>
<td rowspan="2" class="col-issue">期号</td>
<td rowspan="2" class="col-code">开奖号</td>
<td colspan="35" class="zone-front-header">前区</td>
<td colspan="12" class="zone-back-header">后区</td>
</tr>
<tr id="header-row"></tr>
</thead>
<tbody id="data-body"></tbody>
</table>
</div>
<!-- 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>
const $ = layui.$;
CommonUtil.loadPageConfig();
function checkLogin() {
var token = localStorage.getItem("token");
if (token) {
$("#notLoggedInBox").hide();
$("#loggedInBox").css("display", "flex");
CommonUtil.getCurrentUserDetail(
function (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");
});
checkLogin();
renderNav();
(function () {
var FRONT_MAX = 35,
BACK_MAX = 12;
var currentCount = 30;
var allData = [];
function buildHeader() {
var html = "";
for (var i = 1; i <= FRONT_MAX; i++) {
html += "<td>" + (i < 10 ? "0" + i : i) + "</td>";
}
for (var i = 1; i <= BACK_MAX; i++) {
html += "<td>" + (i < 10 ? "0" + i : i) + "</td>";
}
$("#header-row").html(html);
}
function parseCode(code) {
var parts = code.split("+");
var fronts = parts[0].split(",").map(function (n) {
return parseInt(n);
});
var backs = [];
for (var p = 1; p < parts.length; p++) {
if (parts[p])
backs = backs.concat(
parts[p].split(",").map(function (n) {
return parseInt(n);
}),
);
}
return { fronts: fronts, backs: backs };
}
function renderData(count) {
var data = allData.slice(Math.max(allData.length - count, 0));
var html = "";
for (var r = 0; r < data.length; r++) {
var item = data[r];
var parsed = parseCode(item.openCode);
var frontSet = {},
backSet = {};
parsed.fronts.forEach(function (n) {
frontSet[n] = true;
});
parsed.backs.forEach(function (n) {
backSet[n] = true;
});
html +=
r > 0 && r % 10 === 0
? '<tr class="trend-period-separator">'
: "<tr>";
html += '<td class="col-issue">' + item.issue + "</td>";
html += '<td class="col-code">' + CommonUtil.renderTrendOpenCode(item.openCode, { mode: "dlt" }) + "</td>";
for (var i = 1; i <= FRONT_MAX; i++) {
if (frontSet[i]) {
html +=
'<td><span class="hit-red">' +
(i < 10 ? "0" + i : i) +
"</span></td>";
} else {
html +=
'<td><span class="miss-num">' +
(i < 10 ? "0" + i : i) +
"</span></td>";
}
}
for (var i = 1; i <= BACK_MAX; i++) {
if (backSet[i]) {
html +=
'<td><span class="hit-blue">' +
(i < 10 ? "0" + i : i) +
"</span></td>";
} else {
html +=
'<td><span class="miss-num">' +
(i < 10 ? "0" + i : i) +
"</span></td>";
}
}
html += "</tr>";
}
html += buildStats(data);
$("#data-body").html(html);
}
function calcStats(data, maxNum, getNums) {
var count = {},
maxOmit = {},
currOmit = {},
maxConsec = {},
avgOmit = {};
for (var i = 1; i <= maxNum; i++) {
count[i] = 0;
maxOmit[i] = 0;
currOmit[i] = 0;
maxConsec[i] = 0;
avgOmit[i] = 0;
}
for (var i = 1; i <= maxNum; i++) {
var omit = 0,
mo = 0,
consec = 0,
mc = 0,
totalOmit = 0,
omitCount = 0;
for (var r = 0; r < data.length; r++) {
var nums = getNums(data[r]);
if (nums.indexOf(i) >= 0) {
count[i]++;
if (omit > mo) mo = omit;
totalOmit += omit;
omitCount++;
omit = 0;
consec++;
if (consec > mc) mc = consec;
} else {
omit++;
consec = 0;
}
}
if (omit > mo) mo = omit;
currOmit[i] = omit;
maxOmit[i] = mo;
maxConsec[i] = mc;
avgOmit[i] =
omitCount > 0 ? (totalOmit / omitCount).toFixed(1) : data.length;
}
return {
count: count,
maxOmit: maxOmit,
currOmit: currOmit,
maxConsec: maxConsec,
avgOmit: avgOmit,
};
}
function buildStats(data) {
var fs = calcStats(data, FRONT_MAX, function (d) {
return parseCode(d.openCode).fronts;
});
var bs = calcStats(data, BACK_MAX, function (d) {
return parseCode(d.openCode).backs;
});
var stats = "";
var labels = [
"出现次数",
"最大遗漏",
"平均遗漏",
"最大连出",
"当前遗漏",
];
var keys = ["count", "maxOmit", "avgOmit", "maxConsec", "currOmit"];
for (var li = 0; li < labels.length; li++) {
var cls = li % 2 === 0 ? "stat-row" : "stat-row alt";
stats +=
'<tr class="' +
cls +
'"><td colspan="2" class="stat-label">' +
labels[li] +
"</td>";
for (var i = 1; i <= FRONT_MAX; i++)
stats += "<td>" + fs[keys[li]][i] + "</td>";
for (var i = 1; i <= BACK_MAX; i++)
stats += "<td>" + bs[keys[li]][i] + "</td>";
stats += "</tr>";
}
return stats;
}
function loadData() {
ApiClient.requestLegacyLotteryResultCompat({ suoxie: "cjdlt" }).then(function (res) {
if (res && res.data) {
allData = Array.isArray(res.data) ? res.data : (res.data && (res.data.records || res.data.rows || res.data.list || res.data.data)) || [];
if (!Array.isArray(allData)) allData = [];
renderData(currentCount);
}
});
}
$(document).on("click", ".qishu-but", function () {
$(".qishu-but").removeClass("active");
$(this).addClass("active");
currentCount = parseInt($(this).data("count"));
renderData(currentCount);
});
buildHeader();
loadData();
})();
</script>
</body>
</html>