Header.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import AppDefaultIcon from '@/new-components/common/AppDefaultIcon';
  2. import { ExportOutlined } from '@ant-design/icons';
  3. import { App, Typography } from 'antd';
  4. import copy from 'copy-to-clipboard';
  5. import React, { memo, useContext, useState } from 'react';
  6. import { MobileChatContext } from '../';
  7. const Header: React.FC = () => {
  8. const { appInfo } = useContext(MobileChatContext);
  9. const { message } = App.useApp();
  10. const [count, setCount] = useState(0);
  11. if (!appInfo?.app_code) {
  12. return null;
  13. }
  14. const shareApp = async () => {
  15. const success = copy(`dingtalk://dingtalkclient/page/link?url=${encodeURIComponent(location.href)}&pc_slide=true`);
  16. message[success ? 'success' : 'error'](success ? '复制成功' : '复制失败');
  17. };
  18. if (count > 6) {
  19. message.info(JSON.stringify(window.navigator.userAgent), 2, () => {
  20. setCount(0);
  21. });
  22. }
  23. return (
  24. <header className='flex w-full items-center justify-between bg-[rgba(255,255,255,0.9)] border dark:bg-black dark:border-[rgba(255,255,255,0.6)] rounded-xl mx-auto px-4 py-2 mb-4 sticky top-4 z-50 mt-4 shadow-md'>
  25. <div className='flex gap-2 items-center' onClick={() => setCount(count + 1)}>
  26. <AppDefaultIcon scene={appInfo?.team_context?.chat_scene || 'chat_agent'} width={8} height={8} />
  27. <div className='flex flex-col ml-2'>
  28. <Typography.Text className='text-md font-bold line-clamp-2'>{appInfo?.app_name}</Typography.Text>
  29. <Typography.Text className='text-sm line-clamp-2'>{appInfo?.app_describe}</Typography.Text>
  30. </div>
  31. </div>
  32. <div
  33. onClick={shareApp}
  34. className='flex items-center justify-center w-10 h-10 bg-[#ffffff99] dark:bg-[rgba(255,255,255,0.2)] border border-white dark:border-[rgba(255,255,255,0.2)] rounded-[50%] cursor-pointer'
  35. >
  36. <ExportOutlined className='text-lg' />
  37. </div>
  38. </header>
  39. );
  40. };
  41. export default memo(Header);