한글뷰어 기능수정

This commit is contained in:
koj729
2026-06-18 08:52:23 +09:00
parent cb0c42fbeb
commit 9268e4e6bc
38 changed files with 2544 additions and 211 deletions

View File

@@ -760,6 +760,7 @@
<th>카테고리</th>
<th>용량 제한</th>
<th>상태</th>
<th style="width: 70px;">과업개요</th>
<th>관리</th>
</tr>
</thead>
@@ -1004,10 +1005,10 @@
<h3 class="card-title">🔎 시스템 활동 로그 조회 (tb_log)</h3>
</div>
<div class="form-row">
<input type="text" class="text-input" id="search-log-user" placeholder="사용자 ID 검색...">
<input type="text" class="text-input" id="search-log-project" placeholder="프로젝트명 검색...">
<input type="text" class="text-input" id="filter-log-action" placeholder="조작 액션 검색...">
<button class="btn btn-secondary" onclick="renderAuditLogs()">활동 로그 필터링</button>
<input type="text" class="text-input" id="search-log-user" placeholder="사용자 ID 검색..." onkeyup="if(event.key === 'Enter') renderAuditLogs()">
<input type="text" class="text-input" id="search-log-project" placeholder="프로젝트명 검색..." onkeyup="if(event.key === 'Enter') renderAuditLogs()">
<input type="text" class="text-input" id="filter-log-action" placeholder="조작 액션 검색..." onkeyup="if(event.key === 'Enter') renderAuditLogs()">
<button class="btn btn-secondary" onclick="renderAuditLogs()">검색</button>
</div>
<div class="table-wrapper">
<table class="admin-table">
@@ -1194,11 +1195,11 @@
<option value="overseas">해외 프로젝트 (overseas)</option>
</select>
</div>
<div class="form-group">
<label for="form-project-storage">스토리지 제한 (GB)</label>
<input type="number" class="text-input" id="form-project-storage" value="10" min="1" max="1000">
</div>
<div class="form-row">
<div class="form-group">
<label for="form-project-storage">스토리지 제한 (GB)</label>
<input type="number" class="text-input" id="form-project-storage" value="10" min="1" max="1000">
</div>
<div class="form-group">
<label for="form-project-active">운영 상태</label>
<select class="select-input" id="form-project-active">
@@ -1206,6 +1207,13 @@
<option value="false">일시잠금 (Inactive)</option>
</select>
</div>
<div class="form-group">
<label for="form-project-overview">과업개요 여부</label>
<select class="select-input" id="form-project-overview">
<option value="true" selected>사용 (True)</option>
<option value="false">미사용 (False)</option>
</select>
</div>
</div>
<div style="display: flex; gap: 10px; justify-content: flex-end; margin-top: 10px;">
<button class="btn btn-secondary" type="button" onclick="closeProjectModal()">취소</button>
@@ -1616,6 +1624,7 @@
<td>${p.category_nm || p.category || '-'}</td>
<td>${p.storage_byte ? (Number(p.storage_byte) / (1024*1024*1024)).toFixed(0) + ' GB' : '0 GB'}</td>
<td><span class="badge ${p.is_active ? 'active' : 'inactive'}">${p.is_active ? '활성' : '비활성'}</span></td>
<td><span class="badge ${p.overview !== false ? 'active' : 'inactive'}">${p.overview !== false ? '사용' : '미사용'}</span></td>
<td>
<div class="action-btns" onclick="event.stopPropagation();">
<button class="btn btn-secondary btn-sm" onclick="openProjectModal('edit', '${p.project_id}')">수정</button>
@@ -1831,6 +1840,7 @@
document.getElementById('form-project-id').removeAttribute('readonly');
document.getElementById('form-project-id').disabled = false;
document.getElementById('project-submit-btn').innerText = '등록 하기';
document.getElementById('form-project-overview').value = 'true';
form.onsubmit = submitCreateProject;
} else {
document.getElementById('project-modal-title').innerText = '📝 프로젝트 상세 정보 수정';
@@ -1848,6 +1858,7 @@
document.getElementById('form-project-category').value = p.category || '';
document.getElementById('form-project-storage').value = p.storage_byte ? (Number(p.storage_byte) / (1024*1024*1024)).toFixed(0) : 10;
document.getElementById('form-project-active').value = p.is_active ? 'true' : 'false';
document.getElementById('form-project-overview').value = p.overview !== false ? 'true' : 'false';
}
} catch (err) {
console.error(err);
@@ -1869,7 +1880,8 @@
short_nm: document.getElementById('form-project-short').value.trim(),
category: document.getElementById('form-project-category').value,
limit_storage: Number(document.getElementById('form-project-storage').value),
is_active: document.getElementById('form-project-active').value === 'true'
is_active: document.getElementById('form-project-active').value === 'true',
overview: document.getElementById('form-project-overview').value === 'true'
};
try {
@@ -1893,7 +1905,8 @@
short_nm: document.getElementById('form-project-short').value.trim(),
category: document.getElementById('form-project-category').value,
limit_storage: Number(document.getElementById('form-project-storage').value),
is_active: document.getElementById('form-project-active').value === 'true'
is_active: document.getElementById('form-project-active').value === 'true',
overview: document.getElementById('form-project-overview').value === 'true'
};
try {
@@ -2147,6 +2160,7 @@
document.getElementById('form-user-id').removeAttribute('readonly');
document.getElementById('form-user-id').disabled = false;
document.getElementById('form-user-pw').required = true;
document.getElementById('form-user-pw').placeholder = '••••••••';
pwRow.style.display = 'flex'; // PW 보이기
document.getElementById('user-submit-btn').innerText = '등록 하기';
form.onsubmit = submitCreateUser;
@@ -2155,9 +2169,10 @@
document.getElementById('form-user-id').setAttribute('readonly', 'true');
document.getElementById('form-user-id').disabled = true;
// 패스워드 입력칸 숨기기 및 필수조건 해제
// 패스워드 필수조건 해제 및 노출 유지 (공백 시 미수정)
document.getElementById('form-user-pw').required = false;
pwRow.style.display = 'none';
document.getElementById('form-user-pw').placeholder = '변경할 비밀번호 입력 (공백 시 유지)';
pwRow.style.display = 'flex';
document.getElementById('user-submit-btn').innerText = '수정 하기';
@@ -2216,6 +2231,7 @@
async function submitEditUser(event, userId) {
event.preventDefault();
const payload = {
user_pw: document.getElementById('form-user-pw').value,
user_nm: document.getElementById('form-user-nm').value.trim(),
company: document.getElementById('form-user-company').value.trim(),
dept: document.getElementById('form-user-dept').value.trim(),