From 942d3bedb36b891e69750bbe4b03a6069a5ec4a9 Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 11 Mar 2025 13:48:42 +0800 Subject: [PATCH 1/2] feat(vben5): add notification group manage --- .../app-antd/src/locales/langs/en-US/abp.json | 3 +- .../app-antd/src/locales/langs/zh-CN/abp.json | 3 +- .../app-antd/src/router/routes/modules/abp.ts | 10 + .../src/views/notifications/groups/index.vue | 15 ++ .../@abp/notifications/src/api/index.ts | 1 + .../api/useNotificationGroupDefinitionsApi.ts | 100 ++++++++ .../NotificationGroupDefinitionModal.vue | 150 ++++++++++++ .../NotificationGroupDefinitionTable.vue | 217 ++++++++++++++++++ .../notifications/src/components/index.ts | 1 + .../src/constants/permissions.ts | 10 + .../@abp/notifications/src/types/groups.ts | 35 +++ .../@abp/notifications/src/types/index.ts | 1 + 12 files changed, 544 insertions(+), 2 deletions(-) create mode 100644 apps/vben5/apps/app-antd/src/views/notifications/groups/index.vue create mode 100644 apps/vben5/packages/@abp/notifications/src/api/useNotificationGroupDefinitionsApi.ts create mode 100644 apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue create mode 100644 apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue create mode 100644 apps/vben5/packages/@abp/notifications/src/constants/permissions.ts create mode 100644 apps/vben5/packages/@abp/notifications/src/types/groups.ts 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 b5b1400f0..a90d36c70 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 @@ -42,7 +42,8 @@ }, "notifications": { "title": "Notifications", - "myNotifilers": "My Notifilers" + "myNotifilers": "My Notifilers", + "groups": "Groups" } }, "openiddict": { 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 6cc746f9c..04b5bf81c 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 @@ -42,7 +42,8 @@ }, "notifications": { "title": "通知管理", - "myNotifilers": "我的通知" + "myNotifilers": "我的通知", + "groups": "通知分组" } }, "openiddict": { 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 b0c6ea5fc..0693005c8 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 @@ -202,6 +202,16 @@ const routes: RouteRecordRaw[] = [ component: () => import('#/views/notifications/my-notifilers/index.vue'), }, + { + meta: { + title: $t('abp.manage.notifications.groups'), + icon: 'lucide:group', + }, + name: 'NotificationGroupDefinitions', + path: '/manage/notifications/groups', + component: () => + import('#/views/notifications/groups/index.vue'), + }, ], }, ], diff --git a/apps/vben5/apps/app-antd/src/views/notifications/groups/index.vue b/apps/vben5/apps/app-antd/src/views/notifications/groups/index.vue new file mode 100644 index 000000000..bf2763d47 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/notifications/groups/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/packages/@abp/notifications/src/api/index.ts b/apps/vben5/packages/@abp/notifications/src/api/index.ts index b3dc5aa58..36c0581b9 100644 --- a/apps/vben5/packages/@abp/notifications/src/api/index.ts +++ b/apps/vben5/packages/@abp/notifications/src/api/index.ts @@ -1,3 +1,4 @@ export { useMyNotifilersApi } from './useMyNotifilersApi'; export { useMySubscribesApi } from './useMySubscribesApi'; +export { useNotificationGroupDefinitionsApi } from './useNotificationGroupDefinitionsApi'; export { useNotificationsApi } from './useNotificationsApi'; diff --git a/apps/vben5/packages/@abp/notifications/src/api/useNotificationGroupDefinitionsApi.ts b/apps/vben5/packages/@abp/notifications/src/api/useNotificationGroupDefinitionsApi.ts new file mode 100644 index 000000000..530551417 --- /dev/null +++ b/apps/vben5/packages/@abp/notifications/src/api/useNotificationGroupDefinitionsApi.ts @@ -0,0 +1,100 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + NotificationGroupDefinitionCreateDto, + NotificationGroupDefinitionDto, + NotificationGroupDefinitionGetListInput, + NotificationGroupDefinitionUpdateDto, +} from '../types'; + +import { useRequest } from '@abp/request'; + +export function useNotificationGroupDefinitionsApi() { + const { cancel, request } = useRequest(); + + /** + * 删除通知分组定义 + * @param name 通知分组名称 + */ + function deleteApi(name: string): Promise { + return request(`/api/notifications/definitions/groups/${name}`, { + method: 'DELETE', + }); + } + + /** + * 查询通知分组定义 + * @param name 通知分组名称 + * @returns 通知分组定义数据传输对象 + */ + function getApi(name: string): Promise { + return request( + `/api/notifications/definitions/groups/${name}`, + { + method: 'GET', + }, + ); + } + + /** + * 查询通知分组定义列表 + * @param input 通知分组过滤条件 + * @returns 通知分组定义数据传输对象列表 + */ + function getListApi( + input?: NotificationGroupDefinitionGetListInput, + ): Promise> { + return request>( + `/api/notifications/definitions/groups`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 创建通知分组定义 + * @param input 通知分组定义参数 + * @returns 通知分组定义数据传输对象 + */ + function createApi( + input: NotificationGroupDefinitionCreateDto, + ): Promise { + return request( + '/api/notifications/definitions/groups', + { + data: input, + method: 'POST', + }, + ); + } + + /** + * 更新通知分组定义 + * @param name 通知分组名称 + * @param input 通知分组定义参数 + * @returns 通知分组定义数据传输对象 + */ + function updateApi( + name: string, + input: NotificationGroupDefinitionUpdateDto, + ): Promise { + return request( + `/api/notifications/definitions/groups/${name}`, + { + data: input, + method: 'PUT', + }, + ); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue new file mode 100644 index 000000000..02fbd6182 --- /dev/null +++ b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue new file mode 100644 index 000000000..9068b37fa --- /dev/null +++ b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/apps/vben5/packages/@abp/notifications/src/components/index.ts b/apps/vben5/packages/@abp/notifications/src/components/index.ts index b7a46cbbc..bb1fc6eb1 100644 --- a/apps/vben5/packages/@abp/notifications/src/components/index.ts +++ b/apps/vben5/packages/@abp/notifications/src/components/index.ts @@ -1 +1,2 @@ +export { default as NotificationGroupDefinitionTable } from './definitions/groups/NotificationGroupDefinitionTable.vue'; export { default as MyNotificationTable } from './my-notifilers/MyNotificationTable.vue'; diff --git a/apps/vben5/packages/@abp/notifications/src/constants/permissions.ts b/apps/vben5/packages/@abp/notifications/src/constants/permissions.ts new file mode 100644 index 000000000..5b28b43d2 --- /dev/null +++ b/apps/vben5/packages/@abp/notifications/src/constants/permissions.ts @@ -0,0 +1,10 @@ +/** 分组权限 */ +export const GroupDefinitionsPermissions = { + /** 新增 */ + Create: 'Notifications.GroupDefinitions.Create', + Default: 'Notifications.GroupDefinitions', + /** 删除 */ + Delete: 'Notifications.GroupDefinitions.Delete', + /** 更新 */ + Update: 'Notifications.GroupDefinitions.Update', +}; diff --git a/apps/vben5/packages/@abp/notifications/src/types/groups.ts b/apps/vben5/packages/@abp/notifications/src/types/groups.ts new file mode 100644 index 000000000..a75894faf --- /dev/null +++ b/apps/vben5/packages/@abp/notifications/src/types/groups.ts @@ -0,0 +1,35 @@ +import type { ExtensibleObject, IHasExtraProperties } from '@abp/core'; + +interface NotificationGroupDefinitionDto extends ExtensibleObject { + allowSubscriptionToClients: boolean; + description?: string; + displayName: string; + isStatic: boolean; + name: string; +} + +interface NotificationGroupDefinitionGetListInput { + filter?: string; +} + +interface NotificationGroupDefinitionCreateOrUpdateDto + extends IHasExtraProperties { + allowSubscriptionToClients: boolean; + description?: string; + displayName: string; +} + +interface NotificationGroupDefinitionCreateDto + extends NotificationGroupDefinitionCreateOrUpdateDto { + name: string; +} + +type NotificationGroupDefinitionUpdateDto = + NotificationGroupDefinitionCreateOrUpdateDto; + +export type { + NotificationGroupDefinitionCreateDto, + NotificationGroupDefinitionDto, + NotificationGroupDefinitionGetListInput, + NotificationGroupDefinitionUpdateDto, +}; diff --git a/apps/vben5/packages/@abp/notifications/src/types/index.ts b/apps/vben5/packages/@abp/notifications/src/types/index.ts index c07eef088..dd720d9cf 100644 --- a/apps/vben5/packages/@abp/notifications/src/types/index.ts +++ b/apps/vben5/packages/@abp/notifications/src/types/index.ts @@ -1,4 +1,5 @@ export * from './definitions'; +export * from './groups'; export * from './my-notifilers'; export * from './notifications'; export * from './subscribes'; From 6c067510445460278e51fb32ba27776ccb5cbdee Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 11 Mar 2025 17:06:12 +0800 Subject: [PATCH 2/2] feat(vben5): add notification definition manage --- .../app-antd/src/locales/langs/en-US/abp.json | 3 +- .../app-antd/src/locales/langs/zh-CN/abp.json | 3 +- .../app-antd/src/router/routes/modules/abp.ts | 10 + .../views/notifications/definitions/index.vue | 15 + .../packages/@abp/notifications/package.json | 3 +- .../@abp/notifications/src/api/index.ts | 1 + .../src/api/useNotificationDefinitionsApi.ts | 100 +++++ .../src/api/useNotificationsApi.ts | 16 + .../NotificationGroupDefinitionModal.vue | 28 +- .../NotificationGroupDefinitionTable.vue | 49 +- .../NotificationDefinitionModal.vue | 311 +++++++++++++ .../NotificationDefinitionTable.vue | 418 ++++++++++++++++++ .../notifications/NotificationSendModal.vue | 143 ++++++ .../definitions/notifications/useEnumMaps.ts | 123 ++++++ .../notifications/src/components/index.ts | 1 + .../src/constants/permissions.ts | 18 + .../src/hooks/useNotifications.ts | 12 +- .../notifications/src/types/definitions.ts | 66 ++- 18 files changed, 1302 insertions(+), 18 deletions(-) create mode 100644 apps/vben5/apps/app-antd/src/views/notifications/definitions/index.vue create mode 100644 apps/vben5/packages/@abp/notifications/src/api/useNotificationDefinitionsApi.ts create mode 100644 apps/vben5/packages/@abp/notifications/src/components/definitions/notifications/NotificationDefinitionModal.vue create mode 100644 apps/vben5/packages/@abp/notifications/src/components/definitions/notifications/NotificationDefinitionTable.vue create mode 100644 apps/vben5/packages/@abp/notifications/src/components/definitions/notifications/NotificationSendModal.vue create mode 100644 apps/vben5/packages/@abp/notifications/src/components/definitions/notifications/useEnumMaps.ts 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 a90d36c70..7e50c1168 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 @@ -43,7 +43,8 @@ "notifications": { "title": "Notifications", "myNotifilers": "My Notifilers", - "groups": "Groups" + "groups": "Groups", + "definitions": "Definitions" } }, "openiddict": { 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 04b5bf81c..7976ea8f7 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 @@ -43,7 +43,8 @@ "notifications": { "title": "通知管理", "myNotifilers": "我的通知", - "groups": "通知分组" + "groups": "通知分组", + "definitions": "通知定义" } }, "openiddict": { 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 0693005c8..3504f198a 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 @@ -212,6 +212,16 @@ const routes: RouteRecordRaw[] = [ component: () => import('#/views/notifications/groups/index.vue'), }, + { + meta: { + title: $t('abp.manage.notifications.definitions'), + icon: 'nimbus:notification', + }, + name: 'NotificationDefinitions', + path: '/manage/notifications/definitions', + component: () => + import('#/views/notifications/definitions/index.vue'), + }, ], }, ], diff --git a/apps/vben5/apps/app-antd/src/views/notifications/definitions/index.vue b/apps/vben5/apps/app-antd/src/views/notifications/definitions/index.vue new file mode 100644 index 000000000..a42bc0e17 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/notifications/definitions/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/packages/@abp/notifications/package.json b/apps/vben5/packages/@abp/notifications/package.json index 1fa83a136..caf1a3720 100644 --- a/apps/vben5/packages/@abp/notifications/package.json +++ b/apps/vben5/packages/@abp/notifications/package.json @@ -34,6 +34,7 @@ "@vben/locales": "workspace:*", "ant-design-vue": "catalog:", "dayjs": "catalog:", - "vue": "catalog:*" + "vue": "catalog:*", + "vxe-table": "catalog:" } } diff --git a/apps/vben5/packages/@abp/notifications/src/api/index.ts b/apps/vben5/packages/@abp/notifications/src/api/index.ts index 36c0581b9..8e7bebea4 100644 --- a/apps/vben5/packages/@abp/notifications/src/api/index.ts +++ b/apps/vben5/packages/@abp/notifications/src/api/index.ts @@ -1,4 +1,5 @@ export { useMyNotifilersApi } from './useMyNotifilersApi'; export { useMySubscribesApi } from './useMySubscribesApi'; +export { useNotificationDefinitionsApi } from './useNotificationDefinitionsApi'; export { useNotificationGroupDefinitionsApi } from './useNotificationGroupDefinitionsApi'; export { useNotificationsApi } from './useNotificationsApi'; diff --git a/apps/vben5/packages/@abp/notifications/src/api/useNotificationDefinitionsApi.ts b/apps/vben5/packages/@abp/notifications/src/api/useNotificationDefinitionsApi.ts new file mode 100644 index 000000000..839e8e2d3 --- /dev/null +++ b/apps/vben5/packages/@abp/notifications/src/api/useNotificationDefinitionsApi.ts @@ -0,0 +1,100 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + NotificationDefinitionCreateDto, + NotificationDefinitionDto, + NotificationDefinitionGetListInput, + NotificationDefinitionUpdateDto, +} from '../types/definitions'; + +import { useRequest } from '@abp/request'; + +export function useNotificationDefinitionsApi() { + const { cancel, request } = useRequest(); + + /** + * 删除通知定义 + * @param name 通知名称 + */ + function deleteApi(name: string): Promise { + return request(`/api/notifications/definitions/notifications/${name}`, { + method: 'DELETE', + }); + } + + /** + * 查询通知定义 + * @param name 通知名称 + * @returns 通知定义数据传输对象 + */ + function getApi(name: string): Promise { + return request( + `/api/notifications/definitions/notifications/${name}`, + { + method: 'GET', + }, + ); + } + + /** + * 查询通知定义列表 + * @param input 通知过滤条件 + * @returns 通知定义数据传输对象列表 + */ + function getListApi( + input?: NotificationDefinitionGetListInput, + ): Promise> { + return request>( + `/api/notifications/definitions/notifications`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 创建通知定义 + * @param input 通知定义参数 + * @returns 通知定义数据传输对象 + */ + function createApi( + input: NotificationDefinitionCreateDto, + ): Promise { + return request( + '/api/notifications/definitions/notifications', + { + data: input, + method: 'POST', + }, + ); + } + + /** + * 更新通知定义 + * @param name 通知名称 + * @param input 通知定义参数 + * @returns 通知定义数据传输对象 + */ + function updateApi( + name: string, + input: NotificationDefinitionUpdateDto, + ): Promise { + return request( + `/api/notifications/definitions/notifications/${name}`, + { + data: input, + method: 'PUT', + }, + ); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/notifications/src/api/useNotificationsApi.ts b/apps/vben5/packages/@abp/notifications/src/api/useNotificationsApi.ts index 5934f3d11..484cfc089 100644 --- a/apps/vben5/packages/@abp/notifications/src/api/useNotificationsApi.ts +++ b/apps/vben5/packages/@abp/notifications/src/api/useNotificationsApi.ts @@ -2,6 +2,7 @@ import type { ListResultDto } from '@abp/core'; import type { NotificationGroupDto, + NotificationProviderDto, NotificationTemplateDto, } from '../types/definitions'; import type { @@ -13,6 +14,20 @@ import { useRequest } from '@abp/request'; export function useNotificationsApi() { const { cancel, request } = useRequest(); + /** + * 获取可用通知提供者列表 + * @returns {Promise>} 可用通知提供者列表 + */ + function getAssignableProvidersApi(): Promise< + ListResultDto + > { + return request>( + '/api/notifications/assignable-providers', + { + method: 'GET', + }, + ); + } /** * 获取可用通知列表 * @returns {Promise>} 可用通知列表 @@ -69,6 +84,7 @@ export function useNotificationsApi() { return { cancel, getAssignableNotifiersApi, + getAssignableProvidersApi, getAssignableTemplatesApi, sendNotiferApi, sendTemplateNotiferApi, diff --git a/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue index 02fbd6182..0b27ec15d 100644 --- a/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue +++ b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionModal.vue @@ -10,7 +10,7 @@ import { useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; import { LocalizableInput, PropertyTable } from '@abp/ui'; -import { Form, Input, message, Tabs } from 'ant-design-vue'; +import { Checkbox, Form, Input, message, Tabs } from 'ant-design-vue'; import { useNotificationGroupDefinitionsApi } from '../../../api/useNotificationGroupDefinitionsApi'; @@ -47,9 +47,10 @@ const [Modal, modalApi] = useVbenModal({ }, onConfirm: async () => { await form.value?.validate(); + const input = toValue(formModel); const api = isEditModel.value - ? updateApi(formModel.value.name, toValue(formModel)) - : createApi(toValue(formModel)); + ? updateApi(formModel.value.name, input) + : createApi(input); modalApi.setState({ confirmLoading: true, loading: true }); api .then((res) => { @@ -132,6 +133,27 @@ function onPropDelete(prop: PropertyInfo) { :disabled="formModel.isStatic" /> + + + + + + {{ $t('Notifications.DisplayName:AllowSubscriptionToClients') }} + + diff --git a/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue index 9068b37fa..7a1dff33f 100644 --- a/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue +++ b/apps/vben5/packages/@abp/notifications/src/components/definitions/groups/NotificationGroupDefinitionTable.vue @@ -1,11 +1,14 @@ @@ -208,10 +236,27 @@ onMounted(onGet); > {{ $t('AbpUi.Delete') }} + + +