@yuku123/z-team-component 0.2.57 → 0.2.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,907 @@
1
+ import { jsxs as u, jsx as e } from "react/jsx-runtime";
2
+ import { useNavigate as ne, useLocation as E, Navigate as d } from "react-router-dom";
3
+ import re, { useMemo as v, useState as M, useEffect as H, Suspense as le, lazy as A } from "react";
4
+ import { DownOutlined as K, RightOutlined as U, AppstoreOutlined as ae, UserOutlined as pe, SafetyCertificateOutlined as B, CloudOutlined as j, DeploymentUnitOutlined as F, AuditOutlined as W, CodeOutlined as z, FolderOpenOutlined as ue, DesktopOutlined as oe, DashboardOutlined as L, ProfileOutlined as X, BookOutlined as me, ApartmentOutlined as de, FileImageOutlined as he, FileTextOutlined as T, CalendarOutlined as I, ApiOutlined as be, ProjectOutlined as ce, ClusterOutlined as ge, DatabaseOutlined as _e, TeamOutlined as ye, BarChartOutlined as Q } from "@ant-design/icons";
5
+ import { ProductApp as ke } from "@yuku123/z-product-component";
6
+ const fe = "_container_wbul9_7", we = "_sidebar_wbul9_17", Se = "_menuList_wbul9_37", ve = "_menuGroup_wbul9_44", Ae = "_menuGroupHeader_wbul9_48", De = "_menuGroupIcon_wbul9_66", Ne = "_menuGroupLabel_wbul9_75", Pe = "_menuGroupArrow_wbul9_80", Ce = "_menuSubList_wbul9_87", Ie = "_menuSubItem_wbul9_93", Me = "_menuSubItemActive_wbul9_110", Ge = "_menuSubItemIcon_wbul9_117", Oe = "_menuSubGroup_wbul9_132", Le = "_menuSubGroupHeader_wbul9_136", Te = "_menuSubGroupHeaderActive_wbul9_154", Ee = "_menuSubGroupLabel_wbul9_158", ze = "_main_wbul9_169", $e = "_detailPanel_wbul9_179", xe = "_detailHeader_wbul9_189", Re = "_detailIcon_wbul9_196", He = "_detailTitle_wbul9_209", je = "_detailDesc_wbul9_216", qe = "_detailAction_wbul9_223", Ke = "_goBtn_wbul9_228", Ue = "_emptyState_wbul9_248", s = {
7
+ container: fe,
8
+ sidebar: we,
9
+ menuList: Se,
10
+ menuGroup: ve,
11
+ menuGroupHeader: Ae,
12
+ menuGroupIcon: De,
13
+ menuGroupLabel: Ne,
14
+ menuGroupArrow: Pe,
15
+ menuSubList: Ce,
16
+ menuSubItem: Ie,
17
+ menuSubItemActive: Me,
18
+ menuSubItemIcon: Ge,
19
+ menuSubGroup: Oe,
20
+ menuSubGroupHeader: Le,
21
+ menuSubGroupHeaderActive: Te,
22
+ menuSubGroupLabel: Ee,
23
+ main: ze,
24
+ detailPanel: $e,
25
+ detailHeader: xe,
26
+ detailIcon: Re,
27
+ detailTitle: He,
28
+ detailDesc: je,
29
+ detailAction: qe,
30
+ goBtn: Ke,
31
+ emptyState: Ue
32
+ };
33
+ function q(n) {
34
+ return n.flatMap((t) => [t, ...q(t.children ?? [])]);
35
+ }
36
+ const Be = {
37
+ title: "测试中心",
38
+ icon: /* @__PURE__ */ e(L, {}),
39
+ items: [
40
+ {
41
+ key: "test-dashboard",
42
+ label: "测试总览",
43
+ icon: /* @__PURE__ */ e(L, {}),
44
+ path: "/test/qa/dashboard",
45
+ desc: "测试统计、趋势与套件健康度"
46
+ },
47
+ {
48
+ key: "test-design",
49
+ label: "用例与编排",
50
+ icon: /* @__PURE__ */ e(T, {}),
51
+ children: [
52
+ {
53
+ key: "test-case",
54
+ label: "测试用例",
55
+ icon: /* @__PURE__ */ e(T, {}),
56
+ path: "/test/qa/cases",
57
+ desc: "接口用例与断言模板"
58
+ },
59
+ {
60
+ key: "test-suite",
61
+ label: "测试套件",
62
+ icon: /* @__PURE__ */ e(ge, {}),
63
+ path: "/test/qa/suites",
64
+ desc: "步骤编排与变量传递"
65
+ },
66
+ {
67
+ key: "test-plan",
68
+ label: "测试计划",
69
+ icon: /* @__PURE__ */ e(ce, {}),
70
+ path: "/test/qa/plans",
71
+ desc: "套件组合与环境绑定"
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ key: "test-exec",
77
+ label: "执行与调度",
78
+ icon: /* @__PURE__ */ e(I, {}),
79
+ children: [
80
+ {
81
+ key: "test-run",
82
+ label: "执行记录",
83
+ icon: /* @__PURE__ */ e(I, {}),
84
+ path: "/test/qa/runs",
85
+ desc: "执行触发、状态与报告"
86
+ },
87
+ {
88
+ key: "test-schedule",
89
+ label: "定时调度",
90
+ icon: /* @__PURE__ */ e(I, {}),
91
+ path: "/test/qa/schedules",
92
+ desc: "cron 定时执行"
93
+ },
94
+ {
95
+ key: "test-e2e",
96
+ label: "E2E 测试",
97
+ icon: /* @__PURE__ */ e(oe, {}),
98
+ path: "/test/qa/e2e",
99
+ desc: "浏览器自动化测试"
100
+ }
101
+ ]
102
+ },
103
+ {
104
+ key: "test-support",
105
+ label: "环境与工具",
106
+ icon: /* @__PURE__ */ e(j, {}),
107
+ children: [
108
+ {
109
+ key: "test-env",
110
+ label: "环境管理",
111
+ icon: /* @__PURE__ */ e(j, {}),
112
+ path: "/test/qa/envs",
113
+ desc: "多环境变量管理"
114
+ },
115
+ {
116
+ key: "test-mock",
117
+ label: "Mock 平台",
118
+ icon: /* @__PURE__ */ e(_e, {}),
119
+ path: "/test/mock",
120
+ desc: "API Mock 服务管理"
121
+ }
122
+ ]
123
+ },
124
+ {
125
+ key: "test-eval",
126
+ label: "智能测评",
127
+ icon: /* @__PURE__ */ e(Q, {}),
128
+ children: [
129
+ {
130
+ key: "test-eval-start",
131
+ label: "发起测评",
132
+ icon: /* @__PURE__ */ e(L, {}),
133
+ path: "/test/evaluation/start",
134
+ desc: "Agent 质量测评"
135
+ },
136
+ {
137
+ key: "test-eval-schedule",
138
+ label: "自动测评",
139
+ icon: /* @__PURE__ */ e(I, {}),
140
+ path: "/test/evaluation/schedule",
141
+ desc: "定时批量测评"
142
+ },
143
+ {
144
+ key: "test-eval-group",
145
+ label: "群聊评测",
146
+ icon: /* @__PURE__ */ e(ye, {}),
147
+ path: "/test/evaluation/group",
148
+ desc: "群聊场景评测"
149
+ },
150
+ {
151
+ key: "test-eval-report",
152
+ label: "分析报告",
153
+ icon: /* @__PURE__ */ e(Q, {}),
154
+ path: "/test/evaluation/report",
155
+ desc: "测评结果分析"
156
+ }
157
+ ]
158
+ }
159
+ ]
160
+ }, se = [
161
+ {
162
+ title: "认证与权限",
163
+ icon: /* @__PURE__ */ e(B, {}),
164
+ items: [
165
+ {
166
+ key: "4a-account",
167
+ label: "账号管理",
168
+ icon: /* @__PURE__ */ e(pe, {}),
169
+ path: "/ctc/4a/account",
170
+ desc: "用户账号创建、编辑与状态管理"
171
+ },
172
+ {
173
+ key: "4a-role",
174
+ label: "角色管理",
175
+ icon: /* @__PURE__ */ e(B, {}),
176
+ path: "/ctc/4a/role",
177
+ desc: "角色定义与权限分配"
178
+ },
179
+ {
180
+ key: "4a-app",
181
+ label: "应用管理",
182
+ icon: /* @__PURE__ */ e(ae, {}),
183
+ path: "/ctc/4a/application",
184
+ desc: "应用注册、资源与权限配置"
185
+ },
186
+ {
187
+ key: "4a-tenant",
188
+ label: "租户管理",
189
+ icon: /* @__PURE__ */ e(j, {}),
190
+ path: "/ctc/4a/tenant",
191
+ desc: "多租户管理与配置"
192
+ },
193
+ {
194
+ key: "4a-org",
195
+ label: "组织管理",
196
+ icon: /* @__PURE__ */ e(F, {}),
197
+ path: "/ctc/4a/org",
198
+ desc: "组织架构与部门管理"
199
+ },
200
+ {
201
+ key: "4a-permission",
202
+ label: "权限管理",
203
+ icon: /* @__PURE__ */ e(W, {}),
204
+ path: "/ctc/4a/permission",
205
+ desc: "细粒度权限控制与审批"
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ title: "开发与工具",
211
+ icon: /* @__PURE__ */ e(z, {}),
212
+ items: [
213
+ {
214
+ key: "script",
215
+ label: "脚本中心",
216
+ icon: /* @__PURE__ */ e(z, {}),
217
+ path: "/script/manage",
218
+ desc: "DSL 脚本注册与执行"
219
+ },
220
+ { key: "lc", label: "研发中心", icon: /* @__PURE__ */ e(z, {}), path: "/lc/apps", desc: "低代码应用开发与管理" },
221
+ {
222
+ key: "tool-curl",
223
+ label: "短链管理",
224
+ icon: /* @__PURE__ */ e(ue, {}),
225
+ path: "/z-tool/curl",
226
+ desc: "短链接创建与管理"
227
+ },
228
+ {
229
+ key: "tool-webide",
230
+ label: "WebIDE 容器",
231
+ icon: /* @__PURE__ */ e(oe, {}),
232
+ path: "/z-tool/webide",
233
+ desc: "在线 IDE 代码编辑器"
234
+ }
235
+ ]
236
+ },
237
+ {
238
+ title: "产品认知",
239
+ icon: /* @__PURE__ */ e(X, {}),
240
+ items: [
241
+ {
242
+ key: "product-board",
243
+ label: "产品全景",
244
+ icon: /* @__PURE__ */ e(L, {}),
245
+ path: "/z-product/board",
246
+ desc: "业务/产品/研发三线可见的全量认知(术语·模型·链路·设计稿·缺口)"
247
+ },
248
+ {
249
+ key: "product-blueprint",
250
+ label: "产品蓝图",
251
+ icon: /* @__PURE__ */ e(X, {}),
252
+ path: "/z-product/blueprint",
253
+ desc: "AI 的唯一入口:后端实时投影的全量认知快照"
254
+ },
255
+ {
256
+ key: "product-glossary",
257
+ label: "统一语言",
258
+ icon: /* @__PURE__ */ e(me, {}),
259
+ path: "/z-product/glossary",
260
+ desc: "术语仲裁表:标准词/别名/适用范围/反例"
261
+ },
262
+ {
263
+ key: "product-concept",
264
+ label: "领域模型",
265
+ icon: /* @__PURE__ */ e(de, {}),
266
+ path: "/z-product/concept-model",
267
+ desc: "概念与关系画布(四种投影)"
268
+ },
269
+ {
270
+ key: "product-scenarios",
271
+ label: "用户链路",
272
+ icon: /* @__PURE__ */ e(F, {}),
273
+ path: "/z-product/scenarios",
274
+ desc: "端到端场景:步骤引用领域概念"
275
+ },
276
+ {
277
+ key: "product-designs",
278
+ label: "设计稿 ⇄ 模型",
279
+ icon: /* @__PURE__ */ e(he, {}),
280
+ path: "/z-product/designs",
281
+ desc: "设计与认知的双向收敛回路"
282
+ }
283
+ ]
284
+ },
285
+ {
286
+ title: "业务流程",
287
+ icon: /* @__PURE__ */ e(T, {}),
288
+ items: [
289
+ {
290
+ key: "workflow",
291
+ label: "流程中心",
292
+ icon: /* @__PURE__ */ e(W, {}),
293
+ path: "/workflow/dashboard",
294
+ desc: "工作流定义与审批管理"
295
+ },
296
+ {
297
+ key: "task",
298
+ label: "任务中心",
299
+ icon: /* @__PURE__ */ e(T, {}),
300
+ path: "/task/dashboard",
301
+ desc: "任务创建、分配与跟踪"
302
+ },
303
+ {
304
+ key: "schedule",
305
+ label: "调度中心",
306
+ icon: /* @__PURE__ */ e(I, {}),
307
+ path: "/schedule/dashboard",
308
+ desc: "定时任务调度与管理"
309
+ },
310
+ {
311
+ key: "subscribe",
312
+ label: "订阅中心",
313
+ icon: /* @__PURE__ */ e(be, {}),
314
+ path: "/subscribe/list",
315
+ desc: "第三方数据订阅与拉取"
316
+ },
317
+ {
318
+ key: "project",
319
+ label: "项目中心",
320
+ icon: /* @__PURE__ */ e(ce, {}),
321
+ path: "/project/list",
322
+ desc: "项目创建与进度管理"
323
+ }
324
+ ]
325
+ }
326
+ ], $ = [...se, Be];
327
+ function Fe({
328
+ activePathOverride: n,
329
+ menuOnly: t = !1,
330
+ visibleGroups: o
331
+ } = {}) {
332
+ const p = ne(), { pathname: b } = E(), r = v(
333
+ () => o ? $.filter((c) => o.includes(c.title)) : se,
334
+ [o]
335
+ ), [g, _] = M(
336
+ new Set($.map((c) => c.title))
337
+ ), [l, h] = M(
338
+ () => new Set(
339
+ $.flatMap((c) => c.items).filter((c) => c.children).map((c) => c.key)
340
+ )
341
+ ), m = v(() => {
342
+ var k;
343
+ const c = n ?? b;
344
+ return ((k = r.flatMap((i) => q(i.items)).find(
345
+ (i) => i.path === c
346
+ )) == null ? void 0 : k.key) ?? null;
347
+ }, [n, b, r]), N = (c) => {
348
+ _((k) => {
349
+ const i = new Set(k);
350
+ return i.has(c) ? i.delete(c) : i.add(c), i;
351
+ });
352
+ }, P = (c) => {
353
+ h((k) => {
354
+ const i = new Set(k);
355
+ return i.has(c) ? i.delete(c) : i.add(c), i;
356
+ });
357
+ }, C = (c) => {
358
+ c.path && p(c.path);
359
+ }, S = r.flatMap((c) => q(c.items)).find(
360
+ (c) => c.key === m
361
+ );
362
+ return /* @__PURE__ */ u("div", { className: s.container, children: [
363
+ /* @__PURE__ */ e("aside", { className: s.sidebar, children: /* @__PURE__ */ e("nav", { className: s.menuList, children: r.map((c) => {
364
+ const k = g.has(c.title);
365
+ return /* @__PURE__ */ u("div", { className: s.menuGroup, children: [
366
+ /* @__PURE__ */ u(
367
+ "div",
368
+ {
369
+ className: s.menuGroupHeader,
370
+ onClick: () => N(c.title),
371
+ children: [
372
+ /* @__PURE__ */ e("span", { className: s.menuGroupIcon, children: c.icon }),
373
+ /* @__PURE__ */ e("span", { className: s.menuGroupLabel, children: c.title }),
374
+ /* @__PURE__ */ e("span", { className: s.menuGroupArrow, children: k ? /* @__PURE__ */ e(K, {}) : /* @__PURE__ */ e(U, {}) })
375
+ ]
376
+ }
377
+ ),
378
+ k && /* @__PURE__ */ e("ul", { className: s.menuSubList, children: c.items.map(
379
+ (i) => i.children ? (
380
+ /* 子菜单分组头 — 可折叠; active 项落在其中时高亮 */
381
+ /* @__PURE__ */ u("li", { className: s.menuSubGroup, children: [
382
+ /* @__PURE__ */ u(
383
+ "div",
384
+ {
385
+ className: `${s.menuSubGroupHeader} ${i.children.some((f) => f.key === m) ? s.menuSubGroupHeaderActive : ""}`,
386
+ onClick: () => P(i.key),
387
+ children: [
388
+ /* @__PURE__ */ e("span", { className: s.menuGroupIcon, children: i.icon }),
389
+ /* @__PURE__ */ e("span", { className: s.menuSubGroupLabel, children: i.label }),
390
+ /* @__PURE__ */ e("span", { className: s.menuGroupArrow, children: l.has(i.key) ? /* @__PURE__ */ e(K, {}) : /* @__PURE__ */ e(U, {}) })
391
+ ]
392
+ }
393
+ ),
394
+ l.has(i.key) && /* @__PURE__ */ e("ul", { className: s.menuSubList, children: i.children.map((f) => /* @__PURE__ */ u(
395
+ "li",
396
+ {
397
+ className: `${s.menuSubItem} ${m === f.key ? s.menuSubItemActive : ""}`,
398
+ onClick: () => C(f),
399
+ children: [
400
+ /* @__PURE__ */ e(
401
+ "span",
402
+ {
403
+ className: s.menuSubItemIcon,
404
+ children: f.icon
405
+ }
406
+ ),
407
+ /* @__PURE__ */ e("span", { children: f.label })
408
+ ]
409
+ },
410
+ f.key
411
+ )) })
412
+ ] }, i.key)
413
+ ) : /* @__PURE__ */ u(
414
+ "li",
415
+ {
416
+ className: `${s.menuSubItem} ${m === i.key ? s.menuSubItemActive : ""}`,
417
+ onClick: () => C(i),
418
+ children: [
419
+ /* @__PURE__ */ e("span", { className: s.menuSubItemIcon, children: i.icon }),
420
+ /* @__PURE__ */ e("span", { children: i.label })
421
+ ]
422
+ },
423
+ i.key
424
+ )
425
+ ) })
426
+ ] }, c.title);
427
+ }) }) }),
428
+ t ? null : /* @__PURE__ */ e("main", { className: s.main, children: S ? /* @__PURE__ */ u("div", { className: s.detailPanel, children: [
429
+ /* @__PURE__ */ u("div", { className: s.detailHeader, children: [
430
+ /* @__PURE__ */ e("div", { className: s.detailIcon, children: S.icon }),
431
+ /* @__PURE__ */ u("div", { children: [
432
+ /* @__PURE__ */ e("h2", { className: s.detailTitle, children: S.label }),
433
+ /* @__PURE__ */ e("p", { className: s.detailDesc, children: S.desc })
434
+ ] })
435
+ ] }),
436
+ /* @__PURE__ */ e("div", { className: s.detailAction, children: /* @__PURE__ */ u(
437
+ "button",
438
+ {
439
+ className: s.goBtn,
440
+ onClick: () => p(S.path),
441
+ children: [
442
+ "进入 ",
443
+ S.label
444
+ ]
445
+ }
446
+ ) })
447
+ ] }) : /* @__PURE__ */ u("div", { className: s.emptyState, children: [
448
+ /* @__PURE__ */ e(ae, { style: { fontSize: 48, color: "#ccc" } }),
449
+ /* @__PURE__ */ e("p", { children: "点击左侧菜单进入对应功能模块" })
450
+ ] }) })
451
+ ] });
452
+ }
453
+ const We = 30, Xe = ["/api/", "/kapi/", "/z-team/", "/auth/", "/sso/"], G = "__zteam_api_error_monitor__", O = globalThis;
454
+ function x(n) {
455
+ return n.startsWith(location.origin) && (n = n.slice(location.origin.length)), Xe.some((t) => n.includes(t));
456
+ }
457
+ function R(n) {
458
+ const t = O[G];
459
+ if (!t) return;
460
+ t.failures.push(n), t.failures.length > We && t.failures.shift();
461
+ const o = [...t.failures];
462
+ t.listeners.forEach((p) => p(o));
463
+ }
464
+ function Qe() {
465
+ var n;
466
+ return ((n = O[G]) == null ? void 0 : n.failures) ?? [];
467
+ }
468
+ function Ye(n) {
469
+ const t = O[G];
470
+ return t ? (t.listeners.add(n), n(t.failures), () => t.listeners.delete(n)) : () => {
471
+ };
472
+ }
473
+ function Y(n) {
474
+ return n >= 400 && n !== 401;
475
+ }
476
+ function Ze() {
477
+ if (O[G]) return;
478
+ const n = { failures: [], listeners: /* @__PURE__ */ new Set() };
479
+ O[G] = n;
480
+ const t = window.fetch.bind(window);
481
+ window.fetch = async (...b) => {
482
+ var l;
483
+ const r = b[0], g = typeof r == "string" ? r : r instanceof URL ? r.href : r.url, _ = (((l = b[1]) == null ? void 0 : l.method) ?? (typeof r == "object" && r && "method" in r ? r.method : void 0) ?? "GET").toUpperCase();
484
+ try {
485
+ const h = await t(...b);
486
+ return Y(h.status) && x(g) && R({ method: _, url: g, status: h.status, route: location.pathname, at: Date.now() }), h;
487
+ } catch (h) {
488
+ throw x(g) && R({ method: _, url: g, status: 0, route: location.pathname, at: Date.now() }), h;
489
+ }
490
+ };
491
+ const o = XMLHttpRequest.prototype.open, p = XMLHttpRequest.prototype.send;
492
+ XMLHttpRequest.prototype.open = function(b, r, ...g) {
493
+ const _ = o.call(this, b, r, ...g);
494
+ return this.__url = String(r), this.__method = String(b || "GET").toUpperCase(), _;
495
+ }, XMLHttpRequest.prototype.send = function(...b) {
496
+ const r = p.apply(this, b), g = this, _ = g.__url;
497
+ if (_ && x(_)) {
498
+ const l = g.__method ?? "GET";
499
+ this.addEventListener("loadend", () => {
500
+ Y(this.status) && R({ method: l, url: _, status: this.status, route: location.pathname, at: Date.now() });
501
+ });
502
+ }
503
+ return r;
504
+ };
505
+ }
506
+ const Ve = "_banner_2v7mc_1", Je = "_dot_2v7mc_18", et = "_text_2v7mc_26", tt = "_retry_2v7mc_31", nt = "_dismiss_2v7mc_44", at = "_details_2v7mc_57", ot = "_method_2v7mc_85", ct = "_status_2v7mc_86", st = "_statusNet_2v7mc_87", it = "_url_2v7mc_88", w = {
507
+ banner: Ve,
508
+ dot: Je,
509
+ text: et,
510
+ retry: tt,
511
+ dismiss: nt,
512
+ details: at,
513
+ method: ot,
514
+ status: ct,
515
+ statusNet: st,
516
+ url: it
517
+ }, rt = () => {
518
+ const { pathname: n } = E(), [t, o] = M(Qe()), [p, b] = M(0);
519
+ H(() => Ye(o), []), H(() => {
520
+ b(0);
521
+ }, [n]);
522
+ const r = v(
523
+ () => t.filter((l) => l.route === n && l.at >= p),
524
+ [t, n, p]
525
+ ), g = v(() => {
526
+ const l = /* @__PURE__ */ new Map();
527
+ return r.forEach((h) => {
528
+ const m = l.get(h.status) ?? { status: h.status, count: 0, urls: [] };
529
+ m.count += 1, m.urls.includes(h.url) || m.urls.push(h.url), l.set(h.status, m);
530
+ }), [...l.values()].sort((h, m) => h.status - m.status);
531
+ }, [r]);
532
+ if (r.length === 0) return null;
533
+ const _ = g.map((l) => `${l.status === 0 ? "网络错误" : l.status} ×${l.count}`).join(" · ");
534
+ return /* @__PURE__ */ u("div", { className: w.banner, role: "alert", "data-testid": "page-api-error-notice", children: [
535
+ /* @__PURE__ */ e("span", { className: w.dot }),
536
+ /* @__PURE__ */ u("span", { className: w.text, children: [
537
+ "本页有 ",
538
+ r.length,
539
+ " 个接口失败(",
540
+ _,
541
+ "),页面可能不完整。"
542
+ ] }),
543
+ /* @__PURE__ */ e("button", { type: "button", className: w.retry, onClick: () => location.reload(), children: "重试" }),
544
+ /* @__PURE__ */ u("details", { className: w.details, children: [
545
+ /* @__PURE__ */ e("summary", { children: "失败明细" }),
546
+ /* @__PURE__ */ e("ul", { children: r.map((l, h) => /* @__PURE__ */ u("li", { children: [
547
+ /* @__PURE__ */ e("span", { className: w.method, children: l.method }),
548
+ /* @__PURE__ */ e("span", { className: l.status === 0 ? w.statusNet : w.status, children: l.status === 0 ? "网络" : l.status }),
549
+ /* @__PURE__ */ e("span", { className: w.url, children: l.url })
550
+ ] }, `${l.at}-${h}`)) })
551
+ ] }),
552
+ /* @__PURE__ */ e(
553
+ "button",
554
+ {
555
+ type: "button",
556
+ className: w.dismiss,
557
+ title: "本页浏览期间不再显示",
558
+ onClick: () => b(Date.now() + 1),
559
+ children: "忽略"
560
+ }
561
+ )
562
+ ] });
563
+ }, lt = "_wrap_2gcw5_1", pt = "_card_2gcw5_9", ut = "_badge_2gcw5_19", mt = "_title_2gcw5_41", dt = "_desc_2gcw5_48", ht = "_actions_2gcw5_55", bt = "_primary_2gcw5_63", gt = "_secondary_2gcw5_75", _t = "_details_2gcw5_90", yt = "_pre_2gcw5_102", kt = "_copy_2gcw5_117", ft = "_compact_2gcw5_127", y = {
564
+ wrap: lt,
565
+ card: pt,
566
+ badge: ut,
567
+ title: mt,
568
+ desc: dt,
569
+ actions: ht,
570
+ primary: bt,
571
+ secondary: gt,
572
+ details: _t,
573
+ pre: yt,
574
+ copy: kt,
575
+ compact: ft
576
+ };
577
+ function ie(n) {
578
+ const t = n, o = `${(t == null ? void 0 : t.name) ?? ""} ${(t == null ? void 0 : t.message) ?? ""} ${typeof n == "string" ? n : ""}`;
579
+ return /ChunkLoadError|Loading chunk|Failed to fetch dynamically imported module|Importing a module script failed|error loading dynamically imported module/i.test(o);
580
+ }
581
+ function wt(n) {
582
+ const { status: t, error: o } = n;
583
+ return t === 401 ? {
584
+ kind: "unauthorized",
585
+ status: t,
586
+ badge: "401",
587
+ title: "登录已失效",
588
+ description: "当前会话已过期或未建立,请重新登录后继续。重登后会回到这个页面。"
589
+ } : t === 403 ? {
590
+ kind: "forbidden",
591
+ status: t,
592
+ badge: "403",
593
+ title: "没有访问权限",
594
+ description: "当前账号无权访问该功能。如需开通,请联系管理员分配权限。"
595
+ } : t === 404 ? {
596
+ kind: "not-found",
597
+ status: t,
598
+ badge: "404",
599
+ title: "功能接口未就绪",
600
+ description: "这个页面要用的后端接口还没有部署,或前后端路径对不上。可以重试;若持续如此,请把技术详情发给运维确认版本。"
601
+ } : t && t >= 500 ? {
602
+ kind: "server",
603
+ status: t,
604
+ badge: String(t),
605
+ title: "服务暂时不可用",
606
+ description: "后端返回了错误。稍后重试;如果反复出现,请把技术详情发给运维。"
607
+ } : t === 0 ? {
608
+ kind: "network",
609
+ status: t,
610
+ badge: "!",
611
+ title: "网络不可用",
612
+ description: "请求没有到达后端。请检查网络,或确认本地后端服务是否已启动。"
613
+ } : ie(o) ? {
614
+ kind: "chunk",
615
+ badge: "⟳",
616
+ title: "页面资源加载失败",
617
+ description: "可能刚发布了新版本,旧页面资源已被替换。刷新页面即可拿到新资源。"
618
+ } : o != null ? {
619
+ kind: "render",
620
+ badge: "!",
621
+ title: "页面渲染出错",
622
+ description: "这个页面遇到了未预期的错误,已被拦截,不影响其他页面。可以重试;仍然失败请把技术详情发给研发。"
623
+ } : {
624
+ kind: "unknown",
625
+ badge: "!",
626
+ title: "页面加载失败",
627
+ description: "发生了未知错误。请重试,或返回首页换个入口再试。"
628
+ };
629
+ }
630
+ function St(n, t) {
631
+ const o = [];
632
+ if (o.push(`页面:${typeof location < "u" ? location.pathname + location.search : "-"}`), o.push(`时间:${(/* @__PURE__ */ new Date()).toISOString()}`), n != null && o.push(`HTTP:${n}`), t != null) {
633
+ const p = t;
634
+ p != null && p.name && o.push(`错误名:${String(p.name)}`), p != null && p.message && o.push(`消息:${String(p.message)}`), p != null && p.stack ? o.push(`堆栈:
635
+ ${String(p.stack)}`) : typeof t != "object" && o.push(`原文:${String(t)}`);
636
+ }
637
+ return o.join(`
638
+ `).slice(0, 4e3);
639
+ }
640
+ const vt = ({
641
+ status: n,
642
+ error: t,
643
+ title: o,
644
+ description: p,
645
+ retry: b,
646
+ retryText: r,
647
+ extra: g,
648
+ showHome: _ = !0,
649
+ compact: l = !1,
650
+ className: h
651
+ }) => {
652
+ const m = v(() => wt({ status: n, error: t }), [n, t]), [N, P] = M(!1), C = v(() => St(n, t), [n, t]);
653
+ H(() => {
654
+ if (!N) return;
655
+ const f = setTimeout(() => P(!1), 2e3);
656
+ return () => clearTimeout(f);
657
+ }, [N]);
658
+ const S = async () => {
659
+ try {
660
+ await navigator.clipboard.writeText(C), P(!0);
661
+ } catch {
662
+ P(!1);
663
+ }
664
+ }, c = () => {
665
+ const f = encodeURIComponent(location.pathname + location.search);
666
+ location.assign(`/login?redirect=${f}`);
667
+ }, k = () => b ? /* @__PURE__ */ e("button", { type: "button", className: y.primary, onClick: b, children: r || "重试" }) : m.kind === "chunk" ? /* @__PURE__ */ e("button", { type: "button", className: y.primary, onClick: () => location.reload(), children: "刷新页面" }) : m.kind === "unauthorized" ? /* @__PURE__ */ e("button", { type: "button", className: y.primary, onClick: c, children: "重新登录" }) : null, i = t != null || n != null;
668
+ return /* @__PURE__ */ e(
669
+ "div",
670
+ {
671
+ className: [y.wrap, l ? y.compact : "", h || ""].filter(Boolean).join(" "),
672
+ role: "alert",
673
+ "data-error-kind": m.kind,
674
+ children: /* @__PURE__ */ u("div", { className: y.card, children: [
675
+ /* @__PURE__ */ e("div", { className: y.badge, "data-kind": m.kind, children: m.badge }),
676
+ /* @__PURE__ */ e("h2", { className: y.title, children: o || m.title }),
677
+ /* @__PURE__ */ e("p", { className: y.desc, children: p || m.description }),
678
+ /* @__PURE__ */ u("div", { className: y.actions, children: [
679
+ k(),
680
+ g,
681
+ _ && m.kind !== "unauthorized" && /* @__PURE__ */ e("a", { className: y.secondary, href: "/", children: "返回首页" })
682
+ ] }),
683
+ i && /* @__PURE__ */ u("details", { className: y.details, children: [
684
+ /* @__PURE__ */ e("summary", { children: "技术详情" }),
685
+ /* @__PURE__ */ e("pre", { className: y.pre, children: C }),
686
+ /* @__PURE__ */ e("button", { type: "button", className: y.copy, onClick: S, children: N ? "已复制" : "复制详情" })
687
+ ] })
688
+ ] })
689
+ }
690
+ );
691
+ };
692
+ class At extends re.Component {
693
+ constructor() {
694
+ super(...arguments), this.state = { error: null, resetKey: this.props.resetKey };
695
+ }
696
+ static getDerivedStateFromError(t) {
697
+ return { error: t };
698
+ }
699
+ static getDerivedStateFromProps(t, o) {
700
+ return o.error && t.resetKey !== o.resetKey ? { error: null, resetKey: t.resetKey } : t.resetKey !== o.resetKey ? { resetKey: t.resetKey } : null;
701
+ }
702
+ render() {
703
+ const { error: t } = this.state;
704
+ if (t) {
705
+ const o = ie(t);
706
+ return /* @__PURE__ */ e(
707
+ vt,
708
+ {
709
+ error: t,
710
+ retry: () => this.setState({ error: null }),
711
+ retryText: o ? "重试加载" : "重试渲染"
712
+ }
713
+ );
714
+ }
715
+ return this.props.children;
716
+ }
717
+ }
718
+ const Dt = "_shell_10jrt_6", Nt = "_main_10jrt_21", Pt = "_empty_10jrt_31", Ct = "_emptyIcon_10jrt_41", It = "_emptyText_10jrt_46", D = {
719
+ shell: Dt,
720
+ main: Nt,
721
+ empty: Pt,
722
+ emptyIcon: Ct,
723
+ emptyText: It
724
+ };
725
+ Ze();
726
+ const a = (n, t) => A(() => n().then((o) => ({ default: o[t] }))), Mt = a(() => import("@yuku123/z-ctc-component"), "AccountManagement"), Gt = a(() => import("@yuku123/z-ctc-component"), "ApplicationManagement"), Ot = a(() => import("@yuku123/z-ctc-component"), "AuditPage"), Lt = a(() => import("@yuku123/z-ctc-component"), "CtcOverview"), Tt = a(() => import("@yuku123/z-ctc-component"), "DictPage"), Et = a(() => import("@yuku123/z-ctc-component"), "OrgPage"), zt = a(() => import("@yuku123/z-ctc-component"), "PermissionManagement"), $t = a(() => import("@yuku123/z-ctc-component"), "RoleManagement"), Z = a(() => import("@yuku123/z-ctc-component"), "SurlManagement"), xt = a(() => import("@yuku123/z-ctc-component"), "TenantManagement"), Rt = a(() => import("@yuku123/z-agent-component"), "AgentAppList"), Ht = a(() => import("@yuku123/z-agent-component"), "AgentDashboard"), jt = a(() => import("@yuku123/z-agent-component"), "AkManage"), qt = a(() => import("@yuku123/z-agent-component"), "BucketList"), Kt = a(() => import("@yuku123/z-agent-component"), "LlmManage"), Ut = a(() => import("@yuku123/z-agent-component"), "McpPage"), Bt = a(() => import("@yuku123/z-agent-component"), "ObjectBrowser"), Ft = a(() => import("@yuku123/z-agent-component"), "ScriptCenterPage"), Wt = a(() => import("@yuku123/z-agent-component"), "ScriptProductizationPage"), Xt = a(() => import("@yuku123/z-agent-component"), "SkillMarket"), Qt = a(() => import("./index-Bpn6x1So.js"), "AgentTeamIM"), V = a(() => import("./index-Bpn6x1So.js"), "DebugPlayground"), Yt = a(() => import("./index-Bpn6x1So.js"), "Overview"), J = a(() => import("./index-Bpn6x1So.js"), "Webide"), Zt = A(() => import("./OnboardingPage-C7C4PEjn.js")), Vt = A(() => import("./InvitationManagementPage-Gkqisq4C.js")), Jt = a(() => import("@yuku123/z-config-component"), "ConfigApp"), en = a(() => import("@yuku123/z-task-component"), "TaskApp"), tn = a(() => import("@yuku123/z-wf-component"), "WorkflowApp"), nn = a(() => import("@yuku123/z-schedule-component"), "ScheduleApp"), an = a(() => import("@yuku123/z-mist-component"), "MistApp"), on = a(() => import("@yuku123/z-meta-component"), "MetaApp"), cn = a(() => import("@yuku123/z-msg-component"), "MsgApp"), sn = a(() => import("@yuku123/z-rpc-component"), "RpcApp"), rn = A(() => import("./ComponentDoc-Bx6NAJlK.js").then((n) => n.m)), ln = A(() => import("./ComponentDoc-Bx6NAJlK.js").then((n) => n.n)), pn = a(() => import("@yuku123/z-config-component"), "ComponentDocPage"), un = a(() => import("@yuku123/z-task-component"), "ComponentDocPage"), mn = a(() => import("@yuku123/z-wf-component"), "ComponentDocPage"), dn = a(() => import("@yuku123/z-schedule-component"), "ComponentDocPage"), hn = a(() => import("@yuku123/z-mist-component"), "ComponentDocPage"), bn = a(() => import("@yuku123/z-meta-component"), "ComponentDocPage"), gn = a(() => import("@yuku123/z-msg-component"), "ComponentDocPage"), _n = a(() => import("@yuku123/z-rpc-component"), "ComponentDocPage"), yn = a(() => import("@yuku123/z-kb-component"), "ComponentDocPage"), kn = a(() => import("@yuku123/z-product-component"), "ComponentDocPage"), fn = a(() => import("@yuku123/z-oss-component"), "ComponentDocPage"), wn = a(() => import("@yuku123/z-vector-component"), "ComponentDocPage"), Sn = a(() => import("@yuku123/z-graph-component"), "ComponentDocPage"), vn = a(() => import("@yuku123/z-gw-component"), "ComponentDocPage"), An = a(() => import("@yuku123/z-cache-component"), "ComponentDocPage"), Dn = a(() => import("@yuku123/z-mq-component"), "ComponentDocPage"), Nn = a(() => import("@yuku123/z-ctc-component"), "ComponentDocPage"), Pn = a(() => import("@yuku123/z-agent-component"), "ComponentDocPage"), Cn = a(() => import("@yuku123/z-lc-component"), "ComponentDocPage"), In = a(() => import("@yuku123/z-qa-component"), "ComponentDocPage"), Mn = A(() => import("./ComponentDoc-Bx6NAJlK.js").then((n) => n.l)), ee = A(() => import("@yuku123/z-qa-component"));
727
+ function Gn() {
728
+ return /* @__PURE__ */ u("div", { className: D.empty, children: [
729
+ /* @__PURE__ */ e("div", { className: D.emptyIcon, children: "📋" }),
730
+ /* @__PURE__ */ e("div", { className: D.emptyText, children: "请从左侧菜单选择模块" })
731
+ ] });
732
+ }
733
+ function On() {
734
+ const { pathname: n } = E();
735
+ return /* @__PURE__ */ e(d, { to: n.replace(/^\/product/, "/z-product"), replace: !0 });
736
+ }
737
+ const te = [
738
+ // ─── 顶层 / 概览 ───
739
+ { path: "/overview", element: /* @__PURE__ */ e(Yt, {}) },
740
+ // ─── 4A 中心 (/ctc/*) ───
741
+ { path: "/ctc", element: /* @__PURE__ */ e(d, { to: "/ctc/4a/account", replace: !0 }) },
742
+ { path: "/ctc/4a/account", element: /* @__PURE__ */ e(Mt, {}) },
743
+ { path: "/ctc/4a/role", element: /* @__PURE__ */ e($t, {}) },
744
+ { path: "/ctc/4a/application", element: /* @__PURE__ */ e(Gt, {}) },
745
+ { path: "/ctc/4a/tenant", element: /* @__PURE__ */ e(xt, {}) },
746
+ { path: "/ctc/4a/org", element: /* @__PURE__ */ e(Et, {}) },
747
+ { path: "/ctc/4a/permission", element: /* @__PURE__ */ e(zt, {}) },
748
+ { path: "/ctc/4a/surl", element: /* @__PURE__ */ e(Z, {}) },
749
+ { path: "/ctc/dict", element: /* @__PURE__ */ e(Tt, {}) },
750
+ { path: "/ctc/overview", element: /* @__PURE__ */ e(Lt, {}) },
751
+ { path: "/ctc/audit", element: /* @__PURE__ */ e(Ot, {}) },
752
+ { path: "/ctc/webide", element: /* @__PURE__ */ e(J, {}) },
753
+ { path: "/ctc/agent-team", element: /* @__PURE__ */ e(Qt, {}) },
754
+ { path: "/ctc/invitation", element: /* @__PURE__ */ e(Vt, {}) },
755
+ { path: "/onboarding", element: /* @__PURE__ */ e(Zt, {}) },
756
+ // ─── 智能中心 (/ai/*) ───
757
+ { path: "/ai", element: /* @__PURE__ */ e(d, { to: "/ai/agent/app", replace: !0 }) },
758
+ { path: "/ai/agent", element: /* @__PURE__ */ e(d, { to: "/ai/agent/app", replace: !0 }) },
759
+ { path: "/ai/agent/app", element: /* @__PURE__ */ e(Rt, {}) },
760
+ { path: "/ai/llm", element: /* @__PURE__ */ e(Kt, {}) },
761
+ { path: "/ai/llm/provider", element: /* @__PURE__ */ e(d, { to: "/ai/llm", replace: !0 }) },
762
+ { path: "/ai/llm/model", element: /* @__PURE__ */ e(d, { to: "/ai/llm", replace: !0 }) },
763
+ { path: "/ai/usage", element: /* @__PURE__ */ e(d, { to: "/ai/llm", replace: !0 }) },
764
+ { path: "/ai/ak", element: /* @__PURE__ */ e(jt, {}) },
765
+ { path: "/ai/mcp", element: /* @__PURE__ */ e(Ut, {}) },
766
+ { path: "/ai/skill", element: /* @__PURE__ */ e(Xt, {}) },
767
+ { path: "/ai/oss", element: /* @__PURE__ */ e(d, { to: "/ai/oss/bucket", replace: !0 }) },
768
+ { path: "/ai/oss/bucket", element: /* @__PURE__ */ e(qt, {}) },
769
+ { path: "/ai/oss/bucket/:bucketName", element: /* @__PURE__ */ e(Bt, {}) },
770
+ { path: "/ai/trace", element: /* @__PURE__ */ e(V, {}) },
771
+ { path: "/ai/trace/debug", element: /* @__PURE__ */ e(V, {}) },
772
+ { path: "/ai/dashboard", element: /* @__PURE__ */ e(Ht, {}) },
773
+ // 多 Agent 实例 / 模板市场已下线 (2026-10-22): 模板并入 Agent 应用页,
774
+ // 旧深链重定向, 别再回到独立菜单
775
+ { path: "/ai/template", element: /* @__PURE__ */ e(d, { to: "/ai/agent/app", replace: !0 }) },
776
+ { path: "/ai/agent-instance", element: /* @__PURE__ */ e(d, { to: "/ai/agent/app", replace: !0 }) },
777
+ { path: "/ai/agent/instances", element: /* @__PURE__ */ e(d, { to: "/ai/agent/app", replace: !0 }) },
778
+ // ─── 配置中心 ───
779
+ { path: "/config/*", element: /* @__PURE__ */ e(Jt, {}) },
780
+ // ─── 任务中心 ───
781
+ { path: "/task/*", element: /* @__PURE__ */ e(en, {}) },
782
+ // ─── 流程中心 ───
783
+ { path: "/workflow/*", element: /* @__PURE__ */ e(tn, {}) },
784
+ // ─── 调度中心 ───
785
+ { path: "/schedule/*", element: /* @__PURE__ */ e(nn, {}) },
786
+ // ─── 密钥中心 ───
787
+ { path: "/mist/*", element: /* @__PURE__ */ e(an, {}) },
788
+ // ─── 中间件孵化页 (大需求 004) — 主入口在运维工作台 (?mode=ops),此处兜住直链/刷新 ───
789
+ { path: "/meta", element: /* @__PURE__ */ e(d, { to: "/meta/app", replace: !0 }) },
790
+ { path: "/meta/*", element: /* @__PURE__ */ e(on, {}) },
791
+ { path: "/msg", element: /* @__PURE__ */ e(d, { to: "/msg/inbox", replace: !0 }) },
792
+ { path: "/msg/*", element: /* @__PURE__ */ e(cn, {}) },
793
+ { path: "/rpc", element: /* @__PURE__ */ e(d, { to: "/rpc/service", replace: !0 }) },
794
+ { path: "/rpc/*", element: /* @__PURE__ */ e(sn, {}) },
795
+ // ─── 订阅中心 ───
796
+ { path: "/subscribe/*", element: /* @__PURE__ */ e(rn, {}) },
797
+ // ─── 产品工作台 z-product (2026-10-21 接入) ───
798
+ // /z-product/* 由 z-product 组件自己的 ProductApp 渲染(内部按 manifest 的绝对路径手工匹配,
799
+ // 不用嵌套 <Routes>:这里没有 Route 父上下文,绝对路径不会被再拼一次父前缀)。
800
+ // §14:z-product 的菜单 key / 路由 path 一律带产品名前缀(/z-product/xxx),
801
+ // 避免 /board、/products 这类短路径跟宿主自己的同名路由撞车。
802
+ { path: "/z-product", element: /* @__PURE__ */ e(d, { to: "/z-product/board", replace: !0 }) },
803
+ { path: "/z-product/*", element: /* @__PURE__ */ e(ke, { basePath: "/z-product" }) },
804
+ // 旧前缀 /product/* → 新前缀 /z-product/*:§14 前缀化之前的老 URL 仍可达(书签 / 旧分享链接)。
805
+ { path: "/product", element: /* @__PURE__ */ e(d, { to: "/z-product/board", replace: !0 }) },
806
+ { path: "/product/*", element: /* @__PURE__ */ e(On, {}) },
807
+ // ─── 项目中心 ───
808
+ { path: "/project/*", element: /* @__PURE__ */ e(ln, {}) },
809
+ // ─── 脚本中心 (/script/*) — FEATURE052 ───
810
+ { path: "/script", element: /* @__PURE__ */ e(d, { to: "/script/manage", replace: !0 }) },
811
+ { path: "/script/manage", element: /* @__PURE__ */ e(Ft, {}) },
812
+ { path: "/script/productization", element: /* @__PURE__ */ e(Wt, {}) },
813
+ // ─── 工具中心 (/z-tool/*) — FEATURE054 ───
814
+ { path: "/z-tool", element: /* @__PURE__ */ e(d, { to: "/z-tool/curl", replace: !0 }) },
815
+ { path: "/z-tool/curl", element: /* @__PURE__ */ e(Z, {}) },
816
+ { path: "/z-tool/webide", element: /* @__PURE__ */ e(J, {}) },
817
+ // ─── 测试中心 (/test/*) — FEATURE061 ───
818
+ { path: "/test", element: /* @__PURE__ */ e(d, { to: "/test/qa/dashboard", replace: !0 }) },
819
+ { path: "/test/mock", element: /* @__PURE__ */ e(Mn, {}) },
820
+ // QAApp 内部用 <Routes> 相对路由, 通配匹配后由 QAApp 自己接管子路径
821
+ { path: "/test/qa", element: /* @__PURE__ */ e(ee, {}) },
822
+ { path: "/test/qa/*", element: /* @__PURE__ */ e(ee, {}) },
823
+ // ─── 低代码 ───
824
+ // /lc/* 刻意不在这里注册。它早就迁到 src/lc/(TS 重写), 挂载点是
825
+ // main.jsx 的 <Route path="/lc/*" element={<ZTeamApp forcedMode="dev"/>}/>,
826
+ // 由 DevWorkbench 把 pathname 原样交给 @/lc 自己的嵌套 <Routes>。
827
+ // 本表早先还挂着一行 {path:'/lc/*', element:<LcIndex/>}, 它的 import 写的是
828
+ // '@/pages/lc' —— 该别名解析到 src/zteam/pages/lc(不存在), 真身在 src/lc,
829
+ // 于是这行既解析不了、又因 main.jsx 先消费了 /lc/* 而永远不可达。
830
+ // /form/:entity 与 /form/_model 是 z-lc Phase 1 手写原型的两条 URL
831
+ // (LowCodeModel 实体字段编辑器 / LowCodeRuntime 通用 CRUD), 现已由
832
+ // @yuku123/z-lc-component 承接 —— 它是同一套 /api/lc 后端的完整前端客户,
833
+ // 能力严格更强(designer 模型编辑、workspace 七种视图 CRUD、admin 全套、
834
+ // db-import、AI 建模), 挂在 main.jsx 的 <Route path="/lc/*"> 下经
835
+ // DevWorkbench 的 <LcApp/> 渲染。
836
+ //
837
+ // 不做逐条映射: z-lc 的工作区路由是 /lc/{appCode}/{entityCode}/{viewType},
838
+ // 比 /form/{entityCode} 多一层 appCode, 旧 URL 里没有这个信息, 无法还原。
839
+ // 故统一重定向到应用列表, 由用户自行进入对应应用。
840
+ { path: "/form/:entity", element: /* @__PURE__ */ e(d, { to: "/lc/apps", replace: !0 }) },
841
+ // ─── 各域组件文档(lead 008 §7)───
842
+ // 放在本表末尾即可:matchSystemPath 是「先全表精确匹配、再全表通配匹配」,
843
+ // 所以 /config/docs 这类精确路径**不会**被上面的 /config/* 吃掉。
844
+ //
845
+ // 为什么路径用宿主前缀(/config/docs)而不是各域 manifest 里的 /z-config/docs:
846
+ // manifest 的 routes 是给**独立壳**用的(suit 里 <Route path={r.path}> 直接铺);
847
+ // 工作台把各域挂在宿主前缀下(/config/* ⇒ ConfigApp 内部相对路由),
848
+ // 两套路径对不上 ⇒ manifest 的 routes 在工作台里不生效,文档页会 404。
849
+ // 这里统一按**宿主前缀**挂,各域自己的 manifest 路径仍然保留给独立壳用。
850
+ //
851
+ // §14 铁律(菜单 key 必须带产品名前缀)针对的是**同一宿主内多套件共存**的撞车问题;
852
+ // 这里每个域的宿主前缀本身就已经是产品名(/config / /task / /workflow …),
853
+ // 且各域之间前缀互不相同 ⇒ 不存在撞车,不需要再加 z- 前缀。
854
+ { path: "/config/docs", element: /* @__PURE__ */ e(pn, {}) },
855
+ { path: "/task/docs", element: /* @__PURE__ */ e(un, {}) },
856
+ { path: "/workflow/docs", element: /* @__PURE__ */ e(mn, {}) },
857
+ { path: "/schedule/docs", element: /* @__PURE__ */ e(dn, {}) },
858
+ { path: "/mist/docs", element: /* @__PURE__ */ e(hn, {}) },
859
+ { path: "/meta/docs", element: /* @__PURE__ */ e(bn, {}) },
860
+ { path: "/msg/docs", element: /* @__PURE__ */ e(gn, {}) },
861
+ { path: "/rpc/docs", element: /* @__PURE__ */ e(_n, {}) },
862
+ { path: "/kb/docs", element: /* @__PURE__ */ e(yn, {}) },
863
+ { path: "/z-product/docs", element: /* @__PURE__ */ e(kn, {}) },
864
+ { path: "/oss/docs", element: /* @__PURE__ */ e(fn, {}) },
865
+ { path: "/vector/docs", element: /* @__PURE__ */ e(wn, {}) },
866
+ { path: "/graph/docs", element: /* @__PURE__ */ e(Sn, {}) },
867
+ { path: "/gw/docs", element: /* @__PURE__ */ e(vn, {}) },
868
+ { path: "/cache/docs", element: /* @__PURE__ */ e(An, {}) },
869
+ { path: "/mq/docs", element: /* @__PURE__ */ e(Dn, {}) },
870
+ { path: "/ctc/docs", element: /* @__PURE__ */ e(Nn, {}) },
871
+ { path: "/ai/docs", element: /* @__PURE__ */ e(Pn, {}) },
872
+ { path: "/lc/docs", element: /* @__PURE__ */ e(Cn, {}) },
873
+ { path: "/test/qa/docs", element: /* @__PURE__ */ e(In, {}) }
874
+ ];
875
+ function Ln(n) {
876
+ for (const t of te)
877
+ if (t.path === n) return t.element;
878
+ for (const t of te)
879
+ if (Tn(t.path, n)) return t.element;
880
+ return /* @__PURE__ */ e(Gn, {});
881
+ }
882
+ function Tn(n, t) {
883
+ if (!n.includes("*") && !n.includes(":")) return !1;
884
+ const o = "^" + n.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, "[^/]+") + "$";
885
+ return new RegExp(o).test(t);
886
+ }
887
+ function Hn() {
888
+ ne();
889
+ const { pathname: n } = E(), t = n.startsWith("/test/"), o = v(() => n, [n]), p = v(() => Ln(n), [n]);
890
+ return /* @__PURE__ */ u("div", { className: D.shell, children: [
891
+ /* @__PURE__ */ e(
892
+ Fe,
893
+ {
894
+ activePathOverride: o,
895
+ menuOnly: !0,
896
+ visibleGroups: t ? ["测试中心"] : void 0
897
+ }
898
+ ),
899
+ /* @__PURE__ */ u("main", { className: D.main, children: [
900
+ /* @__PURE__ */ e(rt, {}),
901
+ /* @__PURE__ */ e(At, { resetKey: n, children: /* @__PURE__ */ e(le, { fallback: /* @__PURE__ */ e("div", { className: D.empty, children: "加载中…" }), children: p }) })
902
+ ] })
903
+ ] });
904
+ }
905
+ export {
906
+ Hn as default
907
+ };