SettingsTabs.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * 移动端标签导航组件
  3. * 使用 Ant Design Tabs 组件实现一级分类导航
  4. * 二级分区通过内容区的列表展示
  5. */
  6. import React from 'react';
  7. import { Tabs } from 'antd';
  8. import type { TabsProps } from 'antd';
  9. import { settingsConfig } from './config';
  10. import { LAYOUT_DIMENSIONS } from './constants';
  11. import type { NavigationState } from './types';
  12. interface SettingsTabsProps {
  13. /** 当前导航状态 */
  14. navigation: NavigationState;
  15. /** 分类切换回调 */
  16. onCategoryChange: (categoryId: string) => void;
  17. }
  18. /**
  19. * 移动端标签导航
  20. * Layout: Fixed Header Tabs (固定顶部标签)
  21. * Component: Tabs (Ant Design)
  22. */
  23. const SettingsTabs: React.FC<SettingsTabsProps> = ({
  24. navigation,
  25. onCategoryChange,
  26. }) => {
  27. // 构建标签项
  28. const tabItems: TabsProps['items'] = settingsConfig.map((category) => ({
  29. key: category.id,
  30. label: (
  31. <span>
  32. {category.icon}
  33. <span style={{ marginLeft: 8 }}>{category.title}</span>
  34. </span>
  35. ),
  36. }));
  37. // 处理标签切换
  38. const handleTabChange = (activeKey: string) => {
  39. onCategoryChange(activeKey);
  40. };
  41. return (
  42. <div
  43. style={{
  44. width: '100%',
  45. height: LAYOUT_DIMENSIONS.MOBILE_TABS_HEIGHT,
  46. borderBottom: '1px solid #f0f0f0',
  47. }}
  48. >
  49. <Tabs
  50. activeKey={navigation.activeCategory}
  51. items={tabItems}
  52. onChange={handleTabChange}
  53. centered
  54. size="small"
  55. style={{
  56. height: '100%',
  57. }}
  58. />
  59. </div>
  60. );
  61. };
  62. export default SettingsTabs;