fix: TBM 관리 탭에서 모든 사용자의 TBM 표시

데스크탑 TBM 관리 탭에서 비관리자 사용자가 본인 TBM만 보이던 클라이언트 필터링 제거.
모바일과 동일하게 모든 TBM이 표시되도록 통일.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-04 15:04:57 +09:00
parent 8fd74ad22f
commit e7272b0688

View File

@@ -208,19 +208,7 @@ class TbmAPI {
results.forEach((response, index) => {
const date = dates[index];
if (response && response.success && response.data && response.data.length > 0) {
let sessions = response.data;
// admin이 아니면 본인이 작성한 TBM만 필터링
if (!this.state.isAdminUser()) {
const userId = this.state.currentUser?.user_id;
const workerId = this.state.currentUser?.worker_id;
const userName = this.state.currentUser?.name;
sessions = sessions.filter(s => {
return (userId && String(s.created_by) === String(userId)) ||
(workerId && String(s.leader_id) === String(workerId)) ||
(userName && s.created_by_name === userName);
});
}
const sessions = response.data;
if (sessions.length > 0) {
this.state.dateGroupedSessions[date] = sessions;
@@ -462,6 +450,164 @@ class TbmAPI {
return [];
}
}
/**
* TBM 세션 삭제
*/
async deleteSession(sessionId) {
try {
const response = await window.apiCall(`/tbm/sessions/${sessionId}`, 'DELETE');
if (!response || !response.success) {
throw new Error(response?.message || '삭제 실패');
}
console.log('✅ TBM 세션 삭제:', sessionId);
return response;
} catch (error) {
console.error('❌ TBM 세션 삭제 오류:', error);
throw error;
}
}
/**
* TBM 팀원 분할 배정
*/
async splitAssignment(sessionId, splitData) {
try {
const response = await window.apiCall(
`/tbm/sessions/${sessionId}/team/split`,
'POST',
splitData
);
if (!response || !response.success) {
throw new Error(response?.message || '분할 실패');
}
return response;
} catch (error) {
console.error('❌ 분할 배정 오류:', error);
throw error;
}
}
/**
* TBM 팀원 단일 추가/수정 (POST /team)
*/
async updateTeamMember(sessionId, memberData) {
try {
const response = await window.apiCall(
`/tbm/sessions/${sessionId}/team`,
'POST',
memberData
);
if (!response || !response.success) {
throw new Error(response?.message || '팀원 수정 실패');
}
return response;
} catch (error) {
console.error('❌ 팀원 수정 오류:', error);
throw error;
}
}
/**
* TBM 인원 이동 (분할→이동 / 빼오기)
*/
async transfer(transferData) {
try {
const response = await window.apiCall('/tbm/transfers', 'POST', transferData);
if (!response || !response.success) {
throw new Error(response?.message || '이동 실패');
}
return response;
} catch (error) {
console.error('❌ TBM 이동 오류:', error);
throw error;
}
}
/**
* 작업 생성
*/
async createTask(taskData) {
try {
const response = await window.apiCall('/tasks', 'POST', taskData);
if (!response || !response.success) {
throw new Error(response?.message || '작업 생성 실패');
}
return response;
} catch (error) {
console.error('❌ 작업 생성 오류:', error);
throw error;
}
}
/**
* 활성 작업장 전체 목록 (active/list)
*/
async loadActiveWorkplacesList() {
try {
const response = await window.apiCall('/workplaces/active/list');
if (response && response.success) {
return response.data || [];
}
return [];
} catch (error) {
console.error('❌ 활성 작업장 목록 오류:', error);
return [];
}
}
/**
* 당일 배정 현황 조회
*/
async loadTodayAssignments(date) {
try {
const response = await window.apiCall(`/tbm/sessions/date/${date}/assignments`);
if (response && response.success) {
return response.data || [];
}
return [];
} catch (error) {
console.error('❌ 배정 현황 조회 오류:', error);
return [];
}
}
/**
* 특정 날짜의 TBM 세션 조회 (raw - 상태 변경 없음)
*/
async fetchSessionsByDate(date) {
try {
const response = await window.apiCall(`/tbm/sessions/date/${date}`);
if (response && response.success) {
return response.data || [];
}
return [];
} catch (error) {
console.error('❌ TBM 세션 조회 오류:', error);
return [];
}
}
/**
* TBM 세션 완료 처리 (근태 정보 포함)
*/
async completeTbmWithAttendance(sessionId, attendanceData) {
try {
const response = await window.apiCall(
`/tbm/sessions/${sessionId}/complete`,
'POST',
{ attendance: attendanceData }
);
if (!response || !response.success) {
throw new Error(response?.message || '완료 처리 실패');
}
console.log('✅ TBM 완료 처리 (근태 포함):', sessionId);
return response;
} catch (error) {
console.error('❌ TBM 완료 처리 오류:', error);
throw error;
}
}
}
// 전역 인스턴스 생성
@@ -486,5 +632,7 @@ window.loadMoreTbmDays = async function() {
await window.TbmAPI.loadRecentTbmGroupedByDate();
window.showToast?.(`최근 ${window.TbmState.loadedDaysCount}일의 TBM을 로드했습니다.`, 'success');
};
window.deleteTbmSession = (sessionId) => window.TbmAPI.deleteSession(sessionId);
window.fetchSessionsByDate = (date) => window.TbmAPI.fetchSessionsByDate(date);
console.log('[Module] tbm/api.js 로드 완료');