feat: 增强财务管理系统功能与分析能力

主要更新:
- 🎯 新增综合分析仪表板,包含关键指标卡片、预算对比、智能洞察等组件
- 📊 增强数据可视化能力,新增标签云分析、时间维度分析等图表
- 📱 优化移动端响应式设计,改进触控交互体验
- 🔧 新增多个API模块(base、budget、tag),完善数据管理
- 🗂️ 重构路由结构,新增贷款、快速添加、设置、统计等独立模块
- 🔄 优化数据导入导出功能,增强数据迁移能力
- 🐛 修复多个已知问题,提升系统稳定性

技术改进:
- 使用IndexedDB提升本地存储性能
- 实现模拟API服务,支持离线开发
- 增加自动化测试脚本,确保功能稳定
- 优化打包配置,提升构建效率

文件变更:
- 新增42个文件
- 修改55个文件
- 包含测试脚本、配置文件、组件和API模块

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
你的用户名
2025-08-24 16:41:58 +08:00
parent 4b4616de1e
commit 675fe0a1a8
154 changed files with 10035 additions and 3978 deletions

144
test-analytics-debug.js Normal file
View File

@@ -0,0 +1,144 @@
import { chromium } from 'playwright';
(async () => {
const browser = await chromium.launch({
headless: false,
devtools: true // 打开开发者工具
});
const context = await browser.newContext();
const page = await context.newPage();
// 监听控制台消息
page.on('console', msg => {
if (msg.type() === 'error') {
console.error('浏览器控制台错误:', msg.text());
}
});
// 监听页面错误
page.on('pageerror', error => {
console.error('页面错误:', error.message);
});
// 监听响应
page.on('response', response => {
if (response.status() >= 400) {
console.log(`请求失败: ${response.url()} - 状态码: ${response.status()}`);
}
});
try {
console.log('开始调试分析功能...\n');
// 1. 首先访问首页
console.log('1. 访问首页...');
await page.goto('http://localhost:5667/', { waitUntil: 'networkidle' });
await page.waitForTimeout(2000);
// 检查是否需要登录
const needLogin = await page.locator('button:has-text("登录")').isVisible();
if (needLogin) {
console.log(' 需要登录,使用默认账号...');
await page.fill('input[placeholder*="账号"]', 'vben');
await page.fill('input[placeholder*="密码"]', '123456');
await page.locator('button:has-text("登录")').click();
await page.waitForTimeout(3000);
}
// 2. 检查菜单
console.log('\n2. 检查菜单结构...');
const analyticsMenu = await page.locator('span:has-text("数据分析")').first();
if (await analyticsMenu.isVisible()) {
console.log(' ✅ 找到"数据分析"菜单');
await analyticsMenu.click();
await page.waitForTimeout(1000);
// 查找数据概览子菜单
const overviewMenu = await page.locator('span:has-text("数据概览")').first();
if (await overviewMenu.isVisible()) {
console.log(' ✅ 找到"数据概览"子菜单');
await overviewMenu.click();
await page.waitForTimeout(2000);
} else {
console.log(' ❌ 未找到"数据概览"子菜单');
}
} else {
console.log(' ❌ 未找到"数据分析"菜单');
}
// 3. 检查当前URL
console.log('\n3. 检查当前页面...');
const currentUrl = page.url();
console.log(' 当前URL:', currentUrl);
// 4. 直接导航到分析页面
console.log('\n4. 直接访问分析页面...');
await page.goto('http://localhost:5667/analytics/overview', { waitUntil: 'networkidle' });
await page.waitForTimeout(3000);
// 检查是否404
const is404 = await page.locator('text="404"').isVisible();
if (is404) {
console.log(' ❌ 页面返回404错误');
// 检查可用的路由
console.log('\n5. 尝试其他路由...');
const testRoutes = [
'/finance/dashboard',
'/finance/transaction',
'/dashboard/analytics',
'/analytics',
];
for (const route of testRoutes) {
await page.goto(`http://localhost:5667${route}`, { waitUntil: 'networkidle' });
await page.waitForTimeout(1000);
const hasError = await page.locator('text="404"').isVisible();
console.log(` ${route}: ${hasError ? '❌ 404' : '✅ 成功'}`);
}
} else {
console.log(' ✅ 页面加载成功');
// 检查组件是否加载
console.log('\n6. 检查组件加载...');
const components = [
{ selector: '.key-metrics-cards', name: '关键指标卡片' },
{ selector: '.ant-tabs', name: '标签页' },
{ selector: '.budget-comparison', name: '预算对比' },
{ selector: '.smart-insights', name: '智能洞察' },
{ selector: '.tag-cloud-analysis', name: '标签云' },
{ selector: '.time-dimension-analysis', name: '时间维度' },
];
for (const comp of components) {
const isVisible = await page.locator(comp.selector).isVisible();
console.log(` ${comp.name}: ${isVisible ? '✅' : '❌'}`);
}
}
// 7. 获取页面内容检查
console.log('\n7. 页面内容检查...');
const pageTitle = await page.title();
console.log(' 页面标题:', pageTitle);
const bodyText = await page.locator('body').textContent();
if (bodyText.includes('数据概览')) {
console.log(' ✅ 找到"数据概览"文本');
}
if (bodyText.includes('关键指标')) {
console.log(' ✅ 找到"关键指标"相关内容');
}
// 截图
await page.screenshot({ path: 'analytics-debug.png', fullPage: true });
console.log('\n📸 调试截图已保存: analytics-debug.png');
} catch (error) {
console.error('\n❌ 调试过程中出错:', error);
await page.screenshot({ path: 'error-debug.png' });
} finally {
console.log('\n按任意键关闭浏览器...');
await page.waitForTimeout(10000); // 等待10秒让开发者查看
await browser.close();
}
})();