彩先知pc
This commit is contained in:
+421
@@ -0,0 +1,421 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>彩先知 - 福彩3D走势图</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/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-bar">
|
||||
<a href="javascript:history.back();"
|
||||
><i class="layui-icon layui-icon-left"></i> 返回</a
|
||||
>
|
||||
<span>/</span>
|
||||
<span>福彩3D走势图</span>
|
||||
</div>
|
||||
|
||||
<div class="page-title-bar">
|
||||
<div class="page-title">福彩3D走势图</div>
|
||||
<div class="qishu">
|
||||
<div class="qishu-but active" data-count="30">30期</div>
|
||||
<div class="qishu-but" data-count="60">60期</div>
|
||||
<div class="qishu-but" data-count="100">100期</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="3" rowspan="2" class="zone-type">类型</td>
|
||||
<td colspan="10" class="zone-hundred">百位</td>
|
||||
<td colspan="10" class="zone-ten">十位</td>
|
||||
<td colspan="10" class="zone-unit">个位</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.post("/api/web/menu/getFormatList", {}).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 currentCount = 30;
|
||||
var allData = [];
|
||||
|
||||
function buildHeader() {
|
||||
var html = "";
|
||||
for (var g = 0; g < 3; g++) {
|
||||
for (var i = 0; i <= 9; i++) html += "<td>" + i + "</td>";
|
||||
}
|
||||
$("#header-row").html(html);
|
||||
}
|
||||
|
||||
function parseCode(code) {
|
||||
var nums = code.split(",").map(function (n) {
|
||||
return parseInt(n);
|
||||
});
|
||||
return {
|
||||
hundred: nums[0] || 0,
|
||||
ten: nums[1] || 0,
|
||||
unit: nums[2] || 0,
|
||||
nums: nums,
|
||||
};
|
||||
}
|
||||
|
||||
function getType(h, t, u) {
|
||||
if (h === t && t === u) return "baozi";
|
||||
if (h === t || t === u || h === u) return "zu3";
|
||||
return "zu6";
|
||||
}
|
||||
|
||||
function renderData(count) {
|
||||
var data = allData.slice(0, count);
|
||||
var html = "";
|
||||
for (var r = 0; r < data.length; r++) {
|
||||
var item = data[r];
|
||||
var parsed = parseCode(item.openCode);
|
||||
var type = getType(parsed.hundred, parsed.ten, parsed.unit);
|
||||
|
||||
html += "<tr>";
|
||||
html += '<td class="col-issue">' + item.issue + "</td>";
|
||||
html += '<td class="col-code">' + item.openCode + "</td>";
|
||||
|
||||
// Type columns
|
||||
var typeNames = ["baozi", "zu3", "zu6"];
|
||||
var typeLabels = ["豹子", "组三", "组六"];
|
||||
for (var ti = 0; ti < 3; ti++) {
|
||||
if (type === typeNames[ti]) {
|
||||
html +=
|
||||
'<td><span class="type-' +
|
||||
typeNames[ti] +
|
||||
'">' +
|
||||
typeLabels[ti] +
|
||||
"</span></td>";
|
||||
} else {
|
||||
html +=
|
||||
'<td><span class="type-empty">' +
|
||||
typeLabels[ti] +
|
||||
"</span></td>";
|
||||
}
|
||||
}
|
||||
|
||||
// Hundred position
|
||||
for (var i = 0; i <= 9; i++) {
|
||||
if (parsed.hundred === i) {
|
||||
html += '<td><span class="hit-hundred">' + i + "</span></td>";
|
||||
} else {
|
||||
html += '<td><span class="miss-num">' + i + "</span></td>";
|
||||
}
|
||||
}
|
||||
// Ten position
|
||||
for (var i = 0; i <= 9; i++) {
|
||||
if (parsed.ten === i) {
|
||||
html += '<td><span class="hit-ten">' + i + "</span></td>";
|
||||
} else {
|
||||
html += '<td><span class="miss-num">' + i + "</span></td>";
|
||||
}
|
||||
}
|
||||
// Unit position
|
||||
for (var i = 0; i <= 9; i++) {
|
||||
if (parsed.unit === i) {
|
||||
html += '<td><span class="hit-unit">' + i + "</span></td>";
|
||||
} else {
|
||||
html += '<td><span class="miss-num">' + i + "</span></td>";
|
||||
}
|
||||
}
|
||||
html += "</tr>";
|
||||
}
|
||||
html += buildStats(data);
|
||||
$("#data-body").html(html);
|
||||
}
|
||||
|
||||
function calcPosStats(data, getVal) {
|
||||
var count = {},
|
||||
maxOmit = {},
|
||||
currOmit = {},
|
||||
maxConsec = {},
|
||||
avgOmit = {};
|
||||
for (var i = 0; i <= 9; i++) {
|
||||
count[i] = 0;
|
||||
maxOmit[i] = 0;
|
||||
currOmit[i] = 0;
|
||||
maxConsec[i] = 0;
|
||||
avgOmit[i] = 0;
|
||||
}
|
||||
for (var i = 0; i <= 9; i++) {
|
||||
var omit = 0,
|
||||
mo = 0,
|
||||
consec = 0,
|
||||
mc = 0,
|
||||
totalOmit = 0,
|
||||
oc = 0;
|
||||
for (var r = 0; r < data.length; r++) {
|
||||
if (getVal(data[r]) === i) {
|
||||
count[i]++;
|
||||
if (omit > mo) mo = omit;
|
||||
totalOmit += omit;
|
||||
oc++;
|
||||
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] = oc > 0 ? (totalOmit / oc).toFixed(1) : data.length;
|
||||
}
|
||||
return {
|
||||
count: count,
|
||||
maxOmit: maxOmit,
|
||||
currOmit: currOmit,
|
||||
maxConsec: maxConsec,
|
||||
avgOmit: avgOmit,
|
||||
};
|
||||
}
|
||||
|
||||
function calcTypeStats(data, typeName) {
|
||||
var count = 0,
|
||||
maxOmit = 0,
|
||||
currOmit = 0,
|
||||
maxConsec = 0,
|
||||
avgOmit = 0;
|
||||
var omit = 0,
|
||||
mo = 0,
|
||||
consec = 0,
|
||||
mc = 0,
|
||||
totalOmit = 0,
|
||||
oc = 0;
|
||||
for (var r = 0; r < data.length; r++) {
|
||||
var p = parseCode(data[r].openCode);
|
||||
var t = getType(p.hundred, p.ten, p.unit);
|
||||
if (t === typeName) {
|
||||
count++;
|
||||
if (omit > mo) mo = omit;
|
||||
totalOmit += omit;
|
||||
oc++;
|
||||
omit = 0;
|
||||
consec++;
|
||||
if (consec > mc) mc = consec;
|
||||
} else {
|
||||
omit++;
|
||||
consec = 0;
|
||||
}
|
||||
}
|
||||
if (omit > mo) mo = omit;
|
||||
return {
|
||||
count: count,
|
||||
maxOmit: mo,
|
||||
currOmit: omit,
|
||||
maxConsec: mc,
|
||||
avgOmit: oc > 0 ? (totalOmit / oc).toFixed(1) : data.length,
|
||||
};
|
||||
}
|
||||
|
||||
function buildStats(data) {
|
||||
var hs = calcPosStats(data, function (d) {
|
||||
return parseCode(d.openCode).hundred;
|
||||
});
|
||||
var ts = calcPosStats(data, function (d) {
|
||||
return parseCode(d.openCode).ten;
|
||||
});
|
||||
var us = calcPosStats(data, function (d) {
|
||||
return parseCode(d.openCode).unit;
|
||||
});
|
||||
var bz = calcTypeStats(data, "baozi");
|
||||
var z3 = calcTypeStats(data, "zu3");
|
||||
var z6 = calcTypeStats(data, "zu6");
|
||||
var labels = [
|
||||
"出现次数",
|
||||
"最大遗漏",
|
||||
"平均遗漏",
|
||||
"最大连出",
|
||||
"当前遗漏",
|
||||
];
|
||||
var keys = ["count", "maxOmit", "avgOmit", "maxConsec", "currOmit"];
|
||||
var typeStats = [bz, z3, z6];
|
||||
var stats = "";
|
||||
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>";
|
||||
// Type columns
|
||||
for (var ti = 0; ti < 3; ti++)
|
||||
stats += "<td>" + typeStats[ti][keys[li]] + "</td>";
|
||||
// Position columns
|
||||
for (var i = 0; i <= 9; i++)
|
||||
stats += "<td>" + hs[keys[li]][i] + "</td>";
|
||||
for (var i = 0; i <= 9; i++)
|
||||
stats += "<td>" + ts[keys[li]][i] + "</td>";
|
||||
for (var i = 0; i <= 9; i++)
|
||||
stats += "<td>" + us[keys[li]][i] + "</td>";
|
||||
stats += "</tr>";
|
||||
}
|
||||
return stats;
|
||||
}
|
||||
|
||||
function loadData() {
|
||||
ApiClient.post(
|
||||
"/api/web/lotteryResult/getList",
|
||||
{ suoxie: "fc3d" },
|
||||
function (res) {
|
||||
if (res && res.data) {
|
||||
allData = res.data;
|
||||
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>
|
||||
Reference in New Issue
Block a user