From 9256dd27e14f9b9298ccf56e8a21c9efa208a260 Mon Sep 17 00:00:00 2001 From: Codex Bot Date: Thu, 29 Oct 2026 16:51:43 +0800 Subject: [PATCH] Expose fixed version navigation and author-only withdrawal controls --- apps/waterfall-wiki/src/pages/documents/[id].tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/waterfall-wiki/src/pages/documents/[id].tsx b/apps/waterfall-wiki/src/pages/documents/[id].tsx index 76c38cb..a81ec77 100644 --- a/apps/waterfall-wiki/src/pages/documents/[id].tsx +++ b/apps/waterfall-wiki/src/pages/documents/[id].tsx @@ -1,6 +1,6 @@ import type { GetServerSideProps } from 'next'; import type { Guidance } from '@/content/guides/catalog'; import styles from '@/styles/documents.module.css'; -type Props={doc:Guidance;links:(Guidance['links'][number]&{resolved:boolean})[]}; -export default function Read({doc,links}:Props){return

{doc.title}

{doc.kind} · {doc.id} · 固定版本 {doc.revision}

{doc.summary}

适用条件

{doc.applies}

{doc.body}

    {doc.steps.map((s,i)=>
  1. {s}
  2. )}

条件链接

{links.map((l,i)=>)}

检查项

读取规范 XML

;} -export const getServerSideProps:GetServerSideProps=async({params,query,res})=>{res.setHeader('Cache-Control','no-store');const revision=query.revision;if(revision!==undefined&&(typeof revision!=='string'||! /^[1-9][0-9]{0,9}$/.test(revision)||Number(revision)>2147483647))return {notFound:true};const {resolveDocument}=await import('@/lib/guidance-store');const doc=await resolveDocument(String(params?.id),revision===undefined?undefined:Number(revision));if(!doc)return {notFound:true};const links=await Promise.all(doc.links.map(async l=>({...l,resolved:!!await resolveDocument(l.target,l.revision)})));return {props:{doc,links}};}; +type Props={canEdit:boolean;versions:number[];doc:Guidance;links:(Guidance['links'][number]&{resolved:boolean})[]}; +export default function Read({doc,links,canEdit,versions}:Props){return

{doc.title}

{doc.kind} · {doc.id} · 固定版本 {doc.revision}

版本:{versions.map(v=> v{v} )}

{doc.summary}

适用条件

{doc.applies}

{doc.body}

    {doc.steps.map((s,i)=>
  1. {s}
  2. )}

条件链接

{links.map((l,i)=>)}

检查项

    {doc.checks.map((s,i)=>
  • {s}
  • )}
读取规范 XML{canEdit&&

}
;} +export const getServerSideProps:GetServerSideProps=async({params,query,res,req})=>{res.setHeader('Cache-Control','no-store');const revision=query.revision;if(revision!==undefined&&(typeof revision!=='string'||! /^[1-9][0-9]{0,9}$/.test(revision)||Number(revision)>2147483647))return {notFound:true};const {resolveDocument}=await import('@/lib/guidance-store');const doc=await resolveDocument(String(params?.id),revision===undefined?undefined:Number(revision));if(!doc)return {notFound:true};const links=await Promise.all(doc.links.map(async l=>({...l,resolved:!!await resolveDocument(l.target,l.revision)})));const {db}=await import('@/lib/db');const {currentAccount}=await import('@/lib/account');const user=await currentAccount(new Request('http://internal',{headers:{cookie:req.headers.cookie||''}}));const owner=await db().query('SELECT owner_id FROM guidance_documents WHERE id=$1',[doc.id]);const rows=await db().query('SELECT revision FROM guidance_revisions WHERE document_id=$1 ORDER BY revision DESC',[doc.id]);return {props:{doc,links,canEdit:!!user&&owner.rows[0]?.owner_id===user.id,versions:rows.rows.map(r=>r.revision)}};};