From 938e46da629da6ce0e8bf695db9719b29d5257cb Mon Sep 17 00:00:00 2001 From: "Crane.z" <1481445951@qq.com> Date: Mon, 13 Apr 2026 13:41:43 +0800 Subject: [PATCH] refactor: reorganize email and message template responsibilities --- .../settings/Msg/Email/EmailTemplate.vue | 66 ------- src/views/settings/Msg/Email/index.vue | 104 +++++++---- src/views/settings/Msg/MsgTemplate/index.vue | 164 +++++++++++++----- 3 files changed, 187 insertions(+), 147 deletions(-) delete mode 100644 src/views/settings/Msg/Email/EmailTemplate.vue diff --git a/src/views/settings/Msg/Email/EmailTemplate.vue b/src/views/settings/Msg/Email/EmailTemplate.vue deleted file mode 100644 index b433bac9e..000000000 --- a/src/views/settings/Msg/Email/EmailTemplate.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - - - diff --git a/src/views/settings/Msg/Email/index.vue b/src/views/settings/Msg/Email/index.vue index dfd059adf..3c47ad9d0 100644 --- a/src/views/settings/Msg/Email/index.vue +++ b/src/views/settings/Msg/Email/index.vue @@ -8,19 +8,36 @@ v-bind="$data" /> + + + + + + + diff --git a/src/views/settings/Msg/MsgTemplate/index.vue b/src/views/settings/Msg/MsgTemplate/index.vue index 01f62ca9c..067ae1fbc 100644 --- a/src/views/settings/Msg/MsgTemplate/index.vue +++ b/src/views/settings/Msg/MsgTemplate/index.vue @@ -2,11 +2,13 @@
+ { @@ -51,7 +65,9 @@ export default { this.showHelpDialog = true } return ( - {this.$t('Help')} + + {this.$t('Help')} + ) }, component: Select2, @@ -62,20 +78,9 @@ export default { on: { input: ([event], updateForm) => { setTimeout(() => { - vm.templates.map(item => { - if (item.template_name === event) { - this.selectTemplateName = item.template_name - localStorage.setItem('selectTemplateName', item.template_name) - this.variables = item.contexts - this.source = item.source - updateForm({ - template_content: item.content.trimStart() - }) - } - }) - }, - 500 - ) + const selectedTemplate = vm.templates.find(item => item.template_name === event) + vm.applySelectedTemplate(selectedTemplate, updateForm) + }, 500) } } }, @@ -89,6 +94,7 @@ export default { } }, templates: [], + templateFormKey: 0, successUrl: { name: 'Msg' }, showHelpDialog: false, variables: [], @@ -96,30 +102,45 @@ export default { source: 'original', selectTemplateName: '', variablesHelpText: this.$t('TemplateVariablesHelpText'), + hasButtons: true, hasSaveContinue: false, onPerformError() { }, - performSubmit(validValues) { - validValues['render_html'] = vm.html - return this.$axios['patch']('/api/v1/notifications/templates/edit/', validValues).then(res => { - this.$router.push({ name: 'Msg', query: { t: new Date().getTime() } }) - }) - }, moreButtons: [ { title: this.$t('Reset'), - type: 'default', - // hidden: () => this.source === 'original', - callback: (value, form, btn) => { - return this.$axios['post']('/api/v1/notifications/templates/reset/', { template_name: this.selectTemplateName }).then( - () => { - this.$router.push({ name: 'Msg', query: { t: new Date().getTime() } }) - this.$message.success(this.$t('ResetSuccessfully')) - } - ) + loading: false, + callback: async function(value, form, btn) { + btn.loading = true + try { + const templateName = value.template_name || vm.selectTemplateName || vm.initial.template_name + await vm.$axios.post('/api/v1/notifications/templates/reset/', { + template_name: templateName + }) + await vm.fetchTemplates() + vm.$message.success(vm.$t('ResetSuccessfully')) + } finally { + btn.loading = false + } } } - ] + ], + performSubmit(validValues) { + const payload = { ...validValues } + payload.render_html = vm.html + + return vm.$axios.patch('/api/v1/settings/setting/?category=email_content', { + EMAIL_SUBJECT_PREFIX: payload.EMAIL_SUBJECT_PREFIX + }).then(() => { + return vm.$axios.patch('/api/v1/notifications/templates/edit/', { + template_name: payload.template_name, + template_content: payload.template_content, + render_html: payload.render_html + }) + }).then(() => { + vm.$router.push({ name: 'Msg', query: { t: new Date().getTime() } }) + }) + } } }, computed: { @@ -131,21 +152,76 @@ export default { this.fetchTemplates() }, methods: { - fetchTemplates() { - this.$axios.get('/api/v1/notifications/templates/').then(data => { - if (data.length > 0) { - this.templates = data - this.fieldsMeta.template_name.el.options = data.map(item => ({ - label: item.subject, - value: item.template_name - })) + applyEmailContentFieldMeta(remoteMeta = {}) { + const emailSubjectPrefixMeta = remoteMeta.EMAIL_SUBJECT_PREFIX || {} + this.fieldsMeta.EMAIL_SUBJECT_PREFIX = { + label: emailSubjectPrefixMeta.label, + helpText: emailSubjectPrefixMeta.help_text, + rules: this.fieldsMeta.EMAIL_SUBJECT_PREFIX.rules + } + }, + applySelectedTemplate(template, updateForm) { + if (!template) { + return + } + this.selectTemplateName = template.template_name + localStorage.setItem('selectTemplateName', template.template_name) + this.variables = template.contexts + this.source = template.source + this.html = template.content || '' + if (typeof updateForm === 'function') { + updateForm({ + template_name: template.template_name, + template_content: (template.content || '').trimStart() + }) + } + }, + async fetchTemplates() { + try { + const [templates, emailSettings, emailContentMeta] = await Promise.all([ + this.$axios.get('/api/v1/notifications/templates/'), + this.$axios.get('/api/v1/settings/setting/?category=email_content'), + this.$store.dispatch('common/getUrlMeta', { + url: '/api/v1/settings/setting/?category=email_content' + }) + ]) + this.applyEmailContentFieldMeta(emailContentMeta.actions.PATCH || {}) + + if (!templates.length) { + this.$message.warning(this.$t('NoData')) + return } - }) + + this.templates = templates + this.fieldsMeta.template_name.el.options = templates.map(item => ({ + label: item.subject, + value: item.template_name + })) + + const initialTemplateName = this.initial.template_name + const selectedTemplate = templates.find(item => item.template_name === initialTemplateName) || templates[0] + + this.initial = { + ...this.initial, + EMAIL_SUBJECT_PREFIX: emailSettings.EMAIL_SUBJECT_PREFIX || '', + template_name: selectedTemplate.template_name, + template_content: (selectedTemplate.content || '').trimStart() + } + + this.variables = selectedTemplate.contexts + this.source = selectedTemplate.source + this.html = selectedTemplate.content || '' + this.selectTemplateName = selectedTemplate.template_name + localStorage.setItem('selectTemplateName', selectedTemplate.template_name) + + this.templateFormKey += 1 + } catch (error) { + const message = error?.response?.data?.error || error?.message || this.$t('UnknownError') + this.$message.error(message) + } } } } - +