feat(tkpurchase): 협력업체 포털/이력에 프로젝트 정보 배지 추가

- 포털 스케줄 카드에 프로젝트명·job_no 초록 배지 표시
- 이력 카드에 프로젝트명·job_no 초록 배지 표시
- checkinModel.findHistoryByCompany에 LEFT JOIN projects 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-16 08:34:56 +09:00
parent 5d24584553
commit 509691eebb
3 changed files with 10 additions and 3 deletions

View File

@@ -158,9 +158,10 @@ async function findHistoryByCompany(companyId, { dateFrom, dateTo, page = 1, lim
const db = getPool();
// 1. 체크인 페이지네이션 조회
let sql = `SELECT pc.*, ps.work_description, ps.workplace_name, ps.start_date, ps.end_date
let sql = `SELECT pc.*, ps.work_description, ps.workplace_name, ps.start_date, ps.end_date, p.project_name, p.job_no
FROM partner_work_checkins pc
LEFT JOIN partner_schedules ps ON pc.schedule_id = ps.id
LEFT JOIN projects p ON ps.project_id = p.project_id
WHERE pc.company_id = ?`;
const params = [companyId];
if (dateFrom) { sql += ' AND DATE(pc.check_in_time) >= ?'; params.push(dateFrom); }

View File

@@ -109,7 +109,10 @@ function renderHistoryList(checkins) {
<span class="text-sm font-semibold text-gray-800">${checkinDate}</span>
${statusHtml}
</div>
<span class="text-xs text-gray-500">${escapeHtml(c.workplace_name || '')}</span>
<div class="flex items-center gap-2">
${c.project_name ? `<span class="inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700 text-xs font-medium"><i class="fas fa-project-diagram text-[10px]"></i>${escapeHtml(c.project_name)}${c.job_no ? ' · ' + escapeHtml(c.job_no) : ''}</span>` : ''}
<span class="text-xs text-gray-500">${escapeHtml(c.workplace_name || '')}</span>
</div>
</div>
${c.work_description ? `<p class="text-sm text-gray-600 mb-2">${escapeHtml(c.work_description)}</p>` : ''}
<div class="flex gap-4 text-xs text-gray-500 mb-2">

View File

@@ -79,7 +79,10 @@ async function renderScheduleCards() {
<!-- 일정 정보 -->
<div class="p-5 border-b">
<div class="flex items-center justify-between mb-2">
<h3 class="text-base font-semibold text-gray-800">${escapeHtml(s.workplace_name || '작업장 미지정')}</h3>
<div>
${s.project_name ? `<div class="inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700 text-xs font-medium mb-1"><i class="fas fa-project-diagram text-[10px]"></i>${escapeHtml(s.project_name)}${s.job_no ? ' · ' + escapeHtml(s.job_no) : ''}</div>` : ''}
<h3 class="text-base font-semibold text-gray-800">${escapeHtml(s.workplace_name || '작업장 미지정')}</h3>
</div>
${dateBadge}
</div>
${!isToday ? `<div class="text-xs text-gray-400 mb-1"><i class="fas fa-calendar-alt mr-1"></i>${formatDate(s.start_date)}${formatDate(s.start_date) !== formatDate(s.end_date) ? ' ~ ' + formatDate(s.end_date) : ''}</div>` : ''}