@yuku123/z-team-component 0.2.29 → 0.2.31

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.
Files changed (49) hide show
  1. package/dist/{ChangeLogView-CG-o5YP1.js → ChangeLogView-FLd1wS8H.js} +1 -1
  2. package/dist/ComponentDoc-CUhlRqDo.js +3843 -0
  3. package/dist/DebugPlayground-cxffrMgF.js +15 -0
  4. package/dist/{InvitationManagementPage-ByJuWwA_.js → InvitationManagementPage-DBAAQ3Qq.js} +90 -85
  5. package/dist/{OnboardingPage-D58h1JK_.js → OnboardingPage-zLHkQLok.js} +2 -2
  6. package/dist/SmartWorkbench.module-DzQskKT0.js +85 -0
  7. package/dist/SystemShell-yMCZOMUN.js +635 -0
  8. package/dist/{admin-logs-C2V1ElH9.js → admin-logs-Dv86pFvY.js} +2 -2
  9. package/dist/{api--Fg0hL9Y.js → api-19TXED_O.js} +52 -39
  10. package/dist/api-63lPU5Cs.js +20 -0
  11. package/dist/{createWorkspaceWsHandler-CqGqcTh_.js → createWorkspaceWsHandler-CBk4DqP4.js} +6 -5
  12. package/dist/{index-CDKg_qI5.js → index-B5_xKK08.js} +1140 -1153
  13. package/dist/{index-D2S8FrNc.js → index-BCBBZW4m.js} +358 -347
  14. package/dist/{index-D5u3BjCZ.js → index-BIJnjJd5.js} +2 -2
  15. package/dist/{index-bbwTcNjB.js → index-BTLD5gUt.js} +3 -3
  16. package/dist/{index-CiMxCTOS.js → index-B_EBV24V.js} +1 -1
  17. package/dist/{index-DOVOWiGU.js → index-BbjzrjsP.js} +1134 -1132
  18. package/dist/{index-BafC42Cl.js → index-Bd57t_yF.js} +1 -1
  19. package/dist/{index-C2aPiQSz.js → index-BjqYiZpC.js} +3 -3
  20. package/dist/{index-BaCiSbPR.js → index-BoGVJ0hC.js} +1 -1
  21. package/dist/{index-C01UUprh.js → index-BpuJ9Njb.js} +7016 -6946
  22. package/dist/index-C6vfXs2f.js +1329 -0
  23. package/dist/{index-CcFJEYgr.js → index-C815hPWS.js} +55 -52
  24. package/dist/{index-DvIHX7lZ.js → index-CcpWacSZ.js} +243 -236
  25. package/dist/index-CrC94bvI.js +169 -0
  26. package/dist/{index-Dky6GVc1.js → index-CwIgdJYL.js} +9 -9
  27. package/dist/{index-Da7ls5q6.js → index-DOPkM2W8.js} +6 -6
  28. package/dist/{index-CTD7k9dP.js → index-DYgD6BuB.js} +4 -4
  29. package/dist/{index-Da3doGtf.js → index-JMzBzwiO.js} +57 -54
  30. package/dist/{index-BwFEDHy3.js → index-VHvEmmhf.js} +5 -5
  31. package/dist/{index-CRac8IT2.js → index-icI-ZchA.js} +3 -3
  32. package/dist/{index-Dao4uqQd.js → index-x4-W5ClM.js} +4 -4
  33. package/dist/index.js +7 -6
  34. package/dist/{instance-1QEDBRqA.js → instance-D951fRuD.js} +1 -1
  35. package/dist/pages.js +13 -9
  36. package/dist/{schedule-C89oiqIR.js → schedule-DD50-7cs.js} +1 -1
  37. package/dist/{send-default-agent-team-message-CxkWi3XC.js → send-default-agent-team-message-Bbs2rMNf.js} +1 -1
  38. package/dist/{sso-user-BE1Ell5F.js → sso-user-BEY5ICaR.js} +1 -1
  39. package/dist/{training-o-vSBkqP.js → training-B-9tNFQw.js} +1 -1
  40. package/dist/{useAppStore-wgWaxcyc.js → useAppStore-BQN-26ns.js} +1 -1
  41. package/dist/{webide-BxD6cYe-.js → webide-P867RFZi.js} +4 -4
  42. package/dist/z-team-component.css +1 -1
  43. package/package.json +2 -2
  44. package/dist/ProjectApp-oUbzb0Io.js +0 -3818
  45. package/dist/SmartWorkbench.module-xRRmpTTw.js +0 -85
  46. package/dist/SystemShell-D4mGsT0X.js +0 -604
  47. package/dist/api-3-Ykp2ll.js +0 -19
  48. package/dist/index-B8mNsH88.js +0 -1411
  49. package/dist/index-DYDba1NC.js +0 -187
@@ -1,43 +1,44 @@
1
1
  import { jsx as e, jsxs as s } from "react/jsx-runtime";
