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%)
387 lines
17 KiB
Markdown
387 lines
17 KiB
Markdown
# ADMIN-餈鞱𨯫蝞∠<E89D9E>蝡?- 璅∪<E79285>敶枏<E695B6><E69E8F>嗆<EFBFBD><E59786><EFBFBD>撘<EFBFBD><E69298>烐<EFBFBD><E78390>?
|
||
> **<2A><><EFBFBD>擧凒<E693A7>堆<EFBFBD>** 2026-01-12
|
||
> **<2A>嗆<EFBFBD><E59786><EFBFBD>** <20>?Phase 3.5.5 撌脣<E6928C><E884A3>琜<EFBFBD>Phase 4.0 蝘<><E89D98>蝞∠<E89D9E>撌脣<E6928C><E884A3>?
|
||
> **<2A><>𧋦嚗?* v0.4 (Alpha)
|
||
|
||
---
|
||
|
||
## <20>㴓 銝<><E98A9D>亥<EFBFBD><E4BAA5>餌<EFBFBD>
|
||
|
||
**餈鞱𨯫蝞∠<E89D9E>蝡舀糓AI銝游<E98A9D><E6B8B8>𠉛弦撟喳蝱<E596B3><E89DB1>瓲敹<E793B2>恣<EFBFBD><E681A3><EFBFBD><EFBFBD>堆<EFBFBD><E5A086>𣂷<EFBFBD>憭𡁶<E686AD><F0A181B6>瑞恣<E7919E><E681A3><EFBFBD><EFBFBD>rompt撌亦<E6928C><E4BAA6>𤥁<EFBFBD>霂𨰻<E99C82><F0A8B0BB>鍂<EFBFBD>瑟<EFBFBD><E7919F>鞾<EFBFBD>蝵桃<E89DB5>餈鞱𨯫<E99EB1>賢<EFBFBD><E8B3A2>?*
|
||
|
||
---
|
||
|
||
## <20><> 敶枏<E695B6>撘<EFBFBD><E69298>𤑳𠶖<F0A491B3>?
|
||
### <20>?撌脣<E6928C><E884A3>琜<EFBFBD>2026-01-11嚗?
|
||
**Phase 0-3嚗𡁜抅蝖<E68A85><E89D96>嗆<EFBFBD>**
|
||
- [x] <20>唳旿摨?Schema 霈曇恣嚗īlatform_schema, capability_schema嚗?- [x] JWT 霈方<E99C88>蝟餌<E89D9F>嚗Ǒbackend/src/common/auth/`嚗?- [x] <20>餃<EFBFBD>/<2F>餃枂<E9A483>蠘<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>𡒊垢摰峕㟲摰䂿緵嚗?- [x] 霈方<E99C88>銝剝𡢿隞塚<E99A9E>Fastify嚗?- [x] <20>滨垢霈方<E99C88>撖寞𦻖嚗㇁uthContext, LoginPage嚗?- [x] 瘚贝<E7989A><E8B49D>冽<EFBFBD><E586BD>𥕦遣嚗?銝芾<E98A9D><E88ABE>脩鍂<E884A9>瘀<EFBFBD>
|
||
|
||
**Phase 3.5.1嚗䥪rompt <20>箇<EFBFBD>霈暹鴌**
|
||
- [x] <20>𥕦遣 capability_schema
|
||
- [x] 瘛餃<E7989B> prompt_templates <20>?prompt_versions 銵?- [x] 瘛餃<E7989B> prompt:* <20><><EFBFBD>嚗ǒiew/edit/debug/publish嚗?- [x] 餈<>宏 RVW Prompt <20>唳㺭<E594B3>桀<EFBFBD>嚗?銝迎<E98A9D>EDITORIAL, METHODOLOGY嚗?
|
||
**Phase 3.5.2嚗䥪romptService <20>詨<EFBFBD>**
|
||
- [x] <20>啣漲憸<E6BCB2><E686B8><EFBFBD>餉<EFBFBD>嚗㇄RAFT/ACTIVE <20><><EFBFBD>嚗?- [x] 璅∪<E79285>蝥扯<E89DA5>霂閙綉<E99699>塚<EFBFBD>setDebugMode嚗?- [x] Handlebars 璅⊥踎皜脫<E79A9C>
|
||
- [x] <20>㗛<EFBFBD><E3979B>𣂼<EFBFBD>銝擧嵗撉䕘<E69289>extractVariables, validateVariables嚗?- [x] 銝厩漣摰寧<E691B0>嚗<EFBFBD>㺭<EFBFBD>桀<EFBFBD><E6A180>垍<EFBFBD>摮覀<E691AE><E8A680>𨅯<EFBFBD>嚗?- [x] <20>𨅯<EFBFBD> Prompt嚗áardcoded fallbacks嚗?
|
||
**Phase 3.5.3嚗𡁶恣<EFBFBD>?API**
|
||
- [x] 8銝?RESTful <20>亙藁嚗<E89781><E59A97>銵具<E98AB5><E585B7>祕<EFBFBD><E7A595><EFBFBD><EFBFBD><EFBFBD>摮塩<E691AE><E5A1A9><EFBFBD>撣<EFBFBD><E692A3><EFBFBD><EFBFBD>皛𠾼<E79A9B><F0A0BEBC><EFBFBD>霂𨰻<E99C82><F0A8B0BB><EFBFBD>霂閙葡<E99699>瓐<EFBFBD><E79390><EFBFBD>蝻枏<E89DBB>嚗?- [x] 頝舐眏瘜典<E7989C>嚗Ǒ/api/admin/prompts`嚗?
|
||
**Phase 3.5.4嚗𡁜<EFBFBD>蝡舐恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*
|
||
- [x] 蝞∠<E89D9E>蝡臬抅蝖<E68A85><E89D96>嗆<EFBFBD>嚗㇁dminLayout, OrgLayout, 頝舐眏嚗?- [x] 憭游<E686AD>銝𧢲<E98A9D><F0A7A2B2>𨅯<EFBFBD><F0A885AF><EFBFBD>揢<EFBFBD>亙藁
|
||
- [x] PromptListPage嚗<65><E59A97><EFBFBD>剹<EFBFBD><E589B9><EFBFBD>蝝U<E89D9D><EFBCB5><EFBFBD>霂訫<E99C82><E8A8AB>喉<EFBFBD>
|
||
- [x] PromptEditor嚗㇃odeMirror 6 蝞<><E89D9E>𣇉<EFBFBD>嚗䔶葉<E494B6><E89189><EFBFBD>憟踝<E6869F>
|
||
- [x] PromptEditorPage嚗<65><E59A97>颲㻫<E9A2B2><E3BBAB><EFBFBD>摮塩<E691AE><E5A1A9><EFBFBD>撣<EFBFBD><E692A3><EFBFBD><EFBFBD>霂𨰻<E99C82><F0A8B0BB><EFBFBD><EFBFBD>砍<EFBFBD><E7A08D>莎<EFBFBD>
|
||
|
||
**Phase 3.5.5嚗鑹VW 璅∪<E79285><E288AA><EFBFBD><EFBFBD>** <20>?撌脣<E6928C><E884A3>琜<EFBFBD>2026-01-12嚗?- [x] RVW editorialService <20><><EFBFBD> PromptService
|
||
- [x] RVW methodologyService <20><><EFBFBD> PromptService
|
||
- [x] RVW reviewWorker 隡𣳇<E99AA1>?userId
|
||
- [x] 靽桀<E99DBD> ReviewTask 憭㚚睸蝥行<E89DA5><E8A18C>桅<EFBFBD>嚗<EFBFBD>楊 schema 憭㚚睸嚗?- [x] <20>冽芋<E586BD>𡑒恕霂<E68195><E99C82><EFBFBD><EFBFBD><EFBFBD>嚗㇌VW, PKB, ASL, DC嚗?
|
||
**Phase 4.0嚗𡁶<EFBFBD><EFBFBD>瑚<EFBFBD>璅∪<EFBFBD>蝞∠<EFBFBD>** <20>?撌脣<E6928C><E884A3>琜<EFBFBD>2026-01-12嚗?- [x] <20>啣<EFBFBD> modules 銵剁<E98AB5><E58981>冽<EFBFBD><E586BD>芋<EFBFBD>㛖恣<E39B96><E681A3><EFBFBD>
|
||
- [x] ModuleService嚗<65><E59A97>蝘<EFBFBD><E89D98>璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>僎嚗?- [x] requireModule 銝剝𡢿隞塚<E99A9E>璅∪<E79285>霈輸䔮<E8BCB8>批<EFBFBD>嚗?- [x] <20><><EFBFBD>劐<EFBFBD><E58A90>⊥芋<E28AA5>埈溶<E59F88>?requireModule 璉<><E79289>?- [x] 蝘<><E89D98>蝞∠<E89D9E><E288A0>𡒊垢 API嚗㇃RUD + 璅∪<E79285><E288AA>滨蔭嚗?- [x] 蝘<><E89D98>蝞∠<E89D9E><E288A0>滨垢<E6BBA8>屸𢒰嚗<F0A292B0><E59A97>銵具<E98AB5><E585B7>祕<EFBFBD><E7A595><EFBFBD><EFBFBD><EFBFBD>颲㻫<E9A2B2><E3BBAB>芋<EFBFBD>烾<EFBFBD>蝵殷<E89DB5>
|
||
- [x] <20>滨垢璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>冽<EFBFBD><E586BD><EFBFBD>皛歹<E79A9B>擐㚚△ + 撖潸⏛嚗?- [x] Prompt <20>屸𢒰隡睃<E99AA1>嚗<EFBFBD>芋<EFBFBD>𦯀葉<F0A6AF80><E89189>遬蝷箝<E89DB7><E7AE9D><EFBFBD><EFBFBD>砍<EFBFBD><E7A08D>脣<EFBFBD>撘綽<E69298>
|
||
|
||
### <20>?敺<><E695BA><EFBFBD>𡢅<EFBFBD><F0A1A285>劐<EFBFBD><E58A90><EFBFBD>漣嚗?
|
||
**P1 - <20>冽<EFBFBD>蝞∠<E89D9E>嚗Áeek 4-5嚗?*
|
||
- [ ] <20>冽<EFBFBD>蝞∠<E89D9E><E288A0>屸𢒰嚗<F0A292B0><E59A97>銵具<E98AB5><E585B7><EFBFBD>撱箝<E692B1><E7AE9D><EFBFBD>颲𡢅<E9A2B2>
|
||
- [ ] <20>冽<EFBFBD>憭𡁶<E686AD><F0A181B6>瑕<EFBFBD><E79195>娪<EFBFBD>蝵?- [ ] 閫坿𠧧<E59DBF><F0A0A7A7><EFBFBD><EFBFBD>蠘<EFBFBD>
|
||
- [ ] <20>冽<EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD>亦<EFBFBD>
|
||
|
||
**P2 - Prompt 蝞∠<E89D9E>隡睃<E99AA1>**
|
||
- [ ] Prompt <20><>𧋦撖寞<E69296><E5AF9E>蠘<EFBFBD>
|
||
- [ ] Prompt <20>寥<EFBFBD><E5AFA5>滢<EFBFBD>
|
||
- [ ] Prompt 撖澆<E69296>/撖澆枂
|
||
|
||
**P2 - 蝘<><E89D98>擃条漣<E69DA1>蠘<EFBFBD>**
|
||
- [ ] <20><><EFBFBD>摰𡁜<E691B0><F0A1819C>滨蔭嚗ēogo<67><6F>蜓憸䁅𠧧嚗?- [ ] 蝘<><E89D98>銝枏<E98A9D><E69E8F>餃<EFBFBD>憿?- [ ] <20>漤<EFBFBD>蝞∠<E89D9E><E288A0>屸𢒰
|
||
|
||
---
|
||
|
||
## <20><>儭?<3F>唳旿摨梶𠶖<E6A2B6>?
|
||
### 撌脫<E6928C>銵剁<E98AB5><E58981><EFBFBD>閬<EFBFBD>㟲<EFBFBD><E39FB2><EFBFBD>
|
||
|
||
```sql
|
||
-- <20>唳<EFBFBD><E594B3><EFBFBD>鍂<EFBFBD>瑁”嚗<E2809D><E59A97>閬<EFBFBD><E996AC>銝<EFBFBD>嚗?public.users -- <20>抒<EFBFBD><E68A92>冽<EFBFBD>銵?platform_schema.User -- <20>啁<EFBFBD><E59581>冽<EFBFBD>銵剁<E98AB5>Prisma嚗?
|
||
-- <20>唳<EFBFBD><E594B3><EFBFBD>恣霈∟”
|
||
public.AdminLog -- <20>抒<EFBFBD>摰∟恣<E2889F>亙<EFBFBD>
|
||
```
|
||
|
||
### <20>?撌脣<E6928C>撱箇<E692B1>銵剁<E98AB5>2026-01-12嚗?
|
||
**platform_schema嚗<61>像<EFBFBD>啣抅蝖<E68A85>嚗?*
|
||
- <20>?`users` - <20>冽<EFBFBD>銵剁<E98AB5><E58981>?phone, password, role, is_default_password嚗?- <20>?`tenants` - 蝘<><E89D98>銵剁<E98AB5><E58981>?PUBLIC 蝐餃<E89D90>嚗?- <20>?`tenant_members` - 蝘<><E89D98><EFBFBD>𣂼<EFBFBD>嚗<EFBFBD>𣈲<EFBFBD><F0A388B2>鍂<EFBFBD>瑕<EFBFBD><E79195>亙<EFBFBD>銝芰<E98A9D><E88AB0>瘀<EFBFBD>
|
||
- <20>?`tenant_modules` - 蝘<><E89D98>霈a<E99C88>璅∪<E79285>嚗<EFBFBD>綉<EFBFBD>嗥<EFBFBD><E597A5>瑕虾霈輸䔮<E8BCB8><E494AE><EFBFBD><EFBFBD>踝<EFBFBD>
|
||
- <20>?`tenant_quotas` - 蝘<><E89D98><EFBFBD>漤<EFBFBD>
|
||
- <20>?`tenant_quota_allocations` - <20>漤<EFBFBD><E6BCA4><EFBFBD><EFBFBD>
|
||
- <20>?`departments` - 蝘穃恕銵?- <20>?`permissions` - <20><><EFBFBD>銵剁<E98AB5><E58981>?prompt:*/tenant:* <20><><EFBFBD>嚗?- <20>?`role_permissions` - 閫坿𠧧<E59DBF><F0A0A7A7><EFBFBD>
|
||
- <20>?`verification_codes` - 撉諹<E69289><E8ABB9><EFBFBD>”
|
||
- <20>?`modules` - 蝟餌<E89D9F>璅∪<E79285>銵剁<E98AB5><E58981>冽<EFBFBD><E586BD>恣<EFBFBD><E681A3>虾<EFBFBD>冽芋<E586BD>梹<EFBFBD><E6A2B9><EFBFBD> 2026-01-12
|
||
|
||
**capability_schema嚗<61><E59A97>𡁶鍂<F0A181B6>賢<EFBFBD>嚗?* <20>?<3F>啣<EFBFBD>
|
||
- <20>?`prompt_templates` - Prompt璅⊥踎
|
||
- <20>?`prompt_versions` - Prompt<70><74>𧋦
|
||
|
||
**admin_schema嚗<61><E59A97><EFBFBD>亦恣<E4BAA6><E681A3><EFBFBD>**
|
||
- `admin_operation_logs` - 餈鞱𨯫<E99EB1>滢<EFBFBD><E6BBA2>亙<EFBFBD>
|
||
|
||
---
|
||
|
||
## <20><>儭?<3F>嗆<EFBFBD>璁<EFBFBD><E79281>
|
||
|
||
```
|
||
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? 餈鞱𨯫蝞∠<E89D9E>蝡荔<E89DA1>ADMIN Portal嚗? <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? <20>𨘻 蝘<><E89D98>蝞∠<E89D9E> <20>? <20>𪈠 <20>冽<EFBFBD>蝞∠<E89D9E> <20>? <20>綫 Prompt蝞∠<E89D9E> <20>?<3F>? <20><> <20>漤<EFBFBD>蝞∠<E89D9E> <20>? <20><> <20><><EFBFBD><EFBFBD>滨蔭 <20>? <20><> 摰∟恣<E2889F>亙<EFBFBD> <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Platform Layer (撟喳蝱撅? <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? 霈方<E99C88>銝剖<E98A9D> <20>?<3F><><EFBFBD>銝剖<E98A9D> <20>?摮睃<E691AE><E79D83>滚𦛚 <20>?<3F>𡁶䰻<F0A181B6>滚𦛚 <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Capability Layer (<28>賢<EFBFBD>撅? <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Prompt蝞∠<E89D9E> <20>?LLM Gateway <20>?<3F><>﹝撘閙<E69298> <20>?RAG撘閙<E69298> <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Business Modules (銝𡁜𦛚璅∪<E79285>) <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? ASL <20>?DC <20>?IIT <20>?PKB <20>?AIA <20>?RVW <20>?SSA <20>?ST <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?```
|
||
|
||
---
|
||
|
||
## <20><> 閫坿𠧧銝擧<E98A9D><E693A7>鞟畆<E99E9F>?
|
||
| <20>蠘<EFBFBD>璅∪<E79285> | SUPER_ADMIN | PROMPT_ENGINEER | HOSPITAL_ADMIN | PHARMA_ADMIN | USER |
|
||
|---------|-------------|-----------------|----------------|--------------|------|
|
||
| 蝘<><E89D98>蝞∠<E89D9E> | <20>?<3F>券<EFBFBD> | <20>?| <20>?| <20>?| <20>?|
|
||
| Prompt蝞∠<E89D9E> | <20>?<3F>券<EFBFBD> | <20>?<3F>券<EFBFBD> | <20>?| <20>?| <20>?|
|
||
| <20>冽<EFBFBD>蝞∠<E89D9E>嚗<EFBFBD><E59A97>撅<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||
| <20>冽<EFBFBD>蝞∠<E89D9E>嚗<EFBFBD><E59A97><EFBFBD>瑕<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||
| <20>漤<EFBFBD><E6BCA4><EFBFBD><EFBFBD> | <20>?| <20>?| <20>?| <20>?| <20>?|
|
||
| 摰∟恣<E2889F>亙<EFBFBD>嚗<EFBFBD><E59A97>撅<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||
| 摰∟恣<E2889F>亙<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>瑕<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||
| 銝𡁜𦛚璅∪<E79285>雿輻鍂 | <20>?| <20>?| <20>?| <20>?| <20>?|
|
||
|
||
---
|
||
|
||
## <20><> 隞<><E99A9E>蝏𤘪<E89D8F>
|
||
|
||
### <20>?摰鮋<E691B0>撌脣<E6928C><E884A3>鞟<EFBFBD>蝏𤘪<E89D8F>嚗?026-01-12嚗?
|
||
**<2A>𡒊垢**
|
||
```
|
||
backend/src/
|
||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> common/
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth/ # <20>?霈方<E99C88>璅∪<E79285>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> jwt.service.ts # JWT Token蝞∠<E89D9E>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.service.ts # 銝𡁜𦛚<F0A1819C>餉<EFBFBD>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.middleware.ts # 霈方<E99C88>銝剝𡢿隞?+ requireModule <20><>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> module.service.ts # <20><> 璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>滚𦛚嚗<F0A69B9A><E59A97>蝘<EFBFBD><E89D98><EFBFBD><EFBFBD>僎嚗?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.controller.ts # API<50>批<EFBFBD><E689B9>?+ getUserModules <20><>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.routes.ts # 頝舐眏
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> index.ts
|
||
<EFBFBD>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> prompt/ # <20>?Prompt蝞∠<E89D9E>
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.types.ts # 蝐餃<E89D90>摰帋<E691B0>
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.service.ts # <20>詨<EFBFBD><E8A9A8>滚𦛚
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.controller.ts # API<50>批<EFBFBD><E689B9>剁<EFBFBD>憓𧼮撩<F0A7BCAE><E692A9>𧋦餈𥪜<E9A488>嚗咓<E59A97>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.routes.ts # 頝舐眏
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.fallbacks.ts # <20>𨅯<EFBFBD>Prompt
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> index.ts
|
||
<EFBFBD>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> modules/
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> admin/ # <20><> 蝘<><E89D98>蝞∠<E89D9E>璅∪<E79285>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> types/
|
||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenant.types.ts # 蝘<><E89D98>蝐餃<E89D90>摰帋<E691B0>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> services/
|
||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantService.ts # 蝘<><E89D98>銝𡁜𦛚<F0A1819C>餉<EFBFBD>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> controllers/
|
||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantController.ts # 蝘<><E89D98><EFBFBD>批<EFBFBD><E689B9>?<3F>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> routes/
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantRoutes.ts # 蝘<><E89D98>頝舐眏
|
||
<EFBFBD>? <20>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> rvw/ # <20>?RVW璅∪<E79285>嚗<EFBFBD>歇<EFBFBD><E6AD87><EFBFBD>PromptService嚗?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> pkb/ # <20>?PKB璅∪<E79285>嚗<EFBFBD>歇瘛餃<E7989B>霈方<E99C88>嚗?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> asl/ # <20>?ASL璅∪<E79285>嚗<EFBFBD>歇瘛餃<E7989B>霈方<E99C88>嚗?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> dc/ # <20>?DC璅∪<E79285>嚗<EFBFBD>歇瘛餃<E7989B>霈方<E99C88>嚗?
|
||
backend/scripts/
|
||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> seed-modules.js # <20><> 璅∪<E79285><E288AA>唳旿<E594B3>嘥<EFBFBD><E598A5>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> query-users.js # <20>亥砭<E4BAA5>冽<EFBFBD><E586BD>𣬚<EFBFBD><F0A3AC9A>瑚縑<E7919A>?<3F>婙<EFBFBD><E5A999><EFBFBD> [<5B>嗡<EFBFBD><E597A1>𡁏𧋦]
|
||
```
|
||
|
||
**<2A>滨垢**
|
||
```
|
||
frontend-v2/src/
|
||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> framework/
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth/ # <20>?霈方<E99C88>獢<EFBFBD>沲
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> AuthContext.tsx # 霈方<E99C88>銝𠹺<E98A9D><F0A0B9BA>?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> api.ts # 霈方<E99C88>API
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> moduleApi.ts # <20><> <20>冽<EFBFBD>璅∪<E79285><E288AA><EFBFBD><EFBFBD>API
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> types.ts
|
||
<EFBFBD>? <20>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> modules/ # <20>?璅∪<E79285>瘜典<E7989C>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> moduleRegistry.ts # 璅∪<E79285>瘜典<E7989C>嚗<EFBFBD>鰵憓𤆣oduleCode嚗咓<E59A97>?<3F>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> types.ts # 璅∪<E79285>蝐餃<E89D90>摰帋<E691B0>
|
||
<EFBFBD>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> layout/ # <20>?撣<><E692A3>蝏<EFBFBD>辣
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> MainLayout.tsx # 銝𡁜𦛚蝡臬<E89DA1>撅<EFBFBD>
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> AdminLayout.tsx # 餈鞱𨯫蝞∠<E89D9E>蝡臬<E89DA1>撅<EFBFBD>
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> OrgLayout.tsx # <20>箸<EFBFBD>蝞∠<E89D9E>蝡臬<E89DA1>撅<EFBFBD>
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> TopNavigation.tsx # 憿園<E686BF>撖潸⏛嚗<E28F9B>芋<EFBFBD>埈<EFBFBD><E59F88>鞱<EFBFBD>皛歹<E79A9B><E6ADB9><EFBFBD>
|
||
<EFBFBD>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> pages/
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> HomePage.tsx # 擐㚚△嚗<E296B3>芋<EFBFBD>埈<EFBFBD><E59F88>鞱<EFBFBD>皛歹<E79A9B><E6ADB9><EFBFBD>
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> admin/ # <20>?餈鞱𨯫蝞∠<E89D9E>蝡舫△<E888AB>?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> AdminDashboard.tsx # 璁<><E79281>憿?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptListPage.tsx # Prompt<70>𡑒”嚗<E2809D>芋<EFBFBD>𦯀葉<F0A6AF80><E89189>遬蝷綽<E89DB7><E7B6BD><EFBFBD>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptEditorPage.tsx # Prompt蝻𤥁<E89DBB>嚗<EFBFBD><E59A97><EFBFBD>砍<EFBFBD><E7A08D>脣<EFBFBD>撘綽<E69298><E7B6BD><EFBFBD>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> tenants/ # <20><> 蝘<><E89D98>蝞∠<E89D9E>憿菟𢒰
|
||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantListPage.tsx # 蝘<><E89D98><EFBFBD>𡑒”
|
||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantDetailPage.tsx # 蝘<><E89D98>霂行<E99C82>/蝻𤥁<E89DBB>/璅∪<E79285><E288AA>滨蔭
|
||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> api/
|
||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantApi.ts # 蝘<><E89D98>API靚<49>鍂
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptListPage.tsx # <20>?Prompt<70>𡑒”嚗?54銵䕘<E98AB5>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptEditorPage.tsx # <20>?Prompt蝻𤥁<E89DBB><F0A4A581>剁<EFBFBD>399銵䕘<E98AB5>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> components/
|
||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> PromptEditor.tsx # <20>?CodeMirror 6嚗?45銵䕘<E98AB5>
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> api/
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> promptApi.ts # <20>?API靚<49>鍂撅<E98D82><E69285>172銵䕘<E98AB5>
|
||
<EFBFBD>? <20>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> org/ # <20>?<3F>箸<EFBFBD>蝞∠<E89D9E>蝡舫△<E888AB>?<3F>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> OrgDashboard.tsx # 璁<><E79281>憿?<3F>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> LoginPage.tsx # <20>?<3F>𡁶鍂<F0A181B6>餃<EFBFBD>憿蛛<E686BF>368銵䕘<E98AB5>
|
||
```
|
||
|
||
### <20><> <20>蠘恣<E8A098>垍<EFBFBD><E59E8D><EFBFBD><EFBFBD>敺<EFBFBD><E695BA><EFBFBD>𡢅<EFBFBD>
|
||
|
||
### <20>𡒊垢
|
||
|
||
```
|
||
backend/src/
|
||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> modules/
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> admin/ # 餈鞱𨯫蝞∠<E89D9E>蝡舀芋<E88880>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> controllers/
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> tenant.controller.ts
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> user.controller.ts
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> audit.controller.ts
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> services/
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> tenant.service.ts
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> user.service.ts
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> audit.service.ts
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> routes/
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> admin.routes.ts
|
||
<EFBFBD>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> common/
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> capabilities/
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> prompt/ # Prompt蝞∠<E89D9E>蝟餌<E89D9F>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.service.ts # <20>詨<EFBFBD><E8A9A8>餉<EFBFBD>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.controller.ts
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> prompt.routes.ts
|
||
<EFBFBD>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> middleware/
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.middleware.ts # JWT霈方<E99C88>
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> permission.middleware.ts # <20><><EFBFBD>璉<EFBFBD><E79289>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> tenant.middleware.ts # 蝘<><E89D98><EFBFBD>𠉛氖
|
||
<EFBFBD>?<3F>婙<EFBFBD><E5A999><EFBFBD> platform/
|
||
<20>鎿<EFBFBD><E98EBF><EFBFBD> auth/
|
||
<20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.service.ts
|
||
<20>? <20>婙<EFBFBD><E5A999><EFBFBD> jwt.service.ts
|
||
<20>婙<EFBFBD><E5A999><EFBFBD> permission/
|
||
<20>婙<EFBFBD><E5A999><EFBFBD> permission.service.ts
|
||
```
|
||
|
||
### <20>滨垢
|
||
|
||
```
|
||
frontend-v2/src/
|
||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> modules/
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> admin/ # 餈鞱𨯫蝞∠<E89D9E>蝡舀芋<E88880>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> pages/
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantManagement/ # 蝘<><E89D98>蝞∠<E89D9E>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> UserManagement/ # <20>冽<EFBFBD>蝞∠<E89D9E>
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptManagement/ # Prompt蝞∠<E89D9E>
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> AuditLog/ # 摰∟恣<E2889F>亙<EFBFBD>
|
||
<EFBFBD>? <20>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> components/
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantForm/
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> UserForm/
|
||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptEditor/
|
||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> PromptDebugSwitch/ # <20>典<EFBFBD>靚<EFBFBD><E99D9A>撘<EFBFBD><E69298>?<3F>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> services/
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> tenant.service.ts
|
||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> user.service.ts
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> prompt.service.ts
|
||
<EFBFBD>?<3F>婙<EFBFBD><E5A999><EFBFBD> framework/
|
||
<20>鎿<EFBFBD><E98EBF><EFBFBD> auth/
|
||
<20>? <20>婙<EFBFBD><E5A999><EFBFBD> AuthContext.tsx # 霈方<E99C88>銝𠹺<E98A9D><F0A0B9BA>? <20>婙<EFBFBD><E5A999><EFBFBD> permission/
|
||
<20>婙<EFBFBD><E5A999><EFBFBD> PermissionContext.tsx # <20><><EFBFBD>銝𠹺<E98A9D><F0A0B9BA>?```
|
||
|
||
---
|
||
|
||
## <20><> 敹恍<E695B9>笔<EFBFBD>憪见<E686AA><E8A781>?
|
||
### 1. <20>臬<EFBFBD><E887AC><EFBFBD><EFBFBD>
|
||
|
||
```bash
|
||
# <20>𡒊垢
|
||
cd backend
|
||
npm install jsonwebtoken bcryptjs handlebars
|
||
npm install -D @types/jsonwebtoken @types/bcryptjs
|
||
|
||
# <20>滨垢
|
||
cd frontend-v2
|
||
# <20>𣳇<EFBFBD>憸嘥<E686B8>靘肽<E99D98>嚗䔶蝙<E494B6>函緵<E587BD>㗇<EFBFBD><E39787>舀<EFBFBD>
|
||
```
|
||
|
||
### 2. <20>唳旿摨枏<E691A8>憭?
|
||
```bash
|
||
# 1. 憭<>遢<EFBFBD>唳<EFBFBD><E594B3>唳旿
|
||
cd backend
|
||
npx prisma db pull --schema=./prisma/backup.prisma
|
||
|
||
# 2. <20>湔鰵Schema
|
||
# 蝻𤥁<E89DBB> prisma/schema.prisma嚗峕溶<E5B395>䭾鰵銵?
|
||
# 3. <20><><EFBFBD>餈<EFBFBD>宏
|
||
npx prisma migrate dev --name add_admin_and_prompt_tables
|
||
|
||
# 4. 餈鞱<E9A488>蝘滚<E89D98><E6BB9A>唳旿
|
||
npx prisma db seed
|
||
```
|
||
|
||
### 3. 撘<><E69298>睲<EFBFBD><E79DB2><EFBFBD>漣
|
||
|
||
**<2A>𣞁 敹<>◆<EFBFBD><E29786><EFBFBD>嚗㇊hase 0嚗?*
|
||
1. <20>唳旿摨栞<E691A8>蝘鳴<E89D98>蝏煺<E89D8F>User銵剁<E98AB5>
|
||
2. <20>𥕦遣頞<E981A3>漣蝞∠<E89D9E><E288A0>䁅揭<E48185>?3. JWT霈方<E99C88>蝟餌<E89D9F>
|
||
|
||
**<2A><> <20>嗅<EFBFBD><E59785>𡄯<EFBFBD>Phase 1嚗?*
|
||
1. PromptService摰䂿緵
|
||
2. Prompt蝞∠<E89D9E>API
|
||
|
||
**<2A>椬 <20><><EFBFBD>𤾸<EFBFBD>嚗㇊hase 2嚗?*
|
||
1. 蝘<><E89D98>蝞∠<E89D9E><E288A0>屸𢒰
|
||
2. Prompt蝞∠<E89D9E><E288A0>屸𢒰
|
||
|
||
---
|
||
|
||
## <20><> <20>詨<EFBFBD><E8A9A8><EFBFBD>﹝撖潸⏛
|
||
|
||
### 敹<>粉<EFBFBD><E7B289>﹝嚗<EFB99D><E59A97><EFBFBD>穃<EFBFBD>嚗?
|
||
1. **<2A>嗆<EFBFBD>璇喟<E79287>**
|
||
`00-蝟餌<E89D9F>霈曇恣/00-<2D><><EFBFBD>銝舘<E98A9D><E88898>脖<EFBFBD>蝟餅4<E9A485><EFBC94>𥁒<EFBFBD>𠽤v1.0.md`
|
||
<20>?鈭<>圾<EFBFBD>港<EFBFBD><E6B8AF>嗆<EFBFBD><E59786><EFBFBD>㺭<EFBFBD>桀<EFBFBD>霈曇恣<E69B87><E681A3><EFBFBD><EFBFBD>質楝蝥踹㦛
|
||
|
||
2. **<2A><>瘙<EFBFBD><E79899>獢?*
|
||
`01-<2D><>瘙<EFBFBD><E79899><EFBFBD>?02-<2D>𡁶鍂<F0A181B6>賢<EFBFBD>撅<EFBFBD>07-餈鞱𨯫銝擧㦤<E693A7><E3A6A4>恣<EFBFBD><E681A3>垢PRD_v2.1.md`
|
||
<20>?鈭<>圾銝𡁜𦛚<F0A1819C><F0A69B9A>瘙<EFBFBD><E79899><EFBFBD>鍂<EFBFBD>瑟<EFBFBD>鈭卝<E988AD><E58D9D><EFBFBD><EFBFBD>嗆<EFBFBD><E59786>?
|
||
3. **Prompt蝞∠<E89D9E>嚗<EFBFBD>瓲敹<E793B2><E695B9>**
|
||
`02-<2D><><EFBFBD>航挽霈?03-Prompt蝞∠<E89D9E>蝟餌<E89D9F>敹恍<E695B9>笔<EFBFBD><E7AC94>?md`
|
||
<20>?鈭<>圾Prompt蝞∠<E89D9E><E288A0><EFBFBD><EFBFBD><EFBFBD>啁<EFBFBD><E59581>?
|
||
### 撘<><E69298>睲葉<E79DB2><E89189><EFBFBD>?
|
||
1. **<2A><><EFBFBD>航挽霈?*
|
||
`02-<2D><><EFBFBD>航挽霈?02-<2D>𡁶鍂<F0A181B6>賢<EFBFBD>撅<EFBFBD>03-Prompt蝞∠<E89D9E>蝟餌<E89D9F>銝𡒊<E98A9D>摨阡<E691A8>閫<EFBFBD>挽霈⊥䲮獢?md`
|
||
|
||
2. **<2A>漤<EFBFBD>撱箄悅**
|
||
`00-蝟餌<E89D9F>霈曇恣/02-<2D>𡁶鍂<F0A181B6>賢<EFBFBD>撅<EFBFBD>10-<2D><><EFBFBD>雿梶頂璇喟<E79287><E5969F>漤<EFBFBD>銝𦒘耨甇<E880A8>遣霈?md`
|
||
|
||
---
|
||
|
||
## <20>圲 <20><><EFBFBD>航<EFBFBD><E888AA>?
|
||
### 1. JWT霈方<E99C88>
|
||
|
||
```typescript
|
||
// <20><><EFBFBD>Token
|
||
const token = jwt.sign(
|
||
{
|
||
userId: user.id,
|
||
role: user.role,
|
||
tenantId: user.tenantId // 憭𡁶<E686AD><F0A181B6>? },
|
||
process.env.JWT_SECRET,
|
||
{ expiresIn: '7d' }
|
||
);
|
||
|
||
// 撉諹<E69289>Token
|
||
const decoded = jwt.verify(token, process.env.JWT_SECRET);
|
||
```
|
||
|
||
### 2. 憭𡁶<E686AD><F0A181B6>琿<EFBFBD>蝳?
|
||
```typescript
|
||
// 銝剝𡢿隞塚<E99A9E><E5A19A>芸𢆡瘜典<E7989C>tenantId
|
||
fastify.addHook('preHandler', async (request, reply) => {
|
||
const user = request.user;
|
||
request.tenantId = user.tenantId;
|
||
});
|
||
|
||
// ORM<52>亥砭嚗朞䌊<E69C9E>刻<EFBFBD>皛?const projects = await prisma.project.findMany({
|
||
where: { tenantId: request.tenantId }
|
||
});
|
||
```
|
||
|
||
### 3. Prompt<70>啣漲憸<E6BCB2><E686B8>
|
||
|
||
```typescript
|
||
// <20>詨<EFBFBD><E8A9A8>餉<EFBFBD>
|
||
async get(code: string, variables: any, userId: string) {
|
||
// 靚<><E99D9A><EFBFBD><EFBFBD><EFBFBD>DRAFT<46><54>𧋦
|
||
if (this.debugUsers.has(userId)) {
|
||
const draft = await this.getDraftVersion(code);
|
||
if (draft) return this.render(draft.content, variables);
|
||
}
|
||
|
||
// <20>桅<EFBFBD>𡁶鍂<F0A181B6>瑞<EFBFBD>ACTIVE<56><45>𧋦嚗<F0A78BA6>蒂蝻枏<E89DBB>嚗? const active = await this.getActiveVersion(code);
|
||
return this.render(active.content, variables);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## <20>𩤃<EFBFBD> 撣貉<E692A3><E8B289>桅<EFBFBD>
|
||
|
||
### Q1: <20>唳<EFBFBD><E594B3><EFBFBD>public.users`銵冽<EFBFBD>𦒘<EFBFBD>憭<EFBFBD><EFBFBD>嚗?
|
||
**A:** Phase 0隡𡁏<E99AA1>銵峕㺭<E5B395>株<EFBFBD>蝘鳴<E89D98>
|
||
1. 撠<>public.users`<60>唳旿餈<E697BF>宏<EFBFBD>躬platform_schema.users`
|
||
2. <20>滚𦶢<E6BB9A>滢蛹`public.users_backup`靽萘<EFBFBD>1<EFBFBD>?3. 撉諹<E69289><E8ABB9>㰘秤<E3B098>𤾸<EFBFBD><F0A4BEB8>?
|
||
### Q2: Prompt蝞∠<E89D9E>隡𡁜蔣<F0A1819C>滨緵<E6BBA8>劐<EFBFBD><E58A90>⊥芋<E28AA5>堒<EFBFBD>嚗?
|
||
**A:** 銝滢<E98A9D><E6BBA2><EFBFBD>rompt蝞∠<E89D9E><E288A0>臬<EFBFBD><E887AC>誩<EFBFBD><E8AAA9>踝<EFBFBD>
|
||
- <20>唳<EFBFBD>蝖祉<E89D96><E7A589><EFBFBD>rompt蝏抒賒撌乩<E6928C>
|
||
- <20>啣<EFBFBD><E595A3>烐芋<E78390>𡑒<EFBFBD><F0A19192>灼promptService.get()`
|
||
- <20><>芋<EFBFBD>堒虾<E5A092>鞉郊餈<E9838A>宏
|
||
|
||
### Q3: 靚<><E99D9A>璅∪<E79285>摰匧<E691B0><E58CA7>梹<EFBFBD>
|
||
|
||
**A:** <20>舐<EFBFBD>嚗峕<E59A97>憭𡁜<E686AD>靽嗪<E99DBD>嚗?- <20><><EFBFBD>璉<EFBFBD><E79289>伐<EFBFBD>`prompt:debug`嚗?- <20>嗆<EFBFBD><E59786><EFBFBD><EFBFBD>典銁<E585B8><E98A81><EFBFBD>嚗<EFBFBD>蒈<EFBFBD>箄䌊<E7AE84>典仃<E585B8><E4BB83><EFBFBD>
|
||
- 摰∟恣<E2889F>亙<EFBFBD>霈啣<E99C88><E595A3><EFBFBD><EFBFBD>㗇<EFBFBD>雿?
|
||
### Q4: 憭𡁶<E686AD><F0A181B6>琿<EFBFBD>蝳餃<E89DB3>雿蓥<E99BBF>霂<EFBFBD><E99C82>
|
||
|
||
**A:** 銝匧<E98A9D><E58CA7>脫擪嚗?1. **API撅?*嚗帋葉<E5B88B>港辣璉<E8BEA3><E79289>匝tenantId`
|
||
2. **Service撅?*嚗朞䌊<E69C9E>冽釣<E586BD>匝tenantId`餈<EFBFBD>誘
|
||
3. **DB撅?*嚗𡄯<E59A97>Phase 2嚗侨risma Extension撘箏<E69298><E7AE8F>𠉛氖
|
||
|
||
---
|
||
|
||
## <20><> <20><>閬<EFBFBD>葬<EFBFBD>抬<EFBFBD>
|
||
|
||
1. **<EFBFBD>亦<EFBFBD><EFBFBD><EFBFBD>﹝**嚗䫤README.md` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>航挽霈⊥<E99C88>獢?2. **<EFBFBD>亦<EFBFBD>隞<EFBFBD><EFBFBD>**嚗𡁜<E59A97><F0A1819C><EFBFBD>C/ASL蝑匧歇<E58CA7>㗇芋<E39787>㛖<EFBFBD>摰䂿緵
|
||
3. **<EFBFBD>鞾䔮**嚗𡁜銁撘<E98A81><E69298>𤏸扇敶蓥葉霈啣<E99C88><E595A3>桅<EFBFBD><E6A185>諹圾<E8ABB9>單䲮獢?
|
||
---
|
||
|
||
## <20><> 銝衤<E98A9D>甇亥<E79487><E4BAA5>?
|
||
- [ ] Review<65>嗆<EFBFBD>霈曇恣<E69B87><E681A3>﹝
|
||
- [ ] 蝖株恕撘<E68195><E69298>烐<EFBFBD><E78390><EFBFBD><EFBFBD>撱箄悅4<E68285>剁<EFBFBD>
|
||
- [ ] <20><><EFBFBD>撘<EFBFBD><E69298>𤑳㴓憓?- [ ] **<EFBFBD>臬𢆡Phase 0**嚗𡁏㺭<F0A1818F>桀<EFBFBD>餈<EFBFBD>宏
|
||
|
||
---
|
||
|
||
*蟡嘥<EFBFBD><EFBFBD>煾◇<EFBFBD>抬<EFBFBD><EFBFBD><EFBFBD>*
|
||
|