|
@@ -1,355 +0,0 @@
|
|
|
-import { useState } from 'react';
|
|
|
|
|
-import { useQuery } from '@tanstack/react-query';
|
|
|
|
|
-import { AssetMetrics } from './components/AssetMetrics';
|
|
|
|
|
-import { ProfitMetrics } from './components/ProfitMetrics';
|
|
|
|
|
-import { IncomeMetrics } from './components/IncomeMetrics';
|
|
|
|
|
-import { DebtRatioMetrics } from './components/DebtRatioMetrics';
|
|
|
|
|
-import { VariationModal } from './components/VariationModal';
|
|
|
|
|
-import { dashClient } from '../../../api';
|
|
|
|
|
-
|
|
|
|
|
-// 图片资源常量 - 这些URL来自Figma设计
|
|
|
|
|
-const imgProperty1 = "https://www.figma.com/api/mcp/asset/ad3f1fa8-0cec-4ff9-a24b-f3dea29b0925";
|
|
|
|
|
-const imgEllipse4119 = "https://www.figma.com/api/mcp/asset/fcf74522-1000-42fd-8999-d2f9337c522e";
|
|
|
|
|
-const img6 = "https://www.figma.com/api/mcp/asset/816963c1-ec66-4f4f-9e3c-8c00047d33dd";
|
|
|
|
|
-const img7 = "https://www.figma.com/api/mcp/asset/22bc7622-a7da-401d-9451-5cf73bd1532c";
|
|
|
|
|
-const img8 = "https://www.figma.com/api/mcp/asset/4a995039-f8b4-4442-9960-d25cd2d1958f";
|
|
|
|
|
-const img9 = "https://www.figma.com/api/mcp/asset/9a551809-608f-48bc-889b-7c0c5823b923";
|
|
|
|
|
-const img10 = "https://www.figma.com/api/mcp/asset/ded89b08-063f-4157-9180-3f5db085cd63";
|
|
|
|
|
-const img11 = "https://www.figma.com/api/mcp/asset/67c8f7ae-1bee-4847-b616-fa67f0b69404";
|
|
|
|
|
-const img12 = "https://www.figma.com/api/mcp/asset/bd7171cc-ccf5-448f-b785-68a5378281d6";
|
|
|
|
|
-const img13 = "https://www.figma.com/api/mcp/asset/fab64b95-af76-4ae2-9f5c-6448dca5dd51";
|
|
|
|
|
-
|
|
|
|
|
-interface FinancialData {
|
|
|
|
|
- code: number;
|
|
|
|
|
- msg: string;
|
|
|
|
|
- rows: Array<{
|
|
|
|
|
- assetTotalNet: Array<{
|
|
|
|
|
- id: number;
|
|
|
|
|
- year: number;
|
|
|
|
|
- assetTotal: number;
|
|
|
|
|
- assetNet: number;
|
|
|
|
|
- dataDeadline: string;
|
|
|
|
|
- createTime: string;
|
|
|
|
|
- updateTime: string;
|
|
|
|
|
- }>;
|
|
|
|
|
- profitTotalNet: Array<{
|
|
|
|
|
- id: number;
|
|
|
|
|
- year: number;
|
|
|
|
|
- profitTotal: number;
|
|
|
|
|
- profitNet: number;
|
|
|
|
|
- dataDeadline: string;
|
|
|
|
|
- createTime: string;
|
|
|
|
|
- updateTime: string;
|
|
|
|
|
- }>;
|
|
|
|
|
- incomeStatement: Array<{
|
|
|
|
|
- id: number;
|
|
|
|
|
- year: number;
|
|
|
|
|
- income: number;
|
|
|
|
|
- dataDeadline: string;
|
|
|
|
|
- createTime: string;
|
|
|
|
|
- updateTime: string;
|
|
|
|
|
- }>;
|
|
|
|
|
- assetLiabilityRatio: Array<{
|
|
|
|
|
- id: number;
|
|
|
|
|
- year: number;
|
|
|
|
|
- assetLiabilityRatio: number;
|
|
|
|
|
- dataDeadline: string;
|
|
|
|
|
- createTime: string;
|
|
|
|
|
- updateTime: string;
|
|
|
|
|
- }>;
|
|
|
|
|
- }>;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-export function FinancialDashboard() {
|
|
|
|
|
- const [isModalOpen, setIsModalOpen] = useState(false);
|
|
|
|
|
-
|
|
|
|
|
- // 获取财务数据
|
|
|
|
|
- const { data: financialData, isLoading, error } = useQuery({
|
|
|
|
|
- queryKey: ['financial-data'],
|
|
|
|
|
- queryFn: async () => {
|
|
|
|
|
- const response = await dashClient.outlook.$get();
|
|
|
|
|
- return response.json() as Promise<FinancialData>;
|
|
|
|
|
- },
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- const handleOpenModal = () => {
|
|
|
|
|
- setIsModalOpen(true);
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- const handleCloseModal = () => {
|
|
|
|
|
- setIsModalOpen(false);
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- // 加载状态
|
|
|
|
|
- if (isLoading) {
|
|
|
|
|
- return (
|
|
|
|
|
- <div className="min-h-screen bg-gradient-to-br from-slate-900 via-slate-800 to-slate-900 text-white p-6 flex items-center justify-center">
|
|
|
|
|
- <div className="text-center">
|
|
|
|
|
- <div className="animate-spin rounded-full h-12 w-12 border-b-2 border-white mx-auto mb-4"></div>
|
|
|
|
|
- <p className="text-lg">加载财务数据中...</p>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- );
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 错误状态
|
|
|
|
|
- if (error) {
|
|
|
|
|
- return (
|
|
|
|
|
- <div className="min-h-screen bg-gradient-to-br from-slate-900 via-slate-800 to-slate-900 text-white p-6 flex items-center justify-center">
|
|
|
|
|
- <div className="text-center">
|
|
|
|
|
- <div className="text-red-400 text-4xl mb-4">⚠️</div>
|
|
|
|
|
- <h2 className="text-xl font-bold mb-2">数据加载失败</h2>
|
|
|
|
|
- <p className="text-slate-300">无法获取财务数据,请稍后重试</p>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- );
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 数据为空状态
|
|
|
|
|
- if (!financialData || !financialData.rows || financialData.rows.length === 0) {
|
|
|
|
|
- return (
|
|
|
|
|
- <div className="min-h-screen bg-gradient-to-br from-slate-900 via-slate-800 to-slate-900 text-white p-6 flex items-center justify-center">
|
|
|
|
|
- <div className="text-center">
|
|
|
|
|
- <div className="text-slate-400 text-4xl mb-4">📊</div>
|
|
|
|
|
- <h2 className="text-xl font-bold mb-2">暂无财务数据</h2>
|
|
|
|
|
- <p className="text-slate-300">当前没有可显示的财务数据</p>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- );
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- const financialRow = financialData.rows[0];
|
|
|
|
|
-
|
|
|
|
|
- return (
|
|
|
|
|
- <div className="relative w-[1920px] h-[1080px] overflow-hidden">
|
|
|
|
|
- {/* 背景层 */}
|
|
|
|
|
- <div className="absolute inset-0 pointer-events-none">
|
|
|
|
|
- <img
|
|
|
|
|
- alt="背景"
|
|
|
|
|
- className="absolute max-w-none object-cover size-full"
|
|
|
|
|
- src={imgProperty1}
|
|
|
|
|
- />
|
|
|
|
|
- <div className="absolute bg-[rgba(33,33,33,0.6)] inset-0" />
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 头部装饰 */}
|
|
|
|
|
- <div className="absolute h-[74px] left-0 top-px w-[1920px]">
|
|
|
|
|
- {/* 左侧装饰 */}
|
|
|
|
|
- <div className="absolute bottom-[13.48%] left-0 right-[65.73%] top-[-1.32%]">
|
|
|
|
|
- <img alt="装饰左" className="absolute h-[64.5px] left-0 top-0 w-[663px]" src={img6} />
|
|
|
|
|
- <img alt="装饰线条" className="absolute h-[8px] left-[124.5px] top-[27px] w-[301px]" src={img7} />
|
|
|
|
|
- <img alt="装饰细节" className="absolute h-0 left-0 top-[22px] w-[162px]" src={img8} />
|
|
|
|
|
- <img alt="装饰底部" className="absolute h-[22.5px] left-0 top-[42px] w-[661px]" src={img9} />
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 右侧装饰 */}
|
|
|
|
|
- <div className="absolute flex h-[65px] items-center justify-center left-[calc(50%+638px)] top-[calc(50%+-5.48px)] translate-x-[-50%] translate-y-[-50%] w-[658px]">
|
|
|
|
|
- <div className="flex-none rotate-[180deg] scale-y-[-100%]">
|
|
|
|
|
- <div className="h-[65px] relative w-[658px]">
|
|
|
|
|
- <img alt="装饰右" className="absolute h-[64.5px] left-0 top-0 w-[663px]" src={img6} />
|
|
|
|
|
- <img alt="装饰线条右" className="absolute h-[8px] left-[124.5px] top-[27px] w-[301px]" src={img7} />
|
|
|
|
|
- <img alt="装饰细节右" className="absolute h-0 left-0 top-[22px] w-[162px]" src={img8} />
|
|
|
|
|
- <img alt="装饰底部右" className="absolute h-[22.5px] left-0 top-[42px] w-[661px]" src={img9} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 标题区域 */}
|
|
|
|
|
- <div className="absolute h-[74px] left-[calc(50%+4px)] top-[calc(50%+-502px)] translate-x-[-50%] translate-y-[-50%] w-[690px]">
|
|
|
|
|
- <div className="absolute bottom-[-12.16%] left-[9.13%] right-[9.13%] top-full">
|
|
|
|
|
- <img alt="发光边" className="absolute inset-[-22.22%_-0.35%]" src={img10} />
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="absolute bottom-0 left-[0.14%] right-0 top-0">
|
|
|
|
|
- <img alt="标题背景" className="absolute inset-[-10.81%_-3.48%_-16.22%_-3.48%]" src={img11} />
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="[text-shadow:0px_0px_20px_#041441] absolute bg-clip-text bg-gradient-to-t font-['HarmonyOS_Sans_SC:Regular',sans-serif] from-[#cbced1] inset-[27.03%_36.23%_29.73%_35.94%] leading-[32px] not-italic text-[36px] text-center to-[#ffffff] to-[37.5%] tracking-[3px]" style={{ WebkitTextFillColor: "transparent" }}>
|
|
|
|
|
- 战 略 部 署
|
|
|
|
|
- </p>
|
|
|
|
|
- <div className="absolute bottom-0 left-[18.55%] right-[18.26%] top-full">
|
|
|
|
|
- <img alt="顶部导航" className="absolute bottom-[-2px] left-0 right-0 top-[-2px]" src={img12} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 四个数据模块网格布局 - 严格按照1920*1080分辨率 */}
|
|
|
|
|
- <div className="absolute content-stretch flex gap-[20px] items-center left-1/2 top-[79.5px] translate-x-[-50%]">
|
|
|
|
|
- {/* 左侧列 */}
|
|
|
|
|
- <div className="content-stretch flex flex-col gap-[16px] items-start relative shrink-0 w-[934.496px]">
|
|
|
|
|
- {/* 资产负债率模块 */}
|
|
|
|
|
- <div className="h-[480px] overflow-clip relative shrink-0 w-full">
|
|
|
|
|
- <div className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]">
|
|
|
|
|
- <img alt="模块底部" className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]" src={img13} />
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="absolute content-stretch flex flex-col gap-[20px] h-[388px] items-start left-[41.4px] top-[79px] w-[847.191px]">
|
|
|
|
|
- <div className="content-stretch flex items-start justify-between relative shrink-0 w-[847px]">
|
|
|
|
|
- <div className="content-stretch flex gap-[20px] items-center relative shrink-0 w-[93px]">
|
|
|
|
|
- <div className="content-stretch flex gap-[10px] h-[26px] items-center relative shrink-0">
|
|
|
|
|
- <div className="flex items-center justify-center relative shrink-0">
|
|
|
|
|
- <div className="flex-none rotate-[180deg]">
|
|
|
|
|
- {/* 这里应该放置柱形元素组件 */}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="flex flex-col font-['PingFang_SC:Regular',sans-serif] justify-center leading-[0] not-italic relative shrink-0 text-[18px] text-white w-[83px]">
|
|
|
|
|
- <p className="leading-[25.2px] whitespace-pre-wrap">资产总额</p>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="content-stretch flex gap-[20px] h-[26px] items-center relative shrink-0">
|
|
|
|
|
- <div className="flex items-center justify-center relative shrink-0">
|
|
|
|
|
- <div className="flex-none rotate-[180deg]">
|
|
|
|
|
- {/* 这里应该放置柱形元素组件 */}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="flex flex-col font-['PingFang_SC:Regular',sans-serif] h-[26px] justify-center leading-[0] not-italic relative shrink-0 text-[18px] text-white w-[80px]">
|
|
|
|
|
- <p className="leading-[25.2px] whitespace-pre-wrap">资产净额</p>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)]">
|
|
|
|
|
- *数据截止至2025年9月
|
|
|
|
|
- </p>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)]">
|
|
|
|
|
- 单位:亿元
|
|
|
|
|
- </p>
|
|
|
|
|
- {/* 这里应该放置图表组件 */}
|
|
|
|
|
- <AssetMetrics data={financialRow.assetTotalNet} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 收入模块 */}
|
|
|
|
|
- <div className="h-[480px] overflow-clip relative shrink-0 w-full">
|
|
|
|
|
- <div className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]">
|
|
|
|
|
- <img alt="模块底部" className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]" src={img13} />
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="absolute content-stretch flex flex-col gap-[10px] h-[399.296px] items-start left-[calc(50%+-0.25px)] top-[calc(50%+17.65px)] translate-x-[-50%] translate-y-[-50%] w-[847.001px]">
|
|
|
|
|
- <div className="content-stretch flex items-center justify-between relative shrink-0 w-full">
|
|
|
|
|
- <div className="content-stretch flex gap-[20px] items-end relative shrink-0">
|
|
|
|
|
- <div className="flex items-center justify-center relative shrink-0">
|
|
|
|
|
- <div className="flex-none rotate-[180deg]">
|
|
|
|
|
- {/* 这里应该放置柱形元素组件 */}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[18px] text-white">
|
|
|
|
|
- 收入
|
|
|
|
|
- </p>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)] w-[156px] whitespace-pre-wrap">
|
|
|
|
|
- *数据截止至2025年9月
|
|
|
|
|
- </p>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] h-[26px] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)] w-full whitespace-pre-wrap">
|
|
|
|
|
- 单位:亿元
|
|
|
|
|
- </p>
|
|
|
|
|
- {/* 这里应该放置图表组件 */}
|
|
|
|
|
- <IncomeMetrics data={financialRow.incomeStatement} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 右侧列 */}
|
|
|
|
|
- <div className="content-stretch flex flex-col gap-[16px] items-start relative shrink-0 w-[934.496px]">
|
|
|
|
|
- {/* 利润总额与净利润模块 */}
|
|
|
|
|
- <div className="h-[480px] overflow-clip relative shrink-0 w-full">
|
|
|
|
|
- <div className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]">
|
|
|
|
|
- <img alt="模块底部" className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]" src={img13} />
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="absolute content-stretch flex flex-col gap-[20px] h-[388px] items-start left-[41.4px] top-[79px] w-[847.191px]">
|
|
|
|
|
- <div className="content-stretch flex items-start justify-between relative shrink-0 w-[847px]">
|
|
|
|
|
- <div className="content-stretch flex gap-[20px] items-center relative shrink-0">
|
|
|
|
|
- <div className="content-stretch flex gap-[10px] h-[26px] items-center relative shrink-0">
|
|
|
|
|
- <div className="flex items-center justify-center relative shrink-0">
|
|
|
|
|
- <div className="flex-none rotate-[180deg]">
|
|
|
|
|
- {/* 这里应该放置柱形元素组件 */}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="flex flex-col font-['PingFang_SC:Regular',sans-serif] justify-center leading-[0] not-italic relative shrink-0 text-[18px] text-white w-[83px]">
|
|
|
|
|
- <p className="leading-[25.2px] whitespace-pre-wrap">利润总额</p>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="content-stretch flex gap-[20px] h-[26px] items-center relative shrink-0">
|
|
|
|
|
- <div className="flex items-center justify-center relative shrink-0">
|
|
|
|
|
- <div className="flex-none rotate-[180deg]">
|
|
|
|
|
- {/* 这里应该放置柱形元素组件 */}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="flex flex-col font-['PingFang_SC:Regular',sans-serif] h-[26px] justify-center leading-[0] not-italic relative shrink-0 text-[18px] text-white w-[80px]">
|
|
|
|
|
- <p className="leading-[25.2px] whitespace-pre-wrap">净利润</p>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)]">
|
|
|
|
|
- *数据截止至2025年9月
|
|
|
|
|
- </p>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)]">
|
|
|
|
|
- 单位:亿元
|
|
|
|
|
- </p>
|
|
|
|
|
- {/* 这里应该放置图表组件 */}
|
|
|
|
|
- <ProfitMetrics data={financialRow.profitTotalNet} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 资产负债率(百分比)模块 */}
|
|
|
|
|
- <div className="h-[480px] overflow-clip relative shrink-0 w-full">
|
|
|
|
|
- <div className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]">
|
|
|
|
|
- <img alt="模块底部" className="absolute h-[490px] left-0 overflow-clip top-0 w-[930px]" src={img13} />
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className="absolute content-stretch flex flex-col gap-[10px] h-[399.296px] items-start left-[calc(50%+-0.25px)] top-[calc(50%+17.65px)] translate-x-[-50%] translate-y-[-50%] w-[847.001px]">
|
|
|
|
|
- <div className="content-stretch flex items-center justify-between relative shrink-0 w-full">
|
|
|
|
|
- <div className="content-stretch flex gap-[20px] items-center relative shrink-0">
|
|
|
|
|
- <div className="bg-[#297ad8] box-border content-stretch flex flex-col items-center justify-end pb-0 pt-[74px] px-0 relative shrink-0 size-[14px]">
|
|
|
|
|
- <div className="bg-[#46bdbd] content-stretch flex h-[7px] items-start justify-center relative shrink-0 w-full">
|
|
|
|
|
- <div className="border-[0.1px] border-solid border-white box-border content-stretch flex flex-[1_0_0] items-center justify-center min-h-px min-w-px relative shrink-0">
|
|
|
|
|
- <div className="bg-white border-[0.1px] border-solid border-white flex-[1_0_0] h-[2px] min-h-px min-w-px shrink-0" />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[18px] text-white">
|
|
|
|
|
- 资产负债率
|
|
|
|
|
- </p>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)] w-[156px] whitespace-pre-wrap">
|
|
|
|
|
- *数据截止至2025年9月
|
|
|
|
|
- </p>
|
|
|
|
|
- </div>
|
|
|
|
|
- <p className="font-['PingFang_SC:Regular',sans-serif] h-[26px] leading-[25.2px] not-italic relative shrink-0 text-[14px] text-[rgba(255,255,255,0.8)] w-full whitespace-pre-wrap">
|
|
|
|
|
- 单位:%
|
|
|
|
|
- </p>
|
|
|
|
|
- {/* 这里应该放置图表组件 */}
|
|
|
|
|
- <DebtRatioMetrics data={financialRow.assetLiabilityRatio} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 右下角浮动按钮 */}
|
|
|
|
|
- <div className="absolute left-[1765px] top-[923px]">
|
|
|
|
|
- <div className="absolute flex items-center justify-center left-[1765px] size-[108px] top-[923px]">
|
|
|
|
|
- <div className="flex-none rotate-[180deg] scale-y-[-100%]">
|
|
|
|
|
- <div className="relative size-[108px]">
|
|
|
|
|
- <div className="absolute aspect-[84/84] bottom-[2.38%] flex items-center justify-center left-1/2 top-[2.38%] translate-x-[-50%]">
|
|
|
|
|
- <div className="flex-none rotate-[180deg] scale-y-[-100%] size-[80px]">
|
|
|
|
|
- <div className="relative size-full">
|
|
|
|
|
- <div className="absolute inset-[-1.25%]">
|
|
|
|
|
- <img alt="按钮背景" className="block max-w-none size-full" src={imgEllipse4119} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <button
|
|
|
|
|
- onClick={handleOpenModal}
|
|
|
|
|
- className="absolute font-['PingFang_SC:Medium',sans-serif] h-[51px] leading-[normal] left-[1818.5px] not-italic text-[20px] text-center text-white top-[952px] tracking-[0.6349px] translate-x-[-50%] w-[55px] whitespace-pre-wrap bg-transparent border-none cursor-pointer"
|
|
|
|
|
- >
|
|
|
|
|
- <p className="mb-0">变动</p>
|
|
|
|
|
- <p>幅度</p>
|
|
|
|
|
- </button>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- {/* 变动幅度弹窗 */}
|
|
|
|
|
- <VariationModal isOpen={isModalOpen} onClose={handleCloseModal} />
|
|
|
|
|
- </div>
|
|
|
|
|
- );
|
|
|
|
|
-}
|
|
|