From ee0d657a5c116f21036bea3dadb0ce8942110d54 Mon Sep 17 00:00:00 2001 From: ldrop Date: Wed, 2 Jul 2025 16:03:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=9A=90=E5=BD=A2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messageSystem/components/addMessage.vue | 44 +++++++++------- .../components/recipientSelector.vue | 25 ++-------- .../messageSystem/components/smallBell.vue | 50 +++++++++++++++++++ .../modelMessage/messageSystem/index.vue | 2 +- .../components/TemplateFormDialog.vue | 29 ++++++----- .../components/VariableFormDialog.vue | 28 +++-------- src/views/modelMessage/variable/index.vue | 2 +- 7 files changed, 108 insertions(+), 72 deletions(-) create mode 100644 src/views/modelMessage/messageSystem/components/smallBell.vue diff --git a/src/views/modelMessage/messageSystem/components/addMessage.vue b/src/views/modelMessage/messageSystem/components/addMessage.vue index 782e72a..b5cce8d 100644 --- a/src/views/modelMessage/messageSystem/components/addMessage.vue +++ b/src/views/modelMessage/messageSystem/components/addMessage.vue @@ -51,7 +51,7 @@ - +
@@ -74,7 +74,7 @@ diff --git a/src/views/modelMessage/messageSystem/index.vue b/src/views/modelMessage/messageSystem/index.vue index 25e7f31..79c4388 100644 --- a/src/views/modelMessage/messageSystem/index.vue +++ b/src/views/modelMessage/messageSystem/index.vue @@ -105,7 +105,7 @@ - + {{ parseTime(detailForm.createTime) }} diff --git a/src/views/modelMessage/template/components/TemplateFormDialog.vue b/src/views/modelMessage/template/components/TemplateFormDialog.vue index a720206..2d0d655 100644 --- a/src/views/modelMessage/template/components/TemplateFormDialog.vue +++ b/src/views/modelMessage/template/components/TemplateFormDialog.vue @@ -65,7 +65,6 @@ import { ref, reactive, toRefs, getCurrentInstance, watch } from 'vue'; const { proxy } = getCurrentInstance(); const { template_type } = proxy.useDict("template_type"); -// Props const props = defineProps({ visible: { type: Boolean, @@ -85,10 +84,8 @@ const props = defineProps({ } }); -// Emits const emit = defineEmits(['update:visible', 'submit', 'cancel']); -// Data const templateRef = ref(null); const data = reactive({ form: { templateContent: '' }, @@ -103,14 +100,12 @@ const data = reactive({ const { form, rules } = toRefs(data); -// Watch props changes watch(() => props.formData, (newVal) => { if (newVal) { form.value = { ...newVal }; } }, { deep: true, immediate: true }); -// Methods function validateTemplateCode(_, value, callback) { if (!value) { callback(new Error('请输入模版CODE')); @@ -128,23 +123,35 @@ function handleVariableChange(value) { form.value.templateContent = ''; } - // 移除未选中的变量占位符 - const currentPlaceholders = form.value.templateContent.match(/\$\{\w+\}/g) || []; + // 获取当前模板内容中的所有 ${变量名} 格式的占位符 + const currentPlaceholders = form.value.templateContent.match(/\$\{[^}]+\}/g) || []; const selectedVariableNames = value.map(v => `\${${v}}`); + + // 移除未选中的变量占位符 currentPlaceholders.forEach(placeholder => { if (!selectedVariableNames.includes(placeholder)) { - form.value.templateContent = form.value.templateContent.replace(placeholder, '').trim(); + // 使用全局替换,移除所有匹配的占位符及其前后空格 + const escapedPlaceholder = placeholder.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const regex = new RegExp('\\s*' + escapedPlaceholder + '\\s*', 'g'); + form.value.templateContent = form.value.templateContent.replace(regex, ' '); } }); - // 添加新选中的变量占位符 + // 添加新选中的变量占位符(只添加最后一个新选择的变量) const lastSelectedVariableName = value[value.length - 1]; if (lastSelectedVariableName) { const variablePlaceholder = `\${${lastSelectedVariableName}}`; if (!form.value.templateContent.includes(variablePlaceholder)) { - form.value.templateContent += ` ${variablePlaceholder}`; + // 在模板内容末尾添加新变量 + if (form.value.templateContent.trim()) { + form.value.templateContent = form.value.templateContent.trim() + ` ${variablePlaceholder}`; + } else { + form.value.templateContent = variablePlaceholder; + } } } + + // 清理多余的空格 form.value.templateContent = form.value.templateContent.replace(/\s+/g, ' ').trim(); } @@ -160,7 +167,6 @@ function handleCancel() { emit('cancel'); } -// Reset form function resetForm() { form.value = { templateId: null, templateName: null, templateCode: null, templateType: null, templateContent: '', @@ -171,7 +177,6 @@ function resetForm() { } } -// Expose methods defineExpose({ resetForm }); diff --git a/src/views/modelMessage/variable/components/VariableFormDialog.vue b/src/views/modelMessage/variable/components/VariableFormDialog.vue index f0f9b19..7aed860 100644 --- a/src/views/modelMessage/variable/components/VariableFormDialog.vue +++ b/src/views/modelMessage/variable/components/VariableFormDialog.vue @@ -25,13 +25,13 @@ - {{ item.label }} - {{ item.description }} + {{ label }} + {{ key }} @@ -71,7 +71,6 @@ -- Gitee