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 53b32889a..47860241a 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 @@ -99,7 +99,8 @@ "sms": "Sms Messages" }, "dataDictionaries": "Data Dictionaries", - "layouts": "Layouts" + "layouts": "Layouts", + "menus": "Menus" }, "saas": { "title": "Saas", 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 1d0b58882..47d0da206 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 @@ -99,7 +99,8 @@ "sms": "短信消息" }, "dataDictionaries": "数据字典", - "layouts": "布局管理" + "layouts": "布局管理", + "menus": "菜单管理" }, "saas": { "title": "Saas", 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 afaf79836..c0262677b 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 @@ -418,6 +418,15 @@ const routes: RouteRecordRaw[] = [ path: '/platform/layouts', component: () => import('#/views/platform/layouts/index.vue'), }, + { + meta: { + title: $t('abp.platform.menus'), + icon: 'material-symbols-light:menu', + }, + name: 'PlatformMenus', + path: '/platform/menus', + component: () => import('#/views/platform/menus/index.vue'), + }, { meta: { title: $t('abp.platform.messages.title'), 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..fb6b16533 --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/platform/menus/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/packages/@abp/platform/src/api/index.ts b/apps/vben5/packages/@abp/platform/src/api/index.ts index 68f19461a..eff247232 100644 --- a/apps/vben5/packages/@abp/platform/src/api/index.ts +++ b/apps/vben5/packages/@abp/platform/src/api/index.ts @@ -1,4 +1,5 @@ export { useDataDictionariesApi } from './useDataDictionariesApi'; export { useEmailMessagesApi } from './useEmailMessagesApi'; export { useLayoutsApi } from './useLayoutsApi'; +export { useMenusApi } from './useMenusApi'; export { useSmsMessagesApi } from './useSmsMessagesApi'; 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/components/index.ts b/apps/vben5/packages/@abp/platform/src/components/index.ts index 4ee20942f..41f432072 100644 --- a/apps/vben5/packages/@abp/platform/src/components/index.ts +++ b/apps/vben5/packages/@abp/platform/src/components/index.ts @@ -1,4 +1,5 @@ export { default as DataDictionaryTable } from './data-dictionaries/DataDictionaryTable.vue'; export { default as LayoutTable } from './layouts/LayoutTable.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 index 5172f1e99..d11837a55 100644 --- a/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutModal.vue +++ b/apps/vben5/packages/@abp/platform/src/components/layouts/LayoutModal.vue @@ -144,6 +144,9 @@ async function onGet() { modalApi.setState({ loading: true }); const dto = await getApi(id); formApi.setValues(dto, false); + modalApi.setState({ + title: `${$t('AppPlatform.Layout:Edit')} - ${dto.displayName}`, + }); } finally { modalApi.setState({ loading: false }); } 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..0699834a0 --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/menus/MenuDrawer.vue @@ -0,0 +1,459 @@ + + + + + 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..4ce94abff --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/components/menus/MenuTable.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/apps/vben5/packages/@abp/platform/src/types/index.ts b/apps/vben5/packages/@abp/platform/src/types/index.ts index 7ddde6be9..73954c6db 100644 --- a/apps/vben5/packages/@abp/platform/src/types/index.ts +++ b/apps/vben5/packages/@abp/platform/src/types/index.ts @@ -1,2 +1,4 @@ export * from './dataDictionaries'; +export * from './layouts'; +export * from './menus'; export * from './messages'; 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..b2639e77f --- /dev/null +++ b/apps/vben5/packages/@abp/platform/src/types/menus.ts @@ -0,0 +1,39 @@ +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; +} + +type MenuUpdateDto = MenuCreateOrUpdateDto; + +interface MenuGetAllInput { + filter?: string; + framework?: string; + layoutId?: string; + parentId?: string; + sorting?: string; +} + +export type { MenuCreateDto, MenuDto, MenuGetAllInput, MenuUpdateDto };