yh-report 2.3.13 → 2.3.14
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/{StatementDesign-389f06b4.mjs → StatementDesign-8756c29b.mjs} +3345 -3325
- package/StatementDesign-8756c29b.mjs.map +1 -0
- package/{StatementDetail-6a22356c.mjs → StatementDetail-b6f5e75e.mjs} +2 -2
- package/{StatementDetail-6a22356c.mjs.map → StatementDetail-b6f5e75e.mjs.map} +1 -1
- package/{StatementList-6ed86ab6.mjs → StatementList-4370bc1a.mjs} +105 -97
- package/StatementList-4370bc1a.mjs.map +1 -0
- package/editorLock-8f7ea66b.mjs +62 -0
- package/editorLock-8f7ea66b.mjs.map +1 -0
- package/{index-7368d34c.mjs → index-065500ec.mjs} +6 -6
- package/{index-7368d34c.mjs.map → index-065500ec.mjs.map} +1 -1
- package/index.es.js +1 -1
- package/package.json +1 -1
- package/StatementDesign-389f06b4.mjs.map +0 -1
- package/StatementList-6ed86ab6.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as o, ref as a, onActivated as i, onDeactivated as r, onMounted as m, openBlock as s, createElementBlock as c, createVNode as d } from "vue";
|
|
2
2
|
import { useRoute as l } from "vue-router";
|
|
3
|
-
import { n as u } from "./index-
|
|
3
|
+
import { n as u } from "./index-065500ec.mjs";
|
|
4
4
|
import "element-plus";
|
|
5
5
|
import "@/libs/api.request.js";
|
|
6
6
|
import "lodash-es";
|
|
@@ -25,4 +25,4 @@ const p = { class: "statement-detail-container" }, y = /* @__PURE__ */ o({
|
|
|
25
25
|
export {
|
|
26
26
|
y as default
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=StatementDetail-
|
|
28
|
+
//# sourceMappingURL=StatementDetail-b6f5e75e.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatementDetail-
|
|
1
|
+
{"version":3,"file":"StatementDetail-b6f5e75e.mjs","sources":["../StatementDetail.vue"],"sourcesContent":["<template>\n <section class=\"statement-detail-container\">\n <report-run :id=\"id\"></report-run>\n </section>\n</template>\n<script setup lang=\"ts\">\nimport {ref, onMounted, onActivated, onDeactivated} from 'vue';\nimport {useRoute} from 'vue-router';\nimport reportRun from './component/reportRun.vue';\nconst route = useRoute();\nconst id = ref();\n\nonActivated(() => {\n document.querySelector('.main-container')?.classList.add('statement-design-main');\n});\n\nonDeactivated(() => {\n document.querySelector('.main-container')?.classList.remove('statement-design-main');\n});\n\nonMounted(() => {\n id.value = route.params.id;\n});\n</script>\n"],"names":["route","useRoute","id","ref","onActivated","_a","onDeactivated","onMounted"],"mappings":";;;;;;;;;;AASA,UAAMA,IAAQC,KACRC,IAAKC;AAEX,WAAAC,EAAY,MAAM;;AAChB,OAAAC,IAAA,SAAS,cAAc,iBAAiB,MAAxC,QAAAA,EAA2C,UAAU,IAAI;AAAA,IAAuB,CACjF,GAEDC,EAAc,MAAM;;AAClB,OAAAD,IAAA,SAAS,cAAc,iBAAiB,MAAxC,QAAAA,EAA2C,UAAU,OAAO;AAAA,IAAuB,CACpF,GAEDE,EAAU,MAAM;AACX,MAAAL,EAAA,QAAQF,EAAM,OAAO;AAAA,IAAA,CACzB;;;;;"}
|
|
@@ -1,67 +1,68 @@
|
|
|
1
|
-
import { defineComponent as H, reactive as
|
|
2
|
-
import { useRouter as
|
|
3
|
-
import { g as
|
|
4
|
-
import { ElButton as p, ElFormItem as
|
|
1
|
+
import { defineComponent as H, reactive as U, ref as E, onMounted as J, watch as j, openBlock as I, createElementBlock as G, createElementVNode as f, createTextVNode as u, createVNode as n, unref as l, withCtx as a, withKeys as Q } from "vue";
|
|
2
|
+
import { useRouter as W } from "vue-router";
|
|
3
|
+
import { g as X, s as D, d as Z, a as ee } from "./index-065500ec.mjs";
|
|
4
|
+
import { ElButton as p, ElFormItem as _, ElInput as w, ElTable as te, ElTableColumn as v, ElPagination as oe, ElDialog as ne, ElForm as le, ElMessage as b, ElLoading as ae, ElMessageBox as L } from "element-plus";
|
|
5
|
+
import { l as ie, u as re } from "./editorLock-8f7ea66b.mjs";
|
|
5
6
|
import "@/libs/api.request.js";
|
|
6
7
|
import "lodash-es";
|
|
7
8
|
import "echarts";
|
|
8
|
-
function
|
|
9
|
+
function se(x) {
|
|
9
10
|
if (navigator.clipboard && window.isSecureContext)
|
|
10
|
-
return navigator.clipboard.writeText(
|
|
11
|
+
return navigator.clipboard.writeText(x), Promise.resolve();
|
|
11
12
|
{
|
|
12
13
|
let c = document.createElement("textarea");
|
|
13
|
-
c.value =
|
|
14
|
+
c.value = x, c.style.position = "absolute", c.style.opacity = "0", c.style.left = "-200%", c.style.top = "-200%", document.body.appendChild(c), c.focus(), c.select();
|
|
14
15
|
let i = document.execCommand("copy");
|
|
15
16
|
return c.remove(), i ? Promise.resolve() : Promise.reject(new Error("copy error"));
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
|
-
const
|
|
19
|
+
const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce = { class: "el-button is-text import-excel-button" }, pe = { class: "form-context" }, me = /* @__PURE__ */ f("i", { class: "iconfont icon-antdesign" }, null, -1), fe = /* @__PURE__ */ f("i", { class: "iconfont icon-view" }, null, -1), ge = /* @__PURE__ */ f("i", { class: "iconfont icon-edit-outline" }, null, -1), ye = /* @__PURE__ */ f("i", { class: "iconfont icon-delete" }, null, -1), ve = { class: "dialog-footer" }, Ee = /* @__PURE__ */ H({
|
|
19
20
|
__name: "StatementList",
|
|
20
|
-
setup(
|
|
21
|
-
const c =
|
|
21
|
+
setup(x) {
|
|
22
|
+
const c = W(), i = U({
|
|
22
23
|
key: "",
|
|
23
24
|
pageSize: 10,
|
|
24
25
|
pageNumber: 1,
|
|
25
26
|
total: 0
|
|
26
|
-
}),
|
|
27
|
-
async function g(
|
|
28
|
-
|
|
29
|
-
const t = await
|
|
27
|
+
}), S = E([]);
|
|
28
|
+
async function g(o = !1) {
|
|
29
|
+
o && (i.pageNumber = 1, i.total = 0);
|
|
30
|
+
const t = await X({
|
|
30
31
|
key: i.key,
|
|
31
32
|
pageSize: i.pageSize,
|
|
32
33
|
pageNumber: i.pageNumber
|
|
33
34
|
});
|
|
34
|
-
|
|
35
|
+
S.value = t.data.list, i.total = t.data.total;
|
|
35
36
|
}
|
|
36
|
-
function
|
|
37
|
+
function $(o, t) {
|
|
37
38
|
let e = "", s = "链接";
|
|
38
|
-
t === "inner" ? (e = `innerStatementdetail/${
|
|
39
|
+
t === "inner" ? (e = `innerStatementdetail/${o.id}`, s = "内部链接") : (e = `${window.location.origin}${window.location.pathname}#/statementdetail/${o.id}`, s = "外部链接"), se(e).then(() => {
|
|
39
40
|
b.success(s + "复制成功");
|
|
40
41
|
}).catch(() => {
|
|
41
42
|
b.error(s + "复制遇到问题");
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
},
|
|
47
|
-
const t =
|
|
45
|
+
const C = E([]), T = (o) => {
|
|
46
|
+
C.value = o;
|
|
47
|
+
}, B = async (o) => {
|
|
48
|
+
const t = o.target.files[0];
|
|
48
49
|
if (!t)
|
|
49
50
|
return;
|
|
50
51
|
const e = new FileReader();
|
|
51
52
|
e.onload = async (s) => {
|
|
52
|
-
|
|
53
|
+
o.target.value = "";
|
|
53
54
|
try {
|
|
54
55
|
if (s.target) {
|
|
55
56
|
const m = JSON.parse(s.target.result);
|
|
56
57
|
if (Array.isArray(m) && m.every((d) => typeof d == "object" && "code" in d && "config" in d && "description" in d && "name" in d)) {
|
|
57
|
-
const d =
|
|
58
|
+
const d = ae.service({
|
|
58
59
|
fullscreen: !0,
|
|
59
60
|
text: `正在导入报表,共 ${m.length} 个,请稍候...`
|
|
60
61
|
});
|
|
61
62
|
for (let y = 0; y < m.length; y++) {
|
|
62
63
|
d.setText(`正在保存第 ${y + 1} 个,共 ${m.length} 个,请稍候...`);
|
|
63
64
|
const V = m[y];
|
|
64
|
-
await
|
|
65
|
+
await D(V);
|
|
65
66
|
}
|
|
66
67
|
d.close(), g(!0);
|
|
67
68
|
} else
|
|
@@ -72,9 +73,9 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
72
73
|
}
|
|
73
74
|
}, e.readAsText(t);
|
|
74
75
|
}, R = () => {
|
|
75
|
-
if (
|
|
76
|
-
const
|
|
77
|
-
|
|
76
|
+
if (C.value.length > 0) {
|
|
77
|
+
const o = JSON.stringify(
|
|
78
|
+
C.value.map(({ code: y, config: V, description: Y, name: q }) => ({
|
|
78
79
|
code: y,
|
|
79
80
|
config: V,
|
|
80
81
|
description: Y,
|
|
@@ -82,74 +83,81 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
82
83
|
})),
|
|
83
84
|
null,
|
|
84
85
|
2
|
|
85
|
-
), t = new Blob([
|
|
86
|
+
), t = new Blob([o], { type: "application/json" }), e = URL.createObjectURL(t), m = `报表导出-${Z().format("YYYYMMDDHHmm")}.json`, d = document.createElement("a");
|
|
86
87
|
d.href = e, d.download = m, document.body.appendChild(d), d.click(), document.body.removeChild(d), URL.revokeObjectURL(e);
|
|
87
88
|
} else
|
|
88
89
|
b.warning("请选择要操作的报表!");
|
|
89
90
|
};
|
|
90
|
-
function
|
|
91
|
-
c.push(`/admin/statement/design/${
|
|
91
|
+
async function N(o) {
|
|
92
|
+
await ie(o.id) === "OK" ? c.push(`/admin/statement/design/${o.id}`) : L.alert("报表正在被其他用户锁定,是否强制解锁?", "提示", {
|
|
93
|
+
confirmButtonText: "解锁",
|
|
94
|
+
cancelButtonText: "取消"
|
|
95
|
+
}).then(() => {
|
|
96
|
+
re(o.id).then(() => {
|
|
97
|
+
N(o);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
92
100
|
}
|
|
93
|
-
function
|
|
94
|
-
c.push(`/admin/statement/detail/${
|
|
101
|
+
function F(o) {
|
|
102
|
+
c.push(`/admin/statement/detail/${o.id}`);
|
|
95
103
|
}
|
|
96
104
|
J(() => {
|
|
97
105
|
g(!0);
|
|
98
106
|
});
|
|
99
|
-
const k =
|
|
107
|
+
const k = E(!1), r = U({
|
|
100
108
|
id: void 0,
|
|
101
109
|
name: "",
|
|
102
110
|
code: "",
|
|
103
111
|
description: ""
|
|
104
112
|
});
|
|
105
|
-
function
|
|
113
|
+
function O() {
|
|
106
114
|
k.value = !0;
|
|
107
115
|
}
|
|
108
|
-
function P(
|
|
109
|
-
k.value = !0, r.id =
|
|
116
|
+
function P(o) {
|
|
117
|
+
k.value = !0, r.id = o.id, r.name = o.name, r.code = o.code, r.description = o.description;
|
|
110
118
|
}
|
|
111
|
-
function A(
|
|
112
|
-
|
|
119
|
+
function A(o) {
|
|
120
|
+
L.confirm("当前操作会删除选定的报表,确认继续吗?", "警告", {
|
|
113
121
|
confirmButtonText: "删除",
|
|
114
122
|
cancelButtonText: "取消",
|
|
115
123
|
type: "warning"
|
|
116
124
|
}).then(async () => {
|
|
117
|
-
(await
|
|
125
|
+
(await ee(o.id)).data && g(!0);
|
|
118
126
|
});
|
|
119
127
|
}
|
|
120
128
|
function h() {
|
|
121
129
|
k.value = !1, r.id = void 0, r.name = "", r.code = "", r.description = "";
|
|
122
130
|
}
|
|
123
131
|
async function M() {
|
|
124
|
-
await
|
|
132
|
+
await D(r), g(!0), h();
|
|
125
133
|
}
|
|
126
|
-
function
|
|
127
|
-
|
|
134
|
+
function z(o) {
|
|
135
|
+
o && (o.preventDefault(), o.stopPropagation()), g(!1);
|
|
128
136
|
}
|
|
129
|
-
function
|
|
137
|
+
function K() {
|
|
130
138
|
i.key = "", g(!0);
|
|
131
139
|
}
|
|
132
|
-
return
|
|
140
|
+
return j(
|
|
133
141
|
() => i.pageNumber,
|
|
134
142
|
() => {
|
|
135
143
|
g();
|
|
136
144
|
}
|
|
137
|
-
),
|
|
145
|
+
), j(
|
|
138
146
|
() => i.pageSize,
|
|
139
147
|
() => {
|
|
140
148
|
g();
|
|
141
149
|
}
|
|
142
|
-
), (
|
|
143
|
-
f("div",
|
|
144
|
-
f("div",
|
|
150
|
+
), (o, t) => (I(), G("section", de, [
|
|
151
|
+
f("div", ue, [
|
|
152
|
+
f("div", ce, [
|
|
145
153
|
f("input", {
|
|
146
154
|
class: "import-excel-input",
|
|
147
155
|
type: "file",
|
|
148
|
-
onChange: t[0] || (t[0] = (e) =>
|
|
156
|
+
onChange: t[0] || (t[0] = (e) => B(e))
|
|
149
157
|
}, null, 32),
|
|
150
158
|
u(" 导入 ")
|
|
151
159
|
]),
|
|
152
|
-
|
|
160
|
+
n(l(p), {
|
|
153
161
|
text: "",
|
|
154
162
|
onClick: R
|
|
155
163
|
}, {
|
|
@@ -158,39 +166,39 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
158
166
|
]),
|
|
159
167
|
_: 1
|
|
160
168
|
}),
|
|
161
|
-
|
|
169
|
+
n(l(p), {
|
|
162
170
|
type: "primary",
|
|
163
|
-
onClick:
|
|
171
|
+
onClick: O
|
|
164
172
|
}, {
|
|
165
173
|
default: a(() => [
|
|
166
174
|
u(" 新增 ")
|
|
167
175
|
]),
|
|
168
176
|
_: 1
|
|
169
177
|
}),
|
|
170
|
-
f("div",
|
|
171
|
-
|
|
178
|
+
f("div", pe, [
|
|
179
|
+
n(l(_), { label: "报表名称" }, {
|
|
172
180
|
default: a(() => [
|
|
173
|
-
|
|
181
|
+
n(l(w), {
|
|
174
182
|
modelValue: i.key,
|
|
175
183
|
"onUpdate:modelValue": t[1] || (t[1] = (e) => i.key = e),
|
|
176
|
-
onKeyup:
|
|
184
|
+
onKeyup: Q(z, ["enter"]),
|
|
177
185
|
placeholder: "键入关键字搜索报表"
|
|
178
186
|
}, null, 8, ["modelValue", "onKeyup"])
|
|
179
187
|
]),
|
|
180
188
|
_: 1
|
|
181
189
|
})
|
|
182
190
|
]),
|
|
183
|
-
|
|
191
|
+
n(l(p), {
|
|
184
192
|
type: "primary",
|
|
185
|
-
onClick: t[2] || (t[2] = (e) =>
|
|
193
|
+
onClick: t[2] || (t[2] = (e) => z())
|
|
186
194
|
}, {
|
|
187
195
|
default: a(() => [
|
|
188
196
|
u(" 搜索 ")
|
|
189
197
|
]),
|
|
190
198
|
_: 1
|
|
191
199
|
}),
|
|
192
|
-
|
|
193
|
-
onClick: t[3] || (t[3] = (e) =>
|
|
200
|
+
n(l(p), {
|
|
201
|
+
onClick: t[3] || (t[3] = (e) => K())
|
|
194
202
|
}, {
|
|
195
203
|
default: a(() => [
|
|
196
204
|
u("重置")
|
|
@@ -198,103 +206,103 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
198
206
|
_: 1
|
|
199
207
|
})
|
|
200
208
|
]),
|
|
201
|
-
|
|
202
|
-
data:
|
|
209
|
+
n(l(te), {
|
|
210
|
+
data: S.value,
|
|
203
211
|
"row-key": "id",
|
|
204
|
-
onSelectionChange:
|
|
212
|
+
onSelectionChange: T
|
|
205
213
|
}, {
|
|
206
214
|
default: a(() => [
|
|
207
|
-
|
|
215
|
+
n(l(v), {
|
|
208
216
|
type: "selection",
|
|
209
217
|
width: "50"
|
|
210
218
|
}),
|
|
211
|
-
|
|
219
|
+
n(l(v), {
|
|
212
220
|
label: "#",
|
|
213
221
|
type: "index",
|
|
214
222
|
width: "66",
|
|
215
223
|
left: ""
|
|
216
224
|
}),
|
|
217
|
-
|
|
225
|
+
n(l(v), {
|
|
218
226
|
label: "报表代码",
|
|
219
227
|
"min-width": "100",
|
|
220
228
|
prop: "code"
|
|
221
229
|
}),
|
|
222
|
-
|
|
230
|
+
n(l(v), {
|
|
223
231
|
label: "报表名称",
|
|
224
232
|
"min-width": "100",
|
|
225
233
|
prop: "name"
|
|
226
234
|
}),
|
|
227
|
-
|
|
235
|
+
n(l(v), {
|
|
228
236
|
label: "描述",
|
|
229
237
|
"min-width": "200",
|
|
230
238
|
prop: "description"
|
|
231
239
|
}),
|
|
232
|
-
|
|
240
|
+
n(l(v), {
|
|
233
241
|
label: "操作",
|
|
234
242
|
width: "500",
|
|
235
243
|
fixed: "right"
|
|
236
244
|
}, {
|
|
237
245
|
default: a((e) => [
|
|
238
|
-
|
|
246
|
+
n(l(p), {
|
|
239
247
|
link: "",
|
|
240
248
|
title: "本系统前台页面嵌入地址",
|
|
241
|
-
onClick: (s) =>
|
|
249
|
+
onClick: (s) => $(e.row, "inner")
|
|
242
250
|
}, {
|
|
243
251
|
default: a(() => [
|
|
244
252
|
u(" 内部链接 ")
|
|
245
253
|
]),
|
|
246
254
|
_: 2
|
|
247
255
|
}, 1032, ["onClick"]),
|
|
248
|
-
|
|
256
|
+
n(l(p), {
|
|
249
257
|
link: "",
|
|
250
258
|
title: "其他系统嵌入地址",
|
|
251
|
-
onClick: (s) =>
|
|
259
|
+
onClick: (s) => $(e.row, "outside")
|
|
252
260
|
}, {
|
|
253
261
|
default: a(() => [
|
|
254
262
|
u(" 外部链接 ")
|
|
255
263
|
]),
|
|
256
264
|
_: 2
|
|
257
265
|
}, 1032, ["onClick"]),
|
|
258
|
-
|
|
266
|
+
n(l(p), {
|
|
259
267
|
type: "primary",
|
|
260
268
|
link: "",
|
|
261
|
-
onClick: (s) =>
|
|
269
|
+
onClick: (s) => N(e.row)
|
|
262
270
|
}, {
|
|
263
271
|
default: a(() => [
|
|
264
|
-
|
|
272
|
+
me,
|
|
265
273
|
u(" 设计 ")
|
|
266
274
|
]),
|
|
267
275
|
_: 2
|
|
268
276
|
}, 1032, ["onClick"]),
|
|
269
|
-
|
|
277
|
+
n(l(p), {
|
|
270
278
|
type: "primary",
|
|
271
279
|
link: "",
|
|
272
|
-
onClick: (s) =>
|
|
280
|
+
onClick: (s) => F(e.row)
|
|
273
281
|
}, {
|
|
274
282
|
default: a(() => [
|
|
275
|
-
|
|
283
|
+
fe,
|
|
276
284
|
u(" 查看 ")
|
|
277
285
|
]),
|
|
278
286
|
_: 2
|
|
279
287
|
}, 1032, ["onClick"]),
|
|
280
|
-
|
|
288
|
+
n(l(p), {
|
|
281
289
|
type: "primary",
|
|
282
290
|
link: "",
|
|
283
291
|
onClick: (s) => P(e.row)
|
|
284
292
|
}, {
|
|
285
293
|
default: a(() => [
|
|
286
|
-
|
|
294
|
+
ge,
|
|
287
295
|
u(" 编辑 ")
|
|
288
296
|
]),
|
|
289
297
|
_: 2
|
|
290
298
|
}, 1032, ["onClick"]),
|
|
291
|
-
|
|
299
|
+
n(l(p), {
|
|
292
300
|
type: "danger",
|
|
293
301
|
link: "",
|
|
294
302
|
onClick: (s) => A(e.row)
|
|
295
303
|
}, {
|
|
296
304
|
default: a(() => [
|
|
297
|
-
|
|
305
|
+
ye,
|
|
298
306
|
u(" 删除 ")
|
|
299
307
|
]),
|
|
300
308
|
_: 2
|
|
@@ -305,7 +313,7 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
305
313
|
]),
|
|
306
314
|
_: 1
|
|
307
315
|
}, 8, ["data"]),
|
|
308
|
-
|
|
316
|
+
n(l(oe), {
|
|
309
317
|
background: "",
|
|
310
318
|
style: { "padding-top": "10px", "justify-content": "flex-end" },
|
|
311
319
|
"page-sizes": [10, 20, 50, 100],
|
|
@@ -316,21 +324,21 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
316
324
|
"onUpdate:currentPage": t[5] || (t[5] = (e) => i.pageNumber = e),
|
|
317
325
|
layout: "sizes,prev,pager,next,total"
|
|
318
326
|
}, null, 8, ["page-size", "total", "current-page"]),
|
|
319
|
-
|
|
327
|
+
n(l(ne), {
|
|
320
328
|
modelValue: k.value,
|
|
321
329
|
"onUpdate:modelValue": t[10] || (t[10] = (e) => k.value = e),
|
|
322
330
|
onClose: h,
|
|
323
331
|
title: r.id ? "编辑报表" : "新建报表"
|
|
324
332
|
}, {
|
|
325
333
|
footer: a(() => [
|
|
326
|
-
f("span",
|
|
327
|
-
|
|
334
|
+
f("span", ve, [
|
|
335
|
+
n(l(p), { onClick: h }, {
|
|
328
336
|
default: a(() => [
|
|
329
337
|
u("取消")
|
|
330
338
|
]),
|
|
331
339
|
_: 1
|
|
332
340
|
}),
|
|
333
|
-
|
|
341
|
+
n(l(p), {
|
|
334
342
|
type: "primary",
|
|
335
343
|
onClick: t[9] || (t[9] = (e) => M())
|
|
336
344
|
}, {
|
|
@@ -342,17 +350,17 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
342
350
|
])
|
|
343
351
|
]),
|
|
344
352
|
default: a(() => [
|
|
345
|
-
|
|
353
|
+
n(l(le), {
|
|
346
354
|
model: r,
|
|
347
355
|
"label-width": "120"
|
|
348
356
|
}, {
|
|
349
357
|
default: a(() => [
|
|
350
|
-
|
|
358
|
+
n(l(_), {
|
|
351
359
|
label: "报表代码",
|
|
352
360
|
required: ""
|
|
353
361
|
}, {
|
|
354
362
|
default: a(() => [
|
|
355
|
-
|
|
363
|
+
n(l(w), {
|
|
356
364
|
modelValue: r.code,
|
|
357
365
|
"onUpdate:modelValue": t[6] || (t[6] = (e) => r.code = e),
|
|
358
366
|
autocomplete: "off"
|
|
@@ -360,12 +368,12 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
360
368
|
]),
|
|
361
369
|
_: 1
|
|
362
370
|
}),
|
|
363
|
-
|
|
371
|
+
n(l(_), {
|
|
364
372
|
label: "报表名称",
|
|
365
373
|
required: ""
|
|
366
374
|
}, {
|
|
367
375
|
default: a(() => [
|
|
368
|
-
|
|
376
|
+
n(l(w), {
|
|
369
377
|
modelValue: r.name,
|
|
370
378
|
"onUpdate:modelValue": t[7] || (t[7] = (e) => r.name = e),
|
|
371
379
|
autocomplete: "off"
|
|
@@ -373,12 +381,12 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
373
381
|
]),
|
|
374
382
|
_: 1
|
|
375
383
|
}),
|
|
376
|
-
|
|
384
|
+
n(l(_), {
|
|
377
385
|
label: "描述",
|
|
378
386
|
required: ""
|
|
379
387
|
}, {
|
|
380
388
|
default: a(() => [
|
|
381
|
-
|
|
389
|
+
n(l(w), {
|
|
382
390
|
modelValue: r.description,
|
|
383
391
|
"onUpdate:modelValue": t[8] || (t[8] = (e) => r.description = e),
|
|
384
392
|
type: "textarea",
|
|
@@ -397,6 +405,6 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
|
|
|
397
405
|
}
|
|
398
406
|
});
|
|
399
407
|
export {
|
|
400
|
-
|
|
408
|
+
Ee as default
|
|
401
409
|
};
|
|
402
|
-
//# sourceMappingURL=StatementList-
|
|
410
|
+
//# sourceMappingURL=StatementList-4370bc1a.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementList-4370bc1a.mjs","sources":["../libs/util.ts","../StatementList.vue"],"sourcesContent":["/**\n * 复制文本\n * @param {string} str 要复制的文本\n * @returns {Promise<void>}\n */\nexport function copyString(str) {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard.writeText(str);\n return Promise.resolve();\n } else {\n let textArea = document.createElement('textarea');\n textArea.value = str;\n textArea.style.position = 'absolute';\n textArea.style.opacity = '0';\n textArea.style.left = '-200%';\n textArea.style.top = '-200%';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n let flag = document.execCommand('copy');\n textArea.remove();\n if (flag) {\n return Promise.resolve();\n } else {\n return Promise.reject(new Error('copy error'));\n }\n }\n}\n\nexport function isColorLight(color) {\n let rgb;\n if (color.startsWith('#')) {\n color = color.slice(1).toUpperCase();\n\n if (color.length === 3) {\n color = color\n .split('')\n .map((char) => char + char)\n .join('');\n }\n rgb = color.match(/.{2}/g).map((hex) => parseInt(hex, 16));\n } else if (color.startsWith('rgb(')) {\n const rgbMatch = color.match(/\\d+/g);\n rgb = rgbMatch.map((num) => parseInt(num, 10));\n } else {\n console.error('Invalid color format');\n return false;\n }\n const luminance = (0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]) / 255;\n return luminance > 0.5;\n}\n\nexport function getEnumOptions<T extends Record<string, any>>(enumObj: T, filters: string[] = []) {\n return Object.keys(enumObj)\n .filter((key) => !filters.includes(enumObj[key as keyof T]))\n .map((key) => ({\n value: enumObj[key as keyof T],\n label: key,\n }));\n}\n","<template>\n <section class=\"statement-list-container\">\n <div class=\"actions\">\n <div class=\"el-button is-text import-excel-button\">\n <input\n class=\"import-excel-input\"\n type=\"file\"\n @change=\"importReport($event)\" />\n 导入\n </div>\n <el-button\n text\n @click=\"exportReport\">\n 导出\n </el-button>\n <el-button\n type=\"primary\"\n @click=\"toAddForm\">\n 新增\n </el-button>\n <div class=\"form-context\">\n <el-form-item label=\"报表名称\">\n <el-input\n v-model=\"listForm.key\"\n @keyup.enter=\"onSearch\"\n placeholder=\"键入关键字搜索报表\"></el-input>\n </el-form-item>\n </div>\n <el-button\n type=\"primary\"\n @click=\"onSearch()\">\n 搜索\n </el-button>\n <el-button @click=\"onReset()\">重置</el-button>\n </div>\n <el-table\n :data=\"data\"\n row-key=\"id\"\n @selection-change=\"selectionChangeHandle\">\n <el-table-column\n type=\"selection\"\n width=\"50\"></el-table-column>\n <el-table-column\n label=\"#\"\n type=\"index\"\n width=\"66\"\n left></el-table-column>\n <el-table-column\n label=\"报表代码\"\n min-width=\"100\"\n prop=\"code\"></el-table-column>\n <el-table-column\n label=\"报表名称\"\n min-width=\"100\"\n prop=\"name\"></el-table-column>\n <el-table-column\n label=\"描述\"\n min-width=\"200\"\n prop=\"description\"></el-table-column>\n <el-table-column\n label=\"操作\"\n width=\"500\"\n fixed=\"right\">\n <template #default=\"scope\">\n <el-button\n link\n title=\"本系统前台页面嵌入地址\"\n @click=\"copyLink(scope.row, 'inner')\">\n 内部链接\n </el-button>\n <el-button\n link\n title=\"其他系统嵌入地址\"\n @click=\"copyLink(scope.row, 'outside')\">\n 外部链接\n </el-button>\n <el-button\n type=\"primary\"\n link\n @click=\"toDesign(scope.row)\">\n <i class=\"iconfont icon-antdesign\"></i>\n 设计\n </el-button>\n <el-button\n type=\"primary\"\n link\n @click=\"toView(scope.row)\">\n <i class=\"iconfont icon-view\"></i>\n 查看\n </el-button>\n <el-button\n type=\"primary\"\n link\n @click=\"toEditor(scope.row)\">\n <i class=\"iconfont icon-edit-outline\"></i>\n 编辑\n </el-button>\n <el-button\n type=\"danger\"\n link\n @click=\"toDelete(scope.row)\">\n <i class=\"iconfont icon-delete\"></i>\n 删除\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n <el-pagination\n background\n style=\"padding-top: 10px; justify-content: flex-end\"\n :page-sizes=\"[10, 20, 50, 100]\"\n v-model:page-size=\"listForm.pageSize\"\n :total=\"listForm.total\"\n v-model:current-page=\"listForm.pageNumber\"\n layout=\"sizes,prev,pager,next,total\"></el-pagination>\n <!-- 新增报表对话框 -->\n <el-dialog\n v-model=\"dialogFormVisible\"\n @close=\"cancelForm\"\n :title=\"form.id ? '编辑报表' : '新建报表'\">\n <el-form\n :model=\"form\"\n label-width=\"120\">\n <el-form-item\n label=\"报表代码\"\n required>\n <el-input\n v-model=\"form.code\"\n autocomplete=\"off\" />\n </el-form-item>\n <el-form-item\n label=\"报表名称\"\n required>\n <el-input\n v-model=\"form.name\"\n autocomplete=\"off\" />\n </el-form-item>\n <el-form-item\n label=\"描述\"\n required>\n <el-input\n v-model=\"form.description\"\n type=\"textarea\"\n autocomplete=\"off\" />\n </el-form-item>\n </el-form>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"cancelForm\">取消</el-button>\n <el-button\n type=\"primary\"\n @click=\"saveForm()\">\n 保存\n </el-button>\n </span>\n </template>\n </el-dialog>\n </section>\n</template>\n<script setup lang=\"ts\">\nimport {ref, reactive, computed, watch, onMounted} from 'vue';\nimport {useRouter} from 'vue-router';\nimport {Statement} from './types';\nimport {getList, save, del} from './api/form';\nimport {ElMessageBox, ElMessage, ElButton, ElForm, ElFormItem, ElInput, ElTable, ElTableColumn, ElPagination, ElDialog, ElLoading} from 'element-plus';\nimport {copyString} from './libs/util';\nimport dayjs from 'dayjs';\nimport {lockEditor, unlockEditor} from 'yh-report/libs/editorLock';\n\nconst router = useRouter();\n\n// @ts-ignore\nconst listForm = reactive({\n key: '',\n pageSize: 10,\n pageNumber: 1,\n total: 0,\n});\nconst data = ref<Statement[]>([]);\n\n//获取报表列表\nasync function getStatementList(flag = false) {\n if (flag) {\n listForm.pageNumber = 1;\n listForm.total = 0;\n }\n const res = await getList({\n key: listForm.key,\n pageSize: listForm.pageSize,\n pageNumber: listForm.pageNumber,\n });\n data.value = res.data.list;\n listForm.total = res.data.total;\n}\n\nfunction copyLink(row, type) {\n let href = '';\n let hrefName = '链接';\n if (type === 'inner') {\n href = `innerStatementdetail/${row.id}`;\n hrefName = '内部链接';\n } else {\n href = `${window.location.origin}${window.location.pathname}#/statementdetail/${row.id}`;\n hrefName = '外部链接';\n }\n copyString(href)\n .then(() => {\n ElMessage.success(hrefName + '复制成功');\n })\n .catch(() => {\n ElMessage.error(hrefName + '复制遇到问题');\n });\n}\n\nconst tableSelections = ref([]);\nconst selectionChangeHandle = (selections) => {\n tableSelections.value = selections;\n};\nconst importReport = async (e) => {\n const file = e.target.files[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = async (event) => {\n e.target.value = '';\n try {\n if (event.target) {\n const jsonData = JSON.parse(event.target.result as string);\n if (Array.isArray(jsonData) && jsonData.every((item) => typeof item === 'object' && 'code' in item && 'config' in item && 'description' in item && 'name' in item)) {\n const loading = ElLoading.service({\n fullscreen: true,\n text: `正在导入报表,共 ${jsonData.length} 个,请稍候...`,\n });\n for (let i = 0; i < jsonData.length; i++) {\n loading.setText(`正在保存第 ${i + 1} 个,共 ${jsonData.length} 个,请稍候...`);\n const item = jsonData[i];\n await save(item);\n }\n loading.close();\n getStatementList(true);\n } else {\n ElMessage.error('格式错误,请确保导入的文件未被修改过!');\n }\n }\n } catch (error) {\n ElMessage.error('文件解析失败,请检查文件是否为有效的 JSON 格式!');\n }\n };\n reader.readAsText(file);\n};\n\nconst exportReport = () => {\n if (tableSelections.value.length > 0) {\n const jsonData = JSON.stringify(\n tableSelections.value.map(({code, config, description, name}) => {\n return {\n code,\n config,\n description,\n name,\n };\n }),\n null,\n 2\n );\n const blob = new Blob([jsonData], {type: 'application/json'});\n\n const url = URL.createObjectURL(blob);\n\n const formattedDate = dayjs().format('YYYYMMDDHHmm');\n const fileName = `报表导出-${formattedDate}.json`;\n\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n URL.revokeObjectURL(url);\n } else {\n ElMessage.warning('请选择要操作的报表!');\n }\n};\n\nasync function toDesign(row) {\n let res = await lockEditor(row.id);\n if (res === 'OK') {\n router.push(`/admin/statement/design/${row.id}`);\n } else {\n ElMessageBox.alert('报表正在被其他用户锁定,是否强制解锁?', '提示', {\n confirmButtonText: '解锁',\n cancelButtonText: '取消',\n }).then(() => {\n unlockEditor(row.id).then(() => {\n toDesign(row);\n });\n });\n }\n}\n\nfunction toView(row) {\n router.push(`/admin/statement/detail/${row.id}`);\n}\n\nonMounted(() => {\n getStatementList(true);\n});\n\n//新增报表\nconst dialogFormVisible = ref(false);\nconst form = reactive({\n id: undefined,\n name: '',\n code: '',\n description: '',\n});\n\nfunction toAddForm() {\n dialogFormVisible.value = true;\n}\n\nfunction toEditor(row) {\n dialogFormVisible.value = true;\n form.id = row.id;\n form.name = row.name;\n form.code = row.code;\n form.description = row.description;\n}\n\nfunction toDelete(row) {\n ElMessageBox.confirm('当前操作会删除选定的报表,确认继续吗?', '警告', {\n confirmButtonText: '删除',\n cancelButtonText: '取消',\n type: 'warning',\n }).then(async () => {\n let res = await del(row.id);\n if (res.data) {\n getStatementList(true);\n }\n });\n}\n\nfunction cancelForm() {\n dialogFormVisible.value = false;\n form.id = undefined;\n form.name = '';\n form.code = '';\n form.description = '';\n}\nasync function saveForm() {\n await save(form);\n getStatementList(true);\n cancelForm();\n}\n\n//搜索报表\nfunction onSearch(e?) {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n getStatementList(false);\n}\n\n//重置\nfunction onReset() {\n listForm.key = '';\n getStatementList(true);\n}\n\n//分页功能\nwatch(\n () => listForm.pageNumber,\n () => {\n getStatementList();\n }\n);\nwatch(\n () => listForm.pageSize,\n () => {\n getStatementList();\n }\n);\n</script>\n\n<style lang=\"scss\">\n.statement-list-container {\n width: 100%;\n height: 100%;\n padding: 10px 0 0;\n box-sizing: border-box;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .actions {\n display: flex;\n align-items: center;\n\n .form-context {\n flex: 1;\n margin: 0 10px;\n display: flex;\n }\n\n .el-form-item {\n margin-bottom: 0;\n margin-right: 10px;\n }\n }\n\n .el-table {\n flex: 1;\n }\n\n .el-dialog {\n .el-button--text {\n margin-right: 15px;\n }\n\n .el-form-item {\n width: 100%;\n }\n\n .el-select {\n width: 100%;\n }\n\n .el-input {\n width: 100%;\n }\n\n .dialog-footer button:first-child {\n margin-right: 10px;\n }\n }\n .import-excel-button {\n position: relative;\n .import-excel-input {\n position: absolute;\n left: 0;\n top: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 10;\n }\n }\n}\n</style>\n"],"names":["copyString","str","textArea","flag","router","useRouter","listForm","reactive","data","ref","getStatementList","res","getList","copyLink","row","type","href","hrefName","ElMessage","tableSelections","selectionChangeHandle","selections","importReport","e","file","reader","event","jsonData","item","loading","ElLoading","i","save","exportReport","code","config","description","name","blob","url","fileName","dayjs","a","toDesign","lockEditor","ElMessageBox","unlockEditor","toView","onMounted","dialogFormVisible","form","toAddForm","toEditor","toDelete","del","cancelForm","saveForm","onSearch","onReset","watch"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import f from "@/libs/api.request.js";
|
|
2
|
+
import { onMounted as v, onBeforeUnmount as h } from "vue";
|
|
3
|
+
import { onBeforeRouteLeave as b } from "vue-router";
|
|
4
|
+
import { ElMessageBox as a } from "element-plus";
|
|
5
|
+
function d(e) {
|
|
6
|
+
return f.request({
|
|
7
|
+
url: `dataLock/lock/${e}`,
|
|
8
|
+
method: "POST"
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function k(e) {
|
|
12
|
+
return e = `report-${e}`, f.request({
|
|
13
|
+
url: `dataLock/unlock/${e}`,
|
|
14
|
+
method: "POST"
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function c(e) {
|
|
18
|
+
e = `report-${e}`;
|
|
19
|
+
let t = await d(e);
|
|
20
|
+
return t && t.data && t.data.msg || !1;
|
|
21
|
+
}
|
|
22
|
+
function y(e, t, i) {
|
|
23
|
+
let o = null, n = !1;
|
|
24
|
+
const s = () => {
|
|
25
|
+
o = setInterval(() => {
|
|
26
|
+
c(e).then((u) => {
|
|
27
|
+
});
|
|
28
|
+
}, 1 * 60 * 1e3);
|
|
29
|
+
}, l = () => {
|
|
30
|
+
k(e).then(() => {
|
|
31
|
+
}), o && clearInterval(o);
|
|
32
|
+
}, r = (u) => {
|
|
33
|
+
n || (n = !0, document.visibilityState === "visible" ? a.confirm("欢迎回来,刚已保存并释放互斥锁,是否继续编辑?").then(() => {
|
|
34
|
+
c(e).then((m) => {
|
|
35
|
+
m === "OK" ? (o && clearInterval(o), s()) : a.alert("其他人正在编辑该报表,确认后回到列表页").then(() => {
|
|
36
|
+
i.back();
|
|
37
|
+
});
|
|
38
|
+
}).catch(() => {
|
|
39
|
+
a.alert("无法获取编辑锁,请稍后重试");
|
|
40
|
+
});
|
|
41
|
+
}).catch(() => {
|
|
42
|
+
i.back();
|
|
43
|
+
}).finally(() => {
|
|
44
|
+
n = !1;
|
|
45
|
+
}) : t().then(() => {
|
|
46
|
+
l(), n = !1;
|
|
47
|
+
}));
|
|
48
|
+
};
|
|
49
|
+
v(() => {
|
|
50
|
+
console.log("mounted"), window.addEventListener("visibilitychange", r, !1), s();
|
|
51
|
+
}), b(() => {
|
|
52
|
+
console.log("before route leave"), window.removeEventListener("visibilitychange", r, !1), l();
|
|
53
|
+
}), h(() => {
|
|
54
|
+
console.log("before unmount"), window.removeEventListener("visibilitychange", r, !1), l();
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
y as a,
|
|
59
|
+
c as l,
|
|
60
|
+
k as u
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=editorLock-8f7ea66b.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editorLock-8f7ea66b.mjs","sources":["../libs/editorLock.ts"],"sourcesContent":["import axios from '@/libs/api.request.js';\nimport {onMounted, onBeforeUnmount} from 'vue';\nimport {onBeforeRouteLeave, onBeforeRouteEnter} from 'vue-router';\nimport {ElMessageBox} from 'element-plus';\nimport {log} from 'echarts/types/src/util/log.js';\nfunction lockReq(key) {\n return axios.request({\n url: `dataLock/lock/${key}`,\n method: 'POST',\n });\n}\n\nexport function unlockEditor(id) {\n id = `report-${id}`;\n return axios.request({\n url: `dataLock/unlock/${id}`,\n method: 'POST',\n });\n}\n\nexport async function lockEditor(id) {\n id = `report-${id}`;\n let res = await lockReq(id);\n return (res && res.data && res.data.msg) || false;\n}\n\nexport function useDetailLock(id, save, router) {\n let timer: any = null;\n let locked = false;\n let visibleAsk = false;\n\n const startInterval = () => {\n timer = setInterval(() => {\n lockEditor(id).then((res) => {\n locked = res === 'OK';\n });\n }, 1 * 60 * 1000);\n };\n\n const stopInterval = () => {\n unlockEditor(id).then(() => {\n locked = false;\n });\n if (timer) {\n clearInterval(timer);\n }\n };\n\n const visibleHandler = (e) => {\n if (!visibleAsk) {\n visibleAsk = true;\n if (document.visibilityState === 'visible') {\n ElMessageBox.confirm('欢迎回来,刚已保存并释放互斥锁,是否继续编辑?')\n .then(() => {\n lockEditor(id)\n .then((res) => {\n locked = true;\n if (res === 'OK') {\n if (timer) clearInterval(timer);\n startInterval();\n } else {\n ElMessageBox.alert('其他人正在编辑该报表,确认后回到列表页').then(() => {\n router.back();\n });\n }\n })\n .catch(() => {\n // 处理网络异常等情况\n ElMessageBox.alert('无法获取编辑锁,请稍后重试');\n });\n })\n .catch(() => {\n router.back();\n })\n .finally(() => {\n visibleAsk = false;\n });\n } else {\n save().then(() => {\n stopInterval();\n visibleAsk = false;\n });\n }\n }\n };\n\n onMounted(() => {\n console.log('mounted');\n window.addEventListener('visibilitychange', visibleHandler, false);\n startInterval();\n });\n\n onBeforeRouteLeave(() => {\n console.log('before route leave');\n window.removeEventListener('visibilitychange', visibleHandler, false);\n stopInterval();\n });\n onBeforeUnmount(() => {\n console.log('before unmount');\n window.removeEventListener('visibilitychange', visibleHandler, false);\n stopInterval();\n });\n}\n"],"names":["lockReq","key","axios","unlockEditor","id","lockEditor","res","useDetailLock","save","router","timer","visibleAsk","startInterval","stopInterval","visibleHandler","e","ElMessageBox","onMounted","onBeforeRouteLeave","onBeforeUnmount"],"mappings":";;;;AAKA,SAASA,EAAQC,GAAK;AACpB,SAAOC,EAAM,QAAQ;AAAA,IACnB,KAAK,iBAAiBD,CAAG;AAAA,IACzB,QAAQ;AAAA,EAAA,CACT;AACH;AAEO,SAASE,EAAaC,GAAI;AAC/B,SAAAA,IAAK,UAAUA,CAAE,IACVF,EAAM,QAAQ;AAAA,IACnB,KAAK,mBAAmBE,CAAE;AAAA,IAC1B,QAAQ;AAAA,EAAA,CACT;AACH;AAEA,eAAsBC,EAAWD,GAAI;AACnC,EAAAA,IAAK,UAAUA,CAAE;AACb,MAAAE,IAAM,MAAMN,EAAQI,CAAE;AAC1B,SAAQE,KAAOA,EAAI,QAAQA,EAAI,KAAK,OAAQ;AAC9C;AAEgB,SAAAC,EAAcH,GAAII,GAAMC,GAAQ;AAC9C,MAAIC,IAAa,MAEbC,IAAa;AAEjB,QAAMC,IAAgB,MAAM;AAC1B,IAAAF,IAAQ,YAAY,MAAM;AACxB,MAAAL,EAAWD,CAAE,EAAE,KAAK,CAACE,MAAQ;AAAA,MACV,CAClB;AAAA,IAAA,GACA,IAAI,KAAK,GAAI;AAAA,EAAA,GAGZO,IAAe,MAAM;AACZ,IAAAV,EAAAC,CAAE,EAAE,KAAK,MAAM;AAAA,IACjB,CACV,GACGM,KACF,cAAcA,CAAK;AAAA,EACrB,GAGII,IAAiB,CAACC,MAAM;AAC5B,IAAKJ,MACUA,IAAA,IACT,SAAS,oBAAoB,YAC/BK,EAAa,QAAQ,yBAAyB,EAC3C,KAAK,MAAM;AACV,MAAAX,EAAWD,CAAE,EACV,KAAK,CAACE,MAAQ;AAEb,QAAIA,MAAQ,QACNI,KAAO,cAAcA,CAAK,GAChBE,OAEdI,EAAa,MAAM,qBAAqB,EAAE,KAAK,MAAM;AACnD,UAAAP,EAAO,KAAK;AAAA,QAAA,CACb;AAAA,MACH,CACD,EACA,MAAM,MAAM;AAEX,QAAAO,EAAa,MAAM,eAAe;AAAA,MAAA,CACnC;AAAA,IAAA,CACJ,EACA,MAAM,MAAM;AACX,MAAAP,EAAO,KAAK;AAAA,IAAA,CACb,EACA,QAAQ,MAAM;AACA,MAAAE,IAAA;AAAA,IAAA,CACd,IAEEH,EAAA,EAAE,KAAK,MAAM;AACH,MAAAK,KACAF,IAAA;AAAA,IAAA,CACd;AAAA,EAEL;AAGF,EAAAM,EAAU,MAAM;AACd,YAAQ,IAAI,SAAS,GACd,OAAA,iBAAiB,oBAAoBH,GAAgB,EAAK,GACnDF;EAAA,CACf,GAEDM,EAAmB,MAAM;AACvB,YAAQ,IAAI,oBAAoB,GACzB,OAAA,oBAAoB,oBAAoBJ,GAAgB,EAAK,GACvDD;EAAA,CACd,GACDM,EAAgB,MAAM;AACpB,YAAQ,IAAI,gBAAgB,GACrB,OAAA,oBAAoB,oBAAoBL,GAAgB,EAAK,GACvDD;EAAA,CACd;AACH;"}
|