diff --git a/src/components/Menu/index.ts b/src/components/Menu/index.ts index 42f45c9..5a8ff72 100644 --- a/src/components/Menu/index.ts +++ b/src/components/Menu/index.ts @@ -1,3 +1,4 @@ import BasicMenu from './src/BasicMenu.vue' +import KingdeeBaseMenu from './src/KingdeeBasicMenu.vue' -export { BasicMenu } +export { BasicMenu, KingdeeBaseMenu } diff --git a/src/components/Menu/src/KingdeeBasicMenu.vue b/src/components/Menu/src/KingdeeBasicMenu.vue new file mode 100644 index 0000000..4e6eb29 --- /dev/null +++ b/src/components/Menu/src/KingdeeBasicMenu.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/components/Menu/src/components/KingdeeBasicSubMenuItem.vue b/src/components/Menu/src/components/KingdeeBasicSubMenuItem.vue new file mode 100644 index 0000000..2946c7f --- /dev/null +++ b/src/components/Menu/src/components/KingdeeBasicSubMenuItem.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/layouts/default/header/MultipleHeader.vue b/src/layouts/default/header/MultipleHeader.vue index 477586a..89ccd90 100644 --- a/src/layouts/default/header/MultipleHeader.vue +++ b/src/layouts/default/header/MultipleHeader.vue @@ -16,6 +16,10 @@ import { useMultipleTabStore } from '@/store/modules/multipleTab' defineOptions({ name: 'LayoutMultipleHeader' }) +defineProps<{ + scoped: boolean +}>() + const HEADER_HEIGHT = 48 const TABS_HEIGHT = 32 @@ -90,7 +94,7 @@ const getClass = computed(() => { />
- +
diff --git a/src/layouts/default/header/kingdee/new/KingdeeNewHeader.vue b/src/layouts/default/header/kingdee/new/KingdeeNewHeader.vue index 141abc6..a915682 100644 --- a/src/layouts/default/header/kingdee/new/KingdeeNewHeader.vue +++ b/src/layouts/default/header/kingdee/new/KingdeeNewHeader.vue @@ -2,8 +2,9 @@ import { computed, unref } from 'vue' import { Layout } from 'ant-design-vue' -import { ErrorAction, FullScreen, LayoutBreadcrumb, Notify, UserDropDown } from '../../components' +import { ErrorAction, FullScreen, Notify, UserDropDown } from '../../components' import LayoutTrigger from '../../../trigger/index.vue' +import KingdeeTopMenu from './KingdeeTopMenu.vue' import { propTypes } from '@/utils/propTypes' // import { AppLocalePicker, AppLogo, AppSearch, AppSizePicker } from '@/components/Application' @@ -19,7 +20,7 @@ import { useHeaderSetting } from '@/hooks/setting/useHeaderSetting' import { useMenuSetting } from '@/hooks/setting/useMenuSetting' import { useRootSetting } from '@/hooks/setting/useRootSetting' -// import { MenuModeEnum, MenuSplitTyeEnum } from '@/enums/menuEnum' +import { MenuModeEnum, MenuSplitTyeEnum } from '@/enums/menuEnum' import { SettingButtonPositionEnum } from '@/enums/appEnum' import { useAppInject } from '@/hooks/web/useAppInject' @@ -41,7 +42,7 @@ const { getShowHeaderTrigger, getSplit, getIsMixMode, getMenuWidth, getIsMixSide // const { getIsMixMode, getMenuWidth } = useMenuSetting() const { getUseErrorHandle, getShowSettingButton, getSettingButtonPosition } = useRootSetting() -const { getHeaderTheme, getShowFullScreen, getShowNotice, getShowContent, getShowBread, getShowHeaderLogo, getShowHeader, getShowSearch } +const { getHeaderTheme, getShowFullScreen, getShowNotice, getShowContent, getShowHeaderLogo, getShowHeader, getShowSearch } = useHeaderSetting() const { getShowLocalePicker } = useLocale() @@ -80,10 +81,10 @@ const getLogoWidth = computed(() => { return { width: `${width}px` } }) -// const getSplitType = computed(() => { -// return unref(getSplit) ? MenuSplitTyeEnum.TOP : MenuSplitTyeEnum.NONE -// }) -// +const getSplitType = computed(() => { + return unref(getSplit) ? MenuSplitTyeEnum.TOP : MenuSplitTyeEnum.NONE +}) + // const getMenuMode = computed(() => { // return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null // }) @@ -107,14 +108,14 @@ const getLogoWidth = computed(() => { v-if="(getShowContent && getShowHeaderTrigger && !getSplit && !getIsMixSidebar) || getIsMobile" :theme="getHeaderTheme" :sider="false" /> - + - - - +
+ +
diff --git a/src/layouts/default/header/kingdee/new/KingdeeTopMenu.vue b/src/layouts/default/header/kingdee/new/KingdeeTopMenu.vue new file mode 100644 index 0000000..bbb88e1 --- /dev/null +++ b/src/layouts/default/header/kingdee/new/KingdeeTopMenu.vue @@ -0,0 +1,248 @@ + + + diff --git a/src/layouts/default/index.vue b/src/layouts/default/index.vue index 62426bb..ad3bca3 100644 --- a/src/layouts/default/index.vue +++ b/src/layouts/default/index.vue @@ -52,7 +52,7 @@ const layoutClass = computed(() => { - + diff --git a/src/layouts/default/menu/index.vue b/src/layouts/default/menu/index.vue index f060cd9..31e6b98 100644 --- a/src/layouts/default/menu/index.vue +++ b/src/layouts/default/menu/index.vue @@ -123,8 +123,9 @@ export default defineComponent({ const getCommonProps = computed(() => { const current = getFirstPathSegment(currentPath.path) const menus = findChildrenByFirstPathSegment(unref(menusRef), current) + const scoped = props.isScoped return { - menus, + menus: scoped ? menus : unref(menusRef), beforeClickFn: beforeMenuClickFn, items: menus, theme: unref(getComputedMenuTheme), diff --git a/src/layouts/default/tabs/index.vue b/src/layouts/default/tabs/index.vue index b3d0648..52f0499 100644 --- a/src/layouts/default/tabs/index.vue +++ b/src/layouts/default/tabs/index.vue @@ -6,7 +6,7 @@ import { useMouse } from '@vueuse/core' import { computed, ref, unref } from 'vue' import { Tabs } from 'ant-design-vue' -import { useRouter } from 'vue-router' +import { useRoute, useRouter } from 'vue-router' import TabContent from './components/TabContent.vue' import FoldButton from './components/FoldButton.vue' import TabRedo from './components/TabRedo.vue' @@ -26,6 +26,10 @@ import { listenerRouteChange } from '@/logics/mitt/routeChange' defineOptions({ name: 'MultipleTabs' }) +const props = defineProps<{ + scoped: boolean +}>() + const affixTextList = initAffixTabs() const activeKeyRef = ref('') @@ -33,13 +37,32 @@ useTabsDrag(affixTextList) const tabStore = useMultipleTabStore() const userStore = useUserStore() const router = useRouter() +const route = useRoute() const { prefixCls } = useDesign('multiple-tabs') const go = useGo() const { getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting() +function getFirstPathSegment(path: string): string { + if (!path || typeof path !== 'string') + return '/' + + const segments = path.split('/').filter(Boolean) // 移除空字符串 + return segments.length > 0 ? `/${segments[0]}` : '/' +} + const getTabsState = computed(() => { - return tabStore.getTabList.filter(item => !item.meta?.hideTab) + const currentPath = route.path + + const currentCloud = getFirstPathSegment(currentPath) + + if (props.scoped) { + return tabStore.getTabList.filter(item => !item.meta?.hideTab).filter((item) => { + const firstPath = getFirstPathSegment(item.path) + return firstPath === currentCloud + }) + } + else { return tabStore.getTabList.filter(item => !item.meta?.hideTab) } }) const unClose = computed(() => unref(getTabsState).length === 1)