hookehuyr

refactor(plan): 用 Tailwind CSS 重构 AmountKeyboard 样式

- 删除 80+ 行自定义 Less 样式代码
- 使用 Tailwind CSS 工具类实现现代化 UI
- 添加磨砂玻璃效果和动态流光背景
- 优化布局层次和视觉层次
- 改进光标动画效果
- 统一使用项目样式规范(Tailwind 优先)

优化收益:
- 减少代码量,提高可维护性
- 视觉效果更现代化
- 符合项目 Tailwind 优先原则

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
...@@ -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,27 +47,40 @@ ...@@ -47,27 +47,40 @@
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> 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>
60 + </view>
61 +
62 + <!-- 垂直布局核心区域 -->
63 + <view class="flex flex-col items-center justify-center w-full mb-8">
64 + <!-- 币种符号 (放在上方) -->
65 + <view class="text-3xl font-medium text-slate-500 mb-4 font-sans">{{ currencySymbol }}</view>
57 66
58 - <!-- 内容区域 --> 67 + <!-- 金额数值 + 光标 -->
59 - <view class="amount-modal-content"> 68 + <view class="flex items-center justify-center relative h-[110rpx]">
60 - <!-- 币种符号 --> 69 + <view class="text-[100rpx] font-bold text-slate-800 leading-none tracking-tight font-sans drop-shadow-sm tabular-nums">
61 - <view class="amount-modal-currency">{{ currencySymbol }}</view> 70 + {{ formattedInputValue || '0.00' }}
71 + </view>
62 72
63 - <!-- 金额数值 --> 73 + <!-- 动态光标 -->
64 - <view class="amount-modal-value"> 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>
65 - {{ formattedInputValue || '0.00' }} 75 + </view>
66 </view> 76 </view>
67 77
68 - <!-- 提示文字 --> 78 + <!-- 底部提示文字 -->
69 - <view class="amount-modal-hint">请输入金额</view> 79 + <view class="text-xs text-slate-400 font-light tracking-wide">请输入保额金额</view>
70 </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>
71 </view> 84 </view>
72 </nut-popup> 85 </nut-popup>
73 86
...@@ -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>
......