@yuku123/z-team-component 0.2.28 → 0.2.30
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.
- package/dist/{ChangeLogView-CG-o5YP1.js → ChangeLogView-FLd1wS8H.js} +1 -1
- package/dist/{InvitationManagementPage-DpA3Xlq1.js → InvitationManagementPage-CttWZdu8.js} +87 -82
- package/dist/{OnboardingPage-DFRAwruv.js → OnboardingPage-CAI-P20Q.js} +2 -2
- package/dist/ProjectApp-ZR_QUlPs.js +3839 -0
- package/dist/{SystemShell-BLXTOqFb.js → SystemShell-BKNdXqXt.js} +1 -1
- package/dist/{admin-logs-C2V1ElH9.js → admin-logs-Dv86pFvY.js} +2 -2
- package/dist/{api--Fg0hL9Y.js → api-19TXED_O.js} +52 -39
- package/dist/api-BNwdLozd.js +20 -0
- package/dist/{createWorkspaceWsHandler-CqGqcTh_.js → createWorkspaceWsHandler-CBk4DqP4.js} +6 -5
- package/dist/{index-hPzswwk2.js → index-B5_xKK08.js} +1139 -1152
- package/dist/{index-D5u3BjCZ.js → index-BIJnjJd5.js} +2 -2
- package/dist/{index-BylksTyk.js → index-BKwpQ-HW.js} +136 -134
- package/dist/{index-bbwTcNjB.js → index-BTLD5gUt.js} +3 -3
- package/dist/{index-C9BOtjtQ.js → index-BTaLAs80.js} +9 -9
- package/dist/{index-CiMxCTOS.js → index-B_EBV24V.js} +1 -1
- package/dist/{index-BafC42Cl.js → index-Bd57t_yF.js} +1 -1
- package/dist/{index-C2aPiQSz.js → index-BjqYiZpC.js} +3 -3
- package/dist/{index-BaCiSbPR.js → index-BoGVJ0hC.js} +1 -1
- package/dist/{index-C01UUprh.js → index-BpuJ9Njb.js} +7016 -6946
- package/dist/{index-CcFJEYgr.js → index-C815hPWS.js} +55 -52
- package/dist/{index-DIxwe_pk.js → index-C8GK1bOQ.js} +358 -347
- package/dist/{index-DvIHX7lZ.js → index-CcpWacSZ.js} +243 -236
- package/dist/{index-Da7ls5q6.js → index-DOPkM2W8.js} +6 -6
- package/dist/index-DQNZE7Go.js +169 -0
- package/dist/{index-BYEx4vlI.js → index-DR_FCf71.js} +1134 -1132
- package/dist/{index-CTD7k9dP.js → index-DYgD6BuB.js} +4 -4
- package/dist/{index-dSnK7qcL.js → index-DdN9Apqq.js} +5 -5
- package/dist/{index-CPF3LS0x.js → index-DuGWlMWm.js} +3 -3
- package/dist/index-JMzBzwiO.js +1746 -0
- package/dist/{index-Dao4uqQd.js → index-x4-W5ClM.js} +4 -4
- package/dist/index.js +1 -1
- package/dist/{instance-1QEDBRqA.js → instance-D951fRuD.js} +1 -1
- package/dist/pages.js +5 -4
- package/dist/{schedule-C89oiqIR.js → schedule-DD50-7cs.js} +1 -1
- package/dist/{send-default-agent-team-message-CxkWi3XC.js → send-default-agent-team-message-Bbs2rMNf.js} +1 -1
- package/dist/{sso-user-BE1Ell5F.js → sso-user-BEY5ICaR.js} +1 -1
- package/dist/{training-o-vSBkqP.js → training-B-9tNFQw.js} +1 -1
- package/dist/{useAppStore-wgWaxcyc.js → useAppStore-BQN-26ns.js} +1 -1
- package/dist/{webide-BxD6cYe-.js → webide-P867RFZi.js} +4 -4
- package/dist/z-team-component.css +1 -1
- package/package.json +3 -3
- package/dist/ProjectApp-BquB_X7K.js +0 -4591
- package/dist/api-CX7MUpws.js +0 -19
- package/dist/index-CcTdM5kT.js +0 -178
- package/dist/index-pfzY68PH.js +0 -1408
|
@@ -1,43 +1,44 @@
|
|
|
1
1
|
import { jsx as e, jsxs as s } from "react/jsx-runtime";
|
|
2
|
-
import { useNavigate as
|
|
3
|
-
import { useState as p, useEffect as G, useRef as
|
|
4
|
-
import { Spin as Re, Row as
|
|
5
|
-
import { DashboardOutlined as
|
|
6
|
-
import { ConfigApp as
|
|
7
|
-
import { MistApp as
|
|
8
|
-
import { MetaApp as
|
|
9
|
-
import { MsgApp as
|
|
10
|
-
import { RpcApp as
|
|
11
|
-
import { VectorApp as
|
|
12
|
-
import { GraphApp as
|
|
13
|
-
import { GwApp as
|
|
14
|
-
import { CacheApp as
|
|
15
|
-
import { MqApp as
|
|
16
|
-
import { OssApp as
|
|
17
|
-
import { ZkbApp as
|
|
18
|
-
import { ScriptProductizationPage as
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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:
|
|
34
|
-
main:
|
|
35
|
-
empty:
|
|
36
|
-
emptyIcon:
|
|
37
|
-
emptyText:
|
|
38
|
-
},
|
|
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 = `${
|
|
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
|
|
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
|
|
56
|
+
return z("/cluster/info");
|
|
57
|
+
}
|
|
58
|
+
async function Gt() {
|
|
59
|
+
return z("/nodes");
|
|
59
60
|
}
|
|
60
|
-
async function
|
|
61
|
-
return
|
|
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
|
|
67
|
-
return
|
|
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
|
|
73
|
-
return
|
|
73
|
+
async function qt(t = "*") {
|
|
74
|
+
return z(`/workloads/pods?namespace=${t}`);
|
|
74
75
|
}
|
|
75
|
-
async function
|
|
76
|
-
return
|
|
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
|
|
80
|
+
return z(`/workloads/pods/${t}/${c}/restart`, { method: "POST" });
|
|
80
81
|
}
|
|
81
|
-
async function
|
|
82
|
-
return
|
|
82
|
+
async function Mt(t, c) {
|
|
83
|
+
return z(`/workloads/pods/${t}/${c}`, { method: "DELETE" });
|
|
83
84
|
}
|
|
84
|
-
async function
|
|
85
|
-
return
|
|
85
|
+
async function Kt() {
|
|
86
|
+
return z("/namespaces");
|
|
86
87
|
}
|
|
87
|
-
const
|
|
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
|
|
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(
|
|
108
|
+
/* @__PURE__ */ e(q, {}),
|
|
108
109
|
" 运维总览"
|
|
109
110
|
] }),
|
|
110
|
-
/* @__PURE__ */ s(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
339
|
-
/* @__PURE__ */ e(
|
|
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
|
-
},
|
|
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 =
|
|
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}`,
|
|
367
|
-
k.current =
|
|
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
|
-
},
|
|
370
|
+
}, P.onmessage = (T) => {
|
|
370
371
|
o.current || m(($) => [...$.slice(-1e3), T.data]);
|
|
371
|
-
},
|
|
372
|
+
}, P.onclose = () => {
|
|
372
373
|
y(!1);
|
|
373
|
-
},
|
|
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(
|
|
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(
|
|
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
|
-
},
|
|
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 =
|
|
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,
|
|
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
|
-
},
|
|
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
|
-
|
|
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(
|
|
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:
|
|
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(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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), [_,
|
|
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
|
-
|
|
570
|
+
P();
|
|
570
571
|
}, [y]);
|
|
571
572
|
const b = async () => {
|
|
572
573
|
try {
|
|
573
|
-
const l = await
|
|
574
|
+
const l = await Kt();
|
|
574
575
|
k(Array.isArray(l.data) ? ["*", ...l.data] : ["*"]);
|
|
575
576
|
} catch {
|
|
576
577
|
k(["*"]);
|
|
577
578
|
}
|
|
578
|
-
},
|
|
579
|
+
}, P = async () => {
|
|
579
580
|
d(!0), u("");
|
|
580
581
|
try {
|
|
581
|
-
const l = await
|
|
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),
|
|
591
|
+
O(l), D("logs"), o(!0);
|
|
591
592
|
try {
|
|
592
|
-
const E = await
|
|
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} 已重启`),
|
|
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
|
|
606
|
+
await Mt(l.namespace, l.name), v.success(`${l.name} 已删除`), P();
|
|
606
607
|
} catch {
|
|
607
608
|
v.error("删除失败");
|
|
608
609
|
}
|
|
609
|
-
},
|
|
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(
|
|
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(
|
|
641
|
-
/* @__PURE__ */ e(
|
|
642
|
-
/* @__PURE__ */ e(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
672
|
+
Oe,
|
|
672
673
|
{
|
|
673
|
-
|
|
674
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
695
|
+
Ee,
|
|
692
696
|
{
|
|
693
697
|
activeKey: _,
|
|
694
|
-
onChange:
|
|
698
|
+
onChange: D,
|
|
695
699
|
items: [
|
|
696
700
|
{
|
|
697
701
|
key: "logs",
|
|
698
702
|
label: "实时日志",
|
|
699
703
|
children: r ? /* @__PURE__ */ e(
|
|
700
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
},
|
|
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(
|
|
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
|
-
|
|
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(
|
|
835
|
-
/* @__PURE__ */ e(
|
|
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
|
-
|
|
843
|
-
|
|
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
|
-
|
|
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(
|
|
876
|
+
icon: /* @__PURE__ */ e(H, {}),
|
|
870
877
|
items: [
|
|
871
878
|
{
|
|
872
879
|
key: "devops-dashboard",
|
|
873
880
|
label: "运维总览",
|
|
874
|
-
icon: /* @__PURE__ */ e(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
952
|
+
icon: /* @__PURE__ */ e(H, {}),
|
|
946
953
|
items: [
|
|
947
954
|
{
|
|
948
955
|
key: "ops-channel",
|
|
949
956
|
label: "渠道管理",
|
|
950
|
-
icon: /* @__PURE__ */ e(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1102
|
+
icon: /* @__PURE__ */ e(xe, {}),
|
|
1096
1103
|
items: [
|
|
1097
1104
|
{
|
|
1098
1105
|
key: "msg-inbox",
|
|
1099
1106
|
label: "站内信",
|
|
1100
|
-
icon: /* @__PURE__ */ e(
|
|
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(
|
|
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(
|
|
1136
|
+
icon: /* @__PURE__ */ e(Xe, {}),
|
|
1130
1137
|
items: [
|
|
1131
1138
|
{
|
|
1132
1139
|
key: "rpc-service",
|
|
1133
1140
|
label: "服务列表",
|
|
1134
|
-
icon: /* @__PURE__ */ e(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1183
|
+
icon: /* @__PURE__ */ e(he, {}),
|
|
1177
1184
|
items: [
|
|
1178
1185
|
{
|
|
1179
1186
|
key: "graph-schema",
|
|
1180
1187
|
label: "图 Schema",
|
|
1181
|
-
icon: /* @__PURE__ */ e(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1278
|
+
icon: /* @__PURE__ */ e(ye, {}),
|
|
1272
1279
|
items: [
|
|
1273
1280
|
{
|
|
1274
1281
|
key: "mq-instance",
|
|
1275
1282
|
label: "实例与端口",
|
|
1276
|
-
icon: /* @__PURE__ */ e(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1407
|
+
icon: /* @__PURE__ */ e(A, {}),
|
|
1401
1408
|
items: [
|
|
1402
1409
|
{
|
|
1403
1410
|
key: "resource",
|
|
1404
1411
|
label: "资源管理",
|
|
1405
|
-
icon: /* @__PURE__ */ e(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1460
|
+
function N({ label: t }) {
|
|
1454
1461
|
return /* @__PURE__ */ e(
|
|
1455
|
-
|
|
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
|
|
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(
|
|
1469
|
-
{ path: "/ops/delivery", element: /* @__PURE__ */ e(
|
|
1470
|
-
{ path: "/ops/deployment", element: /* @__PURE__ */ e(
|
|
1471
|
-
{ path: "/ops/deployment/:id", element: /* @__PURE__ */ e(
|
|
1472
|
-
{ path: "/ops/repo-mgmt", element: /* @__PURE__ */ e(
|
|
1473
|
-
{ path: "/ops/git-platform", element: /* @__PURE__ */ e(
|
|
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(
|
|
1476
|
-
{ path: "/ops/devops/dashboard", element: /* @__PURE__ */ e(
|
|
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(
|
|
1479
|
-
{ path: "/ops/devops/hpa", element: /* @__PURE__ */ e(
|
|
1480
|
-
{ path: "/ops/devops/registry", element: /* @__PURE__ */ e(
|
|
1481
|
-
{ path: "/ops/devops/pipeline", element: /* @__PURE__ */ e(
|
|
1482
|
-
{ path: "/ops/devops/release", element: /* @__PURE__ */ e(
|
|
1483
|
-
{ path: "/ops/devops/monitor", element: /* @__PURE__ */ e(
|
|
1484
|
-
{ path: "/ops/devops/logs", element: /* @__PURE__ */ e(
|
|
1485
|
-
{ path: "/ops/devops/dba", element: /* @__PURE__ */ e(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1580
|
-
{ path: "/script/monitor", element: /* @__PURE__ */ e(
|
|
1581
|
-
{ path: "/script/quota", element: /* @__PURE__ */ e(
|
|
1582
|
-
{ path: "/script/version", element: /* @__PURE__ */ e(
|
|
1583
|
-
{ path: "/script/tag", element: /* @__PURE__ */ e(
|
|
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(
|
|
1588
|
-
{ path: "/resource/ecs", element: /* @__PURE__ */ e(
|
|
1589
|
-
{ path: "/resource/rds", element: /* @__PURE__ */ e(
|
|
1590
|
-
{ path: "/resource/oss", element: /* @__PURE__ */ e(
|
|
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
|
|
1593
|
-
for (const c of
|
|
1599
|
+
function en(t) {
|
|
1600
|
+
for (const c of fe)
|
|
1594
1601
|
if (c.path === t) return c.element;
|
|
1595
|
-
for (const c of
|
|
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(
|
|
1607
|
+
return /* @__PURE__ */ e(Qt, {});
|
|
1601
1608
|
}
|
|
1602
|
-
function
|
|
1609
|
+
function wn({
|
|
1603
1610
|
activePathOverride: t,
|
|
1604
1611
|
menuOnly: c = !1
|
|
1605
1612
|
} = {}) {
|
|
1606
|
-
const i =
|
|
1613
|
+
const i = Ae(), { pathname: d } = Te(), [m, u] = p(
|
|
1607
1614
|
new Set(oe.map((a) => a.title))
|
|
1608
|
-
), y =
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
1663
|
+
wn as default
|
|
1657
1664
|
};
|