From 065b5180dc85871baabe39aed01de5cc05e13034 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 21 Apr 2025 17:06:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(vben5):=20=E5=A2=9E=E5=8A=A0=E7=AE=A1?= =?UTF-8?q?=E7=90=86Webhook=E8=AE=A2=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../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 | 9 + .../views/webhooks/subscriptions/index.vue | 15 + .../vben5/packages/@abp/webhooks/package.json | 6 +- .../packages/@abp/webhooks/src/api/index.ts | 1 + .../webhooks/src/api/useSubscriptionsApi.ts | 123 +++++++ .../@abp/webhooks/src/components/index.ts | 1 + .../WebhookSubscriptionModal.vue | 309 +++++++++++++++++ .../WebhookSubscriptionTable.vue | 317 ++++++++++++++++++ .../webhooks/src/constants/permissions.ts | 11 + .../packages/@abp/webhooks/src/types/index.ts | 1 + .../@abp/webhooks/src/types/subscriptions.ts | 73 ++++ 13 files changed, 869 insertions(+), 3 deletions(-) create mode 100644 apps/vben5/apps/app-antd/src/views/webhooks/subscriptions/index.vue create mode 100644 apps/vben5/packages/@abp/webhooks/src/api/useSubscriptionsApi.ts create mode 100644 apps/vben5/packages/@abp/webhooks/src/components/subscriptions/WebhookSubscriptionModal.vue create mode 100644 apps/vben5/packages/@abp/webhooks/src/components/subscriptions/WebhookSubscriptionTable.vue create mode 100644 apps/vben5/packages/@abp/webhooks/src/types/subscriptions.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 80be45b1f..6de53754e 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 @@ -117,6 +117,7 @@ "webhooks": { "title": "Webhooks", "groups": "Groups", - "definitions": "Definitions" + "definitions": "Definitions", + "subscriptions": "Subscriptions" } } 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 4d3eff156..08ff8f8e5 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 @@ -117,6 +117,7 @@ "webhooks": { "title": "Webhook管理", "groups": "Webhook分组", - "definitions": "Webhook定义" + "definitions": "Webhook定义", + "subscriptions": "管理订阅" } } 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 709a89c04..2ec6407a1 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 @@ -476,6 +476,15 @@ const routes: RouteRecordRaw[] = [ path: '/webhooks/definitions', component: () => import('#/views/webhooks/definitions/index.vue'), }, + { + meta: { + title: $t('abp.webhooks.subscriptions'), + icon: 'material-symbols:subscriptions', + }, + name: 'WebhookSubscriptions', + path: '/webhooks/subscriptions', + component: () => import('#/views/webhooks/subscriptions/index.vue'), + }, ], }, { diff --git a/apps/vben5/apps/app-antd/src/views/webhooks/subscriptions/index.vue b/apps/vben5/apps/app-antd/src/views/webhooks/subscriptions/index.vue new file mode 100644 index 000000000..a05d1bf98 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/webhooks/subscriptions/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/packages/@abp/webhooks/package.json b/apps/vben5/packages/@abp/webhooks/package.json index 54f439f47..f62762874 100644 --- a/apps/vben5/packages/@abp/webhooks/package.json +++ b/apps/vben5/packages/@abp/webhooks/package.json @@ -20,9 +20,11 @@ } }, "dependencies": { + "@abp/components": "workspace:*", "@abp/core": "workspace:*", "@abp/features": "workspace:*", "@abp/request": "workspace:*", + "@abp/saas": "workspace:*", "@abp/ui": "workspace:*", "@ant-design/icons-vue": "catalog:", "@vben/access": "workspace:*", @@ -33,10 +35,12 @@ "@vben/locales": "workspace:*", "ant-design-vue": "catalog:", "lodash.clonedeep": "catalog:", + "lodash.debounce": "catalog:", "vue": "catalog:*", "vxe-table": "catalog:" }, "devDependencies": { - "@types/lodash.clonedeep": "catalog:" + "@types/lodash.clonedeep": "catalog:", + "@types/lodash.debounce": "catalog:" } } diff --git a/apps/vben5/packages/@abp/webhooks/src/api/index.ts b/apps/vben5/packages/@abp/webhooks/src/api/index.ts index 12a6e651a..0a30bdd2a 100644 --- a/apps/vben5/packages/@abp/webhooks/src/api/index.ts +++ b/apps/vben5/packages/@abp/webhooks/src/api/index.ts @@ -1,2 +1,3 @@ +export * from './useSubscriptionsApi'; export * from './useWebhookDefinitionsApi'; export * from './useWebhookGroupDefinitionsApi'; diff --git a/apps/vben5/packages/@abp/webhooks/src/api/useSubscriptionsApi.ts b/apps/vben5/packages/@abp/webhooks/src/api/useSubscriptionsApi.ts new file mode 100644 index 000000000..50c8914e8 --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/api/useSubscriptionsApi.ts @@ -0,0 +1,123 @@ +import type { ListResultDto, PagedResultDto } from '@abp/core'; + +import type { + WebhookAvailableGroupDto, + WebhookSubscriptionCreateDto, + WebhookSubscriptionDeleteManyInput, + WebhookSubscriptionDto, + WebhookSubscriptionGetListInput, + WebhookSubscriptionUpdateDto, +} from '../types/subscriptions'; + +import { useRequest } from '@abp/request'; + +export function useSubscriptionsApi() { + const { cancel, request } = useRequest(); + + /** + * 创建订阅 + * @param input 参数 + * @returns 订阅Dto + */ + function createApi( + input: WebhookSubscriptionCreateDto, + ): Promise { + return request(`/api/webhooks/subscriptions`, { + data: input, + method: 'POST', + }); + } + /** + * 删除订阅 + * @param id 订阅Id + */ + function deleteApi(id: string): Promise { + return request(`/api/webhooks/subscriptions/${id}`, { + method: 'DELETE', + }); + } + /** + * 批量删除订阅 + * @param input 参数 + */ + function bulkDeleteApi( + input: WebhookSubscriptionDeleteManyInput, + ): Promise { + return request(`/api/webhooks/subscriptions/delete-many`, { + data: input, + method: 'DELETE', + }); + } + /** + * 查询所有可用的Webhook分组列表 + * @returns Webhook分组列表 + */ + function getAllAvailableWebhooksApi(): Promise< + ListResultDto + > { + return request>( + `/api/webhooks/subscriptions/availables`, + { + method: 'GET', + }, + ); + } + /** + * 查询订阅 + * @param id 订阅Id + * @returns 订阅Dto + */ + function getApi(id: string): Promise { + return request( + `/api/webhooks/subscriptions/${id}`, + { + method: 'GET', + }, + ); + } + /** + * 查询订阅分页列表 + * @param input 过滤参数 + * @returns 订阅Dto列表 + */ + function getPagedListApi( + input: WebhookSubscriptionGetListInput, + ): Promise> { + return request>( + `/api/webhooks/subscriptions`, + { + method: 'GET', + params: input, + }, + ); + } + /** + * 更新订阅 + * @param id 订阅Id + * @param input 更新参数 + * @returns 订阅Dto + */ + function updateApi( + id: string, + input: WebhookSubscriptionUpdateDto, + ): Promise { + return request( + `/api/webhooks/subscriptions/${id}`, + { + data: input, + method: 'PUT', + }, + ); + } + + return { + bulkDeleteApi, + cancel, + createApi, + deleteApi, + getAllAvailableWebhooksApi, + getApi, + getPagedListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/webhooks/src/components/index.ts b/apps/vben5/packages/@abp/webhooks/src/components/index.ts index 14b4c03ac..41763338c 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/index.ts +++ b/apps/vben5/packages/@abp/webhooks/src/components/index.ts @@ -1,2 +1,3 @@ export { default as WebhookGroupDefinitionTable } from './definitions/groups/WebhookGroupDefinitionTable.vue'; export { default as WebhookDefinitionTable } from './definitions/webhooks/WebhookDefinitionTable.vue'; +export { default as WebhookSubscriptionTable } from './subscriptions/WebhookSubscriptionTable.vue'; diff --git a/apps/vben5/packages/@abp/webhooks/src/components/subscriptions/WebhookSubscriptionModal.vue b/apps/vben5/packages/@abp/webhooks/src/components/subscriptions/WebhookSubscriptionModal.vue new file mode 100644 index 000000000..8fa68daa4 --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/components/subscriptions/WebhookSubscriptionModal.vue @@ -0,0 +1,309 @@ + + +