PricingCharts.jsx 2.78 KB
Newer Older
1
import React, { useState } from 'react';
fisherdaddy's avatar
fisherdaddy committed
2
import { useScrollToTop } from '../hooks/useScrollToTop';
3 4 5 6
import PricingChart from '../components/PricingChart';
import OpenaiPricing from '../data/openai-pricing.json';
import LLMPricing from '../data/llm-pricing.json';
import VisionPricing from '../data/vision-model-pricing.json';
7 8 9 10 11
import ModelRanking from '../data/model-ranking.json';
import ModelRankingMath from '../data/model-ranking-math.json';
import ModelRankingCode from '../data/model-ranking-code.json';
import ModelRankingWeb from '../data/model-ranking-web.json';
import ModelRankingWriting from '../data/model-ranking-writing.json';
12
import ModelRankingVision from '../data/model-ranking-vision.json';
fisherdaddy's avatar
fisherdaddy committed
13
import SEO from '../components/SEO';
14 15
import { usePageLoading } from '../hooks/usePageLoading';
import LoadingOverlay from './LoadingOverlay';
16

17 18 19 20 21 22 23 24 25
const TabRankingCharts = () => {
  const [activeTab, setActiveTab] = useState('general');

  const tabs = [
    { id: 'general', name: '综合能力', data: ModelRanking },
    { id: 'math', name: '数学能力', data: ModelRankingMath },
    { id: 'code', name: '代码能力', data: ModelRankingCode },
    { id: 'web', name: 'Web 开发能力', data: ModelRankingWeb },
    { id: 'writing', name: '写作能力', data: ModelRankingWriting },
26
    { id: 'image', name: '视觉能力', data: ModelRankingVision },
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
  ];

  return (
    <div className="tab-ranking-charts">
      <div className="tab-buttons">
        {tabs.map((tab) => (
          <button
            key={tab.id}
            className={`tab-button ${activeTab === tab.id ? 'active' : ''}`}
            onClick={() => setActiveTab(tab.id)}
          >
            {tab.name}
          </button>
        ))}
      </div>
      <div className="tab-content">
        {tabs.map((tab) => (
          <div
            key={tab.id}
            className={`tab-pane ${activeTab === tab.id ? 'active' : ''}`}
            style={{ display: activeTab === tab.id ? 'block' : 'none' }}
          >
            <PricingChart data={tab.data} showPricing={false} />
          </div>
        ))}
      </div>
    </div>
  );
};

57
const PricingCharts = () => {
fisherdaddy's avatar
fisherdaddy committed
58
  useScrollToTop();
59
  const isLoading = usePageLoading();
60
  const lastUpdateTime = '2025-02-06 18:00';
61 62

  return (
fisherdaddy's avatar
fisherdaddy committed
63 64
    <>
      <SEO
65 66
        title="AI Model Pricing & Ranking Comparison"
        description="Compare prices and performance rankings of different AI models"
fisherdaddy's avatar
fisherdaddy committed
67
      />
68
      {isLoading && <LoadingOverlay />}
fisherdaddy's avatar
fisherdaddy committed
69
      <div className="pricing-charts-container">
fisherdaddy's avatar
fisherdaddy committed
70 71 72
        <div className="update-time">
          Last Updated: {lastUpdateTime}
        </div>
fisherdaddy's avatar
fisherdaddy committed
73 74 75
        <PricingChart data={OpenaiPricing} />
        <PricingChart data={LLMPricing} />
        <PricingChart data={VisionPricing} />
76
        <TabRankingCharts />
fisherdaddy's avatar
fisherdaddy committed
77 78
      </div>
    </>
79 80 81 82
  );
};

export default PricingCharts;