@yuku123/z-team-component 0.2.91 → 0.2.93

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 (54) hide show
  1. package/dist/{ChangeLogView-DagOxr6O.js → ChangeLogView-BjV4gBq4.js} +12 -12
  2. package/dist/ComponentDoc-C9lt-45y.js +8035 -0
  3. package/dist/{InvitationManagementPage-DYoqQA0v.js → InvitationManagementPage-CWtBWLd9.js} +1 -1
  4. package/dist/{OnboardingPage-D2Gm8MRd.js → OnboardingPage-B2fwh4gu.js} +2 -2
  5. package/dist/{ScheduledTasks-DB3VxAnb.js → ScheduledTasks-CuQyjAK-.js} +4341 -4337
  6. package/dist/{SystemShell-D3jHItxY.js → SystemShell-CTkRb3jk.js} +11 -12
  7. package/dist/admin-logs-Dh41ezP6.js +198 -0
  8. package/dist/{api-DYsAzJJo.js → api-ChrRZOc4.js} +1 -1
  9. package/dist/createWorkspaceWsHandler-DMw_Vk6i.js +13135 -0
  10. package/dist/{index-152G-_4j.js → index-3JPBTMXq.js} +5 -6
  11. package/dist/{index-CLD5lLa6.js → index-7glbcqX1.js} +19 -19
  12. package/dist/{index-CSpckSHg.js → index-BYpA6zMn.js} +23 -23
  13. package/dist/{index-BydWNuk5.js → index-BZCQSW-G.js} +44 -51
  14. package/dist/{index-CLfhHxPf.js → index-B_2fxZ6u.js} +1 -1
  15. package/dist/{index-B5dDwxhs.js → index-BnRRZ6Iv.js} +1 -1
  16. package/dist/{index-W_4faD_M.js → index-C-XgeN0c.js} +2 -2
  17. package/dist/index-CA0ql0r3.js +3495 -0
  18. package/dist/{index-CgWa7RFv.js → index-CIGBLmd6.js} +23 -24
  19. package/dist/{index-Cggl78j7.js → index-CLSOhZRs.js} +5 -6
  20. package/dist/index-CLnmI_a7.js +316 -0
  21. package/dist/{index-BfzgRKii.js → index-CSXrOBjf.js} +90 -91
  22. package/dist/{index-ues0LW7p.js → index-CdqU0NUf.js} +1257 -1258
  23. package/dist/{index-BMQ6XkO3.js → index-CnWYolUK.js} +1 -1
  24. package/dist/{index-CYyFYmlZ.js → index-CrQpBHe1.js} +8 -9
  25. package/dist/{index-BZ12pY96.js → index-D1_tbmUH.js} +2 -2
  26. package/dist/{index-CZyFAmEq.js → index-DNo7i9f6.js} +10 -11
  27. package/dist/{index-DE82vM_4.js → index-DPyEBso8.js} +19 -18
  28. package/dist/{index-DyQ9YnMd.js → index-DdvzONMo.js} +3663 -3537
  29. package/dist/{index-Dwqa30HZ.js → index-Dq4oBpcb.js} +4 -4
  30. package/dist/{index-C8cR7lJw.js → index-DtIPLfks.js} +10 -11
  31. package/dist/{index-Cw6MIoNv.js → index-Dy6vNz1c.js} +6 -7
  32. package/dist/{index-VGtET31b.js → index-bkqC-Ys8.js} +1 -1
  33. package/dist/{index-E4Q6JmzX.js → index-fab1eszg.js} +3 -3
  34. package/dist/{index-BYe87pnq.js → index-vIdK5WMU.js} +11 -12
  35. package/dist/index.js +1 -1
  36. package/dist/{instance-CI6-4BZ6.js → instance-BY043pYn.js} +1 -1
  37. package/dist/{menuPermission-C33I6ujb.js → menuPermission-BeYwZcoW.js} +11 -11
  38. package/dist/pages.js +8 -8
  39. package/dist/{send-default-agent-team-message-c5oKdQQA.js → send-default-agent-team-message-BN61cG7q.js} +1 -1
  40. package/dist/{sso-user-DToM5dPy.js → sso-user-DmsDr1MJ.js} +1 -1
  41. package/dist/{training-B38tnwLL.js → training-CU6j5m-5.js} +1 -1
  42. package/dist/webide-BYaEjOx6.js +5233 -0
  43. package/dist/z-team-component.css +1 -26
  44. package/package.json +3 -2
  45. package/dist/ComponentDoc-Bqfu128t.js +0 -3998
  46. package/dist/admin-logs-ogvMwS4O.js +0 -302
  47. package/dist/api-BftpestH.js +0 -2156
  48. package/dist/createWorkspaceWsHandler-D8h5BEzH.js +0 -13030
  49. package/dist/index-BaCqZeiw.js +0 -1143
  50. package/dist/index-CUVdeb8y.js +0 -638
  51. package/dist/index-DVaTGA2z.js +0 -3488
  52. package/dist/schedule-ChO2xIGd.js +0 -625
  53. package/dist/useAppStore-uc8v8XZC.js +0 -1920
  54. package/dist/webide-BuUYLPSp.js +0 -8399
