From c1411e0fde8ef19bf67025679e0b3dc1ea58d314 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 5 Nov 2026 15:30:19 +0800 Subject: [PATCH] 11 --- .../user/components/UserMemberTagForm.vue | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/views/member/user/components/UserMemberTagForm.vue b/src/views/member/user/components/UserMemberTagForm.vue index a7abbe21..fe8f8168 100644 --- a/src/views/member/user/components/UserMemberTagForm.vue +++ b/src/views/member/user/components/UserMemberTagForm.vue @@ -30,7 +30,7 @@ const formData = ref({ memberRecentTagList: [], }) -const memberRecentTagList = ref() +const systemTagTypes = ref([]) const formRules = reactive({ // memberRecentTagList: [{ required: true, message: '用户标签不能为空', trigger: 'blur' }] @@ -47,12 +47,14 @@ const open = async (id?: number) => { try { const data = await UserApi.getUser(id) if (data && data.memberTagList?.length) { - const bizTypes = data.memberTagList.map(item => item.tagBizType) ?? [] + const bizTypes = Array.from(new Set( + data.memberTagList.map((item: { tagBizType: string }) => item.tagBizType) + )) data.memberRecentTagList = bizTypes.filter(item => !['2', '4'].includes(item)) - memberRecentTagList.value = bizTypes.filter(item => ['2', '4'].includes(item)) + systemTagTypes.value = bizTypes.filter(item => ['2', '4'].includes(item)) } else { data.memberRecentTagList = [] - memberRecentTagList.value = [] + systemTagTypes.value = [] } formData.value = data } finally { @@ -65,20 +67,22 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗 /** 提交表单 */ const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 const submitForm = async () => { - // 校验表单 - if (!formRef) return - const valid = await formRef.value.validate() - if (!valid) return - // 提交请求 + if (formLoading.value || !formRef.value) return + // 校验期间也阻止重复提交。 formLoading.value = true try { - const _params = formData.value - if (!_params.memberRecentTagList || !_params.memberRecentTagList?.length) { - _params.memberRecentTagList = [] + const valid = await formRef.value.validate() + if (!valid) return + // 保留系统管理的新人/VIP标签,独立构造请求,失败重试不会累加到表单。 + const params = { + ...formData.value, + memberRecentTagList: Array.from(new Set([ + ...(formData.value.memberRecentTagList ?? []), + ...systemTagTypes.value + ])) } - _params.memberRecentTagList.push(...memberRecentTagList.value) - await UserApi.updateUser(_params) + await UserApi.updateUser(params) message.success(t('common.updateSuccess')) dialogVisible.value = false @@ -95,6 +99,7 @@ const resetForm = () => { id: undefined, memberRecentTagList: [], } + systemTagTypes.value = [] formRef.value?.resetFields() }