From 4382feedb34367a8f67ece245a73c6e8493e3dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B7=9D?= Date: Sun, 29 Mar 2026 15:55:27 +0800 Subject: [PATCH] =?UTF-8?q?style(frontend):=20=E4=BC=98=E5=8C=96=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=A0=B7=E5=BC=8F=E5=92=8C=E7=95=8C=E9=9D=A2=E7=BB=86?= =?UTF-8?q?=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 统一并丰富主题色变量,新增多级浅色和圆角、阴影变量 - 调整应用头部布局及风格,增加logo子标题和用户头像显示 - 细化分类导航样式,添加品类图标和渐变背景 - 优化颜色选择器的交互动效和样式细节 - 美化设计预览组件,提升边框圆角和阴影效果 - 调整子类型面板布局、尺寸及交互动画效果 - 修正全局样式中字体和滚动条的表现,增强用户体验 - 统一按钮、标签等控件的圆角和颜色渐变样式 - 增强Element Plus UI组件的主题覆盖和交互状态样式 --- .DS_Store | Bin 8196 -> 8196 bytes backend/uvicorn.log | 50 ++++ frontend/src/assets/styles/theme.scss | 89 +++++- frontend/src/components/AppHeader.vue | 112 +++++-- frontend/src/components/CategoryNav.vue | 94 ++++-- frontend/src/components/ColorPicker.vue | 21 +- frontend/src/components/DesignPreview.vue | 92 +++--- frontend/src/components/SubTypePanel.vue | 56 ++-- frontend/src/style.css | 344 +++++----------------- frontend/src/views/DesignPage.vue | 2 +- frontend/src/views/GeneratePage.vue | 79 ++--- frontend/src/views/Login.vue | 86 ++++-- frontend/src/views/Register.vue | 89 ++++-- frontend/src/views/UserCenter.vue | 64 ++-- 14 files changed, 669 insertions(+), 509 deletions(-) diff --git a/.DS_Store b/.DS_Store index e7c41932f8afbdbe1484f8d9bfaa610973c9ee6d..434ae06cc2a88ddc4baeadfad99ae6a4e3360c23 100644 GIT binary patch delta 73 zcmZp1XmOa}&nUeyU^hRb^kyD`Q_Qj~3@Hrx49N_|o;mr+NjdpR3=9kc3=B*~Kw59| cZ(*6u&xL<5Z)TVH#wKgOcM)K0Zjl8 A00000 diff --git a/backend/uvicorn.log b/backend/uvicorn.log index 844bbcc..cbb6522 100644 --- a/backend/uvicorn.log +++ b/backend/uvicorn.log @@ -220,3 +220,53 @@ INFO: Finished server process [76199] INFO: Started server process [83069] INFO: Waiting for application startup. INFO: Application startup complete. +WARNING: StatReload detected changes in 'app/services/prompt_builder.py'. Reloading... +INFO: Shutting down +INFO: Waiting for application shutdown. +INFO: Application shutdown complete. +INFO: Finished server process [83069] +✅ 上传目录已准备: uploads +👋 应用已关闭 +INFO: Started server process [903] +INFO: Waiting for application startup. +INFO: Application startup complete. +✅ 上传目录已准备: uploads +INFO: 127.0.0.1:53852 - "POST /api/auth/login HTTP/1.1" 200 OK +INFO: 127.0.0.1:53856 - "GET /api/auth/me HTTP/1.1" 200 OK +INFO: 127.0.0.1:53862 - "GET /api/categories HTTP/1.1" 200 OK +INFO: 127.0.0.1:53865 - "GET /api/categories/1/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:53866 - "GET /api/categories/1/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:53870 - "GET /api/categories/2/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:53872 - "GET /api/categories/2/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:53877 - "GET /api/categories/3/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:53878 - "GET /api/categories/3/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:53883 - "GET /api/categories/4/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:53885 - "GET /api/categories/4/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:53890 - "GET /api/categories HTTP/1.1" 200 OK +INFO: 127.0.0.1:54023 - "GET /api/categories/1/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54021 - "GET /api/categories/1/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54029 - "GET /api/categories/2/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54027 - "GET /api/categories/2/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54050 - "GET /api/categories/4/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54048 - "GET /api/categories/4/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54076 - "GET /api/categories/4/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54075 - "GET /api/categories/4/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54092 - "GET /api/categories/6/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54091 - "GET /api/categories/6/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54098 - "GET /api/categories/7/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54096 - "GET /api/categories/7/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54104 - "GET /api/categories/8/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54102 - "GET /api/categories/8/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54110 - "GET /api/categories/9/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54109 - "GET /api/categories/9/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54117 - "GET /api/categories/10/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54115 - "GET /api/categories/10/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54123 - "GET /api/categories/11/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54121 - "GET /api/categories/11/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54131 - "GET /api/categories/12/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54129 - "GET /api/categories/12/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54134 - "GET /api/categories/13/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54140 - "GET /api/categories/1/colors HTTP/1.1" 200 OK +INFO: 127.0.0.1:54139 - "GET /api/categories/1/sub-types HTTP/1.1" 200 OK +INFO: 127.0.0.1:54330 - "GET /api/auth/me HTTP/1.1" 200 OK +INFO: 127.0.0.1:54332 - "GET /api/categories HTTP/1.1" 200 OK diff --git a/frontend/src/assets/styles/theme.scss b/frontend/src/assets/styles/theme.scss index 7544f1b..815402f 100644 --- a/frontend/src/assets/styles/theme.scss +++ b/frontend/src/assets/styles/theme.scss @@ -1,25 +1,67 @@ // 玉宗品牌色 - 中式雅致风格 $primary-color: #5B7E6B; // 青玉色 - 主色调 $primary-light: #8BAF9C; // 浅青 +$primary-lighter: #D4E5DB; // 极浅青 $primary-dark: #3D5A4A; // 深青 $secondary-color: #C4A86C; // 金缕色 - 辅助色 +$secondary-light: #E0D1A8; // 浅金 $bg-color: #FAF8F5; // 暖白底色 $bg-dark: #F0EDE8; // 深一级底色 +$bg-card: #FFFFFF; // 卡片底色 $text-primary: #2C2C2C; // 主文字 $text-secondary: #6B6B6B; // 次要文字 $text-light: #999999; // 辅助文字 +$text-placeholder: #BFBFBF; // 占位文字 $border-color: #E8E4DF; // 边框色 +$border-light: #F0EDE8; // 浅边框 $ink-color: #1A1A2E; // 墨色 +// 圆角 +$radius-sm: 8px; +$radius: 12px; +$radius-lg: 16px; +$radius-xl: 20px; +$radius-pill: 999px; + +// 阴影 +$shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.04); +$shadow: 0 4px 16px rgba(0, 0, 0, 0.06); +$shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.08); + // Element Plus 主题覆盖 :root { + // 颜色 --el-color-primary: #{$primary-color}; --el-color-primary-light-3: #{$primary-light}; + --el-color-primary-light-5: #a8c7b5; + --el-color-primary-light-7: #{$primary-lighter}; + --el-color-primary-light-8: #dfeee5; + --el-color-primary-light-9: #eaf4ee; --el-color-primary-dark-2: #{$primary-dark}; --el-bg-color: #{$bg-color}; + --el-bg-color-overlay: #{$bg-card}; --el-border-color: #{$border-color}; + --el-border-color-light: #{$border-light}; --el-text-color-primary: #{$text-primary}; --el-text-color-regular: #{$text-secondary}; + --el-text-color-secondary: #{$text-light}; + --el-text-color-placeholder: #{$text-placeholder}; + --el-fill-color-light: #{$bg-color}; + --el-fill-color-lighter: #{$bg-color}; + + // 圆角 + --el-border-radius-base: #{$radius-sm}; + --el-border-radius-small: 6px; + --el-border-radius-round: #{$radius-pill}; + + // 字体 + --el-font-family: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', -apple-system, sans-serif; + --el-font-size-base: 14px; + + // 阴影 + --el-box-shadow: #{$shadow}; + --el-box-shadow-light: #{$shadow-sm}; + --el-box-shadow-lighter: 0 1px 4px rgba(0, 0, 0, 0.03); } // 全局基础样式 @@ -30,7 +72,7 @@ $ink-color: #1A1A2E; // 墨色 } body { - font-family: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; + font-family: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', -apple-system, sans-serif; background-color: $bg-color; color: $text-primary; -webkit-font-smoothing: antialiased; @@ -39,6 +81,10 @@ body { // 滚动条美化 ::-webkit-scrollbar { width: 6px; + height: 6px; +} +::-webkit-scrollbar-track { + background: transparent; } ::-webkit-scrollbar-thumb { background: $border-color; @@ -47,3 +93,44 @@ body { ::-webkit-scrollbar-thumb:hover { background: $text-light; } + +// Element Plus 组件全局样式增强 +.el-button--primary { + background-color: $primary-color !important; + border-color: $primary-color !important; + border-radius: $radius-sm !important; + + &:hover, &:focus { + background-color: $primary-dark !important; + border-color: $primary-dark !important; + } +} + +.el-input__wrapper { + border-radius: $radius-sm !important; + transition: all 0.25s ease !important; +} + +.el-textarea__inner { + border-radius: $radius !important; +} + +.el-card { + border-radius: $radius !important; + border: 1px solid $border-light !important; + box-shadow: $shadow-sm !important; +} + +.el-dialog { + border-radius: $radius-lg !important; +} + +.el-message-box { + border-radius: $radius !important; +} + +.el-dropdown-menu { + border-radius: $radius-sm !important; + border: 1px solid $border-light !important; + box-shadow: $shadow !important; +} diff --git a/frontend/src/components/AppHeader.vue b/frontend/src/components/AppHeader.vue index 59b62a6..cd3a1b1 100644 --- a/frontend/src/components/AppHeader.vue +++ b/frontend/src/components/AppHeader.vue @@ -2,7 +2,8 @@