@@ -1,26 +1,25 @@
1
1
  import { jsx as c, jsxs as _ } from "react/jsx-runtime";
2
- import { i as $, t as x, p as O, c as b, b as v } from "./api-BftpestH.js";
3
- import { CheckCircleFilled as F } from "@ant-design/icons";
2
+ import { c as $, d as j, t as x, p as O, e as v, g as F } from "./ComponentDoc-C9lt-45y.js";
3
+ import { CheckCircleFilled as b } from "@ant-design/icons";
4
4
  import { Result as D, Button as R, Spin as U } from "antd";
5
5
  import B from "query-string";
6
- import { useMemo as j, useState as f, useRef as q, useCallback as A, useEffect as J } from "react";
6
+ import { useMemo as y, useState as f, useRef as q, useCallback as A, useEffect as J } from "react";
7
7
  import { useLocation as W } from "react-router-dom";
8
- import { h as y } from "./history-BlrA1eaW.js";
9
- import { l as Z, j as z, f as H, b as L, p as M } from "./instance-CI6-4BZ6.js";
10
- import { u as w } from "./useAppStore-uc8v8XZC.js";
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-BY043pYn.js";
11
10
  import { b as N } from "./mobile-client-O3yr9h6t.js";
12
- function ct() {
11
+ function nt() {
13
12
  const m = W(), p = B.parse(m.search), o = String(
14
13
  p.projectId ?? p.project_id ?? ""
15
- ).trim(), a = String(p.ticketId ?? p.ticket_id ?? "").trim(), e = j(() => {
14
+ ).trim(), a = String(p.ticketId ?? p.ticket_id ?? "").trim(), e = y(() => {
16
15
  if (!o)
17
16
  return null;
18
17
  const t = x(o);
19
18
  return $(t) ? t : null;
20
- }, [o]), u = w((t) => t.token), T = w((t) => t.expandProject), [h, l] = f(""), [P, n] = f("正在启动…"), [k, C] = f([]), g = q(!1), i = A((t, r) => {
21
- C((s) => [...s, t]), n(r);
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);
22
21
  }, []), I = async (t) => {
23
- i("协作区已就绪", "正在同步工程列表…"), await T(t), i("工作区已准备", "即将进入工作台…"), y.replace(
22
+ s("协作区已就绪", "正在同步工程列表…"), await T(t), s("工作区已准备", "即将进入工作台…"), w.replace(
24
23
  N({
25
24
  projectId: t.id,
26
25
  search: m.search
@@ -32,32 +31,32 @@ function ct() {
32
31
  if (r.status === "NOT_FOUND" || !r.scenarioInstance)
33
32
  throw new Error("PROJECT_NOT_FOUND");
34
33
  n("正在加入协作区…");
35
- const s = await z(t, u);
36
- i("已加入协作区", "正在打开协作区…"), await I(s);
34
+ const i = await z(t, u);
35
+ s("已加入协作区", "正在打开协作区…"), await I(i);
37
36
  }, E = async () => {
38
37
  n("正在检查工单信息…");
39
38
  const t = await H(a);
40
- i("工单信息已获取", "正在解析工程绑定…");
39
+ s("工单信息已获取", "正在解析工程绑定…");
41
40
  const r = O(t);
42
41
  if (r != null) {
43
- i("已定位协作区", `正在打开协作区 ${r}…`), await d(r);
42
+ s("已定位协作区", `正在打开协作区 ${r}…`), await d(r);
44
43
  return;
45
44
  }
46
45
  n("正在初始化工程…");
47
- const s = await b(
46
+ const i = await v(
48
47
  L(t, a),
49
48
  u
50
49
  );
51
50
  n("正在关联工单…");
52
51
  try {
53
- await v(
52
+ await F(
54
53
  a,
55
- s.id,
54
+ i.id,
56
55
  M(t)
57
56
  );
58
57
  } catch {
59
58
  }
60
- n("正在初始化工作区…"), await I(s);
59
+ n("正在初始化工作区…"), await I(i);
61
60
  };
62
61
  J(() => {
63
62
  if (!g.current) {
@@ -102,8 +101,8 @@ function ct() {
102
101
  }
103
102
  })();
104
103
  }
105
- }, [i, e, o, a, u]);
106
- const S = j(() => e != null && a ? `工单 ${a} · 工程 ${e}` : e != null ? `工程 ${e}` : a ? `工单 ${a}` : "", [e, a]);
104
+ }, [s, e, o, a, u]);
105
+ const S = y(() => e != null && a ? `工单 ${a} · 工程 ${e}` : e != null ? `工程 ${e}` : a ? `工单 ${a}` : "", [e, a]);
107
106
  return h ? /* @__PURE__ */ c("div", { className: "from-ticket-page", children: /* @__PURE__ */ c(
108
107
  D,
109
108
  {
@@ -114,7 +113,7 @@ function ct() {
114
113
  R,
115
114
  {
116
115
  type: "primary",
117
- onClick: () => y.replace(
116
+ onClick: () => w.replace(
118
117
  N({ search: m.search })
119
118
  ),
120
119
  children: "返回工作台"
@@ -130,7 +129,7 @@ function ct() {
130
129
  {
131
130
  className: "from-ticket-page__done-item",
132
131
  children: [
133
- /* @__PURE__ */ c(F, { className: "from-ticket-page__done-icon" }),
132
+ /* @__PURE__ */ c(b, { className: "from-ticket-page__done-icon" }),
134
133
  /* @__PURE__ */ c("span", { children: t })
135
134
  ]
136
135
  },
@@ -139,5 +138,5 @@ function ct() {
139
138
  ] }) });
140
139
  }
141
140
  export {
142
- ct as default
141
+ nt as default
143
142
  };
@@ -1,13 +1,12 @@
1
1
  import { jsxs as i, jsx as e, Fragment as le } from "react/jsx-runtime";
2
2
  import { useState as u, useEffect as re, useCallback as O } from "react";
3
- import { a as b, f as $, B, u as D } from "./api-BftpestH.js";
4
- import { u as F } from "./useAppStore-uc8v8XZC.js";
3
+ import { a as b, f as $, B, u as D, d as F } from "./ComponentDoc-C9lt-45y.js";
5
4
  import { SearchOutlined as Ce, ReloadOutlined as Se, PlusOutlined as Te, FileZipOutlined as Z, CloudDownloadOutlined as Y, EditOutlined as he, UserSwitchOutlined as Ue, ArrowLeftOutlined as fe, UserOutlined as be, CloudUploadOutlined as $e, PictureOutlined as de, EyeOutlined as Be } from "@ant-design/icons";
6
5
  import { message as U, Input as H, Tooltip as se, Button as g, Spin as ce, Empty as De, Popconfirm as pe, Tag as ie, Modal as Re, Select as Pe, Upload as me, Tabs as Le } from "antd";
7
6
  import ve from "react-markdown";
8
7
  import _e from "rehype-highlight";
9
8
  import ge from "remark-gfm";
10
- import { M as oa } from "./index-Cw6MIoNv.js";
9
+ import { M as na } from "./index-Dy6vNz1c.js";
11
10
  function j(a) {
12
11
  return a ? `?token=${encodeURIComponent(a)}` : "";
13
12
  }
@@ -901,7 +900,7 @@ function Gt({ category: a }) {
901
900
  }
902
901
  ) });
903
902
  }
904
- function ta({ tab: a }) {
903
+ function ea({ tab: a }) {
905
904
  return a === "coming" ? /* @__PURE__ */ i("div", { className: t.comingSoon, children: [
906
905
  /* @__PURE__ */ e("div", { className: t.comingSoonIcon, children: "🧩" }),
907
906
  /* @__PURE__ */ e("div", { className: t.comingSoonTitle, children: "更多分类敬请期待" }),
@@ -909,6 +908,6 @@ function ta({ tab: a }) {
909
908
  ] }) : /* @__PURE__ */ e(Gt, { category: a });
910
909
  }
911
910
  export {
912
- oa as MARKET_TABS,
913
- ta as MarketContent
911
+ na as MARKET_TABS,
912
+ ea as MarketContent
914
913
  };
@@ -0,0 +1,316 @@
1
+ import { a as h, f as _, B as N, v as A, t as g } from "./ComponentDoc-C9lt-45y.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
+ };