fix(frontend): align MockDocumentMeta markdown property and guard nullish input in markdownToBlockAST

This commit is contained in:
WeiCHEN
2026-09-11 00:58:00 +08:00
parent 0d3cc6a6ce
commit 92572138f7
4 changed files with 281 additions and 103 deletions
+25 -9
View File
@@ -494,30 +494,46 @@ def build_data():
"summary": f"{p['name']}的系统验证方案及计划,基于已批准的规格书全量映射构建,文档血缘已绑定。"
})
# 存储文档正文
# 存储文档正文 (完全对齐 MockDocumentMeta 契约)
documents[doc_srs_id] = {
"title": p["srs_title"],
"docId": doc_srs_id,
"category": "workflow",
"projectId": pid,
"taskKey": "system_reqs",
"title": p["srs_title"],
"stage": "V0.5",
"category": "workflow",
"creatorId": 1,
"creatorName": "系统管理员",
"version": "V1.0",
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"version": "1.0",
"status": "approved",
"updatedAt": "2026-09-11 00:00:00",
"summary": f"{p['name']}系统需求规格书,已通过法规与工程联合评审。",
"markdown": srs_md,
"content": srs_md,
"sha256": srs_hash
}
documents[doc_svp_id] = {
"title": p["svp_title"],
"docId": doc_svp_id,
"category": "workflow",
"projectId": pid,
"taskKey": "test_manager",
"title": p["svp_title"],
"stage": "V0.5",
"category": "workflow",
"creatorId": 1,
"creatorName": "系统管理员",
"version": "V1.0",
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"version": "1.0",
"status": "approved",
"updatedAt": "2026-09-11 00:35:00",
"summary": f"{p['name']}系统验证方案及计划,已建立完整需求映射。",
"markdown": svp_md,
"content": svp_md,
"sha256": svp_hash,
"upstreamDocId": doc_srs_id,
+14 -13
View File
@@ -664,20 +664,21 @@ export default function App() {
const [docCache, setDocCache] = useState<Record<string, DocumentAST>>(() => {
const initialCache: Record<string, DocumentAST> = { ...P2_INITIAL.docASTMap };
Object.entries(ALL_MOCK_DOCUMENTS).forEach(([id, meta]) => {
initialCache[id] = markdownToBlockAST(meta.markdown, {
docId: meta.docId,
title: meta.title,
taskKey: meta.taskKey,
version: meta.version,
category: meta.category,
creatorId: meta.creatorId,
creatorName: meta.creatorName,
const rawText = meta.markdown || (meta as any).content || '';
initialCache[id] = markdownToBlockAST(rawText, {
docId: meta.docId || id,
title: meta.title || '',
taskKey: meta.taskKey || 'system_reqs',
version: meta.version || 'V1.0',
category: meta.category || 'workflow',
creatorId: meta.creatorId || 1,
creatorName: meta.creatorName || '系统管理员',
sharedAt: meta.sharedAt,
lifecycleState: meta.lifecycleState,
isClaimed: meta.isClaimed,
author: meta.author,
reviewer: meta.reviewer,
approver: meta.approver,
lifecycleState: meta.lifecycleState || 'approved',
isClaimed: meta.isClaimed ?? true,
author: meta.author || '张工',
reviewer: meta.reviewer || '李主管',
approver: meta.approver || '王总监',
});
});
return initialCache;
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -14,7 +14,8 @@ export function markdownToBlockAST(
md: string,
meta?: Partial<DocumentAST>
): DocumentAST {
const lines = md.split(/\r?\n/);
const safeMd = typeof md === 'string' ? md : '';
const lines = safeMd.split(/\r?\n/);
const blocks: DocumentBlock[] = [];
let i = 0;