hookehuyr

refactor(PlanSchemes): 统一方案A样式实现模式以保持视觉一致性

重构方案A组件布局与样式,使其与方案B保持一致
- 使用相同的容器结构、卡片布局和背景样式
- 将自定义图片替换为IconFont图标组件
- 使用NutUI Radio/Checkbox组件替换自定义选择器
- 统一输入框的边框、圆角和内边距样式
- 移除冗余的图标资源引用,优化代码结构
...@@ -41,6 +41,8 @@ src/ ...@@ -41,6 +41,8 @@ src/
41 ├── components/ # 通用组件 41 ├── components/ # 通用组件
42 │ ├── PosterBuilder/ # 海报生成器(可选) 42 │ ├── PosterBuilder/ # 海报生成器(可选)
43 │ ├── time-picker-data/ # 时间选择器 43 │ ├── time-picker-data/ # 时间选择器
44 +│ ├── PlanPopup/ # 录入计划书弹窗容器
45 +│ ├── PlanSchemes/ # 录入计划书方案组件
44 │ ├── indexNav.vue # 底部导航 46 │ ├── indexNav.vue # 底部导航
45 │ └── qrCode.vue # 二维码组件(可选) 47 │ └── qrCode.vue # 二维码组件(可选)
46 ├── composables/ # Composition API hooks 48 ├── composables/ # Composition API hooks
......
...@@ -13,9 +13,16 @@ declare module 'vue' { ...@@ -13,9 +13,16 @@ declare module 'vue' {
13 NavHeader: typeof import('./src/components/NavHeader.vue')['default'] 13 NavHeader: typeof import('./src/components/NavHeader.vue')['default']
14 NutAvatar: typeof import('@nutui/nutui-taro')['Avatar'] 14 NutAvatar: typeof import('@nutui/nutui-taro')['Avatar']
15 NutButton: typeof import('@nutui/nutui-taro')['Button'] 15 NutButton: typeof import('@nutui/nutui-taro')['Button']
16 + NutCheckbox: typeof import('@nutui/nutui-taro')['Checkbox']
17 + NutCheckboxGroup: typeof import('@nutui/nutui-taro')['CheckboxGroup']
18 + NutForm: typeof import('@nutui/nutui-taro')['Form']
19 + NutFormItem: typeof import('@nutui/nutui-taro')['FormItem']
20 + NutIcon: typeof import('@nutui/nutui-taro')['Icon']
16 NutInput: typeof import('@nutui/nutui-taro')['Input'] 21 NutInput: typeof import('@nutui/nutui-taro')['Input']
17 NutPicker: typeof import('@nutui/nutui-taro')['Picker'] 22 NutPicker: typeof import('@nutui/nutui-taro')['Picker']
18 NutPopup: typeof import('@nutui/nutui-taro')['Popup'] 23 NutPopup: typeof import('@nutui/nutui-taro')['Popup']
24 + NutRadio: typeof import('@nutui/nutui-taro')['Radio']
25 + NutRadioGroup: typeof import('@nutui/nutui-taro')['RadioGroup']
19 NutSearchbar: typeof import('@nutui/nutui-taro')['Searchbar'] 26 NutSearchbar: typeof import('@nutui/nutui-taro')['Searchbar']
20 NutTabPane: typeof import('@nutui/nutui-taro')['TabPane'] 27 NutTabPane: typeof import('@nutui/nutui-taro')['TabPane']
21 NutTabs: typeof import('@nutui/nutui-taro')['Tabs'] 28 NutTabs: typeof import('@nutui/nutui-taro')['Tabs']
......
1 +## [2026-01-31] - 统一方案A样式实现模式
2 +
3 +### 优化
4 +- 调整录入计划书方案A布局与样式 (`src/components/PlanSchemes/SchemeA.vue`)
5 + - 使用与方案B一致的容器结构与卡片布局
6 + - 统一背景、圆角与输入样式,保持视觉一致性
7 +
8 +---
9 +
10 +**详细信息**
11 +- **修改文件**: `src/components/PlanSchemes/SchemeA.vue`
12 +- **技术栈**: Vue 3, Tailwind CSS, NutUI
13 +
1 ## [2026-01-31] - 集成录入计划书方案B 14 ## [2026-01-31] - 集成录入计划书方案B
2 15
3 ### 新增 16 ### 新增
......
This diff is collapsed. Click to expand it.
...@@ -3,11 +3,7 @@ ...@@ -3,11 +3,7 @@
3 <!-- Header --> 3 <!-- Header -->
4 <div class="flex justify-between items-center px-5 py-5 bg-white rounded-t-xl"> 4 <div class="flex justify-between items-center px-5 py-5 bg-white rounded-t-xl">
5 <span class="text-lg font-normal text-gray-900">保险计划书申请</span> 5 <span class="text-lg font-normal text-gray-900">保险计划书申请</span>
6 - <img 6 + <IconFont name="close" size="16" color="#9CA3AF" @click="close" />
7 - class="w-5 h-5"
8 - src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPng43284a8c3fc98c60509d6d415fed8113414c4c0b072fa0f3b41fc26e76a03b15"
9 - @click="close"
10 - />
11 </div> 7 </div>
12 8
13 <!-- Scrollable Content --> 9 <!-- Scrollable Content -->
...@@ -29,54 +25,28 @@ ...@@ -29,54 +25,28 @@
29 </div> 25 </div>
30 </div> 26 </div>
31 27
32 - <!-- 附加计划 & 性别 --> 28 + <!-- 附加计划 -->
33 - <div class="flex justify-between items-center mb-5"> 29 + <div class="mb-5">
34 - <span class="text-base text-gray-900">附加计划</span> 30 + <span class="text-base text-gray-900">附加计划</span>
35 - <div class="flex items-center">
36 - <span class="text-sm text-gray-600 mr-4">性别</span>
37 - <div class="flex items-center">
38 - <div
39 - class="flex items-center mr-4 cursor-pointer"
40 - @click="form.gender = 'female'"
41 - >
42 - <img
43 - class="w-4.5 h-4.5 mr-1"
44 - src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPng1015590381802ed3f770814c3e05e4b73e6534f72e97a9a0721c459ed1dbac6a"
45 - />
46 - <span :class="form.gender === 'female' ? 'text-blue-600 font-bold' : 'text-gray-800'" class="text-sm">女</span>
47 - </div>
48 - <div
49 - class="flex items-center cursor-pointer"
50 - @click="form.gender = 'male'"
51 - >
52 - <img
53 - class="w-4.5 h-4.5 mr-1"
54 - src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPngb0bb17420dba3691281e919f69d1e06a69d343e53ee68ad570ec2fe340cdb09c"
55 - />
56 - <span :class="form.gender === 'male' ? 'text-blue-600 font-bold' : 'text-gray-500'" class="text-sm">男</span>
57 - </div>
58 - </div>
59 - </div>
60 </div> 31 </div>
61 32
33 + <!-- 性别 -->
34 + <div class="text-sm text-gray-600 mb-2">性别</div>
35 + <nut-radio-group v-model="form.gender" direction="horizontal" class="mb-4">
36 + <nut-radio label="female" class="mr-8">女</nut-radio>
37 + <nut-radio label="male">男</nut-radio>
38 + </nut-radio-group>
39 +
62 <!-- 年龄 --> 40 <!-- 年龄 -->
63 - <div class="flex justify-between items-center mb-5"> 41 + <div class="text-sm text-gray-600 mb-2">年龄</div>
64 - <span class="text-sm text-gray-600">年龄</span> 42 + <div class="border border-gray-200 rounded-lg mb-4 overflow-hidden">
65 - <div class="flex items-center"> 43 + <nut-input
66 - <nut-input 44 + v-model="form.age"
67 - v-model="form.age" 45 + type="digit"
68 - type="digit" 46 + placeholder="请输入年龄"
69 - placeholder="请输入" 47 + class="!p-0 !bg-transparent !text-sm !text-gray-900"
70 - class="!p-0 !bg-transparent !w-16 !text-right !text-gray-900 !text-sm" 48 + :border="false"
71 - :border="false" 49 + />
72 - input-align="right"
73 - />
74 - <span class="text-sm text-gray-900 mx-1">周岁</span>
75 - <img
76 - class="w-4 h-4"
77 - src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPng4f1ca24a37fc014649249f2a5db80cdec300bf86076429fb76cc42dff9b59f3d"
78 - />
79 - </div>
80 </div> 50 </div>
81 51
82 <!-- 保险期间 --> 52 <!-- 保险期间 -->
...@@ -89,45 +59,39 @@ ...@@ -89,45 +59,39 @@
89 59
90 <!-- 交费期间 --> 60 <!-- 交费期间 -->
91 <div class="text-sm text-gray-600 mb-3">交费期间</div> 61 <div class="text-sm text-gray-600 mb-3">交费期间</div>
92 - <div class="flex flex-wrap gap-3 mb-5"> 62 + <nut-radio-group v-model="form.paymentPeriod" direction="horizontal" class="mb-4">
93 - <div 63 + <nut-radio
94 v-for="period in paymentPeriods" 64 v-for="period in paymentPeriods"
95 :key="period" 65 :key="period"
96 - class="px-4 py-2 rounded-lg text-sm cursor-pointer transition-colors border" 66 + :label="period"
97 - :class="form.paymentPeriod === period ? 'bg-blue-600 text-white border-blue-600' : 'bg-gray-50 text-gray-600 border-gray-200'" 67 + class="mr-6"
98 - @click="form.paymentPeriod = period"
99 > 68 >
100 {{ period }} 69 {{ period }}
101 - </div> 70 + </nut-radio>
102 - </div> 71 + </nut-radio-group>
103 72
104 <!-- 年交保费 --> 73 <!-- 年交保费 -->
105 <div class="text-sm text-gray-600 mb-2">年交保费</div> 74 <div class="text-sm text-gray-600 mb-2">年交保费</div>
106 - <div class="bg-gray-50 rounded-lg border border-gray-200 p-3 flex justify-between items-center"> 75 + <div class="border border-gray-200 rounded-lg mb-4 flex items-center overflow-hidden">
107 - <nut-input 76 + <nut-input
108 v-model="form.premium" 77 v-model="form.premium"
109 type="digit" 78 type="digit"
110 placeholder="请输入保费" 79 placeholder="请输入保费"
111 - class="!p-0 !bg-transparent flex-1 !text-base !text-gray-900" 80 + class="!p-0 !bg-transparent flex-1 !text-sm !text-gray-900"
112 :border="false" 81 :border="false"
113 /> 82 />
114 - <span class="text-sm text-gray-500 ml-2">美元</span> 83 + <span class="text-sm text-gray-500 shrink-0 ml-2 mr-5">美元</span>
115 </div> 84 </div>
116 </div> 85 </div>
117 </div> 86 </div>
118 87
119 <!-- Footer Buttons --> 88 <!-- Footer Buttons -->
120 <div class="p-4 pt-2 pb-8 flex justify-between gap-4 bg-gray-50"> 89 <div class="p-4 pt-2 pb-8 flex justify-between gap-4 bg-gray-50">
121 - <div 90 + <div class="flex-1 py-3 text-center border border-blue-600 text-blue-600 rounded-lg text-base bg-white"
122 - class="flex-1 py-3 text-center border border-blue-600 text-blue-600 rounded-lg text-base bg-white" 91 + @click="close">
123 - @click="close"
124 - >
125 取消 92 取消
126 </div> 93 </div>
127 - <div 94 + <div class="flex-1 py-3 text-center bg-blue-600 text-white rounded-lg text-base" @click="submit">
128 - class="flex-1 py-3 text-center bg-blue-600 text-white rounded-lg text-base"
129 - @click="submit"
130 - >
131 提交申请 95 提交申请
132 </div> 96 </div>
133 </div> 97 </div>
...@@ -154,7 +118,7 @@ const form = reactive({ ...@@ -154,7 +118,7 @@ const form = reactive({
154 premium: '100000', 118 premium: '100000',
155 }); 119 });
156 120
157 -const paymentPeriods = ['10年交', '3年交', '5年交', '躸交', '2年交']; 121 +const paymentPeriods = ['10年交', '3年交', '5年交', '2年交'];
158 122
159 const close = () => { 123 const close = () => {
160 emit('close'); 124 emit('close');
...@@ -170,5 +134,6 @@ const submit = () => { ...@@ -170,5 +134,6 @@ const submit = () => {
170 :deep(.nut-input) { 134 :deep(.nut-input) {
171 padding: 0; 135 padding: 0;
172 background: transparent; 136 background: transparent;
137 + border-radius: inherit;
173 } 138 }
174 </style> 139 </style>
......