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 @@
-
-
- {{
- $t("Setting")
- }}
-
-
-
-
-
-
-
-
-
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)
+ }
}
}
}
-
+