Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
10 KiB
PKB<EFBFBD>滨垢<EFBFBD>桅<EFBFBD>靽桀<EFBFBD><EFBFBD>亙<EFBFBD>
<EFBFBD><EFBFBD> <20>桅<EFBFBD>璁<EFBFBD>膩
<EFBFBD>亙<EFBFBD><EFBFBD>園𡢿: 2026-01-06
**靽桀<E99DBD><E6A180>嗆<EFBFBD>?*: <20>?*撌脣<EFBFBD><EFBFBD>其耨憭?
<EFBFBD>桅<EFBFBD><EFBFBD>交<EFBFBD>: <20>冽<EFBFBD><E586BD>漤<EFBFBD> + <20>笔<EFBFBD><E7AC94>曉笆瘥?
<EFBFBD><EFBFBD> <20>𤑳緵<F0A491B3>?銝芷䔮憸?
<EFBFBD>桅<EFBFBD>1嚗𡁻△<EFBFBD>V<EFBFBD><EFBFBD>臬<EFBFBD>撅𧶏<EFBFBD>憿園<EFBFBD><EFBFBD>匧紡<EFBFBD>芣<EFBFBD> <20>?
<EFBFBD>啗情: 餈𥕦<E9A488>Workspace憿菟𢒰<E88F9F>𠬍<EFBFBD>憿園<E686BF>隞滨<E99A9E><E6BBA8>曄內撟喳蝱<E596B3><E89DB1><EFBFBD>撅<EFBFBD>撖潸⏛<E6BDB8>?
<EFBFBD>笔<EFBFBD>: WorkspacePage鋡怠<E98BA1>鋆孵銁MainLayout銝哨<EFBFBD>撖潸稲蝏扳㗁鈭<EFBFBD><EFBFBD>撅<EFBFBD><EFBFBD>撅<EFBFBD>
敶勗<EFBFBD>:
- 銝滨泵<EFBFBD>Ā3霈曇恣<EFBFBD>?瘝㗇絡撘?雿㯄<E99BBF>
- 瘚芾晶撅誩<EFBFBD>蝛粹𡢿
- 銝𤾸<EFBFBD><EFBFBD>见㦛銝滢<EFBFBD><EFBFBD>?
<EFBFBD>桅<EFBFBD>2嚗𡁏瓷<EFBFBD>劐<EFBFBD>銝𧢲<EFBFBD><EFBFBD>冽辺 <20>?
<EFBFBD>啗情: Chat瘨<74><E798A8><EFBFBD>箏<EFBFBD><E7AE8F>䭾<EFBFBD>皛𡁜𢆡嚗<F0A286A1><E59A97>摰寡<E691B0><E5AFA1>箸𧒄<E7AEB8>衤<EFBFBD><E8A1A4>?
<EFBFBD>笔<EFBFBD>:
- 摰孵膥瘝⊥<EFBFBD>甇<EFBFBD>&霈曄蔭
overflow撅墧<EFBFBD>? - 擃睃漲霈∠<EFBFBD>銝齿迤蝖?
敶勗<EFBFBD>:
- <EFBFBD>䭾<EFBFBD><EFBFBD>亦<EFBFBD><EFBFBD><EFBFBD>蟮瘨<EFBFBD><EFBFBD>
- <EFBFBD>冽<EFBFBD>雿㯄<EFBFBD><EFBFBD><EFBFBD>榆
<EFBFBD>桅<EFBFBD>3嚗関ab撖潸⏛擃睃漲憭芷<EFBFBD> <20>?
<EFBFBD>啗情: "<22>箄<EFBFBD><E7AE84>桃<EFBFBD>"<22>?<3F>亥<EFBFBD>韏<EFBFBD>漣"Tab撖潸⏛<E6BDB8>誯<EFBFBD>摨西<E691A8>擃矋<E69383><E79F8B>曉<EFBFBD>蝎㛖<E89D8E>
<EFBFBD>笔<EFBFBD>:
- 雿輻鍂鈭<EFBFBD>h-14
嚗?6px嚗㕑<E59A97>屸<EFBFBD><E5B1B8>笔<EFBFBD><E7AC94><EFBFBD>h-12嚗?8px嚗? - <EFBFBD>暹<EFBFBD><EFBFBD>峕<EFBFBD>摮堒偕撖貉<EFBFBD>憭?
敶勗<EFBFBD>:
- 銝𤾸<EFBFBD><EFBFBD>见㦛銝滢<EFBFBD><EFBFBD>?
- 閫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滨移<EFBFBD>?
<EFBFBD>桅<EFBFBD>4嚗鋫I撖寡<EFBFBD><EFBFBD>仿<EFBFBD> - JSON<4F>澆<EFBFBD><E6BE86>躰秤 <20>?
<EFBFBD>啗情: <20>煾<EFBFBD><E785BE><EFBFBD><EFBFBD>臬<EFBFBD><E887AC>仿<EFBFBD>嚗䫤Unexpected token 'd', "data: {"co"... is not valid JSON`
<EFBFBD>笔<EFBFBD>:
- <EFBFBD>𡒊垢餈𥪜<EFBFBD><EFBFBD><EFBFBD>糓SSE嚗𠄎erver-Sent Events嚗㗇<E59A97>撘𤩺聢撘?
- <EFBFBD>滨垢雿輻鍂
response.json()閫<EFBFBD><EFBFBD>嚗<EFBFBD>紡<EFBFBD>湔聢撘誯<EFBFBD>霂? - 瘝⊥<EFBFBD>甇<EFBFBD>&憭<EFBFBD><EFBFBD>
data:<EFBFBD>滨<EFBFBD>
敶勗<EFBFBD>:
- 摰<EFBFBD><EFBFBD><EFBFBD>䭾<EFBFBD>雿輻鍂AI撖寡<EFBFBD><EFBFBD>蠘<EFBFBD>
- <EFBFBD>詨<EFBFBD><EFBFBD>蠘<EFBFBD>銝滚虾<EFBFBD>?
<EFBFBD>?靽桀<E99DBD><E6A180>寞<EFBFBD>
靽桀<EFBFBD>1嚗𡁜<EFBFBD><EFBFBD>啣<EFBFBD>撅𤩺<EFBFBD>瘚詨<EFBFBD>撣<EFBFBD><EFBFBD>
隞<EFBFBD><EFBFBD>靽格㺿
// frontend-v2/src/modules/pkb/pages/WorkspacePage.tsx
interface WorkspacePageProps {
standalone?: boolean; // <20>啣<EFBFBD>standalone璅∪<E79285>
}
const WorkspacePage: React.FC<WorkspacePageProps> = ({ standalone = false }) => {
// 憒<><E68692><EFBFBD>盎tandalone璅∪<E79285>嚗䔶蝙<E494B6>典𤐄摰𡁜<E691B0>雿滩<E99BBF><E6BBA9>𡝗㟲銝芸<E98A9D>撟?
const containerClass = standalone
? "fixed inset-0 z-50 flex flex-col bg-gray-50" // <20>典<EFBFBD>閬<EFBFBD><E996AC>
: "flex flex-col h-screen bg-gray-50"; // <20>桅<EFBFBD>𡁏芋撘?
return (
<div className={containerClass}>
{/* ... */}
</div>
);
};
// frontend-v2/src/modules/pkb/index.tsx
<Routes>
<Route path="/" element={<Navigate to="dashboard" replace />} />
<Route path="dashboard" element={<DashboardPage />} />
{/* Workspace憿菟𢒰<E88F9F>典<EFBFBD><E585B8>祉<EFBFBD>嚗䔶<E59A97>雿輻鍂憭硋<E686AD>Layout */}
<Route path="workspace/:kbId" element={<WorkspacePage standalone />} />
</Routes>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>?Workspace憿菟𢒰摰<F0A292B0><E691B0>閬<EFBFBD><E996AC>撅誩<E69285>
<0A>?瘝⊥<E7989D>憿園<E686BF>撖潸⏛<E6BDB8>?
<0A>?瘝㗇絡撘譍<E69298>撉?
靽桀<EFBFBD>2嚗𡁏迤蝖株挽蝵格<EFBFBD><EFBFBD>冽辺
隞<EFBFBD><EFBFBD>靽格㺿
// WorkspacePage.tsx - 銝餃捆<E9A483>?
<main className="flex-1 overflow-hidden relative">
{activeTab === 'chat' && (
<div className="h-full flex overflow-hidden"> {/* 瘛餃<E7989B>overflow-hidden */}
<div className="flex-1 flex flex-col bg-white overflow-hidden">
{/* 撌乩<E6928C>璅∪<E79285><E288AA>㗇𥋘<E39787>?*/}
<div className="p-3 border-b border-gray-100 flex-shrink-0">
{/* ... */}
</div>
{/* Chat<61>箏<EFBFBD> - <20>舀<EFBFBD><E88880>?*/}
<div className="flex-1 overflow-y-auto"> {/* 瘛餃<E7989B>overflow-y-auto */}
{/* ... */}
</div>
</div>
</div>
)}
</main>
// FullTextMode.tsx
<div className="h-full flex flex-col overflow-hidden">
<div className="flex-shrink-0 px-4 pt-4"> {/* <20>箏<EFBFBD><E7AE8F>箏<EFBFBD> */}
<Alert {...} />
</div>
<div className="flex-1 overflow-hidden px-4 pb-4"> {/* <20>舀<EFBFBD><E88880>典躹<E585B8>?*/}
<ChatContainer {...} />
</div>
</div>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>?Chat瘨<74><E798A8><EFBFBD>箏<EFBFBD><E7AE8F>臭誑甇<E8AA91>虜皛𡁜𢆡
<0A>?撌乩<E6928C>璅∪<E79285><E288AA>㗇𥋘<E39787>典𤐄摰𡁜銁憿園<E686BF>
<0A>?皛𡁜𢆡<F0A1819C>⊥甅撘讐<E69298>閫?
靽桀<EFBFBD>3嚗𡁶移蝖株<EFBFBD><EFBFBD>幅ab擃睃漲
隞<EFBFBD><EFBFBD>靽格㺿
// WorkspacePage.tsx
// 靽格㺿<E6A0BC>?
<div className="bg-white border-b border-gray-200 px-6 flex items-center shadow-sm z-20 h-14">
<button className="...">
<MessageSquare className="w-5 h-5 mr-2" />
<span className="text-base"><EFBFBD>箄<EFBFBD><EFBFBD>桃<EFBFBD></span>
</button>
</div>
// 靽格㺿<E6A0BC>?
<div className="bg-white border-b border-gray-200 px-6 flex items-center shadow-sm z-20 h-12 flex-shrink-0">
<button className="...">
<MessageSquare className="w-4 h-4 mr-2" /> {/* w-5 <20>?w-4 */}
<span className="text-sm"><EFBFBD>箄<EFBFBD><EFBFBD>桃<EFBFBD></span> {/* text-base <20>?text-sm */}
</button>
</div>
撖寞<EFBFBD>
| 撅墧<EFBFBD>? | 靽格㺿<EFBFBD>? | 靽格㺿<EFBFBD>? | <EFBFBD>笔<EFBFBD><EFBFBD>? |
|---|---|---|---|
| 擃睃漲 | h-14 (56px) | h-12 (48px) | <EFBFBD>?h-12 |
| <EFBFBD>暹<EFBFBD> | w-5 h-5 (20px) | w-4 h-4 (16px) | <EFBFBD>?w-4 h-4 |
| <EFBFBD><EFBFBD><EFBFBD> | text-base (16px) | text-sm (14px) | <EFBFBD>?text-sm |
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>?Tab擃睃漲蝎曄&<E69B84>寥<EFBFBD><E5AFA5>笔<EFBFBD>
<0A>?閫<><E996AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>渡移<E6B8A1>?
<0A>?銝竚3霈曇恣100%銝<><E98A9D>?
靽桀<EFBFBD>4嚗𡁏迤蝖桀<EFBFBD><EFBFBD><EFBFBD>SE瘚<EFBFBD><EFBFBD><EFBFBD>滚<EFBFBD>
<EFBFBD>桅<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>𡒊垢餈𥪜<EFBFBD><EFBFBD><EFBFBD>聢撘𧶏<EFBFBD>
data: {"content":"<22>?,"role":"assistant"}
data: {"content":"憟?,"role":"assistant"}
data: {"content":"嚗?,"role":"assistant"}
data: [DONE]
<EFBFBD>滨垢<EFBFBD>躰秤隞<EFBFBD><EFBFBD>嚗?
// <20>?<3F>躰秤嚗𡁶凒<F0A181B6>乩蝙<E4B9A9>禿esponse.json()
const data = await response.json();
靽桀<EFBFBD>隞<EFBFBD><EFBFBD>
// FullTextMode.tsx & DeepReadMode.tsx
requestFn: async (message: string) => {
const response = await fetch('/api/v1/chat/stream', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'text/event-stream', // <20><> <20>喲睸嚗𡁏<E59A97>摰锭SE<53>澆<EFBFBD>
},
body: JSON.stringify({
content: message,
modelType: 'qwen-long', // 雿輻鍂qwen-long璅∪<E79285>
knowledgeBaseIds: [kbId],
fullTextDocumentIds, // <20>?documentIds
}),
});
if (!response.ok) {
throw new Error(`API霂瑟<E99C82>憭梯揖: ${response.status}`);
}
// <20><> 甇<>&憭<EFBC86><E686AD>瘚<EFBFBD><E7989A><EFBFBD>滚<EFBFBD>
const reader = response.body?.getReader();
const decoder = new TextDecoder();
let fullContent = '';
if (reader) {
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6); // 蝘駁膄"data: "<22>滨<EFBFBD>
if (data === '[DONE]') break;
try {
const json = JSON.parse(data);
if (json.content) {
fullContent += json.content; // 蝝舐妖<E88890><E5A696>捆
}
} catch (e) {
// 敹賜裦閫<E8A3A6><E996AB><EFBFBD>躰秤
}
}
}
}
}
return {
content: fullContent,
messageId: Date.now().toString(),
};
}
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>?甇<>&閫<EFBC86><E996AB>SSE瘚<45><E7989A><EFBFBD>滚<EFBFBD>
<0A>?AI撖寡<E69296><E5AFA1>蠘<EFBFBD>甇<EFBFBD>虜撌乩<E6928C>
<0A>?<3F>舀<EFBFBD>瘚<EFBFBD><E7989A>颲枏枂嚗<E69E82><E59A97>𣂼<EFBFBD><F0A382BC>曄內嚗?
<EFBFBD><EFBFBD> 靽桀<E99DBD><E6A180>滚<EFBFBD>撖寞<E69296>
閫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撖寞<EFBFBD>
| 憿寧𤌍 | 靽桀<EFBFBD><EFBFBD>? | 靽桀<EFBFBD><EFBFBD>? | <EFBFBD>笔<EFBFBD><EFBFBD>曆<EFBFBD><EFBFBD>湔<EFBFBD>? |
|---|---|---|---|
| <EFBFBD>典<EFBFBD>璅∪<EFBFBD> | <EFBFBD>?<3F>厰▲<E58EB0>典紡<E585B8>? | <EFBFBD>?摰<><E691B0><EFBFBD>典<EFBFBD> | <EFBFBD>?100% |
| 皛𡁜𢆡<EFBFBD>? | <EFBFBD>?<3F>䭾<EFBFBD>皛𡁜𢆡 | <EFBFBD>?甇<>虜皛𡁜𢆡 | <EFBFBD>?100% |
| Tab擃睃漲 | <EFBFBD>?56px (蝎㛖<E89D8E>) | <EFBFBD>?48px (蝎曇稲) | <EFBFBD>?100% |
| <EFBFBD>暹<EFBFBD>撠箏站 | <EFBFBD>?20px | <EFBFBD>?16px | <EFBFBD>?100% |
| <EFBFBD><EFBFBD><EFBFBD>憭批<EFBFBD> | <EFBFBD>?16px | <EFBFBD>?14px | <EFBFBD>?100% |
<EFBFBD>蠘<EFBFBD>撖寞<EFBFBD>
| <EFBFBD>蠘<EFBFBD> | 靽桀<EFBFBD><EFBFBD>? | 靽桀<EFBFBD><EFBFBD>? |
|---|---|---|
| AI撖寡<EFBFBD> | <EFBFBD>?<3F>仿<EFBFBD><E4BBBF>䭾<EFBFBD>雿輻鍂 | <EFBFBD>?甇<>虜撌乩<E6928C> |
| <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD>粉 | <EFBFBD>?<3F>䭾<EFBFBD>雿輻鍂 | <EFBFBD>?甇<>虜撌乩<E6928C> |
| <EFBFBD>鞟<EFBFBD>蝎曇粉 | <EFBFBD>?<3F>䭾<EFBFBD>雿輻鍂 | <EFBFBD>?甇<>虜撌乩<E6928C> |
| 瘨<EFBFBD><EFBFBD>皛𡁜𢆡 | <EFBFBD>?<3F>䭾<EFBFBD>皛𡁜𢆡 | <EFBFBD>?甇<>虜皛𡁜𢆡 |
<EFBFBD>㴓 <20><><EFBFBD>航<EFBFBD><E888AA>寞<EFBFBD>餌<EFBFBD>
1. <20>典<EFBFBD>瘝㗇絡撘誩<E69298>撅<EFBFBD>
**<2A>喲睸<E596B2><E79DB8><EFBFBD>?*:
fixed inset-0 z-50嚗𡁜𤐄摰𡁜<EFBFBD>雿㵪<EFBFBD>閬<EFBFBD><EFBFBD><EFBFBD>港葵閫<EFBFBD>藁standaloneprop嚗𡁏綉<F0A1818F>嗆糓<E59786>虫蝙<E899AB>典<EFBFBD>撅𤩺芋撘?- <EFBFBD>祉<EFBFBD>頝舐眏嚗帋<EFBFBD><EFBFBD><EFBFBD>ㄨ<EFBFBD>決ainLayout銝?
2. 皛𡁜𢆡摰孵膥撅<E886A5>漣
**甇<>&<EFBFBD><EFBC86><EFBFBD>蝥抒<E89DA5><E68A92>?*:
<main className="flex-1 overflow-hidden"> {/* 憭硋<E686AD>嚗𡁻<E59A97><F0A181BB>𤩺滯<F0A4A9BA>?*/}
<div className="h-full flex overflow-hidden"> {/* 銝剖<E98A9D>嚗𡁜𤐄摰𡁻<E691B0>摨?*/}
<div className="flex-1 overflow-y-auto"> {/* <20><><EFBFBD>嚗𡁜虾皛𡁜𢆡 */}
{/* <20><>捆 */}
</div>
</div>
</main>
3. SSE瘚<45><E7989A><EFBFBD>滚<EFBFBD>憭<EFBFBD><E686AD>
<EFBFBD>喲睸甇仿炊:
- 霈曄蔭甇<EFBFBD>&<EFBFBD><EFBFBD>窈瘙<EFBFBD>仍嚗䫤Accept: text/event-stream`
- 雿輻鍂
ReadableStreamAPI霂餃<E99C82><E9A483>滚<EFBFBD> - <EFBFBD>鞱<EFBFBD>閫<EFBFBD><EFBFBD>
data:<EFBFBD>澆<EFBFBD> - 蝝舐妖<EFBFBD><EFBFBD>捆<EFBFBD><EFBFBD>挾
- 憭<EFBFBD><EFBFBD>
[DONE]蝏𤘪<EFBFBD><EFBFBD><EFBFBD>扇
4. 蝎曄&餈睃<E9A488>霈曇恣
霈曇恣閫<EFBFBD><EFBFBD>:
- 擃睃漲嚗帋艇<EFBFBD>潔蝙<EFBFBD>汽ailwind<EFBFBD><EFBFBD>-12<31><32>-14蝑?
- <EFBFBD>暹<EFBFBD>嚗鯱-4 h-4嚗?6px嚗?
- <EFBFBD><EFBFBD><EFBFBD>嚗魩ext-sm嚗?4px嚗?
- <EFBFBD>渲<EFBFBD>嚗䮝-3嚗?2px嚗?
<EFBFBD><EFBFBD> 靽格㺿<E6A0BC><E3BABF>辣皜<E8BEA3><E79A9C>
靽格㺿<EFBFBD><EFBFBD>辣嚗?銝迎<E98A9D>
frontend-v2/src/modules/pkb/
<0A>鎿<EFBFBD><E98EBF><EFBFBD> index.tsx (瘛餃<E7989B>standalone頝舐眏)
<0A>鎿<EFBFBD><E98EBF><EFBFBD> pages/WorkspacePage.tsx (<28>典<EFBFBD>+皛𡁜𢆡+Tab擃睃漲)
<0A>婙<EFBFBD><E5A999><EFBFBD> components/Workspace/
<20>鎿<EFBFBD><E98EBF><EFBFBD> FullTextMode.tsx (SSE瘚<45><E7989A><EFBFBD>滚<EFBFBD>)
<20>婙<EFBFBD><E5A999><EFBFBD> DeepReadMode.tsx (SSE瘚<45><E7989A><EFBFBD>滚<EFBFBD>)
<EFBFBD>?撉諹<E69289>皜<EFBFBD><E79A9C>
敹<EFBFBD>◆撉諹<EFBFBD>嚗㇊0嚗?
- Workspace憿菟𢒰<EFBFBD>典<EFBFBD><EFBFBD>曄內
- 瘝⊥<EFBFBD>憿園<EFBFBD>撖潸⏛<EFBFBD>?
- Chat瘨<EFBFBD><EFBFBD><EFBFBD>臭誑甇<EFBFBD>虜皛𡁜𢆡
- Tab擃睃漲銝?8px
- AI撖寡<EFBFBD>甇<EFBFBD>虜撌乩<EFBFBD>
- <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD>粉璅∪<EFBFBD><EFBFBD>舐鍂
- <EFBFBD>鞟<EFBFBD>蝎曇粉璅∪<EFBFBD><EFBFBD>舐鍂
摨磰砲撉諹<EFBFBD>嚗㇊1嚗?
- 皛𡁜𢆡<EFBFBD>⊥甅撘讐<EFBFBD>閫?
- Tab<EFBFBD><EFBFBD>揢瘚<EFBFBD><EFBFBD>
- 撌乩<EFBFBD>璅∪<EFBFBD><EFBFBD><EFBFBD>揢甇<EFBFBD>虜
- PDF靘扯器<EFBFBD>𤩺迤撣?
<EFBFBD>臭誑隡睃<EFBFBD>嚗㇊2嚗?
- 瘚<EFBFBD><EFBFBD>颲枏枂<EFBFBD>函𤫇<EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>躰秤<EFBFBD>鞟內隡睃<EFBFBD>
- <EFBFBD>㰘蝸<EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD><EFBFBD> 銝衤<E98A9D>甇?
- <EFBFBD>冽<EFBFBD>撉諹<EFBFBD>: 霂瑞鍂<E7919E>琿<EFBFBD><E790BF>啣<EFBFBD>頧賡△<E8B3A1>X<EFBFBD>霂?
- <EFBFBD>扯<EFBFBD>隡睃<EFBFBD>: 隡睃<E99AA1>瘚<EFBFBD><E7989A><EFBFBD>滚<EFBFBD><E6BB9A><EFBFBD>葡<EFBFBD>𤘪<EFBFBD>扯<EFBFBD>
- <EFBFBD>躰秤憭<EFBFBD><EFBFBD>: 摰<><E691B0>API<50>躰秤<E8BAB0>鞟內
- **<2A>孵<EFBFBD><E5ADB5><EFBFBD>芋撘?*: 摰䂿緵<E482BF>孵<EFBFBD><E5ADB5><EFBFBD><EFBFBD><EFBFBD>賜<EFBFBD>摰峕㟲瘚<E39FB2><E7989A>
<EFBFBD>働 蝏誯<E89D8F><E8AAAF>躰悌
1. 霈曇恣餈睃<E9A488>閬<EFBFBD>移蝖?
- 銝滩<EFBFBD>"撌桐<E6928C>憭?嚗諹<E59A97>"摰<><E691B0>銝<EFBFBD><E98A9D>?
- 瘥譍葵<EFBFBD>讐<EFBFBD><EFBFBD>質<EFBFBD>撖寞<EFBFBD><EFBFBD>笔<EFBFBD><EFBFBD>?
- 雿輻鍂Tailwind<EFBFBD><EFBFBD>移蝖桀偕撖貊掩
2. <20>典<EFBFBD>憿菟𢒰<E88F9F><F0A292B0>閬<EFBFBD>鸌畾𠰴<E795BE><F0A0B0B4>?
- 銝滩<EFBFBD>蝞<EFBFBD><EFBFBD>訫𧑐<EFBFBD>曉銁MainLayout銝?
- <EFBFBD><EFBFBD>閬<EFBFBD>fixed`摰帋<E691B0><E5B88B>𣇉𡠺蝡贝楝<E8B49D>?
- <EFBFBD><EFBFBD><EFBFBD>z-index撅<78>漣
3. 皛𡁜𢆡摰孵膥閬<E886A5><E996AC>蝏<EFBFBD>挽霈?
- 憭硋<EFBFBD>
overflow-hidden - <EFBFBD><EFBFBD><EFBFBD>
overflow-y-auto - <EFBFBD>箏<EFBFBD><EFBFBD>箏<EFBFBD>
flex-shrink-0
4. API<50>澆<EFBFBD>閬<EFBFBD><E996AC><EFBFBD>𡒊垢撖寥<E69296>
- 隞𠉛<EFBFBD><EFBFBD>亦<EFBFBD><EFBFBD>𡒊垢隞<EFBFBD><EFBFBD>
- <EFBFBD><EFBFBD>圾SSE瘚<EFBFBD><EFBFBD><EFBFBD>澆<EFBFBD>
- 甇<EFBFBD>&憭<EFBFBD><EFBFBD>瘚<EFBFBD><EFBFBD><EFBFBD>唳旿
靽桀<EFBFBD>摰峕<EFBFBD><EFBFBD>園𡢿: 2026-01-06
**靽桀<E99DBD>鈭?: AI Assistant
**撉諹<E69289><E8ABB9>嗆<EFBFBD>?: 敺<>鍂<EFBFBD>瑞&霈?