hookehuyr

fix(plan): 修复提取期弹窗嵌套被遮挡问题

- PeriodInput 集成 GlobalPopupManager 系统
- PlanPopupNew 添加动态 overflow 控制避免子弹窗裁剪
- 调整 PeriodInput 弹窗高度为 40% 适配屏幕显示

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
......@@ -3,6 +3,118 @@
记录项目开发过程中的重要变更和完成任务。
## 2026-02-28
### 17:11:05 - fix
- 删除 if/else 块外部的重复 mv 命令
- TEMP_FILE 变量只在块内有效,外部无法访问
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky
- 删除 if/else 块外部的重复 mv 命令
- TEMP_FILE 变量只在块内有效,外部无法访问
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 修复 CHANGELOG 脚本重复 mv 命令错误
- 删除 if/else 块外部的重复 mv 命令
- TEMP_FILE 变量只在块内有效,外部无法访问
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
**影响文件**:
- `CHANGELOG.md`
**变更摘要**:
- 修复 CHANGELOG 脚本重复 mv 命令错误
- 删除 if/else 块外部的重复 mv 命令
- TEMP_FILE 变量只在块内有效,外部无法访问
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
**相关提交**:
- `04f7261` - fix
- 删除 if/else 块外部的重复 mv 命令
- TEMP_FILE 变量只在块内有效,外部无法访问
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky
- 删除 if/else 块外部的重复 mv 命令
- TEMP_FILE 变量只在块内有效,外部无法访问
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 修复 CHANGELOG 脚本重复 mv 命令错误
- 删除 if/else 块外部的重复 mv 命令
- TEMP_FILE 变量只在块内有效,外部无法访问
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---
### 17:10:43 - refactor
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 重写 CHANGELOG 自动更新格式匹配根目录
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
**影响文件**:
- `无`
**变更摘要**:
- 重写 CHANGELOG 自动更新格式匹配根目录
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
**相关提交**:
- `06fe556` - refactor
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>(husky
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>): 重写 CHANGELOG 自动更新格式匹配根目录
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---
### 17:02:37 - feat(plan): 年缴保费显示添加千分位分隔符
......
......@@ -23,7 +23,7 @@
position="bottom"
:overlay="true"
:close-on-click-overlay="false"
:style="{ padding: '0', borderRadius: '24rpx', overflow: 'hidden' }"
:style="{ padding: '0', borderRadius: '24rpx 24rpx 0 0', overflow: 'hidden', height: '40%' }"
:overlay-style="{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }"
>
<view class="flex flex-col bg-white">
......@@ -116,8 +116,9 @@
* @confirm="handlePeriodConfirm"
* />
*/
import { ref, computed, watch } from 'vue'
import { ref, computed, watch, onMounted, onUnmounted } from 'vue'
import IconFont from '@/components/icons/IconFont.vue'
import { useGlobalPopup } from './GlobalPopupManager.js'
/**
* 组件属性
......@@ -238,6 +239,34 @@ const emit = defineEmits([
])
/**
* 使用全局弹窗管理器
* @description 当弹窗打开时,通知父弹窗隐藏底部按钮
*/
const { registerPopup, activatePopup, deactivatePopup } = useGlobalPopup()
/**
* 输入弹窗 ID
* @type {Ref<string|null>}
*/
const inputPopupId = ref(null)
/**
* 组件挂载时注册弹窗
*/
onMounted(() => {
inputPopupId.value = registerPopup()
})
/**
* 组件卸载时取消注册
*/
onUnmounted(() => {
if (inputPopupId.value) {
deactivatePopup(inputPopupId.value)
}
})
/**
* 弹窗显示状态
*/
const showInputModal = ref(false)
......@@ -298,7 +327,16 @@ watch(() => props.visible, (newVal) => {
* 监听弹窗状态变化,同步到父组件
*/
watch(showInputModal, (newVal) => {
if (!newVal) {
if (newVal) {
// 弹窗打开:激活全局弹窗,通知父弹窗隐藏 footer
if (inputPopupId.value) {
activatePopup(inputPopupId.value)
}
} else {
// 弹窗关闭:停用全局弹窗,通知父弹窗恢复 footer
if (inputPopupId.value) {
deactivatePopup(inputPopupId.value)
}
emit('update:visible', false)
}
})
......
......@@ -12,7 +12,7 @@
:safe-area-inset-bottom="true"
@update:visible="handleVisibleChange"
>
<div class="h-full flex flex-col bg-gray-50 overflow-hidden rounded-t-2xl">
<div :class="containerClasses">
<!-- Header -->
<div class="flex justify-between items-center px-5 py-4 bg-white border-b border-gray-100 flex-shrink-0">
<span class="text-lg font-bold text-gray-900">{{ title }}</span>
......@@ -82,7 +82,7 @@
* @author Claude Code
* @version 2.0.0 - 支持全局弹窗管理器
*/
import { ref, watch, onMounted, onUnmounted } from 'vue'
import { ref, computed, watch, onMounted, onUnmounted } from 'vue'
import IconFont from '@/components/icons/IconFont.vue'
import { useParentPopup } from './PlanFields/GlobalPopupManager.js'
......@@ -115,6 +115,19 @@ const emit = defineEmits(['update:visible', 'close', 'submit'])
const showFooter = ref(true)
/**
* 容器动态类名
* @description 当有子弹窗时,移除 overflow-hidden 避免裁剪
* @type {ComputedRef<string>}
*/
const containerClasses = computed(() => {
const baseClasses = 'h-full flex flex-col bg-gray-50 rounded-t-2xl'
// 当有活动子弹窗时,使用 overflow-visible 允许子弹窗溢出
return hasActiveChildPopup.value
? `${baseClasses} overflow-visible`
: `${baseClasses} overflow-hidden`
})
/**
* 使用父弹窗管理器
*/
const { registerFooterCallback, hasActiveChildPopup } = useParentPopup()
......