Header.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import * as React from 'react';
  2. import { Layout, MenuProps, Modal, Dropdown, Select, Button, Tooltip } from 'antd';
  3. import { CaretDownOutlined, LogoutOutlined } from '@ant-design/icons';
  4. import { useNavigate, useLocation } from 'react-router-dom';
  5. import logoSrc from '@/assets/public/logo.png';
  6. import router from '@/router';
  7. import LocalStorage from '@/LocalStorage';
  8. const { Header: AntdHeader } = Layout;
  9. interface Props {
  10. userName: string,
  11. onClickLogout: () => Promise<any>,
  12. onSelectChange: (value: number) => void; // 新增回调函数
  13. currentMenuType: number;
  14. };
  15. const Header: React.FC<Props> = (props: Props) => {
  16. const {
  17. userName,
  18. onClickLogout,
  19. onSelectChange,
  20. currentMenuType
  21. } = props;
  22. const navigate = useNavigate();
  23. const location = useLocation();
  24. const isHelp = location.pathname.startsWith('/help');
  25. // const items: MenuProps['items'] = [
  26. // // 移除退出登录选项,现在使用独立的登出按钮
  27. // ];
  28. const fruits = [
  29. { id: 1, name: 'DeepSeek' },
  30. { id: 2, name: '智谱' },
  31. ];
  32. const [open, setOpen] = React.useState(false); // 控制下拉框展开状态
  33. const onDropdownVisibleChange = (visible: boolean) => {
  34. setOpen(visible);
  35. };
  36. const handleLogoClick = () => {
  37. if (isHelp) {
  38. // 在帮助文档页面,点击跳转到首页
  39. navigate('/deepseek/questionAnswer');
  40. }
  41. };
  42. return (
  43. <AntdHeader className='header'>
  44. <div className='header-logo'>
  45. <img className='header-logo-picture' src={logoSrc} />
  46. <div
  47. className='header-logo-text'
  48. onClick={handleLogoClick}
  49. style={isHelp ? { cursor: 'pointer', userSelect: 'none' } : {}}
  50. >
  51. 建科•小智应用广场
  52. </div>
  53. {/* <Select
  54. className='header-platform-selector'
  55. open={open}
  56. value={currentMenuType}
  57. onChange={onSelectChange}
  58. placeholder="请选择"
  59. onDropdownVisibleChange={onDropdownVisibleChange}
  60. onClick={(e) => e.stopPropagation()} // 阻止事件冒泡
  61. >
  62. {fruits.map(fruit => (
  63. <Select.Option key={fruit.id} value={fruit.id}>
  64. {fruit.name}
  65. </Select.Option>
  66. ))}
  67. </Select> */}
  68. </div>
  69. <div className='header-user-section'>
  70. <div className='header-operation'>
  71. <div className='header-operation-picture'>
  72. {userName.slice(0, 1)}
  73. </div>
  74. <div className='header-operation-name'>
  75. {userName}
  76. </div>
  77. {/* <CaretDownOutlined className='header-operation-down' /> */}
  78. </div>
  79. <Tooltip title="退出登录" placement="bottom">
  80. <Button
  81. type="text"
  82. icon={<LogoutOutlined />}
  83. className='header-logout-btn'
  84. onClick={() => {
  85. Modal.confirm({
  86. title: '提示',
  87. content: '确定退出平台吗?',
  88. async onOk() {
  89. await onClickLogout();
  90. }
  91. });
  92. }}
  93. />
  94. </Tooltip>
  95. </div>
  96. </AntdHeader>
  97. );
  98. };
  99. export default Header;