fix: 작업자 비활성화 기능 완전 수정

작업자 퇴사 시 비활성화 기능이 제대로 작동하지 않던 문제 해결

백엔드 수정:
- is_active 가상 필드 추가 (status 기반 자동 생성)
- ISO 8601 날짜 형식을 MySQL DATE 형식으로 변환
- 작업자 업데이트 필드 오류 수정 (salary, annual_leave 제거)

프론트엔드 수정 (11개 파일):
- 모든 페이지에서 비활성 작업자 필터링 로직 추가
- 대시보드, 작업보고서, 근태관리, 사용자관리 등 전체 페이지 적용

영향받는 기능:
- 작업자 관리: 비활성화 상태가 DB에 저장되고 새로고침 후에도 유지
- 모든 페이지: 비활성화된 작업자가 선택 목록에서 제외됨

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2025-12-09 17:45:57 +09:00
parent a2669e08c4
commit 5c8f553f87
13 changed files with 317 additions and 36 deletions

View File

@@ -1,12 +1,21 @@
const { getDb } = require('../dbPool');
// 날짜 형식 변환 헬퍼 함수 (ISO 8601 -> MySQL DATE)
const formatDate = (dateStr) => {
if (!dateStr) return null;
if (typeof dateStr === 'string' && dateStr.includes('T')) {
return dateStr.split('T')[0]; // ISO 8601 -> YYYY-MM-DD
}
return dateStr;
};
// 1. 작업자 생성
const create = async (worker, callback) => {
try {
const db = await getDb();
const {
worker_name,
job_type = 'worker',
const {
worker_name,
job_type = 'worker',
phone_number = null,
email = null,
hire_date = null,
@@ -16,10 +25,10 @@ const create = async (worker, callback) => {
} = worker;
const [result] = await db.query(
`INSERT INTO workers
`INSERT INTO workers
(worker_name, job_type, phone_number, email, hire_date, department, notes, status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
[worker_name, job_type, phone_number, email, hire_date, department, notes, status]
[worker_name, job_type, phone_number, email, formatDate(hire_date), department, notes, status]
);
callback(null, result.insertId);
@@ -32,7 +41,13 @@ const create = async (worker, callback) => {
const getAll = async (callback) => {
try {
const db = await getDb();
const [rows] = await db.query(`SELECT * FROM workers ORDER BY worker_id DESC`);
const [rows] = await db.query(`
SELECT
*,
CASE WHEN status = 'active' THEN 1 ELSE 0 END AS is_active
FROM workers
ORDER BY worker_id DESC
`);
callback(null, rows);
} catch (err) {
callback(err);
@@ -43,7 +58,13 @@ const getAll = async (callback) => {
const getById = async (worker_id, callback) => {
try {
const db = await getDb();
const [rows] = await db.query(`SELECT * FROM workers WHERE worker_id = ?`, [worker_id]);
const [rows] = await db.query(`
SELECT
*,
CASE WHEN status = 'active' THEN 1 ELSE 0 END AS is_active
FROM workers
WHERE worker_id = ?
`, [worker_id]);
callback(null, rows[0]);
} catch (err) {
callback(err);
@@ -54,18 +75,43 @@ const getById = async (worker_id, callback) => {
const update = async (worker, callback) => {
try {
const db = await getDb();
const { worker_id, worker_name, join_date, job_type, salary, annual_leave, status } = worker;
const {
worker_id,
worker_name,
job_type,
join_date,
status,
phone_number,
email,
hire_date,
department,
notes
} = worker;
const [result] = await db.query(
`UPDATE workers
SET worker_name = ?,
join_date = ?,
job_type = ?,
salary = ?,
annual_leave = ?,
status = ?
join_date = ?,
status = ?,
phone_number = ?,
email = ?,
hire_date = ?,
department = ?,
notes = ?
WHERE worker_id = ?`,
[worker_name, join_date, job_type, salary, annual_leave, status, worker_id]
[
worker_name,
job_type,
formatDate(join_date),
status,
phone_number,
email,
formatDate(hire_date),
department,
notes,
worker_id
]
);
callback(null, result.affectedRows);