豆包生成的一个财务报表的页面

豆包生成的一个财务报表的页面

站长可乐
7月26日发布

用豆包生成了一个财务报表的页面,觉得比较好看,大家可以参考学些下:
mdj1gphj.png

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>财务报表分析</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.8/dist/chart.umd.min.js"></script>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
    
    <!-- Tailwind 配置 -->
    <script>
        tailwind.config = {
            theme: {
                extend: {
                    colors: {
                        primary: '#165DFF',
                        secondary: '#36CFC9',
                        success: '#52C41A',
                        warning: '#FAAD14',
                        danger: '#FF4D4F',
                        neutral: {
                            100: '#F5F7FA',
                            200: '#E5E6EB',
                            300: '#C9CDD4',
                            400: '#86909C',
                            500: '#4E5969',
                            600: '#272E3B',
                            700: '#1D2129',
                        }
                    },
                    fontFamily: {
                        inter: ['Inter', 'sans-serif'],
                    },
                }
            }
        }
    </script>
    
    <style type="text/tailwindcss">
        @layer utilities {
            .content-auto {
                content-visibility: auto;
            }
            .card-shadow {
                box-shadow: 0 2px 14px 0 rgba(0, 0, 0, 0.06);
            }
            .transition-custom {
                transition: all 0.3s ease;
            }
        }
    </style>
