From 288193b957ec5bb9a2a368d8946265aae6c4d9c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Sun, 1 Feb 2026 13:11:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=89=E4=B8=AAbug=20-=20=E7=BC=96?= =?UTF-8?q?=E5=8F=B7/=E5=87=BA=E7=94=9F=E6=97=A5=E6=9C=9F/=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Bug描述 1. 会员编号列空白无数据 2. 出生日期显示"未知" 3. 点击"新增"按钮无反应 ## 问题分析 ### Bug1: 会员编号空白 **原因**: 前后端字段名不匹配 - 前端: `prop="memberNo"` - 后端: `memberCode` ### Bug2: 出生日期显示"未知" **原因**: 后端返回`birthday: null`时,前端直接显示为空单元格,用户体验差 ### Bug3: 新增按钮无反应 **原因**: `MemberDialog.vue`组件没有暴露`open`方法 - 父组件调用: `memberDialogRef.value?.open()` - 子组件未定义: 缺少`defineExpose({ open })` ## 修复内容 ### 1. 修正会员编号字段名 (index.vue) ```vue ``` ### 2. 修正出生日期显示 (index.vue) ```vue ``` ### 3. 修正弹窗组件架构 (MemberDialog.vue) ```javascript // 1. 移除未使用的props - const props = defineProps({ modelValue, memberId }) // 2. 添加内部状态 + const visible = ref(false) + const memberId = ref(null) // 3. 暴露open方法 + const open = (row) => { + memberId.value = row?.memberId || null + visible.value = true + } + defineExpose({ open }) // 4. 修正handleOpen逻辑 - if (props.memberId) { + if (memberId.value) { // 5. 添加handleClose清理 + const handleClose = () => { + formRef.value?.resetFields() + memberId.value = null + } ``` ## 验证结果 - ✅ 会员编号正常显示: MEM20260101 - ✅ 出生日期为空时显示"-" - ✅ 点击"新增"按钮弹出表单 - ✅ 编辑功能正常 --- 作者:湖北新华业务中台研发团队 --- .../views/member/components/MemberDialog.vue | 53 ++++++++++--------- pangu-ui/src/views/member/index.vue | 8 ++- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/pangu-ui/src/views/member/components/MemberDialog.vue b/pangu-ui/src/views/member/components/MemberDialog.vue index fea17d3..110b6bc 100644 --- a/pangu-ui/src/views/member/components/MemberDialog.vue +++ b/pangu-ui/src/views/member/components/MemberDialog.vue @@ -9,6 +9,7 @@ width="700px" :close-on-click-modal="false" destroy-on-close + @close="handleClose" @open="handleOpen" > props.modelValue, - set: (val) => emit('update:modelValue', val) -}) +const visible = ref(false) +const memberId = ref(null) const formRef = ref(null) const submitLoading = ref(false) +/** + * 打开弹窗 + * @param {Object} row - 编辑时传入会员数据 + */ +const open = (row) => { + memberId.value = row?.memberId || null + visible.value = true +} + +// 暴露方法给父组件 +defineExpose({ open }) + // 表单数据 const form = reactive({ memberId: null, @@ -303,9 +303,9 @@ const handleOpen = async () => { } // 编辑模式加载会员数据 - if (props.memberId) { + if (memberId.value) { try { - const res = await getMember(props.memberId) + const res = await getMember(memberId.value) if (res.code === 200 && res.data) { const data = res.data form.memberId = data.memberId @@ -342,6 +342,14 @@ const handleOpen = async () => { } } +/** + * 弹窗关闭时重置 + */ +const handleClose = () => { + formRef.value?.resetFields() + memberId.value = null +} + /** * 重置表单 */ @@ -530,11 +538,4 @@ const handleSubmit = async () => { submitLoading.value = false } } - -// 监听弹窗关闭,重置表单 -watch(visible, (val) => { - if (!val) { - formRef.value?.resetFields() - } -}) diff --git a/pangu-ui/src/views/member/index.vue b/pangu-ui/src/views/member/index.vue index c054ce8..7c576be 100644 --- a/pangu-ui/src/views/member/index.vue +++ b/pangu-ui/src/views/member/index.vue @@ -48,7 +48,7 @@ - + - + + +