From b4fb461a32747fa161178e715a224087f6575027 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Sun, 26 Oct 2025 10:47:42 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=98=84=ED=99=A9=ED=8C=90=EC=9D=84=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=A8=20=EC=A7=84=ED=96=89=20=EC=A4=91=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=ED=98=95=EC=8B=9D=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=99=84=EC=A0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐ŸŽจ UI Format Change: - โŒ ๊ฐ€๋กœ ํ…Œ์ด๋ธ” ํ˜•์‹ (์ •๋ณด ์••์ถ•, ๊ฐ€๋…์„ฑ ์ €ํ•˜) - โœ… ๊ด€๋ฆฌํ•จ ์ง„ํ–‰ ์ค‘ ์นด๋“œ ํ˜•์‹ (์ง๊ด€์ , ๋ชจ๋ฐ”์ผ ์นœํ™”์ ) ๐Ÿ“‹ Card Layout Features: - ํ—ค๋”: No., ๊ธด๊ธ‰ ํ‘œ์‹œ, ๋“ฑ๋ก์ผ - ๊ธฐ๋ณธ ์ •๋ณด: ํ”„๋กœ์ ํŠธ, ๋ถ€์ ํ•ฉ ๋‚ด์šฉ, ์›์ธ ๋ถ„๋ฅ˜ - ๊ด€๋ฆฌ ์ •๋ณด: ํ•ด๊ฒฐ๋ฐฉ์•ˆ, ๋‹ด๋‹น๋ถ€์„œ, ๋‹ด๋‹น์ž, ์กฐ์น˜ ์˜ˆ์ƒ์ผ, ์›์ธ๋ถ€์„œ - ์—…๋กœ๋“œ ์‚ฌ์ง„: ํด๋ฆญ ์‹œ ๋ชจ๋‹ฌ ํ™•๋Œ€ - ์ง„ํ–‰ ์ค‘ ํ‘œ์‹œ: ์• ๋‹ˆ๋ฉ”์ด์…˜ ์  + ์ƒํƒœ ํ‘œ์‹œ ๐ŸŽฏ UX Improvements: - 3์ปฌ๋Ÿผ ๋ฐ˜์‘ํ˜• ๊ทธ๋ฆฌ๋“œ (๋ฐ์Šคํฌํ†ฑ/ํƒœ๋ธ”๋ฆฟ/๋ชจ๋ฐ”์ผ) - ์นด๋“œ hover ํšจ๊ณผ: ์œ„๋กœ ์ด๋™ + ๊ทธ๋ฆผ์ž + ์ขŒ์ธก ํŒŒ๋ž€ ํ…Œ๋‘๋ฆฌ - ๊ธด๊ธ‰ ํ‘œ์‹œ: ์˜ˆ์ƒ์™„๋ฃŒ์ผ 3์ผ ์ด๋‚ด ์‹œ ๋นจ๊ฐ„ ๋ฐฐ์ง€ - ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜: 0.3์ดˆ transition - ์‚ฌ์ง„ hover ํšจ๊ณผ: ํ™•๋Œ€ + ์ƒ‰์ƒ ๋ณ€๊ฒฝ ๐Ÿ“ฑ Mobile Optimization: - 1์ปฌ๋Ÿผ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” - ํ„ฐ์น˜ ์นœํ™”์  ์นด๋“œ ์ธํ„ฐํŽ˜์ด์Šค - ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์„ธ๋กœ ๋ฐฐ์น˜ - ์ ์ ˆํ•œ ํŒจ๋”ฉ๊ณผ ๊ฐ„๊ฒฉ ๐ŸŽจ Visual Enhancements: - ์ง„ํ–‰ ์ค‘ ์ƒํƒœ ์• ๋‹ˆ๋ฉ”์ด์…˜ (pulse ํšจ๊ณผ) - ์ผ๊ด€๋œ ์ƒ‰์ƒ ์ฒด๊ณ„ (ํŒŒ๋ž€์ƒ‰ ๊ฐ•์กฐ) - ๊น”๋”ํ•œ ์นด๋“œ ๋””์ž์ธ - ์ •๋ณด ๊ณ„์ธต ๊ตฌ์กฐ ๋ช…ํ™•ํ™” ๐Ÿ”ง Code Structure: - createIssueRow โ†’ createIssueCard ํ•จ์ˆ˜ ๋ณ€๊ฒฝ - ํ…Œ์ด๋ธ” HTML โ†’ ์นด๋“œ ๊ทธ๋ฆฌ๋“œ HTML - ํ…Œ์ด๋ธ” CSS โ†’ ์นด๋“œ CSS ์Šคํƒ€์ผ - ๋ฐ˜์‘ํ˜• ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ ์ ์šฉ Expected Result: โœ… ๊ด€๋ฆฌํ•จ๊ณผ ์ผ๊ด€๋œ UI/UX โœ… ๋Œ€ํญ ํ–ฅ์ƒ๋œ ๊ฐ€๋…์„ฑ โœ… ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” โœ… ์ง๊ด€์ ์ธ ์ •๋ณด ํ‘œ์‹œ --- frontend/issues-dashboard.html | 228 +++++++++++++++++---------------- 1 file changed, 120 insertions(+), 108 deletions(-) diff --git a/frontend/issues-dashboard.html b/frontend/issues-dashboard.html index 407f07b..c28465e 100644 --- a/frontend/issues-dashboard.html +++ b/frontend/issues-dashboard.html @@ -27,34 +27,46 @@ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); } - /* ์ด์Šˆ ํ…Œ์ด๋ธ” ์Šคํƒ€์ผ (๊ฐ€๋กœ ํ…Œ์ด๋ธ” ๋ ˆ์ด์•„์›ƒ) */ - .dashboard-table { - min-width: 1200px; + /* ์ด์Šˆ ์นด๋“œ ์Šคํƒ€์ผ (๊ด€๋ฆฌํ•จ ์ง„ํ–‰ ์ค‘ ์Šคํƒ€์ผ) */ + .issue-card { + transition: all 0.3s ease; + border-left: 4px solid transparent; } - .dashboard-table th { - position: sticky; - top: 0; + .issue-card:hover { + transform: translateY(-4px); + border-left-color: #3b82f6; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + } + + .issue-card label { + font-weight: 600; + color: #374151; + } + + .issue-card .bg-gray-50 { background-color: #f9fafb; - z-index: 10; + border: 1px solid #e5e7eb; + transition: all 0.2s ease; } - .dashboard-table td { - vertical-align: middle; + .issue-card .bg-gray-50:hover { + background-color: #f3f4f6; } - .dashboard-table tr:hover { - background-color: #f8fafc; + .issue-card .fas.fa-image:hover { + transform: scale(1.2); + color: #3b82f6; } - .truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + /* ์ง„ํ–‰ ์ค‘ ์• ๋‹ˆ๋ฉ”์ด์…˜ */ + @keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.5; } } - .dashboard-table .fas.fa-image:hover { - transform: scale(1.1); + .animate-pulse { + animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .progress-bar { @@ -369,7 +381,7 @@ document.getElementById('activeProjects').textContent = activeProjectIds.size; } - // ์ด์Šˆ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ (๊ฐ€๋กœ ํ…Œ์ด๋ธ” ์Šคํƒ€์ผ) + // ์ด์Šˆ ์นด๋“œ ์—…๋ฐ์ดํŠธ (๊ด€๋ฆฌํ•จ ์ง„ํ–‰ ์ค‘ ์นด๋“œ ์Šคํƒ€์ผ) function updateProjectCards() { const container = document.getElementById('projectDashboard'); const emptyState = document.getElementById('emptyState'); @@ -382,39 +394,18 @@ emptyState.classList.add('hidden'); - // ๊ฐ€๋กœ ์Šคํฌ๋กค ํ…Œ์ด๋ธ” ์ƒ์„ฑ - const tableHTML = ` -
-
- - - - - - - - - - - - - - - - - - ${filteredIssues.map(issue => createIssueRow(issue)).join('')} - -
No.ํ”„๋กœ์ ํŠธ๋ถ€์ ํ•ฉ ๋‚ด์šฉ์นดํ…Œ๊ณ ๋ฆฌํ•ด๊ฒฐ๋ฐฉ์•ˆ๋‹ด๋‹น๋ถ€์„œ๋‹ด๋‹น์ž์˜ˆ์ƒ์™„๋ฃŒ์ผ์›์ธ๋ถ€์„œ์‚ฌ์ง„๋“ฑ๋ก์ผ
-
+ // ์นด๋“œ ๊ทธ๋ฆฌ๋“œ ์ƒ์„ฑ + const cardsHTML = ` +
+ ${filteredIssues.map(issue => createIssueCard(issue)).join('')}
`; - container.innerHTML = tableHTML; + container.innerHTML = cardsHTML; } - // ์ด์Šˆ ํ…Œ์ด๋ธ” ํ–‰ ์ƒ์„ฑ (๊ฐ€๋กœ ํ…Œ์ด๋ธ” ์Šคํƒ€์ผ, ์ฝ๊ธฐ ์ „์šฉ) - function createIssueRow(issue) { + // ์ด์Šˆ ์นด๋“œ ์ƒ์„ฑ (๊ด€๋ฆฌํ•จ ์ง„ํ–‰ ์ค‘ ์Šคํƒ€์ผ, ์ฝ๊ธฐ ์ „์šฉ) + function createIssueCard(issue) { const project = projects.find(p => p.id === issue.project_id); const projectName = project ? project.project_name : '๋ฏธ์ง€์ •'; @@ -464,72 +455,93 @@ return diffDays <= 3; // 3์ผ ์ด๋‚ด ๋˜๋Š” ์ง€์—ฐ }; - // ์‚ฌ์ง„ ์•„์ด์ฝ˜ ์ƒ์„ฑ - const getPhotoIcons = () => { - const photos = []; - if (issue.photo_path) photos.push(issue.photo_path); - if (issue.photo_path2) photos.push(issue.photo_path2); - - if (photos.length === 0) return '-'; - - return photos.map(photo => - `` - ).join(''); - }; - - // ๊ธด๊ธ‰ ํ‘œ์‹œ๊ฐ€ ์žˆ๋Š” No. ์ƒ์„ฑ - const getNoWithUrgent = () => { - const noText = issue.project_sequence_no || '-'; - if (isUrgent()) { - return `
- ${noText} - ๊ธด๊ธ‰ -
`; - } - return `${noText}`; - }; - return ` - - ${getNoWithUrgent()} - -
${projectName}
- - -
- ${issue.final_description || issue.description || '-'} +
+ +
+
+ No.${issue.project_sequence_no || '-'} + ${isUrgent() ? '๊ธด๊ธ‰' : ''}
- - - ${getCategoryText(issue.final_category || issue.category)} - - -
- ${issue.solution || '-'} + ${formatKSTDate(issue.report_date)} +
+ + +
+
+ +
${projectName}
- - - ${getDepartmentText(issue.responsible_department)} - - -
- ${issue.responsible_person || '-'} + +
+ +
${issue.final_description || issue.description || '-'}
- - - ${formatKSTDate(issue.expected_completion_date)} - - - ${getDepartmentText(issue.cause_department)} - - - ${getPhotoIcons()} - - - ${formatKSTDate(issue.report_date)} - - + +
+ +
${getCategoryText(issue.final_category || issue.category)}
+
+
+ + +
+
+
+ +
${issue.solution || '-'}
+
+
+ +
${getDepartmentText(issue.responsible_department)}
+
+
+ +
+
+ +
${issue.responsible_person || '-'}
+
+
+ +
${formatKSTDate(issue.expected_completion_date)}
+
+
+ +
+ +
${getDepartmentText(issue.cause_department)}
+
+
+ + + ${issue.photo_path || issue.photo_path2 ? ` +
+ +
+ ${issue.photo_path ? ` +
+ +
+ ` : ''} + ${issue.photo_path2 ? ` +
+ +
+ ` : ''} +
+
+ ` : ''} + + +
+
+
+ ์ง„ํ–‰ ์ค‘ +
+ ์‹ ๊ณ ์ผ: ${formatKSTDate(issue.report_date)} +
+
`; }