From 7400a760250c2592b74ed1be50b2a85e7443df13 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 21 Apr 2025 10:05:31 +0800 Subject: [PATCH 01/11] feat: add `@abp/webhooks` package --- .../vben5/packages/@abp/webhooks/package.json | 41 +++++++++++++++++++ .../packages/@abp/webhooks/src/api/index.ts | 0 .../@abp/webhooks/src/components/index.ts | 0 .../vben5/packages/@abp/webhooks/src/index.ts | 3 ++ .../packages/@abp/webhooks/src/types/index.ts | 0 .../packages/@abp/webhooks/tsconfig.json | 6 +++ 6 files changed, 50 insertions(+) create mode 100644 apps/vben5/packages/@abp/webhooks/package.json create mode 100644 apps/vben5/packages/@abp/webhooks/src/api/index.ts create mode 100644 apps/vben5/packages/@abp/webhooks/src/components/index.ts create mode 100644 apps/vben5/packages/@abp/webhooks/src/index.ts create mode 100644 apps/vben5/packages/@abp/webhooks/src/types/index.ts create mode 100644 apps/vben5/packages/@abp/webhooks/tsconfig.json diff --git a/apps/vben5/packages/@abp/webhooks/package.json b/apps/vben5/packages/@abp/webhooks/package.json new file mode 100644 index 000000000..e3a3f9a72 --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/package.json @@ -0,0 +1,41 @@ +{ + "name": "@abp/webhooks", + "version": "9.0.4", + "homepage": "https://github.com/colinin/abp-next-admin", + "bugs": "https://github.com/colinin/abp-next-admin/issues", + "repository": { + "type": "git", + "url": "git+https://github.com/colinin/abp-next-admin.git", + "directory": "packages/@abp/webhooks" + }, + "license": "MIT", + "type": "module", + "sideEffects": [ + "**/*.css" + ], + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "dependencies": { + "@abp/core": "workspace:*", + "@abp/request": "workspace:*", + "@abp/ui": "workspace:*", + "@ant-design/icons-vue": "catalog:", + "@vben/access": "workspace:*", + "@vben/common-ui": "workspace:*", + "@vben/hooks": "workspace:*", + "@vben/icons": "workspace:*", + "@vben/layouts": "workspace:*", + "@vben/locales": "workspace:*", + "ant-design-vue": "catalog:", + "lodash.clonedeep": "catalog:", + "vue": "catalog:*", + "vxe-table": "catalog:" + }, + "devDependencies": { + "@types/lodash.clonedeep": "catalog:" + } +} diff --git a/apps/vben5/packages/@abp/webhooks/src/api/index.ts b/apps/vben5/packages/@abp/webhooks/src/api/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/apps/vben5/packages/@abp/webhooks/src/components/index.ts b/apps/vben5/packages/@abp/webhooks/src/components/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/apps/vben5/packages/@abp/webhooks/src/index.ts b/apps/vben5/packages/@abp/webhooks/src/index.ts new file mode 100644 index 000000000..314dad0cd --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/index.ts @@ -0,0 +1,3 @@ +export * from './api'; +export * from './components'; +export * from './types'; diff --git a/apps/vben5/packages/@abp/webhooks/src/types/index.ts b/apps/vben5/packages/@abp/webhooks/src/types/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/apps/vben5/packages/@abp/webhooks/tsconfig.json b/apps/vben5/packages/@abp/webhooks/tsconfig.json new file mode 100644 index 000000000..ce1a891fb --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/tsconfig.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/web.json", + "include": ["src"], + "exclude": ["node_modules"] +} From eb31c27d0c7d4fca3ca4eea1df50991c2c61a0df Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 21 Apr 2025 10:26:53 +0800 Subject: [PATCH 02/11] feat(vben5): add webhook groups page --- apps/vben5/apps/app-antd/package.json | 1 + .../app-antd/src/locales/langs/en-US/abp.json | 4 + .../app-antd/src/locales/langs/zh-CN/abp.json | 4 + .../app-antd/src/router/routes/modules/abp.ts | 19 ++ .../src/views/webhooks/groups/index.vue | 15 ++ .../src/api/useWebhookGroupDefinitionsApi.ts | 100 ++++++++ .../groups/WebhookGroupDefinitionTable.vue | 234 ++++++++++++++++++ .../@abp/webhooks/src/components/index.ts | 1 + .../webhooks/src/constants/permissions.ts | 10 + .../@abp/webhooks/src/types/groups.ts | 31 +++ .../packages/@abp/webhooks/src/types/index.ts | 1 + 11 files changed, 420 insertions(+) create mode 100644 apps/vben5/apps/app-antd/src/views/webhooks/groups/index.vue create mode 100644 apps/vben5/packages/@abp/webhooks/src/api/useWebhookGroupDefinitionsApi.ts create mode 100644 apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue create mode 100644 apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts create mode 100644 apps/vben5/packages/@abp/webhooks/src/types/groups.ts diff --git a/apps/vben5/apps/app-antd/package.json b/apps/vben5/apps/app-antd/package.json index 4b1e3c565..74ec14a0d 100644 --- a/apps/vben5/apps/app-antd/package.json +++ b/apps/vben5/apps/app-antd/package.json @@ -43,6 +43,7 @@ "@abp/settings": "workspace:*", "@abp/tasks": "workspace:*", "@abp/ui": "workspace:*", + "@abp/webhooks": "workspace:*", "@vben/access": "workspace:*", "@vben/common-ui": "workspace:*", "@vben/constants": "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 0ba5e1273..ad4031f55 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 @@ -113,5 +113,9 @@ "jobInfo": { "title": "Job Manage" } + }, + "webhooks": { + "title": "Webhooks", + "groups": "Groups" } } 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 d6eaf0e02..e22314e36 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 @@ -113,5 +113,9 @@ "jobInfo": { "title": "作业管理" } + }, + "webhooks": { + "title": "Webhook管理", + "groups": "Webhook分组" } } 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 1b4e0f24d..e4c7b825f 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 @@ -450,6 +450,25 @@ const routes: RouteRecordRaw[] = [ }, ], }, + { + meta: { + title: $t('abp.webhooks.title'), + icon: 'material-symbols:webhook', + }, + name: 'WebhooksManagement', + path: '/webhooks', + children: [ + { + meta: { + title: $t('abp.webhooks.groups'), + icon: 'lucide:group', + }, + name: 'WebhookGroupDefinitions', + path: '/webhooks/groups', + component: () => import('#/views/webhooks/groups/index.vue'), + }, + ], + }, { name: 'AbpDemo', path: '/abp/demos', diff --git a/apps/vben5/apps/app-antd/src/views/webhooks/groups/index.vue b/apps/vben5/apps/app-antd/src/views/webhooks/groups/index.vue new file mode 100644 index 000000000..660110dc7 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/webhooks/groups/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/packages/@abp/webhooks/src/api/useWebhookGroupDefinitionsApi.ts b/apps/vben5/packages/@abp/webhooks/src/api/useWebhookGroupDefinitionsApi.ts new file mode 100644 index 000000000..2cbd2559e --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/api/useWebhookGroupDefinitionsApi.ts @@ -0,0 +1,100 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + WebhookGroupDefinitionCreateDto, + WebhookGroupDefinitionDto, + WebhookGroupDefinitionGetListInput, + WebhookGroupDefinitionUpdateDto, +} from '../types/groups'; + +import { useRequest } from '@abp/request'; + +export function useWebhookGroupDefinitionsApi() { + const { cancel, request } = useRequest(); + + /** + * 删除Webhook分组定义 + * @param name Webhook分组名称 + */ + function deleteApi(name: string): Promise { + return request(`/api/webhooks/definitions/groups/${name}`, { + method: 'DELETE', + }); + } + + /** + * 查询Webhook分组定义 + * @param name Webhook分组名称 + * @returns Webhook分组定义数据传输对象 + */ + function getApi(name: string): Promise { + return request( + `/api/webhooks/definitions/groups/${name}`, + { + method: 'GET', + }, + ); + } + + /** + * 查询Webhook分组定义列表 + * @param input Webhook分组过滤条件 + * @returns Webhook分组定义数据传输对象列表 + */ + function getListApi( + input?: WebhookGroupDefinitionGetListInput, + ): Promise> { + return request>( + `/api/webhooks/definitions/groups`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 创建Webhook分组定义 + * @param input Webhook分组定义参数 + * @returns Webhook分组定义数据传输对象 + */ + function createApi( + input: WebhookGroupDefinitionCreateDto, + ): Promise { + return request( + '/api/webhooks/definitions/groups', + { + data: input, + method: 'POST', + }, + ); + } + + /** + * 更新Webhook分组定义 + * @param name Webhook分组名称 + * @param input Webhook分组定义参数 + * @returns Webhook分组定义数据传输对象 + */ + function updateApi( + name: string, + input: WebhookGroupDefinitionUpdateDto, + ): Promise { + return request( + `/api/webhooks/definitions/groups/${name}`, + { + data: input, + method: 'PUT', + }, + ); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue new file mode 100644 index 000000000..81caa231d --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/apps/vben5/packages/@abp/webhooks/src/components/index.ts b/apps/vben5/packages/@abp/webhooks/src/components/index.ts index e69de29bb..5632abd6d 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/index.ts +++ b/apps/vben5/packages/@abp/webhooks/src/components/index.ts @@ -0,0 +1 @@ +export { default as WebhookGroupDefinitionTable } from './definitions/groups/WebhookGroupDefinitionTable.vue'; diff --git a/apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts b/apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts new file mode 100644 index 000000000..25334ca12 --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts @@ -0,0 +1,10 @@ +/** 分组权限 */ +export const GroupDefinitionsPermissions = { + /** 新增 */ + Create: 'AbpWebhooks.GroupDefinitions.Create', + Default: 'AbpWebhooks.GroupDefinitions', + /** 删除 */ + Delete: 'AbpWebhooks.GroupDefinitions.Delete', + /** 更新 */ + Update: 'AbpWebhooks.GroupDefinitions.Update', +}; diff --git a/apps/vben5/packages/@abp/webhooks/src/types/groups.ts b/apps/vben5/packages/@abp/webhooks/src/types/groups.ts new file mode 100644 index 000000000..d02df50b7 --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/types/groups.ts @@ -0,0 +1,31 @@ +import type { IHasConcurrencyStamp, IHasExtraProperties } from '@abp/core'; + +interface WebhookGroupDefinitionDto extends IHasExtraProperties { + displayName: string; + isStatic: boolean; + name: string; +} + +interface WebhookGroupDefinitionCreateOrUpdateDto extends IHasExtraProperties { + displayName: string; +} + +interface WebhookGroupDefinitionCreateDto + extends WebhookGroupDefinitionCreateOrUpdateDto { + name: string; +} + +interface WebhookGroupDefinitionUpdateDto + extends IHasConcurrencyStamp, + WebhookGroupDefinitionCreateOrUpdateDto {} + +interface WebhookGroupDefinitionGetListInput { + filter?: string; +} + +export type { + WebhookGroupDefinitionCreateDto, + WebhookGroupDefinitionDto, + WebhookGroupDefinitionGetListInput, + WebhookGroupDefinitionUpdateDto, +}; diff --git a/apps/vben5/packages/@abp/webhooks/src/types/index.ts b/apps/vben5/packages/@abp/webhooks/src/types/index.ts index e69de29bb..d20b7e110 100644 --- a/apps/vben5/packages/@abp/webhooks/src/types/index.ts +++ b/apps/vben5/packages/@abp/webhooks/src/types/index.ts @@ -0,0 +1 @@ +export * from './groups'; From d5a9573a4f4e5f601ef6f6adccdd99ba717e8469 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 21 Apr 2025 10:33:19 +0800 Subject: [PATCH 03/11] feat(vben5): add webhook groups modal --- .../groups/WebhookGroupDefinitionModal.vue | 150 ++++++++++++++++++ .../groups/WebhookGroupDefinitionTable.vue | 20 ++- 2 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue new file mode 100644 index 000000000..bddcec827 --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue index 81caa231d..cee14ad53 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue @@ -6,8 +6,9 @@ import type { VbenFormProps } from '@vben/common-ui'; import type { WebhookGroupDefinitionDto } from '../../../types/groups'; -import { h, onMounted, reactive, ref } from 'vue'; +import { defineAsyncComponent, h, onMounted, reactive, ref } from 'vue'; +import { useVbenModal } from '@vben/common-ui'; import { createIconifyIcon } from '@vben/icons'; import { $t } from '@vben/locales'; @@ -102,6 +103,12 @@ const gridEvents: VxeGridListeners = { }, }; +const [WebhookGroupDefinitionModal, groupModalApi] = useVbenModal({ + connectedComponent: defineAsyncComponent( + () => import('./WebhookGroupDefinitionModal.vue'), + ), +}); + const [Grid, gridApi] = useVbenVxeGrid({ formOptions, gridEvents, @@ -147,9 +154,15 @@ function onPageChange() { }); } -function onCreate() {} +function onCreate() { + groupModalApi.setData({}); + groupModalApi.open(); +} -function onUpdate(_row: WebhookGroupDefinitionDto) {} +function onUpdate(row: WebhookGroupDefinitionDto) { + groupModalApi.setData(row); + groupModalApi.open(); +} function onMenuClick(_row: WebhookGroupDefinitionDto, info: MenuInfo) { switch (info.key) { @@ -229,6 +242,7 @@ onMounted(onGet); + From 8c834631b8fe024d2cd1f948771fb647b110a769 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 21 Apr 2025 11:01:21 +0800 Subject: [PATCH 04/11] =?UTF-8?q?fix(vben5):=20=E4=BF=AE=E5=A4=8D=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=A8=A1=E5=BC=8F=E5=8F=AF=E5=8F=98=E6=9B=B4=E5=90=8D?= =?UTF-8?q?=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../definitions/groups/WebhookGroupDefinitionModal.vue | 2 +- .../definitions/groups/WebhookGroupDefinitionTable.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue index bddcec827..019bb8934 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionModal.vue @@ -118,7 +118,7 @@ function onPropDelete(prop: PropertyInfo) { > diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue index cee14ad53..8eb3443c2 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue @@ -242,7 +242,7 @@ onMounted(onGet); - + From 7d18d00b3b6b0fe2750a6bd0523828a6f92ad0f0 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 21 Apr 2025 11:27:41 +0800 Subject: [PATCH 05/11] =?UTF-8?q?feat(vben5):=20=E5=A2=9E=E5=8A=A0webhook?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=88=97=E8=A1=A8=E8=A7=86=E5=9B=BE?= 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 + .../src/views/webhooks/definitions/index.vue | 15 + .../packages/@abp/webhooks/src/api/index.ts | 2 + .../src/api/useWebhookDefinitionsApi.ts | 91 +++++ .../webhooks/WebhookDefinitionTable.vue | 328 ++++++++++++++++++ .../@abp/webhooks/src/components/index.ts | 1 + .../webhooks/src/constants/permissions.ts | 11 + .../@abp/webhooks/src/types/definitions.ts | 40 +++ .../packages/@abp/webhooks/src/types/index.ts | 1 + 11 files changed, 502 insertions(+), 2 deletions(-) create mode 100644 apps/vben5/apps/app-antd/src/views/webhooks/definitions/index.vue create mode 100644 apps/vben5/packages/@abp/webhooks/src/api/useWebhookDefinitionsApi.ts create mode 100644 apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue create mode 100644 apps/vben5/packages/@abp/webhooks/src/types/definitions.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 ad4031f55..80be45b1f 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 @@ -116,6 +116,7 @@ }, "webhooks": { "title": "Webhooks", - "groups": "Groups" + "groups": "Groups", + "definitions": "Definitions" } } 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 e22314e36..4d3eff156 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 @@ -116,6 +116,7 @@ }, "webhooks": { "title": "Webhook管理", - "groups": "Webhook分组" + "groups": "Webhook分组", + "definitions": "Webhook定义" } } 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 e4c7b825f..709a89c04 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 @@ -467,6 +467,15 @@ const routes: RouteRecordRaw[] = [ path: '/webhooks/groups', component: () => import('#/views/webhooks/groups/index.vue'), }, + { + meta: { + title: $t('abp.webhooks.definitions'), + icon: 'material-symbols:webhook', + }, + name: 'WebhookDefinitions', + path: '/webhooks/definitions', + component: () => import('#/views/webhooks/definitions/index.vue'), + }, ], }, { diff --git a/apps/vben5/apps/app-antd/src/views/webhooks/definitions/index.vue b/apps/vben5/apps/app-antd/src/views/webhooks/definitions/index.vue new file mode 100644 index 000000000..c8a497b4b --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/webhooks/definitions/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/packages/@abp/webhooks/src/api/index.ts b/apps/vben5/packages/@abp/webhooks/src/api/index.ts index e69de29bb..12a6e651a 100644 --- a/apps/vben5/packages/@abp/webhooks/src/api/index.ts +++ b/apps/vben5/packages/@abp/webhooks/src/api/index.ts @@ -0,0 +1,2 @@ +export * from './useWebhookDefinitionsApi'; +export * from './useWebhookGroupDefinitionsApi'; diff --git a/apps/vben5/packages/@abp/webhooks/src/api/useWebhookDefinitionsApi.ts b/apps/vben5/packages/@abp/webhooks/src/api/useWebhookDefinitionsApi.ts new file mode 100644 index 000000000..e582b62f4 --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/api/useWebhookDefinitionsApi.ts @@ -0,0 +1,91 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + WebhookDefinitionCreateDto, + WebhookDefinitionDto, + WebhookDefinitionGetListInput, + WebhookDefinitionUpdateDto, +} from '../types/definitions'; + +import { useRequest } from '@abp/request'; + +export function useWebhookDefinitionsApi() { + const { cancel, request } = useRequest(); + + /** + * 删除Webhook定义 + * @param name Webhook名称 + */ + function deleteApi(name: string): Promise { + return request(`/api/webhooks/definitions/${name}`, { + method: 'DELETE', + }); + } + + /** + * 查询Webhook定义 + * @param name Webhook名称 + * @returns Webhook定义数据传输对象 + */ + function getApi(name: string): Promise { + return request(`/api/webhooks/definitions/${name}`, { + method: 'GET', + }); + } + + /** + * 查询Webhook定义列表 + * @param input Webhook过滤条件 + * @returns Webhook定义数据传输对象列表 + */ + function getListApi( + input?: WebhookDefinitionGetListInput, + ): Promise> { + return request>( + `/api/webhooks/definitions`, + { + method: 'GET', + params: input, + }, + ); + } + + /** + * 创建Webhook定义 + * @param input Webhook定义参数 + * @returns Webhook定义数据传输对象 + */ + function createApi( + input: WebhookDefinitionCreateDto, + ): Promise { + return request('/api/webhooks/definitions', { + data: input, + method: 'POST', + }); + } + + /** + * 更新Webhook定义 + * @param name Webhook名称 + * @param input Webhook定义参数 + * @returns Webhook定义数据传输对象 + */ + function updateApi( + name: string, + input: WebhookDefinitionUpdateDto, + ): Promise { + return request(`/api/webhooks/definitions/${name}`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue new file mode 100644 index 000000000..0120ef14e --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue @@ -0,0 +1,328 @@ + + + + + diff --git a/apps/vben5/packages/@abp/webhooks/src/components/index.ts b/apps/vben5/packages/@abp/webhooks/src/components/index.ts index 5632abd6d..14b4c03ac 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/index.ts +++ b/apps/vben5/packages/@abp/webhooks/src/components/index.ts @@ -1 +1,2 @@ export { default as WebhookGroupDefinitionTable } from './definitions/groups/WebhookGroupDefinitionTable.vue'; +export { default as WebhookDefinitionTable } from './definitions/webhooks/WebhookDefinitionTable.vue'; diff --git a/apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts b/apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts index 25334ca12..73156c1b8 100644 --- a/apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts +++ b/apps/vben5/packages/@abp/webhooks/src/constants/permissions.ts @@ -8,3 +8,14 @@ export const GroupDefinitionsPermissions = { /** 更新 */ Update: 'AbpWebhooks.GroupDefinitions.Update', }; + +/** Webhook定义权限 */ +export const WebhookDefinitionsPermissions = { + /** 新增 */ + Create: 'AbpWebhooks.Definitions.Create', + Default: 'AbpWebhooks.Definitions', + /** 删除 */ + Delete: 'AbpWebhooks.Definitions.Delete', + /** 更新 */ + Update: 'AbpWebhooks.Definitions.Update', +}; diff --git a/apps/vben5/packages/@abp/webhooks/src/types/definitions.ts b/apps/vben5/packages/@abp/webhooks/src/types/definitions.ts new file mode 100644 index 000000000..2f3391d7d --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/types/definitions.ts @@ -0,0 +1,40 @@ +import type { IHasConcurrencyStamp, IHasExtraProperties } from '@abp/core'; + +interface WebhookDefinitionDto extends IHasExtraProperties { + description?: string; + displayName: string; + groupName: string; + isEnabled: boolean; + isStatic: boolean; + name: string; + requiredFeatures?: string[]; +} + +interface WebhookDefinitionCreateOrUpdateDto extends IHasExtraProperties { + description?: string; + displayName: string; + isEnabled: boolean; + requiredFeatures?: string[]; +} + +interface WebhookDefinitionCreateDto + extends WebhookDefinitionCreateOrUpdateDto { + groupName: string; + name: string; +} + +interface WebhookDefinitionUpdateDto + extends IHasConcurrencyStamp, + WebhookDefinitionCreateOrUpdateDto {} + +interface WebhookDefinitionGetListInput { + filter?: string; + groupName?: string; +} + +export type { + WebhookDefinitionCreateDto, + WebhookDefinitionDto, + WebhookDefinitionGetListInput, + WebhookDefinitionUpdateDto, +}; diff --git a/apps/vben5/packages/@abp/webhooks/src/types/index.ts b/apps/vben5/packages/@abp/webhooks/src/types/index.ts index d20b7e110..6a41718f6 100644 --- a/apps/vben5/packages/@abp/webhooks/src/types/index.ts +++ b/apps/vben5/packages/@abp/webhooks/src/types/index.ts @@ -1 +1,2 @@ +export * from './definitions'; export * from './groups'; From 9e071e00846d65f50b66fa493c94224d2509cca3 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 21 Apr 2025 13:17:56 +0800 Subject: [PATCH 06/11] =?UTF-8?q?feat(vben5):=20=E5=A2=9E=E5=8A=A0webhook?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vben5/packages/@abp/webhooks/package.json | 1 + .../groups/WebhookGroupDefinitionTable.vue | 14 +- .../webhooks/WebhookDefinitionModal.vue | 357 ++++++++++++++++++ .../webhooks/WebhookDefinitionTable.vue | 28 +- 4 files changed, 391 insertions(+), 9 deletions(-) create mode 100644 apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionModal.vue diff --git a/apps/vben5/packages/@abp/webhooks/package.json b/apps/vben5/packages/@abp/webhooks/package.json index e3a3f9a72..54f439f47 100644 --- a/apps/vben5/packages/@abp/webhooks/package.json +++ b/apps/vben5/packages/@abp/webhooks/package.json @@ -21,6 +21,7 @@ }, "dependencies": { "@abp/core": "workspace:*", + "@abp/features": "workspace:*", "@abp/request": "workspace:*", "@abp/ui": "workspace:*", "@ant-design/icons-vue": "catalog:", diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue index 8eb3443c2..20dc6a10c 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/groups/WebhookGroupDefinitionTable.vue @@ -108,6 +108,11 @@ const [WebhookGroupDefinitionModal, groupModalApi] = useVbenModal({ () => import('./WebhookGroupDefinitionModal.vue'), ), }); +const [WebhookDefinitionModal, defineModalApi] = useVbenModal({ + connectedComponent: defineAsyncComponent( + () => import('../webhooks/WebhookDefinitionModal.vue'), + ), +}); const [Grid, gridApi] = useVbenVxeGrid({ formOptions, @@ -164,9 +169,13 @@ function onUpdate(row: WebhookGroupDefinitionDto) { groupModalApi.open(); } -function onMenuClick(_row: WebhookGroupDefinitionDto, info: MenuInfo) { +function onMenuClick(row: WebhookGroupDefinitionDto, info: MenuInfo) { switch (info.key) { - case 'permissions': { + case 'webhooks': { + defineModalApi.setData({ + groupName: row.name, + }); + defineModalApi.open(); break; } } @@ -243,6 +252,7 @@ onMounted(onGet); + diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionModal.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionModal.vue new file mode 100644 index 000000000..1496b80bb --- /dev/null +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionModal.vue @@ -0,0 +1,357 @@ + + + + + diff --git a/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue b/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue index 0120ef14e..e25660be3 100644 --- a/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue +++ b/apps/vben5/packages/@abp/webhooks/src/components/definitions/webhooks/WebhookDefinitionTable.vue @@ -6,8 +6,9 @@ import type { VbenFormProps } from '@vben/common-ui'; import type { WebhookDefinitionDto } from '../../../types/definitions'; import type { WebhookGroupDefinitionDto } from '../../../types/groups'; -import { h, onMounted, reactive, ref } from 'vue'; +import { defineAsyncComponent, h, onMounted, reactive, ref } from 'vue'; +import { useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; import { @@ -158,9 +159,9 @@ const subGridColumns: VxeGridProps['columns'] = [ }, { align: 'left', - field: 'features', + field: 'requiredFeatures', minWidth: 150, - slots: { default: 'features' }, + slots: { default: 'requiredFeatures' }, title: $t('WebhooksManagement.DisplayName:RequiredFeatures'), }, { @@ -186,6 +187,12 @@ const [GroupGrid, gridApi] = useVbenVxeGrid({ gridOptions, }); +const [WebhookDefinitionModal, groupModalApi] = useVbenModal({ + connectedComponent: defineAsyncComponent( + () => import('./WebhookDefinitionModal.vue'), + ), +}); + async function onGet(input?: Record) { try { gridApi.setLoading(true); @@ -241,9 +248,15 @@ function onPageChange() { }); } -function onCreate() {} +function onCreate() { + groupModalApi.setData({}); + groupModalApi.open(); +} -function onUpdate(_row: WebhookDefinitionDto) {} +function onUpdate(row: WebhookDefinitionDto) { + groupModalApi.setData(row); + groupModalApi.open(); +} function onDelete(row: WebhookDefinitionDto) { Modal.confirm({ @@ -289,9 +302,9 @@ onMounted(onGet); -