gs-eant-comp 3.1.8-beta.4 → 3.1.8-beta.7
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/{ActivityFeed-Bn5GrQ_-.js → ActivityFeed-BSO54XHv.js} +1 -1
- package/dist/ActivityTable-BlLGC2R0.js +109 -0
- package/dist/{BannerCarousel-DoO2eo9z.js → BannerCarousel-CRN-UeE3.js} +1 -1
- package/dist/{NoticeList-B-iRfVul.js → NoticeList-Cu2pGUxx.js} +1 -1
- package/dist/NotificationCenter-Dmdkbcd2.js +146 -0
- package/dist/OrderCenter-D_bWQFe4.js +111 -0
- package/dist/{QuickActions-BN4kSvMq.js → QuickActions-DKAXTVuW.js} +1 -1
- package/dist/QuickActionsPanel-CPAAwB0B.js +54 -0
- package/dist/{QuickMenu-DZtWs5Kz.js → QuickMenu-DSTcBeVo.js} +1 -1
- package/dist/{ShoppingCart-Bplwj9qT.js → ShoppingCart-DVNlU5sT.js} +1 -1
- package/dist/{StatCard-CFqnBWxm.js → StatCard-Bjh-TUsx.js} +1 -1
- package/dist/StatCards-Lo-h95Ib.js +91 -0
- package/dist/{TodoList-6_PYexp_.js → TodoList-p_GqCWqx.js} +1 -1
- package/dist/gs-eant-comp.css +1 -1
- package/dist/gs-eant-comp.js +1 -1
- package/dist/gs-eant-comp.umd.cjs +4 -4
- package/dist/{index-DrVwPQsN.js → index-T5xRQR15.js} +3374 -3214
- package/package.json +8 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveComponent as l, createElementBlock as n, openBlock as s, createElementVNode as t, Fragment as v, renderList as _, normalizeStyle as o, createVNode as y, createTextVNode as f, toDisplayString as a } from "vue";
|
|
2
|
-
import { _ as g } from "./index-
|
|
2
|
+
import { _ as g } from "./index-T5xRQR15.js";
|
|
3
3
|
const m = { class: "activity-feed h-100" }, p = { class: "activity-body" }, u = { class: "activity-content" }, B = { class: "activity-text" }, h = { class: "activity-user" }, b = { class: "activity-time" }, k = {
|
|
4
4
|
__name: "ActivityFeed",
|
|
5
5
|
setup(x) {
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { resolveComponent as n, createElementBlock as r, openBlock as o, createElementVNode as y, createVNode as u, withCtx as s, createTextVNode as i, createBlock as d, createCommentVNode as k, toDisplayString as l } from "vue";
|
|
2
|
+
import { _ as g } from "./index-T5xRQR15.js";
|
|
3
|
+
const b = { class: "activity-table" }, f = { class: "table-header" }, x = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "cell-time"
|
|
6
|
+
}, v = {
|
|
7
|
+
key: 2,
|
|
8
|
+
class: "cell-content"
|
|
9
|
+
}, h = {
|
|
10
|
+
__name: "ActivityTable",
|
|
11
|
+
props: {
|
|
12
|
+
data: {
|
|
13
|
+
type: Array,
|
|
14
|
+
default: () => [
|
|
15
|
+
{ time: "10:32", type: "用户", typeColor: "blue", content: "新增注册用户 张伟豪", status: "成功", statusColor: "green" },
|
|
16
|
+
{ time: "10:28", type: "订单", typeColor: "purple", content: "订单 #ORD-2026-1586 已完成支付", status: "成功", statusColor: "green" },
|
|
17
|
+
{ time: "10:15", type: "系统", typeColor: "orange", content: "数据库备份任务执行失败", status: "失败", statusColor: "red" },
|
|
18
|
+
{ time: "09:58", type: "订单", typeColor: "purple", content: "订单 #ORD-2026-1585 已发货", status: "进行中", statusColor: "blue" },
|
|
19
|
+
{ time: "09:42", type: "用户", typeColor: "blue", content: "用户 李明 修改了个人信息", status: "成功", statusColor: "green" },
|
|
20
|
+
{ time: "09:30", type: "财务", typeColor: "green", content: "用户 王芳 申请提现 ¥2,500", status: "待处理", statusColor: "orange" },
|
|
21
|
+
{ time: "09:15", type: "系统", typeColor: "orange", content: "服务器内存使用率达到 85%", status: "警告", statusColor: "orange" },
|
|
22
|
+
{ time: "08:55", type: "订单", typeColor: "purple", content: "订单 #ORD-2026-1584 已取消", status: "失败", statusColor: "red" }
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
loading: {
|
|
26
|
+
type: Boolean,
|
|
27
|
+
default: !1
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
setup(c) {
|
|
31
|
+
const m = [
|
|
32
|
+
{
|
|
33
|
+
title: "时间",
|
|
34
|
+
key: "time",
|
|
35
|
+
width: 70,
|
|
36
|
+
dataIndex: "time"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
title: "类型",
|
|
40
|
+
key: "type",
|
|
41
|
+
width: 80,
|
|
42
|
+
dataIndex: "type"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
title: "内容",
|
|
46
|
+
key: "content",
|
|
47
|
+
dataIndex: "content"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
title: "状态",
|
|
51
|
+
key: "status",
|
|
52
|
+
width: 80,
|
|
53
|
+
dataIndex: "status"
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
return (w, a) => {
|
|
57
|
+
const _ = n("a-button"), p = n("a-tag"), C = n("a-table");
|
|
58
|
+
return o(), r("div", b, [
|
|
59
|
+
y("div", f, [
|
|
60
|
+
a[1] || (a[1] = y("span", { class: "table-title" }, "运营动态", -1)),
|
|
61
|
+
u(_, {
|
|
62
|
+
type: "link",
|
|
63
|
+
size: "small",
|
|
64
|
+
class: "table-more"
|
|
65
|
+
}, {
|
|
66
|
+
default: s(() => [...a[0] || (a[0] = [
|
|
67
|
+
i(" 查看更多 ", -1)
|
|
68
|
+
])]),
|
|
69
|
+
_: 1
|
|
70
|
+
})
|
|
71
|
+
]),
|
|
72
|
+
u(C, {
|
|
73
|
+
columns: m,
|
|
74
|
+
"data-source": c.data,
|
|
75
|
+
pagination: !1,
|
|
76
|
+
loading: c.loading,
|
|
77
|
+
scroll: { y: 280 },
|
|
78
|
+
size: "small",
|
|
79
|
+
"row-key": (e, t) => t
|
|
80
|
+
}, {
|
|
81
|
+
bodyCell: s(({ column: e, record: t }) => [
|
|
82
|
+
e.key === "time" ? (o(), r("span", x, l(t.time), 1)) : e.key === "type" ? (o(), d(p, {
|
|
83
|
+
key: 1,
|
|
84
|
+
color: t.typeColor,
|
|
85
|
+
class: "type-tag"
|
|
86
|
+
}, {
|
|
87
|
+
default: s(() => [
|
|
88
|
+
i(l(t.type), 1)
|
|
89
|
+
]),
|
|
90
|
+
_: 2
|
|
91
|
+
}, 1032, ["color"])) : e.key === "content" ? (o(), r("span", v, l(t.content), 1)) : e.key === "status" ? (o(), d(p, {
|
|
92
|
+
key: 3,
|
|
93
|
+
color: t.statusColor
|
|
94
|
+
}, {
|
|
95
|
+
default: s(() => [
|
|
96
|
+
i(l(t.status), 1)
|
|
97
|
+
]),
|
|
98
|
+
_: 2
|
|
99
|
+
}, 1032, ["color"])) : k("", !0)
|
|
100
|
+
]),
|
|
101
|
+
_: 1
|
|
102
|
+
}, 8, ["data-source", "loading", "row-key"])
|
|
103
|
+
]);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}, D = /* @__PURE__ */ g(h, [["__scopeId", "data-v-ae82798e"]]);
|
|
107
|
+
export {
|
|
108
|
+
D as default
|
|
109
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveComponent as o, createElementBlock as a, openBlock as i, createVNode as s, withCtx as _, Fragment as f, renderList as p, createElementVNode as e, normalizeStyle as g, toDisplayString as n } from "vue";
|
|
2
|
-
import { _ as b } from "./index-
|
|
2
|
+
import { _ as b } from "./index-T5xRQR15.js";
|
|
3
3
|
const m = { class: "banner-carousel h-100" }, u = { class: "banner-info" }, v = { class: "banner-title" }, h = { class: "banner-desc" }, x = { class: "banner-btn" }, y = { class: "banner-icon-wrapper" }, T = {
|
|
4
4
|
__name: "BannerCarousel",
|
|
5
5
|
setup(k) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createElementBlock as l, openBlock as c, createElementVNode as t, Fragment as r, renderList as d, normalizeStyle as e, toDisplayString as s } from "vue";
|
|
2
|
-
import { _ as g } from "./index-
|
|
2
|
+
import { _ as g } from "./index-T5xRQR15.js";
|
|
3
3
|
const f = { class: "notice-list h-100" }, _ = { class: "notice-list-body" }, m = { class: "notice-content" }, C = { class: "notice-title-row" }, p = { class: "notice-title" }, u = { class: "notice-time" }, v = {
|
|
4
4
|
__name: "NoticeList",
|
|
5
5
|
setup(B) {
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { ref as M, computed as d, createElementBlock as n, openBlock as r, createElementVNode as t, createStaticVNode as x, createCommentVNode as c, toDisplayString as s, Fragment as k, renderList as p, normalizeClass as f, createTextVNode as B, normalizeStyle as j } from "vue";
|
|
2
|
+
import { _ as H } from "./index-T5xRQR15.js";
|
|
3
|
+
const A = { class: "notif-center" }, V = { class: "notif-header" }, N = { class: "header-right" }, L = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "unread-badge"
|
|
6
|
+
}, T = { class: "notif-tabs" }, I = ["onClick"], z = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "tab-count"
|
|
9
|
+
}, E = { class: "notif-list" }, R = ["onClick"], S = ["innerHTML"], D = { class: "notif-content" }, Z = { class: "notif-title" }, $ = { class: "notif-desc" }, F = { class: "notif-time" }, O = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "unread-dot"
|
|
12
|
+
}, q = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "empty-state"
|
|
15
|
+
}, G = { class: "empty-text" }, J = {
|
|
16
|
+
__name: "NotificationCenter",
|
|
17
|
+
props: {
|
|
18
|
+
notifications: {
|
|
19
|
+
type: Array,
|
|
20
|
+
default: () => [
|
|
21
|
+
{
|
|
22
|
+
id: 1,
|
|
23
|
+
type: "order",
|
|
24
|
+
title: "订单支付成功",
|
|
25
|
+
desc: "您的订单 #ORD-2026-1586 已完成支付,即将开始服务",
|
|
26
|
+
time: "10:32",
|
|
27
|
+
read: !1,
|
|
28
|
+
icon: '<svg viewBox="0 0 24 24" width="18" height="18" fill="none"><path d="M7 3h10v18H7z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><path d="M9 7h6M9 11h6M9 15h5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>',
|
|
29
|
+
iconBg: "rgba(34, 139, 89, 0.12)"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 2,
|
|
33
|
+
type: "system",
|
|
34
|
+
title: "系统更新通知",
|
|
35
|
+
desc: "平台已升级至 v3.2.0,新增课程评价功能",
|
|
36
|
+
time: "昨天",
|
|
37
|
+
read: !1,
|
|
38
|
+
icon: '<svg viewBox="0 0 24 24" width="18" height="18" fill="none"><circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="2"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>',
|
|
39
|
+
iconBg: "rgba(37, 99, 235, 0.12)"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: 3,
|
|
43
|
+
type: "course",
|
|
44
|
+
title: "课程开始提醒",
|
|
45
|
+
desc: "AI机器人挑战营将于 04-22 开始,请做好准备",
|
|
46
|
+
time: "昨天",
|
|
47
|
+
read: !0,
|
|
48
|
+
icon: '<svg viewBox="0 0 24 24" width="18" height="18" fill="none"><rect x="3" y="4" width="18" height="18" rx="2" stroke="currentColor" stroke-width="2"/><path d="M16 2v4M8 2v4M3 10h18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>',
|
|
49
|
+
iconBg: "rgba(249, 115, 22, 0.12)"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 4,
|
|
53
|
+
type: "activity",
|
|
54
|
+
title: "用户动态",
|
|
55
|
+
desc: "张伟豪 报名了 AI机器人挑战营",
|
|
56
|
+
time: "10:28",
|
|
57
|
+
read: !0,
|
|
58
|
+
icon: '<svg viewBox="0 0 24 24" width="18" height="18" fill="none"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><circle cx="9" cy="7" r="4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M23 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>',
|
|
59
|
+
iconBg: "rgba(34, 139, 89, 0.12)"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
emits: ["read", "action"],
|
|
65
|
+
setup(_, { emit: y }) {
|
|
66
|
+
const a = _, g = y, i = M("all"), u = [
|
|
67
|
+
{ key: "all", label: "全部", count: 0 },
|
|
68
|
+
{ key: "order", label: "订单", count: 1 },
|
|
69
|
+
{ key: "system", label: "系统", count: 1 },
|
|
70
|
+
{ key: "course", label: "课程", count: 0 }
|
|
71
|
+
], b = d(() => u.find((o) => o.key === i.value)?.label || ""), h = d(() => a.notifications.filter((o) => !o.read).length), v = d(() => i.value === "all" ? a.notifications : a.notifications.filter((o) => o.type === i.value)), w = (o) => {
|
|
72
|
+
o.read || (o.read = !0, g("read", o));
|
|
73
|
+
}, m = () => {
|
|
74
|
+
a.notifications.forEach((o) => o.read = !0);
|
|
75
|
+
};
|
|
76
|
+
return (o, l) => (r(), n("div", A, [
|
|
77
|
+
t("div", V, [
|
|
78
|
+
l[0] || (l[0] = x('<div class="header-left" data-v-dbc4e952><span class="header-icon" data-v-dbc4e952><svg viewBox="0 0 24 24" width="20" height="20" fill="none" data-v-dbc4e952><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-dbc4e952></path><path d="M13.73 21a2 2 0 0 1-3.46 0" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-dbc4e952></path></svg></span><span class="header-title" data-v-dbc4e952>消息通知</span></div>', 1)),
|
|
79
|
+
t("div", N, [
|
|
80
|
+
h.value > 0 ? (r(), n("span", L, s(h.value), 1)) : c("", !0),
|
|
81
|
+
t("button", {
|
|
82
|
+
class: "mark-read",
|
|
83
|
+
type: "button",
|
|
84
|
+
onClick: m
|
|
85
|
+
}, "全部已读")
|
|
86
|
+
])
|
|
87
|
+
]),
|
|
88
|
+
t("div", T, [
|
|
89
|
+
(r(), n(k, null, p(u, (e) => t("button", {
|
|
90
|
+
key: e.key,
|
|
91
|
+
class: f(["tab-btn", { active: i.value === e.key }]),
|
|
92
|
+
type: "button",
|
|
93
|
+
onClick: (C) => i.value = e.key
|
|
94
|
+
}, [
|
|
95
|
+
B(s(e.label) + " ", 1),
|
|
96
|
+
e.count > 0 ? (r(), n("span", z, s(e.count), 1)) : c("", !0)
|
|
97
|
+
], 10, I)), 64))
|
|
98
|
+
]),
|
|
99
|
+
t("div", E, [
|
|
100
|
+
(r(!0), n(k, null, p(v.value, (e) => (r(), n("div", {
|
|
101
|
+
key: e.id,
|
|
102
|
+
class: f(["notif-item", { unread: !e.read }]),
|
|
103
|
+
onClick: (C) => w(e)
|
|
104
|
+
}, [
|
|
105
|
+
t("div", {
|
|
106
|
+
class: "notif-icon-wrap",
|
|
107
|
+
style: j({ background: e.iconBg })
|
|
108
|
+
}, [
|
|
109
|
+
t("span", {
|
|
110
|
+
class: "notif-icon",
|
|
111
|
+
innerHTML: e.icon
|
|
112
|
+
}, null, 8, S)
|
|
113
|
+
], 4),
|
|
114
|
+
t("div", D, [
|
|
115
|
+
t("div", Z, s(e.title), 1),
|
|
116
|
+
t("div", $, s(e.desc), 1),
|
|
117
|
+
t("div", F, s(e.time), 1)
|
|
118
|
+
]),
|
|
119
|
+
e.read ? c("", !0) : (r(), n("div", O))
|
|
120
|
+
], 10, R))), 128)),
|
|
121
|
+
v.value.length === 0 ? (r(), n("div", q, [
|
|
122
|
+
l[1] || (l[1] = t("div", { class: "empty-icon" }, [
|
|
123
|
+
t("svg", {
|
|
124
|
+
viewBox: "0 0 24 24",
|
|
125
|
+
width: "32",
|
|
126
|
+
height: "32",
|
|
127
|
+
fill: "none"
|
|
128
|
+
}, [
|
|
129
|
+
t("path", {
|
|
130
|
+
d: "M22 12h-4l-3 9L9 3l-3 9H2",
|
|
131
|
+
stroke: "currentColor",
|
|
132
|
+
"stroke-width": "2",
|
|
133
|
+
"stroke-linecap": "round",
|
|
134
|
+
"stroke-linejoin": "round"
|
|
135
|
+
})
|
|
136
|
+
])
|
|
137
|
+
], -1)),
|
|
138
|
+
t("div", G, "暂无" + s(b.value) + "消息", 1)
|
|
139
|
+
])) : c("", !0)
|
|
140
|
+
])
|
|
141
|
+
]));
|
|
142
|
+
}
|
|
143
|
+
}, Q = /* @__PURE__ */ H(J, [["__scopeId", "data-v-dbc4e952"]]);
|
|
144
|
+
export {
|
|
145
|
+
Q as default
|
|
146
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { createElementBlock as s, openBlock as d, createStaticVNode as p, createElementVNode as e, Fragment as l, renderList as r, toDisplayString as a, createCommentVNode as b, normalizeStyle as f, normalizeClass as c } from "vue";
|
|
2
|
+
import { _ as k } from "./index-T5xRQR15.js";
|
|
3
|
+
const g = { class: "order-center" }, y = { class: "stats-row" }, C = { class: "stat-value" }, B = { class: "stat-label" }, w = { class: "order-list" }, x = { class: "order-main" }, M = { class: "order-info" }, S = { class: "order-name" }, V = { class: "order-meta" }, A = { class: "order-date" }, N = { class: "order-id" }, j = { class: "order-right" }, z = { class: "order-amount" }, E = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "order-actions"
|
|
6
|
+
}, I = ["onClick"], O = {
|
|
7
|
+
__name: "OrderCenter",
|
|
8
|
+
props: {
|
|
9
|
+
orders: {
|
|
10
|
+
type: Array,
|
|
11
|
+
default: () => [
|
|
12
|
+
{
|
|
13
|
+
id: "2026-0512",
|
|
14
|
+
name: "AI机器人挑战·勇闯冰雪世界",
|
|
15
|
+
date: "04-22~04-30",
|
|
16
|
+
amount: "6888",
|
|
17
|
+
status: "已完成",
|
|
18
|
+
statusClass: "success",
|
|
19
|
+
thumbBg: "linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%)",
|
|
20
|
+
actions: null
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: "2026-0511",
|
|
24
|
+
name: "钢琴一对一课程",
|
|
25
|
+
date: "长期",
|
|
26
|
+
amount: "4800",
|
|
27
|
+
status: "进行中",
|
|
28
|
+
statusClass: "active",
|
|
29
|
+
thumbBg: "linear-gradient(135deg, #fff3e0 0%, #ffe0b2 100%)",
|
|
30
|
+
actions: [
|
|
31
|
+
{ label: "查看详情", type: "default" },
|
|
32
|
+
{ label: "申请退课", type: "danger" }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: "2026-0510",
|
|
37
|
+
name: "Scratch编程入门",
|
|
38
|
+
date: "05-01~07-01",
|
|
39
|
+
amount: "3280",
|
|
40
|
+
status: "待支付",
|
|
41
|
+
statusClass: "pending",
|
|
42
|
+
thumbBg: "linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%)",
|
|
43
|
+
actions: [
|
|
44
|
+
{ label: "取消订单", type: "default" },
|
|
45
|
+
{ label: "立即支付", type: "primary" }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
emits: ["action"],
|
|
52
|
+
setup(u, { emit: h }) {
|
|
53
|
+
const v = h, _ = [
|
|
54
|
+
{ value: "3", label: "全部订单" },
|
|
55
|
+
{ value: "1", label: "进行中" },
|
|
56
|
+
{ value: "1", label: "已完成" },
|
|
57
|
+
{ value: "1", label: "待支付" }
|
|
58
|
+
], m = (i, o) => {
|
|
59
|
+
v("action", { order: i, action: o });
|
|
60
|
+
};
|
|
61
|
+
return (i, o) => (d(), s("div", g, [
|
|
62
|
+
o[0] || (o[0] = p('<div class="order-header" data-v-7d781ae6><div class="header-left" data-v-7d781ae6><span class="header-icon" data-v-7d781ae6><svg viewBox="0 0 24 24" width="20" height="20" fill="none" data-v-7d781ae6><path d="M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-7d781ae6></path><path d="M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v0a2 2 0 0 1-2 2h-2a2 2 0 0 1-2-2Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-7d781ae6></path><path d="M9 12h6M9 16h4" stroke="currentColor" stroke-width="2" stroke-linecap="round" data-v-7d781ae6></path></svg></span><span class="header-title" data-v-7d781ae6>订单中心</span></div><button class="header-more" type="button" data-v-7d781ae6>全部订单 ›</button></div>', 1)),
|
|
63
|
+
e("div", y, [
|
|
64
|
+
(d(), s(l, null, r(_, (t) => e("div", {
|
|
65
|
+
key: t.label,
|
|
66
|
+
class: "stat-item"
|
|
67
|
+
}, [
|
|
68
|
+
e("div", C, a(t.value), 1),
|
|
69
|
+
e("div", B, a(t.label), 1)
|
|
70
|
+
])), 64))
|
|
71
|
+
]),
|
|
72
|
+
e("div", w, [
|
|
73
|
+
(d(!0), s(l, null, r(u.orders, (t) => (d(), s("div", {
|
|
74
|
+
key: t.id,
|
|
75
|
+
class: "order-item"
|
|
76
|
+
}, [
|
|
77
|
+
e("div", x, [
|
|
78
|
+
e("div", {
|
|
79
|
+
class: "order-thumb",
|
|
80
|
+
style: f({ background: t.thumbBg })
|
|
81
|
+
}, null, 4),
|
|
82
|
+
e("div", M, [
|
|
83
|
+
e("div", S, a(t.name), 1),
|
|
84
|
+
e("div", V, [
|
|
85
|
+
e("span", A, a(t.date), 1),
|
|
86
|
+
e("span", N, "#" + a(t.id), 1)
|
|
87
|
+
])
|
|
88
|
+
]),
|
|
89
|
+
e("div", j, [
|
|
90
|
+
e("div", z, "¥" + a(t.amount), 1),
|
|
91
|
+
e("div", {
|
|
92
|
+
class: c(["order-status", t.statusClass])
|
|
93
|
+
}, a(t.status), 3)
|
|
94
|
+
])
|
|
95
|
+
]),
|
|
96
|
+
t.actions ? (d(), s("div", E, [
|
|
97
|
+
(d(!0), s(l, null, r(t.actions, (n) => (d(), s("button", {
|
|
98
|
+
key: n.label,
|
|
99
|
+
class: c(["action-btn", n.type]),
|
|
100
|
+
type: "button",
|
|
101
|
+
onClick: (D) => m(t, n)
|
|
102
|
+
}, a(n.label), 11, I))), 128))
|
|
103
|
+
])) : b("", !0)
|
|
104
|
+
]))), 128))
|
|
105
|
+
])
|
|
106
|
+
]));
|
|
107
|
+
}
|
|
108
|
+
}, L = /* @__PURE__ */ k(O, [["__scopeId", "data-v-7d781ae6"]]);
|
|
109
|
+
export {
|
|
110
|
+
L as default
|
|
111
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveComponent as d, createElementBlock as t, openBlock as a, createElementVNode as e, Fragment as g, renderList as _, normalizeStyle as f, createVNode as b, toDisplayString as p } from "vue";
|
|
2
|
-
import { _ as u } from "./index-
|
|
2
|
+
import { _ as u } from "./index-T5xRQR15.js";
|
|
3
3
|
const k = { class: "quick-actions h-100" }, m = { class: "quick-actions-body" }, v = ["onClick"], y = { class: "action-label" }, h = {
|
|
4
4
|
__name: "QuickActions",
|
|
5
5
|
setup(q) {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { resolveComponent as _, createElementBlock as l, openBlock as c, createElementVNode as e, Fragment as b, renderList as m, normalizeStyle as n, createVNode as C, toDisplayString as u } from "vue";
|
|
2
|
+
import { _ as y } from "./index-T5xRQR15.js";
|
|
3
|
+
const g = { class: "quick-actions-panel" }, k = { class: "panel-body" }, v = ["onClick"], h = { class: "action-label" }, A = {
|
|
4
|
+
__name: "QuickActionsPanel",
|
|
5
|
+
props: {
|
|
6
|
+
actions: {
|
|
7
|
+
type: Array,
|
|
8
|
+
default: () => [
|
|
9
|
+
{ label: "用户管理", icon: "user-add", iconColor: "#1677ff", bgColor: "#e6f4ff" },
|
|
10
|
+
{ label: "订单查询", icon: "shopping-cart", iconColor: "#722ed1", bgColor: "#f9f0ff" },
|
|
11
|
+
{ label: "数据报表", icon: "bar-chart", iconColor: "#1890ff", bgColor: "#e6f4ff" },
|
|
12
|
+
{ label: "消息通知", icon: "bell", iconColor: "#fa8c16", bgColor: "#fff7e6" },
|
|
13
|
+
{ label: "系统设置", icon: "setting", iconColor: "#595959", bgColor: "#f5f5f5" },
|
|
14
|
+
{ label: "帮助文档", icon: "question-circle", iconColor: "#13c2c2", bgColor: "#e6fffa" }
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
emits: ["click"],
|
|
19
|
+
setup(s, { emit: r }) {
|
|
20
|
+
const f = r, d = (t) => {
|
|
21
|
+
f("click", t);
|
|
22
|
+
};
|
|
23
|
+
return (t, i) => {
|
|
24
|
+
const p = _("a-icon");
|
|
25
|
+
return c(), l("div", g, [
|
|
26
|
+
i[0] || (i[0] = e("div", { class: "panel-header" }, [
|
|
27
|
+
e("span", { class: "panel-title" }, "快捷操作")
|
|
28
|
+
], -1)),
|
|
29
|
+
e("div", k, [
|
|
30
|
+
(c(!0), l(b, null, m(s.actions, (o, a) => (c(), l("div", {
|
|
31
|
+
key: a,
|
|
32
|
+
class: "action-item",
|
|
33
|
+
style: n({ animationDelay: `${a * 50}ms` }),
|
|
34
|
+
onClick: (q) => d(o)
|
|
35
|
+
}, [
|
|
36
|
+
e("div", {
|
|
37
|
+
class: "action-icon",
|
|
38
|
+
style: n({ background: o.bgColor })
|
|
39
|
+
}, [
|
|
40
|
+
C(p, {
|
|
41
|
+
type: o.icon,
|
|
42
|
+
style: n({ color: o.iconColor })
|
|
43
|
+
}, null, 8, ["type", "style"])
|
|
44
|
+
], 4),
|
|
45
|
+
e("div", h, u(o.label), 1)
|
|
46
|
+
], 12, v))), 128))
|
|
47
|
+
])
|
|
48
|
+
]);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}, D = /* @__PURE__ */ y(A, [["__scopeId", "data-v-1071d7a9"]]);
|
|
52
|
+
export {
|
|
53
|
+
D as default
|
|
54
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inject as g, resolveComponent as f, createElementBlock as c, openBlock as o, createElementVNode as t, Fragment as p, renderList as m, unref as k, normalizeStyle as b, createVNode as h, toDisplayString as v } from "vue";
|
|
2
2
|
import { useRouter as q } from "vue-router";
|
|
3
|
-
import { _ as y } from "./index-
|
|
3
|
+
import { _ as y } from "./index-T5xRQR15.js";
|
|
4
4
|
const B = { class: "quick-menu h-100" }, C = { class: "quick-menu-body" }, x = ["onClick"], E = { class: "quick-menu-label" }, M = {
|
|
5
5
|
__name: "QuickMenu",
|
|
6
6
|
setup(N) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref as n, resolveComponent as p, createElementBlock as s, openBlock as r, createElementVNode as a, createStaticVNode as c, createVNode as h, createTextVNode as o, withCtx as k, Fragment as b, renderList as f, normalizeClass as m, toDisplayString as w } from "vue";
|
|
2
|
-
import { _ as y } from "./index-
|
|
2
|
+
import { _ as y } from "./index-T5xRQR15.js";
|
|
3
3
|
const g = { class: "cart h-100" }, C = { class: "drawer" }, M = { class: "drawer-top" }, _ = { class: "drawer-tabs" }, x = ["onClick"], B = { class: "drawer-content" }, j = {
|
|
4
4
|
key: 0,
|
|
5
5
|
class: "order-card"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createElementBlock as l, openBlock as e, createElementVNode as t, Fragment as d, renderList as c, normalizeStyle as n, createTextVNode as v, toDisplayString as s, normalizeClass as u } from "vue";
|
|
2
|
-
import { _ as i } from "./index-
|
|
2
|
+
import { _ as i } from "./index-T5xRQR15.js";
|
|
3
3
|
const _ = { class: "stat-card h-100" }, b = { class: "stat-card-body" }, p = { class: "stat-row" }, f = { class: "stat-label" }, h = { class: "stat-row" }, y = { class: "stat-label" }, k = {
|
|
4
4
|
__name: "StatCard",
|
|
5
5
|
setup(w) {
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { resolveComponent as l, createElementBlock as s, openBlock as a, createVNode as v, withCtx as c, Fragment as m, renderList as g, createBlock as i, createElementVNode as e, normalizeStyle as f, toDisplayString as n, normalizeClass as y, createCommentVNode as _ } from "vue";
|
|
2
|
+
import { _ as w } from "./index-T5xRQR15.js";
|
|
3
|
+
const k = { class: "stat-cards" }, x = { class: "d-flex align-items-start justify-content-between" }, b = { class: "stat-content" }, C = { class: "stat-label" }, B = { class: "stat-value" }, z = { key: 1 }, S = { class: "stat-compare text-truncate" }, N = {
|
|
4
|
+
key: 0,
|
|
5
|
+
width: "16",
|
|
6
|
+
height: "16",
|
|
7
|
+
viewBox: "0 0 16 16",
|
|
8
|
+
fill: "currentColor"
|
|
9
|
+
}, V = {
|
|
10
|
+
key: 1,
|
|
11
|
+
width: "16",
|
|
12
|
+
height: "16",
|
|
13
|
+
viewBox: "0 0 16 16",
|
|
14
|
+
fill: "currentColor"
|
|
15
|
+
}, D = { key: 2 }, E = {
|
|
16
|
+
__name: "StatCards",
|
|
17
|
+
props: {
|
|
18
|
+
stats: {
|
|
19
|
+
type: Array,
|
|
20
|
+
default: () => [
|
|
21
|
+
{ label: "总用户数", value: "12,846", change: "+12.5%", trend: "up", compare: "较上月" },
|
|
22
|
+
{ label: "活跃用户", value: "8,392", change: "+8.2%", trend: "up", compare: "较上月" },
|
|
23
|
+
{ label: "订单总量", value: "3,642", change: "-3.1%", trend: "down", compare: "较上月" },
|
|
24
|
+
{ label: "转化率", value: "68.5%", change: "+2.4%", trend: "up", compare: "较上月" }
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
loading: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
default: !1
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
setup(r) {
|
|
33
|
+
return (H, o) => {
|
|
34
|
+
const p = l("a-skeleton"), u = l("a-col"), h = l("a-row");
|
|
35
|
+
return a(), s("div", k, [
|
|
36
|
+
v(h, { gutter: 16 }, {
|
|
37
|
+
default: c(() => [
|
|
38
|
+
(a(!0), s(m, null, g(r.stats, (t, d) => (a(), i(u, {
|
|
39
|
+
key: d,
|
|
40
|
+
xs: 24,
|
|
41
|
+
sm: 12,
|
|
42
|
+
md: 6,
|
|
43
|
+
class: "mb-4"
|
|
44
|
+
}, {
|
|
45
|
+
default: c(() => [
|
|
46
|
+
e("div", {
|
|
47
|
+
class: "stat-card",
|
|
48
|
+
style: f({ animationDelay: `${d * 80}ms` })
|
|
49
|
+
}, [
|
|
50
|
+
e("div", x, [
|
|
51
|
+
e("div", b, [
|
|
52
|
+
e("div", C, n(t.label), 1),
|
|
53
|
+
e("div", B, [
|
|
54
|
+
r.loading ? (a(), i(p, {
|
|
55
|
+
key: 0,
|
|
56
|
+
active: !0,
|
|
57
|
+
paragraph: !1,
|
|
58
|
+
title: { width: "80px", height: "36px" }
|
|
59
|
+
})) : (a(), s("span", z, n(t.value), 1))
|
|
60
|
+
]),
|
|
61
|
+
e("div", S, n(t.compare), 1)
|
|
62
|
+
]),
|
|
63
|
+
e("div", {
|
|
64
|
+
class: y(["stat-trend", {
|
|
65
|
+
"trend-up": t.trend === "up",
|
|
66
|
+
"trend-down": t.trend === "down",
|
|
67
|
+
"trend-flat": t.trend === "flat"
|
|
68
|
+
}])
|
|
69
|
+
}, [
|
|
70
|
+
t.trend === "up" ? (a(), s("svg", N, [...o[0] || (o[0] = [
|
|
71
|
+
e("path", { d: "M8 4l4 5H4l4-5z" }, null, -1)
|
|
72
|
+
])])) : t.trend === "down" ? (a(), s("svg", V, [...o[1] || (o[1] = [
|
|
73
|
+
e("path", { d: "M8 12l4-5H4l4 5z" }, null, -1)
|
|
74
|
+
])])) : _("", !0),
|
|
75
|
+
t.change ? (a(), s("span", D, n(t.change), 1)) : _("", !0)
|
|
76
|
+
], 2)
|
|
77
|
+
])
|
|
78
|
+
], 4)
|
|
79
|
+
]),
|
|
80
|
+
_: 2
|
|
81
|
+
}, 1024))), 128))
|
|
82
|
+
]),
|
|
83
|
+
_: 1
|
|
84
|
+
})
|
|
85
|
+
]);
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}, A = /* @__PURE__ */ w(E, [["__scopeId", "data-v-100c526e"]]);
|
|
89
|
+
export {
|
|
90
|
+
A as default
|
|
91
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref as y, computed as f, createElementBlock as n, openBlock as d, createElementVNode as t, toDisplayString as i, Fragment as v, renderList as h, normalizeStyle as c, normalizeClass as a, createCommentVNode as m } from "vue";
|
|
2
|
-
import { _ as k } from "./index-
|
|
2
|
+
import { _ as k } from "./index-T5xRQR15.js";
|
|
3
3
|
const x = { class: "todo-list h-100" }, g = { class: "todo-list-header" }, C = { class: "todo-count" }, L = { class: "todo-list-body" }, b = ["onClick"], z = {
|
|
4
4
|
key: 0,
|
|
5
5
|
class: "todo-check-icon"
|