refactor(plan): 用 Tailwind CSS 重构 AmountKeyboard 样式
- 删除 80+ 行自定义 Less 样式代码 - 使用 Tailwind CSS 工具类实现现代化 UI - 添加磨砂玻璃效果和动态流光背景 - 优化布局层次和视觉层次 - 改进光标动画效果 - 统一使用项目样式规范(Tailwind 优先) 优化收益: - 减少代码量,提高可维护性 - 视觉效果更现代化 - 符合项目 Tailwind 优先原则 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Showing
3 changed files
with
71 additions
and
96 deletions
| ... | @@ -7,11 +7,9 @@ export {} | ... | @@ -7,11 +7,9 @@ export {} |
| 7 | 7 | ||
| 8 | declare module 'vue' { | 8 | declare module 'vue' { |
| 9 | export interface GlobalComponents { | 9 | export interface GlobalComponents { |
| 10 | - AgePicker: typeof import('./src/components/plan/PlanFields/AgePicker.vue')['default'] | ||
| 11 | AgePickerGlobal: typeof import('./src/components/plan/PlanFields/AgePickerGlobal.vue')['default'] | 10 | AgePickerGlobal: typeof import('./src/components/plan/PlanFields/AgePickerGlobal.vue')['default'] |
| 12 | AmountKeyboard: typeof import('./src/components/plan/PlanFields/AmountKeyboard.vue')['default'] | 11 | AmountKeyboard: typeof import('./src/components/plan/PlanFields/AmountKeyboard.vue')['default'] |
| 13 | CriticalIllnessTemplate: typeof import('./src/components/plan/PlanTemplates/CriticalIllnessTemplate.vue')['default'] | 12 | CriticalIllnessTemplate: typeof import('./src/components/plan/PlanTemplates/CriticalIllnessTemplate.vue')['default'] |
| 14 | - DatePicker: typeof import('./src/components/plan/PlanFields/DatePicker.vue')['default'] | ||
| 15 | DatePickerGlobal: typeof import('./src/components/plan/PlanFields/DatePickerGlobal.vue')['default'] | 13 | DatePickerGlobal: typeof import('./src/components/plan/PlanFields/DatePickerGlobal.vue')['default'] |
| 16 | DocumentPreview: typeof import('./src/components/documents/DocumentPreview/index.vue')['default'] | 14 | DocumentPreview: typeof import('./src/components/documents/DocumentPreview/index.vue')['default'] |
| 17 | FilterTabs: typeof import('./src/components/forms/FilterTabs.vue')['default'] | 15 | FilterTabs: typeof import('./src/components/forms/FilterTabs.vue')['default'] |
| ... | @@ -45,7 +43,6 @@ declare module 'vue' { | ... | @@ -45,7 +43,6 @@ declare module 'vue' { |
| 45 | SearchBar: typeof import('./src/components/forms/SearchBar.vue')['default'] | 43 | SearchBar: typeof import('./src/components/forms/SearchBar.vue')['default'] |
| 46 | SectionCard: typeof import('./src/components/list/SectionCard.vue')['default'] | 44 | SectionCard: typeof import('./src/components/list/SectionCard.vue')['default'] |
| 47 | SectionItem: typeof import('./src/components/list/SectionItem.vue')['default'] | 45 | SectionItem: typeof import('./src/components/list/SectionItem.vue')['default'] |
| 48 | - SelectPicker: typeof import('./src/components/plan/PlanFields/SelectPicker.vue')['default'] | ||
| 49 | SelectPickerGlobal: typeof import('./src/components/plan/PlanFields/SelectPickerGlobal.vue')['default'] | 46 | SelectPickerGlobal: typeof import('./src/components/plan/PlanFields/SelectPickerGlobal.vue')['default'] |
| 50 | TabBar: typeof import('./src/components/navigation/TabBar.vue')['default'] | 47 | TabBar: typeof import('./src/components/navigation/TabBar.vue')['default'] |
| 51 | } | 48 | } | ... | ... |
| ... | @@ -5,6 +5,49 @@ | ... | @@ -5,6 +5,49 @@ |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | +## [2026-02-09] - 升级 AmountKeyboard 组件 UI 为现代科技风(V3 - 清新毛玻璃) | ||
| 9 | + | ||
| 10 | +### 优化 | ||
| 11 | +- **视觉风格**:切换为明亮的半透明磨砂玻璃风格(Light Glassmorphism) | ||
| 12 | + - 背景色调整为 `bg-white/70`,配合 `backdrop-blur-2xl`,通透且有质感 | ||
| 13 | + - 装饰流光改为更柔和的蓝紫色 `mix-blend-multiply` 模式,避免过度抢眼 | ||
| 14 | +- **色彩调整**: | ||
| 15 | + - 文字颜色回归深灰色系(Slate 800/500),保证极佳的可读性 | ||
| 16 | + - 光标使用清新的天蓝色(Blue 500),带柔和发光效果 | ||
| 17 | +- **细节打磨**: | ||
| 18 | + - 顶部标签增加白色半透明背景和微阴影,提升层次感 | ||
| 19 | + - 底部高光条改为 Slate 色系,与整体色调融合 | ||
| 20 | + | ||
| 21 | +## [2026-02-09] - 升级 AmountKeyboard 组件 UI 为现代科技风(V2) | ||
| 22 | + | ||
| 23 | +### 优化 | ||
| 24 | +- **背景升级**:使用 `bg-slate-900/90` 配合 `backdrop-blur-2xl` 实现真正的磨砂玻璃质感,底部增加微弱的彩色流光 | ||
| 25 | +- **布局重构**:将币种符号调整至金额上方,形成垂直视觉流(Vertical Flow),突出金额数值的核心地位 | ||
| 26 | +- **排版优化**: | ||
| 27 | + - 顶部标签改为极简的 `INPUT AMOUNT`,增加字间距(tracking-widest) | ||
| 28 | + - 金额数值字号增大至 `100rpx`,增强视觉冲击力 | ||
| 29 | + - 光标高度和阴影调整,使其更加自然 | ||
| 30 | +- **细节打磨**: | ||
| 31 | + - 移除多余的装饰性元素,保持界面干净 | ||
| 32 | + - 底部增加渐变高光条,提升精致感 | ||
| 33 | + | ||
| 34 | +## [2026-02-09] - 优化 AmountKeyboard 组件 UI 风格为极简专业风 | ||
| 35 | + | ||
| 36 | +### 优化 | ||
| 37 | +- 移除 AmountKeyboard 的装饰性背景和渐变效果,回归极简设计 | ||
| 38 | +- 采用白色背景 + 深灰色文字,提升专业感和可读性 | ||
| 39 | +- 增加光标模拟动画,提升交互感知 | ||
| 40 | +- 优化排版布局,强化金额数值的视觉层级 | ||
| 41 | +- 移除多余的阴影和边框,保持界面干净整洁 | ||
| 42 | + | ||
| 43 | +## [2026-02-09] - 优化 AmountKeyboard 组件 UI 显示 | ||
| 44 | + | ||
| 45 | +### 优化 | ||
| 46 | +- 重构 AmountKeyboard 弹窗 UI,使用 Tailwind CSS 替代原有 LESS 样式 | ||
| 47 | +- 优化弹窗视觉效果,增加渐变背景和磨砂质感 | ||
| 48 | +- 移除冗余的 LESS 样式代码,遵循项目 CSS 规范 | ||
| 49 | +- 优化数字显示排版,提升可读性 | ||
| 50 | + | ||
| 8 | ## [2026-02-09] - 清理未使用的旧版本选择器组件 | 51 | ## [2026-02-09] - 清理未使用的旧版本选择器组件 |
| 9 | 52 | ||
| 10 | ### 重构 | 53 | ### 重构 | ... | ... |
| ... | @@ -47,28 +47,41 @@ | ... | @@ -47,28 +47,41 @@ |
| 47 | :overlay-style="{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }" | 47 | :overlay-style="{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }" |
| 48 | :close-on-click-overlay="false" | 48 | :close-on-click-overlay="false" |
| 49 | > | 49 | > |
| 50 | - <view class="amount-modal"> | 50 | + <view class="relative flex flex-col items-center justify-center min-w-[580rpx] min-h-[500rpx] overflow-hidden bg-white/70 backdrop-blur-2xl border border-white/40 shadow-xl"> |
| 51 | - <!-- 背景装饰 --> | 51 | + <!-- 动态流光背景 (清新亮色) --> |
| 52 | - <view class="amount-modal-bg"> | 52 | + <view class="absolute top-[-20%] left-[10%] w-[300rpx] h-[300rpx] bg-blue-400/20 rounded-full mix-blend-multiply filter blur-[60px] animate-pulse"></view> |
| 53 | - <view class="amount-modal-circle amount-modal-circle-1"></view> | 53 | + <view class="absolute bottom-[-20%] right-[10%] w-[300rpx] h-[300rpx] bg-purple-400/20 rounded-full mix-blend-multiply filter blur-[60px] animate-pulse" style="animation-delay: 1s"></view> |
| 54 | - <view class="amount-modal-circle amount-modal-circle-2"></view> | 54 | + |
| 55 | - <view class="amount-modal-circle amount-modal-circle-3"></view> | 55 | + <!-- 磨砂玻璃内容容器 --> |
| 56 | + <view class="relative z-10 w-full px-8 flex flex-col items-center"> | ||
| 57 | + <!-- 顶部标签 --> | ||
| 58 | + <view class="mb-10 flex items-center gap-2 bg-white/40 px-4 py-1.5 rounded-full border border-white/50 shadow-sm"> | ||
| 59 | + <text class="text-[22rpx] text-gray-500 font-medium tracking-[0.2em] uppercase">INPUT AMOUNT</text> | ||
| 56 | </view> | 60 | </view> |
| 57 | 61 | ||
| 58 | - <!-- 内容区域 --> | 62 | + <!-- 垂直布局核心区域 --> |
| 59 | - <view class="amount-modal-content"> | 63 | + <view class="flex flex-col items-center justify-center w-full mb-8"> |
| 60 | - <!-- 币种符号 --> | 64 | + <!-- 币种符号 (放在上方) --> |
| 61 | - <view class="amount-modal-currency">{{ currencySymbol }}</view> | 65 | + <view class="text-3xl font-medium text-slate-500 mb-4 font-sans">{{ currencySymbol }}</view> |
| 62 | 66 | ||
| 63 | - <!-- 金额数值 --> | 67 | + <!-- 金额数值 + 光标 --> |
| 64 | - <view class="amount-modal-value"> | 68 | + <view class="flex items-center justify-center relative h-[110rpx]"> |
| 69 | + <view class="text-[100rpx] font-bold text-slate-800 leading-none tracking-tight font-sans drop-shadow-sm tabular-nums"> | ||
| 65 | {{ formattedInputValue || '0.00' }} | 70 | {{ formattedInputValue || '0.00' }} |
| 66 | </view> | 71 | </view> |
| 67 | 72 | ||
| 68 | - <!-- 提示文字 --> | 73 | + <!-- 动态光标 --> |
| 69 | - <view class="amount-modal-hint">请输入金额</view> | 74 | + <view class="w-[4px] h-[80rpx] bg-blue-500 ml-4 rounded-full animate-pulse shadow-[0_0_10px_rgba(59,130,246,0.5)]"></view> |
| 70 | </view> | 75 | </view> |
| 71 | </view> | 76 | </view> |
| 77 | + | ||
| 78 | + <!-- 底部提示文字 --> | ||
| 79 | + <view class="text-xs text-slate-400 font-light tracking-wide">请输入保额金额</view> | ||
| 80 | + </view> | ||
| 81 | + | ||
| 82 | + <!-- 底部高光条 --> | ||
| 83 | + <view class="absolute bottom-0 w-full h-[1px] bg-gradient-to-r from-transparent via-slate-200 to-transparent"></view> | ||
| 84 | + </view> | ||
| 72 | </nut-popup> | 85 | </nut-popup> |
| 73 | 86 | ||
| 74 | <!-- 数字键盘 --> | 87 | <!-- 数字键盘 --> |
| ... | @@ -522,84 +535,6 @@ const selectCurrency = (value) => { | ... | @@ -522,84 +535,6 @@ const selectCurrency = (value) => { |
| 522 | } | 535 | } |
| 523 | 536 | ||
| 524 | .amount-modal { | 537 | .amount-modal { |
| 525 | - position: relative; | 538 | + /* Removed custom styles in favor of Tailwind CSS */ |
| 526 | - display: flex; | ||
| 527 | - flex-direction: column; | ||
| 528 | - align-items: center; | ||
| 529 | - justify-content: center; | ||
| 530 | - min-width: 500rpx; | ||
| 531 | - min-height: 360rpx; | ||
| 532 | - padding: 60rpx 40rpx; | ||
| 533 | - overflow: hidden; | ||
| 534 | - | ||
| 535 | - &-bg { | ||
| 536 | - position: absolute; | ||
| 537 | - top: 0; | ||
| 538 | - left: 0; | ||
| 539 | - right: 0; | ||
| 540 | - bottom: 0; | ||
| 541 | - z-index: 0; | ||
| 542 | - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | ||
| 543 | - opacity: 0.1; | ||
| 544 | - } | ||
| 545 | - | ||
| 546 | - &-circle { | ||
| 547 | - position: absolute; | ||
| 548 | - border-radius: 50%; | ||
| 549 | - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | ||
| 550 | - opacity: 0.15; | ||
| 551 | - } | ||
| 552 | - | ||
| 553 | - &-circle-1 { | ||
| 554 | - width: 400rpx; | ||
| 555 | - height: 400rpx; | ||
| 556 | - top: -200rpx; | ||
| 557 | - right: -100rpx; | ||
| 558 | - } | ||
| 559 | - | ||
| 560 | - &-circle-2 { | ||
| 561 | - width: 300rpx; | ||
| 562 | - height: 300rpx; | ||
| 563 | - bottom: -100rpx; | ||
| 564 | - left: -80rpx; | ||
| 565 | - } | ||
| 566 | - | ||
| 567 | - &-circle-3 { | ||
| 568 | - width: 200rpx; | ||
| 569 | - height: 200rpx; | ||
| 570 | - top: 50%; | ||
| 571 | - right: 20%; | ||
| 572 | - } | ||
| 573 | - | ||
| 574 | - &-content { | ||
| 575 | - position: relative; | ||
| 576 | - z-index: 1; | ||
| 577 | - display: flex; | ||
| 578 | - flex-direction: column; | ||
| 579 | - align-items: center; | ||
| 580 | - } | ||
| 581 | - | ||
| 582 | - &-currency { | ||
| 583 | - font-size: 48rpx; | ||
| 584 | - font-weight: bold; | ||
| 585 | - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | ||
| 586 | - --webkit-background-clip: text; | ||
| 587 | - --webkit-text-fill-color: transparent; | ||
| 588 | - background-clip: text; | ||
| 589 | - margin-bottom: 20rpx; | ||
| 590 | - } | ||
| 591 | - | ||
| 592 | - &-value { | ||
| 593 | - font-size: 88rpx; | ||
| 594 | - font-weight: bold; | ||
| 595 | - color: #333; | ||
| 596 | - line-height: 1.2; | ||
| 597 | - margin-bottom: 16rpx; | ||
| 598 | - } | ||
| 599 | - | ||
| 600 | - &-hint { | ||
| 601 | - font-size: 28rpx; | ||
| 602 | - color: #999; | ||
| 603 | - } | ||
| 604 | } | 539 | } |
| 605 | </style> | 540 | </style> | ... | ... |
-
Please register or login to post a comment