From 942d3bedb36b891e69750bbe4b03a6069a5ec4a9 Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 11 Mar 2025 13:48:42 +0800 Subject: [PATCH] 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';