fix(proxy-input): worker_id→user_id 수정 + 공통 입력 UI로 변경

백엔드:
- proxyInputModel 전체 worker_id→user_id 전환
  (작업보고서/휴가 매핑 실패 → 전부 미입력으로 표시되던 문제)

프론트:
- 개별 입력 → 공통 입력 1개로 전환
  프로젝트/공종/시간/부적합 한번 입력 → 선택된 전원에 적용
- 부서별 그룹핑 표시
- 적용 대상 칩 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-31 14:57:30 +09:00
parent 77b66f49ae
commit f68c66e696
4 changed files with 123 additions and 128 deletions

View File

@@ -14,7 +14,7 @@ const ProxyInputModel = {
SELECT ta.user_id, w.worker_name, ta.session_id
FROM tbm_team_assignments ta
JOIN tbm_sessions s ON ta.session_id = s.session_id
JOIN workers w ON ta.user_id = w.worker_id
JOIN workers w ON ta.user_id = w.user_id
WHERE s.session_date = ? AND ta.user_id IN (${placeholders}) AND s.status != 'cancelled'
`, [sessionDate, ...userIds]);
return rows;
@@ -27,9 +27,9 @@ const ProxyInputModel = {
if (!userIds.length) return [];
const placeholders = userIds.map(() => '?').join(',');
const [rows] = await conn.query(`
SELECT worker_id FROM workers WHERE worker_id IN (${placeholders}) AND status = 'active'
SELECT user_id FROM workers WHERE user_id IN (${placeholders}) AND status = 'active'
`, [...userIds]);
return rows.map(r => r.worker_id);
return rows.map(r => r.user_id);
},
/**
@@ -73,11 +73,11 @@ const ProxyInputModel = {
// 1. 활성 작업자
const [workers] = await db.query(`
SELECT w.worker_id AS user_id, w.worker_name, w.job_type,
SELECT w.user_id, w.worker_name, w.job_type,
COALESCE(d.department_name, '미배정') AS department_name
FROM workers w
LEFT JOIN departments d ON w.department_id = d.department_id
WHERE w.status = 'active'
WHERE w.status = 'active' AND w.user_id IS NOT NULL
ORDER BY w.worker_name
`);
@@ -87,7 +87,7 @@ const ProxyInputModel = {
lu.worker_name AS leader_name, s.is_proxy_input
FROM tbm_team_assignments ta
JOIN tbm_sessions s ON ta.session_id = s.session_id
LEFT JOIN workers lu ON s.leader_user_id = lu.worker_id
LEFT JOIN workers lu ON s.leader_user_id = lu.user_id
WHERE s.session_date = ? AND s.status != 'cancelled'
`, [date]);
@@ -191,11 +191,11 @@ const ProxyInputModel = {
// 작업자 정보
const [workerRows] = await db.query(`
SELECT w.worker_id AS user_id, w.worker_name, w.job_type,
SELECT w.user_id, w.worker_name, w.job_type,
COALESCE(d.department_name, '미배정') AS department_name
FROM workers w
LEFT JOIN departments d ON w.department_id = d.department_id
WHERE w.worker_id = ?
WHERE w.user_id = ?
`, [userId]);
// TBM 세션
@@ -206,7 +206,7 @@ const ProxyInputModel = {
p.project_name, wt.work_type_name, ta.work_hours
FROM tbm_team_assignments ta
JOIN tbm_sessions s ON ta.session_id = s.session_id
LEFT JOIN workers lu ON s.leader_user_id = lu.worker_id
LEFT JOIN workers lu ON s.leader_user_id = lu.user_id
LEFT JOIN sso_users pu ON s.proxy_input_by = pu.user_id
LEFT JOIN projects p ON ta.project_id = p.project_id
LEFT JOIN work_types wt ON ta.work_type_id = wt.work_type_id