feat: 邮箱管理

pull/66/head
puhui999 2025-04-04 12:54:03 +08:00
parent 28d1df74ad
commit 3d692a583d
13 changed files with 150 additions and 154 deletions

View File

@ -1,10 +1,10 @@
import type { PageResult } from '@vben/request'; import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request'; import { requestClient } from '#/api/request';
// TODO @puhui999代码风格的统一
export namespace SystemMailAccountApi { export namespace SystemMailAccountApi {
export interface MailAccountVO { /** 邮箱信息 */
export interface MailAccount {
id: number; id: number;
mail: string; mail: string;
username: string; username: string;
@ -19,16 +19,17 @@ export namespace SystemMailAccountApi {
} }
} }
// 查询邮箱账号列表 /** 查询邮箱账号列表 */
export const getMailAccountPage = async (params: any) => { export const getMailAccountPage = async (params: PageParam) => {
return await requestClient.get< return await requestClient.get<PageResult<SystemMailAccountApi.MailAccount>>(
PageResult<SystemMailAccountApi.MailAccountVO> '/system/mail-account/page',
>('/system/mail-account/page', { params }); { params },
);
}; };
// 查询邮箱账号详情 /** 查询邮箱账号详情 */
export const getMailAccount = async (id: number) => { export const getMailAccount = async (id: number) => {
return await requestClient.get<SystemMailAccountApi.MailAccountVO>( return await requestClient.get<SystemMailAccountApi.MailAccount>(
'/system/mail-account/get', '/system/mail-account/get',
{ {
params: { id }, params: { id },
@ -36,41 +37,41 @@ export const getMailAccount = async (id: number) => {
); );
}; };
// 新增邮箱账号 /** 新增邮箱账号 */
export const createMailAccount = async ( export const createMailAccount = async (
data: SystemMailAccountApi.MailAccountVO, data: SystemMailAccountApi.MailAccount,
) => { ) => {
return await requestClient.post<SystemMailAccountApi.MailAccountVO>( return await requestClient.post<SystemMailAccountApi.MailAccount>(
'/system/mail-account/create', '/system/mail-account/create',
data, data,
); );
}; };
// 修改邮箱账号 /** 修改邮箱账号 */
export const updateMailAccount = async ( export const updateMailAccount = async (
data: SystemMailAccountApi.MailAccountVO, data: SystemMailAccountApi.MailAccount,
) => { ) => {
return await requestClient.put<SystemMailAccountApi.MailAccountVO>( return await requestClient.put<SystemMailAccountApi.MailAccount>(
'/system/mail-account/update', '/system/mail-account/update',
data, data,
); );
}; };
// 删除邮箱账号 /** 删除邮箱账号 */
export const deleteMailAccount = async (id: number) => { export const deleteMailAccount = async (id: number) => {
return await requestClient.delete<boolean>('/system/mail-account/delete', { return await requestClient.delete<boolean>('/system/mail-account/delete', {
params: { id }, params: { id },
}); });
}; };
// 获得邮箱账号精简列表 /** 获得邮箱账号精简列表 */
export const getSimpleMailAccountList = async () => { export const getSimpleMailAccountList = async () => {
return await requestClient.get<SystemMailAccountApi.MailAccountVO[]>( return await requestClient.get<SystemMailAccountApi.MailAccount[]>(
'/system/mail-account/simple-list', '/system/mail-account/simple-list',
); );
}; };
// 测试邮箱连接 /** 测试邮箱连接 */
export const testMailAccount = async (id: number) => { export const testMailAccount = async (id: number) => {
return await requestClient.post<boolean>('/system/mail-account/test', null, { return await requestClient.post<boolean>('/system/mail-account/test', null, {
params: { id }, params: { id },

View File

@ -1,10 +1,10 @@
import type { PageResult } from '@vben/request'; import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request'; import { requestClient } from '#/api/request';
// TODO @puhui999代码风格的统一
export namespace SystemMailLogApi { export namespace SystemMailLogApi {
export interface MailLogVO { /** 邮件日志 */
export interface MailLog {
id: number; id: number;
userId: number; userId: number;
userType: number; userType: number;
@ -18,24 +18,24 @@ export namespace SystemMailLogApi {
templateContent: string; templateContent: string;
templateParams: string; templateParams: string;
sendStatus: number; sendStatus: number;
sendTime: Date; sendTime: string;
sendMessageId: string; sendMessageId: string;
sendException: string; sendException: string;
createTime: Date; createTime: string;
} }
} }
// 查询邮件日志列表 /** 查询邮件日志列表 */
export const getMailLogPage = async (params: any) => { export const getMailLogPage = async (params: PageParam) => {
return await requestClient.get<PageResult<SystemMailLogApi.MailLogVO>>( return await requestClient.get<PageResult<SystemMailLogApi.MailLog>>(
'/system/mail-log/page', '/system/mail-log/page',
{ params }, { params },
); );
}; };
// 查询邮件日志详情 /** 查询邮件日志详情 */
export const getMailLog = async (id: number) => { export const getMailLog = async (id: number) => {
return await requestClient.get<SystemMailLogApi.MailLogVO>( return await requestClient.get<SystemMailLogApi.MailLog>(
'/system/mail-log/get', '/system/mail-log/get',
{ {
params: { id }, params: { id },
@ -43,14 +43,14 @@ export const getMailLog = async (id: number) => {
); );
}; };
// 重新发送邮件 /** 重新发送邮件 */
export const resendMail = async (id: number) => { export const resendMail = async (id: number) => {
return await requestClient.put<boolean>('/system/mail-log/resend', null, { return await requestClient.put<boolean>('/system/mail-log/resend', null, {
params: { id }, params: { id },
}); });
}; };
// 批量删除邮件日志 /** 批量删除邮件日志 */
export const deleteMailLogs = async (ids: number[]) => { export const deleteMailLogs = async (ids: number[]) => {
return await requestClient.delete<boolean>('/system/mail-log/delete', { return await requestClient.delete<boolean>('/system/mail-log/delete', {
data: { ids }, data: { ids },

View File

@ -1,10 +1,10 @@
import type { PageResult } from '@vben/request'; import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request'; import { requestClient } from '#/api/request';
// TODO @puhui999代码风格的统一
export namespace SystemMailTemplateApi { export namespace SystemMailTemplateApi {
export interface MailTemplateVO { /** 邮件模版信息 */
export interface MailTemplate {
id: number; id: number;
name: string; name: string;
code: string; code: string;
@ -18,23 +18,24 @@ export namespace SystemMailTemplateApi {
createTime: Date; createTime: Date;
} }
export interface MailSendReqVO { /** 邮件发送信息 */
export interface MailSendReq {
mail: string; mail: string;
templateCode: string; templateCode: string;
templateParams: Record<string, any>; templateParams: Record<string, any>;
} }
} }
// 查询邮件模版列表 /** 查询邮件模版列表 */
export const getMailTemplatePage = async (params: any) => { export const getMailTemplatePage = async (params: PageParam) => {
return await requestClient.get< return await requestClient.get<
PageResult<SystemMailTemplateApi.MailTemplateVO> PageResult<SystemMailTemplateApi.MailTemplate>
>('/system/mail-template/page', { params }); >('/system/mail-template/page', { params });
}; };
// 查询邮件模版详情 /** 查询邮件模版详情 */
export const getMailTemplate = async (id: number) => { export const getMailTemplate = async (id: number) => {
return await requestClient.get<SystemMailTemplateApi.MailTemplateVO>( return await requestClient.get<SystemMailTemplateApi.MailTemplate>(
'/system/mail-template/get', '/system/mail-template/get',
{ {
params: { id }, params: { id },
@ -42,35 +43,35 @@ export const getMailTemplate = async (id: number) => {
); );
}; };
// 新增邮件模版 /** 新增邮件模版 */
export const createMailTemplate = async ( export const createMailTemplate = async (
data: SystemMailTemplateApi.MailTemplateVO, data: SystemMailTemplateApi.MailTemplate,
) => { ) => {
return await requestClient.post<SystemMailTemplateApi.MailTemplateVO>( return await requestClient.post<SystemMailTemplateApi.MailTemplate>(
'/system/mail-template/create', '/system/mail-template/create',
data, data,
); );
}; };
// 修改邮件模版 /** 修改邮件模版 */
export const updateMailTemplate = async ( export const updateMailTemplate = async (
data: SystemMailTemplateApi.MailTemplateVO, data: SystemMailTemplateApi.MailTemplate,
) => { ) => {
return await requestClient.put<SystemMailTemplateApi.MailTemplateVO>( return await requestClient.put<SystemMailTemplateApi.MailTemplate>(
'/system/mail-template/update', '/system/mail-template/update',
data, data,
); );
}; };
// 删除邮件模版 /** 删除邮件模版 */
export const deleteMailTemplate = async (id: number) => { export const deleteMailTemplate = async (id: number) => {
return await requestClient.delete<boolean>('/system/mail-template/delete', { return await requestClient.delete<boolean>('/system/mail-template/delete', {
params: { id }, params: { id },
}); });
}; };
// 发送邮件 /** 发送邮件 */
export const sendMail = async (data: SystemMailTemplateApi.MailSendReqVO) => { export const sendMail = async (data: SystemMailTemplateApi.MailSendReq) => {
return await requestClient.post<boolean>( return await requestClient.post<boolean>(
'/system/mail-template/send-mail', '/system/mail-template/send-mail',
data, data,

View File

@ -106,7 +106,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
} }
/** 列表的字段 */ /** 列表的字段 */
export function useGridColumns<T = SystemMailAccountApi.MailAccountVO>( export function useGridColumns<T = SystemMailAccountApi.MailAccount>(
onActionClick: OnActionClickFn<T>, onActionClick: OnActionClickFn<T>,
): VxeTableGridOptions['columns'] { ): VxeTableGridOptions['columns'] {
return [ return [

View File

@ -37,12 +37,12 @@ function onCreate() {
} }
/** 编辑邮箱账号 */ /** 编辑邮箱账号 */
function onEdit(row: SystemMailAccountApi.MailAccountVO) { function onEdit(row: SystemMailAccountApi.MailAccount) {
formModalApi.setData(row).open(); formModalApi.setData(row).open();
} }
/** 测试邮箱连接 */ /** 测试邮箱连接 */
async function onTest(row: SystemMailAccountApi.MailAccountVO) { async function onTest(row: SystemMailAccountApi.MailAccount) {
const hideLoading = message.loading({ const hideLoading = message.loading({
content: '正在测试邮箱连接...', content: '正在测试邮箱连接...',
duration: 0, duration: 0,
@ -60,7 +60,7 @@ async function onTest(row: SystemMailAccountApi.MailAccountVO) {
} }
/** 删除邮箱账号 */ /** 删除邮箱账号 */
async function onDelete(row: SystemMailAccountApi.MailAccountVO) { async function onDelete(row: SystemMailAccountApi.MailAccount) {
const hideLoading = message.loading({ const hideLoading = message.loading({
content: $t('ui.actionMessage.deleting', [row.mail]), content: $t('ui.actionMessage.deleting', [row.mail]),
duration: 0, duration: 0,
@ -82,7 +82,7 @@ async function onDelete(row: SystemMailAccountApi.MailAccountVO) {
function onActionClick({ function onActionClick({
code, code,
row, row,
}: OnActionClickParams<SystemMailAccountApi.MailAccountVO>) { }: OnActionClickParams<SystemMailAccountApi.MailAccount>) {
switch (code) { switch (code) {
case 'delete': { case 'delete': {
onDelete(row); onDelete(row);
@ -125,7 +125,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
refresh: { code: 'query' }, refresh: { code: 'query' },
search: true, search: true,
}, },
} as VxeTableGridOptions<SystemMailAccountApi.MailAccountVO>, } as VxeTableGridOptions<SystemMailAccountApi.MailAccount>,
}); });
</script> </script>
<template> <template>

View File

@ -18,7 +18,7 @@ import { $t } from '#/locales';
import { useFormSchema } from '../data'; import { useFormSchema } from '../data';
const emit = defineEmits(['success']); const emit = defineEmits(['success']);
const formData = ref<SystemMailAccountApi.MailAccountVO>(); const formData = ref<SystemMailAccountApi.MailAccount>();
const getTitle = computed(() => { const getTitle = computed(() => {
return formData.value?.id return formData.value?.id
? $t('ui.actionTitle.edit', ['邮箱账号']) ? $t('ui.actionTitle.edit', ['邮箱账号'])
@ -40,7 +40,7 @@ const [Modal, modalApi] = useVbenModal({
modalApi.lock(); modalApi.lock();
// //
const data = const data =
(await formApi.getValues()) as SystemMailAccountApi.MailAccountVO; (await formApi.getValues()) as SystemMailAccountApi.MailAccount;
try { try {
await (formData.value?.id await (formData.value?.id
? updateMailAccount(data) ? updateMailAccount(data)
@ -61,7 +61,7 @@ const [Modal, modalApi] = useVbenModal({
return; return;
} }
// //
const data = modalApi.getData<SystemMailAccountApi.MailAccountVO>(); const data = modalApi.getData<SystemMailAccountApi.MailAccount>();
if (!data || !data.id) { if (!data || !data.id) {
return; return;
} }

View File

@ -64,7 +64,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
} }
/** 列表的字段 */ /** 列表的字段 */
export function useGridColumns<T = SystemMailLogApi.MailLogVO>( export function useGridColumns<T = SystemMailLogApi.MailLog>(
onActionClick: OnActionClickFn<T>, onActionClick: OnActionClickFn<T>,
): VxeTableGridOptions['columns'] { ): VxeTableGridOptions['columns'] {
return [ return [

View File

@ -26,12 +26,12 @@ function onRefresh() {
} }
/** 查看邮件日志详情 */ /** 查看邮件日志详情 */
function onView(row: SystemMailLogApi.MailLogVO) { function onView(row: SystemMailLogApi.MailLog) {
formModalApi.setData(row).open(); formModalApi.setData(row).open();
} }
/** 重新发送邮件 */ /** 重新发送邮件 */
async function onResend(row: SystemMailLogApi.MailLogVO) { async function onResend(row: SystemMailLogApi.MailLog) {
const hideLoading = message.loading({ const hideLoading = message.loading({
content: '重新发送邮件中...', content: '重新发送邮件中...',
duration: 0, duration: 0,
@ -53,7 +53,7 @@ async function onResend(row: SystemMailLogApi.MailLogVO) {
function onActionClick({ function onActionClick({
code, code,
row, row,
}: OnActionClickParams<SystemMailLogApi.MailLogVO>) { }: OnActionClickParams<SystemMailLogApi.MailLog>) {
switch (code) { switch (code) {
case 'resend': { case 'resend': {
onResend(row); onResend(row);
@ -92,7 +92,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
refresh: { code: 'query' }, refresh: { code: 'query' },
search: true, search: true,
}, },
} as VxeTableGridOptions<SystemMailLogApi.MailLogVO>, } as VxeTableGridOptions<SystemMailLogApi.MailLog>,
}); });
</script> </script>
<template> <template>

View File

@ -4,8 +4,13 @@ import type { SystemMailLogApi } from '#/api/system/mail/log';
import { computed, ref } from 'vue'; import { computed, ref } from 'vue';
import { useVbenModal } from '@vben/common-ui'; import { useVbenModal } from '@vben/common-ui';
import { formatDateTime } from '@vben/utils';
const formData = ref<SystemMailLogApi.MailLogVO>(); import { Descriptions, Tag } from 'ant-design-vue';
import { DICT_TYPE, getDictLabel } from '#/utils/dict';
const formData = ref<SystemMailLogApi.MailLog>();
const getTitle = computed(() => { const getTitle = computed(() => {
return '邮件日志详情'; return '邮件日志详情';
}); });
@ -16,7 +21,7 @@ const [Modal, modalApi] = useVbenModal({
return; return;
} }
// //
const data = modalApi.getData<SystemMailLogApi.MailLogVO>(); const data = modalApi.getData<SystemMailLogApi.MailLog>();
if (!data || !data.id) { if (!data || !data.id) {
return; return;
} }
@ -33,79 +38,56 @@ const [Modal, modalApi] = useVbenModal({
<template> <template>
<Modal :title="getTitle"> <Modal :title="getTitle">
<div class="p-4"> <div class="p-4">
<div class="grid grid-cols-1 gap-4 md:grid-cols-2"> <Descriptions :column="2" bordered>
<div class="form-item"> <Descriptions.Item label="编号">{{ formData?.id }}</Descriptions.Item>
<div class="form-label">编号</div> <Descriptions.Item label="创建时间">
<div>{{ formData?.id }}</div> {{ formatDateTime(formData?.createTime || '') }}
</div> </Descriptions.Item>
<div class="form-item"> <Descriptions.Item label="收件邮箱">
<div class="form-label">创建时间</div> {{ formData?.toMail }}
<div>{{ formData?.createTime }}</div> </Descriptions.Item>
</div> <Descriptions.Item label="发送邮箱">
<div class="form-item"> {{ formData?.fromMail }}
<div class="form-label">收件邮箱</div> </Descriptions.Item>
<div>{{ formData?.toMail }}</div> <Descriptions.Item label="用户编号">
</div> {{ formData?.userId }}
<div class="form-item"> </Descriptions.Item>
<div class="form-label">发送邮箱</div> <Descriptions.Item label="用户类型">
<div>{{ formData?.fromMail }}</div> {{ formData?.userType }}
</div> </Descriptions.Item>
<div class="form-item"> <Descriptions.Item label="模板编号">
<div class="form-label">用户编号</div> {{ formData?.templateId }}
<div>{{ formData?.userId }}</div> </Descriptions.Item>
</div> <Descriptions.Item label="模板编码">
<div class="form-item"> {{ formData?.templateCode }}
<div class="form-label">用户类型</div> </Descriptions.Item>
<div>{{ formData?.userType }}</div> <Descriptions.Item label="邮件标题" :span="2">
</div> {{ formData?.templateTitle }}
<div class="form-item"> </Descriptions.Item>
<div class="form-label">模板编号</div> <Descriptions.Item label="邮件内容" :span="2">
<div>{{ formData?.templateId }}</div> <div v-html="formData?.templateContent"></div>
</div> </Descriptions.Item>
<div class="form-item"> <Descriptions.Item label="发送状态">
<div class="form-label">模板编码</div> <!-- TODO @芋艿: 数据字典-->
<div>{{ formData?.templateCode }}</div> <Tag color="processing">
</div> {{
</div> getDictLabel(
DICT_TYPE.SYSTEM_MAIL_SEND_STATUS,
<div class="mt-4"> formData?.sendStatus,
<div class="form-label">邮件标题</div> )
<div>{{ formData?.templateTitle }}</div> }}
</div> </Tag>
</Descriptions.Item>
<div class="mt-4"> <Descriptions.Item label="发送时间">
<div class="form-label">邮件内容</div> {{ formatDateTime(formData?.sendTime || '') }}
<div v-html="formData?.templateContent"></div> </Descriptions.Item>
</div> <Descriptions.Item label="发送消息编号">
{{ formData?.sendMessageId }}
<div class="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2"> </Descriptions.Item>
<div class="form-item"> <Descriptions.Item label="发送异常">
<div class="form-label">发送状态</div> {{ formData?.sendException }}
<div>{{ formData?.sendStatus }}</div> </Descriptions.Item>
</div> </Descriptions>
<div class="form-item">
<div class="form-label">发送时间</div>
<div>{{ formData?.sendTime }}</div>
</div>
<div class="form-item">
<div class="form-label">发送消息编号</div>
<div>{{ formData?.sendMessageId }}</div>
</div>
<div class="form-item">
<div class="form-label">发送异常</div>
<div>{{ formData?.sendException }}</div>
</div>
</div>
</div> </div>
</Modal> </Modal>
</template> </template>
<style scoped>
.form-item {
@apply mb-2;
}
.form-label {
@apply font-medium;
}
</style>

View File

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

View File

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

View File

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

View File

@ -14,7 +14,7 @@ import { $t } from '#/locales';
import { useSendMailFormSchema } from '../data'; import { useSendMailFormSchema } from '../data';
const emit = defineEmits(['success']); const emit = defineEmits(['success']);
const templateData = ref<SystemMailTemplateApi.MailTemplateVO>(); const templateData = ref<SystemMailTemplateApi.MailTemplate>();
const getTitle = computed(() => { const getTitle = computed(() => {
return $t('ui.actionTitle.send', ['邮件']); return $t('ui.actionTitle.send', ['邮件']);
}); });
@ -63,7 +63,7 @@ const [Modal, modalApi] = useVbenModal({
} }
// //
const data: SystemMailTemplateApi.MailSendReqVO = { const data: SystemMailTemplateApi.MailSendReq = {
mail: values.mail, mail: values.mail,
templateCode: templateData.value?.code || '', templateCode: templateData.value?.code || '',
templateParams: paramsObj, templateParams: paramsObj,
@ -89,7 +89,7 @@ const [Modal, modalApi] = useVbenModal({
return; return;
} }
// //
const data = modalApi.getData<SystemMailTemplateApi.MailTemplateVO>(); const data = modalApi.getData<SystemMailTemplateApi.MailTemplate>();
if (!data) { if (!data) {
return; return;
} }
@ -97,7 +97,12 @@ const [Modal, modalApi] = useVbenModal({
templateData.value = data; templateData.value = data;
// //
const schema = buildSchema(); const schema = buildSchema();
formApi.updateSchema(schema); formApi.setState({ schema });
//
await formApi.setValues({
content: data.content,
});
}, },
}); });
</script> </script>