</head>
<body class="font-inter bg-neutral-100 text-neutral-700 min-h-screen flex flex-col">
    <!-- 顶部导航栏 -->
    <header class="bg-white shadow-sm sticky top-0 z-50">
        <div class="container mx-auto px-4 py-3 flex items-center justify-between">
            <div class="flex items-center space-x-4">
                <i class="fa fa-line-chart text-primary text-2xl"></i>
                <h1 class="text-xl font-semibold">财务报表分析系统</h1>
            </div>
            <div class="flex items-center space-x-6">
                <nav class="hidden md:flex space-x-6">
                    <a href="#" class="text-primary font-medium">仪表盘</a>
                    <a href="#" class="text-neutral-500 hover:text-primary transition-custom">收支记录</a>
                    <a href="#" class="text-neutral-500 hover:text-primary transition-custom">预算管理</a>
                    <a href="#" class="text-neutral-500 hover:text-primary transition-custom">财务分析</a>
                </nav>
                <div class="flex items-center space-x-4">
                    <button class="text-neutral-500 hover:text-primary transition-custom">
                        <i class="fa fa-bell-o text-lg"></i>
                    </button>
                    <div class="flex items-center space-x-2">
                        <div class="w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center">
                            <span class="text-primary font-medium">JD</span>
                        </div>
                        <span class="hidden md:inline text-sm font-medium">贾东</span>
                    </div>
                </div>
            </div>
        </div>
    </header>

    <!-- 主内容区 -->
    <main class="flex-grow container mx-auto px-4 py-6">
        <!-- 页面标题和筛选区 -->
        <div class="mb-6">
            <div class="flex flex-col md:flex-row md:items-center md:justify-between mb-4">
                <h2 class="text-[clamp(1.5rem,3vw,2rem)] font-semibold mb-2 md:mb-0">财务报表分析</h2>
                <div class="flex items-center space-x-4">
                    <div class="relative">
                        <select class="appearance-none bg-white border border-neutral-200 rounded-lg py-2 pl-4 pr-10 text-sm focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary transition-custom">
                            <option>全部账户</option>
                            <option>招商银行(6288)</option>
                            <option>工商银行(8866)</option>
                            <option>支付宝</option>
                            <option>微信支付</option>
                        </select>
                        <div class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-neutral-400">
                            <i class="fa fa-chevron-down text-xs"></i>
                        </div>
                    </div>
                    <button class="bg-primary hover:bg-primary/90 text-white px-4 py-2 rounded-lg text-sm font-medium transition-custom flex items-center">
                        <i class="fa fa-download mr-2"></i>导出报表
                    </button>
                </div>
            </div>
            
            <!-- 总开关和时间筛选器 -->
            <div class="bg-white rounded-xl p-4 shadow-sm mb-6">
                <div class="flex flex-col md:flex-row md:items-center md:justify-between">
                    <div class="flex flex-wrap gap-2 mb-4 md:mb-0">
                        <button class="px-4 py-2 bg-primary text-white rounded-lg text-sm font-medium transition-custom">
                            收支趋势
                        </button>
                        <button class="px-4 py-2 bg-white border border-neutral-200 hover:border-primary/50 text-neutral-600 rounded-lg text-sm font-medium transition-custom">
                            支出分类
                        </button>
                        <button class="px-4 py-2 bg-white border border-neutral-200 hover:border-primary/50 text-neutral-600 rounded-lg text-sm font-medium transition-custom">
                            收入来源
                        </button>
                        <button class="px-4 py-2 bg-white border border-neutral-200 hover:border-primary/50 text-neutral-600 rounded-lg text-sm font-medium transition-custom">
                            资产负债
                        </button>
                    </div>
                    
                    <!-- 时间筛选器 - 移动到总开关区域 -->
                    <div class="flex items-center space-x-3">
                        <div class="flex space-x-2">
                            <button class="px-3 py-1.5 bg-primary/10 text-primary rounded-md text-sm font-medium transition-custom">
                                近7天
                            </button>
                            <button class="px-3 py-1.5 bg-white border border-neutral-200 hover:border-primary/50 text-neutral-600 rounded-md text-sm font-medium transition-custom">
                                近30天
                            </button>
                            <button class="px-3 py-1.5 bg-white border border-neutral-200 hover:border-primary/50 text-neutral-600 rounded-md text-sm font-medium transition-custom">
                                近90天
                            </button>
                        </div>
                        <div class="relative">
                            <input type="text" placeholder="选择日期范围" class="appearance-none bg-white border border-neutral-200 rounded-lg py-2 pl-4 pr-10 text-sm focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary transition-custom w-full md:w-48">
                            <div class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-neutral-400">
                                <i class="fa fa-calendar"></i>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- 数据概览卡片 -->
        <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
            <div class="bg-white rounded-xl p-5 card-shadow transition-custom hover:shadow-md">
                <div class="flex items-center justify-between mb-3">
                    <h3 class="text-neutral-500 font-medium text-sm">总收入</h3>
                    <div class="w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center">
                        <i class="fa fa-arrow-down text-primary"></i>
                    </div>
                </div>
                <div class="flex items-end">
                    <p class="text-2xl font-semibold">¥28,642.50</p>
                    <p class="ml-2 text-success text-sm flex items-center">
                        <i class="fa fa-arrow-up mr-1"></i>12.5%
                    </p>
                </div>
                <p class="text-neutral-400 text-xs mt-1">较上月增长 ¥3,125.75</p>
            </div>
            
            <div class="bg-white rounded-xl p-5 card-shadow transition-custom hover:shadow-md">
                <div class="flex items-center justify-between mb-3">
                    <h3 class="text-neutral-500 font-medium text-sm">总支出</h3>
                    <div class="w-10 h-10 rounded-full bg-danger/10 flex items-center justify-center">
                        <i class="fa fa-arrow-up text-danger"></i>
                    </div>
                </div>
                <div class="flex items-end">
                    <p class="text-2xl font-semibold">¥19,285.30</p>
                    <p class="ml-2 text-danger text-sm flex items-center">
                        <i class="fa fa-arrow-up mr-1"></i>8.2%
                    </p>
                </div>
                <p class="text-neutral-400 text-xs mt-1">较上月增长 ¥1,476.23</p>
            </div>
            
            <div class="bg-white rounded-xl p-5 card-shadow transition-custom hover:shadow-md">
                <div class="flex items-center justify-between mb-3">
                    <h3 class="text-neutral-500 font-medium text-sm">净收入</h3>
                    <div class="w-10 h-10 rounded-full bg-secondary/10 flex items-center justify-center">
                        <i class="fa fa-balance-scale text-secondary"></i>
                    </div>
                </div>
                <div class="flex items-end">
                    <p class="text-2xl font-semibold">¥9,357.20</p>
                    <p class="ml-2 text-success text-sm flex items-center">
                        <i class="fa fa-arrow-up mr-1"></i>18.3%
                    </p>
                </div>
                <p class="text-neutral-400 text-xs mt-1">较上月增长 ¥1,649.52</p>
            </div>
            
            <div class="bg-white rounded-xl p-5 card-shadow transition-custom hover:shadow-md">
                <div class="flex items-center justify-between mb-3">
                    <h3 class="text-neutral-500 font-medium text-sm">结余率</h3>
                    <div class="w-10 h-10 rounded-full bg-warning/10 flex items-center justify-center">
                        <i class="fa fa-percent text-warning"></i>
                    </div>
                </div>
                <div class="flex items-end">
                    <p class="text-2xl font-semibold">32.7%</p>
                    <p class="ml-2 text-success text-sm flex items-center">
                        <i class="fa fa-arrow-up mr-1"></i>3.2%
                    </p>
                </div>
                <p class="text-neutral-400 text-xs mt-1">较上月增长 3.2 个百分点</p>
            </div>
        </div>
        
        <!-- 图表区域 -->
        <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
            <!-- 收支趋势图表 -->
            <div class="bg-white rounded-xl p-5 card-shadow lg:col-span-2">
                <div class="flex items-center justify-between mb-4">
                    <h3 class="font-semibold">收支趋势</h3>
                    <div class="flex space-x-2">
                        <button class="px-3 py-1 text-xs bg-primary/10 text-primary rounded-md">日</button>
                        <button class="px-3 py-1 text-xs bg-white border border-neutral-200 text-neutral-500 rounded-md">周</button>
                        <button class="px-3 py-1 text-xs bg-white border border-neutral-200 text-neutral-500 rounded-md">月</button>
                    </div>
                </div>
                <div class="h-80">
                    <canvas id="incomeExpenseChart"></canvas>
                </div>
            </div>
            
            <!-- 支出分类统计图表 -->
            <div class="bg-white rounded-xl p-5 card-shadow">
                <div class="flex items-center justify-between mb-4">
                    <h3 class="font-semibold">支出分类统计</h3>
                    <div class="relative">
                        <select id="expenseCategoryFilter" class="appearance-none bg-white border border-neutral-200 rounded-lg py-1 pl-3 pr-8 text-xs focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary transition-custom">
                            <option>全部类别</option>
                            <option>餐饮美食</option>
                            <option>购物消费</option>
                            <option>交通出行</option>
                            <option>住房缴费</option>
                            <option>休闲娱乐</option>
                            <option>医疗健康</option>
                            <option>其他支出</option>
                        </select>
                        <div class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-neutral-400">
                            <i class="fa fa-chevron-down text-xs"></i>
                        </div>
                    </div>
                </div>
                <div class="h-64 mb-4">
                    <canvas id="expenseCategoryChart"></canvas>
                </div>
                <div class="space-y-3">
                    <div class="flex items-center justify-between">
                        <div class="flex items-center">
                            <div class="w-3 h-3 rounded-full bg-primary mr-2"></div>
                            <span class="text-sm text-neutral-600">餐饮美食</span>
                        </div>
                        <div class="flex items-center">
                            <span class="text-sm font-medium">¥4,285.75</span>
                            <span class="text-xs text-neutral-400 ml-2">22.2%</span>
                        </div>
                    </div>
                    <div class="flex items-center justify-between">
                        <div class="flex items-center">
                            <div class="w-3 h-3 rounded-full bg-secondary mr-2"></div>
                            <span class="text-sm text-neutral-600">购物消费</span>
                        </div>
                        <div class="flex items-center">
                            <span class="text-sm font-medium">¥3,842.30</span>
                            <span class="text-xs text-neutral-400 ml-2">19.9%</span>
                        </div>
                    </div>
                    <div class="flex items-center justify-between">
                        <div class="flex items-center">
                            <div class="w-3 h-3 rounded-full bg-success mr-2"></div>
                            <span class="text-sm text-neutral-600">交通出行</span>
                        </div>
                        <div class="flex items-center">
                            <span class="text-sm font-medium">¥2,756.80</span>
                            <span class="text-xs text-neutral-400 ml-2">14.3%</span>
                        </div>
                    </div>
                    <div class="flex items-center justify-between">
                        <div class="flex items-center">
                            <div class="w-3 h-3 rounded-full bg-warning mr-2"></div>
                            <span class="text-sm text-neutral-600">住房缴费</span>
                        </div>
                        <div class="flex items-center">
                            <span class="text-sm font-medium">¥5,680.20</span>
                            <span class="text-xs text-neutral-400 ml-2">29.4%</span>
                        </div>
                    </div>
                    <div class="flex items-center justify-between">
                        <div class="flex items-center">
                            <div class="w-3 h-3 rounded-full bg-danger mr-2"></div>
                            <span class="text-sm text-neutral-600">其他支出</span>
                        </div>
                        <div class="flex items-center">
                            <span class="text-sm font-medium">¥2,720.25</span>
                            <span class="text-xs text-neutral-400 ml-2">14.1%</span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- 交易记录表格 -->
        <div class="bg-white rounded-xl p-5 card-shadow mt-6">
            <div class="flex items-center justify-between mb-4">
                <h3 class="font-semibold">最近交易记录</h3>
                <div class="flex items-center space-x-3">
                    <div class="relative">
                        <input type="text" placeholder="搜索交易..." class="appearance-none bg-white border border-neutral-200 rounded-lg py-2 pl-9 pr-4 text-sm focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary transition-custom w-full md:w-64">
                        <div class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-neutral-400">
                            <i class="fa fa-search"></i>
                        </div>
                    </div>
                    <button class="text-neutral-500 hover:text-primary transition-custom">
                        <i class="fa fa-filter"></i>
                    </button>
                </div>
            </div>
            <div class="overflow-x-auto">
                <table class="min-w-full">
                    <thead>
                        <tr class="border-b border-neutral-200">
                            <th class="text-left py-3 px-4 text-xs font-medium text-neutral-500 uppercase tracking-wider">日期</th>
                            <th class="text-left py-3 px-4 text-xs font-medium text-neutral-500 uppercase tracking-wider">描述</th>
                            <th class="text-left py-3 px-4 text-xs font-medium text-neutral-500 uppercase tracking-wider">类别</th>
                            <th class="text-left py-3 px-4 text-xs font-medium text-neutral-500 uppercase tracking-wider">账户</th>
                            <th class="text-right py-3 px-4 text-xs font-medium text-neutral-500 uppercase tracking-wider">金额</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class="border-b border-neutral-100 hover:bg-neutral-50 transition-custom">
                            <td class="py-3 px-4 text-sm text-neutral-600">2025-07-25</td>
                            <td class="py-3 px-4 text-sm text-neutral-600">星巴克咖啡</td>
                            <td class="py-3 px-4 text-sm">
                                <span class="px-2 py-1 bg-warning/10 text-warning rounded-full text-xs">餐饮美食</span>
                            </td>
                            <td class="py-3 px-4 text-sm text-neutral-600">支付宝</td>
                            <td class="py-3 px-4 text-sm font-medium text-danger">-¥38.50</td>
                        </tr>
                        <tr class="border-b border-neutral-100 hover:bg-neutral-50 transition-custom">
                            <td class="py-3 px-4 text-sm text-neutral-600">2025-07-25</td>
                            <td class="py-3 px-4 text-sm text-neutral-600">京东购物</td>
                            <td class="py-3 px-4 text-sm">
                                <span class="px-2 py-1 bg-secondary/10 text-secondary rounded-full text-xs">购物消费</span>
                            </td>
                            <td class="py-3 px-4 text-sm text-neutral-600">招商银行(6288)</td>
                            <td class="py-3 px-4 text-sm font-medium text-danger">-¥285.90</td>
                        </tr>
                        <tr class="border-b border-neutral-100 hover:bg-neutral-50 transition-custom">
                            <td class="py-3 px-4 text-sm text-neutral-600">2025-07-24</td>
                            <td class="py-3 px-4 text-sm text-neutral-600">工资入账</td>
                            <td class="py-3 px-4 text-sm">
                                <span class="px-2 py-1 bg-success/10 text-success rounded-full text-xs">工资收入</span>
                            </td>
                            <td class="py-3 px-4 text-sm text-neutral-600">工商银行(8866)</td>
                            <td class="py-3 px-4 text-sm font-medium text-success">+¥12,500.00</td>
                        </tr>
                        <tr class="border-b border-neutral-100 hover:bg-neutral-50 transition-custom">
                            <td class="py-3 px-4 text-sm text-neutral-600">2025-07-24</td>
                            <td class="py-3 px-4 text-sm text-neutral-600">地铁通勤</td>
                            <td class="py-3 px-4 text-sm">
                                <span class="px-2 py-1 bg-primary/10 text-primary rounded-full text-xs">交通出行</span>
                            </td>
                            <td class="py-3 px-4 text-sm text-neutral-600">微信支付</td>
                            <td class="py-3 px-4 text-sm font-medium text-danger">-¥8.00</td>
                        </tr>
                        <tr class="border-b border-neutral-100 hover:bg-neutral-50 transition-custom">
                            <td class="py-3 px-4 text-sm text-neutral-600">2025-07-23</td>
                            <td class="py-3 px-4 text-sm text-neutral-600">超市购物</td>
                            <td class="py-3 px-4 text-sm">
                                <span class="px-2 py-1 bg-secondary/10 text-secondary rounded-full text-xs">购物消费</span>
                            </td>
                            <td class="py-3 px-4 text-sm text-neutral-600">支付宝</td>
                            <td class="py-3 px-4 text-sm font-medium text-danger">-¥156.20</td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <div class="flex items-center justify-between mt-4">
                <p class="text-sm text-neutral-500">显示 1 至 5 条,共 24 条记录</p>
                <div class="flex space-x-1">
                    <button class="w-8 h-8 flex items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:border-primary hover:text-primary transition-custom">
                        <i class="fa fa-angle-left"></i>
                    </button>
                    <button class="w-8 h-8 flex items-center justify-center rounded border border-primary bg-primary text-white">1</button>
                    <button class="w-8 h-8 flex items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:border-primary hover:text-primary transition-custom">2</button>
                    <button class="w-8 h-8 flex items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:border-primary hover:text-primary transition-custom">3</button>
                    <button class="w-8 h-8 flex items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:border-primary hover:text-primary transition-custom">
                        <i class="fa fa-angle-right"></i>
                    </button>
                </div>
            </div>
        </div>
    </main>

    <!-- 页脚 -->
    <footer class="bg-white border-t border-neutral-200 py-4">
        <div class="container mx-auto px-4">
            <div class="flex flex-col md:flex-row md:items-center md:justify-between">
                <div class="text-center md:text-left mb-4 md:mb-0">
                    <p class="text-sm text-neutral-500">© 2025 财务报表分析系统. 保留所有权利.</p>
                </div>
                <div class="flex justify-center md:justify-end space-x-6">
                    <a href="#" class="text-neutral-500 hover:text-primary transition-custom">
                        <i class="fa fa-question-circle"></i> 帮助中心
                    </a>
                    <a href="#" class="text-neutral-500 hover:text-primary transition-custom">
                        <i class="fa fa-file-text-o"></i> 隐私政策
                    </a>
                    <a href="#" class="text-neutral-500 hover:text-primary transition-custom">
                        <i class="fa fa-cog"></i> 设置
                    </a>
                </div>
            </div>
        </div>
    </footer>

    <!-- JavaScript -->
    <script>
        // 等待DOM加载完成
        document.addEventListener('DOMContentLoaded', function() {
            // 收支趋势图表
            const incomeExpenseCtx = document.getElementById('incomeExpenseChart').getContext('2d');
            const incomeExpenseChart = new Chart(incomeExpenseCtx, {
                type: 'line',
                data: {
                    labels: ['7/19', '7/20', '7/21', '7/22', '7/23', '7/24', '7/25'],
                    datasets: [
                        {
                            label: '收入',
                            data: [1250, 0, 0, 12500, 0, 0, 0],
                            borderColor: '#52C41A',
                            backgroundColor: 'rgba(82, 196, 26, 0.1)',
                            tension: 0.3,
                            fill: true
                        },
                        {
                            label: '支出',
                            data: [350, 210, 180, 260, 156, 8, 38],
                            borderColor: '#FF4D4F',
                            backgroundColor: 'rgba(255, 77, 79, 0.1)',
                            tension: 0.3,
                            fill: true
                        }
                    ]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: {
                            position: 'top',
                            labels: {
                                boxWidth: 12,
                                usePointStyle: true,
                                pointStyle: 'circle'
                            }
                        },
                        tooltip: {
                            mode: 'index',
                            intersect: false,
                            backgroundColor: 'rgba(255, 255, 255, 0.95)',
                            titleColor: '#1D2129',
                            bodyColor: '#4E5969',
                            borderColor: 'rgba(22, 93, 255, 0.1)',
                            borderWidth: 1,
                            padding: 10,
                            boxPadding: 5,
                            usePointStyle: true,
                            callbacks: {
                                label: function(context) {
                                    let label = context.dataset.label || '';
                                    if (label) {
                                        label += ': ';
                                    }
                                    if (context.parsed.y !== null) {
                                        label += new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY' }).format(context.parsed.y);
                                    }
                                    return label;
                                }
                            }
                        }
                    },
                    scales: {
                        x: {
                            grid: {
                                display: false
                            }
                        },
                        y: {
                            beginAtZero: true,
                            grid: {
                                color: 'rgba(0, 0, 0, 0.05)'
                            },
                            ticks: {
                                callback: function(value) {
                                    return '¥' + value;
                                }
                            }
                        }
                    },
                    interaction: {
                        mode: 'nearest',
                        axis: 'x',
                        intersect: false
                    },
                    animation: {
                        duration: 1000,
                        easing: 'easeOutQuart'
                    }
                }
            });
            
            // 支出分类统计图表
            const expenseCategoryCtx = document.getElementById('expenseCategoryChart').getContext('2d');
            const expenseCategoryChart = new Chart(expenseCategoryCtx, {
                type: 'doughnut',
                data: {
                    labels: ['餐饮美食', '购物消费', '交通出行', '住房缴费', '其他支出'],
                    datasets: [{
                        data: [4285.75, 3842.30, 2756.80, 5680.20, 2720.25],
                        backgroundColor: [
                            '#165DFF',
                            '#36CFC9',
                            '#52C41A',
                            '#FAAD14',
                            '#FF4D4F'
                        ],
                        borderWidth: 0,
                        hoverOffset: 4
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    cutout: '70%',
                    plugins: {
                        legend: {
                            display: false
                        },
                        tooltip: {
                            backgroundColor: 'rgba(255, 255, 255, 0.95)',
                            titleColor: '#1D2129',
                            bodyColor: '#4E5969',
                            borderColor: 'rgba(22, 93, 255, 0.1)',
                            borderWidth: 1,
                            padding: 10,
                            boxPadding: 5,
                            usePointStyle: true,
                            callbacks: {
                                label: function(context) {
                                    const label = context.label || '';
                                    const value = context.raw || 0;
                                    const total = context.dataset.data.reduce((acc, val) => acc + val, 0);
                                    const percentage = Math.round((value / total) * 100);
                                    return [
                                        label,
                                        new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY' }).format(value),
                                        `占比: ${percentage}%`
                                    ];
                                }
                            }
                        }
                    },
                    animation: {
                        animateRotate: true,
                        animateScale: true,
                        duration: 1000,
                        easing: 'easeOutQuart'
                    }
                }
            });
            
            // 使用AJAX加载图表数据
            function loadChartData(timeRange) {
                // 显示加载状态
                document.getElementById('incomeExpenseChart').classList.add('opacity-50');
                document.getElementById('expenseCategoryChart').classList.add('opacity-50');
                
                // 模拟AJAX请求
                setTimeout(() => {
                    // 更新收支趋势图表数据
                    if (timeRange === 'day') {
                        incomeExpenseChart.data.labels = ['7/19', '7/20', '7/21', '7/22', '7/23', '7/24', '7/25'];
                        incomeExpenseChart.data.datasets[0].data = [1250, 0, 0, 12500, 0, 0, 0];
                        incomeExpenseChart.data.datasets[1].data = [350, 210, 180, 260, 156, 8, 38];
                    } else if (timeRange === 'week') {
                        incomeExpenseChart.data.labels = ['第1周', '第2周', '第3周', '第4周', '第5周', '第6周', '第7周'];
                        incomeExpenseChart.data.datasets[0].data = [5200, 6800, 4500, 12500, 3800, 5600, 0];
                        incomeExpenseChart.data.datasets[1].data = [3200, 2800, 3400, 2600, 2900, 1800, 400];
                    } else if (timeRange === 'month') {
                        incomeExpenseChart.data.labels = ['1月', '2月', '3月', '4月', '5月', '6月', '7月'];
                        incomeExpenseChart.data.datasets[0].data = [28500, 25600, 32400, 29800, 31200, 28600, 13750];
                        incomeExpenseChart.data.datasets[1].data = [18500, 16800, 19200, 17500, 20100, 18900, 9600];
                    }
                    incomeExpenseChart.update();
                    
                    // 更新支出分类图表数据
                    expenseCategoryChart.data.datasets[0].data = [4285.75, 3842.30, 2756.80, 5680.20, 2720.25];
                    expenseCategoryChart.update();
                    
                    // 隐藏加载状态
                    document.getElementById('incomeExpenseChart').classList.remove('opacity-50');
                    document.getElementById('expenseCategoryChart').classList.remove('opacity-50');
                }, 800);
            }
            
            // 绑定时间筛选按钮事件
            const timeButtons = document.querySelectorAll('#incomeExpenseChart').parentElement.parentElement.querySelectorAll('button');
            timeButtons.forEach(button => {
                button.addEventListener('click', function() {
                    // 移除所有按钮的激活状态
                    timeButtons.forEach(btn => {
                        btn.classList.remove('bg-primary/10', 'text-primary');
                        btn.classList.add('bg-white', 'border', 'border-neutral-200', 'text-neutral-500');
                    });
                    
                    // 设置当前按钮为激活状态
                    this.classList.remove('bg-white', 'border', 'border-neutral-200', 'text-neutral-500');
                    this.classList.add('bg-primary/10', 'text-primary');
                    
                    // 加载对应时间范围的数据
                    const timeRange = this.textContent.trim().toLowerCase();
                    loadChartData(timeRange);
                });
            });
            
            // 绑定支出分类筛选事件
            const categoryFilter = document.getElementById('expenseCategoryFilter');
            categoryFilter.addEventListener('change', function() {
                // 显示加载状态
                document.getElementById('expenseCategoryChart').classList.add('opacity-50');
                
                // 模拟AJAX请求
                setTimeout(() => {
                    // 根据选择的类别更新图表数据
                    const selectedCategory = this.value;
                    
                    // 这里应该根据实际选择的类别过滤数据
                    // 这里只是模拟数据更新
                    if (selectedCategory === '餐饮美食') {
                        expenseCategoryChart.data.datasets[0].data = [4285.75, 0, 0, 0, 0];
                    } else if (selectedCategory === '购物消费') {
                        expenseCategoryChart.data.datasets[0].data = [0, 3842.30, 0, 0, 0];
                    } else if (selectedCategory === '交通出行') {
                        expenseCategoryChart.data.datasets[0].data = [0, 0, 2756.80, 0, 0];
                    } else if (selectedCategory === '住房缴费') {
                        expenseCategoryChart.data.datasets[0].data = [0, 0, 0, 5680.20, 0];
                    } else if (selectedCategory === '休闲娱乐') {
                        expenseCategoryChart.data.datasets[0].data = [0, 0, 0, 0, 1850.50];
                    } else if (selectedCategory === '医疗健康') {
                        expenseCategoryChart.data.datasets[0].data = [0, 0, 0, 0, 869.75];
                    } else {
                        // 全部类别
                        expenseCategoryChart.data.datasets[0].data = [4285.75, 3842.30, 2756.80, 5680.20, 2720.25];
                    }
                    
                    expenseCategoryChart.update();
                    
                    // 隐藏加载状态
                    document.getElementById('expenseCategoryChart').classList.remove('opacity-50');
                }, 600);
            });
        });
    </script>
</body>
</html>    
© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消