三面拆分①:surface 配置与区表 —— 归属/亮灯/旧链改写皆纯函数先测后写
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -12,13 +12,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { logoutRoute } from '@contracts';
|
||||
import { call } from '@web-shared/typed-fetch.ts';
|
||||
import { Ico } from '@web-shared/Ico.tsx';
|
||||
import { Note } from '@web-shared/gov/primitives.tsx';
|
||||
import { TABS, ZM, ZONES, routeLabel } from '@web-shared/gov/gov-route.ts';
|
||||
import type { GovZone, Nav, Route } from '@web-shared/gov/gov-route.ts';
|
||||
import { useGovStaff, useGovTasks } from '@web-shared/gov/gov-api.ts';
|
||||
import { TasksHome, TaskLogPage, TaskPage, WfPage } from '@features/gov-task';
|
||||
import { EmpPage, PeopleHome, RolePage } from '@features/gov-staff';
|
||||
import { EdgesPage, PkgPage, WorkflowsHome } from '@features/gov-process';
|
||||
import { TriggerPage, TriggersHome } from '@features/gov-trigger';
|
||||
import { TriggerPage } from '@features/gov-trigger';
|
||||
import { ActPage, LibraryHome } from '@features/gov-activity';
|
||||
import { ToolPage, ToolsHome } from '@features/gov-tool';
|
||||
import { DataHome, ObjPage } from '@features/gov-data';
|
||||
@@ -34,7 +35,8 @@ function readPlace(): Place {
|
||||
const parts = raw.split('/').filter((s) => s !== '');
|
||||
const zone = (ZONES.find((z) => z.key === parts[1])?.key ?? 'tasks') as GovZone;
|
||||
const tabs = TABS[zone];
|
||||
const tab = tabs.find((t) => t.key === parts[2])?.key ?? tabs[0]!.key;
|
||||
// 台账区的页签是数据域(动态生成),静态表里没有 —— 认不出就原样收下,别兜到不存在的首签
|
||||
const tab = tabs.find((t) => t.key === parts[2])?.key ?? tabs[0]?.key ?? (parts[2] ?? '');
|
||||
const stack: Route[] = [];
|
||||
for (const seg of parts.slice(3)) {
|
||||
const at = seg.indexOf(':');
|
||||
@@ -83,7 +85,7 @@ export function GovShell() {
|
||||
const p = readPlace();
|
||||
go({ ...p, stack: p.stack.slice(0, -1) });
|
||||
}, [go]);
|
||||
const goZone = useCallback((z: GovZone) => go({ zone: z, tab: TABS[z][0]!.key, stack: [] }), [go]);
|
||||
const goZone = useCallback((z: GovZone) => go({ zone: z, tab: TABS[z][0]?.key ?? '', stack: [] }), [go]);
|
||||
const jump = useCallback((z: GovZone, tab: string, r?: Route) => go({ zone: z, tab, stack: r ? [r] : [] }), [go]);
|
||||
const nav: Nav = { push, jump };
|
||||
|
||||
@@ -218,16 +220,35 @@ export function GovShell() {
|
||||
);
|
||||
}
|
||||
|
||||
/** 企业蓝图 —— Task 6 接真;在那之前先给设计者一句「这里将有什么」 */
|
||||
function BlueprintPlaceholder() {
|
||||
return (
|
||||
<Note>
|
||||
这里将把四库串成一条因果链:流程包(战略)→ 活动库(方法)→ 工具箱(能力)→ 数据域(对象),
|
||||
并把「哪里还没定义完」聚成一张待补清单。先从左轨进各库编排。
|
||||
</Note>
|
||||
);
|
||||
}
|
||||
|
||||
/** 台账 —— Task 10 接真;导航项已随数据域长出来了,内容随后 */
|
||||
function LedgersPlaceholder() {
|
||||
return <Note>这里将按域列出全部台账对象、行数据与版本。域的结构在设计中心 · 数据域维护。</Note>;
|
||||
}
|
||||
|
||||
function ZoneHome({ zone, tab, nav }: { zone: GovZone; tab: string; nav: Nav }) {
|
||||
const P = {
|
||||
tasks: TasksHome,
|
||||
people: PeopleHome,
|
||||
// 设计中心
|
||||
blueprint: BlueprintPlaceholder,
|
||||
workflows: WorkflowsHome,
|
||||
triggers: TriggersHome,
|
||||
library: LibraryHome,
|
||||
tools: ToolsHome,
|
||||
data: DataHome,
|
||||
memory: MemoryHome,
|
||||
// 运营中心
|
||||
cockpit: MemoryHome,
|
||||
tasks: TasksHome,
|
||||
people: PeopleHome,
|
||||
ledgers: LedgersPlaceholder,
|
||||
knowledge: MemoryHome,
|
||||
system: SystemHome,
|
||||
}[zone];
|
||||
return <P tab={tab} nav={nav} />;
|
||||
|
||||
Reference in New Issue
Block a user