2
- import { useNavigate as Pe, useLocation as Te, Navigate as S } from "react-router-dom";
3
- import { useState as p, useEffect as G, useRef as H, useMemo as ie } from "react";
4
- import { Spin as Re, Row as ze, Col as W, Card as M, Statistic as j, Space as x, Tag as I, Button as w, Alert as X, Table as re, Badge as we, Popconfirm as K, message as v, Select as Se, Drawer as $e, Tabs as Ne, Form as L, Modal as Ee, Input as te, InputNumber as ne } from "antd";
5
- import { DashboardOutlined as D, ClusterOutlined as B, CloudServerOutlined as P, ContainerOutlined as Ce, ReloadOutlined as le, LockOutlined as Le, UnlockOutlined as Ge, PlayCircleOutlined as qe, PauseCircleOutlined as Be, ClearOutlined as xe, SendOutlined as Ie, EyeOutlined as De, DeleteOutlined as Oe, PlusOutlined as Fe, EditOutlined as He, DownOutlined as Me, RightOutlined as Ue, BranchesOutlined as de, RocketOutlined as Ke, AlertOutlined as We, FileTextOutlined as ae, DatabaseOutlined as V, CloudOutlined as je, DeploymentUnitOutlined as pe, UnorderedListOutlined as J, HistoryOutlined as Ve, ExperimentOutlined as Je, SettingOutlined as me, KeyOutlined as Z, AppstoreOutlined as se, SafetyCertificateOutlined as Ze, TeamOutlined as Qe, ProfileOutlined as ue, ApiOutlined as he, HddOutlined as ce, ApartmentOutlined as ye, InboxOutlined as ge, NodeIndexOutlined as Ye, TableOutlined as be, SearchOutlined as ke, ConsoleSqlOutlined as Xe, BookOutlined as Q, FundOutlined as et, CloudUploadOutlined as tt, TagsOutlined as nt, CodeOutlined as at } from "@ant-design/icons";
6
- import { ConfigApp as st } from "@yuku123/z-config-component";
7
- import { MistApp as ct } from "@yuku123/z-mist-component";
8
- import { MetaApp as ot } from "@yuku123/z-meta-component";
9
- import { MsgApp as rt } from "@yuku123/z-msg-component";
10
- import { RpcApp as lt } from "@yuku123/z-rpc-component";
11
- import { VectorApp as it } from "@yuku123/z-vector-component";
12
- import { GraphApp as dt } from "@yuku123/z-graph-component";
13
- import { GwApp as pt } from "@yuku123/z-gw-component";
14
- import { CacheApp as mt } from "@yuku123/z-cache-component";
15
- import { MqApp as ut } from "@yuku123/z-mq-component";
16
- import { OssApp as ht } from "@yuku123/z-oss-component";
17
- import { ZkbApp as yt } from "@yuku123/z-kb-component";
18
- import { ScriptProductizationPage as U } from "@yuku123/z-agent-component";
19
- const gt = "_shell_19t4h_6", bt = "_sidebar_19t4h_14", kt = "_menuList_19t4h_36", ft = "_menuGroup_19t4h_42", vt = "_menuGroupHeader_19t4h_46", wt = "_menuGroupIcon_19t4h_64", St = "_menuGroupLabel_19t4h_69", Ct = "_menuGroupArrow_19t4h_73", xt = "_menuSubList_19t4h_79", It = "_menuSubItem_19t4h_85", Ot = "_menuSubItemActive_19t4h_102", _t = "_menuSubItemIcon_19t4h_109", At = "_menuSubItemLabel_19t4h_114", Pt = "_menuSubItemWrap_19t4h_118", Tt = "_main_19t4h_122", Rt = "_empty_19t4h_129", zt = "_emptyIcon_19t4h_139", $t = "_emptyText_19t4h_144", f = {
20
- shell: gt,
21
- sidebar: bt,
22
- menuList: kt,
23
- menuGroup: ft,
24
- menuGroupHeader: vt,
25
- menuGroupIcon: wt,
26
- menuGroupLabel: St,
27
- menuGroupArrow: Ct,
28
- menuSubList: xt,
29
- menuSubItem: It,
30
- menuSubItemActive: Ot,
31
- menuSubItemIcon: _t,
2
+ import { useNavigate as Ae, useLocation as Te, Navigate as S } from "react-router-dom";
3
+ import { useState as p, useEffect as G, useRef as F, useMemo as le } from "react";
4
+ import { Spin as Re, Row as Ne, Col as W, Card as M, Statistic as j, Space as x, Tag as I, Button as w, Alert as X, Table as $e, Badge as ve, Popconfirm as U, message as v, Select as we, Drawer as ze, Tabs as Ee, Form as L, Modal as Le, Input as te, InputNumber as ne } from "antd";
5
+ import { DashboardOutlined as q, ClusterOutlined as H, CloudServerOutlined as A, ContainerOutlined as Se, ReloadOutlined as re, LockOutlined as Ge, UnlockOutlined as De, PlayCircleOutlined as He, PauseCircleOutlined as qe, ClearOutlined as Ce, SendOutlined as xe, EyeOutlined as Be, DeleteOutlined as Ie, PlusOutlined as Fe, EditOutlined as Me, DownOutlined as Ke, RightOutlined as Ue, BranchesOutlined as ie, RocketOutlined as We, AlertOutlined as je, FileTextOutlined as ae, DatabaseOutlined as V, CloudOutlined as Ve, DeploymentUnitOutlined as de, UnorderedListOutlined as J, HistoryOutlined as Je, ExperimentOutlined as Ze, SettingOutlined as pe, KeyOutlined as Z, AppstoreOutlined as se, SafetyCertificateOutlined as Qe, TeamOutlined as Ye, ProfileOutlined as me, ApiOutlined as ue, HddOutlined as ce, ApartmentOutlined as he, InboxOutlined as ye, NodeIndexOutlined as Xe, TableOutlined as ge, SearchOutlined as be, ConsoleSqlOutlined as et, BookOutlined as Q, FundOutlined as tt, CloudUploadOutlined as nt, TagsOutlined as at, CodeOutlined as st } from "@ant-design/icons";
6
+ import { ConfigApp as ct } from "@yuku123/z-config-component";
7
+ import { MistApp as ot } from "@yuku123/z-mist-component";
8
+ import { MetaApp as rt } from "@yuku123/z-meta-component";
9
+ import { MsgApp as lt } from "@yuku123/z-msg-component";
10
+ import { RpcApp as it } from "@yuku123/z-rpc-component";
11
+ import { VectorApp as dt } from "@yuku123/z-vector-component";
12
+ import { GraphApp as pt } from "@yuku123/z-graph-component";
13
+ import { GwApp as mt } from "@yuku123/z-gw-component";
14
+ import { CacheApp as ut } from "@yuku123/z-cache-component";
15
+ import { MqApp as ht } from "@yuku123/z-mq-component";
16
+ import { OssApp as yt } from "@yuku123/z-oss-component";
17
+ import { ZkbApp as gt } from "@yuku123/z-kb-component";
18
+ import { ScriptProductizationPage as K } from "@yuku123/z-agent-component";
19
+ import { ListTable as Oe } from "@yuku123/z-frontend-common/ui";
20
+ const bt = "_shell_19t4h_6", kt = "_sidebar_19t4h_14", ft = "_menuList_19t4h_36", vt = "_menuGroup_19t4h_42", wt = "_menuGroupHeader_19t4h_46", St = "_menuGroupIcon_19t4h_64", Ct = "_menuGroupLabel_19t4h_69", xt = "_menuGroupArrow_19t4h_73", It = "_menuSubList_19t4h_79", Ot = "_menuSubItem_19t4h_85", _t = "_menuSubItemActive_19t4h_102", Pt = "_menuSubItemIcon_19t4h_109", At = "_menuSubItemLabel_19t4h_114", Tt = "_menuSubItemWrap_19t4h_118", Rt = "_main_19t4h_122", Nt = "_empty_19t4h_129", $t = "_emptyIcon_19t4h_139", zt = "_emptyText_19t4h_144", f = {
21
+ shell: bt,
22
+ sidebar: kt,
23
+ menuList: ft,
24
+ menuGroup: vt,
25
+ menuGroupHeader: wt,
26
+ menuGroupIcon: St,
27
+ menuGroupLabel: Ct,
28
+ menuGroupArrow: xt,
29
+ menuSubList: It,
30
+ menuSubItem: Ot,
31
+ menuSubItemActive: _t,
32
+ menuSubItemIcon: Pt,
32
33
  menuSubItemLabel: At,
33
- menuSubItemWrap: Pt,
34
- main: Tt,
35
- empty: Rt,
36
- emptyIcon: zt,
37
- emptyText: $t
38
- }, Nt = "/z-team/ops/k8s";
34
+ menuSubItemWrap: Tt,
35
+ main: Rt,
36
+ empty: Nt,
37
+ emptyIcon: $t,
38
+ emptyText: zt
39
+ }, Et = "/z-team/ops/k8s";
39
40
  async function _e(t, c) {
40
- const i = `${Nt}${t}`, d = await fetch(i, {
41
+ const i = `${Et}${t}`, d = await fetch(i, {
41
42
  headers: { "Content-Type": "application/json" },
42
43
  ...c
43
44
  }), m = d.headers && d.headers.get("content-type") || "";
@@ -48,43 +49,43 @@ async function _e(t, c) {
48
49
  throw new Error(`后端 ${i} 返回 success=false:${u.message || "(无 message)"}`);
49
50
  return u;
50
51
  }
51
- async function N(t, c) {
52
+ async function z(t, c) {
52
53
  return _e(t, c);
53
54
  }
54
- async function Et() {
55
- return N("/cluster/info");
56
- }
57
55
  async function Lt() {
58
- return N("/nodes");
56
+ return z("/cluster/info");
57
+ }
58
+ async function Gt() {
59
+ return z("/nodes");
59
60
  }
60
- async function Gt(t) {
61
- return N("/nodes/cordon", {
61
+ async function Dt(t) {
62
+ return z("/nodes/cordon", {
62
63
  method: "POST",
63
64
  body: JSON.stringify({ name: t })
64
65
  });
65
66
  }
66
- async function qt(t) {
67
- return N("/nodes/uncordon", {
67
+ async function Ht(t) {
68
+ return z("/nodes/uncordon", {
68
69
  method: "POST",
69
70
  body: JSON.stringify({ name: t })
70
71
  });
71
72
  }
72
- async function Bt(t = "*") {
73
- return N(`/workloads/pods?namespace=${t}`);
73
+ async function qt(t = "*") {
74
+ return z(`/workloads/pods?namespace=${t}`);
74
75
  }
75
- async function Dt(t, c, i = 200) {
76
- return N(`/workloads/pods/${t}/${c}/logs?tailLines=${i}`);
76
+ async function Bt(t, c, i = 200) {
77
+ return z(`/workloads/pods/${t}/${c}/logs?tailLines=${i}`);
77
78
  }
78
79
  async function Ft(t, c) {
79
- return N(`/workloads/pods/${t}/${c}/restart`, { method: "POST" });
80
+ return z(`/workloads/pods/${t}/${c}/restart`, { method: "POST" });
80
81
  }
81
- async function Ht(t, c) {
82
- return N(`/workloads/pods/${t}/${c}`, { method: "DELETE" });
82
+ async function Mt(t, c) {
83
+ return z(`/workloads/pods/${t}/${c}`, { method: "DELETE" });
83
84
  }
84
- async function Mt() {
85
- return N("/namespaces");
85
+ async function Kt() {
86
+ return z("/namespaces");
86
87
  }
87
- const fe = () => {
88
+ const ke = () => {
88
89
  var u, y;
89
90
  const [t, c] = p(null), [i, d] = p(!0);
90
91
  G(() => {
@@ -94,7 +95,7 @@ const fe = () => {
94
95
  }, []);
95
96
  const m = async () => {
96
97
  try {
97
- const h = await Et();
98
+ const h = await Lt();
98
99
  h.success && c(h.data);
99
100
  } catch (h) {
100
101
  console.error("Failed to load cluster info", h);
@@ -104,16 +105,16 @@ const fe = () => {
104
105
  };
105
106
  return i ? /* @__PURE__ */ e(Re, { size: "large" }) : /* @__PURE__ */ s("div", { style: { padding: 16 }, children: [
106
107
  /* @__PURE__ */ s("h2", { style: { marginBottom: 24 }, children: [
107
- /* @__PURE__ */ e(D, {}),
108
+ /* @__PURE__ */ e(q, {}),
108
109
  " 运维总览"
109
110
  ] }),
110
- /* @__PURE__ */ s(ze, { gutter: [16, 16], children: [
111
+ /* @__PURE__ */ s(Ne, { gutter: [16, 16], children: [
111
112
  /* @__PURE__ */ e(W, { xs: 24, sm: 12, lg: 6, children: /* @__PURE__ */ s(M, { children: [
112
113
  /* @__PURE__ */ e(
113
114
  j,
114
115
  {
115
116
  title: /* @__PURE__ */ s(x, { children: [
116
- /* @__PURE__ */ e(B, {}),
117
+ /* @__PURE__ */ e(H, {}),
117
118
  " K8s 节点"
118
119
  ] }),
119
120
  value: (t == null ? void 0 : t.readyNodes) ?? 0,
@@ -130,7 +131,7 @@ const fe = () => {
130
131
  j,
131
132
  {
132
133
  title: /* @__PURE__ */ s(x, { children: [
133
- /* @__PURE__ */ e(P, {}),
134
+ /* @__PURE__ */ e(A, {}),
134
135
  " CPU"
135
136
  ] }),
136
137
  value: ((u = t == null ? void 0 : t.usedCpu) == null ? void 0 : u.toFixed(1)) ?? "0",
@@ -152,7 +153,7 @@ const fe = () => {
152
153
  j,
153
154
  {
154
155
  title: /* @__PURE__ */ s(x, { children: [
155
- /* @__PURE__ */ e(D, {}),
156
+ /* @__PURE__ */ e(q, {}),
156
157
  " 内存"
157
158
  ] }),
158
159
  value: ((y = t == null ? void 0 : t.usedMemory) == null ? void 0 : y.toFixed(1)) ?? "0",
@@ -174,7 +175,7 @@ const fe = () => {
174
175
  j,
175
176
  {
176
177
  title: /* @__PURE__ */ s(x, { children: [
177
- /* @__PURE__ */ e(Ce, {}),
178
+ /* @__PURE__ */ e(Se, {}),
178
179
  " Pods"
179
180
  ] }),
180
181
  value: (t == null ? void 0 : t.runningPods) ?? 0,
@@ -231,7 +232,7 @@ const fe = () => {
231
232
  const y = async () => {
232
233
  d(!0), u("");
233
234
  try {
234
- const a = await Lt();
235
+ const a = await Gt();
235
236
  c(Array.isArray(a.data) ? a.data : []);
236
237
  } catch (a) {
237
238
  c([]), u(String((a == null ? void 0 : a.message) || a));
@@ -240,19 +241,19 @@ const fe = () => {
240
241
  }
241
242
  }, h = async (a) => {
242
243
  try {
243
- await Gt(a), v.success(`${a} 已封锁(停止调度)`), y();
244
+ await Dt(a), v.success(`${a} 已封锁(停止调度)`), y();
244
245
  } catch {
245
246
  v.error("封锁失败");
246
247
  }
247
248
  }, C = async (a) => {
248
249
  try {
249
- await qt(a), v.success(`${a} 已解封`), y();
250
+ await Ht(a), v.success(`${a} 已解封`), y();
250
251
  } catch {
251
252
  v.error("解封失败");
252
253
  }
253
254
  };
254
255
  return /* @__PURE__ */ s("div", { children: [
255
- /* @__PURE__ */ e(x, { style: { marginBottom: 16 }, children: /* @__PURE__ */ e(w, { icon: /* @__PURE__ */ e(le, {}), onClick: y, loading: i, children: "刷新" }) }),
256
+ /* @__PURE__ */ e(x, { style: { marginBottom: 16 }, children: /* @__PURE__ */ e(w, { icon: /* @__PURE__ */ e(re, {}), onClick: y, loading: i, children: "刷新" }) }),
256
257
  m && /* @__PURE__ */ e(
257
258
  X,
258
259
  {
@@ -264,7 +265,7 @@ const fe = () => {
264
265
  }
265
266
  ),
266
267
  /* @__PURE__ */ e(
267
- re,
268
+ $e,
268
269
  {
269
270
  columns: [
270
271
  {
@@ -283,7 +284,7 @@ const fe = () => {
283
284
  title: "状态",
284
285
  dataIndex: "status",
285
286
  key: "status",
286
- render: (a) => /* @__PURE__ */ e(we, { status: a === "Ready" ? "success" : "error", text: a })
287
+ render: (a) => /* @__PURE__ */ e(ve, { status: a === "Ready" ? "success" : "error", text: a })
287
288
  },
288
289
  {
289
290
  title: "角色",
@@ -335,8 +336,8 @@ const fe = () => {
335
336
  key: "action",
336
337
  width: 150,
337
338
  render: (a, o) => /* @__PURE__ */ s(x, { children: [
338
- /* @__PURE__ */ e(K, { title: `封锁 ${o.name}?`, onConfirm: () => h(o.name), children: /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(Le, {}), children: "Cordon" }) }),
339
- /* @__PURE__ */ e(K, { title: `解封 ${o.name}?`, onConfirm: () => C(o.name), children: /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(Ge, {}), children: "Uncordon" }) })
339
+ /* @__PURE__ */ e(U, { title: `封锁 ${o.name}?`, onConfirm: () => h(o.name), children: /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(Ge, {}), children: "Cordon" }) }),
340
+ /* @__PURE__ */ e(U, { title: `解封 ${o.name}?`, onConfirm: () => C(o.name), children: /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(De, {}), children: "Uncordon" }) })
340
341
  ] })
341
342
  }
342
343
  ],
@@ -349,12 +350,12 @@ const fe = () => {
349
350
  }
350
351
  )
351
352
  ] });
352
- }, Kt = ({
353
+ }, Wt = ({
353
354
  namespace: t,
354
355
  podName: c,
355
356
  tailLines: i = 200
356
357
  }) => {
357
- const [d, m] = p([]), [u, y] = p(!1), [h, C] = p(!1), k = H(null), a = H(null), o = H(!1);
358
+ const [d, m] = p([]), [u, y] = p(!1), [h, C] = p(!1), k = F(null), a = F(null), o = F(!1);
358
359
  G(() => (r(), () => {
359
360
  var g;
360
361
  (g = k.current) == null || g.close();
@@ -363,14 +364,14 @@ const fe = () => {
363
364
  h || (g = a.current) == null || g.scrollIntoView({ behavior: "smooth" });
364
365
  }, [d, h]);
365
366
  const r = () => {
366
- const g = window.location.protocol === "https:" ? "wss:" : "ws:", n = window.location.host, b = `${g}//${n}/z-team/ops/k8s/ws/logs?namespace=${t}&name=${c}&tailLines=${i}`, A = new WebSocket(b);
367
- k.current = A, A.onopen = () => {
367
+ const g = window.location.protocol === "https:" ? "wss:" : "ws:", n = window.location.host, b = `${g}//${n}/z-team/ops/k8s/ws/logs?namespace=${t}&name=${c}&tailLines=${i}`, P = new WebSocket(b);
368
+ k.current = P, P.onopen = () => {
368
369
  y(!0), v.success("日志流已连接");
369
- }, A.onmessage = (T) => {
370
+ }, P.onmessage = (T) => {
370
371
  o.current || m(($) => [...$.slice(-1e3), T.data]);
371
- }, A.onclose = () => {
372
+ }, P.onclose = () => {
372
373
  y(!1);
373
- }, A.onerror = () => {
374
+ }, P.onerror = () => {
374
375
  y(!1), v.error("WebSocket 连接错误");
375
376
  };
376
377
  };
@@ -381,14 +382,14 @@ const fe = () => {
381
382
  w,
382
383
  {
383
384
  size: "small",
384
- icon: h ? /* @__PURE__ */ e(qe, {}) : /* @__PURE__ */ e(Be, {}),
385
+ icon: h ? /* @__PURE__ */ e(He, {}) : /* @__PURE__ */ e(qe, {}),
385
386
  onClick: () => {
386
387
  o.current = !o.current, C(o.current);
387
388
  },
388
389
  children: h ? "继续" : "暂停"
389
390
  }
390
391
  ),
391
- /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(xe, {}), onClick: () => {
392
+ /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(Ce, {}), onClick: () => {
392
393
  m([]);
393
394
  }, children: "清空" }),
394
395
  /* @__PURE__ */ e(w, { size: "small", onClick: () => {
@@ -415,17 +416,17 @@ const fe = () => {
415
416
  /* @__PURE__ */ e("div", { ref: a })
416
417
  ] })
417
418
  ] });
418
- }, Wt = ({
419
+ }, jt = ({
419
420
  namespace: t,
420
421
  podName: c
421
422
  }) => {
422
- const [i, d] = p(!1), [m, u] = p(""), [y, h] = p("sh"), [C, k] = p([]), a = H(null), o = H(null), r = H(null);
423
+ const [i, d] = p(!1), [m, u] = p(""), [y, h] = p("sh"), [C, k] = p([]), a = F(null), o = F(null), r = F(null);
423
424
  G(() => (t && c && O(), () => {
424
425
  var n;
425
426
  return (n = a.current) == null ? void 0 : n.close();
426
427
  }), [t, c]);
427
428
  const O = () => {
428
- const n = window.location.protocol === "https:" ? "wss:" : "ws:", b = window.location.host, A = `${n}//${b}/z-team/ops/k8s/ws/exec?namespace=${t}&name=${c}&command=${y}`, T = new WebSocket(A);
429
+ const n = window.location.protocol === "https:" ? "wss:" : "ws:", b = window.location.host, P = `${n}//${b}/z-team/ops/k8s/ws/exec?namespace=${t}&name=${c}&command=${y}`, T = new WebSocket(P);
429
430
  a.current = T, T.onopen = () => {
430
431
  d(!0), k(($) => [...$, `Connected to ${t}/${c} (${y})`]), v.success("终端已连接");
431
432
  }, T.onmessage = ($) => {
@@ -440,7 +441,7 @@ const fe = () => {
440
441
  };
441
442
  }, _ = () => {
442
443
  !m.trim() || !a.current || (a.current.readyState === WebSocket.OPEN ? (a.current.send(m), k((n) => [...n, `$ ${m}`]), u("")) : v.warning("WebSocket 未连接"));
443
- }, q = (n) => {
444
+ }, D = (n) => {
444
445
  var b;
445
446
  n.key === "Enter" && _(), n.key === "Tab" && (n.preventDefault(), ((b = a.current) == null ? void 0 : b.readyState) === WebSocket.OPEN && a.current.send(" "));
446
447
  }, g = () => k([]);
@@ -448,7 +449,7 @@ const fe = () => {
448
449
  /* @__PURE__ */ s(x, { style: { marginBottom: 8 }, children: [
449
450
  /* @__PURE__ */ e(I, { color: i ? "success" : "error", children: i ? "● 已连接" : "● 已断开" }),
450
451
  /* @__PURE__ */ e(
451
- Se,
452
+ we,
452
453
  {
453
454
  value: y,
454
455
  onChange: h,
@@ -457,7 +458,7 @@ const fe = () => {
457
458
  options: ["sh", "bash", "/bin/sh", "/bin/bash"].map((n) => ({ label: n, value: n }))
458
459
  }
459
460
  ),
460
- /* @__PURE__ */ e(w, { size: "small", onClick: g, icon: /* @__PURE__ */ e(xe, {}), children: "清空" }),
461
+ /* @__PURE__ */ e(w, { size: "small", onClick: g, icon: /* @__PURE__ */ e(Ce, {}), children: "清空" }),
461
462
  /* @__PURE__ */ e(w, { size: "small", onClick: () => {
462
463
  var n;
463
464
  (n = a.current) == null || n.close(), setTimeout(O, 200);
@@ -519,7 +520,7 @@ const fe = () => {
519
520
  {
520
521
  value: m,
521
522
  onChange: (n) => u(n.target.value),
522
- onKeyDown: q,
523
+ onKeyDown: D,
523
524
  placeholder: "输入命令后按 Enter...",
524
525
  disabled: !i,
525
526
  style: {
@@ -540,7 +541,7 @@ const fe = () => {
540
541
  w,
541
542
  {
542
543
  type: "primary",
543
- icon: /* @__PURE__ */ e(Ie, {}),
544
+ icon: /* @__PURE__ */ e(xe, {}),
544
545
  onClick: _,
545
546
  disabled: !i,
546
547
  children: "发送"
@@ -548,7 +549,7 @@ const fe = () => {
548
549
  )
549
550
  ] })
550
551
  ] });
551
- }, jt = (t) => {
552
+ }, Vt = (t) => {
552
553
  switch (t) {
553
554
  case "Running":
554
555
  return "success";
@@ -561,24 +562,24 @@ const fe = () => {
561
562
  default:
562
563
  return "default";
563
564
  }
564
- }, Vt = () => {
565
- const [t, c] = p([]), [i, d] = p(!1), [m, u] = p(""), [y, h] = p("*"), [C, k] = p([]), [a, o] = p(!1), [r, O] = p(null), [_, q] = p("logs"), [g, n] = p("");
565
+ }, Jt = () => {
566
+ const [t, c] = p([]), [i, d] = p(!1), [m, u] = p(""), [y, h] = p("*"), [C, k] = p([]), [a, o] = p(!1), [r, O] = p(null), [_, D] = p("logs"), [g, n] = p("");
566
567
  G(() => {
567
568
  b();
568
569
  }, []), G(() => {
569
- A();
570
+ P();
570
571
  }, [y]);
571
572
  const b = async () => {
572
573
  try {
573
- const l = await Mt();
574
+ const l = await Kt();
574
575
  k(Array.isArray(l.data) ? ["*", ...l.data] : ["*"]);
575
576
  } catch {
576
577
  k(["*"]);
577
578
  }
578
- }, A = async () => {
579
+ }, P = async () => {
579
580
  d(!0), u("");
580
581
  try {
581
- const l = await Bt(y);
582
+ const l = await qt(y);
582
583
  c(Array.isArray(l.data) ? l.data : []);
583
584
  } catch (l) {
584
585
  c([]), u(String((l == null ? void 0 : l.message) || l));
@@ -587,26 +588,26 @@ const fe = () => {
587
588
  }
588
589
  }, T = async (l) => {
589
590
  var R;
590
- O(l), q("logs"), o(!0);
591
+ O(l), D("logs"), o(!0);
591
592
  try {
592
- const E = await Dt(l.namespace, l.name, 200);
593
+ const E = await Bt(l.namespace, l.name, 200);
593
594
  n(((R = E == null ? void 0 : E.data) == null ? void 0 : R.logs) ?? "");
594
595
  } catch (E) {
595
596
  n(`加载日志失败:${String((E == null ? void 0 : E.message) || E)}`);
596
597
  }
597
598
  }, $ = async (l) => {
598
599
  try {
599
- await Ft(l.namespace, l.name), v.success(`${l.name} 已重启`), A();
600
+ await Ft(l.namespace, l.name), v.success(`${l.name} 已重启`), P();
600
601
  } catch {
601
602
  v.error("重启失败");
602
603
  }
603
604
  }, ee = async (l) => {
604
605
  try {
605
- await Ht(l.namespace, l.name), v.success(`${l.name} 已删除`), A();
606
+ await Mt(l.namespace, l.name), v.success(`${l.name} 已删除`), P();
606
607
  } catch {
607
608
  v.error("删除失败");
608
609
  }
609
- }, Ae = [
610
+ }, Pe = [
610
611
  {
611
612
  title: "名称",
612
613
  dataIndex: "name",
@@ -621,7 +622,7 @@ const fe = () => {
621
622
  dataIndex: "status",
622
623
  key: "status",
623
624
  width: 100,
624
- render: (l) => /* @__PURE__ */ e(we, { status: jt(l), text: l })
625
+ render: (l) => /* @__PURE__ */ e(ve, { status: Vt(l), text: l })
625
626
  },
626
627
  {
627
628
  title: "就绪",
@@ -637,9 +638,9 @@ const fe = () => {
637
638
  key: "action",
638
639
  width: 200,
639
640
  render: (l, R) => /* @__PURE__ */ s(x, { children: [
640
- /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(De, {}), onClick: () => T(R), children: "日志" }),
641
- /* @__PURE__ */ e(K, { title: "确认重启此 Pod?", onConfirm: () => $(R), children: /* @__PURE__ */ e(w, { size: "small", type: "primary", ghost: !0, children: "重启" }) }),
642
- /* @__PURE__ */ e(K, { title: "确认删除此 Pod?", onConfirm: () => ee(R), children: /* @__PURE__ */ e(w, { size: "small", danger: !0, icon: /* @__PURE__ */ e(Oe, {}), children: "删除" }) })
641
+ /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(Be, {}), onClick: () => T(R), children: "日志" }),
642
+ /* @__PURE__ */ e(U, { title: "确认重启此 Pod?", onConfirm: () => $(R), children: /* @__PURE__ */ e(w, { size: "small", type: "primary", ghost: !0, children: "重启" }) }),
643
+ /* @__PURE__ */ e(U, { title: "确认删除此 Pod?", onConfirm: () => ee(R), children: /* @__PURE__ */ e(w, { size: "small", danger: !0, icon: /* @__PURE__ */ e(Ie, {}), children: "删除" }) })
643
644
  ] })
644
645
  }
645
646
  ];
@@ -647,7 +648,7 @@ const fe = () => {
647
648
  /* @__PURE__ */ s(x, { style: { marginBottom: 16 }, children: [
648
649
  /* @__PURE__ */ e("span", { children: "命名空间:" }),
649
650
  /* @__PURE__ */ e(
650
- Se,
651
+ we,
651
652
  {
652
653
  value: y,
653
654
  onChange: h,
@@ -655,7 +656,7 @@ const fe = () => {
655
656
  options: C.map((l) => ({ label: l, value: l }))
656
657
  }
657
658
  ),
658
- /* @__PURE__ */ e(w, { icon: /* @__PURE__ */ e(le, {}), onClick: A, loading: i, children: "刷新" })
659
+ /* @__PURE__ */ e(w, { icon: /* @__PURE__ */ e(re, {}), onClick: P, loading: i, children: "刷新" })
659
660
  ] }),
660
661
  m && /* @__PURE__ */ e(
661
662
  X,
@@ -668,19 +669,22 @@ const fe = () => {
668
669
  }
669
670
  ),
670
671
  /* @__PURE__ */ e(
671
- re,
672
+ Oe,
672
673
  {
673
- columns: Ae,
674
- dataSource: t,
674
+ rows: t,
675
+ columns: Pe,
675
676
  rowKey: "name",
676
677
  loading: i,
677
- pagination: { pageSize: 20, showSizeChanger: !0, showTotal: (l) => `共 ${l} 个 Pod` },
678
678
  scroll: { x: 1e3 },
679
- size: "middle"
679
+ searchKeys: ["name", "namespace", "nodeName"],
680
+ searchPlaceholder: "按 Pod 名 / 命名空间 / 节点过滤",
681
+ emptyTitle: "暂无 Pod",
682
+ emptyDescription: "该命名空间下还没有 Pod。",
683
+ tableProps: { size: "middle" }
680
684
  }
681
685
  ),
682
686
  /* @__PURE__ */ e(
683
- $e,
687
+ ze,
684
688
  {
685
689
  title: r ? `${r.name} (${r.namespace})` : "",
686
690
  placement: "right",
@@ -688,16 +692,16 @@ const fe = () => {
688
692
  open: a,
689
693
  onClose: () => o(!1),
690
694
  children: /* @__PURE__ */ e(
691
- Ne,
695
+ Ee,
692
696
  {
693
697
  activeKey: _,
694
- onChange: q,
698
+ onChange: D,
695
699
  items: [
696
700
  {
697
701
  key: "logs",
698
702
  label: "实时日志",
699
703
  children: r ? /* @__PURE__ */ e(
700
- Kt,
704
+ Wt,
701
705
  {
702
706
  namespace: r.namespace,
703
707
  podName: r.name
@@ -708,7 +712,7 @@ const fe = () => {
708
712
  key: "exec",
709
713
  label: "终端",
710
714
  children: /* @__PURE__ */ e("div", { style: { padding: 20 }, children: /* @__PURE__ */ e(
711
- Wt,
715
+ jt,
712
716
  {
713
717
  namespace: (r == null ? void 0 : r.namespace) ?? "",
714
718
  podName: (r == null ? void 0 : r.name) ?? ""
@@ -725,7 +729,7 @@ const fe = () => {
725
729
  async function Y(t, c) {
726
730
  return _e(`/hpa${t}`, c);
727
731
  }
728
- const Jt = () => {
732
+ const Zt = () => {
729
733
  const [t, c] = p([]), [i, d] = p(!1), [m, u] = p(""), [y, h] = p(!1), [C, k] = p(!1), [a] = L.useForm();
730
734
  G(() => {
731
735
  o();
@@ -769,7 +773,7 @@ const Jt = () => {
769
773
  } catch {
770
774
  v.error("操作失败");
771
775
  }
772
- }, q = async (n) => {
776
+ }, D = async (n) => {
773
777
  try {
774
778
  await Y(`/delete/${n.namespace}/${n.name}`, { method: "DELETE" }), v.success("HPA 已删除"), o();
775
779
  } catch {
@@ -779,7 +783,7 @@ const Jt = () => {
779
783
  return /* @__PURE__ */ s("div", { children: [
780
784
  /* @__PURE__ */ s(x, { style: { marginBottom: 16 }, children: [
781
785
  /* @__PURE__ */ e(w, { type: "primary", icon: /* @__PURE__ */ e(Fe, {}), onClick: r, children: "新建 HPA" }),
782
- /* @__PURE__ */ e(w, { icon: /* @__PURE__ */ e(le, {}), onClick: o, loading: i, children: "刷新" })
786
+ /* @__PURE__ */ e(w, { icon: /* @__PURE__ */ e(re, {}), onClick: o, loading: i, children: "刷新" })
783
787
  ] }),
784
788
  m && /* @__PURE__ */ e(
785
789
  X,
@@ -792,8 +796,9 @@ const Jt = () => {
792
796
  }
793
797
  ),
794
798
  /* @__PURE__ */ e(
795
- re,
799
+ Oe,
796
800
  {
801
+ rows: t,
797
802
  columns: [
798
803
  { title: "名称", dataIndex: "name", key: "name", render: (n) => /* @__PURE__ */ e("strong", { children: n }) },
799
804
  { title: "命名空间", dataIndex: "namespace", key: "namespace" },
@@ -831,20 +836,22 @@ const Jt = () => {
831
836
  key: "action",
832
837
  width: 150,
833
838
  render: (n, b) => /* @__PURE__ */ s(x, { children: [
834
- /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(He, {}), onClick: () => O(b), children: "编辑" }),
835
- /* @__PURE__ */ e(K, { title: `删除 HPA ${b.name}?`, onConfirm: () => q(b), children: /* @__PURE__ */ e(w, { size: "small", danger: !0, icon: /* @__PURE__ */ e(Oe, {}), children: "删除" }) })
839
+ /* @__PURE__ */ e(w, { size: "small", icon: /* @__PURE__ */ e(Me, {}), onClick: () => O(b), children: "编辑" }),
840
+ /* @__PURE__ */ e(U, { title: `删除 HPA ${b.name}?`, onConfirm: () => D(b), children: /* @__PURE__ */ e(w, { size: "small", danger: !0, icon: /* @__PURE__ */ e(Ie, {}), children: "删除" }) })
836
841
  ] })
837
842
  }
838
843
  ],
839
- dataSource: t,
840
844
  rowKey: "name",
841
845
  loading: i,
842
- pagination: { pageSize: 20 },
843
- size: "middle"
846
+ searchKeys: ["name", "namespace", "scaleTargetRef"],
847
+ searchPlaceholder: "按 HPA 名 / 命名空间 / 目标 Deployment 过滤",
848
+ emptyTitle: "暂无 HPA",
849
+ emptyDescription: "该集群还没有配置水平弹性伸缩,HPA 会自动扩缩容目标 Deployment。",
850
+ tableProps: { size: "middle" }
844
851
  }
845
852
  ),
846
853
  /* @__PURE__ */ e(
847
- Ee,
854
+ Le,
848
855
  {
849
856
  title: C ? "编辑 HPA" : "新建 HPA",
850
857
  open: y,
@@ -866,61 +873,61 @@ const Jt = () => {
866
873
  }, oe = [
867
874
  {
868
875
  title: "DevOps 运维",
869
- icon: /* @__PURE__ */ e(B, {}),
876
+ icon: /* @__PURE__ */ e(H, {}),
870
877
  items: [
871
878
  {
872
879
  key: "devops-dashboard",
873
880
  label: "运维总览",
874
- icon: /* @__PURE__ */ e(D, {}),
881
+ icon: /* @__PURE__ */ e(q, {}),
875
882
  path: "/ops/devops/dashboard",
876
883
  desc: "集群概览与资源统计"
877
884
  },
878
885
  {
879
886
  key: "devops-nodes",
880
887
  label: "节点管理",
881
- icon: /* @__PURE__ */ e(B, {}),
888
+ icon: /* @__PURE__ */ e(H, {}),
882
889
  path: "/ops/devops/nodes",
883
890
  desc: "K8s 节点列表与状态"
884
891
  },
885
892
  {
886
893
  key: "devops-pods",
887
894
  label: "Pod 管理",
888
- icon: /* @__PURE__ */ e(Ce, {}),
895
+ icon: /* @__PURE__ */ e(Se, {}),
889
896
  path: "/ops/devops/pods",
890
897
  desc: "Pod 列表、日志、终端"
891
898
  },
892
899
  {
893
900
  key: "devops-hpa",
894
901
  label: "弹性伸缩",
895
- icon: /* @__PURE__ */ e(P, {}),
902
+ icon: /* @__PURE__ */ e(A, {}),
896
903
  path: "/ops/devops/hpa",
897
904
  desc: "HPA 自动扩缩容策略"
898
905
  },
899
906
  {
900
907
  key: "devops-registry",
901
908
  label: "镜像仓库",
902
- icon: /* @__PURE__ */ e(P, {}),
909
+ icon: /* @__PURE__ */ e(A, {}),
903
910
  path: "/ops/devops/registry",
904
911
  desc: "容器镜像统一管理"
905
912
  },
906
913
  {
907
914
  key: "devops-pipeline",
908
915
  label: "流水线",
909
- icon: /* @__PURE__ */ e(de, {}),
916
+ icon: /* @__PURE__ */ e(ie, {}),
910
917
  path: "/ops/devops/pipeline",
911
918
  desc: "CI/CD 流水线编排"
912
919
  },
913
920
  {
914
921
  key: "devops-release",
915
922
  label: "发布管理",
916
- icon: /* @__PURE__ */ e(Ke, {}),
923
+ icon: /* @__PURE__ */ e(We, {}),
917
924
  path: "/ops/devops/release",
918
925
  desc: "应用发布与回滚"
919
926
  },
920
927
  {
921
928
  key: "devops-monitor",
922
929
  label: "监控告警",
923
- icon: /* @__PURE__ */ e(We, {}),
930
+ icon: /* @__PURE__ */ e(je, {}),
924
931
  path: "/ops/devops/monitor",
925
932
  desc: "Prometheus/Grafana 监控"
926
933
  },
@@ -942,26 +949,26 @@ const Jt = () => {
942
949
  },
943
950
  {
944
951
  title: "基础设施",
945
- icon: /* @__PURE__ */ e(B, {}),
952
+ icon: /* @__PURE__ */ e(H, {}),
946
953
  items: [
947
954
  {
948
955
  key: "ops-channel",
949
956
  label: "渠道管理",
950
- icon: /* @__PURE__ */ e(je, {}),
957
+ icon: /* @__PURE__ */ e(Ve, {}),
951
958
  path: "/ops/channel",
952
959
  desc: "部署渠道配置与管理"
953
960
  },
954
961
  {
955
962
  key: "ops-env",
956
963
  label: "环境管理",
957
- icon: /* @__PURE__ */ e(P, {}),
964
+ icon: /* @__PURE__ */ e(A, {}),
958
965
  path: "/ops/delivery",
959
966
  desc: "运行环境配置与管理"
960
967
  },
961
968
  {
962
969
  key: "ops-deploy",
963
970
  label: "部署管理",
964
- icon: /* @__PURE__ */ e(pe, {}),
971
+ icon: /* @__PURE__ */ e(de, {}),
965
972
  path: "/ops/deployment",
966
973
  desc: "应用部署与发布管理"
967
974
  },
@@ -976,7 +983,7 @@ const Jt = () => {
976
983
  },
977
984
  {
978
985
  title: "配置中心",
979
- icon: /* @__PURE__ */ e(me, {}),
986
+ icon: /* @__PURE__ */ e(pe, {}),
980
987
  items: [
981
988
  {
982
989
  key: "config-list",
@@ -988,28 +995,28 @@ const Jt = () => {
988
995
  {
989
996
  key: "config-history",
990
997
  label: "变更历史",
991
- icon: /* @__PURE__ */ e(Ve, {}),
998
+ icon: /* @__PURE__ */ e(Je, {}),
992
999
  path: "/config/history",
993
1000
  desc: "配置变更记录与版本回溯"
994
1001
  },
995
1002
  {
996
1003
  key: "config-service",
997
1004
  label: "服务列表",
998
- icon: /* @__PURE__ */ e(B, {}),
1005
+ icon: /* @__PURE__ */ e(H, {}),
999
1006
  path: "/config/service",
1000
1007
  desc: "接入配置的客户端服务管理"
1001
1008
  },
1002
1009
  {
1003
1010
  key: "config-cluster",
1004
1011
  label: "集群概览",
1005
- icon: /* @__PURE__ */ e(D, {}),
1012
+ icon: /* @__PURE__ */ e(q, {}),
1006
1013
  path: "/config/cluster",
1007
1014
  desc: "配置中心集群节点与状态总览"
1008
1015
  },
1009
1016
  {
1010
1017
  key: "config-namespace",
1011
1018
  label: "命名空间 / 灰度",
1012
- icon: /* @__PURE__ */ e(Je, {}),
1019
+ icon: /* @__PURE__ */ e(Ze, {}),
1013
1020
  path: "/config/namespace",
1014
1021
  desc: "命名空间与灰度发布(孵化中)"
1015
1022
  }
@@ -1036,7 +1043,7 @@ const Jt = () => {
1036
1043
  {
1037
1044
  key: "mist-acl",
1038
1045
  label: "密钥授权",
1039
- icon: /* @__PURE__ */ e(Ze, {}),
1046
+ icon: /* @__PURE__ */ e(Qe, {}),
1040
1047
  path: "/mist/acl",
1041
1048
  desc: "哪个应用能读哪个密钥 + 在线校验"
1042
1049
  }
@@ -1044,7 +1051,7 @@ const Jt = () => {
1044
1051
  },
1045
1052
  {
1046
1053
  title: "元数据中心",
1047
- icon: /* @__PURE__ */ e(ye, {}),
1054
+ icon: /* @__PURE__ */ e(he, {}),
1048
1055
  items: [
1049
1056
  {
1050
1057
  key: "meta-app",
@@ -1056,28 +1063,28 @@ const Jt = () => {
1056
1063
  {
1057
1064
  key: "meta-tenant",
1058
1065
  label: "租户管理",
1059
- icon: /* @__PURE__ */ e(Qe, {}),
1066
+ icon: /* @__PURE__ */ e(Ye, {}),
1060
1067
  path: "/meta/tenant",
1061
1068
  desc: "z-meta 租户台账"
1062
1069
  },
1063
1070
  {
1064
1071
  key: "meta-dict",
1065
1072
  label: "数据字典",
1066
- icon: /* @__PURE__ */ e(ue, {}),
1073
+ icon: /* @__PURE__ */ e(me, {}),
1067
1074
  path: "/meta/dict",
1068
1075
  desc: "字典类型与字典项"
1069
1076
  },
1070
1077
  {
1071
1078
  key: "meta-interface",
1072
1079
  label: "接口台账",
1073
- icon: /* @__PURE__ */ e(he, {}),
1080
+ icon: /* @__PURE__ */ e(ue, {}),
1074
1081
  path: "/meta/interface",
1075
1082
  desc: "登记在册的业务接口"
1076
1083
  },
1077
1084
  {
1078
1085
  key: "meta-private-config",
1079
1086
  label: "私有配置",
1080
- icon: /* @__PURE__ */ e(me, {}),
1087
+ icon: /* @__PURE__ */ e(pe, {}),
1081
1088
  path: "/meta/private-config",
1082
1089
  desc: "应用私有键值配置"
1083
1090
  },
@@ -1092,19 +1099,19 @@ const Jt = () => {
1092
1099
  },
1093
1100
  {
1094
1101
  title: "消息中心",
1095
- icon: /* @__PURE__ */ e(Ie, {}),
1102
+ icon: /* @__PURE__ */ e(xe, {}),
1096
1103
  items: [
1097
1104
  {
1098
1105
  key: "msg-inbox",
1099
1106
  label: "站内信",
1100
- icon: /* @__PURE__ */ e(ge, {}),
1107
+ icon: /* @__PURE__ */ e(ye, {}),
1101
1108
  path: "/msg/inbox",
1102
1109
  desc: "当前用户的收件箱"
1103
1110
  },
1104
1111
  {
1105
1112
  key: "msg-template",
1106
1113
  label: "消息模板",
1107
- icon: /* @__PURE__ */ e(ue, {}),
1114
+ icon: /* @__PURE__ */ e(me, {}),
1108
1115
  path: "/msg/template",
1109
1116
  desc: "按渠道/业务类型维护模板"
1110
1117
  },
@@ -1126,19 +1133,19 @@ const Jt = () => {
1126
1133
  },
1127
1134
  {
1128
1135
  title: "服务注册",
1129
- icon: /* @__PURE__ */ e(Ye, {}),
1136
+ icon: /* @__PURE__ */ e(Xe, {}),
1130
1137
  items: [
1131
1138
  {
1132
1139
  key: "rpc-service",
1133
1140
  label: "服务列表",
1134
- icon: /* @__PURE__ */ e(B, {}),
1141
+ icon: /* @__PURE__ */ e(H, {}),
1135
1142
  path: "/rpc/service",
1136
1143
  desc: "RPC 注册表(z-rpc 视角 / z-config naming 数据源)"
1137
1144
  },
1138
1145
  {
1139
1146
  key: "rpc-instance",
1140
1147
  label: "服务实例",
1141
- icon: /* @__PURE__ */ e(P, {}),
1148
+ icon: /* @__PURE__ */ e(A, {}),
1142
1149
  path: "/rpc/instance",
1143
1150
  desc: "按服务名展开实例与健康状态"
1144
1151
  }
@@ -1151,21 +1158,21 @@ const Jt = () => {
1151
1158
  {
1152
1159
  key: "vector-collection",
1153
1160
  label: "向量集合",
1154
- icon: /* @__PURE__ */ e(be, {}),
1161
+ icon: /* @__PURE__ */ e(ge, {}),
1155
1162
  path: "/vector/collections",
1156
1163
  desc: "z-vector 集合台账:维度 / 度量 / 索引 / 向量数"
1157
1164
  },
1158
1165
  {
1159
1166
  key: "vector-search",
1160
1167
  label: "向量检索",
1161
- icon: /* @__PURE__ */ e(ke, {}),
1168
+ icon: /* @__PURE__ */ e(be, {}),
1162
1169
  path: "/vector/search",
1163
1170
  desc: "top-k ANN 查询,渲染后端给的命中距离"
1164
1171
  },
1165
1172
  {
1166
1173
  key: "vector-instance",
1167
1174
  label: "实例与端口",
1168
- icon: /* @__PURE__ */ e(P, {}),
1175
+ icon: /* @__PURE__ */ e(A, {}),
1169
1176
  path: "/vector/instance",
1170
1177
  desc: "内嵌 Qdrant REST 服务的 bind 状态(区分「没起」和「没数据」)"
1171
1178
  }
@@ -1173,33 +1180,33 @@ const Jt = () => {
1173
1180
  },
1174
1181
  {
1175
1182
  title: "图数据库",
1176
- icon: /* @__PURE__ */ e(ye, {}),
1183
+ icon: /* @__PURE__ */ e(he, {}),
1177
1184
  items: [
1178
1185
  {
1179
1186
  key: "graph-schema",
1180
1187
  label: "图 Schema",
1181
- icon: /* @__PURE__ */ e(be, {}),
1188
+ icon: /* @__PURE__ */ e(ge, {}),
1182
1189
  path: "/graph/schema",
1183
1190
  desc: "z-graph 点类型 / 边类型 / 属性索引(/api/graph/meta/schema)"
1184
1191
  },
1185
1192
  {
1186
1193
  key: "graph-query",
1187
1194
  label: "图查询",
1188
- icon: /* @__PURE__ */ e(Xe, {}),
1195
+ icon: /* @__PURE__ */ e(et, {}),
1189
1196
  path: "/graph/query",
1190
1197
  desc: "Cypher 执行 + 执行计划,写语句二次确认(/api/graph/query)"
1191
1198
  },
1192
1199
  {
1193
1200
  key: "graph-branches",
1194
1201
  label: "分支与提交",
1195
- icon: /* @__PURE__ */ e(de, {}),
1202
+ icon: /* @__PURE__ */ e(ie, {}),
1196
1203
  path: "/graph/branches",
1197
1204
  desc: "Git 式版本面:分支 head 与全量 commit 图(/api/graph/meta/{branches,commits})"
1198
1205
  },
1199
1206
  {
1200
1207
  key: "graph-instance",
1201
1208
  label: "实例与端口",
1202
- icon: /* @__PURE__ */ e(P, {}),
1209
+ icon: /* @__PURE__ */ e(A, {}),
1203
1210
  path: "/graph/instance",
1204
1211
  desc: "内嵌 GraphControlServer 的 bind 状态 + 外来监听者判定(区分「没起」和「没数据」)"
1205
1212
  }
@@ -1207,7 +1214,7 @@ const Jt = () => {
1207
1214
  },
1208
1215
  {
1209
1216
  title: "网关",
1210
- icon: /* @__PURE__ */ e(he, {}),
1217
+ icon: /* @__PURE__ */ e(ue, {}),
1211
1218
  items: [
1212
1219
  {
1213
1220
  key: "gw-routes",
@@ -1219,14 +1226,14 @@ const Jt = () => {
1219
1226
  {
1220
1227
  key: "gw-metrics",
1221
1228
  label: "网关指标",
1222
- icon: /* @__PURE__ */ e(D, {}),
1229
+ icon: /* @__PURE__ */ e(q, {}),
1223
1230
  path: "/gw/metrics",
1224
1231
  desc: "zgw.* 请求计数与平均 RT(附 micrometer 桥自证)"
1225
1232
  },
1226
1233
  {
1227
1234
  key: "gw-instance",
1228
1235
  label: "实例与面",
1229
- icon: /* @__PURE__ */ e(P, {}),
1236
+ icon: /* @__PURE__ */ e(A, {}),
1230
1237
  path: "/gw/instance",
1231
1238
  desc: "admin 面接没接通 / Netty 9090 通不通 / 指标桥看不看得见"
1232
1239
  }
@@ -1246,21 +1253,21 @@ const Jt = () => {
1246
1253
  {
1247
1254
  key: "cache-keys",
1248
1255
  label: "键浏览",
1249
- icon: /* @__PURE__ */ e(ke, {}),
1256
+ icon: /* @__PURE__ */ e(be, {}),
1250
1257
  path: "/cache/keys",
1251
1258
  desc: "只读 SCAN/KEYS + TTL;命令名不接受外部输入(无 FLUSHALL 类按钮)"
1252
1259
  },
1253
1260
  {
1254
1261
  key: "cache-stats",
1255
1262
  label: "命中率与热键",
1256
- icon: /* @__PURE__ */ e(D, {}),
1263
+ icon: /* @__PURE__ */ e(q, {}),
1257
1264
  path: "/cache/stats",
1258
1265
  desc: "hits/misses/evictions + accessCount/lfuCounter 热键视图"
1259
1266
  },
1260
1267
  {
1261
1268
  key: "cache-instance",
1262
1269
  label: "实例与端口",
1263
- icon: /* @__PURE__ */ e(P, {}),
1270
+ icon: /* @__PURE__ */ e(A, {}),
1264
1271
  path: "/cache/instance",
1265
1272
  desc: "内嵌 RedisServer bind 上了没 / 6379 上应答的是谁"
1266
1273
  }
@@ -1268,19 +1275,19 @@ const Jt = () => {
1268
1275
  },
1269
1276
  {
1270
1277
  title: "消息队列",
1271
- icon: /* @__PURE__ */ e(ge, {}),
1278
+ icon: /* @__PURE__ */ e(ye, {}),
1272
1279
  items: [
1273
1280
  {
1274
1281
  key: "mq-instance",
1275
1282
  label: "实例与端口",
1276
- icon: /* @__PURE__ */ e(P, {}),
1283
+ icon: /* @__PURE__ */ e(A, {}),
1277
1284
  path: "/mq/instance",
1278
1285
  desc: "子进程活着 ≠ 端口归它:z-mq 内嵌是 spawn,归属按子进程 PID 判"
1279
1286
  },
1280
1287
  {
1281
1288
  key: "mq-cluster",
1282
1289
  label: "集群与 Broker",
1283
- icon: /* @__PURE__ */ e(B, {}),
1290
+ icon: /* @__PURE__ */ e(H, {}),
1284
1291
  path: "/mq/cluster",
1285
1292
  desc: "NameServer 码 4 brokerAddrTable(记的是「谁发过心跳」,不是「谁在跑」)"
1286
1293
  },
@@ -1294,7 +1301,7 @@ const Jt = () => {
1294
1301
  {
1295
1302
  key: "mq-broker",
1296
1303
  label: "Broker 元数据",
1297
- icon: /* @__PURE__ */ e(pe, {}),
1304
+ icon: /* @__PURE__ */ e(de, {}),
1298
1305
  path: "/mq/broker",
1299
1306
  desc: "码 320/321/322/323/324;上游 MVP 恒空的那几格挂原文不挂假表"
1300
1307
  }
@@ -1356,7 +1363,7 @@ const Jt = () => {
1356
1363
  },
1357
1364
  {
1358
1365
  title: "脚本中心",
1359
- icon: /* @__PURE__ */ e(at, {}),
1366
+ icon: /* @__PURE__ */ e(st, {}),
1360
1367
  items: [
1361
1368
  {
1362
1369
  key: "script-keys",
@@ -1368,28 +1375,28 @@ const Jt = () => {
1368
1375
  {
1369
1376
  key: "script-monitor",
1370
1377
  label: "调用监控",
1371
- icon: /* @__PURE__ */ e(D, {}),
1378
+ icon: /* @__PURE__ */ e(q, {}),
1372
1379
  path: "/script/monitor",
1373
1380
  desc: "GET /api/script/invoke-log/page + /stats/trend · 实测 124 行日志 / 7 天趋势"
1374
1381
  },
1375
1382
  {
1376
1383
  key: "script-quota",
1377
1384
  label: "配额与用量",
1378
- icon: /* @__PURE__ */ e(et, {}),
1385
+ icon: /* @__PURE__ */ e(tt, {}),
1379
1386
  path: "/script/quota",
1380
1387
  desc: "GET /api/script/quota/by-api-key/{id} · 日用量进度条(配额值是字符串,已 Number())"
1381
1388
  },
1382
1389
  {
1383
1390
  key: "script-version",
1384
1391
  label: "脚本版本",
1385
- icon: /* @__PURE__ */ e(tt, {}),
1392
+ icon: /* @__PURE__ */ e(nt, {}),
1386
1393
  path: "/script/version",
1387
1394
  desc: "GET /api/script/version/list/{scriptId} · 按脚本主表 ID 查,状态是字符串枚举"
1388
1395
  },
1389
1396
  {
1390
1397
  key: "script-tag",
1391
1398
  label: "标签治理",
1392
- icon: /* @__PURE__ */ e(nt, {}),
1399
+ icon: /* @__PURE__ */ e(at, {}),
1393
1400
  path: "/script/tag",
1394
1401
  desc: "GET /api/script/tag/list · 3 条标签,颜色取 tag_color(回退 color)"
1395
1402
  }
@@ -1397,25 +1404,25 @@ const Jt = () => {
1397
1404
  },
1398
1405
  {
1399
1406
  title: "资源管理",
1400
- icon: /* @__PURE__ */ e(P, {}),
1407
+ icon: /* @__PURE__ */ e(A, {}),
1401
1408
  items: [
1402
1409
  {
1403
1410
  key: "resource",
1404
1411
  label: "资源管理",
1405
- icon: /* @__PURE__ */ e(P, {}),
1412
+ icon: /* @__PURE__ */ e(A, {}),
1406
1413
  path: "/resource/domain",
1407
1414
  desc: "域名、ECS、RDS、OSS 管理"
1408
1415
  }
1409
1416
  ]
1410
1417
  }
1411
1418
  ];
1412
- function Zt() {
1419
+ function Qt() {
1413
1420
  return /* @__PURE__ */ s("div", { className: f.empty, children: [
1414
1421
  /* @__PURE__ */ e("div", { className: f.emptyIcon, children: "⚙️" }),
1415
1422
  /* @__PURE__ */ e("div", { className: f.emptyText, children: "请从左侧菜单选择运维模块" })
1416
1423
  ] });
1417
1424
  }
1418
- function F({ label: t }) {
1425
+ function B({ label: t }) {
1419
1426
  return /* @__PURE__ */ s("div", { style: { padding: 40, textAlign: "center", color: "#999" }, children: [
1420
1427
  /* @__PURE__ */ s("h2", { children: [
1421
1428
  "🚧 ",
@@ -1424,7 +1431,7 @@ function F({ label: t }) {
1424
1431
  /* @__PURE__ */ e("p", { children: "功能开发中..." })
1425
1432
  ] });
1426
1433
  }
1427
- function Qt({ label: t, reason: c }) {
1434
+ function Yt({ label: t, reason: c }) {
1428
1435
  return /* @__PURE__ */ s("div", { style: { padding: 40, textAlign: "center", color: "#999" }, children: [
1429
1436
  /* @__PURE__ */ s("h2", { children: [
1430
1437
  "🧪 ",
@@ -1433,7 +1440,7 @@ function Qt({ label: t, reason: c }) {
1433
1440
  /* @__PURE__ */ e("p", { style: { maxWidth: 760, margin: "0 auto", textAlign: "left", lineHeight: 1.7 }, children: c || "功能孵化中..." })
1434
1441
  ] });
1435
1442
  }
1436
- function Yt({ label: t, reason: c, message: i = "该页面未孵化,因为后端接口尚不可用" }) {
1443
+ function Xt({ label: t, reason: c, message: i = "该页面未孵化,因为后端接口尚不可用" }) {
1437
1444
  return /* @__PURE__ */ s("div", { style: { padding: 40, maxWidth: 720, margin: "0 auto" }, children: [
1438
1445
  /* @__PURE__ */ s("h2", { style: { textAlign: "center" }, children: [
1439
1446
  "🧪 ",
@@ -1450,9 +1457,9 @@ function Yt({ label: t, reason: c, message: i = "该页面未孵化,因为后
1450
1457
  )
1451
1458
  ] });
1452
1459
  }
1453
- function z({ label: t }) {
1460
+ function N({ label: t }) {
1454
1461
  return /* @__PURE__ */ e(
1455
- Yt,
1462
+ Xt,
1456
1463
  {
1457
1464
  label: t,
1458
1465
  message: "该页面未孵化,因为组件从来不在本仓",
@@ -1460,29 +1467,29 @@ function z({ label: t }) {
1460
1467
  }
1461
1468
  );
1462
1469
  }
1463
- const ve = [
1470
+ const fe = [
1464
1471
  // ─── 运维中心 ───
1465
1472
  // ⚠ 这一族路由的组件从来没有从 z-ops 迁进来(见 UnmigratedPage 注释)。原先直接写
1466
1473
  // <ChannelPage/> 之类会在**模块求值期**抛 ReferenceError 并白屏整个前端,不是只坏这一页。
1467
1474
  { path: "/ops", element: /* @__PURE__ */ e(S, { to: "/ops/devops", replace: !0 }) },
1468
- { path: "/ops/channel", element: /* @__PURE__ */ e(z, { label: "渠道管理" }) },
1469
- { path: "/ops/delivery", element: /* @__PURE__ */ e(z, { label: "环境管理" }) },
1470
- { path: "/ops/deployment", element: /* @__PURE__ */ e(z, { label: "部署管理" }) },
1471
- { path: "/ops/deployment/:id", element: /* @__PURE__ */ e(z, { label: "部署管理" }) },
1472
- { path: "/ops/repo-mgmt", element: /* @__PURE__ */ e(z, { label: "仓库管理" }) },
1473
- { path: "/ops/git-platform", element: /* @__PURE__ */ e(z, { label: "仓库管理" }) },
1475
+ { path: "/ops/channel", element: /* @__PURE__ */ e(N, { label: "渠道管理" }) },
1476
+ { path: "/ops/delivery", element: /* @__PURE__ */ e(N, { label: "环境管理" }) },
1477
+ { path: "/ops/deployment", element: /* @__PURE__ */ e(N, { label: "部署管理" }) },
1478
+ { path: "/ops/deployment/:id", element: /* @__PURE__ */ e(N, { label: "部署管理" }) },
1479
+ { path: "/ops/repo-mgmt", element: /* @__PURE__ */ e(N, { label: "仓库管理" }) },
1480
+ { path: "/ops/git-platform", element: /* @__PURE__ */ e(N, { label: "仓库管理" }) },
1474
1481
  // ─── DevOps 子路由 (从 OpsK8s 直接渲染) ───
1475
- { path: "/ops/devops", element: /* @__PURE__ */ e(fe, {}) },
1476
- { path: "/ops/devops/dashboard", element: /* @__PURE__ */ e(fe, {}) },
1482
+ { path: "/ops/devops", element: /* @__PURE__ */ e(ke, {}) },
1483
+ { path: "/ops/devops/dashboard", element: /* @__PURE__ */ e(ke, {}) },
1477
1484
  { path: "/ops/devops/nodes", element: /* @__PURE__ */ e(Ut, {}) },
1478
- { path: "/ops/devops/pods", element: /* @__PURE__ */ e(Vt, {}) },
1479
- { path: "/ops/devops/hpa", element: /* @__PURE__ */ e(Jt, {}) },
1480
- { path: "/ops/devops/registry", element: /* @__PURE__ */ e(F, { label: "镜像仓库" }) },
1481
- { path: "/ops/devops/pipeline", element: /* @__PURE__ */ e(F, { label: "流水线" }) },
1482
- { path: "/ops/devops/release", element: /* @__PURE__ */ e(F, { label: "发布管理" }) },
1483
- { path: "/ops/devops/monitor", element: /* @__PURE__ */ e(F, { label: "监控告警" }) },
1484
- { path: "/ops/devops/logs", element: /* @__PURE__ */ e(F, { label: "日志管理" }) },
1485
- { path: "/ops/devops/dba", element: /* @__PURE__ */ e(F, { label: "DBA 工单" }) },
1485
+ { path: "/ops/devops/pods", element: /* @__PURE__ */ e(Jt, {}) },
1486
+ { path: "/ops/devops/hpa", element: /* @__PURE__ */ e(Zt, {}) },
1487
+ { path: "/ops/devops/registry", element: /* @__PURE__ */ e(B, { label: "镜像仓库" }) },
1488
+ { path: "/ops/devops/pipeline", element: /* @__PURE__ */ e(B, { label: "流水线" }) },
1489
+ { path: "/ops/devops/release", element: /* @__PURE__ */ e(B, { label: "发布管理" }) },
1490
+ { path: "/ops/devops/monitor", element: /* @__PURE__ */ e(B, { label: "监控告警" }) },
1491
+ { path: "/ops/devops/logs", element: /* @__PURE__ */ e(B, { label: "日志管理" }) },
1492
+ { path: "/ops/devops/dba", element: /* @__PURE__ */ e(B, { label: "DBA 工单" }) },
1486
1493
  // ─── 配置中心 ───
1487
1494
  // 精确条目在前 (菜单点击的精确 path, 优先命中以避免被通配覆盖)
1488
1495
  { path: "/config", element: /* @__PURE__ */ e(S, { to: "/config/list", replace: !0 }) },
@@ -1504,7 +1511,7 @@ const ve = [
1504
1511
  {
1505
1512
  path: "/config/namespace",
1506
1513
  element: /* @__PURE__ */ e(
1507
- Qt,
1514
+ Yt,
1508
1515
  {
1509
1516
  label: "命名空间 / 灰度",
1510
1517
  reason: "缺的不是数据,是路由:命名空间的数据源已经有了 —— GET /api/namespace/list 实测 200 且有 1 行(共享 oc 库的 z_namespace 等 8 张表与 z_config_info.encrypted_data_key 列都在,z_namespace 的information_schema create_time = 2026-10-03 23:02:14;2026-10-22 又把升级脚本的种子行补齐,见 TASK-20260925-036)。真正的命名空间页在 component 的 /z-config/namespace,而 /config/* 走 ConfigApp(z-config-component/src/pages/ConfigApp.jsx),它的路由表里没有 namespace 这一条 ⇒ 这里只能占位;接真页面 = 给 ConfigApp 加一条 namespace 路由,详见 TASK-20260925-036。灰度发布这一半仍无落点:L3 里灰度是 ZConfigTagRelation 那一族,它就在「从未进制品」的那 9 个 controller 里。"
@@ -1512,44 +1519,44 @@ const ve = [
1512
1519
  )
1513
1520
  },
1514
1521
  // 通配兜底: 其余 /config/* (list / history / service / cluster / edit / dashboard 等) 全部交给 ConfigApp 内部路由
1515
- { path: "/config/*", element: /* @__PURE__ */ e(st, {}) },
1522
+ { path: "/config/*", element: /* @__PURE__ */ e(ct, {}) },
1516
1523
  // ─── 密钥中心 ───
1517
1524
  { path: "/mist", element: /* @__PURE__ */ e(S, { to: "/mist/secret", replace: !0 }) },
1518
- { path: "/mist/*", element: /* @__PURE__ */ e(ct, {}) },
1525
+ { path: "/mist/*", element: /* @__PURE__ */ e(ot, {}) },
1519
1526
  // ─── 元数据中心 (z-meta) ───
1520
1527
  // 子模块自带相对路由 <Routes>, 由 /meta/* 通配把剩余路径交给它
1521
1528
  { path: "/meta", element: /* @__PURE__ */ e(S, { to: "/meta/app", replace: !0 }) },
1522
- { path: "/meta/*", element: /* @__PURE__ */ e(ot, {}) },
1529
+ { path: "/meta/*", element: /* @__PURE__ */ e(rt, {}) },
1523
1530
  // ─── 消息中心 (z-msg) ───
1524
1531
  { path: "/msg", element: /* @__PURE__ */ e(S, { to: "/msg/inbox", replace: !0 }) },
1525
- { path: "/msg/*", element: /* @__PURE__ */ e(rt, {}) },
1532
+ { path: "/msg/*", element: /* @__PURE__ */ e(lt, {}) },
1526
1533
  // ─── 服务注册 (z-rpc, 数据源是 z-config 的 naming) ───
1527
1534
  { path: "/rpc", element: /* @__PURE__ */ e(S, { to: "/rpc/service", replace: !0 }) },
1528
- { path: "/rpc/*", element: /* @__PURE__ */ e(lt, {}) },
1535
+ { path: "/rpc/*", element: /* @__PURE__ */ e(it, {}) },
1529
1536
  // ─── 向量检索 (z-vector) ───
1530
1537
  // REST 面是内嵌 QdrantRestServer(非 Spring MVC),经 z-opc 的 /api/vector/** 代理出去
1531
1538
  { path: "/vector", element: /* @__PURE__ */ e(S, { to: "/vector/collections", replace: !0 }) },
1532
- { path: "/vector/*", element: /* @__PURE__ */ e(it, {}) },
1539
+ { path: "/vector/*", element: /* @__PURE__ */ e(dt, {}) },
1533
1540
  // ─── 图数据库 (z-graph) ───
1534
1541
  // REST 面是内嵌 GraphControlServer(JDK HttpServer,非 Spring MVC),经 z-opc 的 /api/graph/** 代理出去
1535
1542
  // ⚠ 内嵌端口是 8091 不是 8090:8090 归一个外部进程,且被 BizKnowledgeGraphService 当业务依赖在用
1536
1543
  { path: "/graph", element: /* @__PURE__ */ e(S, { to: "/graph/schema", replace: !0 }) },
1537
- { path: "/graph/*", element: /* @__PURE__ */ e(dt, {}) },
1544
+ { path: "/graph/*", element: /* @__PURE__ */ e(pt, {}) },
1538
1545
  // ─── 网关 (z-gw) ───
1539
1546
  // admin 面是 z-gw-admin 的原生 Spring MVC(pom 加 io.github.yuku123:z-gw-admin 后挂 /gw/admin/**,12 条 handler);
1540
1547
  // 页面不直连裸 /gw/admin(不在 sso.intercept-paths 内),一律走 z-opc 自己的环回代理 GET /api/gw/**
1541
1548
  { path: "/gw", element: /* @__PURE__ */ e(S, { to: "/gw/routes", replace: !0 }) },
1542
- { path: "/gw/*", element: /* @__PURE__ */ e(pt, {}) },
1549
+ { path: "/gw/*", element: /* @__PURE__ */ e(mt, {}) },
1543
1550
  // ─── 缓存 (z-cache) ───
1544
1551
  // z-cache 只有 RESP over TCP(:6379),没有 HTTP 管理面 ⇒ /api/cache/** 不是转发器,
1545
1552
  // 是 CacheProxyController 在 JVM 内读 MemoryStore + 用现成 zCacheClient 发只读命令拼出来的结构化 JSON。
1546
1553
  { path: "/cache", element: /* @__PURE__ */ e(S, { to: "/cache/overview", replace: !0 }) },
1547
- { path: "/cache/*", element: /* @__PURE__ */ e(mt, {}) },
1554
+ { path: "/cache/*", element: /* @__PURE__ */ e(ut, {}) },
1548
1555
  // ─── 消息队列 (z-mq) ───
1549
1556
  // :9877/:10912 是 z-mq-remoting 的 Netty 私有二进制协议(端口从 9876/10911 挪开,那两个被旧世代孤儿 JVM 占着)
1550
1557
  // ⇒ /api/mq/** 是「固定只读请求码 → JSON」的协议适配器,端点穷举,未列出的子路径一律 404 并回显可用清单
1551
1558
  { path: "/mq", element: /* @__PURE__ */ e(S, { to: "/mq/instance", replace: !0 }) },
1552
- { path: "/mq/*", element: /* @__PURE__ */ e(ut, {}) },
1559
+ { path: "/mq/*", element: /* @__PURE__ */ e(ht, {}) },
1553
1560
  // ─── 知识库 (z-kb) — 主机侧确定性装配,接口真通(2026-09-25 实测) ───
1554
1561
  // 09-25 早先"页面在、/api/kb/** 全 404"的判断已被推翻:404 的根因是 z-kb 的自动装配清单错位
1555
1562
  // (4 条 .imports 路径不存在 + 2 份无 key 的 spring.factories + z-kb-web 压根没有登记),
@@ -1560,14 +1567,14 @@ const ve = [
1560
1567
  // 实测:/kb/workspaces 1 行(314 篇/8746 实体/60479 关系)、/kb/documents 服务端分页 20 条 × 16 页、
1561
1568
  // /kb/search FUSION 10 命中 + GRAPH 4 命中;向量召回恒 0 是 L3 读写两侧集合名不一致(见 SearchPage 的告警条)。
1562
1569
  { path: "/kb", element: /* @__PURE__ */ e(S, { to: "/kb/workspaces", replace: !0 }) },
1563
- { path: "/kb/*", element: /* @__PURE__ */ e(yt, {}) },
1570
+ { path: "/kb/*", element: /* @__PURE__ */ e(gt, {}) },
1564
1571
  // ─── 对象存储 (z-oss) — TASK-003: 走 z-opc 侧 /api/oss-admin/**,不再需要 AK/SK 下发 ───
1565
1572
  // z-oss 原生 /api/v1/** 的 AuthenticationInterceptor 要 X-Zoss-Access-Key/Secret-Key(实测带平台会话仍 401),
1566
1573
  // 浏览器侧没有凭证下发通道;OssAdminController 改为在同一 JVM 内直接调 IOssBucketService/IOssObjectService,
1567
1574
  // 鉴权用平台 SSO + username→z_oss_user 映射,且只有 @GetMapping(无写入口)。
1568
1575
  // 刻意不接 E2EAliasController 的 /api/oss/list(异常吞成空列表)与 /api/oss/{bucket}(硬编码 stub 零值)。
1569
1576
  { path: "/oss", element: /* @__PURE__ */ e(S, { to: "/oss/buckets", replace: !0 }) },
1570
- { path: "/oss/*", element: /* @__PURE__ */ e(ht, {}) },
1577
+ { path: "/oss/*", element: /* @__PURE__ */ e(yt, {}) },
1571
1578
  // ─── 脚本中心 (z-script) ───
1572
1579
  // 组件自带 5 个 Tab,这里按"一个能力一条菜单"把 Tab 键透传成 initialTab,
1573
1580
  // 而不是给每个 Tab 复刻一份页面组件。
@@ -1576,36 +1583,36 @@ const ve = [
1576
1583
  // 带平台会话也是 401,而共用 axios 拦截器把任何 401 当会话过期 ⇒ 一点进来就被踢到 /login。
1577
1584
  // 在那条链修好之前(TASK-20260925-032),把它放进菜单等于在运维面埋一个登出陷阱。
1578
1585
  { path: "/script", element: /* @__PURE__ */ e(S, { to: "/script/monitor", replace: !0 }) },
1579
- { path: "/script/keys", element: /* @__PURE__ */ e(U, { initialTab: "apikey" }) },
1580
- { path: "/script/monitor", element: /* @__PURE__ */ e(U, { initialTab: "monitor" }) },
1581
- { path: "/script/quota", element: /* @__PURE__ */ e(U, { initialTab: "quota" }) },
1582
- { path: "/script/version", element: /* @__PURE__ */ e(U, { initialTab: "version" }) },
1583
- { path: "/script/tag", element: /* @__PURE__ */ e(U, { initialTab: "tag" }) },
1586
+ { path: "/script/keys", element: /* @__PURE__ */ e(K, { initialTab: "apikey" }) },
1587
+ { path: "/script/monitor", element: /* @__PURE__ */ e(K, { initialTab: "monitor" }) },
1588
+ { path: "/script/quota", element: /* @__PURE__ */ e(K, { initialTab: "quota" }) },
1589
+ { path: "/script/version", element: /* @__PURE__ */ e(K, { initialTab: "version" }) },
1590
+ { path: "/script/tag", element: /* @__PURE__ */ e(K, { initialTab: "tag" }) },
1584
1591
  { path: "/script/*", element: /* @__PURE__ */ e(S, { to: "/script/monitor", replace: !0 }) },
1585
1592
  // ─── 资源管理 ───
1586
1593
  { path: "/resource", element: /* @__PURE__ */ e(S, { to: "/resource/domain", replace: !0 }) },
1587
- { path: "/resource/domain", element: /* @__PURE__ */ e(z, { label: "域名管理" }) },
1588
- { path: "/resource/ecs", element: /* @__PURE__ */ e(z, { label: "ECS 管理" }) },
1589
- { path: "/resource/rds", element: /* @__PURE__ */ e(z, { label: "RDS 管理" }) },
1590
- { path: "/resource/oss", element: /* @__PURE__ */ e(z, { label: "OSS 管理" }) }
1594
+ { path: "/resource/domain", element: /* @__PURE__ */ e(N, { label: "域名管理" }) },
1595
+ { path: "/resource/ecs", element: /* @__PURE__ */ e(N, { label: "ECS 管理" }) },
1596
+ { path: "/resource/rds", element: /* @__PURE__ */ e(N, { label: "RDS 管理" }) },
1597
+ { path: "/resource/oss", element: /* @__PURE__ */ e(N, { label: "OSS 管理" }) }
1591
1598
  ];
1592
- function Xt(t) {
1593
- for (const c of ve)
1599
+ function en(t) {
1600
+ for (const c of fe)
1594
1601
  if (c.path === t) return c.element;
1595
- for (const c of ve)
1602
+ for (const c of fe)
1596
1603
  if (c.path.includes("*") || c.path.includes(":")) {
1597
1604
  const i = "^" + c.path.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, "[^/]+") + "$";
1598
1605
  if (new RegExp(i).test(t)) return c.element;
1599
1606
  }
1600
- return /* @__PURE__ */ e(Zt, {});
1607
+ return /* @__PURE__ */ e(Qt, {});
1601
1608
  }
1602
- function fn({
1609
+ function wn({
1603
1610
  activePathOverride: t,
1604
1611
  menuOnly: c = !1
1605
1612
  } = {}) {
1606
- const i = Pe(), { pathname: d } = Te(), [m, u] = p(
1613
+ const i = Ae(), { pathname: d } = Te(), [m, u] = p(
1607
1614
  new Set(oe.map((a) => a.title))
1608
- ), y = ie(() => {
1615
+ ), y = le(() => {
1609
1616
  const a = t ?? d;
1610
1617
  for (const o of oe)
1611
1618
  for (const r of o.items)
@@ -1618,7 +1625,7 @@ function fn({
1618
1625
  });
1619
1626
  }, C = (a) => {
1620
1627
  i(`${a.path}?mode=ops`);
1621
- }, k = ie(() => Xt(d), [d]);
1628
+ }, k = le(() => en(d), [d]);
1622
1629
  return /* @__PURE__ */ s("div", { className: f.shell, children: [
1623
1630
  /* @__PURE__ */ e("aside", { className: f.sidebar, children: /* @__PURE__ */ e("nav", { className: f.menuList, children: oe.map((a) => {
1624
1631
  const o = m.has(a.title);
@@ -1631,7 +1638,7 @@ function fn({
1631
1638
  children: [
1632
1639
  /* @__PURE__ */ e("span", { className: f.menuGroupIcon, children: a.icon }),
1633
1640
  /* @__PURE__ */ e("span", { className: f.menuGroupLabel, children: a.title }),
1634
- /* @__PURE__ */ e("span", { className: f.menuGroupArrow, children: o ? /* @__PURE__ */ e(Me, {}) : /* @__PURE__ */ e(Ue, {}) })
1641
+ /* @__PURE__ */ e("span", { className: f.menuGroupArrow, children: o ? /* @__PURE__ */ e(Ke, {}) : /* @__PURE__ */ e(Ue, {}) })
1635
1642
  ]
1636
1643
  }
1637
1644
  ),
@@ -1653,5 +1660,5 @@ function fn({
1653
1660
  ] });
1654
1661
  }
1655
1662
  export {
1656
- fn as default
1663
+ wn as default
1657
1664
  };