VariationModal.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. interface VariationModalProps {
  2. isOpen: boolean;
  3. onClose: () => void;
  4. }
  5. export function VariationModal({ isOpen, onClose }: VariationModalProps) {
  6. // 如果弹窗未打开,不渲染任何内容
  7. if (!isOpen) {
  8. return null;
  9. }
  10. // 示例数据 - 实际应该从API获取
  11. const variationData = [
  12. { metric: '资产总额', value: '+15.2%', color: 'text-blue-400' },
  13. { metric: '资产净额', value: '+12.8%', color: 'text-yellow-400' },
  14. { metric: '利润总额', value: '+8.5%', color: 'text-cyan-400' },
  15. { metric: '净利润', value: '+7.2%', color: 'text-purple-400' },
  16. { metric: '收入', value: '+18.3%', color: 'text-green-400' },
  17. { metric: '资产负债率', value: '-2.1%', color: 'text-red-400' },
  18. ];
  19. return (
  20. <>
  21. {/* 1. 遮罩层 - 提供视觉隔离和点击外部关闭功能 */}
  22. <div
  23. className="fixed inset-0 bg-black/60 backdrop-blur-sm z-50"
  24. onClick={onClose}
  25. />
  26. {/* 2. 弹出框容器 - 弹窗主体容器 */}
  27. <div className="fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 z-50 w-full max-w-2xl">
  28. <div className="bg-slate-800/90 backdrop-blur-md border border-slate-600/50 rounded-xl shadow-2xl">
  29. {/* 3. 弹出框数据 - 弹窗内容区域 */}
  30. <div className="p-8">
  31. {/* 标题 */}
  32. <div className="text-center mb-8">
  33. <h2 className="text-2xl font-bold text-white mb-2">
  34. 财务指标变动幅度
  35. </h2>
  36. <p className="text-slate-400">
  37. 2024年与2023年相比的变动情况
  38. </p>
  39. </div>
  40. {/* 数据网格 */}
  41. <div className="grid grid-cols-2 gap-6">
  42. {variationData.map((item) => (
  43. <div
  44. key={item.metric}
  45. className="bg-slate-700/50 backdrop-blur-sm rounded-lg p-4 border border-slate-600/30"
  46. >
  47. <div className="text-center">
  48. <div className="text-lg font-medium text-white mb-2">
  49. {item.metric}
  50. </div>
  51. <div className={`text-2xl font-bold ${item.color}`}>
  52. {item.value}
  53. </div>
  54. </div>
  55. </div>
  56. ))}
  57. </div>
  58. {/* 4. 返回按钮 - 弹窗操作控件 */}
  59. <div className="flex justify-center mt-8">
  60. <button
  61. onClick={onClose}
  62. className="bg-blue-600 hover:bg-blue-700 text-white px-8 py-3 rounded-lg font-medium transition-colors duration-200 shadow-lg hover:shadow-xl"
  63. >
  64. 返回
  65. </button>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </>
  71. );
  72. }