AppPlaza.tsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import React, { useState } from 'react';
  2. import { message } from 'antd';
  3. import { AppCard } from '@/components/common';
  4. import { getAppsByPageType } from '@/mock';
  5. import './AppPlaza.scss';
  6. /**
  7. * 应用广场(AppPlaza)- H5 移动端
  8. *
  9. * 根据分类 Tab 显示不同的应用列表
  10. * 复用主系统的 AppCard 组件,使用移动端样式
  11. */
  12. const AppPlaza: React.FC = () => {
  13. // 分类 Tab
  14. const categories = ['推荐', '收藏', '专业知识', '职能管理', '项目级应用', '其他'];
  15. const [activeCategory, setActiveCategory] = useState('推荐');
  16. // 页面类型映射
  17. const pageTypeMap: Record<string, string> = {
  18. '推荐': 'appPlaza',
  19. '收藏': 'myApps', // 收藏的应用
  20. '专业知识': 'professional',
  21. '职能管理': 'functional',
  22. '项目级应用': 'project',
  23. '其他': 'otherApps',
  24. };
  25. // 获取应用数据
  26. const pageType = pageTypeMap[activeCategory] || 'appPlaza';
  27. const apps = getAppsByPageType(pageType as any).slice(0, 10);
  28. // 处理卡片点击
  29. const handleCardClick = (appId: string) => {
  30. console.log('点击应用:', appId);
  31. message.info('打开应用');
  32. };
  33. return (
  34. <div className="app-plaza">
  35. {/* 分类 Tab */}
  36. <div className="category-tabs">
  37. {categories.map((cat) => (
  38. <button
  39. key={cat}
  40. className={`category-tab ${activeCategory === cat ? 'active' : ''}`}
  41. onClick={() => setActiveCategory(cat)}
  42. >
  43. {cat}
  44. </button>
  45. ))}
  46. </div>
  47. {/* 2 列卡片网格 */}
  48. <div className="app-grid">
  49. {apps.map((app) => (
  50. <div
  51. key={app.id}
  52. className="app-card-wrapper"
  53. onClick={() => handleCardClick(app.id)}
  54. >
  55. <AppCard
  56. {...app}
  57. showCreator={false}
  58. showTags={false}
  59. showCertification={false}
  60. showViewCount={false}
  61. showFavoriteCount={false}
  62. showCreateTime={false}
  63. showOperations={false}
  64. className="mobile-app-card"
  65. />
  66. </div>
  67. ))}
  68. </div>
  69. </div>
  70. );
  71. };
  72. export default AppPlaza;