3 changed files with 263 additions and 9 deletions
@ -0,0 +1,239 @@ |
|||
<script setup lang="ts"> |
|||
import type { TenantDto } from '@abp/saas'; |
|||
|
|||
import type { WebhookSendRecordDto, WebhookSubscriptionDto } from '../../types'; |
|||
|
|||
import { ref } from 'vue'; |
|||
|
|||
import { useAccess } from '@vben/access'; |
|||
import { useVbenDrawer } from '@vben/common-ui'; |
|||
|
|||
import { CodeEditor } from '@abp/components/codeeditor'; |
|||
import { Tinymce } from '@abp/components/tinymce'; |
|||
import { formatToDateTime, isNullOrWhiteSpace } from '@abp/core'; |
|||
import { useHttpStatusCodeMap } from '@abp/request'; |
|||
import { useTenantsApi } from '@abp/saas'; |
|||
import { |
|||
Checkbox, |
|||
DatePicker, |
|||
Form, |
|||
Input, |
|||
InputPassword, |
|||
Tabs, |
|||
Tag, |
|||
Textarea, |
|||
} from 'ant-design-vue'; |
|||
|
|||
import { useSendAttemptsApi, useSubscriptionsApi } from '../../api'; |
|||
import { WebhookSubscriptionPermissions } from '../../constants/permissions'; |
|||
|
|||
const FormItem = Form.Item; |
|||
const TabPane = Tabs.TabPane; |
|||
|
|||
type TabKey = 'basic' | 'event' | 'subscriber'; |
|||
|
|||
const activeTabKey = ref<TabKey>('basic'); |
|||
const formModel = ref<WebhookSendRecordDto>(); |
|||
const webhookSubscription = ref<WebhookSubscriptionDto>(); |
|||
const webhookTenant = ref<TenantDto>(); |
|||
|
|||
const { hasAccessByCodes } = useAccess(); |
|||
const { getApi } = useSendAttemptsApi(); |
|||
const { getApi: getTenantApi } = useTenantsApi(); |
|||
const { getApi: getSubscriptionApi } = useSubscriptionsApi(); |
|||
const { getHttpStatusColor, httpStatusCodeMap } = useHttpStatusCodeMap(); |
|||
|
|||
const [Drawer, drawerApi] = useVbenDrawer({ |
|||
class: 'w-1/2', |
|||
async onOpenChange(isOpen) { |
|||
formModel.value = undefined; |
|||
webhookTenant.value = undefined; |
|||
webhookSubscription.value = undefined; |
|||
if (isOpen) { |
|||
await onInit(); |
|||
} |
|||
}, |
|||
}); |
|||
|
|||
async function onInit() { |
|||
const dto = drawerApi.getData<WebhookSendRecordDto>(); |
|||
if (isNullOrWhiteSpace(dto.id)) { |
|||
return; |
|||
} |
|||
const [sendRecordDto, subscriptionDto, tenantDto] = await Promise.all([ |
|||
getApi(dto.id), |
|||
onInitSubscription(dto.webhookSubscriptionId), |
|||
onInitTenant(dto.tenantId), |
|||
]); |
|||
formModel.value = sendRecordDto; |
|||
webhookSubscription.value = subscriptionDto; |
|||
webhookTenant.value = tenantDto; |
|||
} |
|||
|
|||
async function onInitSubscription(subscriptionId: string) { |
|||
if (!hasAccessByCodes([WebhookSubscriptionPermissions.Default])) { |
|||
return undefined; |
|||
} |
|||
return await getSubscriptionApi(subscriptionId); |
|||
} |
|||
|
|||
async function onInitTenant(tenantId?: string) { |
|||
// TODO: 公开saas模块常量? |
|||
if (isNullOrWhiteSpace(tenantId) || !hasAccessByCodes(['AbpSaas.Tenants'])) { |
|||
return undefined; |
|||
} |
|||
return await getTenantApi(tenantId); |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<Drawer :title="$t('WebhooksManagement.SendAttempts')"> |
|||
<Form :model="formModel" layout="vertical"> |
|||
<Tabs v-if="formModel" v-model:active-key="activeTabKey"> |
|||
<TabPane key="basic" :tab="$t('WebhooksManagement.BasicInfo')"> |
|||
<FormItem |
|||
v-if="webhookTenant" |
|||
name="tenantId" |
|||
:label="$t('WebhooksManagement.DisplayName:TenantId')" |
|||
> |
|||
<Input :value="webhookTenant.name" disabled /> |
|||
</FormItem> |
|||
<FormItem name="sendExactSameData"> |
|||
<Checkbox :checked="formModel.sendExactSameData" disabled> |
|||
{{ $t('WebhooksManagement.DisplayName:SendExactSameData') }} |
|||
</Checkbox> |
|||
</FormItem> |
|||
<FormItem |
|||
name="creationTime" |
|||
:label="$t('WebhooksManagement.DisplayName:CreationTime')" |
|||
> |
|||
<DatePicker |
|||
class="w-full" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:value="formModel.creationTime" |
|||
disabled |
|||
show-time |
|||
/> |
|||
</FormItem> |
|||
<FormItem |
|||
name="requestHeaders" |
|||
:label="$t('WebhooksManagement.DisplayName:RequestHeaders')" |
|||
> |
|||
<CodeEditor :value="formModel.requestHeaders" readonly /> |
|||
</FormItem> |
|||
<FormItem |
|||
v-if="formModel.responseStatusCode" |
|||
name="responseStatusCode" |
|||
:label="$t('WebhooksManagement.DisplayName:ResponseStatusCode')" |
|||
> |
|||
<Tag :color="getHttpStatusColor(formModel.responseStatusCode)"> |
|||
{{ httpStatusCodeMap[formModel.responseStatusCode] }} |
|||
</Tag> |
|||
</FormItem> |
|||
<FormItem |
|||
name="responseHeaders" |
|||
:label="$t('WebhooksManagement.DisplayName:ResponseHeaders')" |
|||
> |
|||
<CodeEditor :value="formModel.responseHeaders" readonly /> |
|||
</FormItem> |
|||
<FormItem |
|||
name="response" |
|||
:label="$t('WebhooksManagement.DisplayName:Response')" |
|||
> |
|||
<Tinymce |
|||
:value="formModel.response" |
|||
:toolbar="[]" |
|||
:plugins="[]" |
|||
readonly |
|||
/> |
|||
</FormItem> |
|||
</TabPane> |
|||
<TabPane key="event" :tab="$t('WebhooksManagement.WebhookEvent')"> |
|||
<FormItem |
|||
name="webhookEventId" |
|||
:label="$t('WebhooksManagement.DisplayName:WebhookEventId')" |
|||
> |
|||
<Input :value="formModel.webhookEventId" disabled /> |
|||
</FormItem> |
|||
<FormItem |
|||
:name="['webhookEvent', 'webhookName']" |
|||
:label="$t('WebhooksManagement.DisplayName:WebhookName')" |
|||
> |
|||
<Input :value="formModel.webhookEvent.webhookName" disabled /> |
|||
</FormItem> |
|||
<FormItem |
|||
:name="['webhookEvent', 'creationTime']" |
|||
:label="$t('WebhooksManagement.DisplayName:CreationTime')" |
|||
> |
|||
<DatePicker |
|||
class="w-full" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:value="formModel.webhookEvent.creationTime" |
|||
disabled |
|||
show-time |
|||
/> |
|||
</FormItem> |
|||
<FormItem |
|||
:name="['webhookEvent', 'data']" |
|||
:label="$t('WebhooksManagement.DisplayName:Data')" |
|||
> |
|||
<CodeEditor :value="formModel.webhookEvent.data" readonly /> |
|||
</FormItem> |
|||
</TabPane> |
|||
<TabPane |
|||
v-if="webhookSubscription" |
|||
key="subscriber" |
|||
:tab="$t('WebhooksManagement.Subscriptions')" |
|||
> |
|||
<FormItem> |
|||
<Checkbox :checked="webhookSubscription.isActive" disabled> |
|||
{{ $t('WebhooksManagement.DisplayName:IsActive') }} |
|||
</Checkbox> |
|||
</FormItem> |
|||
<FormItem |
|||
:label="$t('WebhooksManagement.DisplayName:WebhookSubscriptionId')" |
|||
> |
|||
<Input :value="webhookSubscription.id" disabled /> |
|||
</FormItem> |
|||
<FormItem :label="$t('WebhooksManagement.DisplayName:WebhookUri')"> |
|||
<Input :value="webhookSubscription.webhookUri" disabled /> |
|||
</FormItem> |
|||
<FormItem :label="$t('WebhooksManagement.DisplayName:Description')"> |
|||
<Textarea |
|||
:auto-size="{ minRows: 3 }" |
|||
:value="webhookSubscription.description" |
|||
disabled |
|||
/> |
|||
</FormItem> |
|||
<FormItem :label="$t('WebhooksManagement.DisplayName:Secret')"> |
|||
<InputPassword :value="webhookSubscription.secret" disabled /> |
|||
</FormItem> |
|||
<FormItem :label="$t('WebhooksManagement.DisplayName:CreationTime')"> |
|||
<DatePicker |
|||
class="w-full" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:value="formatToDateTime(webhookSubscription.creationTime)" |
|||
disabled |
|||
show-time |
|||
/> |
|||
</FormItem> |
|||
<FormItem :label="$t('WebhooksManagement.DisplayName:Webhooks')"> |
|||
<template |
|||
v-for="webhook in webhookSubscription.webhooks" |
|||
:key="webhook" |
|||
> |
|||
<Tag color="blue"> |
|||
{{ webhook }} |
|||
</Tag> |
|||
</template> |
|||
</FormItem> |
|||
<FormItem :label="$t('WebhooksManagement.DisplayName:Headers')"> |
|||
<CodeEditor :value="webhookSubscription.headers" readonly /> |
|||
</FormItem> |
|||
</TabPane> |
|||
</Tabs> |
|||
</Form> |
|||
</Drawer> |
|||
</template> |
|||
|
|||
<style scoped></style> |
|||
Loading…
Reference in new issue