feat: 邮箱管理

This commit is contained in:
puhui999
2025-04-04 12:54:03 +08:00
parent 28d1df74ad
commit 3d692a583d
13 changed files with 150 additions and 154 deletions

View File

@@ -54,11 +54,10 @@ export function useFormSchema(): VbenFormSchema[] {
component: 'Input',
rules: 'required',
},
// TODO puhui999: 富文本组件缺失
{
fieldName: 'content',
label: '模板内容',
component: 'Editor',
component: 'Textarea',
componentProps: {
height: 300,
},
@@ -130,6 +129,14 @@ export function useGridFormSchema(): VbenFormSchema[] {
/** 发送邮件表单 */
export function useSendMailFormSchema(): VbenFormSchema[] {
return [
{
fieldName: 'content',
label: '模板内容',
component: 'Textarea',
componentProps: {
disabled: true,
},
},
{
fieldName: 'mail',
label: '收件邮箱',
@@ -149,7 +156,7 @@ export function useSendMailFormSchema(): VbenFormSchema[] {
}
/** 列表的字段 */
export function useGridColumns<T = SystemMailTemplateApi.MailTemplateVO>(
export function useGridColumns<T = SystemMailTemplateApi.MailTemplate>(
onActionClick: OnActionClickFn<T>,
): VxeTableGridOptions['columns'] {
return [

View File

@@ -42,17 +42,17 @@ function onCreate() {
}
/** 编辑邮件模板 */
function onEdit(row: SystemMailTemplateApi.MailTemplateVO) {
function onEdit(row: SystemMailTemplateApi.MailTemplate) {
formModalApi.setData(row).open();
}
/** 发送测试邮件 */
function onSend(row: SystemMailTemplateApi.MailTemplateVO) {
function onSend(row: SystemMailTemplateApi.MailTemplate) {
sendModalApi.setData(row).open();
}
/** 删除邮件模板 */
async function onDelete(row: SystemMailTemplateApi.MailTemplateVO) {
async function onDelete(row: SystemMailTemplateApi.MailTemplate) {
const hideLoading = message.loading({
content: $t('ui.actionMessage.deleting', [row.name]),
duration: 0,
@@ -74,7 +74,7 @@ async function onDelete(row: SystemMailTemplateApi.MailTemplateVO) {
function onActionClick({
code,
row,
}: OnActionClickParams<SystemMailTemplateApi.MailTemplateVO>) {
}: OnActionClickParams<SystemMailTemplateApi.MailTemplate>) {
switch (code) {
case 'delete': {
onDelete(row);
@@ -117,7 +117,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
refresh: { code: 'query' },
search: true,
},
} as VxeTableGridOptions<SystemMailTemplateApi.MailTemplateVO>,
} as VxeTableGridOptions<SystemMailTemplateApi.MailTemplate>,
});
</script>
<template>

View File

@@ -18,7 +18,7 @@ import { $t } from '#/locales';
import { useFormSchema } from '../data';
const emit = defineEmits(['success']);
const formData = ref<SystemMailTemplateApi.MailTemplateVO>();
const formData = ref<SystemMailTemplateApi.MailTemplate>();
const getTitle = computed(() => {
return formData.value?.id
? $t('ui.actionTitle.edit', ['邮件模板'])
@@ -40,7 +40,7 @@ const [Modal, modalApi] = useVbenModal({
modalApi.lock();
// 提交表单
const data =
(await formApi.getValues()) as SystemMailTemplateApi.MailTemplateVO;
(await formApi.getValues()) as SystemMailTemplateApi.MailTemplate;
try {
await (formData.value?.id
? updateMailTemplate(data)
@@ -61,7 +61,7 @@ const [Modal, modalApi] = useVbenModal({
return;
}
// 加载数据
const data = modalApi.getData<SystemMailTemplateApi.MailTemplateVO>();
const data = modalApi.getData<SystemMailTemplateApi.MailTemplate>();
if (!data || !data.id) {
return;
}

View File

@@ -14,7 +14,7 @@ import { $t } from '#/locales';
import { useSendMailFormSchema } from '../data';
const emit = defineEmits(['success']);
const templateData = ref<SystemMailTemplateApi.MailTemplateVO>();
const templateData = ref<SystemMailTemplateApi.MailTemplate>();
const getTitle = computed(() => {
return $t('ui.actionTitle.send', ['邮件']);
});
@@ -63,7 +63,7 @@ const [Modal, modalApi] = useVbenModal({
}
// 构建发送邮件请求
const data: SystemMailTemplateApi.MailSendReqVO = {
const data: SystemMailTemplateApi.MailSendReq = {
mail: values.mail,
templateCode: templateData.value?.code || '',
templateParams: paramsObj,
@@ -89,7 +89,7 @@ const [Modal, modalApi] = useVbenModal({
return;
}
// 获取数据
const data = modalApi.getData<SystemMailTemplateApi.MailTemplateVO>();
const data = modalApi.getData<SystemMailTemplateApi.MailTemplate>();
if (!data) {
return;
}
@@ -97,7 +97,12 @@ const [Modal, modalApi] = useVbenModal({
templateData.value = data;
// 更新表单结构
const schema = buildSchema();
formApi.updateSchema(schema);
formApi.setState({ schema });
// 设置表单初始值,包括模板内容
await formApi.setValues({
content: data.content,
});
},
});
</script>