fix(frontend): align MockDocumentMeta markdown property and guard nullish input in markdownToBlockAST
This commit is contained in:
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user