feat: 시스템 관리자 대시보드 개선

- 시스템 관리자 전용 웹페이지 구현 (system.html)
- 깔끔한 흰색 배경의 올드스쿨 스타일 적용
- 반응형 그리드 레이아웃으로 카드 배치 개선
- ES6 모듈 방식으로 JavaScript 구조 개선
- 이벤트 리스너 방식으로 버튼 클릭 처리 변경
- 시스템 상태, 사용자 통계, 계정 관리 기능 구현
- 시스템 로그 조회 기능 추가
- 나머지 관리 기능들 스켈레톤 구현 (개발 중 상태)
- 인코딩 문제 해결을 위한 영어 로그 메시지 적용
- hyungi 계정을 system 권한으로 설정
- JWT 토큰에 role 필드 추가
- 시스템 전용 API 엔드포인트 구현

주요 변경사항:
- web-ui/pages/dashboard/system.html: 시스템 관리자 전용 페이지
- web-ui/css/system-dashboard.css: 시스템 대시보드 전용 스타일
- web-ui/js/system-dashboard.js: 시스템 대시보드 로직
- api.hyungi.net/controllers/systemController.js: 시스템 API 컨트롤러
- api.hyungi.net/routes/systemRoutes.js: 시스템 API 라우트
- api.hyungi.net/controllers/authController.js: 시스템 권한 로그인 처리
- api.hyungi.net/services/auth.service.js: JWT 토큰에 role 필드 추가
This commit is contained in:
Hyungi Ahn
2025-08-18 11:16:18 +09:00
parent 809b2af53e
commit 2a3feca45b
14 changed files with 2797 additions and 27 deletions

View File

@@ -24,8 +24,10 @@ const login = async (req, res) => {
let redirectUrl;
switch (user.role) {
case 'system': // 시스템 계정 전용 대시보드
redirectUrl = '/pages/dashboard/system.html';
break;
case 'admin':
case 'system': // 'system'도 관리자로 취급
redirectUrl = '/pages/dashboard/admin.html';
break;
case 'leader':
@@ -69,7 +71,7 @@ exports.register = async (req, res) => {
// 중복 아이디 확인
const [existing] = await db.query(
'SELECT user_id FROM users WHERE username = ?',
'SELECT user_id FROM Users WHERE username = ?',
[username]
);
@@ -86,7 +88,7 @@ exports.register = async (req, res) => {
// role 설정 (access_level에 따라)
const roleMap = {
'admin': 'admin',
'system': 'admin',
'system': 'system', // 시스템 계정은 system role로 설정
'group_leader': 'leader',
'support_team': 'support',
'worker': 'user'
@@ -95,7 +97,7 @@ exports.register = async (req, res) => {
// 사용자 등록
const [result] = await db.query(
`INSERT INTO users (username, password, name, role, access_level, worker_id)
`INSERT INTO Users (username, password, name, role, access_level, worker_id)
VALUES (?, ?, ?, ?, ?, ?)`,
[username, hashedPassword, name, role, access_level, worker_id]
);
@@ -126,7 +128,7 @@ exports.deleteUser = async (req, res) => {
// 사용자 존재 확인
const [user] = await db.query(
'SELECT user_id FROM users WHERE user_id = ?',
'SELECT user_id FROM Users WHERE user_id = ?',
[id]
);
@@ -138,7 +140,7 @@ exports.deleteUser = async (req, res) => {
}
// 사용자 삭제
await db.query('DELETE FROM users WHERE user_id = ?', [id]);
await db.query('DELETE FROM Users WHERE user_id = ?', [id]);
console.log('[사용자 삭제 성공] ID:', id);
@@ -165,7 +167,7 @@ exports.getAllUsers = async (req, res) => {
// 비밀번호 제외하고 조회
const [rows] = await db.query(
`SELECT user_id, username, name, role, access_level, worker_id, created_at
FROM users
FROM Users
ORDER BY created_at DESC`
);