fix(plan): 防止计划弹窗选择器点击遮罩关闭
- 为所有 PlanFields 选择器添加 close-on-click-overlay="false" - 添加 catch-move 防止触摸事件穿透 - 优化弹窗交互体验,避免误操作关闭 影响文件: - src/components/PlanFields/AgePicker.vue - src/components/PlanFields/AgePickerGlobal.vue - src/components/PlanFields/DatePicker.vue - src/components/PlanFields/DatePickerGlobal.vue - src/components/PlanFields/SelectPicker.vue - src/components/PlanFields/SelectPickerGlobal.vue - src/components/PlanPopup/index.vue Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Showing
8 changed files
with
12 additions
and
13 deletions
| ... | @@ -9,7 +9,6 @@ declare module 'vue' { | ... | @@ -9,7 +9,6 @@ declare module 'vue' { |
| 9 | export interface GlobalComponents { | 9 | export interface GlobalComponents { |
| 10 | AgePicker: typeof import('./src/components/PlanFields/AgePicker.vue')['default'] | 10 | AgePicker: typeof import('./src/components/PlanFields/AgePicker.vue')['default'] |
| 11 | AgePickerGlobal: typeof import('./src/components/PlanFields/AgePickerGlobal.vue')['default'] | 11 | AgePickerGlobal: typeof import('./src/components/PlanFields/AgePickerGlobal.vue')['default'] |
| 12 | - AmountInput: typeof import('./src/components/PlanFields/AmountInput.vue')['default'] | ||
| 13 | AmountKeyboard: typeof import('./src/components/PlanFields/AmountKeyboard.vue')['default'] | 12 | AmountKeyboard: typeof import('./src/components/PlanFields/AmountKeyboard.vue')['default'] |
| 14 | CriticalIllnessTemplate: typeof import('./src/components/PlanTemplates/CriticalIllnessTemplate.vue')['default'] | 13 | CriticalIllnessTemplate: typeof import('./src/components/PlanTemplates/CriticalIllnessTemplate.vue')['default'] |
| 15 | DatePicker: typeof import('./src/components/PlanFields/DatePicker.vue')['default'] | 14 | DatePicker: typeof import('./src/components/PlanFields/DatePicker.vue')['default'] |
| ... | @@ -18,7 +17,6 @@ declare module 'vue' { | ... | @@ -18,7 +17,6 @@ declare module 'vue' { |
| 18 | FilterTabs: typeof import('./src/components/FilterTabs.vue')['default'] | 17 | FilterTabs: typeof import('./src/components/FilterTabs.vue')['default'] |
| 19 | 'FilterTabs.example': typeof import('./src/components/FilterTabs.example.vue')['default'] | 18 | 'FilterTabs.example': typeof import('./src/components/FilterTabs.example.vue')['default'] |
| 20 | IconFont: typeof import('./src/components/IconFont.vue')['default'] | 19 | IconFont: typeof import('./src/components/IconFont.vue')['default'] |
| 21 | - IndexNav: typeof import('./src/components/indexNav.vue')['default'] | ||
| 22 | LifeInsuranceTemplate: typeof import('./src/components/PlanTemplates/LifeInsuranceTemplate.vue')['default'] | 20 | LifeInsuranceTemplate: typeof import('./src/components/PlanTemplates/LifeInsuranceTemplate.vue')['default'] |
| 23 | ListItemActions: typeof import('./src/components/ListItemActions/index.vue')['default'] | 21 | ListItemActions: typeof import('./src/components/ListItemActions/index.vue')['default'] |
| 24 | LoadMoreList: typeof import('./src/components/LoadMoreList/index.vue')['default'] | 22 | LoadMoreList: typeof import('./src/components/LoadMoreList/index.vue')['default'] |
| ... | @@ -38,20 +36,15 @@ declare module 'vue' { | ... | @@ -38,20 +36,15 @@ declare module 'vue' { |
| 38 | NutTabs: typeof import('@nutui/nutui-taro')['Tabs'] | 36 | NutTabs: typeof import('@nutui/nutui-taro')['Tabs'] |
| 39 | OfficeViewer: typeof import('./src/components/OfficeViewer.vue')['default'] | 37 | OfficeViewer: typeof import('./src/components/OfficeViewer.vue')['default'] |
| 40 | PdfPreview: typeof import('./src/components/PdfPreview.vue')['default'] | 38 | PdfPreview: typeof import('./src/components/PdfPreview.vue')['default'] |
| 41 | - Picker: typeof import('./src/components/time-picker-data/picker.vue')['default'] | ||
| 42 | PlanFormContainer: typeof import('./src/components/PlanFormContainer.vue')['default'] | 39 | PlanFormContainer: typeof import('./src/components/PlanFormContainer.vue')['default'] |
| 43 | - PlanPopup: typeof import('./src/components/PlanSchemes/PlanPopup.vue')['default'] | 40 | + PlanPopup: typeof import('./src/components/PlanPopup/index.vue')['default'] |
| 44 | PlanPopupNew: typeof import('./src/components/PlanPopupNew.vue')['default'] | 41 | PlanPopupNew: typeof import('./src/components/PlanPopupNew.vue')['default'] |
| 45 | - PosterBuilder: typeof import('./src/components/PosterBuilder/index.vue')['default'] | ||
| 46 | ProductCard: typeof import('./src/components/ProductCard.vue')['default'] | 42 | ProductCard: typeof import('./src/components/ProductCard.vue')['default'] |
| 47 | QrCode: typeof import('./src/components/qrCode.vue')['default'] | 43 | QrCode: typeof import('./src/components/qrCode.vue')['default'] |
| 48 | - QrCodeSearch: typeof import('./src/components/qrCodeSearch.vue')['default'] | ||
| 49 | RadioGroup: typeof import('./src/components/PlanFields/RadioGroup.vue')['default'] | 44 | RadioGroup: typeof import('./src/components/PlanFields/RadioGroup.vue')['default'] |
| 50 | RouterLink: typeof import('vue-router')['RouterLink'] | 45 | RouterLink: typeof import('vue-router')['RouterLink'] |
| 51 | RouterView: typeof import('vue-router')['RouterView'] | 46 | RouterView: typeof import('vue-router')['RouterView'] |
| 52 | - SavingsTemplate: typeof import('./src/components/SavingsTemplate.vue')['default'] | 47 | + SavingsTemplate: typeof import('./src/components/PlanTemplates/SavingsTemplate.vue')['default'] |
| 53 | - SchemeA: typeof import('./src/components/PlanSchemes/SchemeA.vue')['default'] | ||
| 54 | - SchemeB: typeof import('./src/components/PlanSchemes/SchemeB.vue')['default'] | ||
| 55 | SearchBar: typeof import('./src/components/SearchBar.vue')['default'] | 48 | SearchBar: typeof import('./src/components/SearchBar.vue')['default'] |
| 56 | SectionCard: typeof import('./src/components/SectionCard.vue')['default'] | 49 | SectionCard: typeof import('./src/components/SectionCard.vue')['default'] |
| 57 | SectionItem: typeof import('./src/components/SectionItem.vue')['default'] | 50 | SectionItem: typeof import('./src/components/SectionItem.vue')['default'] | ... | ... |
| ... | @@ -22,7 +22,9 @@ | ... | @@ -22,7 +22,9 @@ |
| 22 | position="bottom" | 22 | position="bottom" |
| 23 | v-model:visible="showPicker" | 23 | v-model:visible="showPicker" |
| 24 | :z-index="9999" | 24 | :z-index="9999" |
| 25 | - :overlay="true" | 25 | + :overlay="false" |
| 26 | + :close-on-click-overlay="false" | ||
| 27 | + :catch-move="true" | ||
| 26 | > | 28 | > |
| 27 | <nut-picker | 29 | <nut-picker |
| 28 | v-model="pickerValue" | 30 | v-model="pickerValue" | ... | ... |
| ... | @@ -23,6 +23,7 @@ | ... | @@ -23,6 +23,7 @@ |
| 23 | v-model:visible="showPicker" | 23 | v-model:visible="showPicker" |
| 24 | :z-index="9999" | 24 | :z-index="9999" |
| 25 | :overlay="true" | 25 | :overlay="true" |
| 26 | + :close-on-click-overlay="false" | ||
| 26 | > | 27 | > |
| 27 | <nut-picker | 28 | <nut-picker |
| 28 | v-model="pickerValue" | 29 | v-model="pickerValue" | ... | ... |
| ... | @@ -18,7 +18,7 @@ | ... | @@ -18,7 +18,7 @@ |
| 18 | </div> | 18 | </div> |
| 19 | 19 | ||
| 20 | <!-- DatePicker 弹窗 --> | 20 | <!-- DatePicker 弹窗 --> |
| 21 | - <nut-popup position="bottom" v-model:visible="showDatePicker"> | 21 | + <nut-popup position="bottom" v-model:visible="showDatePicker" :close-on-click-overlay="false"> |
| 22 | <nut-date-picker | 22 | <nut-date-picker |
| 23 | v-model="currentDate" | 23 | v-model="currentDate" |
| 24 | :min-date="minDate" | 24 | :min-date="minDate" | ... | ... |
| ... | @@ -18,7 +18,7 @@ | ... | @@ -18,7 +18,7 @@ |
| 18 | </div> | 18 | </div> |
| 19 | 19 | ||
| 20 | <!-- DatePicker 弹窗 --> | 20 | <!-- DatePicker 弹窗 --> |
| 21 | - <nut-popup position="bottom" v-model:visible="showDatePicker"> | 21 | + <nut-popup position="bottom" v-model:visible="showDatePicker" :close-on-click-overlay="false"> |
| 22 | <nut-date-picker | 22 | <nut-date-picker |
| 23 | v-model="currentDate" | 23 | v-model="currentDate" |
| 24 | :min-date="minDate" | 24 | :min-date="minDate" | ... | ... |
| ... | @@ -23,6 +23,7 @@ | ... | @@ -23,6 +23,7 @@ |
| 23 | v-model:visible="showPicker" | 23 | v-model:visible="showPicker" |
| 24 | :z-index="9999" | 24 | :z-index="9999" |
| 25 | :overlay="true" | 25 | :overlay="true" |
| 26 | + :close-on-click-overlay="false" | ||
| 26 | > | 27 | > |
| 27 | <nut-picker | 28 | <nut-picker |
| 28 | :columns="pickerColumns" | 29 | :columns="pickerColumns" | ... | ... |
| ... | @@ -22,6 +22,7 @@ | ... | @@ -22,6 +22,7 @@ |
| 22 | position="bottom" | 22 | position="bottom" |
| 23 | v-model:visible="showPicker" | 23 | v-model:visible="showPicker" |
| 24 | :overlay="true" | 24 | :overlay="true" |
| 25 | + :close-on-click-overlay="false" | ||
| 25 | > | 26 | > |
| 26 | <nut-picker | 27 | <nut-picker |
| 27 | :columns="pickerColumns" | 28 | :columns="pickerColumns" | ... | ... |
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2026-01-31 12:49:11 | 2 | * @Date: 2026-01-31 12:49:11 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2026-02-06 21:40:34 | 4 | + * @LastEditTime: 2026-02-09 20:22:23 |
| 5 | * @FilePath: /manulife-weapp/src/components/PlanPopup/index.vue | 5 | * @FilePath: /manulife-weapp/src/components/PlanPopup/index.vue |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | --> | 7 | --> |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | :style="{ height: '90%' }" | 13 | :style="{ height: '90%' }" |
| 14 | :close-on-click-overlay="true" | 14 | :close-on-click-overlay="true" |
| 15 | :safe-area-inset-bottom="true" | 15 | :safe-area-inset-bottom="true" |
| 16 | + :catch-move="true" | ||
| 16 | @update:visible="handleVisibleChange" | 17 | @update:visible="handleVisibleChange" |
| 17 | > | 18 | > |
| 18 | <div class="h-full flex flex-col bg-gray-50 overflow-hidden rounded-t-2xl"> | 19 | <div class="h-full flex flex-col bg-gray-50 overflow-hidden rounded-t-2xl"> | ... | ... |
-
Please register or login to post a comment