@yuku123/z-team-component 0.2.103 → 0.2.104
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-DG-ogBff.js +542 -0
- package/dist/ComponentDoc-BW1SyDxk.js +8035 -0
- package/dist/InvitationManagementPage-hYvoPEcm.js +495 -0
- package/dist/OnboardingPage-KDp-DrzY.js +393 -0
- package/dist/ScheduledTasks-CErSDgyW.js +12127 -0
- package/dist/SystemShell-DvrY4Bl7.js +688 -0
- package/dist/_commonjsHelpers-B52_cu2H.js +26 -0
- package/dist/admin-logs-uPnnclwN.js +198 -0
- package/dist/api-B__qdRIf.js +20 -0
- package/dist/browser-jb_PFvU3.js +1538 -0
- package/dist/createWorkspaceWsHandler-BXbn5-Ft.js +13142 -0
- package/dist/ctc-sso-DtJHC-2M.js +117 -0
- package/dist/echarts-B1OU1xr4.js +16 -0
- package/dist/history-BlrA1eaW.js +41 -0
- package/dist/index-0smeCTnr.js +42049 -0
- package/dist/index-2isWwv1X.js +10169 -0
- package/dist/index-BC8f-JP9.js +242 -0
- package/dist/index-BK3YDeXH.js +2217 -0
- package/dist/index-BOJm25by.js +999 -0
- package/dist/index-B_LJRFsK.js +339 -0
- package/dist/index-BnJ8UEeZ.js +5892 -0
- package/dist/index-BohoJQPr.js +7631 -0
- package/dist/index-BwJPAN8f.js +112 -0
- package/dist/index-ByhCWenF.js +434 -0
- package/dist/index-C2_tfpEj.js +118 -0
- package/dist/index-C815hPWS.js +430 -0
- package/dist/index-C9fGup9t.js +189 -0
- package/dist/index-Cb88Xdh4.js +169 -0
- package/dist/index-Cih0yoxc.js +178 -0
- package/dist/index-CkWKJORv.js +1645 -0
- package/dist/index-CsaGecGX.js +132 -0
- package/dist/index-D-xPVrY3.js +316 -0
- package/dist/index-DAGa9v8r.js +142 -0
- package/dist/index-DBnH-lRh.js +956 -0
- package/dist/index-DIFIvVWE.js +93 -0
- package/dist/index-DOgCfVB2.js +574 -0
- package/dist/index-DWsfQMp8.js +208 -0
- package/dist/index-DcurzowX.js +2699 -0
- package/dist/index-DhDdFRHC.js +279 -0
- package/dist/index-Dpii3P5J.js +1302 -0
- package/dist/index-DtHoMz1H.js +8 -0
- package/dist/index-YVtm1SRy.js +913 -0
- package/dist/index-aI2EXKED.js +479 -0
- package/dist/index-q_TPea69.js +315 -0
- package/dist/index.js +10 -0
- package/dist/index.module-CAa-2T7m.js +72 -0
- package/dist/index.module-UI0iz8K0.js +42 -0
- package/dist/instance-pdQ_wAhB.js +216 -0
- package/dist/menuPermission-CCQjJVXg.js +60 -0
- package/dist/mobile-client-O3yr9h6t.js +24 -0
- package/dist/pages.js +21 -0
- package/dist/send-default-agent-team-message-BzeR4ahf.js +35 -0
- package/dist/spark-md5-Dld54a-T.js +178 -0
- package/dist/sso-user-DI7oiDdc.js +43 -0
- package/dist/training-Bz7Sr5yC.js +450 -0
- package/dist/webide-NcHLDiSn.js +5233 -0
- package/dist/z-team-component.css +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { jsx as s, jsxs as C } from "react/jsx-runtime";
|
|
2
|
+
import { f as z, r as v } from "./ctc-sso-DtJHC-2M.js";
|
|
3
|
+
import { r as L, h as N, s as T } from "./sso-user-DI7oiDdc.js";
|
|
4
|
+
import { CheckCircleFilled as q } from "@ant-design/icons";
|
|
5
|
+
import { Spin as R } from "antd";
|
|
6
|
+
import W from "query-string";
|
|
7
|
+
import { useMemo as P, useState as p, useCallback as A, useEffect as U } from "react";
|
|
8
|
+
import { useLocation as F } from "react-router-dom";
|
|
9
|
+
import { h as H } from "./history-BlrA1eaW.js";
|
|
10
|
+
import { d as m, e as Y, j as B } from "./ComponentDoc-BW1SyDxk.js";
|
|
11
|
+
/* empty css */
|
|
12
|
+
import { b as G } from "./mobile-client-O3yr9h6t.js";
|
|
13
|
+
function oe() {
|
|
14
|
+
const i = F(), g = W.parse(i.search), S = P(
|
|
15
|
+
() => String(g.name ?? "WebIDE 在线咨询").trim(),
|
|
16
|
+
[i.search]
|
|
17
|
+
), _ = P(
|
|
18
|
+
() => String(g.source ?? "z-team-webide").trim(),
|
|
19
|
+
[i.search]
|
|
20
|
+
), [b, E] = p(!1), [I, y] = p("正在登录…"), [w, M] = p([]), [j, x] = p(""), { currentUser: d, updateCurrentUser: u, expandProject: $ } = m(), f = A((e, o) => {
|
|
21
|
+
M((a) => [...a, e]), y(o);
|
|
22
|
+
}, []);
|
|
23
|
+
return U(() => {
|
|
24
|
+
let e = !1, o = 0;
|
|
25
|
+
const a = 100;
|
|
26
|
+
let r = !1, n = 0;
|
|
27
|
+
const h = 3;
|
|
28
|
+
return (() => {
|
|
29
|
+
if (e) return;
|
|
30
|
+
const l = async () => {
|
|
31
|
+
if (e) return;
|
|
32
|
+
let t = L();
|
|
33
|
+
if ((!t || !N(t)) && !r) {
|
|
34
|
+
r = !0;
|
|
35
|
+
try {
|
|
36
|
+
const c = await z();
|
|
37
|
+
c.kind === "authenticated" ? t = c.user : c.kind === "unauthenticated" && (n += 1);
|
|
38
|
+
} catch {
|
|
39
|
+
} finally {
|
|
40
|
+
r = !1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (t && N(t)) {
|
|
44
|
+
u(T(t));
|
|
45
|
+
const c = m.getState().token;
|
|
46
|
+
B().then((D) => {
|
|
47
|
+
e || u(D);
|
|
48
|
+
}).catch(() => {
|
|
49
|
+
!e && c && (localStorage.removeItem("z_team_token"), m.setState({ token: "" }));
|
|
50
|
+
}).finally(() => {
|
|
51
|
+
e || E(!0);
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (n >= h) {
|
|
56
|
+
v();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (o += 1, o >= a) {
|
|
60
|
+
v();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
window.setTimeout(() => void l(), 150);
|
|
64
|
+
};
|
|
65
|
+
l();
|
|
66
|
+
})(), () => {
|
|
67
|
+
e = !0;
|
|
68
|
+
};
|
|
69
|
+
}, [u]), U(() => {
|
|
70
|
+
if (!b || !d) return;
|
|
71
|
+
let e = !1;
|
|
72
|
+
return (async () => {
|
|
73
|
+
try {
|
|
74
|
+
const a = m.getState(), r = /* @__PURE__ */ new Date(), n = (c) => String(c).padStart(2, "0"), h = `${r.getFullYear()}-${n(r.getMonth() + 1)}-${n(
|
|
75
|
+
r.getDate()
|
|
76
|
+
)} ${n(r.getHours())}:${n(r.getMinutes())}`, k = `${S} - ${d.display_name || d.username} - ${h}`;
|
|
77
|
+
y("正在创建咨询群组…");
|
|
78
|
+
const l = await Y(
|
|
79
|
+
{
|
|
80
|
+
name: k,
|
|
81
|
+
description: `${_} 发起的在线咨询`,
|
|
82
|
+
workspace_path: `webide_consult_${Date.now()}`,
|
|
83
|
+
scenario_code: "z_team_webide_console_scenario"
|
|
84
|
+
},
|
|
85
|
+
a.token
|
|
86
|
+
);
|
|
87
|
+
if (e || (f("群组已创建", "正在初始化工作区…"), await $(l), e)) return;
|
|
88
|
+
const t = m.getState();
|
|
89
|
+
if (t.currentProject && await t.refreshProjectPanels(
|
|
90
|
+
t.currentProject.id,
|
|
91
|
+
t.projectSwitchSeq,
|
|
92
|
+
!1
|
|
93
|
+
), e) return;
|
|
94
|
+
f("工作区已就绪", "即将进入工作台…"), H.replace(
|
|
95
|
+
G({
|
|
96
|
+
projectId: l.id,
|
|
97
|
+
search: i.search
|
|
98
|
+
})
|
|
99
|
+
);
|
|
100
|
+
} catch (a) {
|
|
101
|
+
e || x(a instanceof Error ? a.message : "创建群组失败");
|
|
102
|
+
}
|
|
103
|
+
})(), () => {
|
|
104
|
+
e = !0;
|
|
105
|
+
};
|
|
106
|
+
}, [
|
|
107
|
+
b,
|
|
108
|
+
d,
|
|
109
|
+
S,
|
|
110
|
+
_,
|
|
111
|
+
$,
|
|
112
|
+
f,
|
|
113
|
+
i.search
|
|
114
|
+
]), j ? /* @__PURE__ */ s("div", { className: "embed-chat-page embed-chat-page--error", children: /* @__PURE__ */ s("p", { children: j }) }) : /* @__PURE__ */ s("div", { className: "embed-chat-page embed-chat-page--loading", children: /* @__PURE__ */ C("div", { className: "embed-chat-page__panel", children: [
|
|
115
|
+
/* @__PURE__ */ s(R, { size: "large" }),
|
|
116
|
+
/* @__PURE__ */ s("p", { className: "embed-chat-page__step", children: I }),
|
|
117
|
+
w.length > 0 ? /* @__PURE__ */ s("ul", { className: "embed-chat-page__done-list", children: w.filter((e) => e.trim().length > 0).map((e, o) => /* @__PURE__ */ C(
|
|
118
|
+
"li",
|
|
119
|
+
{
|
|
120
|
+
className: "embed-chat-page__done-item",
|
|
121
|
+
children: [
|
|
122
|
+
/* @__PURE__ */ s(q, { className: "embed-chat-page__done-icon" }),
|
|
123
|
+
/* @__PURE__ */ s("span", { children: e })
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
`${o}-${e}`
|
|
127
|
+
)) }) : null
|
|
128
|
+
] }) });
|
|
129
|
+
}
|
|
130
|
+
export {
|
|
131
|
+
oe as default
|
|
132
|
+
};
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { a as h, f as _, B as N, v as A, t as g } from "./ComponentDoc-BW1SyDxk.js";
|
|
2
|
+
import { jsx as p, jsxs as I } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo as S, useState as C, useEffect as G, Component as L } from "react";
|
|
4
|
+
function $(t) {
|
|
5
|
+
if (t == null) return !0;
|
|
6
|
+
const e = String(t).trim();
|
|
7
|
+
return e === "" || e === "0";
|
|
8
|
+
}
|
|
9
|
+
function b(t) {
|
|
10
|
+
const e = (i) => {
|
|
11
|
+
if (typeof i != "string" || !i.trim()) return [];
|
|
12
|
+
try {
|
|
13
|
+
const s = JSON.parse(i);
|
|
14
|
+
return Array.isArray(s) ? s.filter((d) => typeof d == "string") : [];
|
|
15
|
+
} catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}, n = (i) => {
|
|
19
|
+
if (typeof i != "string" || !i.trim()) return [];
|
|
20
|
+
try {
|
|
21
|
+
const s = JSON.parse(i);
|
|
22
|
+
return Array.isArray(s) ? s.filter(
|
|
23
|
+
(d) => !!d && typeof d == "object" && typeof d.type == "string"
|
|
24
|
+
) : [];
|
|
25
|
+
} catch {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
}, r = () => {
|
|
29
|
+
const i = t.assigneeUserIds;
|
|
30
|
+
let s = null;
|
|
31
|
+
if (Array.isArray(i))
|
|
32
|
+
s = i;
|
|
33
|
+
else if (typeof i == "string" && i.trim())
|
|
34
|
+
try {
|
|
35
|
+
const o = JSON.parse(i);
|
|
36
|
+
s = Array.isArray(o) ? o : null;
|
|
37
|
+
} catch {
|
|
38
|
+
s = i.split(",");
|
|
39
|
+
}
|
|
40
|
+
if (s) {
|
|
41
|
+
const o = s.map((u) => String(u ?? "").trim()).filter(Boolean);
|
|
42
|
+
if (o.length > 0) return Array.from(new Set(o));
|
|
43
|
+
}
|
|
44
|
+
const d = t.assigneeUserId == null ? "" : String(t.assigneeUserId);
|
|
45
|
+
return d.trim() ? [d.trim()] : [];
|
|
46
|
+
}, c = (i) => {
|
|
47
|
+
const s = t.assignees, d = Array.isArray(s) ? s.map((o) => {
|
|
48
|
+
const u = o ?? {}, m = String(u.userId ?? "").trim();
|
|
49
|
+
return m ? { userId: m, name: String(u.name ?? "").trim() || m } : null;
|
|
50
|
+
}).filter((o) => o != null) : [];
|
|
51
|
+
return d.length > 0 ? d : i.map((o) => ({ userId: o, name: o }));
|
|
52
|
+
}, l = r();
|
|
53
|
+
return {
|
|
54
|
+
id: g(t.id),
|
|
55
|
+
projectId: t.projectId == null ? null : g(t.projectId),
|
|
56
|
+
userId: String(t.userId ?? ""),
|
|
57
|
+
title: String(t.title ?? ""),
|
|
58
|
+
detail: t.detail == null ? null : String(t.detail),
|
|
59
|
+
status: t.status ?? "TODO",
|
|
60
|
+
priority: t.priority ?? "MEDIUM",
|
|
61
|
+
dueDate: t.dueDate == null ? null : String(t.dueDate).slice(0, 10),
|
|
62
|
+
assigneeUserId: l[0] ?? null,
|
|
63
|
+
assigneeUserIds: l,
|
|
64
|
+
assignees: c(l),
|
|
65
|
+
projectTitle: t.projectTitle == null || !String(t.projectTitle).trim() ? null : String(t.projectTitle),
|
|
66
|
+
tags: e(t.tags),
|
|
67
|
+
links: n(t.links),
|
|
68
|
+
parentId: $(t.parentId) ? "" : g(t.parentId),
|
|
69
|
+
sortOrder: t.sortOrder == null ? 0 : Number(t.sortOrder),
|
|
70
|
+
completedAt: t.completedAt == null ? null : String(t.completedAt),
|
|
71
|
+
completedBy: t.completedBy == null ? null : String(t.completedBy),
|
|
72
|
+
createByName: t.createByName == null ? null : String(t.createByName),
|
|
73
|
+
updateTime: t.updateTime == null ? null : String(t.updateTime),
|
|
74
|
+
agentId: t.agentId == null ? null : g(t.agentId),
|
|
75
|
+
agentSessionId: t.agentSessionId == null ? null : g(t.agentSessionId)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function B(t) {
|
|
79
|
+
const e = t ?? {};
|
|
80
|
+
return {
|
|
81
|
+
id: g(e.id),
|
|
82
|
+
userId: String(e.userId ?? ""),
|
|
83
|
+
title: String(e.title ?? ""),
|
|
84
|
+
icon: e.icon == null ? null : String(e.icon),
|
|
85
|
+
description: e.description == null ? null : String(e.description),
|
|
86
|
+
visibility: e.visibility === "shared" ? "shared" : "private",
|
|
87
|
+
sortOrder: e.sortOrder == null ? 0 : Number(e.sortOrder),
|
|
88
|
+
extraInfo: e.extraInfo == null ? null : String(e.extraInfo),
|
|
89
|
+
createByName: e.createByName == null ? null : String(e.createByName)
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function O(t) {
|
|
93
|
+
const e = t ?? {}, n = Array.isArray(e.memberDetails) ? e.memberDetails : [];
|
|
94
|
+
return {
|
|
95
|
+
...B(e),
|
|
96
|
+
openCount: e.openCount == null ? 0 : Number(e.openCount),
|
|
97
|
+
memberDetails: n.map((r) => {
|
|
98
|
+
const c = r ?? {}, l = String(c.userId ?? "").trim();
|
|
99
|
+
return l ? { userId: l, userName: String(c.userName ?? "").trim() || l } : null;
|
|
100
|
+
}).filter((r) => r != null)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async function et(t = "") {
|
|
104
|
+
const e = t ? `?token=${encodeURIComponent(t)}` : "", n = await h(`${N}/todo/projects${e}`, _), r = await A(n, "获取待办项目失败");
|
|
105
|
+
return {
|
|
106
|
+
owned: ((r == null ? void 0 : r.owned) ?? []).map(O),
|
|
107
|
+
joined: ((r == null ? void 0 : r.joined) ?? []).map(O)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
async function nt(t = {}, e = "") {
|
|
111
|
+
const n = new URLSearchParams();
|
|
112
|
+
e && n.set("token", e), t.view && n.set("view", t.view), t.projectId != null && n.set("projectId", String(t.projectId)), t.status && n.set("status", t.status), t.keyword && n.set("keyword", t.keyword);
|
|
113
|
+
const r = n.toString() ? `?${n.toString()}` : "", c = await h(`${N}/todo/items${r}`, _);
|
|
114
|
+
return (await A(
|
|
115
|
+
c,
|
|
116
|
+
"获取事项失败"
|
|
117
|
+
) ?? []).map(b);
|
|
118
|
+
}
|
|
119
|
+
async function rt(t, e = "") {
|
|
120
|
+
const n = e ? `?token=${encodeURIComponent(e)}` : "", r = await h(`${N}/todo/items${n}`, {
|
|
121
|
+
..._,
|
|
122
|
+
method: "POST",
|
|
123
|
+
headers: { "Content-Type": "application/json" },
|
|
124
|
+
body: JSON.stringify(t)
|
|
125
|
+
}), c = await A(r, "新建事项失败");
|
|
126
|
+
return b(c);
|
|
127
|
+
}
|
|
128
|
+
const D = {
|
|
129
|
+
RUNTIME_MONITOR_VIEW: ["RUNTIME_MONITOR_MANAGE"],
|
|
130
|
+
EVALUATION_VIEW: ["EVALUATION_MANAGE"],
|
|
131
|
+
COLLABORATION_VIEW: [
|
|
132
|
+
"AGENT_MANAGE",
|
|
133
|
+
"SKILL_MANAGE",
|
|
134
|
+
"SCENARIO_MANAGE",
|
|
135
|
+
"PROFILE_MANAGE",
|
|
136
|
+
"TAG_MANAGE",
|
|
137
|
+
"TOOL_MANAGE"
|
|
138
|
+
],
|
|
139
|
+
EVOLUTION_VIEW: ["EVOLUTION_MANAGE"],
|
|
140
|
+
OPS_CONFIG_VIEW: [
|
|
141
|
+
"OPS_CONFIG_MANAGE",
|
|
142
|
+
"ONCALL_MANAGE",
|
|
143
|
+
"ANNOUNCEMENT_MANAGE",
|
|
144
|
+
"OPS_REPORT_MANAGE"
|
|
145
|
+
],
|
|
146
|
+
KNOWLEDGE_VIEW: ["KNOWLEDGE_MANAGE"],
|
|
147
|
+
WEBIDE_VIEW: ["WEBIDE_MANAGE"]
|
|
148
|
+
};
|
|
149
|
+
function it(t, e) {
|
|
150
|
+
var r;
|
|
151
|
+
if (!t) return !1;
|
|
152
|
+
if (t.is_global_admin || (r = t.permissions) != null && r.includes(e)) return !0;
|
|
153
|
+
const n = D[e];
|
|
154
|
+
return !!(n != null && n.some((c) => {
|
|
155
|
+
var l;
|
|
156
|
+
return (l = t.permissions) == null ? void 0 : l.includes(c);
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
const P = "_wrap_2gcw5_1", U = "_card_2gcw5_9", R = "_badge_2gcw5_19", V = "_title_2gcw5_41", W = "_desc_2gcw5_48", v = "_actions_2gcw5_55", x = "_primary_2gcw5_63", z = "_secondary_2gcw5_75", F = "_details_2gcw5_90", J = "_pre_2gcw5_102", w = "_copy_2gcw5_117", K = "_compact_2gcw5_127", a = {
|
|
160
|
+
wrap: P,
|
|
161
|
+
card: U,
|
|
162
|
+
badge: R,
|
|
163
|
+
title: V,
|
|
164
|
+
desc: W,
|
|
165
|
+
actions: v,
|
|
166
|
+
primary: x,
|
|
167
|
+
secondary: z,
|
|
168
|
+
details: F,
|
|
169
|
+
pre: J,
|
|
170
|
+
copy: w,
|
|
171
|
+
compact: K
|
|
172
|
+
};
|
|
173
|
+
function H(t) {
|
|
174
|
+
const e = t, n = `${(e == null ? void 0 : e.name) ?? ""} ${(e == null ? void 0 : e.message) ?? ""} ${typeof t == "string" ? t : ""}`;
|
|
175
|
+
return /ChunkLoadError|Loading chunk|Failed to fetch dynamically imported module|Importing a module script failed|error loading dynamically imported module/i.test(n);
|
|
176
|
+
}
|
|
177
|
+
function Y(t) {
|
|
178
|
+
const { status: e, error: n } = t;
|
|
179
|
+
return e === 401 ? {
|
|
180
|
+
kind: "unauthorized",
|
|
181
|
+
status: e,
|
|
182
|
+
badge: "401",
|
|
183
|
+
title: "登录已失效",
|
|
184
|
+
description: "当前会话已过期或未建立,请重新登录后继续。重登后会回到这个页面。"
|
|
185
|
+
} : e === 403 ? {
|
|
186
|
+
kind: "forbidden",
|
|
187
|
+
status: e,
|
|
188
|
+
badge: "403",
|
|
189
|
+
title: "没有访问权限",
|
|
190
|
+
description: "当前账号无权访问该功能。如需开通,请联系管理员分配权限。"
|
|
191
|
+
} : e === 404 ? {
|
|
192
|
+
kind: "not-found",
|
|
193
|
+
status: e,
|
|
194
|
+
badge: "404",
|
|
195
|
+
title: "功能接口未就绪",
|
|
196
|
+
description: "这个页面要用的后端接口还没有部署,或前后端路径对不上。可以重试;若持续如此,请把技术详情发给运维确认版本。"
|
|
197
|
+
} : e && e >= 500 ? {
|
|
198
|
+
kind: "server",
|
|
199
|
+
status: e,
|
|
200
|
+
badge: String(e),
|
|
201
|
+
title: "服务暂时不可用",
|
|
202
|
+
description: "后端返回了错误。稍后重试;如果反复出现,请把技术详情发给运维。"
|
|
203
|
+
} : e === 0 ? {
|
|
204
|
+
kind: "network",
|
|
205
|
+
status: e,
|
|
206
|
+
badge: "!",
|
|
207
|
+
title: "网络不可用",
|
|
208
|
+
description: "请求没有到达后端。请检查网络,或确认本地后端服务是否已启动。"
|
|
209
|
+
} : H(n) ? {
|
|
210
|
+
kind: "chunk",
|
|
211
|
+
badge: "⟳",
|
|
212
|
+
title: "页面资源加载失败",
|
|
213
|
+
description: "可能刚发布了新版本,旧页面资源已被替换。刷新页面即可拿到新资源。"
|
|
214
|
+
} : n != null ? {
|
|
215
|
+
kind: "render",
|
|
216
|
+
badge: "!",
|
|
217
|
+
title: "页面渲染出错",
|
|
218
|
+
description: "这个页面遇到了未预期的错误,已被拦截,不影响其他页面。可以重试;仍然失败请把技术详情发给研发。"
|
|
219
|
+
} : {
|
|
220
|
+
kind: "unknown",
|
|
221
|
+
badge: "!",
|
|
222
|
+
title: "页面加载失败",
|
|
223
|
+
description: "发生了未知错误。请重试,或返回首页换个入口再试。"
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function Q(t, e) {
|
|
227
|
+
const n = [];
|
|
228
|
+
if (n.push(`页面:${typeof location < "u" ? location.pathname + location.search : "-"}`), n.push(`时间:${(/* @__PURE__ */ new Date()).toISOString()}`), t != null && n.push(`HTTP:${t}`), e != null) {
|
|
229
|
+
const r = e;
|
|
230
|
+
r != null && r.name && n.push(`错误名:${String(r.name)}`), r != null && r.message && n.push(`消息:${String(r.message)}`), r != null && r.stack ? n.push(`堆栈:
|
|
231
|
+
${String(r.stack)}`) : typeof e != "object" && n.push(`原文:${String(e)}`);
|
|
232
|
+
}
|
|
233
|
+
return n.join(`
|
|
234
|
+
`).slice(0, 4e3);
|
|
235
|
+
}
|
|
236
|
+
const X = ({
|
|
237
|
+
status: t,
|
|
238
|
+
error: e,
|
|
239
|
+
title: n,
|
|
240
|
+
description: r,
|
|
241
|
+
retry: c,
|
|
242
|
+
retryText: l,
|
|
243
|
+
extra: i,
|
|
244
|
+
showHome: s = !0,
|
|
245
|
+
compact: d = !1,
|
|
246
|
+
className: o
|
|
247
|
+
}) => {
|
|
248
|
+
const u = S(() => Y({ status: t, error: e }), [t, e]), [m, f] = C(!1), E = S(() => Q(t, e), [t, e]);
|
|
249
|
+
G(() => {
|
|
250
|
+
if (!m) return;
|
|
251
|
+
const y = setTimeout(() => f(!1), 2e3);
|
|
252
|
+
return () => clearTimeout(y);
|
|
253
|
+
}, [m]);
|
|
254
|
+
const T = async () => {
|
|
255
|
+
try {
|
|
256
|
+
await navigator.clipboard.writeText(E), f(!0);
|
|
257
|
+
} catch {
|
|
258
|
+
f(!1);
|
|
259
|
+
}
|
|
260
|
+
}, k = () => {
|
|
261
|
+
const y = encodeURIComponent(location.pathname + location.search);
|
|
262
|
+
location.assign(`/login?redirect=${y}`);
|
|
263
|
+
}, M = () => c ? /* @__PURE__ */ p("button", { type: "button", className: a.primary, onClick: c, children: l || "重试" }) : u.kind === "chunk" ? /* @__PURE__ */ p("button", { type: "button", className: a.primary, onClick: () => location.reload(), children: "刷新页面" }) : u.kind === "unauthorized" ? /* @__PURE__ */ p("button", { type: "button", className: a.primary, onClick: k, children: "重新登录" }) : null, j = e != null || t != null;
|
|
264
|
+
return /* @__PURE__ */ p(
|
|
265
|
+
"div",
|
|
266
|
+
{
|
|
267
|
+
className: [a.wrap, d ? a.compact : "", o || ""].filter(Boolean).join(" "),
|
|
268
|
+
role: "alert",
|
|
269
|
+
"data-error-kind": u.kind,
|
|
270
|
+
children: /* @__PURE__ */ I("div", { className: a.card, children: [
|
|
271
|
+
/* @__PURE__ */ p("div", { className: a.badge, "data-kind": u.kind, children: u.badge }),
|
|
272
|
+
/* @__PURE__ */ p("h2", { className: a.title, children: n || u.title }),
|
|
273
|
+
/* @__PURE__ */ p("p", { className: a.desc, children: r || u.description }),
|
|
274
|
+
/* @__PURE__ */ I("div", { className: a.actions, children: [
|
|
275
|
+
M(),
|
|
276
|
+
i,
|
|
277
|
+
s && u.kind !== "unauthorized" && /* @__PURE__ */ p("a", { className: a.secondary, href: "/", children: "返回首页" })
|
|
278
|
+
] }),
|
|
279
|
+
j && /* @__PURE__ */ I("details", { className: a.details, children: [
|
|
280
|
+
/* @__PURE__ */ p("summary", { children: "技术详情" }),
|
|
281
|
+
/* @__PURE__ */ p("pre", { className: a.pre, children: E }),
|
|
282
|
+
/* @__PURE__ */ p("button", { type: "button", className: a.copy, onClick: T, children: m ? "已复制" : "复制详情" })
|
|
283
|
+
] })
|
|
284
|
+
] })
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
};
|
|
288
|
+
class st extends L {
|
|
289
|
+
constructor(e) {
|
|
290
|
+
super(e), this.state = { hasError: !1, error: null };
|
|
291
|
+
}
|
|
292
|
+
static getDerivedStateFromError(e) {
|
|
293
|
+
return { hasError: !0, error: e };
|
|
294
|
+
}
|
|
295
|
+
componentDidCatch(e, n) {
|
|
296
|
+
console.error("[ErrorBoundary]", e, n.componentStack);
|
|
297
|
+
}
|
|
298
|
+
render() {
|
|
299
|
+
return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ p(
|
|
300
|
+
X,
|
|
301
|
+
{
|
|
302
|
+
error: this.state.error,
|
|
303
|
+
retry: () => this.setState({ hasError: !1, error: null })
|
|
304
|
+
}
|
|
305
|
+
) : this.props.children;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
export {
|
|
309
|
+
st as E,
|
|
310
|
+
X as P,
|
|
311
|
+
nt as a,
|
|
312
|
+
rt as c,
|
|
313
|
+
et as f,
|
|
314
|
+
it as h,
|
|
315
|
+
H as i
|
|
316
|
+
};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { jsx as c, jsxs as _ } from "react/jsx-runtime";
|
|
2
|
+
import { c as $, d as j, t as x, p as O, e as v, g as F } from "./ComponentDoc-BW1SyDxk.js";
|
|
3
|
+
import { CheckCircleFilled as b } from "@ant-design/icons";
|
|
4
|
+
import { Result as D, Button as R, Spin as U } from "antd";
|
|
5
|
+
import B from "query-string";
|
|
6
|
+
import { useMemo as y, useState as f, useRef as q, useCallback as A, useEffect as J } from "react";
|
|
7
|
+
import { useLocation as W } from "react-router-dom";
|
|
8
|
+
import { h as w } from "./history-BlrA1eaW.js";
|
|
9
|
+
import { l as Z, j as z, f as H, b as L, p as M } from "./instance-pdQ_wAhB.js";
|
|
10
|
+
import { b as N } from "./mobile-client-O3yr9h6t.js";
|
|
11
|
+
function nt() {
|
|
12
|
+
const m = W(), p = B.parse(m.search), o = String(
|
|
13
|
+
p.projectId ?? p.project_id ?? ""
|
|
14
|
+
).trim(), a = String(p.ticketId ?? p.ticket_id ?? "").trim(), e = y(() => {
|
|
15
|
+
if (!o)
|
|
16
|
+
return null;
|
|
17
|
+
const t = x(o);
|
|
18
|
+
return $(t) ? t : null;
|
|
19
|
+
}, [o]), u = j((t) => t.token), T = j((t) => t.expandProject), [h, l] = f(""), [P, n] = f("正在启动…"), [k, C] = f([]), g = q(!1), s = A((t, r) => {
|
|
20
|
+
C((i) => [...i, t]), n(r);
|
|
21
|
+
}, []), I = async (t) => {
|
|
22
|
+
s("协作区已就绪", "正在同步工程列表…"), await T(t), s("工作区已准备", "即将进入工作台…"), w.replace(
|
|
23
|
+
N({
|
|
24
|
+
projectId: t.id,
|
|
25
|
+
search: m.search
|
|
26
|
+
})
|
|
27
|
+
);
|
|
28
|
+
}, d = async (t) => {
|
|
29
|
+
n("正在确认工程信息…");
|
|
30
|
+
const r = await Z(t, u);
|
|
31
|
+
if (r.status === "NOT_FOUND" || !r.scenarioInstance)
|
|
32
|
+
throw new Error("PROJECT_NOT_FOUND");
|
|
33
|
+
n("正在加入协作区…");
|
|
34
|
+
const i = await z(t, u);
|
|
35
|
+
s("已加入协作区", "正在打开协作区…"), await I(i);
|
|
36
|
+
}, E = async () => {
|
|
37
|
+
n("正在检查工单信息…");
|
|
38
|
+
const t = await H(a);
|
|
39
|
+
s("工单信息已获取", "正在解析工程绑定…");
|
|
40
|
+
const r = O(t);
|
|
41
|
+
if (r != null) {
|
|
42
|
+
s("已定位协作区", `正在打开协作区 ${r}…`), await d(r);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
n("正在初始化工程…");
|
|
46
|
+
const i = await v(
|
|
47
|
+
L(t, a),
|
|
48
|
+
u
|
|
49
|
+
);
|
|
50
|
+
n("正在关联工单…");
|
|
51
|
+
try {
|
|
52
|
+
await F(
|
|
53
|
+
a,
|
|
54
|
+
i.id,
|
|
55
|
+
M(t)
|
|
56
|
+
);
|
|
57
|
+
} catch {
|
|
58
|
+
}
|
|
59
|
+
n("正在初始化工作区…"), await I(i);
|
|
60
|
+
};
|
|
61
|
+
J(() => {
|
|
62
|
+
if (!g.current) {
|
|
63
|
+
if (g.current = !0, o && e == null) {
|
|
64
|
+
l("projectId 无效,请传入正整数");
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (e == null && !a) {
|
|
68
|
+
l("缺少参数:请提供 projectId 和/或 ticketId");
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (e != null && !a) {
|
|
72
|
+
(async () => {
|
|
73
|
+
try {
|
|
74
|
+
n(`正在打开协作区 ${e}…`), await d(e);
|
|
75
|
+
} catch (t) {
|
|
76
|
+
const r = t instanceof Error ? t.message : String(t);
|
|
77
|
+
l(r || "打开工程失败");
|
|
78
|
+
}
|
|
79
|
+
})();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (!a) {
|
|
83
|
+
l("缺少 ticketId");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
(async () => {
|
|
87
|
+
try {
|
|
88
|
+
if (e != null)
|
|
89
|
+
try {
|
|
90
|
+
n(`正在打开指定协作区 ${e}…`), await d(e);
|
|
91
|
+
return;
|
|
92
|
+
} catch (t) {
|
|
93
|
+
if (!(t instanceof Error && t.message === "PROJECT_NOT_FOUND"))
|
|
94
|
+
throw t;
|
|
95
|
+
n("正在按工单重新查找…");
|
|
96
|
+
}
|
|
97
|
+
await E();
|
|
98
|
+
} catch (t) {
|
|
99
|
+
const r = t instanceof Error ? t.message : String(t);
|
|
100
|
+
l(r || "打开工程失败");
|
|
101
|
+
}
|
|
102
|
+
})();
|
|
103
|
+
}
|
|
104
|
+
}, [s, e, o, a, u]);
|
|
105
|
+
const S = y(() => e != null && a ? `工单 ${a} · 工程 ${e}` : e != null ? `工程 ${e}` : a ? `工单 ${a}` : "", [e, a]);
|
|
106
|
+
return h ? /* @__PURE__ */ c("div", { className: "from-ticket-page", children: /* @__PURE__ */ c(
|
|
107
|
+
D,
|
|
108
|
+
{
|
|
109
|
+
status: "error",
|
|
110
|
+
title: "无法打开工程",
|
|
111
|
+
subTitle: h,
|
|
112
|
+
extra: /* @__PURE__ */ c(
|
|
113
|
+
R,
|
|
114
|
+
{
|
|
115
|
+
type: "primary",
|
|
116
|
+
onClick: () => w.replace(
|
|
117
|
+
N({ search: m.search })
|
|
118
|
+
),
|
|
119
|
+
children: "返回工作台"
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
) }) : /* @__PURE__ */ c("div", { className: "from-ticket-page", children: /* @__PURE__ */ _("div", { className: "from-ticket-page__panel", children: [
|
|
124
|
+
/* @__PURE__ */ c(U, { size: "large" }),
|
|
125
|
+
/* @__PURE__ */ c("p", { className: "from-ticket-page__step", children: P }),
|
|
126
|
+
S ? /* @__PURE__ */ c("p", { className: "from-ticket-page__hint", children: S }) : null,
|
|
127
|
+
k.length > 0 ? /* @__PURE__ */ c("ul", { className: "from-ticket-page__done-list", children: k.filter((t) => t.trim().length > 0).map((t, r) => /* @__PURE__ */ _(
|
|
128
|
+
"li",
|
|
129
|
+
{
|
|
130
|
+
className: "from-ticket-page__done-item",
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ c(b, { className: "from-ticket-page__done-icon" }),
|
|
133
|
+
/* @__PURE__ */ c("span", { children: t })
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
`${r}-${t}`
|
|
137
|
+
)) }) : null
|
|
138
|
+
] }) });
|
|
139
|
+
}
|
|
140
|
+
export {
|
|
141
|
+
nt as default
|
|
142
|
+
};
|