diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a3b942008..60b82dcdc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,7 +25,6 @@ jobs: working-directory: .\build shell: powershell - name: Publish Packages - run: - dotnet nuget push *.nupkg --api-key ${{ secrets.NUGETKEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate --no-symbols + run: ..\..\build\package-aspnetcore-publish.ps1 working-directory: .\aspnet-core\LocalNuget diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 92d7c7c56..1fdaa2c12 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,4 +14,4 @@ jobs: with: repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false - automatic_release_tag: "9.1.1" + automatic_release_tag: "9.1.3" diff --git a/Directory.Packages.props b/Directory.Packages.props index fe3557ff8..fcb44d78d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,18 +1,18 @@ 8.3.2 - 2.14.1 - 3.3.0-rc7 - 9.1.1 - 9.1.1 - 9.0.2 - 9.0.2 - 9.0.2 + 2.15.1 + 3.3.5 + 9.1.3 + 9.1.3 + 9.0.0 + 9.0.0 + 9.0.0 true - + @@ -150,7 +150,7 @@ - + diff --git a/apps/vben5/apps/app-antd/.env b/apps/vben5/apps/app-antd/.env index c14a467fb..7ecd86501 100644 --- a/apps/vben5/apps/app-antd/.env +++ b/apps/vben5/apps/app-antd/.env @@ -3,3 +3,6 @@ VITE_APP_TITLE=Vben Admin Antd # 应用命名空间,用于缓存、store等功能的前缀,确保隔离 VITE_APP_NAMESPACE=vben-web-antd + +# 对应后端UI框架名称 +VITE_GLOB_UI_FRAMEWORK=vben5 diff --git a/apps/vben5/apps/app-antd/package.json b/apps/vben5/apps/app-antd/package.json index 1e1a592ef..392c09fdc 100644 --- a/apps/vben5/apps/app-antd/package.json +++ b/apps/vben5/apps/app-antd/package.json @@ -1,6 +1,6 @@ { "name": "@abp/app-antd", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { @@ -36,12 +36,17 @@ "@abp/localization": "workspace:*", "@abp/notifications": "workspace:*", "@abp/openiddict": "workspace:*", + "@abp/oss": "workspace:*", "@abp/permissions": "workspace:*", "@abp/platform": "workspace:*", "@abp/request": "workspace:*", "@abp/saas": "workspace:*", "@abp/settings": "workspace:*", + "@abp/tasks": "workspace:*", + "@abp/text-templating": "workspace:*", "@abp/ui": "workspace:*", + "@abp/webhooks": "workspace:*", + "@vben-core/shadcn-ui": "workspace:*", "@vben/access": "workspace:*", "@vben/common-ui": "workspace:*", "@vben/constants": "workspace:*", diff --git a/apps/vben5/apps/app-antd/src/adapter/component/index.ts b/apps/vben5/apps/app-antd/src/adapter/component/index.ts index 87cd87bdf..db70ef19d 100644 --- a/apps/vben5/apps/app-antd/src/adapter/component/index.ts +++ b/apps/vben5/apps/app-antd/src/adapter/component/index.ts @@ -38,6 +38,7 @@ import { Switch, Textarea, TimePicker, + Tree, TreeSelect, Upload, } from 'ant-design-vue'; @@ -78,6 +79,7 @@ export type ComponentType = | 'Switch' | 'Textarea' | 'TimePicker' + | 'Tree' | 'TreeSelect' | 'Upload' | BaseFormComponentType; @@ -154,6 +156,7 @@ async function initComponentAdapter() { Switch, Textarea: withDefaultPlaceholder(Textarea, 'input'), TimePicker, + Tree, TreeSelect: withDefaultPlaceholder(TreeSelect, 'select'), Upload, FeatureStateCheck, diff --git a/apps/vben5/apps/app-antd/src/hooks/useSessions.ts b/apps/vben5/apps/app-antd/src/hooks/useSessions.ts index ae8cc1e28..6ef5435a0 100644 --- a/apps/vben5/apps/app-antd/src/hooks/useSessions.ts +++ b/apps/vben5/apps/app-antd/src/hooks/useSessions.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ import type { Notification as NotificationInfo } from '@abp/notifications'; import { onMounted, onUnmounted } from 'vue'; @@ -27,7 +26,10 @@ export function useSessions() { /** 处理会话过期事件 */ function _onSessionExpired(event?: NotificationInfo) { - const { data, title, message } = event!; + if (!event) { + return; + } + const { data, title, message } = event; const sessionId = data.SessionId; if (sessionId === abpStore.application?.currentUser?.sessionId) { _release(); 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 0844acf85..d6145c3b6 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 @@ -22,7 +22,6 @@ "claimTypes": "Claim Types", "securityLogs": "Security Logs", "organizationUnits": "Organization Units", - "auditLogs": "Audit Logs", "sessions": "Sessions" }, "permissions": { @@ -55,7 +54,11 @@ "dataProtection": { "title": "Data Protection", "entityTypeInfos": "Entity Type Infos" - } + }, + "auditLogs": "Audit Logs", + "loggings": "System Logs", + "openApi": "Api Document", + "cache": "Cache Management" }, "openiddict": { "title": "OpenIddict", @@ -96,7 +99,10 @@ "title": "Message Manage", "email": "Email Messages", "sms": "Sms Messages" - } + }, + "dataDictionaries": "Data Dictionaries", + "layouts": "Layouts", + "menus": "Menus" }, "saas": { "title": "Saas", @@ -106,5 +112,27 @@ "demo": { "title": "Demo", "books": "Books" + }, + "tasks": { + "title": "Task Management", + "jobInfo": { + "title": "Job Manage" + } + }, + "webhooks": { + "title": "Webhooks", + "groups": "Groups", + "definitions": "Definitions", + "subscriptions": "Subscriptions", + "sendAttempts": "Send Attempts" + }, + "textTemplating": { + "title": "Text Templating", + "definitions": "Definitions" + }, + "oss": { + "title": "Object storage", + "containers": "Containers", + "objects": "Files" } } 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 d1da0fbd7..8edd4ab47 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 @@ -22,7 +22,6 @@ "claimTypes": "身份标识", "securityLogs": "安全日志", "organizationUnits": "组织机构", - "auditLogs": "审计日志", "sessions": "会话管理" }, "permissions": { @@ -55,7 +54,11 @@ "dataProtection": { "title": "数据权限", "entityTypeInfos": "实体列表" - } + }, + "auditLogs": "审计日志", + "loggings": "系统日志", + "openApi": "接口文档", + "cache": "缓存管理" }, "openiddict": { "title": "OpenIddict", @@ -96,7 +99,10 @@ "title": "消息管理", "email": "邮件消息", "sms": "短信消息" - } + }, + "dataDictionaries": "数据字典", + "layouts": "布局管理", + "menus": "菜单管理" }, "saas": { "title": "Saas", @@ -106,5 +112,27 @@ "demo": { "title": "演示", "books": "书籍列表" + }, + "tasks": { + "title": "后台作业", + "jobInfo": { + "title": "作业管理" + } + }, + "webhooks": { + "title": "Webhook管理", + "groups": "Webhook分组", + "definitions": "Webhook定义", + "subscriptions": "管理订阅", + "sendAttempts": "发送记录" + }, + "textTemplating": { + "title": "文本模板", + "definitions": "模板定义" + }, + "oss": { + "title": "对象存储", + "containers": "容器管理", + "objects": "文件管理" } } diff --git a/apps/vben5/apps/app-antd/src/preferences.ts b/apps/vben5/apps/app-antd/src/preferences.ts index 498967adc..4ee0c5515 100644 --- a/apps/vben5/apps/app-antd/src/preferences.ts +++ b/apps/vben5/apps/app-antd/src/preferences.ts @@ -8,6 +8,7 @@ import { defineOverridesPreferences } from '@vben/preferences'; export const overridesPreferences = defineOverridesPreferences({ // overrides app: { + accessMode: 'backend', enableRefreshToken: true, name: import.meta.env.VITE_APP_TITLE, }, diff --git a/apps/vben5/apps/app-antd/src/router/access.ts b/apps/vben5/apps/app-antd/src/router/access.ts index 3a48be237..7d3f5a138 100644 --- a/apps/vben5/apps/app-antd/src/router/access.ts +++ b/apps/vben5/apps/app-antd/src/router/access.ts @@ -4,18 +4,22 @@ import type { } from '@vben/types'; import { generateAccessible } from '@vben/access'; +import { useAppConfig } from '@vben/hooks'; import { preferences } from '@vben/preferences'; +import { useMenuTransform, useMyMenusApi } from '@abp/platform'; import { message } from 'ant-design-vue'; -import { getAllMenusApi } from '#/api'; import { BasicLayout, IFrameView } from '#/layouts'; import { $t } from '#/locales'; const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue'); async function generateAccess(options: GenerateMenuAndRoutesOptions) { + const { getAllApi } = useMyMenusApi(); + const { transformRoutes } = useMenuTransform(); const pageMap: ComponentRecordType = import.meta.glob('../views/**/*.vue'); + const { uiFramework } = useAppConfig(import.meta.env, import.meta.env.PROD); const layoutMap: ComponentRecordType = { BasicLayout, @@ -29,7 +33,10 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) { content: `${$t('common.loadingMenu')}...`, duration: 1.5, }); - return await getAllMenusApi(); + const { items } = await getAllApi({ + framework: uiFramework, + }); + return transformRoutes(items); }, // 可以指定没有权限跳转403页面 forbiddenComponent, 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 e31424022..258ebaf6a 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 @@ -5,444 +5,543 @@ import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { meta: { - icon: 'https://abp.io/assets/favicon.ico/favicon-16x16.png', - keepAlive: true, - order: 1000, - title: $t('abp.title'), + title: $t('abp.manage.title'), + icon: 'arcticons:activity-manager', }, - name: 'AbpFramework', - path: '/abp', + name: 'Vben5Manage', + path: '/manage', children: [ { meta: { - title: $t('abp.manage.title'), - icon: 'arcticons:activity-manager', + title: $t('abp.manage.identity.title'), + icon: 'teenyicons:id-outline', }, - name: 'Manage', - path: '/manage', + name: 'Vben5Identity', + path: '/manage/identity', children: [ { + component: () => import('#/views/identity/users/index.vue'), + name: 'Vben5IdentityUsers', + path: '/manage/identity/users', meta: { - title: $t('abp.manage.identity.title'), - icon: 'teenyicons:id-outline', + title: $t('abp.manage.identity.user'), + icon: 'mdi:user-outline', }, - name: 'Identity', - path: '/manage/identity', - children: [ - { - component: () => import('#/views/identity/users/index.vue'), - name: 'Users', - path: '/manage/identity/users', - meta: { - title: $t('abp.manage.identity.user'), - icon: 'mdi:user-outline', - }, - }, - { - component: () => import('#/views/identity/roles/index.vue'), - name: 'Roles', - path: '/manage/identity/roles', - meta: { - title: $t('abp.manage.identity.role'), - icon: 'carbon:user-role', - }, - }, - { - component: () => - import('#/views/identity/claim-types/index.vue'), - name: 'ClaimTypes', - path: '/manage/identity/claim-types', - meta: { - title: $t('abp.manage.identity.claimTypes'), - icon: 'la:id-card-solid', - }, - }, - { - component: () => - import('#/views/identity/security-logs/index.vue'), - name: 'SecurityLogs', - path: '/manage/identity/security-logs', - meta: { - title: $t('abp.manage.identity.securityLogs'), - icon: 'carbon:security', - }, - }, - { - component: () => - import('#/views/identity/organization-units/index.vue'), - name: 'OrganizationUnits', - path: '/manage/identity/organization-units', - meta: { - title: $t('abp.manage.identity.organizationUnits'), - icon: 'clarity:organization-line', - }, - }, - { - component: () => import('#/views/identity/sessions/index.vue'), - name: 'IdentitySessions', - path: '/manage/identity/sessions', - meta: { - title: $t('abp.manage.identity.sessions'), - icon: 'carbon:prompt-session', - }, - }, - ], }, { + component: () => import('#/views/identity/roles/index.vue'), + name: 'Vben5IdentityRoles', + path: '/manage/identity/roles', meta: { - title: $t('abp.manage.permissions.title'), - icon: 'arcticons:permissionsmanager', + title: $t('abp.manage.identity.role'), + icon: 'carbon:user-role', }, - name: 'PermissionManagement', - path: '/manage/permissions', - children: [ - { - meta: { - title: $t('abp.manage.permissions.groups'), - icon: 'lucide:group', - }, - name: 'PermissionGroupDefinitions', - path: '/manage/permissions/groups', - component: () => import('#/views/permissions/groups/index.vue'), - }, - { - meta: { - title: $t('abp.manage.permissions.definitions'), - icon: 'icon-park-outline:permissions', - }, - name: 'PermissionDefinitions', - path: '/manage/permissions/definitions', - component: () => - import('#/views/permissions/definitions/index.vue'), - }, - ], }, { + component: () => import('#/views/identity/claim-types/index.vue'), + name: 'Vben5IdentityClaimTypes', + path: '/manage/identity/claim-types', meta: { - title: $t('abp.manage.features.title'), - icon: 'ant-design:gold-outlined', + title: $t('abp.manage.identity.claimTypes'), + icon: 'la:id-card-solid', }, - name: 'FeatureManagement', - path: '/manage/features', - children: [ - { - meta: { - title: $t('abp.manage.features.groups'), - icon: 'lucide:group', - }, - name: 'FeatureGroupDefinitions', - path: '/manage/features/groups', - component: () => import('#/views/features/groups/index.vue'), - }, - { - meta: { - title: $t('abp.manage.features.definitions'), - icon: 'pajamas:feature-flag', - }, - name: 'FeatureDefinitions', - path: '/manage/features/definitions', - component: () => - import('#/views/features/definitions/index.vue'), - }, - ], }, { + component: () => import('#/views/identity/security-logs/index.vue'), + name: 'Vben5IdentitySecurityLogs', + path: '/manage/identity/security-logs', meta: { - title: $t('abp.manage.settings.title'), - icon: 'ic:outline-settings', + title: $t('abp.manage.identity.securityLogs'), + icon: 'carbon:security', }, - name: 'SettingManagement', - path: '/manage/settings', - children: [ - { - meta: { - title: $t('abp.manage.settings.definitions'), - icon: 'codicon:settings', - }, - name: 'SettingDefinitions', - path: '/manage/settings/definitions', - component: () => - import('#/views/settings/definitions/index.vue'), - }, - { - meta: { - title: $t('abp.manage.settings.system'), - icon: 'tabler:settings-cog', - }, - name: 'SystemSettings', - path: '/manage/settings/system', - component: () => import('#/views/settings/system/index.vue'), - }, - ], }, { + component: () => + import('#/views/identity/organization-units/index.vue'), + name: 'Vben5IdentityOrganizationUnits', + path: '/manage/identity/organization-units', meta: { - title: $t('abp.manage.localization.title'), - icon: 'ion:globe-outline', + title: $t('abp.manage.identity.organizationUnits'), + icon: 'clarity:organization-line', }, - name: 'LocalizationManagement', - path: '/manage/localization', - children: [ - { - meta: { - title: $t('abp.manage.localization.resources'), - icon: 'grommet-icons:resources', - }, - name: 'LocalizationResources', - path: '/manage/localization/resources', - component: () => - import('#/views/localization/resources/index.vue'), - }, - { - meta: { - title: $t('abp.manage.localization.languages'), - icon: 'cil:language', - }, - name: 'LocalizationLanguages', - path: '/manage/localization/languages', - component: () => - import('#/views/localization/languages/index.vue'), - }, - { - meta: { - title: $t('abp.manage.localization.texts'), - icon: 'mi:text', - }, - name: 'LocalizationTexts', - path: '/manage/localization/texts', - component: () => import('#/views/localization/texts/index.vue'), - }, - ], }, { + component: () => import('#/views/identity/sessions/index.vue'), + name: 'Vben5IdentitySessions', + path: '/manage/identity/sessions', meta: { - title: $t('abp.manage.dataProtection.title'), - icon: 'icon-park-outline:protect', + title: $t('abp.manage.identity.sessions'), + icon: 'carbon:prompt-session', }, - name: 'DataProtectionManagement', - path: '/manage/data-protection', - children: [ - { - meta: { - title: $t('abp.manage.dataProtection.entityTypeInfos'), - icon: 'iconamoon:type', - keepAlive: true, - }, - name: 'EntityTypeInfos', - path: '/manage/data-protection/entity-type-infos', - component: () => - import('#/views/data-protection/entity-type-infos/index.vue'), - }, - ], }, + ], + }, + { + meta: { + title: $t('abp.manage.permissions.title'), + icon: 'arcticons:permissionsmanager', + }, + name: 'Vben5Permissions', + path: '/manage/permissions', + children: [ { meta: { - title: $t('abp.manage.identity.auditLogs'), - icon: 'fluent-mdl2:compliance-audit', + title: $t('abp.manage.permissions.groups'), + icon: 'lucide:group', }, - name: 'AuditingAuditLogs', - path: '/manage/audit-logs', - component: () => import('#/views/auditing/audit-logs/index.vue'), + name: 'Vben5PermissionsGroupDefinitions', + path: '/manage/permissions/groups', + component: () => import('#/views/permissions/groups/index.vue'), }, { meta: { - title: $t('abp.manage.notifications.title'), - icon: 'tabler:notification', + title: $t('abp.manage.permissions.definitions'), + icon: 'icon-park-outline:permissions', }, - name: 'Notifications', - path: '/manage/notifications', - children: [ - { - meta: { - title: $t('abp.manage.notifications.myNotifilers'), - icon: 'ant-design:notification-outlined', - }, - name: 'MyNotifications', - path: '/manage/notifications/my-notifilers', - 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'), - }, - { - meta: { - title: $t('abp.manage.notifications.definitions'), - icon: 'nimbus:notification', - }, - name: 'NotificationDefinitions', - path: '/manage/notifications/definitions', - component: () => - import('#/views/notifications/definitions/index.vue'), - }, - ], + name: 'Vben5PermissionsDefinitions', + path: '/manage/permissions/definitions', + component: () => + import('#/views/permissions/definitions/index.vue'), }, ], }, { meta: { - title: $t('abp.saas.title'), - icon: 'ant-design:cloud-server-outlined', + title: $t('abp.manage.features.title'), + icon: 'ant-design:gold-outlined', }, - name: 'Saas', - path: '/saas', + name: 'Vben5Features', + path: '/manage/features', children: [ { meta: { - title: $t('abp.saas.editions'), - icon: 'icon-park-outline:multi-rectangle', + title: $t('abp.manage.features.groups'), + icon: 'lucide:group', }, - name: 'SaasEditions', - path: '/saas/editions', - component: () => import('#/views/saas/editions/index.vue'), + name: 'Vben5FeaturesGroupDefinitions', + path: '/manage/features/groups', + component: () => import('#/views/features/groups/index.vue'), }, { meta: { - title: $t('abp.saas.tenants'), - icon: 'arcticons:tenantcloud-pro', + title: $t('abp.manage.features.definitions'), + icon: 'pajamas:feature-flag', }, - name: 'SaasTenants', - path: '/saas/tenants', - component: () => import('#/views/saas/tenants/index.vue'), + name: 'Vben5FeaturesDefinitions', + path: '/manage/features/definitions', + component: () => import('#/views/features/definitions/index.vue'), }, ], }, { meta: { - title: $t('abp.openiddict.title'), - icon: 'mdi:openid', + title: $t('abp.manage.settings.title'), + icon: 'ic:outline-settings', }, - name: 'OpenIddict', - path: '/openiddict', + name: 'Vben5Settings', + path: '/manage/settings', children: [ { meta: { - title: $t('abp.openiddict.applications'), - icon: 'carbon:application', + title: $t('abp.manage.settings.definitions'), + icon: 'codicon:settings', }, - name: 'OpenIddictApplications', - path: '/openiddict/applications', - component: () => - import('#/views/openiddict/applications/index.vue'), + name: 'Vben5SettingsDefinitions', + path: '/manage/settings/definitions', + component: () => import('#/views/settings/definitions/index.vue'), }, { meta: { - title: $t('abp.openiddict.authorizations'), - icon: 'arcticons:ente-authenticator', + title: $t('abp.manage.settings.system'), + icon: 'tabler:settings-cog', }, - name: 'OpenIddictAuthorizations', - path: '/openiddict/authorizations', - component: () => - import('#/views/openiddict/authorizations/index.vue'), + name: 'Vben5SettingsSystem', + path: '/manage/settings/system', + component: () => import('#/views/settings/system/index.vue'), + }, + ], + }, + { + meta: { + title: $t('abp.manage.localization.title'), + icon: 'ion:globe-outline', + }, + name: 'Vben5Localizations', + path: '/manage/localization', + children: [ + { + meta: { + title: $t('abp.manage.localization.resources'), + icon: 'grommet-icons:resources', + }, + name: 'Vben5LocalizationsResources', + path: '/manage/localization/resources', + component: () => import('#/views/localization/resources/index.vue'), }, { meta: { - title: $t('abp.openiddict.scopes'), - icon: 'et:scope', + title: $t('abp.manage.localization.languages'), + icon: 'cil:language', }, - name: 'OpenIddictScopes', - path: '/openiddict/scopes', - component: () => import('#/views/openiddict/scopes/index.vue'), + name: 'Vben5LocalizationsLanguages', + path: '/manage/localization/languages', + component: () => import('#/views/localization/languages/index.vue'), }, { meta: { - title: $t('abp.openiddict.tokens'), - icon: 'oui:token-key', + title: $t('abp.manage.localization.texts'), + icon: 'mi:text', }, - name: 'OpenIddictTokens', - path: '/openiddict/tokens', - component: () => import('#/views/openiddict/tokens/index.vue'), + name: 'Vben5LocalizationsTexts', + path: '/manage/localization/texts', + component: () => import('#/views/localization/texts/index.vue'), }, ], }, { - name: 'Account', - path: '/account', meta: { - title: $t('abp.account.title'), - icon: 'mdi:account-outline', - hideInMenu: true, + title: $t('abp.manage.dataProtection.title'), + icon: 'icon-park-outline:protect', }, + name: 'Vben5DataProtection', + path: '/manage/data-protection', children: [ { meta: { - title: $t('abp.account.settings.title'), - icon: 'tdesign:user-setting', + title: $t('abp.manage.dataProtection.entityTypeInfos'), + icon: 'iconamoon:type', + keepAlive: true, }, - name: 'MySettings', - path: '/account/my-settings', - component: () => import('#/views/account/my-settings/index.vue'), + name: 'Vben5DataProtectionEntityTypeInfos', + path: '/manage/data-protection/entity-type-infos', + component: () => + import('#/views/data-protection/entity-type-infos/index.vue'), }, ], }, { - name: 'Platform', - path: '/platform', meta: { - title: $t('abp.platform.title'), - icon: 'ep:platform', + title: $t('abp.manage.auditLogs'), + icon: 'fluent-mdl2:compliance-audit', + }, + name: 'Vben5AuditingAuditLogs', + path: '/manage/audit-logs', + component: () => import('#/views/auditing/audit-logs/index.vue'), + }, + { + meta: { + title: $t('abp.manage.loggings'), + icon: 'icon-park-outline:log', }, + name: 'Vben5AuditingLoggings', + path: '/manage/sys-logs', + component: () => import('#/views/auditing/loggings/index.vue'), + }, + { + meta: { + title: $t('abp.manage.notifications.title'), + icon: 'tabler:notification', + }, + name: 'Vben5Notifications', + path: '/manage/notifications', children: [ { meta: { - title: $t('abp.platform.messages.title'), - icon: 'tabler:message-cog', + title: $t('abp.manage.notifications.myNotifilers'), + icon: 'ant-design:notification-outlined', + }, + name: 'Vben5NotificationsMyNotifilers', + path: '/manage/notifications/my-notifilers', + component: () => + import('#/views/notifications/my-notifilers/index.vue'), + }, + { + meta: { + title: $t('abp.manage.notifications.groups'), + icon: 'lucide:group', + }, + name: 'Vben5NotificationsGroupDefinitions', + path: '/manage/notifications/groups', + component: () => import('#/views/notifications/groups/index.vue'), + }, + { + meta: { + title: $t('abp.manage.notifications.definitions'), + icon: 'nimbus:notification', }, - name: 'PlatformMessages', - path: '/platform/messages', - children: [ - { - meta: { - title: $t('abp.platform.messages.email'), - icon: 'material-symbols:attach-email-outline', - }, - name: 'PlatformEmailMessages', - path: '/platform/messages/email', - component: () => - import('#/views/platform/messages/email/index.vue'), - }, - { - meta: { - title: $t('abp.platform.messages.sms'), - icon: 'material-symbols:sms-outline', - }, - name: 'PlatformSmsMessages', - path: '/platform/messages/sms', - component: () => - import('#/views/platform/messages/sms/index.vue'), - }, - ], + name: 'Vben5NotificationsDefinitions', + path: '/manage/notifications/definitions', + component: () => + import('#/views/notifications/definitions/index.vue'), }, ], }, + ], + }, + { + meta: { + title: $t('abp.saas.title'), + icon: 'ant-design:cloud-server-outlined', + }, + name: 'Vben5Saas', + path: '/saas', + children: [ + { + meta: { + title: $t('abp.saas.editions'), + icon: 'icon-park-outline:multi-rectangle', + }, + name: 'Vben5SaasEditions', + path: '/saas/editions', + component: () => import('#/views/saas/editions/index.vue'), + }, + { + meta: { + title: $t('abp.saas.tenants'), + icon: 'arcticons:tenantcloud-pro', + }, + name: 'Vben5SaasTenants', + path: '/saas/tenants', + component: () => import('#/views/saas/tenants/index.vue'), + }, + ], + }, + { + meta: { + title: $t('abp.openiddict.title'), + icon: 'mdi:openid', + }, + name: 'Vben5OpenIddict', + path: '/openiddict', + children: [ + { + meta: { + title: $t('abp.openiddict.applications'), + icon: 'carbon:application', + }, + name: 'Vben5OpenIddictApplications', + path: '/openiddict/applications', + component: () => import('#/views/openiddict/applications/index.vue'), + }, + { + meta: { + title: $t('abp.openiddict.authorizations'), + icon: 'arcticons:ente-authenticator', + }, + name: 'Vben5OpenIddictAuthorizations', + path: '/openiddict/authorizations', + component: () => import('#/views/openiddict/authorizations/index.vue'), + }, + { + meta: { + title: $t('abp.openiddict.scopes'), + icon: 'et:scope', + }, + name: 'Vben5OpenIddictScopes', + path: '/openiddict/scopes', + component: () => import('#/views/openiddict/scopes/index.vue'), + }, + { + meta: { + title: $t('abp.openiddict.tokens'), + icon: 'oui:token-key', + }, + name: 'Vben5OpenIddictTokens', + path: '/openiddict/tokens', + component: () => import('#/views/openiddict/tokens/index.vue'), + }, + ], + }, + { + name: 'Vben5Account', + path: '/account', + meta: { + title: $t('abp.account.title'), + icon: 'mdi:account-outline', + hideInMenu: true, + }, + children: [ + { + meta: { + title: $t('abp.account.settings.title'), + icon: 'tdesign:user-setting', + }, + name: 'Vben5AccountMySettings', + path: '/account/my-settings', + component: () => import('#/views/account/my-settings/index.vue'), + }, + ], + }, + { + name: 'Vben5Platform', + path: '/platform', + meta: { + title: $t('abp.platform.title'), + icon: 'ep:platform', + }, + children: [ + { + meta: { + title: $t('abp.platform.dataDictionaries'), + icon: 'material-symbols:dictionary-outline', + }, + name: 'Vben5PlatformDataDictionaries', + path: '/platform/data-dictionaries', + component: () => import('#/views/platform/data-dictionaries/index.vue'), + }, + { + meta: { + title: $t('abp.platform.layouts'), + icon: 'material-symbols-light:responsive-layout', + }, + name: 'Vben5PlatformLayouts', + path: '/platform/layouts', + component: () => import('#/views/platform/layouts/index.vue'), + }, + { + meta: { + title: $t('abp.platform.menus'), + icon: 'material-symbols-light:menu', + }, + name: 'Vben5PlatformMenus', + path: '/platform/menus', + component: () => import('#/views/platform/menus/index.vue'), + }, { - name: 'AbpDemo', - path: '/abp/demos', meta: { - title: $t('abp.demo.title'), - icon: 'carbon:demo', + title: $t('abp.platform.messages.title'), + icon: 'tabler:message-cog', }, + name: 'Vben5PlatformMessages', + path: '/platform/messages', children: [ { meta: { - title: $t('abp.demo.books'), - icon: 'mingcute:book-line', + title: $t('abp.platform.messages.email'), + icon: 'material-symbols:attach-email-outline', + }, + name: 'Vben5PlatformEmailMessages', + path: '/platform/messages/email', + component: () => + import('#/views/platform/messages/email/index.vue'), + }, + { + meta: { + title: $t('abp.platform.messages.sms'), + icon: 'material-symbols:sms-outline', }, - name: 'DemoBooks', - path: '/abp/demos/books', - component: () => import('#/views/demos/books/index.vue'), + name: 'Vben5PlatformSmsMessages', + path: '/platform/messages/sms', + component: () => import('#/views/platform/messages/sms/index.vue'), }, ], }, ], }, + { + name: 'Vben5Tasks', + path: '/task-management', + meta: { + title: $t('abp.tasks.title'), + icon: 'eos-icons:background-tasks', + }, + children: [ + { + meta: { + title: $t('abp.tasks.jobInfo.title'), + icon: 'eos-icons:job', + }, + name: 'Vben5TasksJobInfos', + path: '/task-management/background-jobs', + component: () => import('#/views/tasks/job-infos/index.vue'), + }, + ], + }, + { + meta: { + title: $t('abp.webhooks.title'), + icon: 'material-symbols:webhook', + }, + name: 'Vben5Webhooks', + path: '/webhooks', + children: [ + { + meta: { + title: $t('abp.webhooks.groups'), + icon: 'lucide:group', + }, + name: 'Vben5WebhooksGroupDefinitions', + path: '/webhooks/groups', + component: () => import('#/views/webhooks/groups/index.vue'), + }, + { + meta: { + title: $t('abp.webhooks.definitions'), + icon: 'material-symbols:webhook', + }, + name: 'Vben5WebhooksDefinitions', + path: '/webhooks/definitions', + component: () => import('#/views/webhooks/definitions/index.vue'), + }, + { + meta: { + title: $t('abp.webhooks.subscriptions'), + icon: 'material-symbols:subscriptions', + }, + name: 'Vben5WebhooksSubscriptions', + path: '/webhooks/subscriptions', + component: () => import('#/views/webhooks/subscriptions/index.vue'), + }, + { + meta: { + title: $t('abp.webhooks.sendAttempts'), + icon: 'material-symbols:history', + }, + name: 'Vben5WebhooksSendAttempts', + path: '/webhooks/send-attempts', + component: () => import('#/views/webhooks/send-attempts/index.vue'), + }, + ], + }, + { + meta: { + title: $t('abp.textTemplating.title'), + icon: 'tdesign:template', + }, + name: 'Vben5TextTemplating', + path: '/text-templating', + children: [ + { + meta: { + title: $t('abp.textTemplating.definitions'), + icon: 'qlementine-icons:template-16', + }, + name: 'Vben5TextTemplatingDefinitions', + path: '/text-templating/definitions', + component: () => + import('#/views/text-templating/definitions/index.vue'), + }, + ], + }, + { + name: 'Vben5AbpDemo', + path: '/abp/demos', + meta: { + title: $t('abp.demo.title'), + icon: 'carbon:demo', + }, + children: [ + { + meta: { + title: $t('abp.demo.books'), + icon: 'mingcute:book-line', + }, + name: 'Vben5AbpDemoBooks', + path: '/abp/demos/books', + component: () => import('#/views/demos/books/index.vue'), + }, + ], + }, ]; export default routes; diff --git a/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue b/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue index 7af4fc667..d85f849bd 100644 --- a/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue +++ b/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue @@ -14,6 +14,7 @@ import { useAbpStore } from '@abp/core'; import { useAbpConfigApi } from '#/api/core/useAbpConfigApi'; import { useAuthStore } from '#/store'; +import ThirdPartyLogin from './third-party-login.vue'; import TwoFactorLogin from './two-factor-login.vue'; interface LoginInstance { @@ -103,7 +104,12 @@ onMounted(onInit); :form-schema="formSchema" :loading="authStore.loginLoading" @submit="onLogin" - /> + > + + + diff --git a/apps/vben5/apps/app-antd/src/views/_core/authentication/third-party-login.vue b/apps/vben5/apps/app-antd/src/views/_core/authentication/third-party-login.vue new file mode 100644 index 000000000..16533f490 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/_core/authentication/third-party-login.vue @@ -0,0 +1,37 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/account/my-profile/index.vue b/apps/vben5/apps/app-antd/src/views/account/my-profile/index.vue index bb567c555..3a1ca6a97 100644 --- a/apps/vben5/apps/app-antd/src/views/account/my-profile/index.vue +++ b/apps/vben5/apps/app-antd/src/views/account/my-profile/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { MyProfile } from '@abp/account'; defineOptions({ - name: 'MyProfiles', + name: 'Vben5AccountMyProfiles', }); diff --git a/apps/vben5/apps/app-antd/src/views/account/my-settings/index.vue b/apps/vben5/apps/app-antd/src/views/account/my-settings/index.vue index 0ce7db2d0..29ccab460 100644 --- a/apps/vben5/apps/app-antd/src/views/account/my-settings/index.vue +++ b/apps/vben5/apps/app-antd/src/views/account/my-settings/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { MySetting } from '@abp/account'; defineOptions({ - name: 'MySettings', + name: 'Vben5AccountMySettings', }); diff --git a/apps/vben5/apps/app-antd/src/views/auditing/audit-logs/index.vue b/apps/vben5/apps/app-antd/src/views/auditing/audit-logs/index.vue index 2ee3b0880..8475a5f39 100644 --- a/apps/vben5/apps/app-antd/src/views/auditing/audit-logs/index.vue +++ b/apps/vben5/apps/app-antd/src/views/auditing/audit-logs/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { AuditLogTable } from '@abp/auditing'; defineOptions({ - name: 'AuditingAuditLogs', + name: 'Vben5AuditingAuditLogs', }); diff --git a/apps/vben5/apps/app-antd/src/views/auditing/loggings/index.vue b/apps/vben5/apps/app-antd/src/views/auditing/loggings/index.vue new file mode 100644 index 000000000..8a32cff23 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/auditing/loggings/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/data-protection/entity-type-infos/index.vue b/apps/vben5/apps/app-antd/src/views/data-protection/entity-type-infos/index.vue index e62aa8ce9..4b9a7f22b 100644 --- a/apps/vben5/apps/app-antd/src/views/data-protection/entity-type-infos/index.vue +++ b/apps/vben5/apps/app-antd/src/views/data-protection/entity-type-infos/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { EntityTypeInfoTable } from '@abp/data-protection'; defineOptions({ - name: 'EntityTypeInfos', + name: 'Vben5DataProtectionEntityTypeInfos', }); diff --git a/apps/vben5/apps/app-antd/src/views/demos/books/index.vue b/apps/vben5/apps/app-antd/src/views/demos/books/index.vue index 9cce8d620..891df7c15 100644 --- a/apps/vben5/apps/app-antd/src/views/demos/books/index.vue +++ b/apps/vben5/apps/app-antd/src/views/demos/books/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { BookTable } from '@abp/demo'; defineOptions({ - name: 'DemoBooks', + name: 'Vben5AbpDemoBooks', }); diff --git a/apps/vben5/apps/app-antd/src/views/features/definitions/index.vue b/apps/vben5/apps/app-antd/src/views/features/definitions/index.vue index 637b08c87..c6548582b 100644 --- a/apps/vben5/apps/app-antd/src/views/features/definitions/index.vue +++ b/apps/vben5/apps/app-antd/src/views/features/definitions/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { FeatureDefinitionTable } from '@abp/features'; defineOptions({ - name: 'FeatureDefinitions', + name: 'Vben5FeaturesDefinitions', }); diff --git a/apps/vben5/apps/app-antd/src/views/features/groups/index.vue b/apps/vben5/apps/app-antd/src/views/features/groups/index.vue index caa12d1e8..b11cf4b65 100644 --- a/apps/vben5/apps/app-antd/src/views/features/groups/index.vue +++ b/apps/vben5/apps/app-antd/src/views/features/groups/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { FeatureGroupDefinitionTable } from '@abp/features'; defineOptions({ - name: 'FeatureGroupDefinitions', + name: 'Vben5FeaturesGroupDefinitions', }); diff --git a/apps/vben5/apps/app-antd/src/views/identity/claim-types/index.vue b/apps/vben5/apps/app-antd/src/views/identity/claim-types/index.vue index 4dfebe2c3..4482d2c03 100644 --- a/apps/vben5/apps/app-antd/src/views/identity/claim-types/index.vue +++ b/apps/vben5/apps/app-antd/src/views/identity/claim-types/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { ClaimTypeTable } from '@abp/identity'; defineOptions({ - name: 'IdentityClaimTypes', + name: 'Vben5IdentityClaimTypes', }); diff --git a/apps/vben5/apps/app-antd/src/views/identity/organization-units/index.vue b/apps/vben5/apps/app-antd/src/views/identity/organization-units/index.vue index 8b30e6229..ed63d0288 100644 --- a/apps/vben5/apps/app-antd/src/views/identity/organization-units/index.vue +++ b/apps/vben5/apps/app-antd/src/views/identity/organization-units/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { OrganizationUnitPage } from '@abp/identity'; defineOptions({ - name: 'IdentityOrganizationUnits', + name: 'Vben5IdentityOrganizationUnits', }); diff --git a/apps/vben5/apps/app-antd/src/views/identity/roles/index.vue b/apps/vben5/apps/app-antd/src/views/identity/roles/index.vue index 7ecfa0af5..d8f523627 100644 --- a/apps/vben5/apps/app-antd/src/views/identity/roles/index.vue +++ b/apps/vben5/apps/app-antd/src/views/identity/roles/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { RoleTable } from '@abp/identity'; defineOptions({ - name: 'IdentityRoles', + name: 'Vben5IdentityRoles', }); diff --git a/apps/vben5/apps/app-antd/src/views/identity/security-logs/index.vue b/apps/vben5/apps/app-antd/src/views/identity/security-logs/index.vue index ee6296f2d..2c3e1dbf1 100644 --- a/apps/vben5/apps/app-antd/src/views/identity/security-logs/index.vue +++ b/apps/vben5/apps/app-antd/src/views/identity/security-logs/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { SecurityLogTable } from '@abp/identity'; defineOptions({ - name: 'IdentitySecurityLogs', + name: 'Vben5IdentitySecurityLogs', }); diff --git a/apps/vben5/apps/app-antd/src/views/identity/sessions/index.vue b/apps/vben5/apps/app-antd/src/views/identity/sessions/index.vue index ba2913376..8ad6f28f9 100644 --- a/apps/vben5/apps/app-antd/src/views/identity/sessions/index.vue +++ b/apps/vben5/apps/app-antd/src/views/identity/sessions/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { SessionTable } from '@abp/identity'; defineOptions({ - name: 'IdentitySessions', + name: 'Vben5IdentitySessions', }); diff --git a/apps/vben5/apps/app-antd/src/views/identity/users/index.vue b/apps/vben5/apps/app-antd/src/views/identity/users/index.vue index 31968eb1c..43c682edf 100644 --- a/apps/vben5/apps/app-antd/src/views/identity/users/index.vue +++ b/apps/vben5/apps/app-antd/src/views/identity/users/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { UserTable } from '@abp/identity'; defineOptions({ - name: 'IdentityUsers', + name: 'Vben5IdentityUsers', }); diff --git a/apps/vben5/apps/app-antd/src/views/localization/languages/index.vue b/apps/vben5/apps/app-antd/src/views/localization/languages/index.vue index b2c23dd24..2d2dfa6a5 100644 --- a/apps/vben5/apps/app-antd/src/views/localization/languages/index.vue +++ b/apps/vben5/apps/app-antd/src/views/localization/languages/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { LocalizationLanguageTable } from '@abp/localization'; defineOptions({ - name: 'LocalizationLanguages', + name: 'Vben5LocalizationsLanguages', }); diff --git a/apps/vben5/apps/app-antd/src/views/localization/resources/index.vue b/apps/vben5/apps/app-antd/src/views/localization/resources/index.vue index 114495512..f00e4a54d 100644 --- a/apps/vben5/apps/app-antd/src/views/localization/resources/index.vue +++ b/apps/vben5/apps/app-antd/src/views/localization/resources/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { LocalizationResourceTable } from '@abp/localization'; defineOptions({ - name: 'LocalizationResources', + name: 'Vben5LocalizationsResources', }); diff --git a/apps/vben5/apps/app-antd/src/views/localization/texts/index.vue b/apps/vben5/apps/app-antd/src/views/localization/texts/index.vue index ac0169dc2..36df9d326 100644 --- a/apps/vben5/apps/app-antd/src/views/localization/texts/index.vue +++ b/apps/vben5/apps/app-antd/src/views/localization/texts/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { LocalizationTextTable } from '@abp/localization'; defineOptions({ - name: 'LocalizationTexts', + name: 'Vben5LocalizationsTexts', }); 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 index a42bc0e17..0c43cf372 100644 --- a/apps/vben5/apps/app-antd/src/views/notifications/definitions/index.vue +++ b/apps/vben5/apps/app-antd/src/views/notifications/definitions/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { NotificationDefinitionTable } from '@abp/notifications'; defineOptions({ - name: 'NotificationDefinitions', + name: 'Vben5NotificationsDefinitions', }); 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 index bf2763d47..12c4dd43e 100644 --- a/apps/vben5/apps/app-antd/src/views/notifications/groups/index.vue +++ b/apps/vben5/apps/app-antd/src/views/notifications/groups/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { NotificationGroupDefinitionTable } from '@abp/notifications'; defineOptions({ - name: 'NotificationGroupDefinitions', + name: 'Vben5NotificationsGroupDefinitions', }); diff --git a/apps/vben5/apps/app-antd/src/views/notifications/my-notifilers/index.vue b/apps/vben5/apps/app-antd/src/views/notifications/my-notifilers/index.vue index ed3d7e67b..4744ef1e0 100644 --- a/apps/vben5/apps/app-antd/src/views/notifications/my-notifilers/index.vue +++ b/apps/vben5/apps/app-antd/src/views/notifications/my-notifilers/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { MyNotificationTable } from '@abp/notifications'; defineOptions({ - name: 'MyNotifications', + name: 'Vben5NotificationsMyNotifilers', }); diff --git a/apps/vben5/apps/app-antd/src/views/openiddict/applications/index.vue b/apps/vben5/apps/app-antd/src/views/openiddict/applications/index.vue index 1e347ea86..c3b6f09f6 100644 --- a/apps/vben5/apps/app-antd/src/views/openiddict/applications/index.vue +++ b/apps/vben5/apps/app-antd/src/views/openiddict/applications/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { ApplicationTable } from '@abp/openiddict'; defineOptions({ - name: 'OpenIddictApplications', + name: 'Vben5OpenIddictApplications', }); diff --git a/apps/vben5/apps/app-antd/src/views/openiddict/authorizations/index.vue b/apps/vben5/apps/app-antd/src/views/openiddict/authorizations/index.vue index cb96f15fd..8311e2a36 100644 --- a/apps/vben5/apps/app-antd/src/views/openiddict/authorizations/index.vue +++ b/apps/vben5/apps/app-antd/src/views/openiddict/authorizations/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { AuthorizationTable } from '@abp/openiddict'; defineOptions({ - name: 'OpenIddictAuthorizations', + name: 'Vben5OpenIddictAuthorizations', }); diff --git a/apps/vben5/apps/app-antd/src/views/openiddict/scopes/index.vue b/apps/vben5/apps/app-antd/src/views/openiddict/scopes/index.vue index 6b73e3266..914de412d 100644 --- a/apps/vben5/apps/app-antd/src/views/openiddict/scopes/index.vue +++ b/apps/vben5/apps/app-antd/src/views/openiddict/scopes/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { ScopeTable } from '@abp/openiddict'; defineOptions({ - name: 'OpenIddictScopes', + name: 'Vben5OpenIddictScopes', }); diff --git a/apps/vben5/apps/app-antd/src/views/openiddict/tokens/index.vue b/apps/vben5/apps/app-antd/src/views/openiddict/tokens/index.vue index c575482e4..a29711d30 100644 --- a/apps/vben5/apps/app-antd/src/views/openiddict/tokens/index.vue +++ b/apps/vben5/apps/app-antd/src/views/openiddict/tokens/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { TokenTable } from '@abp/openiddict'; defineOptions({ - name: 'OpenIddictTokens', + name: 'Vben5OpenIddictTokens', }); diff --git a/apps/vben5/apps/app-antd/src/views/oss/containers/index.vue b/apps/vben5/apps/app-antd/src/views/oss/containers/index.vue new file mode 100644 index 000000000..f9dbfea0d --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/oss/containers/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/oss/objects/index.vue b/apps/vben5/apps/app-antd/src/views/oss/objects/index.vue new file mode 100644 index 000000000..7cbd43a2f --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/oss/objects/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/permissions/definitions/index.vue b/apps/vben5/apps/app-antd/src/views/permissions/definitions/index.vue index a72624d3c..cbdc8c95f 100644 --- a/apps/vben5/apps/app-antd/src/views/permissions/definitions/index.vue +++ b/apps/vben5/apps/app-antd/src/views/permissions/definitions/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { PermissionDefinitionTable } from '@abp/permissions'; defineOptions({ - name: 'PermissionDefinitions', + name: 'Vben5PermissionsDefinitions', }); diff --git a/apps/vben5/apps/app-antd/src/views/permissions/groups/index.vue b/apps/vben5/apps/app-antd/src/views/permissions/groups/index.vue index f651c1d2d..f108a1481 100644 --- a/apps/vben5/apps/app-antd/src/views/permissions/groups/index.vue +++ b/apps/vben5/apps/app-antd/src/views/permissions/groups/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { PermissionGroupDefinitionTable } from '@abp/permissions'; defineOptions({ - name: 'PermissionGroupDefinitions', + name: 'Vben5PermissionsGroupDefinitions', }); diff --git a/apps/vben5/apps/app-antd/src/views/platform/data-dictionaries/index.vue b/apps/vben5/apps/app-antd/src/views/platform/data-dictionaries/index.vue new file mode 100644 index 000000000..3cff12d0f --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/platform/data-dictionaries/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/platform/layouts/index.vue b/apps/vben5/apps/app-antd/src/views/platform/layouts/index.vue new file mode 100644 index 000000000..4ba940aa6 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/platform/layouts/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/platform/menus/index.vue b/apps/vben5/apps/app-antd/src/views/platform/menus/index.vue new file mode 100644 index 000000000..b8c7cf8a0 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/platform/menus/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/platform/messages/email/index.vue b/apps/vben5/apps/app-antd/src/views/platform/messages/email/index.vue index d61fd6f64..8551d8151 100644 --- a/apps/vben5/apps/app-antd/src/views/platform/messages/email/index.vue +++ b/apps/vben5/apps/app-antd/src/views/platform/messages/email/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { EmailMessageTable } from '@abp/platform'; defineOptions({ - name: 'PlatformEmailMessages', + name: 'Vben5PlatformEmailMessages', }); diff --git a/apps/vben5/apps/app-antd/src/views/platform/messages/sms/index.vue b/apps/vben5/apps/app-antd/src/views/platform/messages/sms/index.vue index ed5c319b5..38da72f77 100644 --- a/apps/vben5/apps/app-antd/src/views/platform/messages/sms/index.vue +++ b/apps/vben5/apps/app-antd/src/views/platform/messages/sms/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { SmsMessageTable } from '@abp/platform'; defineOptions({ - name: 'PlatformSmsMessages', + name: 'Vben5PlatformSmsMessages', }); diff --git a/apps/vben5/apps/app-antd/src/views/saas/editions/index.vue b/apps/vben5/apps/app-antd/src/views/saas/editions/index.vue index 2e186f892..7d3aa1a28 100644 --- a/apps/vben5/apps/app-antd/src/views/saas/editions/index.vue +++ b/apps/vben5/apps/app-antd/src/views/saas/editions/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { EditionTable } from '@abp/saas'; defineOptions({ - name: 'SaasEditions', + name: 'Vben5SaasEditions', }); diff --git a/apps/vben5/apps/app-antd/src/views/saas/tenants/index.vue b/apps/vben5/apps/app-antd/src/views/saas/tenants/index.vue index 0b1ed7445..a66eccb0b 100644 --- a/apps/vben5/apps/app-antd/src/views/saas/tenants/index.vue +++ b/apps/vben5/apps/app-antd/src/views/saas/tenants/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { TenantTable } from '@abp/saas'; defineOptions({ - name: 'SaasTenants', + name: 'Vben5SaasTenants', }); diff --git a/apps/vben5/apps/app-antd/src/views/settings/definitions/index.vue b/apps/vben5/apps/app-antd/src/views/settings/definitions/index.vue index 545f397d3..c99a4c754 100644 --- a/apps/vben5/apps/app-antd/src/views/settings/definitions/index.vue +++ b/apps/vben5/apps/app-antd/src/views/settings/definitions/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { SettingDefinitionTable } from '@abp/settings'; defineOptions({ - name: 'SettingDefinitions', + name: 'Vben5SettingsDefinitions', }); diff --git a/apps/vben5/apps/app-antd/src/views/settings/system/index.vue b/apps/vben5/apps/app-antd/src/views/settings/system/index.vue index f602c52ef..fecc6fe28 100644 --- a/apps/vben5/apps/app-antd/src/views/settings/system/index.vue +++ b/apps/vben5/apps/app-antd/src/views/settings/system/index.vue @@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui'; import { SystemSetting } from '@abp/settings'; defineOptions({ - name: 'SystemSettings', + name: 'Vben5SettingsSystem', }); diff --git a/apps/vben5/apps/app-antd/src/views/tasks/job-infos/index.vue b/apps/vben5/apps/app-antd/src/views/tasks/job-infos/index.vue new file mode 100644 index 000000000..0bae42e41 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/tasks/job-infos/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/text-templating/definitions/index.vue b/apps/vben5/apps/app-antd/src/views/text-templating/definitions/index.vue new file mode 100644 index 000000000..b7f23c525 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/text-templating/definitions/index.vue @@ -0,0 +1,15 @@ + + + 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..a33cf6636 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/webhooks/definitions/index.vue @@ -0,0 +1,15 @@ + + + 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..93853452f --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/webhooks/groups/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/apps/app-antd/src/views/webhooks/send-attempts/index.vue b/apps/vben5/apps/app-antd/src/views/webhooks/send-attempts/index.vue new file mode 100644 index 000000000..3f925b78e --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/webhooks/send-attempts/index.vue @@ -0,0 +1,15 @@ + + + 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..73895702d --- /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/account/package.json b/apps/vben5/packages/@abp/account/package.json index 16ac1feba..570d446a3 100644 --- a/apps/vben5/packages/@abp/account/package.json +++ b/apps/vben5/packages/@abp/account/package.json @@ -1,6 +1,6 @@ { "name": "@abp/account", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/account/src/components/MySetting.vue b/apps/vben5/packages/@abp/account/src/components/MySetting.vue index 20c07367f..a237fd344 100644 --- a/apps/vben5/packages/@abp/account/src/components/MySetting.vue +++ b/apps/vben5/packages/@abp/account/src/components/MySetting.vue @@ -103,11 +103,13 @@ const [ChangePhoneNumberModal, changePhoneNumberModalApi] = useVbenModal({ }); function onEmailConfirm() { if (query?.confirmToken) { - emailConfirmModalApi.setData({ - email: myProfile.value.email, - ...query, - }); - emailConfirmModalApi.open(); + setTimeout(() => { + emailConfirmModalApi.setData({ + email: myProfile.value.email, + ...query, + }); + emailConfirmModalApi.open(); + }, 300); } } async function onGetProfile() { diff --git a/apps/vben5/packages/@abp/auditing/package.json b/apps/vben5/packages/@abp/auditing/package.json index 857f4ed39..b47a841d8 100644 --- a/apps/vben5/packages/@abp/auditing/package.json +++ b/apps/vben5/packages/@abp/auditing/package.json @@ -1,6 +1,6 @@ { "name": "@abp/auditing", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/auditing/src/api/index.ts b/apps/vben5/packages/@abp/auditing/src/api/index.ts index 8613244d7..71fdf044a 100644 --- a/apps/vben5/packages/@abp/auditing/src/api/index.ts +++ b/apps/vben5/packages/@abp/auditing/src/api/index.ts @@ -1,2 +1,3 @@ export { useAuditLogsApi } from './useAuditLogsApi'; export { useEntityChangesApi } from './useEntityChangesApi'; +export { useLoggingsApi } from './useLoggingsApi'; diff --git a/apps/vben5/packages/@abp/auditing/src/api/useLoggingsApi.ts b/apps/vben5/packages/@abp/auditing/src/api/useLoggingsApi.ts new file mode 100644 index 000000000..77e65c6b9 --- /dev/null +++ b/apps/vben5/packages/@abp/auditing/src/api/useLoggingsApi.ts @@ -0,0 +1,38 @@ +import type { PagedResultDto } from '@abp/core'; + +import type { LogDto, LogGetListInput } from '../types/loggings'; + +import { useRequest } from '@abp/request'; + +export function useLoggingsApi() { + const { cancel, request } = useRequest(); + + /** + * 获取系统日志 + * @param id 日志id + */ + function getApi(id: string): Promise { + return request(`/api/auditing/logging/${id}`, { + method: 'GET', + }); + } + + /** + * 获取系统日志分页列表 + * @param input 参数 + */ + function getPagedListApi( + input: LogGetListInput, + ): Promise> { + return request>('/api/auditing/logging', { + method: 'GET', + params: input, + }); + } + + return { + cancel, + getApi, + getPagedListApi, + }; +} diff --git a/apps/vben5/packages/@abp/auditing/src/components/audit-logs/AuditLogTable.vue b/apps/vben5/packages/@abp/auditing/src/components/audit-logs/AuditLogTable.vue index 0b4b4a27e..cc97d7b5b 100644 --- a/apps/vben5/packages/@abp/auditing/src/components/audit-logs/AuditLogTable.vue +++ b/apps/vben5/packages/@abp/auditing/src/components/audit-logs/AuditLogTable.vue @@ -41,6 +41,9 @@ const formOptions: VbenFormProps = { schema: [ { component: 'RangePicker', + componentProps: { + showTime: true, + }, fieldName: 'executionTime', formItemClass: 'col-span-2 items-baseline', label: $t('AbpAuditLogging.ExecutionTime'), diff --git a/apps/vben5/packages/@abp/auditing/src/components/index.ts b/apps/vben5/packages/@abp/auditing/src/components/index.ts index 1d99b4a46..68e953a86 100644 --- a/apps/vben5/packages/@abp/auditing/src/components/index.ts +++ b/apps/vben5/packages/@abp/auditing/src/components/index.ts @@ -1,2 +1,3 @@ export { default as AuditLogTable } from './audit-logs/AuditLogTable.vue'; export { default as EntityChangeDrawer } from './entity-changes/EntityChangeDrawer.vue'; +export { default as LoggingTable } from './loggings/LoggingTable.vue'; diff --git a/apps/vben5/packages/@abp/auditing/src/components/loggings/LoggingDrawer.vue b/apps/vben5/packages/@abp/auditing/src/components/loggings/LoggingDrawer.vue new file mode 100644 index 000000000..616b5568d --- /dev/null +++ b/apps/vben5/packages/@abp/auditing/src/components/loggings/LoggingDrawer.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/apps/vben5/packages/@abp/auditing/src/components/loggings/LoggingTable.vue b/apps/vben5/packages/@abp/auditing/src/components/loggings/LoggingTable.vue new file mode 100644 index 000000000..7ac48088d --- /dev/null +++ b/apps/vben5/packages/@abp/auditing/src/components/loggings/LoggingTable.vue @@ -0,0 +1,345 @@ + + + + + diff --git a/apps/vben5/packages/@abp/auditing/src/constants/permissions.ts b/apps/vben5/packages/@abp/auditing/src/constants/permissions.ts index 00e8dc003..759747745 100644 --- a/apps/vben5/packages/@abp/auditing/src/constants/permissions.ts +++ b/apps/vben5/packages/@abp/auditing/src/constants/permissions.ts @@ -4,3 +4,7 @@ export const AuditLogPermissions = { /** 删除 */ Delete: 'AbpAuditing.AuditLog.Delete', }; +/** 系统日志权限 */ +export const SystemLogPermissions = { + Default: 'AbpAuditing.SystemLog', +}; diff --git a/apps/vben5/packages/@abp/auditing/src/types/index.ts b/apps/vben5/packages/@abp/auditing/src/types/index.ts index 900570716..125df9c4a 100644 --- a/apps/vben5/packages/@abp/auditing/src/types/index.ts +++ b/apps/vben5/packages/@abp/auditing/src/types/index.ts @@ -1,2 +1,3 @@ export * from './audit-logs'; export * from './entity-changes'; +export * from './loggings'; diff --git a/apps/vben5/packages/@abp/auditing/src/types/loggings.ts b/apps/vben5/packages/@abp/auditing/src/types/loggings.ts new file mode 100644 index 000000000..e5ce7e797 --- /dev/null +++ b/apps/vben5/packages/@abp/auditing/src/types/loggings.ts @@ -0,0 +1,65 @@ +interface LogExceptionDto { + class?: string; + depth?: number; + helpUrl?: string; + hResult?: number; + message?: string; + source?: string; + stackTrace?: string; +} + +interface LogFieldDto { + actionId?: string; + actionName?: string; + application?: string; + clientId?: string; + connectionId?: string; + context?: string; + correlationId?: string; + environment?: string; + id: string; + machineName?: string; + processId?: number; + requestId?: string; + requestPath?: string; + threadId?: number; + userId?: string; +} + +enum LogLevel { + Critical = 5, + Debug = 1, + Error = 4, + Information = 2, + None = 6, + Trace = 0, + Warning = 3, +} + +interface LogDto { + exceptions: LogExceptionDto[]; + fields: LogFieldDto; + level: LogLevel; + message: string; + timeStamp: Date; +} + +interface LogGetListInput { + application?: string; + context?: string; + correlationId?: string; + endTime?: Date; + environment?: string; + hasException?: boolean; + level?: LogLevel; + machineName?: string; + processId?: number; + requestId?: string; + requestPath?: string; + startTime?: Date; + threadId?: number; +} + +export type { LogDto, LogExceptionDto, LogFieldDto, LogGetListInput }; + +export { LogLevel }; diff --git a/apps/vben5/packages/@abp/components/package.json b/apps/vben5/packages/@abp/components/package.json index 24fb73276..561001022 100644 --- a/apps/vben5/packages/@abp/components/package.json +++ b/apps/vben5/packages/@abp/components/package.json @@ -1,6 +1,6 @@ { "name": "@abp/components", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/components/src/vditor/Viewer.vue b/apps/vben5/packages/@abp/components/src/vditor/Viewer.vue new file mode 100644 index 000000000..de960fbda --- /dev/null +++ b/apps/vben5/packages/@abp/components/src/vditor/Viewer.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/apps/vben5/packages/@abp/components/src/vditor/index.ts b/apps/vben5/packages/@abp/components/src/vditor/index.ts index 7ceb1995b..437fcb85c 100644 --- a/apps/vben5/packages/@abp/components/src/vditor/index.ts +++ b/apps/vben5/packages/@abp/components/src/vditor/index.ts @@ -1 +1,2 @@ export { default as MarkdownEditor } from './Editor.vue'; +export { default as MarkdownViewer } from './Viewer.vue'; diff --git a/apps/vben5/packages/@abp/core/package.json b/apps/vben5/packages/@abp/core/package.json index 2374f1ebc..1fcd221b1 100644 --- a/apps/vben5/packages/@abp/core/package.json +++ b/apps/vben5/packages/@abp/core/package.json @@ -1,6 +1,6 @@ { "name": "@abp/core", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/data-protection/package.json b/apps/vben5/packages/@abp/data-protection/package.json index 4c4c957e9..071a351f6 100644 --- a/apps/vben5/packages/@abp/data-protection/package.json +++ b/apps/vben5/packages/@abp/data-protection/package.json @@ -1,6 +1,6 @@ { "name": "@abp/data-protection", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/demo/package.json b/apps/vben5/packages/@abp/demo/package.json index a87ba8513..3f6cd37f5 100644 --- a/apps/vben5/packages/@abp/demo/package.json +++ b/apps/vben5/packages/@abp/demo/package.json @@ -1,6 +1,6 @@ { "name": "@abp/demo", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/features/package.json b/apps/vben5/packages/@abp/features/package.json index c44657431..7477b36c1 100644 --- a/apps/vben5/packages/@abp/features/package.json +++ b/apps/vben5/packages/@abp/features/package.json @@ -1,6 +1,6 @@ { "name": "@abp/features", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/gdpr/package.json b/apps/vben5/packages/@abp/gdpr/package.json index 89d869902..e04deaafd 100644 --- a/apps/vben5/packages/@abp/gdpr/package.json +++ b/apps/vben5/packages/@abp/gdpr/package.json @@ -1,6 +1,6 @@ { "name": "@abp/gdpr", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/identity/package.json b/apps/vben5/packages/@abp/identity/package.json index c047d3c47..ee6141372 100644 --- a/apps/vben5/packages/@abp/identity/package.json +++ b/apps/vben5/packages/@abp/identity/package.json @@ -1,6 +1,6 @@ { "name": "@abp/identity", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { @@ -24,6 +24,7 @@ "@abp/core": "workspace:*", "@abp/data-protection": "workspace:*", "@abp/permissions": "workspace:*", + "@abp/platform": "workspace:*", "@abp/request": "workspace:*", "@abp/ui": "workspace:*", "@ant-design/icons-vue": "catalog:", diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue index dca4c445d..1bc0d6eaf 100644 --- a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue @@ -16,6 +16,7 @@ import { $t } from '@vben/locales'; import { AuditLogPermissions, EntityChangeDrawer } from '@abp/auditing'; import { Events, useAbpStore, useEventBus, useFeatures } from '@abp/core'; import { PermissionModal } from '@abp/permissions'; +import { MenuAllotModal } from '@abp/platform'; import { useVbenVxeGrid } from '@abp/ui'; import { DeleteOutlined, @@ -53,6 +54,9 @@ const [RolePermissionModal, permissionModalApi] = useVbenModal({ const [RoleClaimModal, claimModalApi] = useVbenModal({ connectedComponent: ClaimModal, }); +const [RoleMenuModal, menuModalApi] = useVbenModal({ + connectedComponent: MenuAllotModal, +}); const [RoleRuleDrawer, roleRuleDrawerApi] = useVbenDrawer({ connectedComponent: RuleModal, }); @@ -178,13 +182,18 @@ const handleMenuClick = async (row: IdentityRoleDto, info: MenuInfo) => { roleRuleDrawerApi.open(); break; } + case 'menus': { + menuModalApi.setData({ + identity: row.name, + }); + menuModalApi.open(); + break; + } case 'permissions': { - const roles = abpStore.application?.currentUser.roles ?? []; permissionModalApi.setData({ displayName: row.name, providerKey: row.name, providerName: 'R', - readonly: roles.includes(row.name), }); permissionModalApi.open(); break; @@ -296,6 +305,7 @@ function onPermissionChange(_name: string, key: string) { + diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue index 232b8188d..caa56dcb2 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue @@ -16,6 +16,7 @@ import { $t } from '@vben/locales'; import { AuditLogPermissions, EntityChangeDrawer } from '@abp/auditing'; import { formatToDateTime, useAbpStore, useFeatures } from '@abp/core'; import { PermissionModal } from '@abp/permissions'; +import { MenuAllotModal } from '@abp/platform'; import { useVbenVxeGrid } from '@abp/ui'; import { DeleteOutlined, @@ -169,6 +170,9 @@ const [UserClaimModal, claimModalApi] = useVbenModal({ const [UserPermissionModal, permissionModalApi] = useVbenModal({ connectedComponent: PermissionModal, }); +const [UserMenuModal, menuModalApi] = useVbenModal({ + connectedComponent: MenuAllotModal, +}); const [UserChangeDrawer, userChangeDrawerApi] = useVbenDrawer({ connectedComponent: EntityChangeDrawer, }); @@ -235,6 +239,13 @@ const handleMenuClick = async (row: IdentityUserDto, info: MenuInfo) => { lockModalApi.open(); break; } + case 'menus': { + menuModalApi.setData({ + identity: row.id, + }); + menuModalApi.open(); + break; + } case 'password': { pwdModalApi.setData(row); pwdModalApi.open(); @@ -401,6 +412,7 @@ const handleMenuClick = async (row: IdentityUserDto, info: MenuInfo) => { + diff --git a/apps/vben5/packages/@abp/localization/package.json b/apps/vben5/packages/@abp/localization/package.json index 121edef76..8aa4939d8 100644 --- a/apps/vben5/packages/@abp/localization/package.json +++ b/apps/vben5/packages/@abp/localization/package.json @@ -1,6 +1,6 @@ { "name": "@abp/localization", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/notifications/package.json b/apps/vben5/packages/@abp/notifications/package.json index caf1a3720..20ed18c8e 100644 --- a/apps/vben5/packages/@abp/notifications/package.json +++ b/apps/vben5/packages/@abp/notifications/package.json @@ -1,6 +1,6 @@ { "name": "@abp/notifications", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/openiddict/package.json b/apps/vben5/packages/@abp/openiddict/package.json index 981869ab3..126fbe5af 100644 --- a/apps/vben5/packages/@abp/openiddict/package.json +++ b/apps/vben5/packages/@abp/openiddict/package.json @@ -1,6 +1,6 @@ { "name": "@abp/openiddict", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/openiddict/src/components/applications/ApplicationModal.vue b/apps/vben5/packages/@abp/openiddict/src/components/applications/ApplicationModal.vue index b53b3122c..a49a9fe8b 100644 --- a/apps/vben5/packages/@abp/openiddict/src/components/applications/ApplicationModal.vue +++ b/apps/vben5/packages/@abp/openiddict/src/components/applications/ApplicationModal.vue @@ -64,11 +64,23 @@ type TabKeys = | 'props' | 'scope'; -const defaultModel = { +const defaultModel: OpenIddictApplicationDto = { applicationType: 'web', + clientId: '', clientType: 'public', consentType: 'explicit', -} as OpenIddictApplicationDto; + creationTime: new Date(), + extraProperties: {}, + id: '', + requirements: { + features: { + requirePkce: false, + }, + }, + settings: { + tokenLifetime: {}, + }, +}; const form = ref(); const formModel = ref({ ...defaultModel }); diff --git a/apps/vben5/packages/@abp/oss/package.json b/apps/vben5/packages/@abp/oss/package.json new file mode 100644 index 000000000..b194d662d --- /dev/null +++ b/apps/vben5/packages/@abp/oss/package.json @@ -0,0 +1,44 @@ +{ + "name": "@abp/oss", + "version": "9.1.3", + "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/oss" + }, + "license": "MIT", + "type": "module", + "sideEffects": [ + "**/*.css" + ], + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + }, + "./global": { + "types": "./global.d.ts" + } + }, + "dependencies": { + "@abp/components": "workspace:*", + "@abp/core": "workspace:*", + "@abp/features": "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:*", + "@vben/stores": "workspace:*", + "ant-design-vue": "catalog:", + "vue": "catalog:*", + "vue-simple-uploader": "catalog:", + "vxe-table": "catalog:" + } +} diff --git a/apps/vben5/packages/@abp/oss/src/api/index.ts b/apps/vben5/packages/@abp/oss/src/api/index.ts new file mode 100644 index 000000000..b72d0ebb1 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/api/index.ts @@ -0,0 +1,2 @@ +export { useContainesApi } from './useContainesApi'; +export { useObjectsApi } from './useObjectsApi'; diff --git a/apps/vben5/packages/@abp/oss/src/api/useContainesApi.ts b/apps/vben5/packages/@abp/oss/src/api/useContainesApi.ts new file mode 100644 index 000000000..0fb560cf3 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/api/useContainesApi.ts @@ -0,0 +1,61 @@ +import type { + GetOssContainersInput, + GetOssObjectsInput, + OssContainerDto, + OssContainersResultDto, +} from '../types/containes'; +import type { OssObjectsResultDto } from '../types/objects'; + +import { useRequest } from '@abp/request'; + +export function useContainesApi() { + const { cancel, request } = useRequest(); + + function deleteApi(name: string): Promise { + return request(`/api/oss-management/containes/${name}`, { + method: 'DELETE', + }); + } + + function getApi(name: string): Promise { + return request(`/api/oss-management/containes/${name}`, { + method: 'GET', + }); + } + + function getListApi( + input?: GetOssContainersInput, + ): Promise { + return request(`/api/oss-management/containes`, { + method: 'GET', + params: input, + }); + } + + function getObjectsApi( + input: GetOssObjectsInput, + ): Promise { + return request( + `/api/oss-management/containes/objects`, + { + method: 'GET', + params: input, + }, + ); + } + + function createApi(name: string): Promise { + return request(`/api/oss-management/containes/${name}`, { + method: 'POST', + }); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getListApi, + getObjectsApi, + }; +} diff --git a/apps/vben5/packages/@abp/oss/src/api/useObjectsApi.ts b/apps/vben5/packages/@abp/oss/src/api/useObjectsApi.ts new file mode 100644 index 000000000..67bb1a608 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/api/useObjectsApi.ts @@ -0,0 +1,50 @@ +import type { + CreateOssObjectInput, + GetOssObjectInput, + OssObjectDto, +} from '../types/objects'; + +import { useRequest } from '@abp/request'; + +export function useObjectsApi() { + const { cancel, request } = useRequest(); + + function createApi(input: CreateOssObjectInput): Promise { + const formData = new window.FormData(); + formData.append('bucket', input.bucket); + formData.append('fileName', input.fileName); + formData.append('overwrite', String(input.overwrite)); + input.expirationTime && + formData.append('expirationTime', input.expirationTime.toString()); + input.path && formData.append('path', input.path); + input.file && formData.append('file', input.file); + return request(`/api/oss-management/objects`, { + data: formData, + headers: { + 'Content-Type': 'multipart/form-data;charset=utf-8', + }, + method: 'POST', + }); + } + + function generateUrlApi(input: GetOssObjectInput): Promise { + return request('/api/oss-management/objects/generate-url', { + method: 'GET', + params: input, + }); + } + + function deleteApi(input: GetOssObjectInput): Promise { + return request('/api/oss-management/objects', { + method: 'DELETE', + params: input, + }); + } + + return { + cancel, + createApi, + deleteApi, + generateUrlApi, + }; +} diff --git a/apps/vben5/packages/@abp/oss/src/components/containers/ContainerModal.vue b/apps/vben5/packages/@abp/oss/src/components/containers/ContainerModal.vue new file mode 100644 index 000000000..1f6abca21 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/containers/ContainerModal.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/apps/vben5/packages/@abp/oss/src/components/containers/ContainerTable.vue b/apps/vben5/packages/@abp/oss/src/components/containers/ContainerTable.vue new file mode 100644 index 000000000..ebef3e3f6 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/containers/ContainerTable.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/apps/vben5/packages/@abp/oss/src/components/index.ts b/apps/vben5/packages/@abp/oss/src/components/index.ts new file mode 100644 index 000000000..af5101805 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/index.ts @@ -0,0 +1,2 @@ +export { default as ContainerTable } from './containers/ContainerTable.vue'; +export { default as ObjectPage } from './objects/ObjectPage.vue'; diff --git a/apps/vben5/packages/@abp/oss/src/components/objects/FileList.vue b/apps/vben5/packages/@abp/oss/src/components/objects/FileList.vue new file mode 100644 index 000000000..019a84e87 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/objects/FileList.vue @@ -0,0 +1,282 @@ + + + + + diff --git a/apps/vben5/packages/@abp/oss/src/components/objects/FileUploadModal.vue b/apps/vben5/packages/@abp/oss/src/components/objects/FileUploadModal.vue new file mode 100644 index 000000000..69b38a1f8 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/objects/FileUploadModal.vue @@ -0,0 +1,286 @@ + + + + + diff --git a/apps/vben5/packages/@abp/oss/src/components/objects/FolderModal.vue b/apps/vben5/packages/@abp/oss/src/components/objects/FolderModal.vue new file mode 100644 index 000000000..983087636 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/objects/FolderModal.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/apps/vben5/packages/@abp/oss/src/components/objects/FolderTree.vue b/apps/vben5/packages/@abp/oss/src/components/objects/FolderTree.vue new file mode 100644 index 000000000..4da8b4514 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/objects/FolderTree.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/apps/vben5/packages/@abp/oss/src/components/objects/ObjectPage.vue b/apps/vben5/packages/@abp/oss/src/components/objects/ObjectPage.vue new file mode 100644 index 000000000..63a9c4efa --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/components/objects/ObjectPage.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/apps/vben5/packages/@abp/oss/src/constants/permissions.ts b/apps/vben5/packages/@abp/oss/src/constants/permissions.ts new file mode 100644 index 000000000..4d60a901e --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/constants/permissions.ts @@ -0,0 +1,18 @@ +/** 容器权限 */ +export const ContainerPermissions = { + /** 新增 */ + Create: 'AbpOssManagement.Container.Create', + Default: 'AbpOssManagement.Container', + /** 删除 */ + Delete: 'AbpOssManagement.Container.Delete', +}; +/** 容器权限 */ +export const OssObjectPermissions = { + /** 新增 */ + Create: 'AbpOssManagement.OssObject.Create', + Default: 'AbpOssManagement.OssObject', + /** 删除 */ + Delete: 'AbpOssManagement.OssObject.Delete', + /** 下载 */ + Download: 'AbpOssManagement.OssObject.Download', +}; diff --git a/apps/vben5/packages/@abp/oss/src/global.d.ts b/apps/vben5/packages/@abp/oss/src/global.d.ts new file mode 100644 index 000000000..a0956a4a5 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/global.d.ts @@ -0,0 +1 @@ +declare module 'vue-simple-uploader'; diff --git a/apps/vben5/packages/@abp/oss/src/index.ts b/apps/vben5/packages/@abp/oss/src/index.ts new file mode 100644 index 000000000..314dad0cd --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/index.ts @@ -0,0 +1,3 @@ +export * from './api'; +export * from './components'; +export * from './types'; diff --git a/apps/vben5/packages/@abp/oss/src/types/containes.ts b/apps/vben5/packages/@abp/oss/src/types/containes.ts new file mode 100644 index 000000000..d882b7d72 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/types/containes.ts @@ -0,0 +1,38 @@ +import type { PagedAndSortedResultRequestDto } from '@abp/core'; + +interface OssContainerDto { + creationDate: Date; + lastModifiedDate?: Date; + metadata: Record; + name: string; + size: number; +} + +interface OssContainersResultDto { + containers: OssContainerDto[]; + marker?: string; + maxKeys?: number; + nextMarker?: string; + prefix?: string; +} + +interface GetOssContainersInput extends PagedAndSortedResultRequestDto { + marker?: string; + prefix?: string; +} + +interface GetOssObjectsInput extends PagedAndSortedResultRequestDto { + bucket?: string; + delimiter?: string; + encodingType?: string; + marker?: string; + mD5?: string; + prefix?: string; +} + +export type { + GetOssContainersInput, + GetOssObjectsInput, + OssContainerDto, + OssContainersResultDto, +}; diff --git a/apps/vben5/packages/@abp/oss/src/types/index.ts b/apps/vben5/packages/@abp/oss/src/types/index.ts new file mode 100644 index 000000000..6100a918d --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/types/index.ts @@ -0,0 +1 @@ +export * from './containes'; diff --git a/apps/vben5/packages/@abp/oss/src/types/objects.ts b/apps/vben5/packages/@abp/oss/src/types/objects.ts new file mode 100644 index 000000000..da6d2cf28 --- /dev/null +++ b/apps/vben5/packages/@abp/oss/src/types/objects.ts @@ -0,0 +1,50 @@ +interface OssObjectDto { + creationDate: Date; + isFolder: boolean; + lastModifiedDate?: Date; + mD5?: string; + metadata: Record; + name: string; + path: string; + size: number; +} + +interface CreateOssObjectInput { + bucket: string; + expirationTime?: string; + file?: File; + fileName: string; + overwrite: boolean; + path?: string; +} + +interface GetOssObjectInput { + bucket: string; + mD5: boolean; + object: string; + path?: string; +} + +interface BulkDeleteOssObjectInput { + bucket: string; + object: string; + path?: string; +} + +interface OssObjectsResultDto { + bucket: string; + delimiter?: string; + marker?: string; + maxKeys: number; + nextMarker?: string; + objects: OssObjectDto[]; + prefix?: string; +} + +export type { + BulkDeleteOssObjectInput, + CreateOssObjectInput, + GetOssObjectInput, + OssObjectDto, + OssObjectsResultDto, +}; diff --git a/apps/vben5/packages/@abp/oss/tsconfig.json b/apps/vben5/packages/@abp/oss/tsconfig.json new file mode 100644 index 000000000..ce1a891fb --- /dev/null +++ b/apps/vben5/packages/@abp/oss/tsconfig.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/web.json", + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/apps/vben5/packages/@abp/permissions/package.json b/apps/vben5/packages/@abp/permissions/package.json index 0a038775d..def1bd8ea 100644 --- a/apps/vben5/packages/@abp/permissions/package.json +++ b/apps/vben5/packages/@abp/permissions/package.json @@ -1,6 +1,6 @@ { "name": "@abp/permissions", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/platform/package.json b/apps/vben5/packages/@abp/platform/package.json index d7f491d4c..807df9134 100644 --- a/apps/vben5/packages/@abp/platform/package.json +++ b/apps/vben5/packages/@abp/platform/package.json @@ -1,6 +1,6 @@ { "name": "@abp/platform", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { @@ -31,8 +31,13 @@ "@vben/icons": "workspace:*", "@vben/layouts": "workspace:*", "@vben/locales": "workspace:*", + "@vben/types": "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/platform/src/api/index.ts b/apps/vben5/packages/@abp/platform/src/api/index.ts index 340455006..32d8b455e 100644 --- a/apps/vben5/packages/@abp/platform/src/api/index.ts +++ b/apps/vben5/packages/@abp/platform/src/api/index.ts @@ -1,2 +1,8 @@ +export { useDataDictionariesApi } from './useDataDictionariesApi'; export { useEmailMessagesApi } from './useEmailMessagesApi'; +export { useLayoutsApi } from './useLayoutsApi'; +export { useMenusApi } from './useMenusApi'; +export { useMyMenusApi } from './useMyMenusApi'; +export { useRoleMenusApi } from './useRoleMenusApi'; export { useSmsMessagesApi } from './useSmsMessagesApi'; +export { useUserMenusApi } from './useUserMenusApi'; diff --git a/apps/vben5/packages/@abp/platform/src/api/useDataDictionariesApi.ts b/apps/vben5/packages/@abp/platform/src/api/useDataDictionariesApi.ts new file mode 100644 index 000000000..c6f172aea --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useDataDictionariesApi.ts @@ -0,0 +1,110 @@ +import type { ListResultDto, PagedResultDto } from '@abp/core'; + +import type { + DataCreateDto, + DataDto, + DataItemCreateDto, + DataItemUpdateDto, + DataMoveDto, + DataUpdateDto, + GetDataListInput, +} from '../types/dataDictionaries'; + +import { useRequest } from '@abp/request'; + +export function useDataDictionariesApi() { + const { cancel, request } = useRequest(); + + function createApi(input: DataCreateDto): Promise { + return request('/api/platform/datas', { + data: input, + method: 'POST', + }); + } + + function deleteApi(id: string): Promise { + return request(`/api/platform/datas/${id}`, { + method: 'DELETE', + }); + } + + function createItemApi(id: string, input: DataItemCreateDto): Promise { + return request(`/api/platform/datas/${id}/items`, { + data: input, + method: 'POST', + }); + } + + function deleteItemApi(id: string, name: string): Promise { + return request(`/api/platform/datas/${id}/items/${name}`, { + method: 'DELETE', + }); + } + + function getApi(id: string): Promise { + return request(`/api/platform/datas/${id}`, { + method: 'GET', + }); + } + + function getByNameApi(name: string): Promise { + return request(`/api/platform/datas/by-name/${name}`, { + method: 'GET', + }); + } + + function getAllApi(): Promise> { + return request>(`/api/platform/datas/all`, { + method: 'GET', + }); + } + + function getPagedListApi( + input?: GetDataListInput, + ): Promise> { + return request>(`/api/platform/datas`, { + method: 'GET', + params: input, + }); + } + + function moveApi(id: string, input: DataMoveDto): Promise { + return request(`/api/platform/datas/${id}/move`, { + data: input, + method: 'PUT', + }); + } + + function updateApi(id: string, input: DataUpdateDto): Promise { + return request(`/api/platform/datas/${id}`, { + data: input, + method: 'PUT', + }); + } + + function updateItemApi( + id: string, + name: string, + input: DataItemUpdateDto, + ): Promise { + return request(`/api/platform/datas/${id}/items/${name}`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + createApi, + createItemApi, + deleteApi, + deleteItemApi, + getAllApi, + getApi, + getByNameApi, + getPagedListApi, + moveApi, + updateApi, + updateItemApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/api/useLayoutsApi.ts b/apps/vben5/packages/@abp/platform/src/api/useLayoutsApi.ts new file mode 100644 index 000000000..fa61697e7 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useLayoutsApi.ts @@ -0,0 +1,58 @@ +import type { PagedResultDto } from '@abp/core'; + +import type { + LayoutCreateDto, + LayoutDto, + LayoutGetPagedListInput, + LayoutUpdateDto, +} from '../types/layouts'; + +import { useRequest } from '@abp/request'; + +export function useLayoutsApi() { + const { cancel, request } = useRequest(); + + function createApi(input: LayoutCreateDto): Promise { + return request(`/api/platform/layouts`, { + data: input, + method: 'POST', + }); + } + + function getPagedListApi( + input?: LayoutGetPagedListInput, + ): Promise> { + return request>('/api/platform/layouts', { + method: 'GET', + params: input, + }); + } + + function getApi(id: string): Promise { + return request(`/api/platform/layouts/${id}`, { + method: 'GET', + }); + } + + function deleteApi(id: string): Promise { + return request(`/api/platform/layouts/${id}`, { + method: 'DELETE', + }); + } + + function updateApi(id: string, input: LayoutUpdateDto): Promise { + return request(`/api/platform/layouts/${id}`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getPagedListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/api/useMenusApi.ts b/apps/vben5/packages/@abp/platform/src/api/useMenusApi.ts new file mode 100644 index 000000000..baf486c63 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useMenusApi.ts @@ -0,0 +1,56 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + MenuCreateDto, + MenuDto, + MenuGetAllInput, + MenuUpdateDto, +} from '../types/menus'; + +import { useRequest } from '@abp/request'; + +export function useMenusApi() { + const { cancel, request } = useRequest(); + + function createApi(input: MenuCreateDto): Promise { + return request(`/api/platform/menus`, { + data: input, + method: 'POST', + }); + } + + function getAllApi(input?: MenuGetAllInput): Promise> { + return request>('/api/platform/menus/all', { + method: 'GET', + params: input, + }); + } + + function getApi(id: string): Promise { + return request(`/api/platform/menus/${id}`, { + method: 'GET', + }); + } + + function deleteApi(id: string): Promise { + return request(`/api/platform/menus/${id}`, { + method: 'DELETE', + }); + } + + function updateApi(id: string, input: MenuUpdateDto): Promise { + return request(`/api/platform/menus/${id}`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + createApi, + deleteApi, + getAllApi, + getApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/api/useMyMenusApi.ts b/apps/vben5/packages/@abp/platform/src/api/useMyMenusApi.ts new file mode 100644 index 000000000..279574778 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useMyMenusApi.ts @@ -0,0 +1,24 @@ +import type { ListResultDto } from '@abp/core'; + +import type { MenuDto, MenuGetInput } from '../types/menus'; + +import { useRequest } from '@abp/request'; + +export function useMyMenusApi() { + const { cancel, request } = useRequest(); + + function getAllApi(input?: MenuGetInput): Promise> { + return request>( + '/api/platform/menus/by-current-user', + { + method: 'GET', + params: input, + }, + ); + } + + return { + cancel, + getAllApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/api/useRoleMenusApi.ts b/apps/vben5/packages/@abp/platform/src/api/useRoleMenusApi.ts new file mode 100644 index 000000000..b7e076a43 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useRoleMenusApi.ts @@ -0,0 +1,50 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + MenuDto, + MenuGetByRoleInput, + SetRoleMenuInput, + SetRoleMenuStartupInput, +} from '../types/menus'; + +import { useRequest } from '@abp/request'; + +export function useRoleMenusApi() { + const { cancel, request } = useRequest(); + + function getAllApi( + input: MenuGetByRoleInput, + ): Promise> { + return request>( + `/api/platform/menus/by-role/${input.role}/${input.framework}`, + { + method: 'GET', + params: input, + }, + ); + } + + function setMenusApi(input: SetRoleMenuInput): Promise { + return request('/api/platform/menus/by-role', { + data: input, + method: 'PUT', + }); + } + + function setStartupMenuApi( + meudId: string, + input: SetRoleMenuStartupInput, + ): Promise { + return request(`/api/platform/menus/startup/${meudId}/by-role`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + getAllApi, + setMenusApi, + setStartupMenuApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/api/useUserMenusApi.ts b/apps/vben5/packages/@abp/platform/src/api/useUserMenusApi.ts new file mode 100644 index 000000000..684b311d8 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/api/useUserMenusApi.ts @@ -0,0 +1,50 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + MenuDto, + MenuGetByUserInput, + SetUserMenuInput, + SetUserMenuStartupInput, +} from '../types/menus'; + +import { useRequest } from '@abp/request'; + +export function useUserMenusApi() { + const { cancel, request } = useRequest(); + + function getAllApi( + input: MenuGetByUserInput, + ): Promise> { + return request>( + `/api/platform/menus/by-user/${input.userId}/${input.framework}`, + { + method: 'GET', + params: input, + }, + ); + } + + function setMenusApi(input: SetUserMenuInput): Promise { + return request('/api/platform/menus/by-user', { + data: input, + method: 'PUT', + }); + } + + function setStartupMenuApi( + meudId: string, + input: SetUserMenuStartupInput, + ): Promise { + return request(`/api/platform/menus/startup/${meudId}/by-user`, { + data: input, + method: 'PUT', + }); + } + + return { + cancel, + getAllApi, + setMenusApi, + setStartupMenuApi, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryItemDrawer.vue b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryItemDrawer.vue new file mode 100644 index 000000000..c41b908cf --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryItemDrawer.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryItemModal.vue b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryItemModal.vue new file mode 100644 index 000000000..2c7eeb55c --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryItemModal.vue @@ -0,0 +1,293 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryModal.vue b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryModal.vue new file mode 100644 index 000000000..03a67c63a --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryModal.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryTable.vue b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryTable.vue new file mode 100644 index 000000000..af69da2ee --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/data-dictionaries/DataDictionaryTable.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/index.ts b/apps/vben5/packages/@abp/platform/src/components/index.ts index c1a40b9f7..1d9a9ddb6 100644 --- a/apps/vben5/packages/@abp/platform/src/components/index.ts +++ b/apps/vben5/packages/@abp/platform/src/components/index.ts @@ -1,2 +1,6 @@ +export { default as DataDictionaryTable } from './data-dictionaries/DataDictionaryTable.vue'; +export { default as LayoutTable } from './layouts/LayoutTable.vue'; +export { default as MenuAllotModal } from './menus/MenuAllotModal.vue'; +export { default as MenuTable } from './menus/MenuTable.vue'; export { default as EmailMessageTable } from './messages/email/EmailMessageTable.vue'; export { default as SmsMessageTable } from './messages/sms/SmsMessageTable.vue'; diff --git a/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutModal.vue b/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutModal.vue new file mode 100644 index 000000000..d11837a55 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutModal.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutTable.vue b/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutTable.vue new file mode 100644 index 000000000..3a32e44a7 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutTable.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/menus/MenuAllotModal.vue b/apps/vben5/packages/@abp/platform/src/components/menus/MenuAllotModal.vue new file mode 100644 index 000000000..0bd5e7538 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/menus/MenuAllotModal.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/menus/MenuDrawer.vue b/apps/vben5/packages/@abp/platform/src/components/menus/MenuDrawer.vue new file mode 100644 index 000000000..851742744 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/menus/MenuDrawer.vue @@ -0,0 +1,482 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/menus/MenuTable.vue b/apps/vben5/packages/@abp/platform/src/components/menus/MenuTable.vue new file mode 100644 index 000000000..e759c3ecd --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/menus/MenuTable.vue @@ -0,0 +1,311 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/components/menus/types.ts b/apps/vben5/packages/@abp/platform/src/components/menus/types.ts new file mode 100644 index 000000000..cce2f28d8 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/menus/types.ts @@ -0,0 +1,3 @@ +type MenuSubject = 'role' | 'user'; + +export type { MenuSubject }; diff --git a/apps/vben5/packages/@abp/platform/src/constants/permissions.ts b/apps/vben5/packages/@abp/platform/src/constants/permissions.ts index 7c6f1ee17..6b68d8baa 100644 --- a/apps/vben5/packages/@abp/platform/src/constants/permissions.ts +++ b/apps/vben5/packages/@abp/platform/src/constants/permissions.ts @@ -14,3 +14,46 @@ export const SmsMessagesPermissions = { /** 发送消息 */ SendMessage: 'Platform.SmsMessage.SendMessage', }; +/** 数据字典权限 */ +export const DataDictionaryPermissions = { + /** 新增 */ + Create: 'Platform.DataDictionary.Create', + /** 默认 */ + Default: 'Platform.DataDictionary', + /** 删除 */ + Delete: 'Platform.DataDictionary.Delete', + /** 管理项目 */ + ManageItems: 'Platform.DataDictionary.ManageItems', + /** 移动 */ + Move: 'Platform.DataDictionary.Move', + /** 更新 */ + Update: 'Platform.DataDictionary.Update', +}; +/** 布局权限 */ +export const LayoutPermissions = { + /** 新增 */ + Create: 'Platform.Layout.Create', + /** 默认 */ + Default: 'Platform.Layout', + /** 删除 */ + Delete: 'Platform.Layout.Delete', + /** 更新 */ + Update: 'Platform.Layout.Update', +}; +/** 菜单权限 */ +export const MenuPermissions = { + /** 新增 */ + Create: 'Platform.Menu.Create', + /** 默认 */ + Default: 'Platform.Menu', + /** 删除 */ + Delete: 'Platform.Menu.Delete', + /** 管理角色菜单 */ + ManageRoles: 'Platform.Menu.ManageRoles', + /** 管理用户收藏菜单 */ + ManageUserFavorites: 'Platform.Menu.ManageUserFavorites', + /** 管理用户菜单 */ + ManageUsers: 'Platform.Menu.ManageUsers', + /** 更新 */ + Update: 'Platform.Menu.Update', +}; diff --git a/apps/vben5/packages/@abp/platform/src/hooks/index.ts b/apps/vben5/packages/@abp/platform/src/hooks/index.ts new file mode 100644 index 000000000..636b085db --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/hooks/index.ts @@ -0,0 +1 @@ +export * from './useMenuTransform'; diff --git a/apps/vben5/packages/@abp/platform/src/hooks/useMenuTransform.ts b/apps/vben5/packages/@abp/platform/src/hooks/useMenuTransform.ts new file mode 100644 index 000000000..a7fdb9177 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/hooks/useMenuTransform.ts @@ -0,0 +1,85 @@ +import type { RouteRecordStringComponent } from '@vben/types'; + +import type { MenuDto } from '../types'; + +import { listToTree } from '@abp/core'; + +export function useMenuTransform() { + function mapMetaString(meta: Record, key: string) { + if (!meta[key]) { + return undefined; + } + return typeof meta[key] === 'string' ? meta[key] : String(meta[key]); + } + function mapMetaNumber(meta: Record, key: string) { + if (!meta[key]) { + return undefined; + } + return typeof meta[key] === 'number' ? meta[key] : Number(meta[key]); + } + function mapMetaBoolean(meta: Record, key: string) { + if (!meta[key]) { + return undefined; + } + return typeof meta[key] === 'boolean' ? meta[key] : meta[key] === 'true'; + } + function mapMetaArray(meta: Record, key: string) { + if (!meta[key]) { + return undefined; + } + return Array.isArray(meta[key]) ? meta[key] : String(meta[key]).split(','); + } + function transformRoutes(menus: MenuDto[]): RouteRecordStringComponent[] { + const combMenus = menus.map((item) => { + return { + component: item.component.includes('BasicLayout') + ? undefined + : item.component, + id: item.id, + meta: { + activeIcon: mapMetaString(item.meta, 'activeIcon'), + activePath: mapMetaString(item.meta, 'activePath'), + affixTab: mapMetaBoolean(item.meta, 'affixTab'), + affixTabOrder: mapMetaNumber(item.meta, 'affixTabOrder'), + authority: mapMetaArray(item.meta, 'authority'), + badge: mapMetaString(item.meta, 'badge'), + badgeType: mapMetaString(item.meta, 'badgeType'), + badgeVariants: mapMetaString(item.meta, 'badgeVariants'), + hideChildrenInMenu: mapMetaBoolean(item.meta, 'hideChildrenInMenu'), + hideInBreadcrumb: mapMetaBoolean(item.meta, 'hideInBreadcrumb'), + hideInMenu: mapMetaBoolean(item.meta, 'hideInMenu'), + hideInTab: mapMetaBoolean(item.meta, 'hideInTab'), + icon: mapMetaString(item.meta, 'icon'), + iframeSrc: mapMetaString(item.meta, 'iframeSrc'), + ignoreAccess: mapMetaBoolean(item.meta, 'ignoreAccess'), + keepAlive: mapMetaBoolean(item.meta, 'keepAlive'), + link: mapMetaString(item.meta, 'link'), + maxNumOfOpenTab: mapMetaNumber(item.meta, 'maxNumOfOpenTab'), + menuVisibleWithForbidden: mapMetaBoolean( + item.meta, + 'menuVisibleWithForbidden', + ), + noBasicLayout: mapMetaBoolean(item.meta, 'noBasicLayout'), + openInNewWindow: mapMetaBoolean(item.meta, 'openInNewWindow'), + order: mapMetaNumber(item.meta, 'order'), + title: item.meta.title ?? item.displayName, + }, + name: item.name, + parentId: item.parentId, + path: item.path, + redirect: item.redirect, + }; + }); + const routes = listToTree(combMenus, { + id: 'id', + pid: 'parentId', + children: 'children', + }); + + return routes; + } + + return { + transformRoutes, + }; +} diff --git a/apps/vben5/packages/@abp/platform/src/index.ts b/apps/vben5/packages/@abp/platform/src/index.ts index 314dad0cd..14fa9fe25 100644 --- a/apps/vben5/packages/@abp/platform/src/index.ts +++ b/apps/vben5/packages/@abp/platform/src/index.ts @@ -1,3 +1,4 @@ export * from './api'; export * from './components'; +export * from './hooks'; export * from './types'; diff --git a/apps/vben5/packages/@abp/platform/src/types/dataDictionaries.ts b/apps/vben5/packages/@abp/platform/src/types/dataDictionaries.ts new file mode 100644 index 000000000..2c050e714 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/types/dataDictionaries.ts @@ -0,0 +1,76 @@ +import type { EntityDto, PagedAndSortedResultRequestDto } from '@abp/core'; + +enum ValueType { + Array = 5, + Boolean = 2, + Date = 3, + DateTime = 4, + Numeic = 1, + Object = 6, + String = 0, +} + +interface DataItemDto extends EntityDto { + allowBeNull: boolean; + defaultValue?: string; + description?: string; + displayName: string; + name: string; + valueType: ValueType; +} + +interface DataDto extends EntityDto { + code: string; + description?: string; + displayName: string; + items: DataItemDto[]; + name: string; + parentId?: string; +} + +interface DataCreateOrUpdateDto { + description?: string; + displayName: string; + name: string; +} + +interface DataCreateDto extends DataCreateOrUpdateDto { + parentId?: string; +} + +interface DataItemCreateOrUpdateDto { + allowBeNull: boolean; + defaultValue?: string; + description?: string; + displayName: string; + valueType: ValueType; +} + +interface DataItemCreateDto extends DataItemCreateOrUpdateDto { + name: string; +} + +interface GetDataListInput extends PagedAndSortedResultRequestDto { + filter?: string; +} + +interface DataMoveDto { + parentId?: string; +} + +type DataUpdateDto = DataCreateOrUpdateDto; + +type DataItemUpdateDto = DataItemCreateOrUpdateDto; + +export { ValueType }; + +export type { + DataCreateDto, + DataDto, + DataItemCreateDto, + DataItemDto, + DataItemUpdateDto, + DataMoveDto, + DataUpdateDto, + GetDataListInput, +}; diff --git a/apps/vben5/packages/@abp/platform/src/types/index.ts b/apps/vben5/packages/@abp/platform/src/types/index.ts index e4f239712..73954c6db 100644 --- a/apps/vben5/packages/@abp/platform/src/types/index.ts +++ b/apps/vben5/packages/@abp/platform/src/types/index.ts @@ -1 +1,4 @@ +export * from './dataDictionaries'; +export * from './layouts'; +export * from './menus'; export * from './messages'; diff --git a/apps/vben5/packages/@abp/platform/src/types/layouts.ts b/apps/vben5/packages/@abp/platform/src/types/layouts.ts new file mode 100644 index 000000000..f030ceb91 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/types/layouts.ts @@ -0,0 +1,35 @@ +import type { PagedAndSortedResultRequestDto } from '@abp/core'; + +import type { RouteDto } from './routes'; + +interface LayoutDto extends RouteDto { + dataId: string; + framework: string; +} + +interface LayoutCreateOrUpdateDto { + description?: string; + displayName: string; + name: string; + path: string; + redirect?: string; +} + +interface LayoutCreateDto extends LayoutCreateOrUpdateDto { + dataId: string; + framework: string; +} + +type LayoutUpdateDto = LayoutCreateOrUpdateDto; + +interface LayoutGetPagedListInput extends PagedAndSortedResultRequestDto { + filter?: string; + framework?: string; +} + +export type { + LayoutCreateDto, + LayoutDto, + LayoutGetPagedListInput, + LayoutUpdateDto, +}; diff --git a/apps/vben5/packages/@abp/platform/src/types/menus.ts b/apps/vben5/packages/@abp/platform/src/types/menus.ts new file mode 100644 index 000000000..a6b8682b4 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/types/menus.ts @@ -0,0 +1,89 @@ +import type { RouteDto } from './routes'; + +interface MenuDto extends RouteDto { + code: string; + component: string; + framework: string; + isPublic: boolean; + layoutId: string; + parentId?: string; + startup: boolean; +} + +interface MenuCreateOrUpdateDto { + component: string; + description?: string; + displayName: string; + isPublic: boolean; + meta: Record; + name: string; + parentId?: string; + path: string; + redirect?: string; +} + +interface MenuCreateDto extends MenuCreateOrUpdateDto { + layoutId: string; +} + +interface MenuGetInput { + framework?: string; +} + +interface MenuGetByUserInput { + framework: string; + userId: string; +} + +interface MenuGetByRoleInput { + framework: string; + role: string; +} + +interface SetUserMenuInput { + framework?: string; + menuIds: string[]; + startupMenuId?: string; + userId: string; +} + +interface SetUserMenuStartupInput { + framework?: string; + userId: string; +} + +interface SetRoleMenuInput { + framework?: string; + menuIds: string[]; + roleName: string; + startupMenuId?: string; +} + +interface SetRoleMenuStartupInput { + framework?: string; + roleName: string; +} + +type MenuUpdateDto = MenuCreateOrUpdateDto; + +interface MenuGetAllInput { + filter?: string; + framework?: string; + layoutId?: string; + parentId?: string; + sorting?: string; +} + +export type { + MenuCreateDto, + MenuDto, + MenuGetAllInput, + MenuGetByRoleInput, + MenuGetByUserInput, + MenuGetInput, + MenuUpdateDto, + SetRoleMenuInput, + SetRoleMenuStartupInput, + SetUserMenuInput, + SetUserMenuStartupInput, +}; diff --git a/apps/vben5/packages/@abp/platform/src/types/routes.ts b/apps/vben5/packages/@abp/platform/src/types/routes.ts new file mode 100644 index 000000000..daa246d9d --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/types/routes.ts @@ -0,0 +1,12 @@ +import type { EntityDto } from '@abp/core'; + +interface RouteDto extends EntityDto { + description?: string; + displayName: string; + meta: Record; + name: string; + path: string; + redirect?: string; +} + +export type { RouteDto }; diff --git a/apps/vben5/packages/@abp/request/package.json b/apps/vben5/packages/@abp/request/package.json index e14f7d4b9..7f23f25ff 100644 --- a/apps/vben5/packages/@abp/request/package.json +++ b/apps/vben5/packages/@abp/request/package.json @@ -1,6 +1,6 @@ { "name": "@abp/request", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/request/src/constants/httpStatus.ts b/apps/vben5/packages/@abp/request/src/constants/httpStatus.ts new file mode 100644 index 000000000..4256fe315 --- /dev/null +++ b/apps/vben5/packages/@abp/request/src/constants/httpStatus.ts @@ -0,0 +1,44 @@ +export enum HttpStatusCode { + Accepted = 202, + Ambiguous = 300, + BadGateway = 502, + BadRequest = 400, + Conflict = 409, + Continue = 100, + Created = 201, + ExpectationFailed = 417, + Forbidden = 403, + GatewayTimeout = 504, + Gone = 410, + HttpVersionNotSupported = 505, + InternalServerError = 500, + LengthRequired = 411, + MethodNotAllowed = 405, + Moved = 301, + NoContent = 204, + NonAuthoritativeInformation = 203, + NotAcceptable = 406, + NotFound = 404, + NotImplemented = 501, + NotModified = 304, + OK = 200, + PartialContent = 206, + PaymentRequired = 402, + PreconditionFailed = 412, + ProxyAuthenticationRequired = 407, + Redirect = 302, + RedirectKeepVerb = 307, + RedirectMethod = 303, + RequestedRangeNotSatisfiable = 416, + RequestEntityTooLarge = 413, + RequestTimeout = 408, + RequestUriTooLong = 414, + ResetContent = 205, + ServiceUnavailable = 503, + SwitchingProtocols = 101, + Unauthorized = 401, + UnsupportedMediaType = 415, + Unused = 306, + UpgradeRequired = 426, + UseProxy = 305, +} diff --git a/apps/vben5/packages/@abp/request/src/constants/index.ts b/apps/vben5/packages/@abp/request/src/constants/index.ts new file mode 100644 index 000000000..6b6cc383f --- /dev/null +++ b/apps/vben5/packages/@abp/request/src/constants/index.ts @@ -0,0 +1 @@ +export * from './httpStatus'; diff --git a/apps/vben5/packages/@abp/request/src/hooks/index.ts b/apps/vben5/packages/@abp/request/src/hooks/index.ts index 0c4767a5f..229c41551 100644 --- a/apps/vben5/packages/@abp/request/src/hooks/index.ts +++ b/apps/vben5/packages/@abp/request/src/hooks/index.ts @@ -1,3 +1,4 @@ export * from './useErrorFormat'; +export * from './useHttpStatusCodeMap'; export * from './useRequest'; export * from './useWrapperResult'; diff --git a/apps/vben5/packages/@abp/request/src/hooks/useHttpStatusCodeMap.ts b/apps/vben5/packages/@abp/request/src/hooks/useHttpStatusCodeMap.ts new file mode 100644 index 000000000..ac442b7d1 --- /dev/null +++ b/apps/vben5/packages/@abp/request/src/hooks/useHttpStatusCodeMap.ts @@ -0,0 +1,76 @@ +import { HttpStatusCode } from '../constants/httpStatus'; + +export function useHttpStatusCodeMap() { + const httpStatusCodeMap: { [key: number]: string } = { + [HttpStatusCode.Accepted]: '202 - Accepted', + [HttpStatusCode.Ambiguous]: '300 - Ambiguous/Multiple Choices', + [HttpStatusCode.BadGateway]: '502 - Bad Gateway', + [HttpStatusCode.BadRequest]: '400 - Bad Request', + [HttpStatusCode.Conflict]: '409 - Conflict', + [HttpStatusCode.Continue]: '100 - Continue', + [HttpStatusCode.Created]: '201 - Created', + [HttpStatusCode.ExpectationFailed]: '417 - Expectation Failed', + [HttpStatusCode.Forbidden]: '403 - Forbidden', + [HttpStatusCode.GatewayTimeout]: '504 - Gateway Timeout', + [HttpStatusCode.Gone]: '410 - Gone', + [HttpStatusCode.HttpVersionNotSupported]: + '505 - Http Version Not Supported', + [HttpStatusCode.InternalServerError]: '500 - Internal Server Error', + [HttpStatusCode.LengthRequired]: '411 - Length Required', + [HttpStatusCode.MethodNotAllowed]: '405 - Method Not Allowed', + [HttpStatusCode.Moved]: '301 - Moved/Moved Permanently', + [HttpStatusCode.NoContent]: '204 - No Content', + [HttpStatusCode.NonAuthoritativeInformation]: + '203 - Non Authoritative Information', + [HttpStatusCode.NotAcceptable]: '406 - Not Acceptable', + [HttpStatusCode.NotFound]: '404 - Not Found', + [HttpStatusCode.NotImplemented]: '501 - Not Implemented', + [HttpStatusCode.NotModified]: '304 - Not Modified', + [HttpStatusCode.OK]: '200 - OK', + [HttpStatusCode.PartialContent]: '206 - Partial Content', + [HttpStatusCode.PaymentRequired]: '402 - Payment Required', + [HttpStatusCode.PreconditionFailed]: '412 - Precondition Failed', + [HttpStatusCode.ProxyAuthenticationRequired]: + '407 - Proxy Authentication Required', + [HttpStatusCode.Redirect]: '302 - Found/Redirect', + [HttpStatusCode.RedirectKeepVerb]: + '307 - Redirect Keep Verb/Temporary Redirect', + [HttpStatusCode.RedirectMethod]: '303 - Redirect Method/See Other', + [HttpStatusCode.RequestedRangeNotSatisfiable]: + '416 - Requested Range Not Satisfiable', + [HttpStatusCode.RequestEntityTooLarge]: '413 - Request Entity Too Large', + [HttpStatusCode.RequestTimeout]: '408 - Request Timeout', + [HttpStatusCode.RequestUriTooLong]: '414 - Request Uri Too Long', + [HttpStatusCode.ResetContent]: '205 - Reset Content', + [HttpStatusCode.ServiceUnavailable]: '503 - Service Unavailable', + [HttpStatusCode.SwitchingProtocols]: '101 - Switching Protocols', + [HttpStatusCode.Unauthorized]: '401 - Unauthorized', + [HttpStatusCode.UnsupportedMediaType]: '415 - Unsupported Media Type', + [HttpStatusCode.Unused]: '306 - Unused', + [HttpStatusCode.UpgradeRequired]: '426 - Upgrade Required', + [HttpStatusCode.UseProxy]: '305 - Use Proxy', + }; + + function getHttpStatusColor(statusCode: HttpStatusCode) { + if (statusCode < 200) { + return 'default'; + } + if (statusCode >= 200 && statusCode < 300) { + return 'success'; + } + if (statusCode >= 300 && statusCode < 400) { + return 'processing'; + } + if (statusCode >= 400 && statusCode < 500) { + return 'warning'; + } + if (statusCode >= 500) { + return 'error'; + } + } + + return { + getHttpStatusColor, + httpStatusCodeMap, + }; +} diff --git a/apps/vben5/packages/@abp/request/src/index.ts b/apps/vben5/packages/@abp/request/src/index.ts index 5c13205f7..af59094a0 100644 --- a/apps/vben5/packages/@abp/request/src/index.ts +++ b/apps/vben5/packages/@abp/request/src/index.ts @@ -6,6 +6,7 @@ import type { RequestClientOptions } from '@vben/request'; import { useAppConfig } from '@vben/hooks'; import { RequestClient } from '@vben/request'; +export * from './constants'; export * from './hooks'; export * from './types'; diff --git a/apps/vben5/packages/@abp/saas/package.json b/apps/vben5/packages/@abp/saas/package.json index d8fe93258..9c050356b 100644 --- a/apps/vben5/packages/@abp/saas/package.json +++ b/apps/vben5/packages/@abp/saas/package.json @@ -1,6 +1,6 @@ { "name": "@abp/saas", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { @@ -34,6 +34,7 @@ "ant-design-vue": "catalog:", "dayjs": "catalog:", "lodash.debounce": "catalog:", + "universal-cookie": "catalog:", "vue": "catalog:*", "vxe-table": "catalog:" }, diff --git a/apps/vben5/packages/@abp/saas/src/components/tenants/TenantSelectModal.vue b/apps/vben5/packages/@abp/saas/src/components/tenants/TenantSelectModal.vue index a3bf6c681..ab4d01dec 100644 --- a/apps/vben5/packages/@abp/saas/src/components/tenants/TenantSelectModal.vue +++ b/apps/vben5/packages/@abp/saas/src/components/tenants/TenantSelectModal.vue @@ -5,6 +5,7 @@ import { useVbenForm, useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; import { message } from 'ant-design-vue'; +import Cookies from 'universal-cookie'; import { useMultiTenancyApi } from '../../api/useMultiTenancyApi'; @@ -19,6 +20,7 @@ const emits = defineEmits<{ const tenant = ref(); const { findTenantByNameApi } = useMultiTenancyApi(); +const cookies = new Cookies(null, { path: '/' }); const [Form, formApi] = useVbenForm({ handleSubmit: onSubmit, @@ -53,6 +55,7 @@ async function onSubmit(values: Record) { modalApi.setState({ submitting: true }); try { tenant.value = undefined; + cookies.remove('__tenant'); if (values.name) { const result = await findTenantByNameApi(values.name); if (!result.success) { diff --git a/apps/vben5/packages/@abp/settings/package.json b/apps/vben5/packages/@abp/settings/package.json index 1e2c40f78..f92c70e3b 100644 --- a/apps/vben5/packages/@abp/settings/package.json +++ b/apps/vben5/packages/@abp/settings/package.json @@ -1,6 +1,6 @@ { "name": "@abp/settings", - "version": "9.0.4", + "version": "9.1.3", "homepage": "https://github.com/colinin/abp-next-admin", "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { diff --git a/apps/vben5/packages/@abp/settings/src/components/settings/SystemSetting.vue b/apps/vben5/packages/@abp/settings/src/components/settings/SystemSetting.vue index 088dfacf7..25d0d2cc0 100644 --- a/apps/vben5/packages/@abp/settings/src/components/settings/SystemSetting.vue +++ b/apps/vben5/packages/@abp/settings/src/components/settings/SystemSetting.vue @@ -80,6 +80,7 @@ function onFeatureManage() {