You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
5.8 KiB
TypeScript

1 year ago
import type { MenuTheme } from 'ant-design-vue/es/menu'
import type { PropType } from 'vue'
export interface MenuDataItem {
children?: MenuDataItem[]
hideChildrenInMenu?: boolean
hideInMenu?: boolean
icon?: any
locale?: string | false
name?: string
key?: string
pro_layout_parentKeys?: string[]
path?: string
parentKeys?: string[]
[key: string]: any
}
/**
*
* @type 'Fluid' | 'Fixed'
*/
export type ContentWidth = 'Fluid' | 'Fixed'
/**
* layout
* @type 'side' | 'top' | 'mix'
*/
export type LayoutMode = 'side' | 'top' | 'mix'
export type RenderSetting = {
headerRender?: false
footerRender?: false
menuRender?: false
menuHeaderRender?: false
}
export type PureSettings = {
/**
* theme for nav menu
*
* @type "light" | "dark" | "realDark"
*/
navTheme?: MenuTheme | 'realDark' | undefined
/**
* mix
* @type "light" | "dark"
*/
headerTheme?: MenuTheme
/**
* customize header height
* @example 64 headerHeight={64}
*/
headerHeight?: number
/**
* layout
* @type 'side' | 'top' | 'mix'
*
* @example layout="top"
* @example layout="side"
* @example layout="mix"
*/
layout?: LayoutMode
/** layout of content: `Fluid` or `Fixed`, only works when layout is top */
contentWidth?: ContentWidth
/** sticky header */
fixedHeader?: boolean
/** sticky siderbar */
fixSiderbar?: boolean
/**
* menu
*
* @example menu={{ locale: false }}
* @example menu={{ defaultOpenAll:true }}
* @example loading menu={{ loading: true }}
* @example menu={{params:{ pathname } request: async (params) => { return [{name:"主页",path=params.pathname}]} }}
* @example 使 MenuGroup menu={{ mode: 'group' }}
* @example menu={{ autoClose: false }}
* @example menu={{ ignoreFlatMenu: true }}
*/
menu?: {
/**
*
*/
locale?: boolean
/**
*
*/
defaultOpenAll?: boolean
/**
*
*/
ignoreFlatMenu?: boolean
/**
* loading
*/
loading?: boolean
/**
* loading
*/
onLoadingChange?: (loading?: boolean) => void
/**
* params request
*
*/
params?: Record<string, any>
/**
* params request
*/
request?: (
params: Record<string, any>,
defaultMenuData: MenuDataItem[]
) => Promise<MenuDataItem[]>
/**
*
*/
type?: 'sub' | 'group'
/**
*
*/
autoClose?: false
}
/**
* false layout pageName pageName - title
*
* Layout title
*/
title?: string | false
/**
* Your custom iconfont Symbol script Url eg//at.alicdn.com/t/font_1039637_btcrd5co4w.js
* Iconfont Usage: https://github.com/ant-design/ant-design-pro/pull/3517
*/
iconfontUrl?: string
/** 主色,需要配合 umi 使用 */
primaryColor?: string
/** 全局增加滤镜 */
colorWeak?: boolean
/**
* mix
*
*
*/
splitMenus?: boolean
}
export type ProSettings = PureSettings & RenderSetting
export const defaultSettings: ProSettings = {
navTheme: 'dark',
headerTheme: 'dark',
layout: 'side',
contentWidth: 'Fluid',
fixedHeader: false,
fixSiderbar: false,
headerHeight: 48,
iconfontUrl: '',
primaryColor: '#1890ff',
splitMenus: false,
// 布局内容默认都渲染
headerRender: undefined,
footerRender: undefined,
menuRender: undefined,
menuHeaderRender: undefined
}
export const pureSettingsProps = {
navTheme: {
type: String as PropType<PureSettings['navTheme']>,
default: defaultSettings.navTheme
},
headerTheme: {
type: String as PropType<PureSettings['headerTheme']>,
default: defaultSettings.headerTheme
},
headerHeight: {
type: Number as PropType<PureSettings['headerHeight']>,
default: defaultSettings.headerHeight
},
layout: {
type: String as PropType<PureSettings['layout']>,
default: defaultSettings.layout
},
contentWidth: {
type: String as PropType<PureSettings['contentWidth']>,
default: defaultSettings.contentWidth
},
fixedHeader: {
type: Boolean as PropType<PureSettings['fixedHeader']>,
default: defaultSettings.fixedHeader
},
fixSiderbar: {
type: Boolean as PropType<PureSettings['fixSiderbar']>,
default: defaultSettings.fixSiderbar
},
menu: {
type: Object as PropType<PureSettings['menu']>,
default: () => {
return {
locale: false
}
}
},
title: {
type: String as PropType<PureSettings['title']>,
default: () => defaultSettings.title
},
iconfontUrl: {
type: String as PropType<PureSettings['iconfontUrl']>,
default: () => defaultSettings.iconfontUrl
},
primaryColor: {
type: String as PropType<PureSettings['primaryColor']>,
default: () => defaultSettings.primaryColor
},
colorWeak: {
type: Boolean as PropType<PureSettings['colorWeak']>,
default: () => defaultSettings.colorWeak
},
splitMenus: {
type: Boolean,
default: false
}
}