4.2.0 • Published 7 months ago

antdv-pro-layout v4.2.0

Weekly downloads
-
License
MIT
Repository
-
Last release
7 months ago

Ant Design Vue Pro Layout

Ant Design Pro Vue 布局,易于使用专业脚手架。

Vue Support NPM version NPM downloads License MIT

中文 | English

安装 Install

npm i antdv-pro-layout

简单使用 Simple Usage

首先,您应该将所需的 antdv-pro-layout 添加到库中。

// main.[js|ts]
import { createApp } from "vue";
import App from "./App.vue";

import "ant-design-vue/dist/reset.css";
import Antd from "ant-design-vue";

import "antdv-pro-layout/dist/style.css";
import { ProLayout, PageContainer } from "antdv-pro-layout";

const app = createApp(App);

app.use(Antd).use(ProLayout).use(PageContainer).mount("#app");

之后,您可以在 Vue 组件中使用专业布局,如下所示:

<template>
  <pro-layout
    :locale="locale"
    :menu-data="menuData"
    v-bind="layoutConf"
    v-model:openKeys="state.openKeys"
    v-model:collapsed="state.collapsed"
    v-model:selectedKeys="state.selectedKeys"
  >
    <router-view />
  </pro-layout>
</template>

<script setup lang="ts">
import { reactive, useRouter } from "vue";
import {
  getMenuData,
  clearMenuItem,
  type MenuDataItem,
} from "antdv-pro-layout";

const locale = (menuData: MenuDataItem) => menuData.meta?.title;
const router = useRouter();

const { menuData } = getMenuData(clearMenuItem(router.getRoutes()));

const state = reactive({
  collapsed: false, // default value
  openKeys: ["/dashboard"], // defualt openKeys
  selectedKeys: ["/welcome"], // default selectedKeys
});

const layoutConf = reactive({
  layout: "side",
  theme: "light", // "dark" | "light",
  menuTheme: "light", // "dark" | "light",
  fixedHeader: true,
  fixSiderbar: true,
  splitMenus: true,
});
</script>

库功能支持 API

函数布局 ProLayout

  • MediaQueryEnum 屏幕尺寸媒体查询枚举对象
  • getMediaScreen 屏幕尺寸
  • useMediaScreen 屏幕尺寸 ref 响应监听
  • PrefersColorSchemeEnum 媒体主题颜色模式枚举对象
  • getPrefersColorScheme 媒体主题颜色模式偏好
  • usePrefersColorScheme 媒体主题颜色模式偏好 ref 响应监听
  • viewTransitionTheme 主题切换视图过渡
  • getMenuData 路由表转出系统菜单
  • clearMenuItem 清除菜单项,属性排除!name 和 meta 隐藏标记

组件布局 ProLayout

参数说明类型默认值
title布局 LOGO 右侧文本string'Ant Design Pro'
logo布局 LOGO 图链接string-
logoStyle布局 LOGO 图样式object-
loading布局内容区加载等待状态booleanfalse
layout菜单布局'side' | 'top' | 'mix''side'
breadcrumb布局内容左上角面包屑Object-
theme全局主题色'light' |'dark''light'
menuTheme菜单导航主题色'light' |'dark''light'
menuData菜单项数据 MenuDataItem[]Array[]
collapsed菜单左侧时收起展开booleantrue
collapsedWidth菜单左侧时收起宽度大小number48
siderWidth菜单左侧时展开宽度大小number200
selectedKeys菜单选择高亮 keysstring[][]
openKeys菜单选择打开展开 keysstring[][]
fixSiderbar菜单左侧列表固定booleanfalse
splitMenus菜单布局mix分割二级菜单到左侧booleanfalse
menuHeaderRender渲染菜单头 logo 和标题区域v-slot | VNode | (props: BasicLayoutProps) => VNode | false-
menuHeaderExtraRender渲染菜单头拓展区域v-slot | VNode | (props: BasicLayoutProps) => VNode | false-
menuFooterRender渲染菜单底脚区域v-slot | VNode | (props: BasicLayoutProps) => VNode | false-
menuItemRender渲染菜单项 Menu.Itemv-slot#menuItemRender="menuItem"-
menuSubItemRender渲染菜单嵌套子项 Menu.SubItemv-slot#menuSubItemRender="menuItem"-
collapsedButtonRender渲染菜单收起按钮区域v-slot#collapsedButtonRender="collapsed"-
fixedHeader顶部区域固定booleanfalse
headerHeight顶部区域高度number48
headerRender渲染顶部区域v-slot | VNode | (props: BasicLayoutProps) => VNode-
headerContentRender渲染顶部内容区域,仅布局side有效v-slot | (props: BasicLayoutProps) => VNode-
headerContentRightRender渲染顶部内容右端区域v-slot | (props: BasicLayoutProps) => VNode-
footerRender渲染底部区域v-slot | ({ width, ...props }) => VNodefalse
tabRender渲染顶部标签页区域v-slot | ({ width, ...props }) => VNodefalse
breadcrumbRender渲染面包屑导航区域v-slot | ({ route, params, routes, paths, h }) => VNode[]-
locale菜单名国际化函数处理Function(menuDataItem?: MenuDataItem) => string | falsefalse
collapse菜单左侧收起展开触发函数处理Function(collapsed: boolean) => void-

菜单数据可通过提供的 getMenuDataclearMenuItem 函数转换
例如 const { menuData } = getMenuData(clearMenuItem(routes))

插槽渲染 Custom Render

渲染顶部内容区域 headerContentRender
<template #headerContentRender>
  <div style="background-color: #ff7875">headerContentRender</div>
</template>
<template #headerContentRightRender>
  <a-avatar shape="square" size="small"> Avatar </a-avatar>
