From 97d5f51ff213579a0ed318e08008113d52d6e032 Mon Sep 17 00:00:00 2001 From: "hangyu.tao" Date: Wed, 28 Jan 2026 14:27:34 +0800 Subject: [PATCH] feat_ui --- frontend/css/style.css | 391 +++++++++++++++++++++++++++++++++++++++++ frontend/index.html | 132 +++++++++----- frontend/js/main.js | 341 +++++++++++++++++++++++++++++++++++ 3 files changed, 819 insertions(+), 45 deletions(-) diff --git a/frontend/css/style.css b/frontend/css/style.css index 2d75d08..01f38b8 100644 --- a/frontend/css/style.css +++ b/frontend/css/style.css @@ -2244,4 +2244,395 @@ tr:hover .action-cell { .table-refreshing tbody tr { animation: rowHighlight 0.4s ease-out; +} + +/* ==================== Customer Tabs Styles ==================== */ +.customer-tabs { + display: flex; + gap: 8px; + margin: 0; + flex: 1; +} + +.customer-tab { + display: flex; + align-items: center; + gap: 6px; + padding: 8px 16px; + border: 1px solid var(--border-color); + border-radius: 20px; + background: var(--white); + color: var(--medium-gray); + font-size: 0.85rem; + font-weight: 500; + cursor: pointer; + transition: all 0.3s ease; +} + +.customer-tab:hover { + border-color: var(--primary-orange); + color: var(--primary-orange); + background: rgba(255, 107, 53, 0.05); +} + +.customer-tab.active { + background: linear-gradient(135deg, var(--primary-orange), var(--secondary-orange)); + color: var(--white); + border-color: transparent; + box-shadow: 0 4px 12px rgba(255, 107, 53, 0.3); +} + +.customer-tab.active i { + color: var(--white); +} + +.customer-tab i { + font-size: 0.9rem; +} + +/* Tab Content */ +.tab-content { + display: none; +} + +.tab-content.active { + display: block; + animation: fadeIn 0.3s ease-out; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ==================== Weekly Summary Styles ==================== */ +.weekly-summary-header { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: 15px; + padding: 15px 20px; + background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); + border-radius: 10px; + margin-bottom: 20px; +} + +.week-info { + display: flex; + align-items: center; + gap: 10px; + font-size: 1rem; + font-weight: 600; + color: var(--dark-gray); +} + +.week-info i { + font-size: 1.2rem; + color: var(--primary-orange); +} + +.week-navigation { + display: flex; + align-items: center; + gap: 8px; +} + +.week-nav-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 8px 16px; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--white); + color: var(--medium-gray); + font-size: 0.85rem; + cursor: pointer; + transition: all 0.3s ease; +} + +.week-nav-btn:hover { + border-color: var(--primary-orange); + color: var(--primary-orange); + background: rgba(255, 107, 53, 0.05); +} + +.week-nav-btn:active { + transform: scale(0.98); +} + +.weekly-summary-container { + display: flex; + flex-direction: column; + gap: 20px; +} + +.weekly-summary-empty { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 20px; + color: var(--medium-gray); +} + +.weekly-summary-empty i { + font-size: 4rem; + color: #ddd; + margin-bottom: 15px; +} + +.weekly-summary-empty p { + font-size: 1rem; +} + +/* Customer Summary Card */ +.customer-summary-card { + background: var(--white); + border-radius: 12px; + border: 1px solid var(--border-color); + overflow: hidden; + transition: box-shadow 0.3s ease, transform 0.3s ease; +} + +.customer-summary-card:hover { + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); + transform: translateY(-2px); +} + +.customer-summary-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 15px 20px; + background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); + color: var(--white); +} + +.customer-summary-name { + display: flex; + align-items: center; + gap: 10px; + font-size: 1.1rem; + font-weight: 600; +} + +.customer-summary-name i { + color: var(--primary-orange); +} + +.customer-summary-badge { + display: flex; + align-items: center; + gap: 6px; + padding: 4px 12px; + background: rgba(255, 107, 53, 0.2); + border-radius: 20px; + font-size: 0.8rem; + color: var(--primary-orange); +} + +.customer-summary-body { + padding: 15px 20px; +} + +.summary-section { + margin-bottom: 0; +} + +.summary-section:last-child { + margin-bottom: 0; +} + +.summary-section-title { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.9rem; + font-weight: 600; + color: var(--dark-gray); + margin-bottom: 12px; + padding-bottom: 8px; + border-bottom: 2px solid var(--border-color); +} + +.summary-section-title i { + color: var(--primary-orange); +} + +.summary-items { + display: flex; + flex-direction: column; + gap: 6px; +} + +.summary-item { + display: flex; + align-items: center; + gap: 12px; + padding: 8px 12px; + background: var(--light-gray); + border-radius: 6px; + border-left: 3px solid var(--primary-orange); + min-height: auto; +} + +.summary-item-date { + display: flex; + flex-direction: row; + align-items: center; + gap: 4px; + min-width: auto; + padding: 4px 8px; + background: var(--white); + border-radius: 4px; + font-size: 0.75rem; + color: var(--medium-gray); + text-align: center; + white-space: nowrap; +} + +.summary-item-date .day { + font-size: 0.9rem; + font-weight: 600; + color: var(--dark-gray); +} + +.summary-item-content { + flex: 1; + font-size: 0.85rem; + color: var(--dark-gray); + line-height: 1.5; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px; +} + +.summary-item-content.combined-content { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + gap: 10px; +} + +.content-row { + display: flex; + align-items: center; + gap: 6px; + flex: 1; + min-width: 200px; +} + +.content-label { + color: var(--primary-orange); + font-size: 0.9rem; + min-width: 18px; +} + +.content-text { + flex: 1; + word-break: break-word; +} + +.content-divider { + width: 1px; + height: 20px; + background: var(--border-color); + margin: 0 5px; +} + +.summary-item-meta { + display: flex; + align-items: center; + gap: 10px; + margin-left: auto; + font-size: 0.75rem; + color: var(--medium-gray); + flex-shrink: 0; +} + +.summary-item-meta span { + display: flex; + align-items: center; + gap: 4px; +} + +.summary-item-meta i { + font-size: 0.75rem; +} + +/* Customer Statistics */ +.customer-summary-stats { + display: flex; + gap: 20px; + padding: 12px 20px; + background: rgba(255, 107, 53, 0.05); + border-top: 1px solid var(--border-color); +} + +.stat-item { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.85rem; + color: var(--medium-gray); +} + +.stat-item i { + color: var(--primary-orange); +} + +.stat-item strong { + color: var(--dark-gray); +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .customer-tabs { + order: 3; + width: 100%; + margin: 15px 0 0 0; + justify-content: center; + } + + .weekly-summary-header { + flex-direction: column; + align-items: stretch; + } + + .week-info, + .week-navigation { + justify-content: center; + } + + .customer-summary-header { + flex-direction: column; + gap: 10px; + text-align: center; + } + + .customer-summary-stats { + flex-wrap: wrap; + justify-content: center; + } + + .summary-item { + flex-direction: column; + } + + .summary-item-date { + flex-direction: row; + gap: 8px; + min-width: auto; + } } \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html index 5d00cea..e76bf65 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -141,7 +141,7 @@
+ +
-
- - - - - - - - - - - - - - - - -
客户咨询时间版本描述解决方案类型模块状态与进度操作
+ +
+
+ + + + + + + + + + + + + + + + +
客户咨询时间版本描述解决方案类型模块状态与进度操作
+
+ + +
- -