diff --git a/apps/vben5/apps/app-antd/package.json b/apps/vben5/apps/app-antd/package.json index c49b42bd0..2d838bb72 100644 --- a/apps/vben5/apps/app-antd/package.json +++ b/apps/vben5/apps/app-antd/package.json @@ -33,6 +33,7 @@ "@abp/notifications": "workspace:*", "@abp/openiddict": "workspace:*", "@abp/permissions": "workspace:*", + "@abp/platform": "workspace:*", "@abp/request": "workspace:*", "@abp/settings": "workspace:*", "@abp/ui": "workspace:*", diff --git a/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json b/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json index e9cbee2ff..ad3c91b93 100644 --- a/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json +++ b/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json @@ -68,5 +68,13 @@ "sessionSettings": "Session Settings" }, "profile": "My Profile" + }, + "platform": { + "title": "Platform", + "messages": { + "title": "Message Manage", + "email": "Email Messages", + "sms": "Sms Messages" + } } } diff --git a/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json b/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json index 37b0d3bbc..bcf96d391 100644 --- a/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json +++ b/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json @@ -68,5 +68,13 @@ "sessionSettings": "会话管理" }, "profile": "个人中心" + }, + "platform": { + "title": "平台管理", + "messages": { + "title": "消息管理", + "email": "邮件消息", + "sms": "短信消息" + } } } diff --git a/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts b/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts index 0b3f7f404..a59ca4255 100644 --- a/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts +++ b/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts @@ -245,6 +245,46 @@ const routes: RouteRecordRaw[] = [ }, ], }, + { + name: 'Platform', + path: '/platform', + meta: { + title: $t('abp.platform.title'), + icon: 'ep:platform', + }, + children: [ + { + meta: { + title: $t('abp.platform.messages.title'), + icon: 'tabler:message-cog', + }, + name: 'PlatformMessages', + path: '/platform/messages', + children: [ + { + meta: { + title: $t('abp.platform.messages.email'), + icon: 'material-symbols:attach-email-outline', + }, + name: 'PlatformEmailMessages', + path: '/platform/messages/email', + component: () => + import('#/views/platform/messages/email/index.vue'), + }, + { + meta: { + title: $t('abp.platform.messages.sms'), + icon: 'material-symbols:sms-outline', + }, + name: 'PlatformSmsMessages', + path: '/platform/messages/sms', + component: () => + import('#/views/platform/messages/sms/index.vue'), + }, + ], + }, + ], + }, ], }, ]; diff --git a/apps/vben5/apps/app-antd/src/views/platform/messages/email/index.vue b/apps/vben5/apps/app-antd/src/views/platform/messages/email/index.vue new file mode 100644 index 000000000..d61fd6f64 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/platform/messages/email/index.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/apps/vben5/apps/app-antd/src/views/platform/messages/sms/index.vue b/apps/vben5/apps/app-antd/src/views/platform/messages/sms/index.vue new file mode 100644 index 000000000..ed5c319b5 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/platform/messages/sms/index.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/api/index.ts b/apps/vben5/packages/@abp/platform/src/api/index.ts new file mode 100644 index 000000000..11e2df3ff --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/index.ts @@ -0,0 +1,2 @@ +export * from './useEmailMessagesApi'; +export * from './useSmsMessagesApi'; diff --git a/apps/vben5/packages/@abp/platform/src/api/useEmailMessagesApi.ts b/apps/vben5/packages/@abp/platform/src/api/useEmailMessagesApi.ts new file mode 100644 index 000000000..e4a353e3b --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useEmailMessagesApi.ts @@ -0,0 +1,66 @@ +import type { PagedResultDto } from '@abp/core'; + +import type { + EmailMessageDto, + EmailMessageGetListInput, +} from '../types/messages'; + +import { useRequest } from '@abp/request'; + +export function useEmailMessagesApi() { + const { cancel, request } = useRequest(); + /** + * 获取邮件消息分页列表 + * @param {EmailMessageGetListInput} input 参数 + * @returns {Promise>} 邮件消息列表 + */ + function getPagedListApi( + input?: EmailMessageGetListInput, + ): Promise> { + return request>( + '/api/platform/messages/email', + { + method: 'GET', + params: input, + }, + ); + } + /** + * 获取邮件消息 + * @param id Id + * @returns {EmailMessageDto} 邮件消息 + */ + function getApi(id: string): Promise { + return request(`/api/platform/messages/email/${id}`, { + method: 'GET', + }); + } + /** + * 删除邮件消息 + * @param id Id + * @returns {void} + */ + function deleteApi(id: string): Promise { + return request(`/api/platform/messages/email/${id}`, { + method: 'DELETE', + }); + } + /** + * 发送邮件消息 + * @param id Id + * @returns {void} + */ + function sendApi(id: string): Promise { + return request(`/api/platform/messages/email/${id}/send`, { + method: 'POST', + }); + } + + return { + cancel, + deleteApi, + getApi, + getPagedListApi, + sendApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/api/useSmsMessagesApi.ts b/apps/vben5/packages/@abp/platform/src/api/useSmsMessagesApi.ts new file mode 100644 index 000000000..4ef7e7829 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useSmsMessagesApi.ts @@ -0,0 +1,63 @@ +import type { PagedResultDto } from '@abp/core'; + +import type { SmsMessageDto, SmsMessageGetListInput } from '../types'; + +import { useRequest } from '@abp/request'; + +export function useSmsMessagesApi() { + const { cancel, request } = useRequest(); + /** + * 获取短信消息分页列表 + * @param {EmailMessageGetListInput} input 参数 + * @returns {Promise>} 短信消息列表 + */ + function getPagedListApi( + input?: SmsMessageGetListInput, + ): Promise> { + return request>( + '/api/platform/messages/sms', + { + method: 'GET', + params: input, + }, + ); + } + /** + * 获取短信消息 + * @param id Id + * @returns {SmsMessageDto} 短信消息 + */ + function getApi(id: string): Promise { + return request(`/api/platform/messages/sms/${id}`, { + method: 'GET', + }); + } + /** + * 删除短信消息 + * @param id Id + * @returns {void} + */ + function deleteApi(id: string): Promise { + return request(`/api/platform/messages/sms/${id}`, { + method: 'DELETE', + }); + } + /** + * 发送短信消息 + * @param id Id + * @returns {void} + */ + function sendApi(id: string): Promise { + return request(`/api/platform/messages/sms/${id}/send`, { + method: 'POST', + }); + } + + return { + cancel, + deleteApi, + getApi, + getPagedListApi, + sendApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/components/index.ts b/apps/vben5/packages/@abp/platform/src/components/index.ts new file mode 100644 index 000000000..c1a40b9f7 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/index.ts @@ -0,0 +1,2 @@ +export { default as EmailMessageTable } from './messages/email/EmailMessageTable.vue'; +export { default as SmsMessageTable } from './messages/sms/SmsMessageTable.vue'; diff --git a/apps/vben5/packages/@abp/platform/src/components/messages/email/EmailMessageTable.vue b/apps/vben5/packages/@abp/platform/src/components/messages/email/EmailMessageTable.vue new file mode 100644 index 000000000..f0443a57c --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/messages/email/EmailMessageTable.vue @@ -0,0 +1,310 @@ + + + + + + + {{ $t('AppPlatform.MessageStatus:Pending') }} + + + {{ $t('AppPlatform.MessageStatus:Sent') }} + + + {{ $t('AppPlatform.MessageStatus:Failed') }} + + + + + + {{ $t('AbpUi.Edit') }} + + + {{ $t('AbpUi.Delete') }} + + + + onMenuClick(row, info)"> + + + + {{ $t('AppPlatform.SendMessage') }} + + + + + + + + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/messages/sms/SmsMessageTable.vue b/apps/vben5/packages/@abp/platform/src/components/messages/sms/SmsMessageTable.vue new file mode 100644 index 000000000..7e9d26abf --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/messages/sms/SmsMessageTable.vue @@ -0,0 +1,299 @@ + + + + + + + {{ $t('AppPlatform.MessageStatus:Pending') }} + + + {{ $t('AppPlatform.MessageStatus:Sent') }} + + + {{ $t('AppPlatform.MessageStatus:Failed') }} + + + + + + {{ $t('AbpUi.Edit') }} + + + {{ $t('AbpUi.Delete') }} + + + + onMenuClick(row, info)"> + + + + {{ $t('AppPlatform.SendMessage') }} + + + + + + + + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/constants/index.ts b/apps/vben5/packages/@abp/platform/src/constants/index.ts new file mode 100644 index 000000000..c85954d3e --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/constants/index.ts @@ -0,0 +1 @@ +export * from './permissions'; diff --git a/apps/vben5/packages/@abp/platform/src/constants/permissions.ts b/apps/vben5/packages/@abp/platform/src/constants/permissions.ts new file mode 100644 index 000000000..7c6f1ee17 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/constants/permissions.ts @@ -0,0 +1,16 @@ +/** 邮件消息权限 */ +export const EmailMessagesPermissions = { + Default: 'Platform.EmailMessage', + /** 删除 */ + Delete: 'Platform.EmailMessage.Delete', + /** 发送消息 */ + SendMessage: 'Platform.EmailMessage.SendMessage', +}; +/** 短信消息权限 */ +export const SmsMessagesPermissions = { + Default: 'Platform.SmsMessage', + /** 删除 */ + Delete: 'Platform.SmsMessage.Delete', + /** 发送消息 */ + SendMessage: 'Platform.SmsMessage.SendMessage', +}; diff --git a/apps/vben5/packages/@abp/platform/src/index.ts b/apps/vben5/packages/@abp/platform/src/index.ts index e69de29bb..f43dbaee0 100644 --- a/apps/vben5/packages/@abp/platform/src/index.ts +++ b/apps/vben5/packages/@abp/platform/src/index.ts @@ -0,0 +1,4 @@ +export * from './api'; +export * from './components'; +export * from './constants'; +export * from './types'; diff --git a/apps/vben5/packages/@abp/platform/src/types/index.ts b/apps/vben5/packages/@abp/platform/src/types/index.ts new file mode 100644 index 000000000..e4f239712 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/types/index.ts @@ -0,0 +1 @@ +export * from './messages'; diff --git a/apps/vben5/packages/@abp/platform/src/types/messages.ts b/apps/vben5/packages/@abp/platform/src/types/messages.ts new file mode 100644 index 000000000..3a034ac7c --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/types/messages.ts @@ -0,0 +1,97 @@ +import type { + AuditedEntityDto, + PagedAndSortedResultRequestDto, +} from '@abp/core'; + +/** 消息状态 */ +export enum MessageStatus { + /** 发送失败 */ + Failed = 10, + /** 未发送 */ + Pending = -1, + /** 已发送 */ + Sent = 0, +} +/** 邮件优先级 */ +export enum MailPriority { + /** 高 */ + High = 2, + /** 低 */ + Low = 1, + /** 普通 */ + Normal = 0, +} + +interface MessageDto extends AuditedEntityDto { + /** 消息内容 */ + content: string; + /** 消息发布者 */ + provider?: string; + /** 错误原因 */ + reason?: string; + /** 接收方 */ + receiver: string; + /** 发送次数 */ + sendCount: number; + /** 发送人 */ + sender?: string; + /** 发送时间 */ + sendTime?: Date; + /** 状态 */ + status: MessageStatus; + /** 发送人Id */ + userId?: string; +} +/** 邮件附件 */ +interface EmailMessageAttachmentDto { + /** 附件存储名称 */ + blobName: string; + /** 附件名称 */ + name: string; + /** 附件大小 */ + size: number; +} +/** 邮件标头 */ +interface EmailMessageHeaderDto { + /** 键名 */ + key: string; + /** 键值 */ + value: string; +} +/** 邮件消息 */ +interface EmailMessageDto extends MessageDto { + attachments: EmailMessageAttachmentDto[]; + cc?: string; + from?: string; + headers: EmailMessageHeaderDto[]; + isBodyHtml: boolean; + normalize: boolean; + priority?: MailPriority; + subject?: string; +} + +interface EmailMessageGetListInput extends PagedAndSortedResultRequestDto { + beginSendTime?: Date; + content?: string; + emailAddress?: string; + endSendTime?: Date; + from?: string; + priority?: MailPriority; + subject?: string; +} + +type SmsMessageDto = MessageDto; + +interface SmsMessageGetListInput extends PagedAndSortedResultRequestDto { + beginSendTime?: Date; + content?: string; + endSendTime?: Date; + phoneNumber?: string; +} + +export type { + EmailMessageDto, + EmailMessageGetListInput, + SmsMessageDto, + SmsMessageGetListInput, +};