feat: 알림 시스템 및 시설설비 관리 기능 구현
- 알림 시스템 구축 (navbar 알림 아이콘, 드롭다운) - 알림 수신자 설정 기능 (계정관리 페이지) - 시설설비 관리 페이지 추가 (수리 워크플로우) - 수리 신청 → 접수 → 처리중 → 완료 상태 관리 - 사이드바 메뉴 구조 개선 (공장 관리 카테고리) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1398,27 +1398,73 @@ function openPanelRepairModal() {
|
||||
panelRepairCategories.forEach(item => {
|
||||
select.innerHTML += `<option value="${item.item_id}">${item.item_name}</option>`;
|
||||
});
|
||||
// 새로 추가 옵션
|
||||
select.innerHTML += '<option value="__new__">+ 새로 추가</option>';
|
||||
|
||||
document.getElementById('panelRepairDesc').value = '';
|
||||
document.getElementById('panelRepairPhotoInput').value = '';
|
||||
document.getElementById('newRepairTypeName').value = '';
|
||||
document.getElementById('newRepairTypeGroup').style.display = 'none';
|
||||
panelRepairPhotoBases = [];
|
||||
|
||||
document.getElementById('panelRepairModal').style.display = 'flex';
|
||||
}
|
||||
|
||||
function onRepairTypeChange() {
|
||||
const select = document.getElementById('panelRepairItem');
|
||||
const newTypeGroup = document.getElementById('newRepairTypeGroup');
|
||||
|
||||
if (select.value === '__new__') {
|
||||
newTypeGroup.style.display = 'block';
|
||||
document.getElementById('newRepairTypeName').focus();
|
||||
} else {
|
||||
newTypeGroup.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
function closePanelRepairModal() {
|
||||
document.getElementById('panelRepairModal').style.display = 'none';
|
||||
}
|
||||
|
||||
async function submitPanelRepair() {
|
||||
const itemId = document.getElementById('panelRepairItem').value;
|
||||
const selectValue = document.getElementById('panelRepairItem').value;
|
||||
const description = document.getElementById('panelRepairDesc').value;
|
||||
const newTypeName = document.getElementById('newRepairTypeName').value.trim();
|
||||
|
||||
if (!description) {
|
||||
alert('수리 내용을 입력하세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
let itemId = selectValue;
|
||||
|
||||
// 새 유형 추가하는 경우
|
||||
if (selectValue === '__new__') {
|
||||
if (!newTypeName) {
|
||||
alert('새 수리 유형 이름을 입력하세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const addResponse = await window.apiCall('/equipments/repair-categories', 'POST', {
|
||||
item_name: newTypeName
|
||||
});
|
||||
|
||||
if (addResponse && addResponse.success) {
|
||||
itemId = addResponse.data.item_id;
|
||||
// 목록에 추가
|
||||
panelRepairCategories.push({ item_id: itemId, item_name: newTypeName });
|
||||
} else {
|
||||
alert('새 유형 추가에 실패했습니다.');
|
||||
return;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('새 유형 추가 실패:', error);
|
||||
alert('새 유형 추가에 실패했습니다.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 사진 처리
|
||||
const fileInput = document.getElementById('panelRepairPhotoInput');
|
||||
const photos = [];
|
||||
@@ -1728,6 +1774,7 @@ window.confirmPanelMove = confirmPanelMove;
|
||||
window.openPanelRepairModal = openPanelRepairModal;
|
||||
window.closePanelRepairModal = closePanelRepairModal;
|
||||
window.submitPanelRepair = submitPanelRepair;
|
||||
window.onRepairTypeChange = onRepairTypeChange;
|
||||
window.openPanelExportModal = openPanelExportModal;
|
||||
window.closePanelExportModal = closePanelExportModal;
|
||||
window.submitPanelExport = submitPanelExport;
|
||||
|
||||
Reference in New Issue
Block a user