refactor(PlanSchemes): 统一方案A样式实现模式以保持视觉一致性
重构方案A组件布局与样式,使其与方案B保持一致 - 使用相同的容器结构、卡片布局和背景样式 - 将自定义图片替换为IconFont图标组件 - 使用NutUI Radio/Checkbox组件替换自定义选择器 - 统一输入框的边框、圆角和内边距样式 - 移除冗余的图标资源引用,优化代码结构
Showing
5 changed files
with
57 additions
and
70 deletions
| ... | @@ -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> | ... | ... |
-
Please register or login to post a comment