aps-agent/aps-frontend/pages/factory-calendar.html

84 lines
5.3 KiB
HTML
Raw Normal View History

2026-07-21 11:05:57 +08:00
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>工厂日历管理 - 智能排产系统</title>
<link rel="stylesheet" href="../css/common.css">
</head>
<body>
<div id="app">
<header class="header" id="header"></header>
<div class="body">
<aside class="sidebar" id="sidebar"></aside>
<main class="main">
<h1 class="page-title">工厂日历管理</h1>
<div class="toolbar">
<button class="btn btn-primary" onclick="addHolidayModal()">+ 新增节假日</button>
<button class="btn" onclick="addShiftCalModal()">+ 班次排班</button>
</div>
<div class="row">
<div class="col-6">
<div class="card">
<div class="card-header">节假日/例外日期</div>
<div class="card-body table-wrap">
<table id="holidayTable"><thead><tr><th>日期</th><th>名称</th><th>类型</th><th>工作时长</th></tr></thead><tbody></tbody></table>
</div>
</div>
</div>
<div class="col-6">
<div class="card">
<div class="card-header">班次日历(未来14天)</div>
<div class="card-body table-wrap">
<table id="shiftCalTable"><thead><tr><th>产线</th><th>日期</th><th>班次</th><th>是否工作</th><th>班组</th></tr></thead><tbody></tbody></table>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<script src="../js/data.js"></script>
<script src="../js/common.js"></script>
<script>
initPage('factory-calendar');
function render() {
const ht = document.querySelector('#holidayTable tbody');
ht.innerHTML = apsData.holidays.map(h => `<tr><td>${h.date}</td><td>${h.name}</td><td>${h.type}</td><td>${h.workHours}</td></tr>`).join('') || '<tr><td colspan="4" class="text-center text-muted">无节假日</td></tr>';
const st = document.querySelector('#shiftCalTable tbody');
st.innerHTML = apsData.shiftCalendar.slice(0, 50).map(sc => {
const line = findById(apsData.lines, sc.lineId);
const shift = findById(apsData.shifts, sc.shiftId);
const team = findById(apsData.teams, sc.teamId);
return `<tr><td>${line ? line.name : '-'}</td><td>${sc.date}</td><td>${shift ? shift.name : '-'}</td><td>${sc.isWorking ? '<span class="badge badge-success">是</span>' : '<span class="badge badge-default">否</span>'}</td><td>${team ? team.name : '-'}</td></tr>`;
}).join('') || '<tr><td colspan="5" class="text-center text-muted">无排班</td></tr>';
}
function addHolidayModal() {
const opts = apsData.factories.map(f => `<option value="${f.id}">${f.name}</option>`).join('');
openModal('新增节假日', `
<div class="form-row"><div class="form-group"><label>工厂</label><select id="h_fid">${opts}</select></div><div class="form-group"><label>日期</label><input id="h_date" type="date"></div></div>
<div class="form-row"><div class="form-group"><label>名称</label><input id="h_name"></div><div class="form-group"><label>类型</label><select id="h_type"><option>HOLIDAY</option><option>WEEKEND</option><option>ADJUSTED_WORKDAY</option></select></div></div>
`, `<button class="btn" onclick="closeModal()">取消</button><button class="btn btn-primary" onclick="saveHoliday()">保存</button>`);
}
function saveHoliday() {
apsData.holidays.push({ id: apsData.$utils.nextId('holiday'), factoryId: Number(document.getElementById('h_fid').value), date: document.getElementById('h_date').value, name: document.getElementById('h_name').value, type: document.getElementById('h_type').value, workHours: 0, createdAt: apsData.$utils.fmtDateTime(new Date()) });
apsData.$utils.save(apsData); closeModal(); showToast('保存成功'); render();
}
function addShiftCalModal() {
const lOpts = apsData.lines.map(l => `<option value="${l.id}">${l.name}</option>`).join('');
const sOpts = apsData.shifts.map(s => `<option value="${s.id}">${s.name}</option>`).join('');
const tOpts = apsData.teams.map(t => `<option value="${t.id}">${t.name}</option>`).join('');
openModal('新增班次排班', `
<div class="form-row"><div class="form-group"><label>产线</label><select id="sc_line">${lOpts}</select></div><div class="form-group"><label>日期</label><input id="sc_date" type="date"></div></div>
<div class="form-row"><div class="form-group"><label>班次</label><select id="sc_shift">${sOpts}</select></div><div class="form-group"><label>班组</label><select id="sc_team">${tOpts}</select></div></div>
`, `<button class="btn" onclick="closeModal()">取消</button><button class="btn btn-primary" onclick="saveShiftCal()">保存</button>`);
}
function saveShiftCal() {
apsData.shiftCalendar.push({ id: apsData.$utils.nextId('shiftCalendar'), lineId: Number(document.getElementById('sc_line').value), date: document.getElementById('sc_date').value, shiftId: Number(document.getElementById('sc_shift').value), isWorking: true, teamId: Number(document.getElementById('sc_team').value), maxWorkers: 10, createdAt: apsData.$utils.fmtDateTime(new Date()) });
apsData.$utils.save(apsData); closeModal(); showToast('保存成功'); render();
}
render();
</script>
</body>
</html>