From caa8cc8a524dbc6a08ba54741dd6d903d9be1234 Mon Sep 17 00:00:00 2001 From: xuans Date: Fri, 16 Oct 2026 16:01:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E4=B8=8E?= =?UTF-8?q?=E6=88=90=E5=91=98=E9=A1=B5=E9=9D=A2=E5=8F=8A=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F=E5=AF=B9=E9=BD=90=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/Dashboard/DashboardNavigation.css | 41 +- .../ProjectManagement/ProjectManagement.css | 528 +++++++++++++----- 2 files changed, 401 insertions(+), 168 deletions(-) diff --git a/frontend/src/views/Dashboard/DashboardNavigation.css b/frontend/src/views/Dashboard/DashboardNavigation.css index d40ff66..1620c15 100644 --- a/frontend/src/views/Dashboard/DashboardNavigation.css +++ b/frontend/src/views/Dashboard/DashboardNavigation.css @@ -16,7 +16,7 @@ display: flex; align-items: center; gap: 10px; - padding: 2px 8px 14px; + padding: 4px 12px 14px; } .navigation-heading div { @@ -37,30 +37,37 @@ } .navigation-group { - margin: 14px 8px 4px; + margin: 14px 12px 4px; + padding: 0 4px; + font-weight: 600; + letter-spacing: 0.02em; } .navigation-item { position: relative; display: flex; align-items: center; - gap: 11px; + justify-content: flex-start; + gap: 12px; width: 100%; - min-height: 36px; - padding: 7px 10px; + height: 40px; + min-height: 40px; + padding: 0 14px; border: 1px solid transparent; border-radius: 10px; background: transparent; color: #62718a; font: inherit; font-size: 13px; + font-weight: 500; text-align: left; cursor: pointer; + transition: all 0.15s ease; } .navigation-item:hover { - background: #f5f7fb; - color: #315aaa; + background: #f1f5f9; + color: #1e3a8a; } .navigation-item.active { @@ -73,8 +80,8 @@ .navigation-item.active::before { content: ""; position: absolute; - top: 9px; - bottom: 9px; + top: 8px; + bottom: 8px; left: -13px; width: 3px; border-radius: 3px; @@ -113,8 +120,8 @@ .navigation-account { display: grid; gap: 5px; - margin: 0 8px 10px; - padding: 11px 12px; + margin: 0 4px 10px; + padding: 12px 14px; border: 1px solid #e2e8f2; border-radius: 12px; background: #f8faff; @@ -135,20 +142,25 @@ } .navigation-error { - margin: 0 8px 8px; + margin: 0 4px 8px; color: #b42318; font-size: 12px; line-height: 1.5; overflow-wrap: anywhere; } +.navigation-logout { + margin-bottom: 6px; +} + .navigation-logout:disabled { opacity: 0.6; cursor: wait; } .navigation-footer { - margin: 8px 8px 0; + margin: 8px 12px 0; + padding: 0 4px; } @media (max-width: 760px) { @@ -172,8 +184,9 @@ .navigation-item { width: auto; + height: 38px; min-height: 38px; - padding: 8px 10px; + padding: 0 10px; } .navigation-session { diff --git a/frontend/src/views/ProjectManagement/ProjectManagement.css b/frontend/src/views/ProjectManagement/ProjectManagement.css index 1e06df0..7da8c42 100644 --- a/frontend/src/views/ProjectManagement/ProjectManagement.css +++ b/frontend/src/views/ProjectManagement/ProjectManagement.css @@ -1,63 +1,248 @@ .project-management { - padding: 22px; - color: #25344d; - border: 1px solid #dfe6f0; - border-radius: 16px; - background: #fff; + padding: 24px; + color: #1e293b; + border: 1px solid #e2e8f0; + border-radius: 20px; + background: #ffffff; + box-shadow: 0 4px 20px -2px rgba(15, 23, 42, 0.05); } -.project-heading, -.project-toolbar, -.project-pagination, -.project-confirm { +.project-heading { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + margin-bottom: 24px; + padding-bottom: 18px; + border-bottom: 1px solid #f1f5f9; +} + +.project-heading h2 { + margin: 0; + font-size: 22px; + font-weight: 700; + color: #0f172a; + letter-spacing: -0.02em; +} + +.project-actions { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; +} + +.project-layout { + display: grid; + grid-template-columns: 280px minmax(0, 1fr); + gap: 28px; + align-items: start; +} + +.project-directory { + display: flex; + flex-direction: column; + padding: 18px; + background: #f8fafc; + border: 1px solid #e2e8f0; + border-radius: 16px; + min-width: 0; +} + +.project-members { + display: flex; + flex-direction: column; + min-width: 0; +} + +.project-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; + margin-bottom: 14px; } -.project-management h2, -.project-management h3 { +.project-toolbar h3 { margin: 0; + font-size: 16px; + font-weight: 700; + color: #1e293b; } -.project-heading { - margin-bottom: 20px; -} - -.project-layout { - display: grid; - grid-template-columns: minmax(200px, 260px) minmax(0, 1fr); - gap: 22px; -} - -.project-directory, -.project-members, .project-title { + display: flex; + flex-direction: column; + gap: 4px; +} + +.project-title h3 { + margin: 0; + font-size: 20px; + font-weight: 700; + color: #0f172a; +} + +.project-title small { + color: #64748b; + font-size: 13px; + font-family: ui-monospace, monospace; +} + +.project-list { + display: flex; + flex-direction: column; + gap: 8px; + margin: 12px 0 16px; + max-height: 480px; + overflow-y: auto; + padding-right: 2px; +} + +.project-list button { + position: relative; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + width: 100%; + padding: 12px 14px; + border: 1px solid #e2e8f0; + border-radius: 12px; + background: #ffffff; + color: #334155; + text-align: left; + transition: all 0.2s ease; + cursor: pointer; +} + +.project-list button:hover:not([aria-current="true"]) { + border-color: #cbd5e1; + background: #ffffff; + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(15, 23, 42, 0.04); +} + +.project-list button[aria-current="true"] { + border-color: #315aaa; + background: #f0f5ff; + color: #1e3a8a; + box-shadow: 0 2px 8px rgba(49, 90, 170, 0.12); +} + +.project-list button[aria-current="true"]::before { + content: ""; + position: absolute; + left: 0; + top: 10px; + bottom: 10px; + width: 4px; + border-radius: 0 4px 4px 0; + background: #315aaa; +} + +.project-list button strong { + font-size: 15px; + font-weight: 600; + color: inherit; +} + +.project-list button small { + display: inline-block; + padding: 2px 6px; + border-radius: 4px; + background: #f1f5f9; + color: #64748b; + font-size: 12px; + font-weight: 500; +} + +.project-list button[aria-current="true"] small { + background: #dbeafe; + color: #2563eb; +} + +.project-grant-form { + display: grid; + grid-template-columns: minmax(200px, 1fr) 180px 110px; + align-items: end; + gap: 12px; + margin: 18px 0 22px; + padding: 18px; + background: #f8fafc; + border: 1px solid #e2e8f0; + border-radius: 14px; +} + +.project-grant-form label { + display: flex; + flex-direction: column; + gap: 6px; + font-size: 14px; + font-weight: 600; + color: #334155; +} + +.project-account-field { min-width: 0; } -.project-directory { - padding-right: 20px; - border-right: 1px solid #e5eaf2; +.project-account-field > span { + display: flex; + align-items: center; + gap: 4px; } -.project-management button, .project-management input, .project-management textarea, .project-management select { - min-height: 36px; - padding: 7px 10px; - border: 1px solid #d5ddea; - border-radius: 8px; - color: inherit; - background: #fff; - font: inherit; + box-sizing: border-box; + width: 100%; + height: 40px; + padding: 8px 12px; + border: 1px solid #cbd5e1; + border-radius: 10px; + color: #1e293b; + background: #ffffff; + font-size: 14px; + transition: border-color 0.15s ease, box-shadow 0.15s ease; +} + +.project-management textarea { + height: auto; + min-height: 72px; +} + +.project-management input:focus, +.project-management textarea:focus, +.project-management select:focus { + border-color: #315aaa; + box-shadow: 0 0 0 3px rgba(49, 90, 170, 0.15); + outline: none; } .project-management button { + box-sizing: border-box; + display: inline-flex; + align-items: center; + justify-content: center; + height: 40px; + padding: 8px 16px; + border: 1px solid #cbd5e1; + border-radius: 10px; + background: #ffffff; + color: #334155; + font-size: 14px; + font-weight: 600; cursor: pointer; + transition: all 0.15s ease; +} + +.project-management button:hover:not(:disabled) { + border-color: #94a3b8; + background: #f8fafc; + color: #0f172a; } .project-management button:disabled { @@ -65,205 +250,240 @@ cursor: not-allowed; } -.project-management :focus-visible { - outline: 2px solid #3664c3; - outline-offset: 2px; -} - -.project-list { - display: grid; - gap: 8px; - margin: 16px 0; - max-height: 48vh; - overflow-y: auto; -} - -.project-list button { - text-align: left; - overflow-wrap: anywhere; -} - -.project-list button[aria-current="true"] { - border-color: #4c74cc; - background: #edf3ff; -} - -.project-management small { - display: block; - margin-top: 4px; - color: #68788f; - overflow-wrap: anywhere; -} - -.project-title h3 { - overflow-wrap: anywhere; -} - -.project-grant-form { - display: grid; - grid-template-columns: minmax(160px, 1fr) minmax(145px, 200px) auto; - align-items: end; - gap: 12px; - margin: 18px 0; -} - -.project-grant-form label { - display: grid; - min-width: 0; - gap: 6px; -} - -.project-grant-form input { - min-width: 0; -} - .project-management .project-primary { - color: #fff; - border-color: #3664c3; - background: #3664c3; + border-color: #315aaa; + background: #315aaa; + color: #ffffff; + box-shadow: 0 4px 12px rgba(49, 90, 170, 0.2); } -.project-help { - color: #68788f; - cursor: help; +.project-management .project-primary:hover:not(:disabled) { + background: #25488a; + border-color: #25488a; + color: #ffffff; +} + +.project-management .project-danger { + border-color: #fca5a5; + background: #fff; + color: #dc2626; +} + +.project-management .project-danger:hover:not(:disabled) { + border-color: #ef4444; + background: #fef2f2; + color: #b91c1c; } .project-member-table { - max-height: 46vh; + max-height: 480px; overflow: auto; - border: 1px solid #e5eaf2; - border-radius: 10px; + border: 1px solid #e2e8f0; + border-radius: 14px; + background: #ffffff; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02); } .project-member-table table { width: 100%; border-collapse: collapse; text-align: left; -} - -.project-member-table th, -.project-member-table td { - padding: 10px 12px; - border-bottom: 1px solid #edf0f6; - overflow-wrap: anywhere; + font-size: 14px; } .project-member-table th { position: sticky; top: 0; - background: #f5f7fb; + z-index: 1; + padding: 12px 16px; + background: #f8fafc; + border-bottom: 1px solid #e2e8f0; + color: #475569; + font-size: 13px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.03em; +} + +.project-member-table td { + padding: 14px 16px; + border-bottom: 1px solid #f1f5f9; + color: #334155; + overflow-wrap: anywhere; +} + +.project-member-table tr:last-child td { + border-bottom: none; +} + +.project-member-table tr:hover td { + background: #fbfcfe; } .project-role-list { display: flex; - gap: 6px; + gap: 8px; flex-wrap: wrap; } .project-role { display: inline-flex; align-items: center; - gap: 6px; - padding: 3px 7px; - border-radius: 6px; - background: #f0f4fb; + gap: 8px; + padding: 4px 10px; + border-radius: 8px; + background: #f1f5f9; + border: 1px solid #e2e8f0; + font-size: 13px; + font-weight: 500; + color: #334155; } .project-role button { - min-height: 28px; - padding: 2px 5px; + height: 24px; + padding: 2px 8px; + border: 1px solid #cbd5e1; + border-radius: 6px; + background: #ffffff; + color: #64748b; font-size: 12px; + font-weight: 500; +} + +.project-role button:hover:not(:disabled) { + border-color: #ef4444; + color: #ef4444; + background: #fef2f2; } .project-pagination { - margin-top: 14px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-top: 16px; font-size: 13px; + color: #64748b; +} + +.project-pagination button { + height: 32px; + padding: 4px 10px; + font-size: 12px; +} + +.project-pagination select { + height: 32px; + padding: 2px 8px; + font-size: 12px; + border-radius: 8px; } .project-member-pagination { justify-content: flex-end; + gap: 12px; } .project-member-pagination label { + display: flex; + align-items: center; + gap: 6px; margin-right: auto; } .project-empty { - padding: 24px 10px; - color: #68788f; + padding: 48px 16px; + color: #94a3b8; text-align: center; + font-size: 14px; } .project-error { - color: #a12c3b; + margin: 12px 0; + padding: 10px 14px; + border-radius: 10px; + background: #fef2f2; + border: 1px solid #fecaca; + color: #dc2626; + font-size: 14px; } .project-notice { - color: #247049; + margin: 12px 0; + padding: 10px 14px; + border-radius: 10px; + background: #f0fdf4; + border: 1px solid #bbf7d0; + color: #16a34a; + font-size: 14px; } .project-confirm { - justify-content: flex-start; - margin-bottom: 14px; - padding: 12px; - border-radius: 8px; - background: #fff4df; -} - -.project-actions { display: flex; align-items: center; - gap: 8px; - flex-wrap: wrap; + gap: 12px; + margin: 14px 0; + padding: 14px 16px; + border-radius: 12px; + background: #fffbeb; + border: 1px solid #fde68a; + color: #92400e; + font-size: 14px; } .project-editor { display: grid; - grid-template-columns: minmax(160px, 1fr) minmax(240px, 2fr); + grid-template-columns: minmax(200px, 1fr) minmax(300px, 2fr); align-items: end; - gap: 12px; - margin-bottom: 18px; - padding: 16px; - border: 1px solid #dfe6f0; - border-radius: 10px; - background: #f8faff; + gap: 16px; + margin-bottom: 24px; + padding: 20px; + border: 1px solid #e2e8f0; + border-radius: 16px; + background: #f8fafc; +} + +.project-editor h3 { + grid-column: 1 / -1; + margin: 0; + font-size: 18px; + font-weight: 700; + color: #0f172a; } -.project-editor h3, .project-editor .project-actions { grid-column: 1 / -1; + margin-top: 8px; } .project-editor label { - display: grid; + display: flex; + flex-direction: column; gap: 6px; - min-width: 0; + font-size: 14px; + font-weight: 600; + color: #334155; } -.project-editor textarea { - resize: vertical; +.project-help { + display: inline-flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + border-radius: 50%; + background: #e2e8f0; + color: #64748b; + font-size: 11px; + font-weight: bold; + cursor: help; } -.project-management .project-danger { - color: #a12c3b; - border-color: #e2b8c0; -} - -@media (max-width: 1000px) { +@media (max-width: 1024px) { .project-layout { grid-template-columns: 1fr; } - .project-directory { - padding-right: 0; - border-right: 0; - } - - .project-list { - grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); - max-height: 24vh; - } - .project-grant-form { grid-template-columns: 1fr; } @@ -271,4 +491,4 @@ .project-editor { grid-template-columns: 1fr; } -} +} \ No newline at end of file