UNPKG

@pwc-ra/components

Version:

PwC RA shared components library

255 lines (189 loc) 6.67 kB
# PwC RA Components - PageHeader 组件 PageHeader 是 PwC RA Components 组件库中的一个核心组件,用于提供统一的页面头部导航栏,包含产品菜单、用户信息、租户选择等功能。 ## 安装 ### 1. 添加依赖 ```bash # 使用 npm npm install @pwc-ra/components # 使用 yarn yarn add @pwc-ra/components ``` ### 2. 安装对等依赖 该组件库依赖以下包,请确保它们已安装: ```bash npm install react react-dom antd @ant-design/icons axios keycloak-js react-router-dom ``` ## 使用方法 ### 基本用法 ```tsx import React, { useState } from 'react'; import { Layout } from 'antd'; import { PageHeader, PageHeaderProvider } from '@pwc-ra/components'; const { Content } = Layout; const App: React.FC = () => { const [collapsed, setCollapsed] = useState(false); const handleCollapse = () => { setCollapsed(!collapsed); }; return ( <Layout style={{ minHeight: '100vh' }}> <PageHeader collapsed={collapsed} onCollapse={handleCollapse} /> <Content style={{ marginTop: 64, padding: 24 }}> {/* 页面内容 */} </Content> </Layout> ); }; export default App; ``` ### 产品切换回调 ```tsx import React, { useState } from 'react'; import { Layout } from 'antd'; import { PageHeader } from '@pwc-ra/components'; const { Content } = Layout; const App: React.FC = () => { const [collapsed, setCollapsed] = useState(false); const handleCollapse = () => { setCollapsed(!collapsed); }; const handleProductChange = (productId: string) => { console.log(`切换到产品: ${productId}`); // 可以在这里处理产品切换逻辑,例如跳转到对应产品页面 }; return ( <Layout style={{ minHeight: '100vh' }}> <PageHeader collapsed={collapsed} onCollapse={handleCollapse} onProductChange={handleProductChange} /> <Content style={{ marginTop: 64, padding: 24 }}> {/* 页面内容 */} </Content> </Layout> ); }; export default App; ``` ### 使用全局状态 PageHeader 组件提供了全局状态管理,可以在应用的任何地方访问用户信息和租户信息: ```tsx import React from 'react'; import { PageHeaderState } from '@pwc-ra/components'; const UserInfo: React.FC = () => { // 获取当前用户信息 const currentUser = PageHeaderState.getCurrentUser(); // 获取当前选中的租户 const selectedTenant = PageHeaderState.getSelectedTenant(); // 监听状态变化 React.useEffect(() => { const unsubscribe = PageHeaderState.subscribe((state) => { console.log('状态已更新:', state); }); // 组件卸载时取消订阅 return unsubscribe; }, []); return ( <div> <h2>当前用户: {currentUser?.username}</h2> <h3>当前租户: {selectedTenant?.name}</h3> </div> ); }; export default UserInfo; ``` ## API ### PageHeader | 属性 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | collapsed | 侧边栏是否折叠 | boolean | - | | onCollapse | 侧边栏折叠状态改变时的回调函数 | () => void | - | | onProductChange | 产品切换时的回调函数 | (productId: string) => void | - | | extra | 自定义额外内容,将显示在顶部导航栏右侧 | ReactNode | - | ### PageHeaderProvider PageHeaderProvider 是一个 Context Provider,用于提供用户信息、租户信息等全局状态。通常不需要直接使用,因为 PageHeader 组件内部已经包含了 PageHeaderProvider。 ### usePageHeader usePageHeader 是一个自定义 Hook,用于在组件中访问 PageHeader 的上下文。 ```tsx const { currentUser, // 当前用户信息 loading, // 加载状态 error, // 错误信息 selectedTenant, // 当前选中的租户 setSelectedTenant, // 设置当前租户 logout // 登出函数 } = usePageHeader(); ``` ### PageHeaderState PageHeaderState 是一个全局状态对象,可以在应用的任何地方访问 PageHeader 的状态。 | 方法 | 说明 | 参数 | 返回值 | | --- | --- | --- | --- | | getCurrentUser | 获取当前用户信息 | - | User \| null | | getSelectedTenant | 获取当前选中的租户 | - | { id: string; code: string; name: string; } \| null | | isLoading | 获取加载状态 | - | boolean | | getError | 获取错误信息 | - | string \| null | | subscribe | 订阅状态变化 | (state: GlobalPageHeaderState) => void | () => void | ### MainLayout | 属性 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | menuItems | 侧边栏菜单项配置 | MenuItem[] | - | | productName | 产品名称 | string | - | | productIcon | 产品图标 | ReactNode | - | | children | 内容区域 | ReactNode | - | | breadcrumb | 面包屑组件 | ReactNode | - | | defaultCollapsed | 初始侧边栏是否折叠 | boolean | false | | contentStyle | 自定义内容区域样式 | CSSProperties | - | | contentWrapperStyle | 自定义内容包装区域样式 | CSSProperties | - | | className | 自定义类名 | string | - | | headerExtra | 自定义顶部导航栏额外内容 | ReactNode | - | ## 类型定义 ### User ```typescript interface User { id: string; username: string; email: string; tenants: Array<{ id: string; code: string; name: string; }>; } ``` ### Product ```typescript interface Product { id: string; name: string; url: string; icon?: string; category?: string; order?: number; } ``` ## 注意事项 1. PageHeader 组件需要配置 Keycloak 认证服务,默认会从 `/api/public/keycloak-config` 获取配置信息。 2. 产品菜单数据默认从 `/api/public/product-menu` 获取,需要后端提供相应的 API。 3. 用户信息默认从 `/auth/users/me` 获取,需要后端提供相应的 API。 4. 组件默认使用 Ant Design 的样式,请确保项目中已正确配置 Ant Design。 ## 应用模板生成器 本库包含一个应用模板生成器,可以帮助您快速创建一个集成了 MainLayout、Sidebar、Breadcrumb 和 PageHeader 组件的 React 应用。 ### 使用方法 ```bash # 使用 npx 直接运行 npx @pwc-ra/components/templates/create-ra-app my-app # 或者在安装了 @pwc-ra/components 的项目中 npx ./node_modules/@pwc-ra/components/templates/create-ra-app my-app ``` ### 命令行选项 - `--use-npm`: 使用 npm 而不是 yarn 安装依赖 - `--skip-install`: 跳过依赖安装 示例: ```bash npx @pwc-ra/components/templates/create-ra-app my-app --use-npm ``` 更多信息请参考 [模板生成器文档](./templates/create-ra-app/README.md)。