@yuku123/z-team-component 0.2.25 → 0.2.26

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuku123/z-team-component",
3
- "version": "0.2.25",
3
+ "version": "0.2.26",
4
4
  "description": "z-team 团队工作台组件层(lead 005 §8.7:403 文件整体接管,含 pages/workspace/ 系统模式集成 shell)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,70 +0,0 @@
1
- function u() {
2
- if (typeof window > "u") return null;
3
- try {
4
- const t = localStorage.getItem("USER_INFO");
5
- if (t) return JSON.parse(t);
6
- const a = localStorage.getItem("userInfo") || localStorage.getItem("user_info");
7
- if (!a) return null;
8
- const e = JSON.parse(a), o = {
9
- name: String(e.nickname || e.name || ""),
10
- jobNumber: String(e.userId || e.jobNumber || ""),
11
- username: String(e.username || e.account || e.name || ""),
12
- staffId: typeof e.userId == "number" ? e.userId : Number(e.userId) || 0
13
- };
14
- return localStorage.setItem("USER_INFO", JSON.stringify(o)), window.USER_INFO = o, o;
15
- } catch {
16
- return null;
17
- }
18
- }
19
- async function l() {
20
- const t = () => {
21
- localStorage.removeItem("USER_INFO"), window.USER_INFO = void 0;
22
- };
23
- try {
24
- const a = new AbortController(), e = setTimeout(() => a.abort(), 1500), o = await fetch("/kapi/z-ctc/api/ctc/authn/whoami", {
25
- method: "GET",
26
- credentials: "include",
27
- headers: { Accept: "application/json" },
28
- signal: a.signal
29
- });
30
- if (clearTimeout(e), o.status === 401)
31
- return t(), { kind: "unauthenticated" };
32
- if (!o.ok)
33
- return { kind: "unavailable" };
34
- const n = await o.json();
35
- if (!n.success || !n.data)
36
- return t(), { kind: "unauthenticated" };
37
- const r = n.data.user_id ?? n.data.userId, s = {
38
- name: n.data.nickname || n.data.username,
39
- jobNumber: r != null ? String(r) : "",
40
- username: n.data.username
41
- };
42
- localStorage.setItem("USER_INFO", JSON.stringify(s)), localStorage.setItem(
43
- "ctcUrl",
44
- encodeURIComponent(window.location.origin)
45
- ), window.USER_INFO = s;
46
- const i = localStorage.getItem("token") || localStorage.getItem("z_team_token");
47
- i && localStorage.setItem("token", i);
48
- const c = {
49
- userId: r,
50
- id: r,
51
- userName: n.data.username,
52
- username: n.data.username,
53
- nickname: n.data.nickname
54
- };
55
- return localStorage.setItem("userInfo", JSON.stringify(c)), { kind: "authenticated", user: s };
56
- } catch {
57
- return t(), { kind: "unavailable" };
58
- }
59
- }
60
- function m() {
61
- const t = new URL(window.location.href);
62
- t.searchParams.has("_from_login") || t.searchParams.set("_from_login", "1");
63
- const a = `/login?redirect=${encodeURIComponent(t.toString())}`;
64
- window.location.href = a;
65
- }
66
- export {
67
- l as f,
68
- m as r,
69
- u as s
70
- };
@@ -1,499 +0,0 @@
1
- import { jsxs as s, jsx as a, Fragment as me } from "react/jsx-runtime";
2
- import { h as be, j as X, k as he } from "./api--Fg0hL9Y.js";
3
- import { message as Z, Button as _e, DatePicker as pe, Spin as A, Empty as q, Tag as J } from "antd";
4
- import D from "dayjs";
5
- import "./echarts-B1OU1xr4.js";
6
- import { useState as p, useCallback as R, useEffect as S, useMemo as W, useRef as Q } from "react";
7
- import * as ge from "echarts/core";
8
- const ue = "_screen_bbb14_2", fe = "_banner_bbb14_14", ye = "_shareBtn_bbb14_22", ve = "_bannerInner_bbb14_49", Ne = "_bannerLeft_bbb14_56", De = "_bannerTitle_bbb14_62", Te = "_bannerSubtitle_bbb14_70", Se = "_stats_bbb14_76", Ce = "_statItem_bbb14_82", Le = "_statNum_bbb14_89", we = "_statLabel_bbb14_96", Be = "_statDivider_bbb14_101", Re = "_chartSection_bbb14_108", xe = "_chartInner_bbb14_114", Ie = "_chartHeader_bbb14_121", Oe = "_chartHeaderLeft_bbb14_129", Ee = "_chartRangeWrap_bbb14_135", He = "_rangeBtns_bbb14_142", Ae = "_rangeBtn_bbb14_142", We = "_rangeBtnActive_bbb14_166", ke = "_chartRangePicker_bbb14_179", Me = "_chartTitle_bbb14_193", $e = "_chartSubtitle_bbb14_200", Ve = "_chartBody_bbb14_206", je = "_chartLoading_bbb14_210", ze = "_chartEmpty_bbb14_211", Pe = "_main_bbb14_221", Ge = "_timeline_bbb14_232", Fe = "_timelineHeader_bbb14_243", Ye = "_timelineScroll_bbb14_252", Ke = "_timelineItem_bbb14_258", Xe = "_timelineItemActive_bbb14_273", Ze = "_timelineDot_bbb14_278", qe = "_timelineContent_bbb14_293", Je = "_timelineTop_bbb14_298", Qe = "_versionTag_bbb14_305", Ue = "_versionDate_bbb14_311", et = "_timelineSummary_bbb14_316", tt = "_timelineMeta_bbb14_326", at = "_latestBadge_bbb14_332", nt = "_detail_bbb14_344", it = "_detailHeader_bbb14_355", rt = "_detailTitleRow_bbb14_361", st = "_detailVersion_bbb14_367", lt = "_detailDate_bbb14_373", ct = "_detailSummary_bbb14_378", ot = "_detailScroll_bbb14_385", dt = "_pointGrid_bbb14_392", mt = "_pointCard_bbb14_398", bt = "_pointHead_bbb14_412", ht = "_pointTitle_bbb14_420", _t = "_pointHeadRight_bbb14_428", pt = "_committerTag_bbb14_437", gt = "_pointTag_bbb14_448", ut = "_pointDetail_bbb14_454", ft = "_loadingWrap_bbb14_462", yt = "_emptyWrap_bbb14_469", e = {
9
- screen: ue,
10
- banner: fe,
11
- shareBtn: ye,
12
- bannerInner: ve,
13
- bannerLeft: Ne,
14
- bannerTitle: De,
15
- bannerSubtitle: Te,
16
- stats: Se,
17
- statItem: Ce,
18
- statNum: Le,
19
- statLabel: we,
20
- statDivider: Be,
21
- chartSection: Re,
22
- chartInner: xe,
23
- chartHeader: Ie,
24
- chartHeaderLeft: Oe,
25
- chartRangeWrap: Ee,
26
- rangeBtns: He,
27
- rangeBtn: Ae,
28
- rangeBtnActive: We,
29
- chartRangePicker: ke,
30
- chartTitle: Me,
31
- chartSubtitle: $e,
32
- chartBody: Ve,
33
- chartLoading: je,
34
- chartEmpty: ze,
35
- main: Pe,
36
- timeline: Ge,
37
- timelineHeader: Fe,
38
- timelineScroll: Ye,
39
- timelineItem: Ke,
40
- timelineItemActive: Xe,
41
- timelineDot: Ze,
42
- timelineContent: qe,
43
- timelineTop: Je,
44
- versionTag: Qe,
45
- versionDate: Ue,
46
- timelineSummary: et,
47
- timelineMeta: tt,
48
- latestBadge: at,
49
- detail: nt,
50
- detailHeader: it,
51
- detailTitleRow: rt,
52
- detailVersion: st,
53
- detailDate: lt,
54
- detailSummary: ct,
55
- detailScroll: ot,
56
- pointGrid: dt,
57
- pointCard: mt,
58
- pointHead: bt,
59
- pointTitle: ht,
60
- pointHeadRight: _t,
61
- committerTag: pt,
62
- pointTag: gt,
63
- pointDetail: ut,
64
- loadingWrap: ft,
65
- emptyWrap: yt
66
- }, vt = {
67
- 新功能: "green",
68
- 优化: "blue",
69
- 修复: "orange",
70
- 重构: "purple",
71
- 其他: "default"
72
- }, k = {
73
- 新功能: "#52c41a",
74
- 优化: "#2f70f1",
75
- 修复: "#fa8c16",
76
- 重构: "#722ed1",
77
- 其他: "#8c8c8c"
78
- }, U = 8;
79
- function Nt({
80
- option: C,
81
- height: L = 320
82
- }) {
83
- const l = Q(null), g = Q(null);
84
- return S(() => {
85
- if (!l.current) return;
86
- g.current || (g.current = ge.init(l.current)), g.current.setOption(C, !0);
87
- const h = () => {
88
- var y;
89
- return (y = g.current) == null ? void 0 : y.resize();
90
- };
91
- return window.addEventListener("resize", h), () => window.removeEventListener("resize", h);
92
- }, [C]), S(
93
- () => () => {
94
- var h;
95
- (h = g.current) == null || h.dispose(), g.current = null;
96
- },
97
- []
98
- ), /* @__PURE__ */ a("div", { ref: l, style: { width: "100%", height: `${L}px` } });
99
- }
100
- function Bt() {
101
- const [C, L] = p(!1), [l, g] = p([]), [h, y] = p(null), [f, M] = p(null), [ee, $] = p(!1), [x, te] = p(
102
- {}
103
- ), [ae, V] = p(!1), [w, T] = p([
104
- D().subtract(6, "day").startOf("day"),
105
- D().endOf("day")
106
- ]), [I, j] = p("7"), z = R(async () => {
107
- L(!0);
108
- try {
109
- const r = [...await be("z-team")].sort(
110
- (c, o) => new Date(o.commitDate).getTime() - new Date(c.commitDate).getTime()
111
- );
112
- g(r), r.length > 0 ? y(r[0].id) : (y(null), M(null));
113
- } catch (n) {
114
- console.error("[ChangeLogFullScreen] load versions error:", n);
115
- } finally {
116
- L(!1);
117
- }
118
- }, []), P = R(async (n) => {
119
- $(!0);
120
- try {
121
- const r = await X(n, void 0, "z-team");
122
- M(r);
123
- } catch (r) {
124
- console.error("[ChangeLogFullScreen] load detail error:", r);
125
- } finally {
126
- $(!1);
127
- }
128
- }, []);
129
- S(() => {
130
- z();
131
- }, [z]), S(() => {
132
- if (l.length === 0) return;
133
- let n = !1;
134
- return V(!0), Promise.all(
135
- l.map(
136
- (r) => X(r.id, void 0, "z-team").catch((c) => (console.warn(
137
- `[ChangeLogFullScreen] failed to load detail for version ${r.version}`,
138
- c
139
- ), null))
140
- )
141
- ).then((r) => {
142
- if (n) return;
143
- const c = {};
144
- r.forEach((o, d) => {
145
- o && (c[l[d].id] = o);
146
- }), te(c);
147
- }).finally(() => {
148
- n || V(!1);
149
- }), () => {
150
- n = !0;
151
- };
152
- }, [l]), S(() => {
153
- h != null && P(h);
154
- }, [h, P]);
155
- const O = W(() => {
156
- const n = l.length, r = l.reduce(
157
- (o, d) => o + (d.pointCount ?? 0),
158
- 0
159
- );
160
- let c = 0;
161
- if (l.length >= 2) {
162
- const o = l.map((d) => new Date(d.commitDate).getTime()).filter((d) => !Number.isNaN(d));
163
- o.length >= 2 && (c = Math.round(
164
- (Math.max(...o) - Math.min(...o)) / 864e5
165
- ));
166
- }
167
- return { versionCount: n, pointTotal: r, spanDays: c };
168
- }, [l]), G = W(() => {
169
- if (!w) return l;
170
- const [n, r] = w, c = n.startOf("day").valueOf(), o = r.endOf("day").valueOf();
171
- return l.filter((d) => {
172
- const v = new Date(d.commitDate).getTime();
173
- return !Number.isNaN(v) && v >= c && v <= o;
174
- });
175
- }, [l, w]), { chartOption: ne, hasChartData: ie } = W(() => {
176
- const n = [...G].sort(
177
- (t, i) => new Date(t.commitDate).getTime() - new Date(i.commitDate).getTime()
178
- ), r = n.map((t) => t.commitDate), c = /* @__PURE__ */ new Set(), o = {};
179
- Object.values(x).forEach((t) => {
180
- t.items.forEach((i) => {
181
- if (i.category ? c.add(i.category) : c.add("其他"), i.committers) {
182
- const m = i.committers.split(",").map((b) => b.trim()).filter(Boolean);
183
- if (m.length > 0) {
184
- const b = 1 / m.length;
185
- m.forEach((_) => {
186
- o[_] = (o[_] || 0) + b;
187
- });
188
- }
189
- }
190
- });
191
- });
192
- const d = ["新功能", "优化", "修复", "重构", "其他"].filter(
193
- (t) => c.has(t)
194
- );
195
- c.forEach((t) => {
196
- d.includes(t) || d.push(t);
197
- });
198
- const v = Object.entries(o).sort((t, i) => i[1] - t[1]).map(([t]) => t), se = v.slice(0, U), F = v.length > U, N = {};
199
- d.forEach(
200
- (t) => N[t] = new Array(r.length).fill(0)
201
- );
202
- const u = {};
203
- se.forEach(
204
- (t) => u[t] = new Array(r.length).fill(0)
205
- ), F && (u.其他 = new Array(r.length).fill(0)), n.forEach((t, i) => {
206
- const m = x[t.id];
207
- m && m.items.forEach((b) => {
208
- const _ = b.category || "其他";
209
- if (N[_] && (N[_][i] += 1), b.committers) {
210
- const H = b.committers.split(",").map((B) => B.trim()).filter(Boolean);
211
- if (H.length > 0) {
212
- const B = 1 / H.length;
213
- H.forEach((K) => {
214
- u[K] ? u[K][i] += B : F && (u.其他[i] += B);
215
- });
216
- }
217
- }
218
- });
219
- });
220
- const le = n.reduce((t, i) => {
221
- const m = t.length > 0 ? t[t.length - 1] : 0;
222
- return t.push(m + (i.pointCount ?? 0)), t;
223
- }, []), Y = {};
224
- d.forEach((t) => {
225
- Y[t] = N[t].reduce((i, m) => {
226
- const b = i.length > 0 ? i[i.length - 1] : 0;
227
- return i.push(b + m), i;
228
- }, []);
229
- });
230
- const ce = [
231
- ...d.map((t) => ({
232
- name: t,
233
- type: "bar",
234
- stack: "category",
235
- data: N[t],
236
- itemStyle: { color: k[t] || "#8c8c8c" },
237
- barMaxWidth: 40
238
- })),
239
- ...Object.keys(u).map((t) => ({
240
- name: `@${t}`,
241
- type: "bar",
242
- stack: "committer",
243
- data: u[t],
244
- barMaxWidth: 40
245
- })),
246
- {
247
- name: "要点累计",
248
- type: "line",
249
- yAxisIndex: 1,
250
- data: le,
251
- smooth: !0,
252
- symbol: "circle",
253
- symbolSize: 6,
254
- lineStyle: { color: "#2f70f1", width: 2 },
255
- itemStyle: { color: "#2f70f1", borderWidth: 2 }
256
- },
257
- ...d.map((t) => ({
258
- name: `${t}累计`,
259
- type: "line",
260
- yAxisIndex: 1,
261
- data: Y[t],
262
- smooth: !0,
263
- symbol: "circle",
264
- symbolSize: 4,
265
- lineStyle: {
266
- color: k[t] || "#8c8c8c",
267
- width: 2
268
- },
269
- itemStyle: { color: k[t] || "#8c8c8c" }
270
- }))
271
- ], oe = {
272
- tooltip: {
273
- trigger: "axis",
274
- axisPointer: { type: "shadow" },
275
- backgroundColor: "rgba(255,255,255,0.96)",
276
- borderColor: "#f0f0f0",
277
- textStyle: { color: "#262626" },
278
- formatter: (t) => {
279
- if (!Array.isArray(t) || t.length === 0) return "";
280
- let m = `<div style="font-weight:600;margin-bottom:6px;">${t[0].axisValue}</div>`;
281
- return t.forEach((b) => {
282
- const _ = Number(b.value) || 0;
283
- _ > 0 && (m += `<div style="display:flex;align-items:center;gap:8px;line-height:1.8;">
284
- <span style="display:inline-block;width:10px;height:10px;border-radius:50%;background:${b.color};"></span>
285
- <span style="flex:1;">${b.seriesName}</span>
286
- <span style="font-weight:600;">${Number.isInteger(_) ? _ : _.toFixed(2)}</span>
287
- </div>`);
288
- }), m;
289
- }
290
- },
291
- legend: {
292
- type: "scroll",
293
- top: 0,
294
- left: "center",
295
- itemGap: 16,
296
- textStyle: { color: "#595959" }
297
- },
298
- grid: {
299
- left: 16,
300
- right: 16,
301
- bottom: 24,
302
- top: 48,
303
- containLabel: !0
304
- },
305
- xAxis: {
306
- type: "category",
307
- data: r,
308
- axisLine: { lineStyle: { color: "#d9d9d9" } },
309
- axisLabel: {
310
- rotate: r.length > 12 ? 30 : 0,
311
- formatter: (t) => {
312
- const i = new Date(t).getDay();
313
- return i >= 1 && i <= 5 ? `{weekday|${t}}` : `{weekend|${t}}`;
314
- },
315
- rich: {
316
- weekday: { color: "#262626", fontWeight: 600 },
317
- weekend: { color: "#bfbfbf" }
318
- }
319
- }
320
- },
321
- yAxis: [
322
- {
323
- type: "value",
324
- splitLine: { lineStyle: { color: "#f0f0f0" } },
325
- axisLabel: { color: "#8c8c8c" }
326
- },
327
- {
328
- type: "value",
329
- position: "right",
330
- splitLine: { show: !1 },
331
- axisLabel: { color: "#2f70f1" }
332
- }
333
- ],
334
- series: ce,
335
- animationDuration: 600
336
- }, de = n.length > 0 && (Object.values(N).some((t) => t.some((i) => i > 0)) || Object.values(u).some((t) => t.some((i) => i > 0)));
337
- return { chartOption: oe, hasChartData: de };
338
- }, [G, x]), re = R(async () => {
339
- const n = window.location.href;
340
- try {
341
- await navigator.clipboard.writeText(n), Z.success("链接已复制,可直接发送");
342
- } catch {
343
- Z.error("复制失败,请手动复制地址栏链接");
344
- }
345
- }, []), E = R((n) => {
346
- j(n), T(n === "7" ? [
347
- D().subtract(6, "day").startOf("day"),
348
- D().endOf("day")
349
- ] : n === "30" ? [
350
- D().subtract(29, "day").startOf("day"),
351
- D().endOf("day")
352
- ] : null);
353
- }, []);
354
- return /* @__PURE__ */ s("div", { className: e.screen, children: [
355
- /* @__PURE__ */ s("header", { className: e.banner, children: [
356
- /* @__PURE__ */ s("div", { className: e.bannerInner, children: [
357
- /* @__PURE__ */ s("div", { className: e.bannerLeft, children: [
358
- /* @__PURE__ */ a("h1", { className: e.bannerTitle, children: "Z Team 产品迭代日志" }),
359
- /* @__PURE__ */ a("p", { className: e.bannerSubtitle, children: "每一次代码提交背后,都是产品的进化" })
360
- ] }),
361
- /* @__PURE__ */ s("div", { className: e.stats, children: [
362
- /* @__PURE__ */ s("div", { className: e.statItem, children: [
363
- /* @__PURE__ */ a("div", { className: e.statNum, children: O.versionCount }),
364
- /* @__PURE__ */ a("div", { className: e.statLabel, children: "迭代版本" })
365
- ] }),
366
- /* @__PURE__ */ a("div", { className: e.statDivider }),
367
- /* @__PURE__ */ s("div", { className: e.statItem, children: [
368
- /* @__PURE__ */ a("div", { className: e.statNum, children: O.pointTotal }),
369
- /* @__PURE__ */ a("div", { className: e.statLabel, children: "产品要点" })
370
- ] }),
371
- /* @__PURE__ */ a("div", { className: e.statDivider }),
372
- /* @__PURE__ */ s("div", { className: e.statItem, children: [
373
- /* @__PURE__ */ a("div", { className: e.statNum, children: O.spanDays }),
374
- /* @__PURE__ */ a("div", { className: e.statLabel, children: "持续天数" })
375
- ] })
376
- ] })
377
- ] }),
378
- /* @__PURE__ */ a(
379
- _e,
380
- {
381
- className: e.shareBtn,
382
- type: "default",
383
- ghost: !0,
384
- onClick: re,
385
- children: "分享链接"
386
- }
387
- )
388
- ] }),
389
- /* @__PURE__ */ a("section", { className: e.chartSection, children: /* @__PURE__ */ s("div", { className: e.chartInner, children: [
390
- /* @__PURE__ */ s("div", { className: e.chartHeader, children: [
391
- /* @__PURE__ */ s("div", { className: e.chartHeaderLeft, children: [
392
- /* @__PURE__ */ a("h2", { className: e.chartTitle, children: "迭代节奏与贡献分布" }),
393
- /* @__PURE__ */ a("p", { className: e.chartSubtitle, children: "两根柱:类型拆分 · 人员拆分(多人贡献均摊);折线:各类型/总量累计" })
394
- ] }),
395
- /* @__PURE__ */ s("div", { className: e.chartRangeWrap, children: [
396
- /* @__PURE__ */ s("div", { className: e.rangeBtns, children: [
397
- /* @__PURE__ */ a(
398
- "button",
399
- {
400
- className: I === "7" ? e.rangeBtnActive : e.rangeBtn,
401
- onClick: () => E("7"),
402
- children: "近7天"
403
- }
404
- ),
405
- /* @__PURE__ */ a(
406
- "button",
407
- {
408
- className: I === "30" ? e.rangeBtnActive : e.rangeBtn,
409
- onClick: () => E("30"),
410
- children: "近30天"
411
- }
412
- ),
413
- /* @__PURE__ */ a(
414
- "button",
415
- {
416
- className: I === "all" ? e.rangeBtnActive : e.rangeBtn,
417
- onClick: () => E("all"),
418
- children: "全部"
419
- }
420
- )
421
- ] }),
422
- /* @__PURE__ */ a(
423
- pe.RangePicker,
424
- {
425
- className: e.chartRangePicker,
426
- value: w,
427
- allowClear: !0,
428
- placeholder: ["开始日期", "结束日期"],
429
- onChange: (n) => {
430
- j(""), n && n[0] && n[1] ? T([n[0], n[1]]) : T(null);
431
- }
432
- }
433
- )
434
- ] })
435
- ] }),
436
- /* @__PURE__ */ a("div", { className: e.chartBody, children: ae ? /* @__PURE__ */ a("div", { className: e.chartLoading, children: /* @__PURE__ */ a(A, { description: "正在生成统计图表..." }) }) : ie ? /* @__PURE__ */ a(Nt, { option: ne, height: 360 }) : /* @__PURE__ */ a("div", { className: e.chartEmpty, children: "暂无足够数据生成图表" }) })
437
- ] }) }),
438
- /* @__PURE__ */ s("main", { className: e.main, children: [
439
- /* @__PURE__ */ s("aside", { className: e.timeline, children: [
440
- /* @__PURE__ */ a("div", { className: e.timelineHeader, children: /* @__PURE__ */ a("span", { children: "迭代时间线" }) }),
441
- /* @__PURE__ */ a("div", { className: e.timelineScroll, children: C ? /* @__PURE__ */ a("div", { className: e.loadingWrap, children: /* @__PURE__ */ a(A, { description: "加载中..." }) }) : l.length === 0 ? /* @__PURE__ */ a("div", { className: e.emptyWrap, children: "暂无迭代记录" }) : l.map((n, r) => /* @__PURE__ */ s(
442
- "div",
443
- {
444
- className: `${e.timelineItem} ${he(h, n.id) ? e.timelineItemActive : ""}`,
445
- onClick: () => y(n.id),
446
- children: [
447
- /* @__PURE__ */ a("div", { className: e.timelineDot }),
448
- /* @__PURE__ */ s("div", { className: e.timelineContent, children: [
449
- /* @__PURE__ */ s("div", { className: e.timelineTop, children: [
450
- /* @__PURE__ */ a("span", { className: e.versionTag, children: n.version }),
451
- /* @__PURE__ */ a("span", { className: e.versionDate, children: n.commitDate })
452
- ] }),
453
- n.summary && /* @__PURE__ */ a("div", { className: e.timelineSummary, title: n.summary, children: n.summary }),
454
- /* @__PURE__ */ a("div", { className: e.timelineMeta, children: /* @__PURE__ */ s("span", { children: [
455
- n.pointCount ?? 0,
456
- " 条产品要点"
457
- ] }) })
458
- ] }),
459
- r === 0 && /* @__PURE__ */ a("span", { className: e.latestBadge, children: "最新" })
460
- ]
461
- },
462
- n.id
463
- )) })
464
- ] }),
465
- /* @__PURE__ */ a("section", { className: e.detail, children: ee ? /* @__PURE__ */ a("div", { className: e.loadingWrap, children: /* @__PURE__ */ a(A, { description: "加载产品要点..." }) }) : f ? /* @__PURE__ */ s(me, { children: [
466
- /* @__PURE__ */ s("div", { className: e.detailHeader, children: [
467
- /* @__PURE__ */ s("div", { className: e.detailTitleRow, children: [
468
- /* @__PURE__ */ a("span", { className: e.detailVersion, children: f.version }),
469
- /* @__PURE__ */ a("span", { className: e.detailDate, children: f.commitDate })
470
- ] }),
471
- f.summary && /* @__PURE__ */ a("div", { className: e.detailSummary, children: f.summary })
472
- ] }),
473
- /* @__PURE__ */ a("div", { className: e.detailScroll, children: f.items.length === 0 ? /* @__PURE__ */ a(q, { description: "该版本下暂无产品迭代要点" }) : /* @__PURE__ */ a("div", { className: e.pointGrid, children: f.items.map((n) => /* @__PURE__ */ s("div", { className: e.pointCard, children: [
474
- /* @__PURE__ */ s("div", { className: e.pointHead, children: [
475
- /* @__PURE__ */ a("span", { className: e.pointTitle, children: n.pointTitle }),
476
- /* @__PURE__ */ s("div", { className: e.pointHeadRight, children: [
477
- n.committers && n.committers.split(",").map((r) => /* @__PURE__ */ s(J, { className: e.committerTag, children: [
478
- "@",
479
- r.trim()
480
- ] }, r)),
481
- n.category && /* @__PURE__ */ a(
482
- J,
483
- {
484
- className: e.pointTag,
485
- color: vt[n.category] || "default",
486
- children: n.category
487
- }
488
- )
489
- ] })
490
- ] }),
491
- n.pointDetail && /* @__PURE__ */ a("div", { className: e.pointDetail, children: n.pointDetail })
492
- ] }, n.id)) }) })
493
- ] }) : /* @__PURE__ */ a("div", { className: e.emptyWrap, children: /* @__PURE__ */ a(q, { description: "选择左侧版本查看产品迭代要点" }) }) })
494
- ] })
495
- ] });
496
- }
497
- export {
498
- Bt as default
499
- };