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

84 lines
5.3 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>