hookehuyr

fix(plan): 修复计划书弹窗按钮显示逻辑

- 添加 hasTemplate prop 控制底部按钮显示状态
- 未找到模板时只显示"关闭"按钮
- 找到模板时显示"取消"和"生成计划书"按钮
- 改进用户体验,避免在无模板时显示无用的按钮

影响文件:
- src/components/plan/PlanPopupNew.vue
- src/components/plan/PlanFormContainer.vue

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
......@@ -5,6 +5,24 @@
---
## [2026-02-10] - 修复计划书弹窗按钮显示逻辑
### 修复
- **未找到模板时的按钮逻辑**
- 未找到计划书模板时,底部只显示"关闭"按钮
- 找到模板时,显示"取消"和"生成计划书"按钮
- 通过 `hasTemplate` prop 控制按钮显示状态
---
**详细信息**
- **影响文件**: src/components/plan/PlanPopupNew.vue, src/components/plan/PlanFormContainer.vue
- **技术栈**: Vue 3, Composition API
- **测试状态**: 待验证
- **备注**: 改进用户体验,避免在无模板时显示无用的"生成计划书"按钮
---
## [2026-02-10] - 升级依赖包到最新稳定版本
### 优化
......
......@@ -3,6 +3,7 @@
<PlanPopupNew
:visible="props.visible"
:title="templateConfig?.name || '计划书'"
:has-template="hasTemplate"
@close="close"
@submit="submit"
>
......@@ -159,6 +160,14 @@ const currentTemplateComponent = computed(() => {
})
/**
* 是否找到模板
* @description 用于控制底部按钮显示(找到模板:取消/生成计划书;未找到:关闭)
*/
const hasTemplate = computed(() => {
return currentTemplateComponent.value !== null && templateConfig.value?.config !== undefined
})
/**
* 表单数据
*/
const formData = ref({})
......
......@@ -31,8 +31,22 @@
<!-- Footer Buttons -->
<div
v-show="showFooter"
class="p-4 bg-white border-t border-gray-100 flex gap-3 flex-shrink-0 pb-safe"
class="p-4 bg-white border-t border-gray-100 flex-shrink-0 pb-safe"
>
<!-- 未找到模板:只显示关闭按钮 -->
<nut-button
v-if="!hasTemplate"
type="primary"
color="#2563EB"
block
class="w-full !h-[88rpx] !rounded-[16rpx] !text-[30rpx]"
@click="handleClose"
>
关闭
</nut-button>
<!-- 找到模板:显示取消/生成计划书按钮 -->
<div v-else class="flex gap-3 w-full">
<nut-button
plain
type="primary"
......@@ -50,6 +64,7 @@
生成计划书
</nut-button>
</div>
</div>
</div>
</nut-popup>
......@@ -80,6 +95,15 @@ const props = defineProps({
type: String,
default: '计划书',
},
/**
* 是否找到模板
* @description 如果未找到模板,只显示"关闭"按钮;否则显示"取消/生成计划书"按钮
* @type {boolean}
*/
hasTemplate: {
type: Boolean,
default: true,
},
})
const emit = defineEmits(['update:visible', 'close', 'submit'])
......