该区域正在建设中
+「{wip}」暂未开放,敬请期待。
+ +From f01286a89d97a3db24a737c9af0ff82c42b637c6 Mon Sep 17 00:00:00 2001 From: shanqin <45168502@qq.com> Date: Wed, 26 Aug 2026 13:29:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=85=A5=E7=BB=9F=E4=B8=80=E9=89=B4?= =?UTF-8?q?=E6=9D=83=E4=B8=AD=E5=BF=83(Keycloak,ADR-012);=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E6=A8=A1=E5=9D=97=20L1/L2=20=E8=BF=90=E8=90=A5?= =?UTF-8?q?=E6=80=81=E6=A8=A1=E7=89=88(=E5=8E=86=E5=8F=B2=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E5=88=97=E8=A1=A8+=E6=A3=80=E7=B4=A2+=E6=B2=99?= =?UTF-8?q?=E7=AE=B1);=E6=95=B0=E6=8D=AE=E5=9F=9F=E4=B8=8E=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0=E7=95=8C=E9=9D=A2=E6=94=B9=E7=89=88;?= =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83=20/me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/.env.development | 6 + apps/web/.env.production | 6 + apps/web/package.json | 1 + .../public/sandbox-demo/activity-view.html | 99 +++ apps/web/public/silent-check-sso.html | 14 + apps/web/src/app/app-shell.tsx | 137 ++-- apps/web/src/app/gov-shell.tsx | 68 +- apps/web/src/app/main.tsx | 103 ++- apps/web/src/app/query.ts | 11 +- apps/web/src/app/styles/app.css | 116 +++- apps/web/src/app/styles/console.css | 306 ++++++++- apps/web/src/app/subscribe.ts | 59 +- .../src/features/auth/internal/LoginPage.tsx | 82 +-- apps/web/src/features/desk-me/index.ts | 5 + .../src/features/desk-me/internal/MePage.tsx | 216 ++++++ apps/web/src/features/desk-task/index.ts | 1 + .../desk-task/internal/FileViewer.tsx | 29 +- .../features/desk-task/internal/TaskList.tsx | 28 +- apps/web/src/features/gov-data/index.ts | 2 +- .../src/features/gov-data/internal/panel.tsx | 257 +++++-- apps/web/src/features/gov-task/index.ts | 2 +- .../src/features/gov-task/internal/panel.tsx | 643 ++++++++++++++---- .../src/shared/__tests__/typed-fetch.test.ts | 14 + apps/web/src/shared/auth.ts | 84 +++ .../src/shared/gov/__tests__/surfaces.test.ts | 42 +- apps/web/src/shared/gov/gov-route.ts | 22 +- apps/web/src/shared/gov/primitives.tsx | 8 + apps/web/src/shared/gov/surfaces.ts | 25 +- apps/web/src/shared/query-keys.ts | 13 + apps/web/src/shared/typed-fetch.ts | 30 +- apps/web/vite.config.ts | 3 +- docs/AGENTS.md | 22 + docs/DESIGN-SPEC.md | 216 ++++++ docs/数据域页面改版记录-2026-08-25.md | 78 +++ docs/活动模块重构需求-2026-08-25.md | 104 +++ docs/统一鉴权接入记录-2026-08-26.md | 45 ++ packages/contracts/src/api/workbench.ts | 42 +- packages/contracts/src/org.ts | 29 + pnpm-lock.yaml | 10 + vitest.config.ts | 4 + 40 files changed, 2502 insertions(+), 480 deletions(-) create mode 100644 apps/web/.env.development create mode 100644 apps/web/.env.production create mode 100644 apps/web/public/sandbox-demo/activity-view.html create mode 100644 apps/web/public/silent-check-sso.html create mode 100644 apps/web/src/features/desk-me/index.ts create mode 100644 apps/web/src/features/desk-me/internal/MePage.tsx create mode 100644 apps/web/src/shared/auth.ts create mode 100644 apps/web/src/shared/query-keys.ts create mode 100644 docs/AGENTS.md create mode 100644 docs/DESIGN-SPEC.md create mode 100644 docs/数据域页面改版记录-2026-08-25.md create mode 100644 docs/活动模块重构需求-2026-08-25.md create mode 100644 docs/统一鉴权接入记录-2026-08-26.md diff --git a/apps/web/.env.development b/apps/web/.env.development new file mode 100644 index 0000000..bb474fd --- /dev/null +++ b/apps/web/.env.development @@ -0,0 +1,6 @@ +# 统一鉴权中心(ADR-012)—— 本端 = 用户端 web-portal(keycloak-frontend-guide §3) +# 前端是 public client,没有也不需要 client secret;安全性来自 redirect_uri 精确匹配 + PKCE +VITE_KEYCLOAK_URL=https://keycloak.akhr-ai.com +VITE_KEYCLOAK_REALM=corp +VITE_KEYCLOAK_CLIENT_ID=web-portal +VITE_REQUIRED_ROLE=user diff --git a/apps/web/.env.production b/apps/web/.env.production new file mode 100644 index 0000000..bb474fd --- /dev/null +++ b/apps/web/.env.production @@ -0,0 +1,6 @@ +# 统一鉴权中心(ADR-012)—— 本端 = 用户端 web-portal(keycloak-frontend-guide §3) +# 前端是 public client,没有也不需要 client secret;安全性来自 redirect_uri 精确匹配 + PKCE +VITE_KEYCLOAK_URL=https://keycloak.akhr-ai.com +VITE_KEYCLOAK_REALM=corp +VITE_KEYCLOAK_CLIENT_ID=web-portal +VITE_REQUIRED_ROLE=user diff --git a/apps/web/package.json b/apps/web/package.json index 7aaf2c2..6e85068 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -12,6 +12,7 @@ "@tanstack/react-query": "^5.101.4", "@tanstack/react-router": "^1.170.18", "diagram-js": "^15.23.0", + "keycloak-js": "26.2.4", "react": "^19.2.0", "react-dom": "^19.2.0" }, diff --git a/apps/web/public/sandbox-demo/activity-view.html b/apps/web/public/sandbox-demo/activity-view.html new file mode 100644 index 0000000..7850cc9 --- /dev/null +++ b/apps/web/public/sandbox-demo/activity-view.html @@ -0,0 +1,99 @@ + + +
+ + +quote-intake · 活动视图(服务器返回 HTML · 沙箱隔离渲染)
+| 来源 | 物料数 | 接收时间 | 结构化结果 |
|---|---|---|---|
| Itelma 采购部 · 邮件 | 3 项 | 10:12 | 待补全 |
| 伏尔加集团 · 聊天记录 | 12 项 | 09:40 | 已结构化 |
| GAZ 采购 · 邮件附件 | 7 项 | 昨天 17:03 | 已结构化 |
「{wip}」暂未开放,敬请期待。
+ +{desc}
+ {/* 角色不够时跳登录页没用(还是同一个人)—— 给的是登出,换账号再来(手册 §4.3) */} ++ {position.name} · {position.code} +
+ )} + {staff !== undefined && ( ++ 账号 {staff.account} · 编号 {staff.id} ·{' '} + {staff.state === 'active' ? '在职' : '停用'} +
+ )} + {position?.note !== undefined &&{position.note}
} +