</template>
渲染菜单项 menuItemRender Menu.Item
<template #menuItemRender="{ path, meta }">
  <a-menu-item
    :key="path"
    :disabled="meta?.disabled"
    :danger="meta?.danger"
    :icon="meta?.icon"
  >
    <router-link :to="path">
      <span class="ant-pro-menu-item">
        <a-badge count="5" dot>
          <span class="ant-pro-menu-item-title">{{ meta?.title }}</span>
        </a-badge>
      </span>
    </router-link>
  </a-menu-item>
</template>
渲染顶部头区域 breadcrumbRender
<template #breadcrumbRender="{ route, params, routes }">
  <span v-if="routes.indexOf(route) === routes.length - 1">
    {{ route.breadcrumbName }}
  </span>
  <RouterLink v-else :to="{ path: route.path, params }">
    {{ route.breadcrumbName }}
  </RouterLink>
</template>
渲染顶部标签页区域 tabRender
<template #tabRender="{ width, fixedHeader }">
  <div>
    <header
      class="ant-layout-header"
      style="height: 36px; line-height: 36px; background: transparent"
      v-if="fixedHeader"
    ></header>
    <div
      :style="{
        margin: '0',
        height: '36px',
        lineHeight: '36px',
        right: '0px',
        top: '48px',
        position: fixedHeader ? 'fixed' : 'unset',
        width: fixedHeader ? width : '100%',
        overflow: 'hidden',
        zIndex: 14,
        padding: '4px 16px',
        background: '#fff',
        boxShadow: '0 1px 4px #0015291f',
        transition: 'background 0.3s, width 0.2s',
      }"
    >
      tabRender fixedHeader:{{ fixedHeader }} width:{{ width }}
    </div>
  </div>
</template>
渲染底部区域 footerRender
<template #footerRender="{ width, fixedHeader }">
  <div>
    <footer
      class="ant-layout-footer"
      style="height: 48px; line-height: 48px; background: transparent"
      v-if="fixedHeader"
    ></footer>
    <GlobalFooter
      :style="{
        margin: '0',
        height: '48px',
        lineHeight: '48px',
        right: '0px',
        bottom: '0px',
        position: fixedHeader ? 'fixed' : 'unset',
        width: fixedHeader ? width : '100%',
        overflow: 'hidden',
        zIndex: 14,
        background: '#fff',
        boxShadow: '0 1px 4px #0015291f',
        transition: 'background 0.3s, width 0.2s',
      }"
      :links="[
        {
          blankTarget: true,
          title: 'Link 1',
          href: '#',
        },
        {
          blankTarget: false,
          title: 'Link 2',
          href: 'https://gitee.com/TsMask/',
        },
        {
          blankTarget: true,
          title: 'Link 3',
          href: '#',
        },
      ]"
      copyright="Copyright &copy; 2023 Gitee For TsMask"
    >
    </GlobalFooter>
  </div>
</template>

组件页脚 GlobalFooter

参数说明类型默认值
links必填,链接跳转Array<{ key?: string; title: string; href: string; blankTarget?: boolean; }>-
copyright版权声明区域v-slot | VNode | (props: BasicLayoutProps) => VNode | falseundefined
<GlobalFooter
  :links="[
    {
      blankTarget: true,
      title: 'Link 1',
      href: '#',
    },
    {
      blankTarget: false,
      title: 'Link 2',
      href: 'https://gitee.com/TsMask/',
    },
    {
      blankTarget: true,
      title: 'Link 3',
      href: '#',
    },
  ]"
  copyright="Copyright &copy; 2023 Gitee For TsMask"
></GlobalFooter>

组件内容页 PageContainer

包含 antdv 组件 API 属性: PageHeader 页头Affix 固钉

参数说明类型默认值
loading加载状态booleanfalse
disableMargin布局内容禁用外边距 24pxbooleanfalse
flex内容布局充满,默认固定宽度 1200pxbooleanfalse
fixed-header固定 PageHeader 到顶部booleanfalse
affixProps固钉的配置affix{offsetTop: 48}
pageFooter渲染页脚插槽VNode | v-slot-
pageHeader渲染页头替换 PageHeader 组件插槽VNode | v-slot-
...PageHeader 属性PageHeader 页头 API-
breadcrumbPageHeader 面包屑的配置,{}配置不显示breadcrumb-
contentPageHeader 默认插槽VNode | v-slot-
contentExtraPageHeader 默认插槽右侧空间VNode | v-slot-
tab-listPageHeader 插槽 footer 无时,显示标签列表Array<{key: string, tab: any}>-
tab-active-key标签列表当前激活 keystring-
tab-change标签列表 tab 被点击的回调(key) => void-
tab-props标签列表标签页属性tabs-

基本使用示例 Basic Usage

项目目录下 演示测试 or 项目引用示例

测试stackblitz

源项目仓库分支 Branch

来自 @ant-design-vue/pro-layout

  • next : Vue3 + ant-design-vue@3.x (latest)
  • v3.1 : Vue3 + ant-design-vue@2.2.x (release LTS)
  • v2 : Vue2 + ant-design-vue@1.7.x

当前版本,还在持续更新 v4

持续维护 Continuous Maintenance

# 安装所需依赖
npm install

# 打包生成dist目录含d.ts文件
npm run build
4.2.0

7 months ago

4.1.9

8 months ago

4.1.8

8 months ago

3.3.5

1 year ago

4.1.7

1 year ago

4.1.4

1 year ago

4.1.3

1 year ago

4.1.0

1 year ago

4.0.8

1 year ago

4.0.5

1 year ago

4.0.4

1 year ago

4.0.3

1 year ago

4.0.1

1 year ago

4.0.0

1 year ago

3.2.6

2 years ago

3.2.5

2 years ago