AnCao/web/src/pages/Home.module.less
yanlongqi 45299b2d7e 优化UI体验和修复Markdown渲染问题
## 主要改进

### 1. 修复AI解析Markdown渲染混乱
- 安装remark-gfm插件支持GitHub Flavored Markdown
- 优化ReactMarkdown组件样式配置
- 支持表格、代码块、引用、列表等完整Markdown语法
- 改进代码块样式,区分行内代码和代码块
- 优化排版,提升可读性

### 2. 用户界面优化
- 修改个人信息中"昵称"改为"姓名"
- 调整答题设置提示位置到第一行
- 去除答题设置提示标题,使界面更简洁

### 3. 新增用户功能
- 添加修改个人信息功能(姓名、身份类型)
- 添加修改密码功能
- 优化用户信息显示和编辑体验

### 4. 技术改进
- 修复Home.tsx中handleLogout函数声明顺序问题
- 添加更完善的Markdown样式定义
- 优化流式渲染体验

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 23:14:03 +08:00

384 lines
6.8 KiB
Plaintext

.container {
min-height: 100vh;
background: #fafafa;
padding: 20px;
padding-bottom: 80px;
}
.header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 24px;
.headerLeft {
flex: 1;
}
.logoArea {
display: flex;
align-items: flex-start;
gap: 16px;
}
.logo {
width: 64px;
height: 64px;
object-fit: contain;
flex-shrink: 0;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.08));
}
.title {
color: #1d1d1f !important;
margin-bottom: 4px !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.02);
font-weight: 700;
}
.subtitle {
color: #6e6e73;
font-size: 14px;
}
.userInfo {
background: rgba(255, 255, 255, 0.85);
padding: 12px 16px;
border-radius: 16px;
backdrop-filter: blur(30px) saturate(180%);
-webkit-backdrop-filter: blur(30px) saturate(180%);
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.04),
0 1px 3px rgba(0, 0, 0, 0.02),
0 0 0 1px rgba(0, 0, 0, 0.03);
border: 0.5px solid rgba(0, 0, 0, 0.04);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
&:hover {
background: rgba(255, 255, 255, 0.95);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.06),
0 2px 6px rgba(0, 0, 0, 0.04),
0 0 0 1px rgba(0, 0, 0, 0.04);
transform: translateY(-2px);
}
.userDetails {
display: flex;
flex-direction: column;
gap: 3px;
.userNickname {
color: #1d1d1f !important;
font-size: 15px;
font-weight: 600;
line-height: 1.2;
}
.userUsername {
color: #6e6e73 !important;
font-size: 12px;
line-height: 1.2;
}
.userType {
font-size: 11px;
color: #6e6e73;
}
}
}
}
.statsCard {
margin-bottom: 24px;
border-radius: 20px;
background: rgba(255, 255, 255, 0.9);
backdrop-filter: blur(30px) saturate(180%);
-webkit-backdrop-filter: blur(30px) saturate(180%);
box-shadow:
0 2px 12px rgba(0, 0, 0, 0.05),
0 1px 4px rgba(0, 0, 0, 0.03),
0 0 0 1px rgba(0, 0, 0, 0.03);
border: 0.5px solid rgba(0, 0, 0, 0.04);
:global {
.ant-statistic-title {
font-size: 13px;
margin-bottom: 4px;
}
}
}
.typeSection {
margin-bottom: 24px;
.sectionTitle {
color: #1d1d1f !important;
margin-bottom: 16px !important;
display: flex;
align-items: center;
gap: 8px;
font-weight: 700;
font-size: 18px !important;
}
}
.typeCard {
border-radius: 16px;
background: rgba(255, 255, 255, 0.9);
backdrop-filter: blur(30px) saturate(180%);
-webkit-backdrop-filter: blur(30px) saturate(180%);
box-shadow:
0 2px 12px rgba(0, 0, 0, 0.05),
0 1px 4px rgba(0, 0, 0, 0.03),
0 0 0 1px rgba(0, 0, 0, 0.03);
border: 0.5px solid rgba(0, 0, 0, 0.04);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
height: 100%;
&:hover {
transform: translateY(-4px);
background: rgba(255, 255, 255, 0.95);
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.08),
0 4px 16px rgba(0, 0, 0, 0.04),
0 0 0 1px rgba(0, 0, 0, 0.04);
}
.typeIcon {
margin-bottom: 10px;
}
.typeTitle {
margin: 6px 0 4px 0 !important;
color: #1d1d1f;
font-weight: 600;
font-size: 16px !important;
}
.typeDesc {
margin: 0 !important;
color: #6e6e73;
font-size: 12px;
}
}
.quickStart {
.sectionTitle {
color: #1d1d1f !important;
margin-bottom: 16px !important;
display: flex;
align-items: center;
gap: 8px;
font-weight: 700;
font-size: 18px !important;
}
.quickCard {
border-radius: 16px;
background: rgba(255, 255, 255, 0.9);
backdrop-filter: blur(30px) saturate(180%);
-webkit-backdrop-filter: blur(30px) saturate(180%);
box-shadow:
0 2px 12px rgba(0, 0, 0, 0.05),
0 1px 4px rgba(0, 0, 0, 0.03),
0 0 0 1px rgba(0, 0, 0, 0.03);
border: 0.5px solid rgba(0, 0, 0, 0.04);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
height: 100%;
&:hover {
transform: translateY(-4px);
background: rgba(255, 255, 255, 0.95);
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.08),
0 4px 16px rgba(0, 0, 0, 0.04),
0 0 0 1px rgba(0, 0, 0, 0.04);
}
}
}
// 响应式设计 - 移动端 (< 768px)
@media (max-width: 768px) {
.container {
padding: 12px;
padding-bottom: 70px;
}
.header {
flex-direction: column;
align-items: stretch;
margin-bottom: 16px;
.headerLeft {
margin-bottom: 12px;
}
.logoArea {
gap: 12px;
}
.logo {
width: 48px;
height: 48px;
}
.title {
font-size: 22px !important;
}
.subtitle {
font-size: 13px;
}
.userInfo {
width: 100%;
padding: 8px 12px;
:global {
.ant-space {
width: 100%;
justify-content: space-between;
}
.ant-btn {
font-size: 12px;
padding: 4px 8px;
}
}
}
}
.statsCard {
margin-bottom: 16px;
:global {
.ant-statistic-title {
font-size: 12px;
}
.ant-statistic-content {
font-size: 20px !important;
}
}
}
.typeSection {
margin-bottom: 16px;
.sectionTitle {
font-size: 16px !important;
margin-bottom: 12px !important;
}
}
.typeCard {
border-radius: 12px;
.typeIcon {
font-size: 32px !important;
}
.typeTitle {
font-size: 14px !important;
}
.typeDesc {
font-size: 11px;
}
}
.quickStart {
.sectionTitle {
font-size: 16px !important;
margin-bottom: 12px !important;
}
.quickCard {
border-radius: 12px;
:global {
.ant-space {
gap: 12px !important;
}
h5 {
font-size: 14px !important;
}
.ant-typography {
font-size: 12px !important;
}
}
}
}
}
// 响应式设计 - 平板 (769px - 1024px)
@media (min-width: 769px) and (max-width: 1024px) {
.container {
padding: 24px;
padding-bottom: 80px;
}
.header {
.title {
font-size: 28px !important;
}
}
.typeCard {
.typeIcon {
font-size: 36px !important;
}
}
}
// 响应式设计 - PC端宽屏 (> 1025px)
@media (min-width: 1025px) {
.container {
max-width: 1400px;
margin: 0 auto;
padding: 32px 40px;
padding-bottom: 80px;
}
.header {
margin-bottom: 32px;
.title {
font-size: 32px !important;
}
.subtitle {
font-size: 15px;
}
}
.statsCard {
margin-bottom: 32px;
}
.typeSection {
margin-bottom: 32px;
.sectionTitle {
font-size: 20px !important;
}
}
.quickStart {
.sectionTitle {
font-size: 20px !important;
}
}
}
// 响应式设计 - 超宽屏 (> 1600px)
@media (min-width: 1600px) {
.container {
max-width: 1600px;
}
}