Help
RSS
API
Feed
Maltego
Contact
Domain > chwgame.cn
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-09-01
149.104.21.3
(
ClassC
)
2025-10-21
149.104.21.253
(
ClassC
)
Port 80
HTTP/1.1 200 OKServer: Starxn/starxn.comDate: Tue, 21 Oct 2025 11:15:03 GMTLast-Modified: Sun, 05 Oct 2025 18:13:06 GMTContent-Type: text/htmlX-Cache: MISS from Starxn for AFQAQContent-Length: 26189 !DOCTYPE html>html langzh-CN>head> meta charsetUTF-8> meta http-equivContent-Type contenttext/html; charsetutf-8> title>CHW GAME/title> link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css> style> body { font-family: Microsoft YaHei, 微软雅黑, SimHei, sans-serif; margin: 20px; background: #f5f5f5; min-width: 1200px; } .tab-container { max-width: 1400px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } .tab-buttons { margin-bottom: 15px; border-bottom: 2px solid #f0f0f0; display: flex; gap: 5px; } .tab-button { padding: 12px 32px; background: transparent; border: none; cursor: pointer; font-size: 16px; color: #666; transition: all 0.2s ease; border-radius: 6px 6px 0 0; position: relative; } .tab-button.active { color: #409EFF; background: rgba(64, 158, 255, 0.08); } .tab-button.active::after { content: ; position: absolute; bottom: -2px; left: 0; right: 0; height: 2px; background: #409EFF; } .sub-tab-buttons { margin: 15px 0 15px 20px; display: flex; gap: 8px; padding: 8px 0; border-bottom: 1px solid #eee; } .sub-tab-button { padding: 8px 24px; background: #f8f9fa; border: none; cursor: pointer; font-size: 14px; color: #666; border-radius: 20px; transition: all 0.2s ease; } .sub-tab-button.active { background: #409EFF; color: white; box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2); } .tab-content { display: none; padding: 20px; text-align: center; } .tab-content.active { display: block; animation: fadeIn 0.5s; } .sub-tab-content { display: none; } .sub-tab-content.active { display: block; animation: fadeIn 0.5s; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .tab-image-container { width: 100%; max-width: 100%; height: auto; display: flex; justify-content: center; align-items: center; overflow: hidden; } .tab-image { max-width: 100%; max-height: 80vh; height: auto; object-fit: contain; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } table { width: 100%; border-collapse: collapse; margin-top: 20px; font-size: 14px; table-layout: fixed; } th { background: #409EFF; color: white; padding: 12px; border: 1px solid #ddd; font-weight: bold; } td { padding: 10px; border: 1px solid #ddd; background: white; word-wrap: break-word; } tr:nth-child(even) td { background: #f8f9fa; } .loading { color: #909399; padding: 20px; text-align: center; font-size: 16px; } .error { color: #F56C6C; padding: 20px; text-align: center; font-size: 16px; } .statistics-row td { background-color: #e6f7ff; font-weight: bold; color: #333; } .statistics-row td:first-child { font-weight: bold; color: #409EFF; } .query-controls { margin: 10px 0; padding-left: 20px; display: flex; align-items: center; gap: 10px; } .flatpickr-input { padding: 8px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; width: 200px; } .query-controls button { padding: 8px 16px; background: #409EFF; border: none; color: white; border-radius: 4px; cursor: pointer; font-size: 14px; transition: background 0.2s; } .query-controls button:hover { background: #67C23A; } .chart-container { position: relative; width: 100%; height: 600px; max-width: 1000px; margin: 20px auto; padding: 15px; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } .chart-total { position: absolute; right: 20px; top: 20px; background: rgba(64, 158, 255, 0.1); padding: 8px 16px; border-radius: 20px; font-size: 16px; color: #409EFF; font-weight: bold; z-index: 10; } .chart-data-label { background: rgba(255,255,255,0.9); padding: 2px 5px; border-radius: 3px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); font-size: 10px; color: #409EFF; } /* 加载动画样式 */ .chart-loading { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.9); display: none; justify-content: center; align-items: center; flex-direction: column; z-index: 100; border-radius: 8px; } .loader { border: 3px solid #f3f3f3; border-top: 3px solid #409EFF; border-radius: 50%; width: 30px; height: 30px; animation: spin 1s linear infinite; } .loading-text { margin-top: 10px; color: #606266; font-size: 14px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /style>/head>body> div classtab-container> div classtab-buttons> button classtab-button active data-tabtab1>漯河/button> button classtab-button data-tabtab2>开封/button> /div> div idtab1 classtab-content active> div classsub-tab-buttons> button classsub-tab-button active data-sub-tabsub-tab1-1>店内现况/button> button classsub-tab-button data-sub-tabsub-tab1-2>营收查询/button> button classsub-tab-button data-sub-tabsub-tab1-3>本月总览/button> /div> div idsub-tab1-1 classsub-tab-content active> div classtab-image-container> img srchttps://chaohuiwan.oss-ap-northeast-2.aliyuncs.com/luohechw.jpg classtab-image alt漯河店内实时监控画面> /div> /div> div idsub-tab1-2 classsub-tab-content> div classquery-controls> input typetext classdate-picker idquery-date-luohe placeholder选择日期> button onclickcustomQuery(luohe)>查询/button> /div> table idrevenue-table-luohe> thead> tr> th stylewidth:8%>机台编号/th> th stylewidth:10%>操作类型/th> th stylewidth:18%>操作时间/th> th stylewidth:10%>入账数据1/th> th stylewidth:10%>入账数据2/th> th stylewidth:10%>是否打折/th> th stylewidth:12%>结账方式/th> th stylewidth:12%>收款金额/th> th stylewidth:10%>订单状态/th> /tr> /thead> tbody>/tbody> /table> /div> div idsub-tab1-3 classsub-tab-content> div classchart-container> div classchart-total idtotal-luohe>/div> div classchart-loading> div classloader>/div> div classloading-text>数据加载中.../div> /div> canvas idrevenue-chart-luohe>/canvas> /div> /div> /div> div idtab2 classtab-content> div classsub-tab-buttons> button classsub-tab-button active data-sub-tabsub-tab2-1>店内现况/button> button classsub-tab-button data-sub-tabsub-tab2-2>营收查询/button> button classsub-tab-button data-sub-tabsub-tab2-3>本月总览/button> /div> div idsub-tab2-1 classsub-tab-content active> div classtab-image-container> img srchttps://chaohuiwan.oss-ap-northeast-2.aliyuncs.com/kaifengchw.jpg classtab-image alt开封店内实时监控画面> /div> /div> div idsub-tab2-2 classsub-tab-content> div classquery-controls> input typetext classdate-picker idquery-date-kaifeng placeholder选择日期> button onclickcustomQuery(kaifeng)>查询/button> /div> table idrevenue-table-kaifeng> thead> tr> th stylewidth:8%>机台编号/th> th stylewidth:10%>操作类型/th> th stylewidth:18%>操作时间/th> th stylewidth:10%>入账数据1/th> th stylewidth:10%>入账数据2/th> th stylewidth:10%>是否打折/th> th stylewidth:12%>结账方式/th> th stylewidth:12%>收款金额/th> th stylewidth:10%>订单状态/th> /tr> /thead> tbody>/tbody> /table> /div> div idsub-tab2-3 classsub-tab-content> div classchart-container> div classchart-total idtotal-kaifeng>/div> div classchart-loading> div classloader>/div> div classloading-text>数据加载中.../div> /div> canvas idrevenue-chart-kaifeng>/canvas> /div> /div> /div> /div> script srchttps://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.js>/script> script srchttps://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/zh.js>/script> script srchttps://cdn.jsdelivr.net/npm/chart.js>/script> script srchttps://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0>/script> script> const chartInstances {}; let currentCity luohe; document.addEventListener(DOMContentLoaded, function() { initDatePickers(); bindTabEvents(); switchTab(tab1); }); function initDatePickers() { flatpickr(.date-picker, { mode: multiple, dateFormat: Y-m-d, defaultDate: today, allowInput: true, locale: zh, disableMobile: true }); } function bindTabEvents() { document.querySelectorAll(.tab-button).forEach(button > { button.addEventListener(click, function() { const tabId this.getAttribute(data-tab); switchTab(tabId); }); }); document.querySelectorAll(.sub-tab-button).forEach(button > { button.addEventListener(click, function() { const subTabId this.getAttribute(data-sub-tab); switchSubTab(subTabId); }); }); } function switchTab(tabId) { document.querySelectorAll(.tab-content).forEach(content > { content.classList.remove(active); }); document.querySelectorAll(.tab-button).forEach(button > { button.classList.remove(active); }); const activeTab document.getElementById(tabId); const activeButton document.querySelector(`.tab-buttondata-tab${tabId}`); if (activeTab) activeTab.classList.add(active); if (activeButton) activeButton.classList.add(active); currentCity tabId tab1 ? luohe : kaifeng; tabId tab1 ? switchSubTab(sub-tab1-1) : switchSubTab(sub-tab2-1); } function switchSubTab(subTabId) { document.querySelectorAll(.sub-tab-content).forEach(content > { content.classList.remove(active); }); document.querySelectorAll(.sub-tab-button).forEach(button > { button.classList.remove(active); }); const activeSubTab document.getElementById(subTabId); const activeSubButton document.querySelector(`.sub-tab-buttondata-sub-tab${subTabId}`); if (activeSubTab) activeSubTab.classList.add(active); if (activeSubButton) activeSubButton.classList.add(active); if (subTabId.endsWith(-2)) loadRevenueTable(currentCity, new Date()); if (subTabId.endsWith(-3)) renderRevenueChart(currentCity); } async function loadRevenueTable(city, dates) { const tableBody document.querySelector(`#revenue-table-${city} tbody`); tableBody.innerHTML tr>td colspan9 classloading>正在加载营业数据.../td>/tr>; try { let allTransactions ; for (const date of dates) { const transactions await fetchDailyTransactions(city, date); allTransactions allTransactions.concat(transactions); } if (allTransactions.length 0) { throw new Error(所选日期暂无营业数据); } renderTable(tableBody, allTransactions); } catch (error) { console.error(数据加载失败:, error); tableBody.innerHTML `tr>td colspan9 classerror>${error.message}/td>/tr>`; } } async function fetchDailyTransactions(city, date) { const currentYear date.getFullYear(); const fileName `${date.getMonth()+1}月${date.getDate()}日账单明细.ini`; const fileUrl city luohe ? `https://time-system.oss-cn-beijing.aliyuncs.com/luohechw/${currentYear}/${fileName}` : `https://time-system.oss-cn-beijing.aliyuncs.com/kaifengchw/${currentYear}/${fileName}`; try { const response await fetch(fileUrl, { cache: no-store, headers: { Cache-Control: no-store } }); if (!response.ok) return ; const buffer await response.arrayBuffer(); const decoder new TextDecoder(gb18030); return parseIniFile(decoder.decode(buffer)); } catch { return ; } } function renderTable(tableBody, transactions) { transactions.sort((a, b) > new Date(b.timestamp) - new Date(a.timestamp)); tableBody.innerHTML transactions.map(trans > ` tr> td>${trans.machineCode}/td> td>${trans.operationType}/td> td>${trans.timestamp}/td> td>${trans.duration}/td> td>${trans.people}/td> td>${trans.discount}/td> td>${trans.paymentMethod}/td> td>${trans.amount.toFixed(2)}元/td> td>span classstatus>${trans.status}/span>/td> /tr> `).join(); addStatisticsRow(tableBody, transactions); } function addStatisticsRow(tableBody, transactions) { const validData transactions.filter(t > t.status 正常); const total validData.reduce((sum, t) > sum + t.amount, 0); const row document.createElement(tr); row.className statistics-row; row.innerHTML ` td colspan3>统计汇总/td> td colspan3>总订单数:${validData.length}/td> td colspan3>合计金额:¥${total.toFixed(2)}/td> `; tableBody.appendChild(row); } function parseIniFile(text) { return text.split(\n) .filter(line > line.trim()) .map(line > { const indexPart, ...values line.split(); const fields values.join().split(,).map(f > f.trim()); if (fields.length ! 9) return null; return { machineCode: fields0.replace(编号:, ), operationType: fields1, timestamp: fields2, duration: fields3, people: fields4, discount: fields5, paymentMethod: fields6, amount: parseFloat(fields7) || 0, status: fields8 }; }) .filter(Boolean); } function customQuery(city) { const dateInput document.getElementById(`query-date-${city}`); const selectedDates dateInput._flatpickr.selectedDates; if (!selectedDates?.length) return alert(请至少选择一个日期); loadRevenueTable(city, selectedDates); } async function renderRevenueChart(city) { const canvasId `revenue-chart-${city}`; const totalElement document.getElementById(`total-${city}`); const chartContainer document.getElementById(canvasId).parentElement; const loadingElement chartContainer.querySelector(.chart-loading); const ctx document.getElementById(canvasId).getContext(2d); // 显示加载动画 loadingElement.style.display flex; // 如果存在旧实例则销毁 if (chartInstancescanvasId) { chartInstancescanvasId.destroy(); } try { const data await fetchMonthlyData(city); const totalAmount data.reduce((sum, d) > sum + d.amount, 0); totalElement.textContent `合计:¥${totalAmount.toFixed(2)}`; chartInstancescanvasId createChartInstance(ctx, data); } catch (error) { console.error(加载图表数据失败:, error); ctx.fillStyle #F56C6C; ctx.fillText(`数据加载失败: ${error.message}`, 50, 50); } finally { // 隐藏加载动画 loadingElement.style.display none; } } function createChartInstance(ctx, data) { return new Chart(ctx, { type: line, data: { labels: data.map(d > d.date), datasets: { label: 当日营收, data: data.map(d > d.amount), borderColor: #409EFF, backgroundColor: rgba(64, 158, 255, 0.1), tension: 0.4, pointRadius: 5, pointHoverRadius: 7, pointBackgroundColor: #fff, pointBorderColor: #409EFF, pointBorderWidth: 2 } }, options: { responsive: true, maintainAspectRatio: false, plugins: { title: { display: true, text: 本月营收总览, padding: 20, font: { size: 18 } }, datalabels: { anchor: end, align: top, formatter: value > value > 0 ? `¥${value}` : , color: #409EFF, font: { weight: bold, size: 10 }, padding: { top: 5 }, backgroundColor: rgba(255,255,255,0.9), borderRadius: 3, borderWidth: 1, borderColor: #eee }, legend: { display: false } }, scales: { y: { beginAtZero: true, grid: { color: #f5f5f5 }, ticks: { callback: value > `¥${value}`, padding: 10, font: { size: 12 } } }, x: { grid: { display: false }, ticks: { maxRotation: 0, padding: 10, font: { size: 12 } } } }, layout: { padding: { top: 30, right: 20, bottom: 20, left: 20 } } }, plugins: ChartDataLabels }); } async function fetchMonthlyData(city) { const today new Date(); const firstDay new Date(today.getFullYear(), today.getMonth(), 1); const lastDay new Date(today.getFullYear(), today.getMonth() + 1, 0); const dates ; let currentDate new Date(firstDay); while(currentDate lastDay) { dates.push(new Date(currentDate)); currentDate.setDate(currentDate.getDate() + 1); } const dailyData ; for (const date of dates) { try { const transactions await fetchDailyTransactions(city, date); const total transactions .filter(t > t.status 正常) .reduce((sum, t) > sum + t.amount, 0); dailyData.push({ date: formatChartDate(date), amount: total, fullDate: date }); } catch { dailyData.push({ date: formatChartDate(date), amount: 0, fullDate: date }); } } return dailyData; } function formatChartDate(date) { return `${(date.getMonth() + 1).toString().padStart(2, 0)}/${date.getDate().toString().padStart(2, 0)}`; } /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]