refactor(asl): ASL frontend architecture refactoring with left navigation

- feat: Create ASLLayout component with 7-module left navigation
- feat: Implement Title Screening Settings page with optimized PICOS layout
- feat: Add placeholder pages for Workbench and Results
- fix: Fix nested routing structure for React Router v6
- fix: Resolve Spin component warning in MainLayout
- fix: Add QueryClientProvider to App.tsx
- style: Optimize PICOS form layout (P+I left, C+O+S right)
- style: Align Inclusion/Exclusion criteria side-by-side
- docs: Add architecture refactoring and routing fix reports

Ref: Week 2 Frontend Development
Scope: ASL module MVP - Title Abstract Screening
This commit is contained in:
2025-11-18 21:51:51 +08:00
parent e3e7e028e8
commit 3634933ece
213 changed files with 20054 additions and 442 deletions

View File

@@ -0,0 +1,133 @@
/**
* 测试JSON解析器的修复效果
*
* 测试目的:验证中文引号等格式问题是否能被正确处理
*/
import { parseJSON } from '../src/common/utils/jsonParser.js';
console.log('\n🧪 JSON解析器修复测试\n');
// 测试用例
const testCases = [
{
name: '正常JSONASCII引号',
input: '{"conclusion": "exclude", "confidence": 0.95}',
expectSuccess: true
},
{
name: '中文引号JSON',
input: '{"conclusion": "exclude", "confidence": 0.95}',
expectSuccess: true
},
{
name: '混合引号JSON',
input: '{"conclusion": "exclude", "confidence": 0.95}',
expectSuccess: true
},
{
name: 'JSON代码块中文引号',
input: `\`\`\`json
{
"judgment": {
"P": "match",
"I": "match"
},
"conclusion": "include",
"confidence": 0.85,
"reason": "虽然对照组不是安慰剂,但研究质量高"
}
\`\`\``,
expectSuccess: true
},
{
name: '带额外文字的JSON',
input: `这是筛选结果:
\`\`\`json
{"conclusion": "exclude", "confidence": 0.90}
\`\`\`
以上是我的判断。`,
expectSuccess: true
},
{
name: '全角逗号和冒号',
input: '{"conclusion""exclude""confidence"0.95}',
expectSuccess: true
},
{
name: '不完整的JSON应失败',
input: '{"conclusion": "exclude", "confidence":',
expectSuccess: false
},
{
name: '非JSON文本应失败',
input: 'This is not a JSON string at all.',
expectSuccess: false
},
{
name: '复杂嵌套JSON中文引号',
input: `{
"judgment": {
"P": "match",
"I": "partial",
"C": "mismatch",
"S": "match"
},
"evidence": {
"P": "研究对象为急性缺血性卒中患者",
"I": "干预措施为替格瑞洛",
"C": "对照组为氯吡格雷而非安慰剂",
"S": "随机对照试验"
},
"conclusion": "exclude",
"confidence": 0.92,
"reason": "虽然P、I、S维度匹配但对照组不符合要求"
}`,
expectSuccess: true
}
];
// 运行测试
let passed = 0;
let failed = 0;
testCases.forEach((testCase, index) => {
console.log(`[测试 ${index + 1}/${testCases.length}] ${testCase.name}`);
const result = parseJSON(testCase.input);
const success = result.success === testCase.expectSuccess;
if (success) {
console.log(' ✅ 通过');
if (result.success) {
console.log(` 📄 解析结果: ${JSON.stringify(result.data).substring(0, 100)}...`);
}
passed++;
} else {
console.log(' ❌ 失败');
console.log(` 期望: ${testCase.expectSuccess ? '成功' : '失败'}`);
console.log(` 实际: ${result.success ? '成功' : '失败'}`);
if (!result.success) {
console.log(` 错误: ${result.error}`);
}
failed++;
}
console.log('');
});
// 总结
console.log('='.repeat(60));
console.log('📊 测试总结\n');
console.log(`✅ 通过: ${passed}/${testCases.length}`);
console.log(`❌ 失败: ${failed}/${testCases.length}`);
console.log(`📈 成功率: ${(passed / testCases.length * 100).toFixed(1)}%`);
if (passed === testCases.length) {
console.log('\n🎉 所有测试通过JSON解析器修复成功');
} else {
console.log('\n⚠ 部分测试失败,需要进一步调试。');
}
console.log('='.repeat(60) + '\n');