/genuine-theme

Primary LanguageJavaScriptMIT LicenseMIT

使用

npm i @hi-ui/genuine-theme --save
// or
yarn add @hi-ui/genuine-theme
import Theme from '@hi-ui/genuine-theme'

render(<Theme />, document.getElementById('app'))

示例

基于配置化实现主题布局和菜单匹配,数组中元素的层级即代表其在菜单中的层级

import React, { Component } from 'react'
import { Theme } from '@hi-ui/genuine-theme'
import { Link } from 'react-router-dom'
import { Input, Icon } from '@hi-ui/hiui'

const Mi = () => <div>小米手机</div>
const RedMi = () => <div>红米手机</div>
const BlackShark = () => <div>黑鲨手机</div>
const TV = () => <div>小米电视</div>
const SoundBox = () => (
  <div>
    小米音响<Link to='/robot-detail/1?b=1'>去详情页</Link>
  </div>
)
const Robot = () => <div>米家扫地机器人</div>
const RobotDetail = () => <div>米家扫地机器人详情页</div>

const routeConfig = [
  {
    name: '手机',
    children: [
      { name: '小米', path: '/mi', component: Mi },
      { name: '红米', path: '/red-mi', component: RedMi, withoutLayout: true },
      { name: '黑鲨', path: '/black-shark', component: BlackShark }
    ]
  },
  { name: '电视', path: '/tv', component: TV },
  {
    name: '智能硬件',
    children: [
      { name: '音响', path: '/audio', component: SoundBox },
      { name: '扫地机器人', path: '/robot', component: Robot },
      { path: '/robot-detail/:id', component: RobotDetail }
    ]
  }
]

const logoConfig = {
  logoUrl: 'https://xiaomi.github.io/hiui/static/img/logo.png?241e0618fe55d933c280e38954edea05',
  name: 'HIUI Theme',
  url: 'https://xiaomi.github.io/hiui/#/'
}

const loginConfig = {
  name: 'Mi Guest',
  icon: 'user',
  children: [
    <div key='1' style={{ textAlign: 'center', margin: 4, width: '100px' }}>
      <a href='#info'>个人信息</a>
    </div>,
    <div key='2' style={{ textAlign: 'center', margin: 4, width: 100 }}>
      <a href='#logout'>注销</a>
    </div>
  ]
}
const toolbar = [<Input key='1' />, <Icon key='2' name='prompt' />]

class App extends Component {
  render() {
    return <Theme routes={routeConfig} logo={logoConfig} login={loginConfig} toolbar={toolbar} />
  }
}

export default App

关于路由跳转

组件内

使用 react-router <Link /> 即可

API 跳转

内部对 react-router 的 history 进行了封装

import Theme, {History} from '@hi-ui/genuine-theme'

History[`${your history type}`].push()

详细使用可参考 react-router 官网

API

Theme

属性名 描述 类型 默认值
type 主题类型 'classic' | 'genuine'
'classic'
dynamic 开启动态布局 boolean
true
routes 路由配置项 Route[] -
logo 系统 logo ReactNode -
login 系统登录配置项 ReactNode -
historyType 路由跳转类型 'hashHistory' | 'browserHistory' 'browserHistory'
header genuine 类型下的顶部功能栏 ReactNode | null 不传时默认为主题自带 header
apperance 主题外观配置项 Apperance {color:'dark'}
logo 主题 logo 配置项 Logo | (toggle: boolean) => Logo -
login 主题登录信息配置项 Login -
toolbar 顶部工具栏,一般用于放置通知、全局搜索等 ReactNode -
pageHeader 自定义页头 (selectedMenus: Route [], location: Location) => ReactNode -
defaultExpandAll 是否默认展开侧边栏菜单 boolean false
siderTopRender 侧边栏自定义顶部渲染区域 (toggle: boolean) => ReactNode -
siderBottomRender 侧边栏自定义底部渲染区域 (toggle: boolean) => ReactNode -
accordion 左侧菜单是否采用手风琴模式 boolean true
basename 路由基础路径 string '/'
authority 用户拥有权限配置 string[] -
fallback 路由无法匹配时的候补跳转 string -
onToggle 侧边栏展开收起触发的回调 mini: boolean => void -

type: Route

属性名 描述 类型 默认值
name 菜单名称 string -
icon 菜单 icon string -
children 子菜单配置项 Route[] -
path 菜单跳转路径 string -
exact 菜单跳转路径是否严格匹配对应的 component boolean true
component 菜单对应页面组件 ReactNode -
withoutLayout 页面组件渲染时,不显示顶部导航栏和侧边栏 boolean false
extraData 向路由匹配的页面组件注入额外的数据 object -
authority 允许访问该路由的权限 string[] -

type: Apperance

属性名 描述 类型 默认值
color 主题颜色 'dark' | 'light' 'dark'
contentBackground 内容区域背景色 string '#f6f6f6'
contentPadding 内容区域内边距 number 0

tye: Logo

属性名 描述 类型 默认值
name 系统名称 string -
logoUrl logo 图片地址 string -
url 点击 logo 跳转地址 string -

type: Login

属性名 描述 类型 默认值
name 登录用户姓名 string -
icon 登录用户 icon string -
children 登录菜单项 ReactNode[] -