fix(plan): 修复提取期弹窗嵌套被遮挡问题
- PeriodInput 集成 GlobalPopupManager 系统 - PlanPopupNew 添加动态 overflow 控制避免子弹窗裁剪 - 调整 PeriodInput 弹窗高度为 40% 适配屏幕显示 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Showing
3 changed files
with
168 additions
and
5 deletions
| ... | @@ -3,6 +3,118 @@ | ... | @@ -3,6 +3,118 @@ |
| 3 | 记录项目开发过程中的重要变更和完成任务。 | 3 | 记录项目开发过程中的重要变更和完成任务。 |
| 4 | 4 | ||
| 5 | ## 2026-02-28 | 5 | ## 2026-02-28 |
| 6 | +### 17:11:05 - fix | ||
| 7 | + | ||
| 8 | +- 删除 if/else 块外部的重复 mv 命令 | ||
| 9 | +- TEMP_FILE 变量只在块内有效,外部无法访问 | ||
| 10 | + | ||
| 11 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky | ||
| 12 | + | ||
| 13 | +- 删除 if/else 块外部的重复 mv 命令 | ||
| 14 | +- TEMP_FILE 变量只在块内有效,外部无法访问 | ||
| 15 | + | ||
| 16 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 修复 CHANGELOG 脚本重复 mv 命令错误 | ||
| 17 | + | ||
| 18 | +- 删除 if/else 块外部的重复 mv 命令 | ||
| 19 | +- TEMP_FILE 变量只在块内有效,外部无法访问 | ||
| 20 | + | ||
| 21 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | ||
| 22 | + | ||
| 23 | +**影响文件**: | ||
| 24 | +- `CHANGELOG.md` | ||
| 25 | + | ||
| 26 | +**变更摘要**: | ||
| 27 | +- 修复 CHANGELOG 脚本重复 mv 命令错误 | ||
| 28 | + | ||
| 29 | +- 删除 if/else 块外部的重复 mv 命令 | ||
| 30 | +- TEMP_FILE 变量只在块内有效,外部无法访问 | ||
| 31 | + | ||
| 32 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | ||
| 33 | + | ||
| 34 | +**相关提交**: | ||
| 35 | +- `04f7261` - fix | ||
| 36 | + | ||
| 37 | +- 删除 if/else 块外部的重复 mv 命令 | ||
| 38 | +- TEMP_FILE 变量只在块内有效,外部无法访问 | ||
| 39 | + | ||
| 40 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky | ||
| 41 | + | ||
| 42 | +- 删除 if/else 块外部的重复 mv 命令 | ||
| 43 | +- TEMP_FILE 变量只在块内有效,外部无法访问 | ||
| 44 | + | ||
| 45 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 修复 CHANGELOG 脚本重复 mv 命令错误 | ||
| 46 | + | ||
| 47 | +- 删除 if/else 块外部的重复 mv 命令 | ||
| 48 | +- TEMP_FILE 变量只在块内有效,外部无法访问 | ||
| 49 | + | ||
| 50 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | ||
| 51 | + | ||
| 52 | +--- | ||
| 53 | + | ||
| 54 | + | ||
| 55 | +### 17:10:43 - refactor | ||
| 56 | + | ||
| 57 | +- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" | ||
| 58 | +- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) | ||
| 59 | +- 插入逻辑:追加到日期下,而非文件开头 | ||
| 60 | +- 解决误判问题,现在能正确识别今日已有条目 | ||
| 61 | + | ||
| 62 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky | ||
| 63 | + | ||
| 64 | +- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" | ||
| 65 | +- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) | ||
| 66 | +- 插入逻辑:追加到日期下,而非文件开头 | ||
| 67 | +- 解决误判问题,现在能正确识别今日已有条目 | ||
| 68 | + | ||
| 69 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 重写 CHANGELOG 自动更新格式匹配根目录 | ||
| 70 | + | ||
| 71 | +- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" | ||
| 72 | +- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) | ||
| 73 | +- 插入逻辑:追加到日期下,而非文件开头 | ||
| 74 | +- 解决误判问题,现在能正确识别今日已有条目 | ||
| 75 | + | ||
| 76 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | ||
| 77 | + | ||
| 78 | +**影响文件**: | ||
| 79 | +- `无` | ||
| 80 | + | ||
| 81 | +**变更摘要**: | ||
| 82 | +- 重写 CHANGELOG 自动更新格式匹配根目录 | ||
| 83 | + | ||
| 84 | +- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" | ||
| 85 | +- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) | ||
| 86 | +- 插入逻辑:追加到日期下,而非文件开头 | ||
| 87 | +- 解决误判问题,现在能正确识别今日已有条目 | ||
| 88 | + | ||
| 89 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | ||
| 90 | + | ||
| 91 | +**相关提交**: | ||
| 92 | +- `06fe556` - refactor | ||
| 93 | + | ||
| 94 | +- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" | ||
| 95 | +- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) | ||
| 96 | +- 插入逻辑:追加到日期下,而非文件开头 | ||
| 97 | +- 解决误判问题,现在能正确识别今日已有条目 | ||
| 98 | + | ||
| 99 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky | ||
| 100 | + | ||
| 101 | +- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" | ||
| 102 | +- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) | ||
| 103 | +- 插入逻辑:追加到日期下,而非文件开头 | ||
| 104 | +- 解决误判问题,现在能正确识别今日已有条目 | ||
| 105 | + | ||
| 106 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 重写 CHANGELOG 自动更新格式匹配根目录 | ||
| 107 | + | ||
| 108 | +- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" | ||
| 109 | +- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) | ||
| 110 | +- 插入逻辑:追加到日期下,而非文件开头 | ||
| 111 | +- 解决误判问题,现在能正确识别今日已有条目 | ||
| 112 | + | ||
| 113 | +Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | ||
| 114 | + | ||
| 115 | +--- | ||
| 116 | + | ||
| 117 | + | ||
| 6 | 118 | ||
| 7 | ### 17:02:37 - feat(plan): 年缴保费显示添加千分位分隔符 | 119 | ### 17:02:37 - feat(plan): 年缴保费显示添加千分位分隔符 |
| 8 | 120 | ... | ... |
| ... | @@ -23,7 +23,7 @@ | ... | @@ -23,7 +23,7 @@ |
| 23 | position="bottom" | 23 | position="bottom" |
| 24 | :overlay="true" | 24 | :overlay="true" |
| 25 | :close-on-click-overlay="false" | 25 | :close-on-click-overlay="false" |
| 26 | - :style="{ padding: '0', borderRadius: '24rpx', overflow: 'hidden' }" | 26 | + :style="{ padding: '0', borderRadius: '24rpx 24rpx 0 0', overflow: 'hidden', height: '40%' }" |
| 27 | :overlay-style="{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }" | 27 | :overlay-style="{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }" |
| 28 | > | 28 | > |
| 29 | <view class="flex flex-col bg-white"> | 29 | <view class="flex flex-col bg-white"> |
| ... | @@ -116,8 +116,9 @@ | ... | @@ -116,8 +116,9 @@ |
| 116 | * @confirm="handlePeriodConfirm" | 116 | * @confirm="handlePeriodConfirm" |
| 117 | * /> | 117 | * /> |
| 118 | */ | 118 | */ |
| 119 | -import { ref, computed, watch } from 'vue' | 119 | +import { ref, computed, watch, onMounted, onUnmounted } from 'vue' |
| 120 | import IconFont from '@/components/icons/IconFont.vue' | 120 | import IconFont from '@/components/icons/IconFont.vue' |
| 121 | +import { useGlobalPopup } from './GlobalPopupManager.js' | ||
| 121 | 122 | ||
| 122 | /** | 123 | /** |
| 123 | * 组件属性 | 124 | * 组件属性 |
| ... | @@ -238,6 +239,34 @@ const emit = defineEmits([ | ... | @@ -238,6 +239,34 @@ const emit = defineEmits([ |
| 238 | ]) | 239 | ]) |
| 239 | 240 | ||
| 240 | /** | 241 | /** |
| 242 | + * 使用全局弹窗管理器 | ||
| 243 | + * @description 当弹窗打开时,通知父弹窗隐藏底部按钮 | ||
| 244 | + */ | ||
| 245 | +const { registerPopup, activatePopup, deactivatePopup } = useGlobalPopup() | ||
| 246 | + | ||
| 247 | +/** | ||
| 248 | + * 输入弹窗 ID | ||
| 249 | + * @type {Ref<string|null>} | ||
| 250 | + */ | ||
| 251 | +const inputPopupId = ref(null) | ||
| 252 | + | ||
| 253 | +/** | ||
| 254 | + * 组件挂载时注册弹窗 | ||
| 255 | + */ | ||
| 256 | +onMounted(() => { | ||
| 257 | + inputPopupId.value = registerPopup() | ||
| 258 | +}) | ||
| 259 | + | ||
| 260 | +/** | ||
| 261 | + * 组件卸载时取消注册 | ||
| 262 | + */ | ||
| 263 | +onUnmounted(() => { | ||
| 264 | + if (inputPopupId.value) { | ||
| 265 | + deactivatePopup(inputPopupId.value) | ||
| 266 | + } | ||
| 267 | +}) | ||
| 268 | + | ||
| 269 | +/** | ||
| 241 | * 弹窗显示状态 | 270 | * 弹窗显示状态 |
| 242 | */ | 271 | */ |
| 243 | const showInputModal = ref(false) | 272 | const showInputModal = ref(false) |
| ... | @@ -298,7 +327,16 @@ watch(() => props.visible, (newVal) => { | ... | @@ -298,7 +327,16 @@ watch(() => props.visible, (newVal) => { |
| 298 | * 监听弹窗状态变化,同步到父组件 | 327 | * 监听弹窗状态变化,同步到父组件 |
| 299 | */ | 328 | */ |
| 300 | watch(showInputModal, (newVal) => { | 329 | watch(showInputModal, (newVal) => { |
| 301 | - if (!newVal) { | 330 | + if (newVal) { |
| 331 | + // 弹窗打开:激活全局弹窗,通知父弹窗隐藏 footer | ||
| 332 | + if (inputPopupId.value) { | ||
| 333 | + activatePopup(inputPopupId.value) | ||
| 334 | + } | ||
| 335 | + } else { | ||
| 336 | + // 弹窗关闭:停用全局弹窗,通知父弹窗恢复 footer | ||
| 337 | + if (inputPopupId.value) { | ||
| 338 | + deactivatePopup(inputPopupId.value) | ||
| 339 | + } | ||
| 302 | emit('update:visible', false) | 340 | emit('update:visible', false) |
| 303 | } | 341 | } |
| 304 | }) | 342 | }) | ... | ... |
| ... | @@ -12,7 +12,7 @@ | ... | @@ -12,7 +12,7 @@ |
| 12 | :safe-area-inset-bottom="true" | 12 | :safe-area-inset-bottom="true" |
| 13 | @update:visible="handleVisibleChange" | 13 | @update:visible="handleVisibleChange" |
| 14 | > | 14 | > |
| 15 | - <div class="h-full flex flex-col bg-gray-50 overflow-hidden rounded-t-2xl"> | 15 | + <div :class="containerClasses"> |
| 16 | <!-- Header --> | 16 | <!-- Header --> |
| 17 | <div class="flex justify-between items-center px-5 py-4 bg-white border-b border-gray-100 flex-shrink-0"> | 17 | <div class="flex justify-between items-center px-5 py-4 bg-white border-b border-gray-100 flex-shrink-0"> |
| 18 | <span class="text-lg font-bold text-gray-900">{{ title }}</span> | 18 | <span class="text-lg font-bold text-gray-900">{{ title }}</span> |
| ... | @@ -82,7 +82,7 @@ | ... | @@ -82,7 +82,7 @@ |
| 82 | * @author Claude Code | 82 | * @author Claude Code |
| 83 | * @version 2.0.0 - 支持全局弹窗管理器 | 83 | * @version 2.0.0 - 支持全局弹窗管理器 |
| 84 | */ | 84 | */ |
| 85 | -import { ref, watch, onMounted, onUnmounted } from 'vue' | 85 | +import { ref, computed, watch, onMounted, onUnmounted } from 'vue' |
| 86 | import IconFont from '@/components/icons/IconFont.vue' | 86 | import IconFont from '@/components/icons/IconFont.vue' |
| 87 | import { useParentPopup } from './PlanFields/GlobalPopupManager.js' | 87 | import { useParentPopup } from './PlanFields/GlobalPopupManager.js' |
| 88 | 88 | ||
| ... | @@ -115,6 +115,19 @@ const emit = defineEmits(['update:visible', 'close', 'submit']) | ... | @@ -115,6 +115,19 @@ const emit = defineEmits(['update:visible', 'close', 'submit']) |
| 115 | const showFooter = ref(true) | 115 | const showFooter = ref(true) |
| 116 | 116 | ||
| 117 | /** | 117 | /** |
| 118 | + * 容器动态类名 | ||
| 119 | + * @description 当有子弹窗时,移除 overflow-hidden 避免裁剪 | ||
| 120 | + * @type {ComputedRef<string>} | ||
| 121 | + */ | ||
| 122 | +const containerClasses = computed(() => { | ||
| 123 | + const baseClasses = 'h-full flex flex-col bg-gray-50 rounded-t-2xl' | ||
| 124 | + // 当有活动子弹窗时,使用 overflow-visible 允许子弹窗溢出 | ||
| 125 | + return hasActiveChildPopup.value | ||
| 126 | + ? `${baseClasses} overflow-visible` | ||
| 127 | + : `${baseClasses} overflow-hidden` | ||
| 128 | +}) | ||
| 129 | + | ||
| 130 | +/** | ||
| 118 | * 使用父弹窗管理器 | 131 | * 使用父弹窗管理器 |
| 119 | */ | 132 | */ |
| 120 | const { registerFooterCallback, hasActiveChildPopup } = useParentPopup() | 133 | const { registerFooterCallback, hasActiveChildPopup } = useParentPopup() | ... | ... |
-
Please register or login to post a comment