selenium_elm_fengshen/dist/templates/index.html

176 lines
5.2 KiB
HTML
Raw Permalink Normal View History

2024-07-22 13:45:14 +00:00
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Table Update Example</title>
<!-- 引入 xlsx 库 -->
<script src="https://cdn.bootcdn.net/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
</head>
<style>
/* 页面样式 */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
/* 表格样式 */
#data-table {
width: 95%; /* 减少一些边距 */
border-collapse: collapse;
border: 1px solid black;
margin: auto;
page-break-inside: avoid; /* 防止在表格内部分页 */
}
#data-table th,
#data-table td {
border: 1px solid black;
padding: 8px;
text-align: left;
}
#data-table th {
background-color: #f2f2f2;
}
/* 打印样式 */
@media print {
body, #data-table {
margin: 0;
}
#data-table {
width: 297mm; /* A4 paper width in landscape mode */
height: auto;
margin: 0 auto;
overflow-x: auto; /* 滚动条只在需要时出现 */
}
button {
display: none;
}
}
/* 打印按钮样式 */
button {
display: block;
margin: 1em auto;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
}
</style>
<body>
<button onclick="window.print()">打印数据</button>
<!-- 添加一个导出按钮 -->
<button onclick="exportToExcel()">导出到Excel</button>
<select id="scheduleFilter" onchange="filterTable()">
<option value="">全部</option>
<option value="是"></option>
<option value="否"></option>
</select>
<table id="data-table">
<thead>
<tr>
<th>时间</th><th> 姓名</th> <th> 时段 </th><th> 上线时间 </th><th> 是否排班 </th><th> 工作状态 </th><th> 全天在线时长</th> <th> 全天背单时长 </th><th> 全天完单量 </th><th> 时段内在线时长 </th><th> 时段内背单时长 </th><th>
</tr>
</thead>
<tbody>
<!-- 动态生成的数据行 -->
</tbody>
</table>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.1/socket.io.js"></script>
<script>
// client.js
const socket = io();
let allRows = []; // 存储所有原始行数据,以便筛选时使用
// 监听 'update_table' 事件
socket.on('update_table', function(data) {
const tableBody = document.getElementById('data-table').getElementsByTagName('tbody')[0];
tableBody.innerHTML = ''; // 清空现有行
// 获取当前时间
const now = new Date();
const timeString = now.toLocaleString(); // 或者使用其他格式化方式
// 保存原始行数据并生成新的行
allRows = [];
data['未及格成员'].forEach(function(rowData) {
const row = tableBody.insertRow();
allRows.push(row); // 保存行
// 添加时间列
const timeCell = row.insertCell(0); // 插入到第一列
timeCell.textContent = timeString;
// 添加其他数据列
rowData.forEach(function(cellData) {
const cell = row.insertCell();
cell.textContent = cellData;
});
});
// 初始筛选
filterTable();
});
// 连接事件
socket.on('connect', function() {
console.log('Connected to server');
});
// 筛选表格函数
function filterTable() {
const selectElement = document.getElementById('scheduleFilter');
const selectedValue = selectElement.value;
allRows.forEach(row => {
const isScheduledCell = row.cells[4]; // 假定“是否排班”是第5列
if (selectedValue === '' || isScheduledCell.textContent === selectedValue) {
row.style.display = '';
} else {
row.style.display = 'none';
}
});
}
// 导出到Excel的函数
function exportToExcel() {
// 获取表格
var table = document.getElementById('data-table');
// 创建工作表
var ws = XLSX.utils.table_to_sheet(table);
// 创建工作簿
var wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
// 将工作簿输出为二进制格式
var wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' });
// 将二进制数据转换为Blob对象
var blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' });
// 创建下载链接
var link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'exported_data.xlsx';
link.click();
}
// 辅助函数用于将二进制字符串转换为ArrayBuffer
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i=0; i<s.length; i++) {
view[i] = s.charCodeAt(i) & 0xFF;
}
return buf;
}
</script>
</body>
</html>