This commit is contained in:
2025-07-17 16:14:06 +08:00
parent 62c0916566
commit 93975b26bc
13 changed files with 234 additions and 228 deletions

View File

@@ -1,65 +1,68 @@
<html data-theme="light">
<head>
<!-- <link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/@picocss/pico@2/css/pico.min.css"> -->
</head>
<body>
<div>
<h1 align=center>今日值班表</h1>
<div align=center>
<button hx-get="/api/getAssignment" hx-swap="outerHTML"> 点我!</button>
</div>
</div>
</body>
<script src="/htmx.min.js"></script>
<style>
table {
width: 100%;
border-collapse: collapse;
margin:auto
}
th, td {
border: 1px solid black;
padding: 8px;
text-align: center;
}
td:first-child, th:first-child {
background-color: #b3d9f7;
font-weight: bold;
}
td:nth-child(2), th:nth-child(2) {
background-color: #55ffaa
}
.ZoneHead {
display: inline-block; /* 让颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #55ffaa; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 颜色块垂直居中 */
align-self: left;
}
.Moderator {
display: inline-block; /* 让颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #ffa0c9; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 颜色块垂直居中 */
}
.SwitchOrRepay{
display: inline-block; /* 让颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #fff6b5; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 颜色块垂直居中 */
}
.Volunteering{
display: inline-block; /* 让颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #c0ff85; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 颜色块垂直居中 */
}
.table_notes{
align-items:left
}
</style>
<head>
<!-- <link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/@picocss/pico@2/css/pico.min.css"> -->
</head>
<body>
<div>
<h1 align="center">今日值班表</h1>
<div align="center">
<button hx-get="/api/getAssignment" hx-swap="outerHTML">点我!</button>
</div>
</div>
</body>
<script src="/htmx.min.js"></script>
<style>
table {
width: 100%;
border-collapse: collapse;
margin: auto;
}
th,
td {
border: 1px solid black;
padding: 8px;
text-align: center;
}
td:first-child,
th:first-child {
background-color: #b3d9f7;
font-weight: bold;
}
td:nth-child(2),
th:nth-child(2) {
background-color: #55ffaa;
}
.ZoneHead {
display: inline-block; /* 颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #55ffaa; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 让颜色块垂直居中 */
align-self: left;
}
.Moderator {
display: inline-block; /* 颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #ffa0c9; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 让颜色块垂直居中 */
}
.SwitchOrRepay {
display: inline-block; /* 颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #fff6b5; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 让颜色块垂直居中 */
}
.Volunteering {
display: inline-block; /* 颜色块和文字在同一行显示 */
width: 1em; /* 设置颜色块的宽度为1个字的宽度 */
height: 1em; /* 设置颜色块的高度为1个字的高度 */
background-color: #c0ff85; /* 设置颜色块的背景颜色 */
vertical-align: middle; /* 让颜色块垂直居中 */
}
.table_notes {
align-items: left;
}
</style>
</html>

View File

@@ -1,83 +1,76 @@
document.getElementById('getAssignment').addEventListener('click', function () {
dateInput = document.getElementById('calendar').value;
document.getElementById("getAssignment").addEventListener("click", function () {
dateInput = document.getElementById("calendar").value;
if (!dateInput) {
dateInput = getToday()
}
if (!dateInput) {
dateInput = getToday();
}
const url = `/api/getAssignment?date=${dateInput}`;
const url = `/api/getAssignment?date=${dateInput}`;
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error('网络响应失败');
}
return response.json();
})
.then(data => {
const responseDiv = document.getElementById('response');
responseDiv.innerHTML = ''; // 清除旧内容
fetch(url)
.then((response) => {
if (!response.ok) {
throw new Error("网络响应失败");
}
return response.json();
})
.then((data) => {
const responseDiv = document.getElementById("response");
responseDiv.innerHTML = ""; // 清除旧内容
const table = document.createElement('table');
const table = document.createElement("table");
data.forEach(subArray => {
const row = document.createElement('tr');
data.forEach((subArray) => {
const row = document.createElement("tr");
subArray.forEach(item => {
const cell = document.createElement('td');
cell.textContent = item.Name || item.ID;
subArray.forEach((item) => {
const cell = document.createElement("td");
cell.textContent = item.Name || item.ID;
// 优先判断 Access 条件
if (item.Access <=3) {
cell.classList.add('cell_Moderator');
} else if (item.Note === 1) {
cell.classList.add('cell_SwitchOrRepay');
} else if (item.Note === 2) {
cell.classList.add('cell_Volunteering');
}
// 优先判断 Access 条件
if (item.Access <= 3) {
cell.classList.add("cell_Moderator");
} else if (item.Note === 1) {
cell.classList.add("cell_SwitchOrRepay");
} else if (item.Note === 2) {
cell.classList.add("cell_Volunteering");
}
row.appendChild(cell);
});
row.appendChild(cell);
});
table.appendChild(row);
});
const title =`<i><h5 align=center >${dateInput}网维值班表</h5></i>`
const titleContainer = document.createElement('div');
titleContainer.innerHTML = title
responseDiv.appendChild(titleContainer)
// 插入表格
responseDiv.appendChild(table);
table.appendChild(row);
});
const title = `<i><h5 align=center >${dateInput}网维值班表</h5></i>`;
const titleContainer = document.createElement("div");
titleContainer.innerHTML = title;
responseDiv.appendChild(titleContainer);
// 插入表格
responseDiv.appendChild(table);
// 添加图例说明
const legendHTML = `
// 添加图例说明
const legendHTML = `
<i class="table_notes"><span class="ZoneHead"></span>片区负责人<br></i>
<i class="table_notes"><span class="Moderator"></span>管理层<br></i>
<i class="table_notes"><span class="SwitchOrRepay"></span>换班/补班<br></i>
<i class="table_notes"><span class="Volunteering"></span>蹭班<br></i>
`;
const legendContainer = document.createElement('div');
legendContainer.innerHTML = legendHTML;
responseDiv.appendChild(legendContainer);
})
.catch(error => {
console.error('请求失败:', error);
document.getElementById('response').innerHTML = '获取任务失败,请重试。';
});
const legendContainer = document.createElement("div");
legendContainer.innerHTML = legendHTML;
responseDiv.appendChild(legendContainer);
})
.catch((error) => {
console.error("请求失败:", error);
document.getElementById("response").innerHTML = "获取任务失败,请重试。";
});
});
function getToday() {
const today = new Date();
const year = today.getFullYear();
const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从0开始需要+1
const day = String(today.getDate()).padStart(2, '0');
const month = String(today.getMonth() + 1).padStart(2, "0"); // 月份从0开始需要+1
const day = String(today.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
}